@12-apps/ui 1.5.0 → 1.5.1
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 +16 -8
- 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,364 +0,0 @@
|
|
|
1
|
-
import type { Meta, StoryObj } from '@storybook/react-vite';
|
|
2
|
-
import { expect, fn, userEvent, waitFor, within } from 'storybook/test';
|
|
3
|
-
|
|
4
|
-
import { WorkflowStep } from './WorkflowStep';
|
|
5
|
-
import type { WorkflowStepItem } from './WorkflowStep.types';
|
|
6
|
-
|
|
7
|
-
const meta: Meta<typeof WorkflowStep> = {
|
|
8
|
-
title: 'Enhanced/WorkflowStep/Tests',
|
|
9
|
-
component: WorkflowStep,
|
|
10
|
-
parameters: {
|
|
11
|
-
layout: 'centered',
|
|
12
|
-
chromatic: { disableSnapshot: false },
|
|
13
|
-
},
|
|
14
|
-
tags: ['autodocs', 'test', 'component:WorkflowStep'],
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
export default meta;
|
|
18
|
-
type Story = StoryObj<typeof meta>;
|
|
19
|
-
|
|
20
|
-
// Sample test data
|
|
21
|
-
const testSteps: WorkflowStepItem[] = [
|
|
22
|
-
{ title: 'Step One', description: 'First step description', status: 'completed' },
|
|
23
|
-
{ title: 'Step Two', description: 'Second step description', status: 'current' },
|
|
24
|
-
{ title: 'Step Three', description: 'Third step description', status: 'pending' },
|
|
25
|
-
{ title: 'Step Four', description: 'Fourth step description', status: 'pending' },
|
|
26
|
-
];
|
|
27
|
-
|
|
28
|
-
const interactiveSteps: WorkflowStepItem[] = [
|
|
29
|
-
{ title: 'Profile', description: 'Setup profile', status: 'completed' },
|
|
30
|
-
{ title: 'Settings', description: 'Configure settings', status: 'current' },
|
|
31
|
-
{ title: 'Review', description: 'Review changes', status: 'pending' },
|
|
32
|
-
];
|
|
33
|
-
|
|
34
|
-
const errorSteps: WorkflowStepItem[] = [
|
|
35
|
-
{ title: 'Validation', description: 'Validate data', status: 'completed' },
|
|
36
|
-
{ title: 'Processing', description: 'Process request', status: 'error' },
|
|
37
|
-
{ title: 'Complete', description: 'Finish process', status: 'pending' },
|
|
38
|
-
];
|
|
39
|
-
|
|
40
|
-
export const BasicInteraction: Story = {
|
|
41
|
-
args: {
|
|
42
|
-
steps: testSteps,
|
|
43
|
-
currentStep: 1,
|
|
44
|
-
},
|
|
45
|
-
play: async ({ canvasElement }) => {
|
|
46
|
-
const canvas = within(canvasElement);
|
|
47
|
-
|
|
48
|
-
// Check that all steps are rendered
|
|
49
|
-
expect(canvas.getByText('Step One')).toBeInTheDocument();
|
|
50
|
-
expect(canvas.getByText('Step Two')).toBeInTheDocument();
|
|
51
|
-
expect(canvas.getByText('Step Three')).toBeInTheDocument();
|
|
52
|
-
expect(canvas.getByText('Step Four')).toBeInTheDocument();
|
|
53
|
-
|
|
54
|
-
// Check step descriptions are present
|
|
55
|
-
expect(canvas.getByText('First step description')).toBeInTheDocument();
|
|
56
|
-
expect(canvas.getByText('Second step description')).toBeInTheDocument();
|
|
57
|
-
|
|
58
|
-
// Check proper ARIA attributes
|
|
59
|
-
const progressBar = canvas.getByRole('progressbar');
|
|
60
|
-
expect(progressBar).toHaveAttribute('aria-valuenow', '1');
|
|
61
|
-
expect(progressBar).toHaveAttribute('aria-valuemin', '0');
|
|
62
|
-
expect(progressBar).toHaveAttribute('aria-valuemax', '3');
|
|
63
|
-
expect(progressBar).toHaveAttribute('aria-valuetext', 'Step 2 of 4: Step Two');
|
|
64
|
-
},
|
|
65
|
-
};
|
|
66
|
-
|
|
67
|
-
export const StateChangeTest: Story = {
|
|
68
|
-
args: {
|
|
69
|
-
steps: testSteps,
|
|
70
|
-
currentStep: 0,
|
|
71
|
-
interactive: true,
|
|
72
|
-
onStepClick: fn(),
|
|
73
|
-
},
|
|
74
|
-
play: async ({ args, canvasElement }) => {
|
|
75
|
-
const canvas = within(canvasElement);
|
|
76
|
-
|
|
77
|
-
// Find the second step indicator (should be pending initially)
|
|
78
|
-
// Since both indicator and content are buttons, we need to find the specific one
|
|
79
|
-
// Button index 2 should be the second step indicator (0=step1 indicator, 1=step1 content, 2=step2 indicator)
|
|
80
|
-
const step2Button = canvas.getAllByRole('button')[2];
|
|
81
|
-
expect(step2Button).toBeInTheDocument();
|
|
82
|
-
|
|
83
|
-
// Click on step 2
|
|
84
|
-
await userEvent.click(step2Button);
|
|
85
|
-
|
|
86
|
-
// Verify the click callback was called
|
|
87
|
-
await waitFor(() => {
|
|
88
|
-
expect(args.onStepClick).toHaveBeenCalledWith(
|
|
89
|
-
1,
|
|
90
|
-
expect.objectContaining({
|
|
91
|
-
title: 'Step Two',
|
|
92
|
-
description: 'Second step description',
|
|
93
|
-
}),
|
|
94
|
-
);
|
|
95
|
-
});
|
|
96
|
-
},
|
|
97
|
-
};
|
|
98
|
-
|
|
99
|
-
export const KeyboardNavigation: Story = {
|
|
100
|
-
args: {
|
|
101
|
-
steps: interactiveSteps,
|
|
102
|
-
currentStep: 1,
|
|
103
|
-
interactive: true,
|
|
104
|
-
onStepClick: fn(),
|
|
105
|
-
},
|
|
106
|
-
play: async ({ args, canvasElement }) => {
|
|
107
|
-
const canvas = within(canvasElement);
|
|
108
|
-
|
|
109
|
-
const stepButtons = canvas.getAllByRole('button');
|
|
110
|
-
expect(stepButtons).toHaveLength(6); // 3 steps * 2 buttons each (indicator + content)
|
|
111
|
-
|
|
112
|
-
// Focus on first step indicator (index 0)
|
|
113
|
-
await userEvent.click(stepButtons[0]);
|
|
114
|
-
await waitFor(() => expect(stepButtons[0]).toHaveFocus());
|
|
115
|
-
|
|
116
|
-
// Press Enter key
|
|
117
|
-
await userEvent.keyboard('{Enter}');
|
|
118
|
-
|
|
119
|
-
// Verify callback was called
|
|
120
|
-
await waitFor(() => {
|
|
121
|
-
expect(args.onStepClick).toHaveBeenCalledWith(
|
|
122
|
-
0,
|
|
123
|
-
expect.objectContaining({
|
|
124
|
-
title: 'Profile',
|
|
125
|
-
}),
|
|
126
|
-
);
|
|
127
|
-
});
|
|
128
|
-
|
|
129
|
-
// Test Space key on second step indicator (index 2)
|
|
130
|
-
await userEvent.click(stepButtons[2]);
|
|
131
|
-
await userEvent.keyboard(' ');
|
|
132
|
-
|
|
133
|
-
await waitFor(() => {
|
|
134
|
-
expect(args.onStepClick).toHaveBeenCalledWith(
|
|
135
|
-
1,
|
|
136
|
-
expect.objectContaining({
|
|
137
|
-
title: 'Settings',
|
|
138
|
-
}),
|
|
139
|
-
);
|
|
140
|
-
});
|
|
141
|
-
},
|
|
142
|
-
};
|
|
143
|
-
|
|
144
|
-
export const ScreenReaderTest: Story = {
|
|
145
|
-
args: {
|
|
146
|
-
steps: testSteps,
|
|
147
|
-
currentStep: 1,
|
|
148
|
-
},
|
|
149
|
-
play: async ({ canvasElement }) => {
|
|
150
|
-
const canvas = within(canvasElement);
|
|
151
|
-
|
|
152
|
-
// Check main progressbar has proper ARIA labeling
|
|
153
|
-
const progressBar = canvas.getByRole('progressbar');
|
|
154
|
-
expect(progressBar).toHaveAttribute('aria-valuetext', 'Step 2 of 4: Step Two');
|
|
155
|
-
|
|
156
|
-
// Check individual step indicators have proper ARIA labels
|
|
157
|
-
const stepIndicators = canvas.getAllByLabelText(/Step \d+:/);
|
|
158
|
-
expect(stepIndicators).toHaveLength(4);
|
|
159
|
-
|
|
160
|
-
expect(stepIndicators[0]).toHaveAttribute('aria-label', 'Step 1: Step One');
|
|
161
|
-
expect(stepIndicators[1]).toHaveAttribute('aria-label', 'Step 2: Step Two');
|
|
162
|
-
expect(stepIndicators[1]).toHaveAttribute('aria-current', 'step');
|
|
163
|
-
|
|
164
|
-
// Check that completed steps don't have aria-current
|
|
165
|
-
expect(stepIndicators[0]).not.toHaveAttribute('aria-current');
|
|
166
|
-
|
|
167
|
-
// Check that pending steps don't have aria-current
|
|
168
|
-
expect(stepIndicators[2]).not.toHaveAttribute('aria-current');
|
|
169
|
-
},
|
|
170
|
-
};
|
|
171
|
-
|
|
172
|
-
export const FocusManagement: Story = {
|
|
173
|
-
args: {
|
|
174
|
-
steps: interactiveSteps,
|
|
175
|
-
currentStep: 0,
|
|
176
|
-
interactive: true,
|
|
177
|
-
},
|
|
178
|
-
play: async ({ canvasElement }) => {
|
|
179
|
-
const canvas = within(canvasElement);
|
|
180
|
-
|
|
181
|
-
const stepButtons = canvas.getAllByRole('button');
|
|
182
|
-
|
|
183
|
-
// Check all buttons are focusable
|
|
184
|
-
stepButtons.forEach((button) => {
|
|
185
|
-
expect(button).toHaveAttribute('tabIndex', '0');
|
|
186
|
-
});
|
|
187
|
-
|
|
188
|
-
// Test focus navigation
|
|
189
|
-
await userEvent.tab();
|
|
190
|
-
await waitFor(() => expect(stepButtons[0]).toHaveFocus());
|
|
191
|
-
|
|
192
|
-
await userEvent.tab();
|
|
193
|
-
await waitFor(() => expect(stepButtons[1]).toHaveFocus());
|
|
194
|
-
|
|
195
|
-
// Check focus outline is visible
|
|
196
|
-
await waitFor(() => expect(stepButtons[1]).toHaveFocus());
|
|
197
|
-
},
|
|
198
|
-
};
|
|
199
|
-
|
|
200
|
-
export const ResponsiveDesign: Story = {
|
|
201
|
-
args: {
|
|
202
|
-
steps: testSteps,
|
|
203
|
-
currentStep: 1,
|
|
204
|
-
orientation: 'horizontal',
|
|
205
|
-
},
|
|
206
|
-
parameters: {
|
|
207
|
-
viewport: {
|
|
208
|
-
defaultViewport: 'mobile1',
|
|
209
|
-
},
|
|
210
|
-
},
|
|
211
|
-
play: async ({ canvasElement }) => {
|
|
212
|
-
const canvas = within(canvasElement);
|
|
213
|
-
|
|
214
|
-
// Check component renders properly on mobile
|
|
215
|
-
expect(canvas.getByText('Step One')).toBeInTheDocument();
|
|
216
|
-
expect(canvas.getByText('Step Two')).toBeInTheDocument();
|
|
217
|
-
|
|
218
|
-
// Check that progress connectors are present
|
|
219
|
-
const progressBar = canvas.getByRole('progressbar');
|
|
220
|
-
expect(progressBar).toBeInTheDocument();
|
|
221
|
-
},
|
|
222
|
-
};
|
|
223
|
-
|
|
224
|
-
export const ThemeVariations: Story = {
|
|
225
|
-
args: {
|
|
226
|
-
steps: testSteps,
|
|
227
|
-
currentStep: 1,
|
|
228
|
-
color: 'primary',
|
|
229
|
-
variant: 'filled',
|
|
230
|
-
},
|
|
231
|
-
play: async ({ canvasElement }) => {
|
|
232
|
-
const canvas = within(canvasElement);
|
|
233
|
-
|
|
234
|
-
// Check that steps render with theme colors
|
|
235
|
-
const progressBar = canvas.getByRole('progressbar');
|
|
236
|
-
expect(progressBar).toBeInTheDocument();
|
|
237
|
-
|
|
238
|
-
// Check step titles are visible
|
|
239
|
-
expect(canvas.getByText('Step Two')).toBeInTheDocument();
|
|
240
|
-
expect(canvas.getByText('Second step description')).toBeInTheDocument();
|
|
241
|
-
},
|
|
242
|
-
};
|
|
243
|
-
|
|
244
|
-
export const VisualStates: Story = {
|
|
245
|
-
args: {
|
|
246
|
-
steps: errorSteps,
|
|
247
|
-
currentStep: 1,
|
|
248
|
-
},
|
|
249
|
-
play: async ({ canvasElement }) => {
|
|
250
|
-
const canvas = within(canvasElement);
|
|
251
|
-
|
|
252
|
-
// Check all different states are rendered
|
|
253
|
-
expect(canvas.getByText('Validation')).toBeInTheDocument(); // completed
|
|
254
|
-
expect(canvas.getByText('Processing')).toBeInTheDocument(); // error
|
|
255
|
-
expect(canvas.getByText('Complete')).toBeInTheDocument(); // pending
|
|
256
|
-
|
|
257
|
-
// Check descriptions are present
|
|
258
|
-
expect(canvas.getByText('Validate data')).toBeInTheDocument();
|
|
259
|
-
expect(canvas.getByText('Process request')).toBeInTheDocument();
|
|
260
|
-
|
|
261
|
-
// Verify error step has proper status
|
|
262
|
-
const stepIndicators = canvas.getAllByLabelText(/Step \d+:/);
|
|
263
|
-
expect(stepIndicators[1]).toHaveAttribute('aria-label', 'Step 2: Processing');
|
|
264
|
-
},
|
|
265
|
-
};
|
|
266
|
-
|
|
267
|
-
export const PerformanceTest: Story = {
|
|
268
|
-
args: {
|
|
269
|
-
steps: Array.from(
|
|
270
|
-
{ length: 20 },
|
|
271
|
-
(_, i) =>
|
|
272
|
-
({
|
|
273
|
-
title: `Step ${i + 1}`,
|
|
274
|
-
description: `Description for step ${i + 1}`,
|
|
275
|
-
status: i < 5 ? 'completed' : i === 5 ? 'current' : 'pending',
|
|
276
|
-
}) as WorkflowStepItem,
|
|
277
|
-
),
|
|
278
|
-
currentStep: 5,
|
|
279
|
-
},
|
|
280
|
-
play: async ({ canvasElement }) => {
|
|
281
|
-
const canvas = within(canvasElement);
|
|
282
|
-
|
|
283
|
-
// Check that many steps render efficiently
|
|
284
|
-
expect(canvas.getByText('Step 1')).toBeInTheDocument();
|
|
285
|
-
expect(canvas.getByText('Step 6')).toBeInTheDocument(); // current
|
|
286
|
-
expect(canvas.getByText('Step 20')).toBeInTheDocument();
|
|
287
|
-
|
|
288
|
-
// Check progress bar works with many steps
|
|
289
|
-
const progressBar = canvas.getByRole('progressbar');
|
|
290
|
-
expect(progressBar).toHaveAttribute('aria-valuenow', '5');
|
|
291
|
-
expect(progressBar).toHaveAttribute('aria-valuemax', '19');
|
|
292
|
-
},
|
|
293
|
-
};
|
|
294
|
-
|
|
295
|
-
export const EdgeCases: Story = {
|
|
296
|
-
args: {
|
|
297
|
-
steps: [
|
|
298
|
-
{
|
|
299
|
-
title: 'Very Long Step Title That Might Cause Overflow Issues',
|
|
300
|
-
description: 'This is a very long description that should handle text overflow properly',
|
|
301
|
-
status: 'current',
|
|
302
|
-
},
|
|
303
|
-
],
|
|
304
|
-
currentStep: 0,
|
|
305
|
-
},
|
|
306
|
-
play: async ({ canvasElement }) => {
|
|
307
|
-
const canvas = within(canvasElement);
|
|
308
|
-
|
|
309
|
-
// Check long text is handled properly
|
|
310
|
-
expect(
|
|
311
|
-
canvas.getByText('Very Long Step Title That Might Cause Overflow Issues'),
|
|
312
|
-
).toBeInTheDocument();
|
|
313
|
-
expect(
|
|
314
|
-
canvas.getByText('This is a very long description that should handle text overflow properly'),
|
|
315
|
-
).toBeInTheDocument();
|
|
316
|
-
|
|
317
|
-
// Check single step doesn't break the component
|
|
318
|
-
const progressBar = canvas.getByRole('progressbar');
|
|
319
|
-
expect(progressBar).toHaveAttribute('aria-valuemax', '0');
|
|
320
|
-
expect(progressBar).toHaveAttribute('aria-valuenow', '0');
|
|
321
|
-
},
|
|
322
|
-
};
|
|
323
|
-
|
|
324
|
-
export const IntegrationTest: Story = {
|
|
325
|
-
args: {
|
|
326
|
-
steps: testSteps,
|
|
327
|
-
currentStep: 1,
|
|
328
|
-
interactive: true,
|
|
329
|
-
showNumbers: true,
|
|
330
|
-
showProgress: true,
|
|
331
|
-
variant: 'filled',
|
|
332
|
-
color: 'primary',
|
|
333
|
-
size: 'md',
|
|
334
|
-
animated: true,
|
|
335
|
-
onStepClick: fn(),
|
|
336
|
-
},
|
|
337
|
-
play: async ({ args, canvasElement }) => {
|
|
338
|
-
const canvas = within(canvasElement);
|
|
339
|
-
|
|
340
|
-
// Test all features working together
|
|
341
|
-
expect(canvas.getByRole('progressbar')).toBeInTheDocument();
|
|
342
|
-
|
|
343
|
-
// Check step numbers are displayed
|
|
344
|
-
expect(canvas.getByText('1')).toBeInTheDocument();
|
|
345
|
-
expect(canvas.getByText('2')).toBeInTheDocument();
|
|
346
|
-
|
|
347
|
-
// Check interaction works - click on third step indicator (index 4: 2 buttons per step * 2 = 4)
|
|
348
|
-
const stepButtons = canvas.getAllByRole('button');
|
|
349
|
-
await userEvent.click(stepButtons[4]);
|
|
350
|
-
|
|
351
|
-
await waitFor(() => {
|
|
352
|
-
expect(args.onStepClick).toHaveBeenCalledWith(
|
|
353
|
-
2,
|
|
354
|
-
expect.objectContaining({
|
|
355
|
-
title: 'Step Three',
|
|
356
|
-
}),
|
|
357
|
-
);
|
|
358
|
-
});
|
|
359
|
-
|
|
360
|
-
// Verify all step content is present
|
|
361
|
-
expect(canvas.getByText('Step One')).toBeInTheDocument();
|
|
362
|
-
expect(canvas.getByText('First step description')).toBeInTheDocument();
|
|
363
|
-
},
|
|
364
|
-
};
|
|
File without changes
|