@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,394 +0,0 @@
|
|
|
1
|
-
import type { Meta, StoryObj } from '@storybook/react-vite';
|
|
2
|
-
import React from 'react';
|
|
3
|
-
import { expect, fn, userEvent, waitFor, within } from 'storybook/test';
|
|
4
|
-
|
|
5
|
-
import { MapPreview } from './MapPreview';
|
|
6
|
-
import type { HeatmapPoint,MapMarker } from './MapPreview.types';
|
|
7
|
-
|
|
8
|
-
const meta: Meta<typeof MapPreview> = {
|
|
9
|
-
title: 'Enhanced/MapPreview/Tests',
|
|
10
|
-
component: MapPreview,
|
|
11
|
-
parameters: {
|
|
12
|
-
layout: 'centered',
|
|
13
|
-
chromatic: { disableSnapshot: false },
|
|
14
|
-
// Increase timeout for map loading
|
|
15
|
-
test: {
|
|
16
|
-
timeout: 30000, // 30 seconds for map rendering
|
|
17
|
-
},
|
|
18
|
-
},
|
|
19
|
-
tags: ['autodocs', 'test', 'component:MapPreview'],
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
export default meta;
|
|
23
|
-
type Story = StoryObj<typeof meta>;
|
|
24
|
-
|
|
25
|
-
// Test data
|
|
26
|
-
const defaultCenter = { lat: 37.7749, lng: -122.4194 };
|
|
27
|
-
const testMarkers: MapMarker[] = [
|
|
28
|
-
{
|
|
29
|
-
position: { lat: 37.7749, lng: -122.4194 },
|
|
30
|
-
title: 'Marker 1',
|
|
31
|
-
description: 'First test marker',
|
|
32
|
-
onClick: fn(),
|
|
33
|
-
},
|
|
34
|
-
];
|
|
35
|
-
const testHeatmapData: HeatmapPoint[] = [{ lat: 37.7749, lng: -122.4194, weight: 0.8 }];
|
|
36
|
-
|
|
37
|
-
// 1. Basic Interaction Tests
|
|
38
|
-
export const BasicInteraction: Story = {
|
|
39
|
-
render: () => (
|
|
40
|
-
<MapPreview center={defaultCenter} interactive={true} showControls={true} zoom={15} />
|
|
41
|
-
),
|
|
42
|
-
play: async ({ canvasElement }) => {
|
|
43
|
-
const canvas = within(canvasElement);
|
|
44
|
-
|
|
45
|
-
// Wait for map container to render with extended timeout
|
|
46
|
-
await waitFor(
|
|
47
|
-
async () => {
|
|
48
|
-
const container = await canvas.findByTestId('map-preview-container');
|
|
49
|
-
expect(container).toBeInTheDocument();
|
|
50
|
-
return container;
|
|
51
|
-
},
|
|
52
|
-
{ timeout: 10000 }
|
|
53
|
-
);
|
|
54
|
-
|
|
55
|
-
// Wait for static map view to render
|
|
56
|
-
await waitFor(
|
|
57
|
-
async () => {
|
|
58
|
-
const staticMap = await canvas.findByTestId('static-map-view');
|
|
59
|
-
expect(staticMap).toBeInTheDocument();
|
|
60
|
-
},
|
|
61
|
-
{ timeout: 10000 }
|
|
62
|
-
);
|
|
63
|
-
|
|
64
|
-
// Verify map controls are present
|
|
65
|
-
const controls = await canvas.findByTestId('map-controls');
|
|
66
|
-
expect(controls).toBeInTheDocument();
|
|
67
|
-
|
|
68
|
-
// Verify coordinates display
|
|
69
|
-
const coordsDisplay = await canvas.findByTestId('coordinates-display');
|
|
70
|
-
expect(coordsDisplay).toBeInTheDocument();
|
|
71
|
-
|
|
72
|
-
// Mark test as passed
|
|
73
|
-
const statusElement = document.createElement('div');
|
|
74
|
-
statusElement.setAttribute('aria-label', 'Status of the test run');
|
|
75
|
-
statusElement.textContent = 'PASS';
|
|
76
|
-
canvasElement.appendChild(statusElement);
|
|
77
|
-
},
|
|
78
|
-
};
|
|
79
|
-
|
|
80
|
-
// 2. Marker Interaction Tests
|
|
81
|
-
export const MarkerInteraction: Story = {
|
|
82
|
-
render: () => <MapPreview center={defaultCenter} markers={testMarkers} interactive={true} />,
|
|
83
|
-
play: async ({ canvasElement }) => {
|
|
84
|
-
const canvas = within(canvasElement);
|
|
85
|
-
|
|
86
|
-
// Wait for map to render first
|
|
87
|
-
await waitFor(
|
|
88
|
-
async () => {
|
|
89
|
-
const container = await canvas.findByTestId('map-preview-container');
|
|
90
|
-
expect(container).toBeInTheDocument();
|
|
91
|
-
},
|
|
92
|
-
{ timeout: 10000 }
|
|
93
|
-
);
|
|
94
|
-
|
|
95
|
-
// Test marker renders with extended wait
|
|
96
|
-
await waitFor(
|
|
97
|
-
async () => {
|
|
98
|
-
const markerElement = await canvas.findByTestId('map-marker-0');
|
|
99
|
-
expect(markerElement).toBeInTheDocument();
|
|
100
|
-
return markerElement;
|
|
101
|
-
},
|
|
102
|
-
{ timeout: 10000 }
|
|
103
|
-
);
|
|
104
|
-
|
|
105
|
-
// Mark test as passed
|
|
106
|
-
const statusElement = document.createElement('div');
|
|
107
|
-
statusElement.setAttribute('aria-label', 'Status of the test run');
|
|
108
|
-
statusElement.textContent = 'PASS';
|
|
109
|
-
canvasElement.appendChild(statusElement);
|
|
110
|
-
},
|
|
111
|
-
};
|
|
112
|
-
|
|
113
|
-
// 3. Keyboard Navigation Tests
|
|
114
|
-
export const KeyboardNavigation: Story = {
|
|
115
|
-
render: () => <MapPreview center={defaultCenter} showControls={true} interactive={true} />,
|
|
116
|
-
play: async ({ canvasElement }) => {
|
|
117
|
-
const canvas = within(canvasElement);
|
|
118
|
-
|
|
119
|
-
// Wait for map to render and test container is focusable
|
|
120
|
-
await waitFor(
|
|
121
|
-
async () => {
|
|
122
|
-
const container = await canvas.findByTestId('map-preview-container');
|
|
123
|
-
expect(container).toBeInTheDocument();
|
|
124
|
-
expect(container).toHaveAttribute('tabIndex', '0');
|
|
125
|
-
return container;
|
|
126
|
-
},
|
|
127
|
-
{ timeout: 10000 }
|
|
128
|
-
);
|
|
129
|
-
|
|
130
|
-
// Mark test as passed
|
|
131
|
-
const statusElement = document.createElement('div');
|
|
132
|
-
statusElement.setAttribute('aria-label', 'Status of the test run');
|
|
133
|
-
statusElement.textContent = 'PASS';
|
|
134
|
-
canvasElement.appendChild(statusElement);
|
|
135
|
-
},
|
|
136
|
-
};
|
|
137
|
-
|
|
138
|
-
// 4. Screen Reader Tests
|
|
139
|
-
export const ScreenReader: Story = {
|
|
140
|
-
render: () => <MapPreview center={defaultCenter} showControls={true} />,
|
|
141
|
-
play: async ({ canvasElement }) => {
|
|
142
|
-
const canvas = within(canvasElement);
|
|
143
|
-
|
|
144
|
-
// Wait for map and test ARIA labels
|
|
145
|
-
await waitFor(
|
|
146
|
-
async () => {
|
|
147
|
-
const container = await canvas.findByTestId('map-preview-container');
|
|
148
|
-
expect(container).toBeInTheDocument();
|
|
149
|
-
expect(container).toHaveAttribute('role', 'img');
|
|
150
|
-
expect(container).toHaveAttribute('aria-label');
|
|
151
|
-
return container;
|
|
152
|
-
},
|
|
153
|
-
{ timeout: 10000 }
|
|
154
|
-
);
|
|
155
|
-
|
|
156
|
-
// Mark test as passed
|
|
157
|
-
const statusElement = document.createElement('div');
|
|
158
|
-
statusElement.setAttribute('aria-label', 'Status of the test run');
|
|
159
|
-
statusElement.textContent = 'PASS';
|
|
160
|
-
canvasElement.appendChild(statusElement);
|
|
161
|
-
},
|
|
162
|
-
};
|
|
163
|
-
|
|
164
|
-
// 5. Focus Management Tests
|
|
165
|
-
export const FocusManagement: Story = {
|
|
166
|
-
render: () => <MapPreview center={defaultCenter} showControls={true} />,
|
|
167
|
-
play: async ({ canvasElement }) => {
|
|
168
|
-
const canvas = within(canvasElement);
|
|
169
|
-
|
|
170
|
-
// Wait for map and test initial focus
|
|
171
|
-
const mapContainer = await waitFor(
|
|
172
|
-
async () => {
|
|
173
|
-
const container = await canvas.findByTestId('map-preview-container');
|
|
174
|
-
expect(container).toBeInTheDocument();
|
|
175
|
-
return container;
|
|
176
|
-
},
|
|
177
|
-
{ timeout: 10000 }
|
|
178
|
-
);
|
|
179
|
-
|
|
180
|
-
// The container carries tabIndex={0}, so clicking it should focus it.
|
|
181
|
-
await userEvent.click(mapContainer);
|
|
182
|
-
await waitFor(() => expect(mapContainer).toHaveFocus());
|
|
183
|
-
|
|
184
|
-
// Mark test as passed
|
|
185
|
-
const statusElement = document.createElement('div');
|
|
186
|
-
statusElement.setAttribute('aria-label', 'Status of the test run');
|
|
187
|
-
statusElement.textContent = 'PASS';
|
|
188
|
-
canvasElement.appendChild(statusElement);
|
|
189
|
-
},
|
|
190
|
-
};
|
|
191
|
-
|
|
192
|
-
// 6. Responsive Design Tests
|
|
193
|
-
export const ResponsiveDesign: Story = {
|
|
194
|
-
render: () => <MapPreview center={defaultCenter} height="300px" showControls={true} />,
|
|
195
|
-
parameters: {
|
|
196
|
-
viewport: {
|
|
197
|
-
defaultViewport: 'mobile1',
|
|
198
|
-
},
|
|
199
|
-
},
|
|
200
|
-
play: async ({ canvasElement }) => {
|
|
201
|
-
const canvas = within(canvasElement);
|
|
202
|
-
|
|
203
|
-
// Wait for map to render in mobile viewport
|
|
204
|
-
await waitFor(
|
|
205
|
-
async () => {
|
|
206
|
-
const container = await canvas.findByTestId('map-preview-container');
|
|
207
|
-
expect(container).toBeInTheDocument();
|
|
208
|
-
},
|
|
209
|
-
{ timeout: 10000 }
|
|
210
|
-
);
|
|
211
|
-
|
|
212
|
-
// Mark test as passed
|
|
213
|
-
const statusElement = document.createElement('div');
|
|
214
|
-
statusElement.setAttribute('aria-label', 'Status of the test run');
|
|
215
|
-
statusElement.textContent = 'PASS';
|
|
216
|
-
canvasElement.appendChild(statusElement);
|
|
217
|
-
},
|
|
218
|
-
};
|
|
219
|
-
|
|
220
|
-
// 7. Theme Variation Tests
|
|
221
|
-
export const ThemeVariations: Story = {
|
|
222
|
-
render: () => <MapPreview center={defaultCenter} variant="glass" showControls={true} />,
|
|
223
|
-
parameters: {
|
|
224
|
-
backgrounds: { default: 'dark' },
|
|
225
|
-
},
|
|
226
|
-
play: async ({ canvasElement }) => {
|
|
227
|
-
const canvas = within(canvasElement);
|
|
228
|
-
|
|
229
|
-
// Wait for glass variant to render
|
|
230
|
-
await waitFor(
|
|
231
|
-
async () => {
|
|
232
|
-
const container = await canvas.findByTestId('map-preview-container');
|
|
233
|
-
expect(container).toBeInTheDocument();
|
|
234
|
-
},
|
|
235
|
-
{ timeout: 10000 }
|
|
236
|
-
);
|
|
237
|
-
|
|
238
|
-
// Mark test as passed
|
|
239
|
-
const statusElement = document.createElement('div');
|
|
240
|
-
statusElement.setAttribute('aria-label', 'Status of the test run');
|
|
241
|
-
statusElement.textContent = 'PASS';
|
|
242
|
-
canvasElement.appendChild(statusElement);
|
|
243
|
-
},
|
|
244
|
-
};
|
|
245
|
-
|
|
246
|
-
// 8. Visual State Tests
|
|
247
|
-
export const VisualStates: Story = {
|
|
248
|
-
render: () => <MapPreview center={defaultCenter} mapType="satellite" showControls={true} />,
|
|
249
|
-
play: async ({ canvasElement }) => {
|
|
250
|
-
const canvas = within(canvasElement);
|
|
251
|
-
|
|
252
|
-
// Wait for static map view to render with satellite type
|
|
253
|
-
await waitFor(
|
|
254
|
-
async () => {
|
|
255
|
-
const staticMap = await canvas.findByTestId('static-map-view');
|
|
256
|
-
expect(staticMap).toBeInTheDocument();
|
|
257
|
-
},
|
|
258
|
-
{ timeout: 10000 }
|
|
259
|
-
);
|
|
260
|
-
|
|
261
|
-
// Mark test as passed
|
|
262
|
-
const statusElement = document.createElement('div');
|
|
263
|
-
statusElement.setAttribute('aria-label', 'Status of the test run');
|
|
264
|
-
statusElement.textContent = 'PASS';
|
|
265
|
-
canvasElement.appendChild(statusElement);
|
|
266
|
-
},
|
|
267
|
-
};
|
|
268
|
-
|
|
269
|
-
// 9. Performance Tests
|
|
270
|
-
export const Performance: Story = {
|
|
271
|
-
render: () => (
|
|
272
|
-
<MapPreview
|
|
273
|
-
center={defaultCenter}
|
|
274
|
-
// Spread deterministically around the centre. These were random offsets,
|
|
275
|
-
// which meant the marker layout — and any snapshot of it — differed on
|
|
276
|
-
// every run.
|
|
277
|
-
markers={Array.from({ length: 5 }, (_, i) => ({
|
|
278
|
-
position: {
|
|
279
|
-
lat: defaultCenter.lat + (i - 2) * 0.02,
|
|
280
|
-
lng: defaultCenter.lng + (2 - i) * 0.02,
|
|
281
|
-
},
|
|
282
|
-
title: `Marker ${i + 1}`,
|
|
283
|
-
}))}
|
|
284
|
-
showControls={true}
|
|
285
|
-
/>
|
|
286
|
-
),
|
|
287
|
-
play: async ({ canvasElement }) => {
|
|
288
|
-
const canvas = within(canvasElement);
|
|
289
|
-
|
|
290
|
-
// Wait for map to render with multiple markers
|
|
291
|
-
await waitFor(
|
|
292
|
-
async () => {
|
|
293
|
-
const container = await canvas.findByTestId('map-preview-container');
|
|
294
|
-
expect(container).toBeInTheDocument();
|
|
295
|
-
},
|
|
296
|
-
{ timeout: 10000 }
|
|
297
|
-
);
|
|
298
|
-
|
|
299
|
-
// Verify all markers rendered
|
|
300
|
-
await waitFor(
|
|
301
|
-
async () => {
|
|
302
|
-
const markers = Array.from({ length: 5 }, (_, i) =>
|
|
303
|
-
canvas.queryByTestId(`map-marker-${i}`)
|
|
304
|
-
);
|
|
305
|
-
const renderedMarkers = markers.filter(m => m !== null);
|
|
306
|
-
expect(renderedMarkers.length).toBe(5);
|
|
307
|
-
},
|
|
308
|
-
{ timeout: 10000 }
|
|
309
|
-
);
|
|
310
|
-
|
|
311
|
-
// Mark test as passed
|
|
312
|
-
const statusElement = document.createElement('div');
|
|
313
|
-
statusElement.setAttribute('aria-label', 'Status of the test run');
|
|
314
|
-
statusElement.textContent = 'PASS';
|
|
315
|
-
canvasElement.appendChild(statusElement);
|
|
316
|
-
},
|
|
317
|
-
};
|
|
318
|
-
|
|
319
|
-
// 10. Edge Cases Tests
|
|
320
|
-
export const EdgeCases: Story = {
|
|
321
|
-
render: () => (
|
|
322
|
-
<MapPreview
|
|
323
|
-
center={{ lat: 90, lng: 180 }}
|
|
324
|
-
zoom={20}
|
|
325
|
-
height="100px"
|
|
326
|
-
markers={[]}
|
|
327
|
-
showControls={true}
|
|
328
|
-
/>
|
|
329
|
-
),
|
|
330
|
-
play: async ({ canvasElement }) => {
|
|
331
|
-
const canvas = within(canvasElement);
|
|
332
|
-
|
|
333
|
-
// Wait for map with extreme coordinates to render
|
|
334
|
-
await waitFor(
|
|
335
|
-
async () => {
|
|
336
|
-
const container = await canvas.findByTestId('map-preview-container');
|
|
337
|
-
expect(container).toBeInTheDocument();
|
|
338
|
-
},
|
|
339
|
-
{ timeout: 10000 }
|
|
340
|
-
);
|
|
341
|
-
|
|
342
|
-
// Mark test as passed
|
|
343
|
-
const statusElement = document.createElement('div');
|
|
344
|
-
statusElement.setAttribute('aria-label', 'Status of the test run');
|
|
345
|
-
statusElement.textContent = 'PASS';
|
|
346
|
-
canvasElement.appendChild(statusElement);
|
|
347
|
-
},
|
|
348
|
-
};
|
|
349
|
-
|
|
350
|
-
// 11. Integration Tests
|
|
351
|
-
export const Integration: Story = {
|
|
352
|
-
render: () => (
|
|
353
|
-
<MapPreview
|
|
354
|
-
center={defaultCenter}
|
|
355
|
-
markers={testMarkers}
|
|
356
|
-
showRoute={true}
|
|
357
|
-
showHeatmap={true}
|
|
358
|
-
heatmapData={testHeatmapData}
|
|
359
|
-
showControls={true}
|
|
360
|
-
interactive={true}
|
|
361
|
-
/>
|
|
362
|
-
),
|
|
363
|
-
play: async ({ canvasElement }) => {
|
|
364
|
-
const canvas = within(canvasElement);
|
|
365
|
-
|
|
366
|
-
// Wait for map with all features to render
|
|
367
|
-
await waitFor(
|
|
368
|
-
async () => {
|
|
369
|
-
const container = await canvas.findByTestId('map-preview-container');
|
|
370
|
-
expect(container).toBeInTheDocument();
|
|
371
|
-
},
|
|
372
|
-
{ timeout: 10000 }
|
|
373
|
-
);
|
|
374
|
-
|
|
375
|
-
// Verify marker rendered
|
|
376
|
-
await waitFor(
|
|
377
|
-
async () => {
|
|
378
|
-
const marker = await canvas.findByTestId('map-marker-0');
|
|
379
|
-
expect(marker).toBeInTheDocument();
|
|
380
|
-
},
|
|
381
|
-
{ timeout: 10000 }
|
|
382
|
-
);
|
|
383
|
-
|
|
384
|
-
// Verify controls rendered
|
|
385
|
-
const controls = await canvas.findByTestId('map-controls');
|
|
386
|
-
expect(controls).toBeInTheDocument();
|
|
387
|
-
|
|
388
|
-
// Mark test as passed
|
|
389
|
-
const statusElement = document.createElement('div');
|
|
390
|
-
statusElement.setAttribute('aria-label', 'Status of the test run');
|
|
391
|
-
statusElement.textContent = 'PASS';
|
|
392
|
-
canvasElement.appendChild(statusElement);
|
|
393
|
-
},
|
|
394
|
-
};
|
|
@@ -1,295 +0,0 @@
|
|
|
1
|
-
import { Button, List, ListItem, ListItemText,Stack, Typography } from '@mui/material';
|
|
2
|
-
import type { Meta, StoryObj } from '@storybook/react-vite';
|
|
3
|
-
import React from 'react';
|
|
4
|
-
|
|
5
|
-
import { Popover } from './Popover';
|
|
6
|
-
|
|
7
|
-
const meta: Meta<typeof Popover> = {
|
|
8
|
-
title: 'DataDisplay/Popover',
|
|
9
|
-
component: Popover,
|
|
10
|
-
parameters: {
|
|
11
|
-
layout: 'centered',
|
|
12
|
-
},
|
|
13
|
-
tags: ['autodocs', 'component:Popover'],
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
export default meta;
|
|
17
|
-
type Story = StoryObj<typeof meta>;
|
|
18
|
-
|
|
19
|
-
// Wrapper for interactive stories
|
|
20
|
-
const PopoverDemo = ({
|
|
21
|
-
children,
|
|
22
|
-
...props
|
|
23
|
-
}: {
|
|
24
|
-
children?: React.ReactNode;
|
|
25
|
-
[key: string]: unknown;
|
|
26
|
-
}) => {
|
|
27
|
-
const [anchorEl, setAnchorEl] = React.useState<HTMLButtonElement | null>(null);
|
|
28
|
-
const open = Boolean(anchorEl);
|
|
29
|
-
|
|
30
|
-
const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {
|
|
31
|
-
setAnchorEl(event.currentTarget);
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
const handleClose = () => {
|
|
35
|
-
setAnchorEl(null);
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
return (
|
|
39
|
-
<>
|
|
40
|
-
<Button variant="contained" onClick={handleClick}>
|
|
41
|
-
Open Popover
|
|
42
|
-
</Button>
|
|
43
|
-
<Popover
|
|
44
|
-
open={open}
|
|
45
|
-
anchorEl={anchorEl}
|
|
46
|
-
onClose={handleClose}
|
|
47
|
-
anchorOrigin={{
|
|
48
|
-
vertical: 'bottom',
|
|
49
|
-
horizontal: 'left',
|
|
50
|
-
}}
|
|
51
|
-
{...props}
|
|
52
|
-
>
|
|
53
|
-
{children}
|
|
54
|
-
</Popover>
|
|
55
|
-
</>
|
|
56
|
-
);
|
|
57
|
-
};
|
|
58
|
-
|
|
59
|
-
export const Default: Story = {
|
|
60
|
-
render: () => (
|
|
61
|
-
<PopoverDemo>
|
|
62
|
-
<Typography sx={{ p: 2 }}>This is a basic popover content.</Typography>
|
|
63
|
-
</PopoverDemo>
|
|
64
|
-
),
|
|
65
|
-
};
|
|
66
|
-
|
|
67
|
-
export const Variants: Story = {
|
|
68
|
-
render: () => (
|
|
69
|
-
<Stack direction="row" spacing={2}>
|
|
70
|
-
<PopoverDemo variant="default">
|
|
71
|
-
<Typography sx={{ p: 2 }}>Default variant</Typography>
|
|
72
|
-
</PopoverDemo>
|
|
73
|
-
<PopoverDemo variant="glass">
|
|
74
|
-
<Typography sx={{ p: 2 }}>Glass variant</Typography>
|
|
75
|
-
</PopoverDemo>
|
|
76
|
-
<PopoverDemo variant="arrow">
|
|
77
|
-
<Typography sx={{ p: 2 }}>Arrow variant</Typography>
|
|
78
|
-
</PopoverDemo>
|
|
79
|
-
</Stack>
|
|
80
|
-
),
|
|
81
|
-
};
|
|
82
|
-
|
|
83
|
-
export const WithEffects: Story = {
|
|
84
|
-
render: () => (
|
|
85
|
-
<Stack direction="row" spacing={2}>
|
|
86
|
-
<PopoverDemo glow>
|
|
87
|
-
<Typography sx={{ p: 2 }}>Glow effect</Typography>
|
|
88
|
-
</PopoverDemo>
|
|
89
|
-
<PopoverDemo pulse>
|
|
90
|
-
<Typography sx={{ p: 2 }}>Pulse effect</Typography>
|
|
91
|
-
</PopoverDemo>
|
|
92
|
-
</Stack>
|
|
93
|
-
),
|
|
94
|
-
};
|
|
95
|
-
|
|
96
|
-
export const ComplexContent: Story = {
|
|
97
|
-
render: () => (
|
|
98
|
-
<PopoverDemo variant="glass" maxWidth={300}>
|
|
99
|
-
<div style={{ padding: 16 }}>
|
|
100
|
-
<Typography variant="h6" gutterBottom>
|
|
101
|
-
Menu Options
|
|
102
|
-
</Typography>
|
|
103
|
-
<List dense>
|
|
104
|
-
<ListItem button>
|
|
105
|
-
<ListItemText primary="Profile Settings" />
|
|
106
|
-
</ListItem>
|
|
107
|
-
<ListItem button>
|
|
108
|
-
<ListItemText primary="Account Security" />
|
|
109
|
-
</ListItem>
|
|
110
|
-
<ListItem button>
|
|
111
|
-
<ListItemText primary="Notifications" />
|
|
112
|
-
</ListItem>
|
|
113
|
-
<ListItem button>
|
|
114
|
-
<ListItemText primary="Sign Out" />
|
|
115
|
-
</ListItem>
|
|
116
|
-
</List>
|
|
117
|
-
</div>
|
|
118
|
-
</PopoverDemo>
|
|
119
|
-
),
|
|
120
|
-
};
|
|
121
|
-
|
|
122
|
-
export const GlassEffect: Story = {
|
|
123
|
-
render: () => (
|
|
124
|
-
<PopoverDemo variant="glass" glow>
|
|
125
|
-
<Typography sx={{ p: 3 }}>Glass morphism with glow effect</Typography>
|
|
126
|
-
</PopoverDemo>
|
|
127
|
-
),
|
|
128
|
-
};
|
|
129
|
-
|
|
130
|
-
export const WithArrow: Story = {
|
|
131
|
-
render: () => (
|
|
132
|
-
<PopoverDemo variant="arrow">
|
|
133
|
-
<Typography sx={{ p: 2 }}>Popover with arrow pointing to anchor</Typography>
|
|
134
|
-
</PopoverDemo>
|
|
135
|
-
),
|
|
136
|
-
};
|
|
137
|
-
|
|
138
|
-
export const DifferentSizes: Story = {
|
|
139
|
-
render: () => (
|
|
140
|
-
<Stack direction="row" spacing={2}>
|
|
141
|
-
<PopoverDemo maxWidth={200}>
|
|
142
|
-
<Typography sx={{ p: 2 }}>Small popover (200px max)</Typography>
|
|
143
|
-
</PopoverDemo>
|
|
144
|
-
<PopoverDemo maxWidth={400}>
|
|
145
|
-
<Typography sx={{ p: 2 }}>Medium popover (400px max)</Typography>
|
|
146
|
-
</PopoverDemo>
|
|
147
|
-
<PopoverDemo maxWidth={600}>
|
|
148
|
-
<Typography sx={{ p: 2 }}>Large popover (600px max)</Typography>
|
|
149
|
-
</PopoverDemo>
|
|
150
|
-
</Stack>
|
|
151
|
-
),
|
|
152
|
-
};
|
|
153
|
-
|
|
154
|
-
export const CombinedEffects: Story = {
|
|
155
|
-
render: () => (
|
|
156
|
-
<PopoverDemo variant="glass" glow pulse>
|
|
157
|
-
<Typography sx={{ p: 3 }}>Combined glass, glow, and pulse effects</Typography>
|
|
158
|
-
</PopoverDemo>
|
|
159
|
-
),
|
|
160
|
-
};
|
|
161
|
-
|
|
162
|
-
export const EmptyState: Story = {
|
|
163
|
-
render: () => (
|
|
164
|
-
<PopoverDemo>
|
|
165
|
-
<div style={{ padding: 24, textAlign: 'center' }}>
|
|
166
|
-
<Typography color="text.secondary">No content available</Typography>
|
|
167
|
-
</div>
|
|
168
|
-
</PopoverDemo>
|
|
169
|
-
),
|
|
170
|
-
};
|
|
171
|
-
|
|
172
|
-
export const LoadingState: Story = {
|
|
173
|
-
render: () => (
|
|
174
|
-
<PopoverDemo>
|
|
175
|
-
<div style={{ padding: 24, textAlign: 'center' }}>
|
|
176
|
-
<Typography>Loading...</Typography>
|
|
177
|
-
</div>
|
|
178
|
-
</PopoverDemo>
|
|
179
|
-
),
|
|
180
|
-
};
|
|
181
|
-
|
|
182
|
-
export const ErrorState: Story = {
|
|
183
|
-
render: () => (
|
|
184
|
-
<PopoverDemo>
|
|
185
|
-
<div style={{ padding: 24, textAlign: 'center' }}>
|
|
186
|
-
<Typography color="error">Error loading content</Typography>
|
|
187
|
-
</div>
|
|
188
|
-
</PopoverDemo>
|
|
189
|
-
),
|
|
190
|
-
};
|
|
191
|
-
|
|
192
|
-
// Required story exports for validation
|
|
193
|
-
export const AllVariants: Story = {
|
|
194
|
-
render: () => (
|
|
195
|
-
<Stack direction="column" spacing={4} alignItems="center">
|
|
196
|
-
<PopoverDemo variant="default">
|
|
197
|
-
<Typography sx={{ p: 2 }}>Default variant</Typography>
|
|
198
|
-
</PopoverDemo>
|
|
199
|
-
<PopoverDemo variant="glass">
|
|
200
|
-
<Typography sx={{ p: 2 }}>Glass variant with translucent effect</Typography>
|
|
201
|
-
</PopoverDemo>
|
|
202
|
-
<PopoverDemo variant="arrow">
|
|
203
|
-
<Typography sx={{ p: 2 }}>Arrow variant pointing to anchor</Typography>
|
|
204
|
-
</PopoverDemo>
|
|
205
|
-
</Stack>
|
|
206
|
-
),
|
|
207
|
-
};
|
|
208
|
-
|
|
209
|
-
export const AllSizes: Story = {
|
|
210
|
-
render: () => (
|
|
211
|
-
<Stack direction="column" spacing={4} alignItems="center">
|
|
212
|
-
<PopoverDemo maxWidth={150}>
|
|
213
|
-
<Typography sx={{ p: 2 }}>Extra small (150px)</Typography>
|
|
214
|
-
</PopoverDemo>
|
|
215
|
-
<PopoverDemo maxWidth={250}>
|
|
216
|
-
<Typography sx={{ p: 2 }}>Small (250px)</Typography>
|
|
217
|
-
</PopoverDemo>
|
|
218
|
-
<PopoverDemo maxWidth={400}>
|
|
219
|
-
<Typography sx={{ p: 2 }}>Medium (400px)</Typography>
|
|
220
|
-
</PopoverDemo>
|
|
221
|
-
<PopoverDemo maxWidth={600}>
|
|
222
|
-
<Typography sx={{ p: 3 }}>Large (600px)</Typography>
|
|
223
|
-
</PopoverDemo>
|
|
224
|
-
<PopoverDemo maxWidth={800}>
|
|
225
|
-
<Typography sx={{ p: 4 }}>Extra large (800px)</Typography>
|
|
226
|
-
</PopoverDemo>
|
|
227
|
-
</Stack>
|
|
228
|
-
),
|
|
229
|
-
};
|
|
230
|
-
|
|
231
|
-
export const AllStates: Story = {
|
|
232
|
-
render: () => (
|
|
233
|
-
<Stack direction="column" spacing={4} alignItems="center">
|
|
234
|
-
<PopoverDemo>
|
|
235
|
-
<Typography sx={{ p: 2 }}>Normal state</Typography>
|
|
236
|
-
</PopoverDemo>
|
|
237
|
-
<PopoverDemo>
|
|
238
|
-
<div style={{ padding: 24, textAlign: 'center' }}>
|
|
239
|
-
<Typography>Loading...</Typography>
|
|
240
|
-
</div>
|
|
241
|
-
</PopoverDemo>
|
|
242
|
-
<PopoverDemo>
|
|
243
|
-
<div style={{ padding: 24, textAlign: 'center' }}>
|
|
244
|
-
<Typography color="error">Error state</Typography>
|
|
245
|
-
</div>
|
|
246
|
-
</PopoverDemo>
|
|
247
|
-
<PopoverDemo>
|
|
248
|
-
<div style={{ padding: 24, textAlign: 'center' }}>
|
|
249
|
-
<Typography color="text.secondary">Empty state</Typography>
|
|
250
|
-
</div>
|
|
251
|
-
</PopoverDemo>
|
|
252
|
-
</Stack>
|
|
253
|
-
),
|
|
254
|
-
};
|
|
255
|
-
|
|
256
|
-
export const InteractiveStates: Story = {
|
|
257
|
-
render: () => (
|
|
258
|
-
<Stack direction="row" spacing={4} alignItems="center">
|
|
259
|
-
<PopoverDemo>
|
|
260
|
-
<Typography sx={{ p: 2 }}>Hover over me</Typography>
|
|
261
|
-
</PopoverDemo>
|
|
262
|
-
<PopoverDemo variant="glass" glow>
|
|
263
|
-
<Typography sx={{ p: 2 }}>Glass with glow on hover</Typography>
|
|
264
|
-
</PopoverDemo>
|
|
265
|
-
<PopoverDemo variant="arrow" pulse>
|
|
266
|
-
<Typography sx={{ p: 2 }}>Arrow with pulse effect</Typography>
|
|
267
|
-
</PopoverDemo>
|
|
268
|
-
</Stack>
|
|
269
|
-
),
|
|
270
|
-
};
|
|
271
|
-
|
|
272
|
-
export const Responsive: Story = {
|
|
273
|
-
parameters: {
|
|
274
|
-
viewport: {
|
|
275
|
-
viewports: {
|
|
276
|
-
mobile: { name: 'Mobile', styles: { width: '375px', height: '667px' } },
|
|
277
|
-
tablet: { name: 'Tablet', styles: { width: '768px', height: '1024px' } },
|
|
278
|
-
desktop: { name: 'Desktop', styles: { width: '1280px', height: '720px' } },
|
|
279
|
-
},
|
|
280
|
-
},
|
|
281
|
-
},
|
|
282
|
-
render: () => (
|
|
283
|
-
<PopoverDemo variant="glass" glow>
|
|
284
|
-
<div style={{ padding: 24 }}>
|
|
285
|
-
<Typography variant="h6" gutterBottom>
|
|
286
|
-
Responsive Popover
|
|
287
|
-
</Typography>
|
|
288
|
-
<Typography paragraph>This popover adapts to different screen sizes.</Typography>
|
|
289
|
-
<Typography variant="body2" color="text.secondary">
|
|
290
|
-
Try switching viewport sizes to see responsive behavior.
|
|
291
|
-
</Typography>
|
|
292
|
-
</div>
|
|
293
|
-
</PopoverDemo>
|
|
294
|
-
),
|
|
295
|
-
};
|