@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,252 +0,0 @@
|
|
|
1
|
-
import Face from '@mui/icons-material/Face';
|
|
2
|
-
import Star from '@mui/icons-material/Star';
|
|
3
|
-
import type { Meta, StoryObj } from '@storybook/react-vite';
|
|
4
|
-
|
|
5
|
-
import { Chip } from './Chip';
|
|
6
|
-
|
|
7
|
-
const meta: Meta<typeof Chip> = {
|
|
8
|
-
title: 'DataDisplay/Chip',
|
|
9
|
-
component: Chip,
|
|
10
|
-
parameters: {
|
|
11
|
-
layout: 'centered',
|
|
12
|
-
docs: {
|
|
13
|
-
description: {
|
|
14
|
-
component:
|
|
15
|
-
'Compact tag/label component with optional avatar, selection, and deletion functionality. Supports keyboard navigation and accessibility features.',
|
|
16
|
-
},
|
|
17
|
-
},
|
|
18
|
-
},
|
|
19
|
-
tags: ['autodocs'],
|
|
20
|
-
argTypes: {
|
|
21
|
-
label: {
|
|
22
|
-
control: 'text',
|
|
23
|
-
description: 'Text content displayed in the chip',
|
|
24
|
-
},
|
|
25
|
-
variant: {
|
|
26
|
-
control: 'select',
|
|
27
|
-
options: ['filled', 'outlined'],
|
|
28
|
-
description: 'Visual style variant',
|
|
29
|
-
},
|
|
30
|
-
size: {
|
|
31
|
-
control: 'select',
|
|
32
|
-
options: ['small', 'medium'],
|
|
33
|
-
description: 'Size of the chip',
|
|
34
|
-
},
|
|
35
|
-
color: {
|
|
36
|
-
control: 'text',
|
|
37
|
-
description: 'Theme color token',
|
|
38
|
-
},
|
|
39
|
-
avatarSrc: {
|
|
40
|
-
control: 'text',
|
|
41
|
-
description: 'Source URL for avatar image',
|
|
42
|
-
},
|
|
43
|
-
selected: {
|
|
44
|
-
control: 'boolean',
|
|
45
|
-
description: 'Current selection state',
|
|
46
|
-
},
|
|
47
|
-
selectable: {
|
|
48
|
-
control: 'boolean',
|
|
49
|
-
description: 'Enables selection toggle capability',
|
|
50
|
-
},
|
|
51
|
-
deletable: {
|
|
52
|
-
control: 'boolean',
|
|
53
|
-
description: 'Shows delete button',
|
|
54
|
-
},
|
|
55
|
-
disabled: {
|
|
56
|
-
control: 'boolean',
|
|
57
|
-
description: 'Disables all interactions',
|
|
58
|
-
},
|
|
59
|
-
},
|
|
60
|
-
};
|
|
61
|
-
|
|
62
|
-
export default meta;
|
|
63
|
-
type Story = StoryObj<typeof meta>;
|
|
64
|
-
|
|
65
|
-
export const Default: Story = {
|
|
66
|
-
args: {
|
|
67
|
-
label: 'Default Chip',
|
|
68
|
-
},
|
|
69
|
-
};
|
|
70
|
-
|
|
71
|
-
export const Outlined: Story = {
|
|
72
|
-
args: {
|
|
73
|
-
label: 'Outlined Chip',
|
|
74
|
-
variant: 'outlined',
|
|
75
|
-
},
|
|
76
|
-
};
|
|
77
|
-
|
|
78
|
-
export const WithAvatar: Story = {
|
|
79
|
-
args: {
|
|
80
|
-
label: 'Avatar Chip',
|
|
81
|
-
avatarSrc: 'https://mui.com/static/images/avatar/1.jpg',
|
|
82
|
-
},
|
|
83
|
-
};
|
|
84
|
-
|
|
85
|
-
export const WithIcon: Story = {
|
|
86
|
-
args: {
|
|
87
|
-
label: 'Icon Chip',
|
|
88
|
-
icon: <Face />,
|
|
89
|
-
},
|
|
90
|
-
};
|
|
91
|
-
|
|
92
|
-
export const Selectable: Story = {
|
|
93
|
-
args: {
|
|
94
|
-
label: 'Selectable',
|
|
95
|
-
selectable: true,
|
|
96
|
-
selected: false,
|
|
97
|
-
},
|
|
98
|
-
};
|
|
99
|
-
|
|
100
|
-
export const Selected: Story = {
|
|
101
|
-
args: {
|
|
102
|
-
label: 'Selected',
|
|
103
|
-
selectable: true,
|
|
104
|
-
selected: true,
|
|
105
|
-
},
|
|
106
|
-
};
|
|
107
|
-
|
|
108
|
-
export const Deletable: Story = {
|
|
109
|
-
args: {
|
|
110
|
-
label: 'Deletable',
|
|
111
|
-
deletable: true,
|
|
112
|
-
onDelete: () => {},
|
|
113
|
-
},
|
|
114
|
-
};
|
|
115
|
-
|
|
116
|
-
export const Disabled: Story = {
|
|
117
|
-
args: {
|
|
118
|
-
label: 'Disabled',
|
|
119
|
-
disabled: true,
|
|
120
|
-
},
|
|
121
|
-
};
|
|
122
|
-
|
|
123
|
-
export const SmallSize: Story = {
|
|
124
|
-
args: {
|
|
125
|
-
label: 'Small',
|
|
126
|
-
size: 'small',
|
|
127
|
-
},
|
|
128
|
-
};
|
|
129
|
-
|
|
130
|
-
export const MediumSize: Story = {
|
|
131
|
-
args: {
|
|
132
|
-
label: 'Medium',
|
|
133
|
-
size: 'medium',
|
|
134
|
-
},
|
|
135
|
-
};
|
|
136
|
-
|
|
137
|
-
export const LargeSize: Story = {
|
|
138
|
-
args: {
|
|
139
|
-
label: 'Large',
|
|
140
|
-
size: 'medium',
|
|
141
|
-
},
|
|
142
|
-
};
|
|
143
|
-
|
|
144
|
-
export const AllSizes: Story = {
|
|
145
|
-
render: () => (
|
|
146
|
-
<div style={{ display: 'flex', gap: '8px', alignItems: 'center' }}>
|
|
147
|
-
<Chip label="Small" size="small" />
|
|
148
|
-
<Chip label="Medium" size="medium" />
|
|
149
|
-
<Chip label="Large" size="medium" />
|
|
150
|
-
</div>
|
|
151
|
-
),
|
|
152
|
-
};
|
|
153
|
-
|
|
154
|
-
export const AllVariants: Story = {
|
|
155
|
-
render: () => (
|
|
156
|
-
<div style={{ display: 'flex', gap: '8px', alignItems: 'center' }}>
|
|
157
|
-
<Chip label="Filled" variant="filled" />
|
|
158
|
-
<Chip label="Outlined" variant="outlined" />
|
|
159
|
-
</div>
|
|
160
|
-
),
|
|
161
|
-
};
|
|
162
|
-
|
|
163
|
-
export const AllStates: Story = {
|
|
164
|
-
render: () => (
|
|
165
|
-
<div style={{ display: 'flex', flexWrap: 'wrap', gap: '8px', alignItems: 'center' }}>
|
|
166
|
-
<Chip label="Default" />
|
|
167
|
-
<Chip label="Selected" selectable selected />
|
|
168
|
-
<Chip label="Deletable" deletable onDelete={() => {}} />
|
|
169
|
-
<Chip label="Disabled" disabled />
|
|
170
|
-
<Chip label="With Avatar" avatarSrc="https://mui.com/static/images/avatar/1.jpg" />
|
|
171
|
-
<Chip label="With Icon" icon={<Star />} />
|
|
172
|
-
</div>
|
|
173
|
-
),
|
|
174
|
-
};
|
|
175
|
-
|
|
176
|
-
export const InteractiveStates: Story = {
|
|
177
|
-
render: () => (
|
|
178
|
-
<div style={{ display: 'flex', flexWrap: 'wrap', gap: '8px', alignItems: 'center' }}>
|
|
179
|
-
<Chip label="Clickable" onClick={() => {}} />
|
|
180
|
-
<Chip label="Selectable" selectable />
|
|
181
|
-
<Chip label="Deletable" deletable onDelete={() => {}} />
|
|
182
|
-
<Chip label="Combined" selectable deletable onClick={() => {}} onDelete={() => {}} />
|
|
183
|
-
</div>
|
|
184
|
-
),
|
|
185
|
-
};
|
|
186
|
-
|
|
187
|
-
export const Responsive: Story = {
|
|
188
|
-
render: () => (
|
|
189
|
-
<div style={{ display: 'flex', flexDirection: 'column', gap: '16px' }}>
|
|
190
|
-
<div style={{ display: 'flex', flexWrap: 'wrap', gap: '4px' }}>
|
|
191
|
-
{Array.from({ length: 10 }, (_, i) => (
|
|
192
|
-
<Chip key={i} label={`Tag ${i + 1}`} size="small" />
|
|
193
|
-
))}
|
|
194
|
-
</div>
|
|
195
|
-
<div style={{ display: 'flex', flexWrap: 'wrap', gap: '6px' }}>
|
|
196
|
-
{Array.from({ length: 8 }, (_, i) => (
|
|
197
|
-
<Chip key={i} label={`Category ${i + 1}`} size="medium" deletable onDelete={() => {}} />
|
|
198
|
-
))}
|
|
199
|
-
</div>
|
|
200
|
-
<div style={{ display: 'flex', flexWrap: 'wrap', gap: '8px' }}>
|
|
201
|
-
{Array.from({ length: 5 }, (_, i) => (
|
|
202
|
-
<Chip key={i} label={`Filter ${i + 1}`} size="medium" selectable />
|
|
203
|
-
))}
|
|
204
|
-
</div>
|
|
205
|
-
</div>
|
|
206
|
-
),
|
|
207
|
-
parameters: {
|
|
208
|
-
viewport: {
|
|
209
|
-
viewports: {
|
|
210
|
-
mobile: {
|
|
211
|
-
name: 'Mobile',
|
|
212
|
-
styles: { width: '375px', height: '667px' },
|
|
213
|
-
},
|
|
214
|
-
tablet: {
|
|
215
|
-
name: 'Tablet',
|
|
216
|
-
styles: { width: '768px', height: '1024px' },
|
|
217
|
-
},
|
|
218
|
-
},
|
|
219
|
-
},
|
|
220
|
-
},
|
|
221
|
-
};
|
|
222
|
-
|
|
223
|
-
export const LongContent: Story = {
|
|
224
|
-
args: {
|
|
225
|
-
label: 'This is a very long chip label that demonstrates text truncation behavior',
|
|
226
|
-
deletable: true,
|
|
227
|
-
onDelete: () => {},
|
|
228
|
-
},
|
|
229
|
-
};
|
|
230
|
-
|
|
231
|
-
export const GlassEffect: Story = {
|
|
232
|
-
render: () => (
|
|
233
|
-
<div
|
|
234
|
-
style={{
|
|
235
|
-
background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',
|
|
236
|
-
padding: '40px',
|
|
237
|
-
borderRadius: '12px',
|
|
238
|
-
}}
|
|
239
|
-
>
|
|
240
|
-
<div style={{ display: 'flex', flexWrap: 'wrap', gap: '8px' }}>
|
|
241
|
-
<Chip label="Glass Filled" variant="filled" />
|
|
242
|
-
<Chip label="Glass Outlined" variant="outlined" />
|
|
243
|
-
<Chip
|
|
244
|
-
label="Glass Avatar"
|
|
245
|
-
variant="outlined"
|
|
246
|
-
avatarSrc="https://mui.com/static/images/avatar/1.jpg"
|
|
247
|
-
/>
|
|
248
|
-
<Chip label="Glass Deletable" variant="outlined" deletable onDelete={() => {}} />
|
|
249
|
-
</div>
|
|
250
|
-
</div>
|
|
251
|
-
),
|
|
252
|
-
};
|
|
@@ -1,266 +0,0 @@
|
|
|
1
|
-
import Star from '@mui/icons-material/Star';
|
|
2
|
-
import type { Meta, StoryObj } from '@storybook/react-vite';
|
|
3
|
-
import React from 'react';
|
|
4
|
-
import { expect, fn, Mock, userEvent, waitFor, within } from 'storybook/test';
|
|
5
|
-
|
|
6
|
-
import { Chip } from './Chip';
|
|
7
|
-
|
|
8
|
-
const meta: Meta<typeof Chip> = {
|
|
9
|
-
title: 'DataDisplay/Chip/Tests',
|
|
10
|
-
component: Chip,
|
|
11
|
-
parameters: {
|
|
12
|
-
layout: 'centered',
|
|
13
|
-
chromatic: { disableSnapshot: false },
|
|
14
|
-
},
|
|
15
|
-
tags: ['autodocs', 'test', 'component:Chip'],
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
export default meta;
|
|
19
|
-
type Story = StoryObj<typeof meta>;
|
|
20
|
-
|
|
21
|
-
export const BasicInteraction: Story = {
|
|
22
|
-
args: {
|
|
23
|
-
label: 'Click me',
|
|
24
|
-
onClick: fn(),
|
|
25
|
-
},
|
|
26
|
-
play: async ({ args, canvasElement }) => {
|
|
27
|
-
const canvas = within(canvasElement);
|
|
28
|
-
const chip = canvas.getByRole('button');
|
|
29
|
-
|
|
30
|
-
// Test initial render
|
|
31
|
-
expect(chip).toBeInTheDocument();
|
|
32
|
-
expect(chip).toHaveTextContent('Click me');
|
|
33
|
-
|
|
34
|
-
// Test click interaction
|
|
35
|
-
await userEvent.click(chip);
|
|
36
|
-
expect(args.onClick).toHaveBeenCalledTimes(1);
|
|
37
|
-
},
|
|
38
|
-
};
|
|
39
|
-
|
|
40
|
-
export const KeyboardNavigation: Story = {
|
|
41
|
-
args: {
|
|
42
|
-
label: 'Keyboard Chip',
|
|
43
|
-
selectable: true,
|
|
44
|
-
onClick: fn(),
|
|
45
|
-
},
|
|
46
|
-
play: async ({ args, canvasElement }) => {
|
|
47
|
-
const canvas = within(canvasElement);
|
|
48
|
-
const chip = canvas.getByRole('option');
|
|
49
|
-
|
|
50
|
-
// Tab to the chip rather than calling .focus() directly: the keyboard is how
|
|
51
|
-
// a user reaches it, and the direct call asserts nothing about the component.
|
|
52
|
-
await userEvent.tab();
|
|
53
|
-
await waitFor(() => expect(chip).toHaveFocus());
|
|
54
|
-
|
|
55
|
-
// Test Enter key
|
|
56
|
-
await userEvent.keyboard('{Enter}');
|
|
57
|
-
expect(args.onClick).toHaveBeenCalled();
|
|
58
|
-
|
|
59
|
-
// Clear the mock
|
|
60
|
-
(args.onClick as Mock).mockClear();
|
|
61
|
-
|
|
62
|
-
// Test Space key
|
|
63
|
-
await userEvent.keyboard(' ');
|
|
64
|
-
expect(args.onClick).toHaveBeenCalled();
|
|
65
|
-
},
|
|
66
|
-
};
|
|
67
|
-
|
|
68
|
-
export const FocusManagement: Story = {
|
|
69
|
-
args: {
|
|
70
|
-
label: 'Focus Test',
|
|
71
|
-
onClick: fn(),
|
|
72
|
-
},
|
|
73
|
-
play: async ({ canvasElement }) => {
|
|
74
|
-
const canvas = within(canvasElement);
|
|
75
|
-
const chip = canvas.getByRole('button');
|
|
76
|
-
|
|
77
|
-
// Tab rather than .focus(): the chip is the only focusable node here, so this
|
|
78
|
-
// proves it is keyboard-reachable — a real property of the component, unlike
|
|
79
|
-
// asserting that a direct .focus() call took effect.
|
|
80
|
-
await userEvent.tab();
|
|
81
|
-
await waitFor(() => expect(chip).toHaveFocus());
|
|
82
|
-
},
|
|
83
|
-
};
|
|
84
|
-
|
|
85
|
-
export const ResponsiveDesign: Story = {
|
|
86
|
-
render: () => (
|
|
87
|
-
<div
|
|
88
|
-
style={{
|
|
89
|
-
display: 'flex',
|
|
90
|
-
flexWrap: 'wrap',
|
|
91
|
-
gap: '8px',
|
|
92
|
-
maxWidth: '300px',
|
|
93
|
-
}}
|
|
94
|
-
>
|
|
95
|
-
{Array.from({ length: 8 }, (_, i) => (
|
|
96
|
-
<Chip key={i} label={`Responsive ${i + 1}`} size="small" onClick={() => {}} />
|
|
97
|
-
))}
|
|
98
|
-
</div>
|
|
99
|
-
),
|
|
100
|
-
play: async ({ canvasElement }) => {
|
|
101
|
-
const canvas = within(canvasElement);
|
|
102
|
-
const chips = canvas.getAllByRole('button');
|
|
103
|
-
|
|
104
|
-
// Test responsive wrapping
|
|
105
|
-
expect(chips).toHaveLength(8);
|
|
106
|
-
|
|
107
|
-
// Test chip visibility
|
|
108
|
-
chips.forEach((chip) => {
|
|
109
|
-
expect(chip).toBeVisible();
|
|
110
|
-
});
|
|
111
|
-
},
|
|
112
|
-
parameters: {
|
|
113
|
-
viewport: {
|
|
114
|
-
defaultViewport: 'mobile1',
|
|
115
|
-
},
|
|
116
|
-
},
|
|
117
|
-
};
|
|
118
|
-
|
|
119
|
-
export const ThemeVariations: Story = {
|
|
120
|
-
render: () => (
|
|
121
|
-
<div style={{ display: 'flex', gap: '8px', flexDirection: 'column' }}>
|
|
122
|
-
<div style={{ display: 'flex', gap: '8px' }}>
|
|
123
|
-
<Chip label="Primary" color="primary" onClick={() => {}} />
|
|
124
|
-
<Chip label="Secondary" color="secondary" onClick={() => {}} />
|
|
125
|
-
<Chip label="Success" color="success" onClick={() => {}} />
|
|
126
|
-
<Chip label="Error" color="error" onClick={() => {}} />
|
|
127
|
-
<Chip label="Warning" color="warning" onClick={() => {}} />
|
|
128
|
-
</div>
|
|
129
|
-
<div style={{ display: 'flex', gap: '8px' }}>
|
|
130
|
-
<Chip label="Primary Outlined" color="primary" variant="outlined" onClick={() => {}} />
|
|
131
|
-
<Chip label="Secondary Outlined" color="secondary" variant="outlined" onClick={() => {}} />
|
|
132
|
-
<Chip label="Success Outlined" color="success" variant="outlined" onClick={() => {}} />
|
|
133
|
-
</div>
|
|
134
|
-
</div>
|
|
135
|
-
),
|
|
136
|
-
play: async ({ canvasElement }) => {
|
|
137
|
-
const canvas = within(canvasElement);
|
|
138
|
-
const chips = canvas.getAllByRole('button');
|
|
139
|
-
|
|
140
|
-
// Test theme color application
|
|
141
|
-
expect(chips).toHaveLength(8);
|
|
142
|
-
|
|
143
|
-
// Test filled vs outlined variants
|
|
144
|
-
const filledChips = chips.slice(0, 5);
|
|
145
|
-
const outlinedChips = chips.slice(5, 8);
|
|
146
|
-
|
|
147
|
-
filledChips.forEach((chip) => {
|
|
148
|
-
expect(chip).toBeVisible();
|
|
149
|
-
});
|
|
150
|
-
|
|
151
|
-
outlinedChips.forEach((chip) => {
|
|
152
|
-
expect(chip).toBeVisible();
|
|
153
|
-
});
|
|
154
|
-
},
|
|
155
|
-
};
|
|
156
|
-
|
|
157
|
-
export const VisualStates: Story = {
|
|
158
|
-
render: () => (
|
|
159
|
-
<div style={{ display: 'flex', gap: '8px', flexWrap: 'wrap' }}>
|
|
160
|
-
<Chip label="Normal" onClick={() => {}} dataTestId="chip-normal" />
|
|
161
|
-
<Chip label="Selected" selectable selected onClick={() => {}} dataTestId="chip-selected" />
|
|
162
|
-
<Chip label="Disabled" disabled onClick={() => {}} dataTestId="chip-disabled" />
|
|
163
|
-
<Chip
|
|
164
|
-
label="With Avatar"
|
|
165
|
-
avatarSrc="https://mui.com/static/images/avatar/1.jpg"
|
|
166
|
-
onClick={() => {}}
|
|
167
|
-
dataTestId="chip-avatar"
|
|
168
|
-
/>
|
|
169
|
-
<Chip label="With Icon" icon={<Star />} onClick={() => {}} dataTestId="chip-icon" />
|
|
170
|
-
<Chip label="Deletable" deletable onDelete={() => {}} onClick={() => {}} dataTestId="chip-deletable" />
|
|
171
|
-
</div>
|
|
172
|
-
),
|
|
173
|
-
play: async ({ canvasElement }) => {
|
|
174
|
-
const canvas = within(canvasElement);
|
|
175
|
-
|
|
176
|
-
// Test different visual states using testIds
|
|
177
|
-
const normalChip = canvas.getByTestId('chip-normal');
|
|
178
|
-
expect(normalChip).toBeVisible();
|
|
179
|
-
expect(normalChip).toHaveTextContent('Normal');
|
|
180
|
-
|
|
181
|
-
const selectedChip = canvas.getByTestId('chip-selected');
|
|
182
|
-
expect(selectedChip).toBeVisible();
|
|
183
|
-
expect(selectedChip).toHaveAttribute('aria-selected', 'true');
|
|
184
|
-
|
|
185
|
-
const disabledChip = canvas.getByTestId('chip-disabled');
|
|
186
|
-
expect(disabledChip).toBeInTheDocument();
|
|
187
|
-
expect(disabledChip).toHaveTextContent('Disabled');
|
|
188
|
-
|
|
189
|
-
const avatarChip = canvas.getByTestId('chip-avatar');
|
|
190
|
-
expect(avatarChip).toBeVisible();
|
|
191
|
-
expect(avatarChip).toHaveTextContent('With Avatar');
|
|
192
|
-
|
|
193
|
-
const iconChip = canvas.getByTestId('chip-icon');
|
|
194
|
-
expect(iconChip).toBeVisible();
|
|
195
|
-
expect(iconChip).toHaveTextContent('With Icon');
|
|
196
|
-
|
|
197
|
-
const deletableChip = canvas.getByTestId('chip-deletable');
|
|
198
|
-
expect(deletableChip).toBeVisible();
|
|
199
|
-
expect(deletableChip).toHaveTextContent('Deletable');
|
|
200
|
-
|
|
201
|
-
// Verify the delete icon exists within the deletable chip
|
|
202
|
-
const deleteIcon = canvas.getByTestId('chip-deletable-delete');
|
|
203
|
-
expect(deleteIcon).toBeInTheDocument();
|
|
204
|
-
},
|
|
205
|
-
};
|
|
206
|
-
|
|
207
|
-
export const EdgeCases: Story = {
|
|
208
|
-
render: () => (
|
|
209
|
-
<div style={{ display: 'flex', gap: '8px', flexDirection: 'column' }}>
|
|
210
|
-
<div style={{ display: 'flex', gap: '8px' }}>
|
|
211
|
-
<Chip label="" onClick={() => {}} dataTestId="chip-empty" /> {/* Empty label */}
|
|
212
|
-
<Chip label="A" onClick={() => {}} dataTestId="chip-single" /> {/* Single character */}
|
|
213
|
-
<Chip
|
|
214
|
-
label="This is an extremely long label that should be truncated or handled gracefully by the component"
|
|
215
|
-
onClick={() => {}}
|
|
216
|
-
dataTestId="chip-long"
|
|
217
|
-
/>
|
|
218
|
-
</div>
|
|
219
|
-
<div style={{ display: 'flex', gap: '8px' }}>
|
|
220
|
-
<Chip label="No handlers" onClick={() => {}} dataTestId="chip-no-handlers" /> {/* No click handlers */}
|
|
221
|
-
<Chip
|
|
222
|
-
label="Multiple states"
|
|
223
|
-
selectable
|
|
224
|
-
selected
|
|
225
|
-
deletable
|
|
226
|
-
onDelete={() => {}}
|
|
227
|
-
onClick={() => {}}
|
|
228
|
-
dataTestId="chip-multiple"
|
|
229
|
-
/>
|
|
230
|
-
<Chip label="Special chars: !@#$%^&*()_+-=[]{}|;:,.<>?" onClick={() => {}} dataTestId="chip-special" />
|
|
231
|
-
</div>
|
|
232
|
-
</div>
|
|
233
|
-
),
|
|
234
|
-
play: async ({ canvasElement }) => {
|
|
235
|
-
const canvas = within(canvasElement);
|
|
236
|
-
|
|
237
|
-
// Test empty label handling using testId
|
|
238
|
-
const emptyChip = canvas.getByTestId('chip-empty');
|
|
239
|
-
expect(emptyChip).toBeInTheDocument();
|
|
240
|
-
|
|
241
|
-
// Test single character
|
|
242
|
-
const singleChip = canvas.getByTestId('chip-single');
|
|
243
|
-
expect(singleChip).toBeVisible();
|
|
244
|
-
expect(singleChip).toHaveTextContent('A');
|
|
245
|
-
|
|
246
|
-
// Test long label
|
|
247
|
-
const longChip = canvas.getByTestId('chip-long');
|
|
248
|
-
expect(longChip).toBeVisible();
|
|
249
|
-
expect(longChip).toHaveTextContent(/This is an extremely long label/);
|
|
250
|
-
|
|
251
|
-
// Test special characters
|
|
252
|
-
const specialChip = canvas.getByTestId('chip-special');
|
|
253
|
-
expect(specialChip).toBeVisible();
|
|
254
|
-
expect(specialChip).toHaveTextContent(/Special chars:/);
|
|
255
|
-
|
|
256
|
-
// Test multiple states
|
|
257
|
-
const multipleChip = canvas.getByTestId('chip-multiple');
|
|
258
|
-
expect(multipleChip).toBeVisible();
|
|
259
|
-
expect(multipleChip).toHaveTextContent('Multiple states');
|
|
260
|
-
expect(multipleChip).toHaveAttribute('aria-selected', 'true');
|
|
261
|
-
|
|
262
|
-
// Verify delete icon exists on the multiple states chip
|
|
263
|
-
const deleteIcon = canvas.getByTestId('chip-multiple-delete');
|
|
264
|
-
expect(deleteIcon).toBeInTheDocument();
|
|
265
|
-
},
|
|
266
|
-
};
|