@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,650 +0,0 @@
|
|
|
1
|
-
import Person from '@mui/icons-material/Person';
|
|
2
|
-
import Star from '@mui/icons-material/Star';
|
|
3
|
-
import Verified from '@mui/icons-material/Verified';
|
|
4
|
-
import { Box,Button, Chip, Stack, Typography } from '@mui/material';
|
|
5
|
-
import type { Meta, StoryObj } from '@storybook/react-vite';
|
|
6
|
-
import React from 'react';
|
|
7
|
-
|
|
8
|
-
import { HoverCard } from './HoverCard';
|
|
9
|
-
|
|
10
|
-
const meta: Meta<typeof HoverCard> = {
|
|
11
|
-
title: 'DataDisplay/HoverCard',
|
|
12
|
-
component: HoverCard,
|
|
13
|
-
parameters: {
|
|
14
|
-
layout: 'centered',
|
|
15
|
-
},
|
|
16
|
-
tags: ['autodocs', 'component:HoverCard'],
|
|
17
|
-
argTypes: {
|
|
18
|
-
variant: {
|
|
19
|
-
control: { type: 'select' },
|
|
20
|
-
options: ['default', 'glass', 'detailed'],
|
|
21
|
-
},
|
|
22
|
-
glow: {
|
|
23
|
-
control: { type: 'boolean' },
|
|
24
|
-
},
|
|
25
|
-
pulse: {
|
|
26
|
-
control: { type: 'boolean' },
|
|
27
|
-
},
|
|
28
|
-
enterDelay: {
|
|
29
|
-
control: { type: 'number' },
|
|
30
|
-
},
|
|
31
|
-
exitDelay: {
|
|
32
|
-
control: { type: 'number' },
|
|
33
|
-
},
|
|
34
|
-
},
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
export default meta;
|
|
38
|
-
type Story = StoryObj<typeof meta>;
|
|
39
|
-
|
|
40
|
-
// Basic examples
|
|
41
|
-
export const Default: Story = {
|
|
42
|
-
args: {
|
|
43
|
-
title: 'Hover Card',
|
|
44
|
-
description: 'This is a hover card with some information.',
|
|
45
|
-
children: <Button variant="outlined">Hover me</Button>,
|
|
46
|
-
},
|
|
47
|
-
};
|
|
48
|
-
|
|
49
|
-
export const WithCustomTrigger: Story = {
|
|
50
|
-
args: {
|
|
51
|
-
title: 'User Information',
|
|
52
|
-
description: 'Additional details about this user.',
|
|
53
|
-
trigger: (
|
|
54
|
-
<Button variant="contained" startIcon={<Person />}>
|
|
55
|
-
User Profile
|
|
56
|
-
</Button>
|
|
57
|
-
),
|
|
58
|
-
},
|
|
59
|
-
};
|
|
60
|
-
|
|
61
|
-
// Variants
|
|
62
|
-
export const Variants: Story = {
|
|
63
|
-
render: () => (
|
|
64
|
-
<Stack direction="row" spacing={3}>
|
|
65
|
-
<HoverCard
|
|
66
|
-
variant="default"
|
|
67
|
-
title="Default Card"
|
|
68
|
-
description="This is a default hover card with standard styling."
|
|
69
|
-
>
|
|
70
|
-
<Button variant="outlined">Default</Button>
|
|
71
|
-
</HoverCard>
|
|
72
|
-
<HoverCard
|
|
73
|
-
variant="glass"
|
|
74
|
-
title="Glass Card"
|
|
75
|
-
description="This card uses glassmorphism effects."
|
|
76
|
-
>
|
|
77
|
-
<Button variant="outlined">Glass</Button>
|
|
78
|
-
</HoverCard>
|
|
79
|
-
<HoverCard
|
|
80
|
-
variant="detailed"
|
|
81
|
-
title="Detailed Card"
|
|
82
|
-
description="This card has enhanced styling for detailed content."
|
|
83
|
-
avatar="https://images.unsplash.com/photo-1494790108755-2616b612b789?w=150&h=150&fit=crop&crop=face"
|
|
84
|
-
>
|
|
85
|
-
<Button variant="outlined">Detailed</Button>
|
|
86
|
-
</HoverCard>
|
|
87
|
-
</Stack>
|
|
88
|
-
),
|
|
89
|
-
};
|
|
90
|
-
|
|
91
|
-
// User profile examples
|
|
92
|
-
export const UserProfile: Story = {
|
|
93
|
-
render: () => (
|
|
94
|
-
<HoverCard
|
|
95
|
-
variant="detailed"
|
|
96
|
-
title="Sarah Johnson"
|
|
97
|
-
description="Senior Product Manager at TechCorp"
|
|
98
|
-
avatar="https://images.unsplash.com/photo-1494790108755-2616b612b789?w=150&h=150&fit=crop&crop=face"
|
|
99
|
-
maxWidth={300}
|
|
100
|
-
>
|
|
101
|
-
<Typography
|
|
102
|
-
variant="body2"
|
|
103
|
-
color="primary"
|
|
104
|
-
sx={{ cursor: 'pointer', textDecoration: 'underline' }}
|
|
105
|
-
>
|
|
106
|
-
@sarah_johnson
|
|
107
|
-
</Typography>
|
|
108
|
-
<Box sx={{ mt: 2 }}>
|
|
109
|
-
<Stack direction="row" spacing={1}>
|
|
110
|
-
<Chip icon={<Verified />} label="Verified" size="small" color="primary" />
|
|
111
|
-
<Chip icon={<Star />} label="Pro" size="small" color="warning" />
|
|
112
|
-
</Stack>
|
|
113
|
-
<Typography variant="body2" sx={{ mt: 2 }}>
|
|
114
|
-
Building amazing products and leading great teams. Passionate about user experience and
|
|
115
|
-
innovation.
|
|
116
|
-
</Typography>
|
|
117
|
-
<Box sx={{ mt: 2, display: 'flex', gap: 2 }}>
|
|
118
|
-
<Typography variant="caption">
|
|
119
|
-
<strong>1.2K</strong> followers
|
|
120
|
-
</Typography>
|
|
121
|
-
<Typography variant="caption">
|
|
122
|
-
<strong>340</strong> following
|
|
123
|
-
</Typography>
|
|
124
|
-
</Box>
|
|
125
|
-
</Box>
|
|
126
|
-
</HoverCard>
|
|
127
|
-
),
|
|
128
|
-
};
|
|
129
|
-
|
|
130
|
-
// Product information
|
|
131
|
-
export const ProductInfo: Story = {
|
|
132
|
-
render: () => (
|
|
133
|
-
<HoverCard
|
|
134
|
-
variant="default"
|
|
135
|
-
title="Premium Subscription"
|
|
136
|
-
description="Unlock all features with our premium plan"
|
|
137
|
-
>
|
|
138
|
-
<Box sx={{ p: 2, border: 1, borderColor: 'divider', borderRadius: 1, cursor: 'pointer' }}>
|
|
139
|
-
<Typography variant="h6">Pro Plan</Typography>
|
|
140
|
-
<Typography variant="body2" color="text.secondary">
|
|
141
|
-
$29/month
|
|
142
|
-
</Typography>
|
|
143
|
-
</Box>
|
|
144
|
-
<Box sx={{ mt: 2 }}>
|
|
145
|
-
<Typography variant="body2" sx={{ mb: 1 }}>
|
|
146
|
-
Features included:
|
|
147
|
-
</Typography>
|
|
148
|
-
<ul style={{ margin: 0, paddingLeft: 20, fontSize: '0.875rem' }}>
|
|
149
|
-
<li>Unlimited projects</li>
|
|
150
|
-
<li>Advanced analytics</li>
|
|
151
|
-
<li>Priority support</li>
|
|
152
|
-
<li>Team collaboration</li>
|
|
153
|
-
</ul>
|
|
154
|
-
</Box>
|
|
155
|
-
</HoverCard>
|
|
156
|
-
),
|
|
157
|
-
};
|
|
158
|
-
|
|
159
|
-
// With effects
|
|
160
|
-
export const WithGlow: Story = {
|
|
161
|
-
args: {
|
|
162
|
-
variant: 'glass',
|
|
163
|
-
glow: true,
|
|
164
|
-
title: 'Glowing Card',
|
|
165
|
-
description: 'This card has a beautiful glow effect.',
|
|
166
|
-
children: (
|
|
167
|
-
<Button variant="contained" color="primary">
|
|
168
|
-
Glow Effect
|
|
169
|
-
</Button>
|
|
170
|
-
),
|
|
171
|
-
},
|
|
172
|
-
};
|
|
173
|
-
|
|
174
|
-
export const WithPulse: Story = {
|
|
175
|
-
args: {
|
|
176
|
-
variant: 'default',
|
|
177
|
-
pulse: true,
|
|
178
|
-
title: 'Pulsing Card',
|
|
179
|
-
description: 'This card pulses to grab attention.',
|
|
180
|
-
children: (
|
|
181
|
-
<Button variant="contained" color="warning">
|
|
182
|
-
Pulse Effect
|
|
183
|
-
</Button>
|
|
184
|
-
),
|
|
185
|
-
},
|
|
186
|
-
};
|
|
187
|
-
|
|
188
|
-
export const WithGlowAndPulse: Story = {
|
|
189
|
-
args: {
|
|
190
|
-
variant: 'detailed',
|
|
191
|
-
glow: true,
|
|
192
|
-
pulse: true,
|
|
193
|
-
title: 'Premium Feature',
|
|
194
|
-
description: 'This card combines both glow and pulse effects.',
|
|
195
|
-
children: (
|
|
196
|
-
<Button variant="contained" color="secondary">
|
|
197
|
-
Combined Effects
|
|
198
|
-
</Button>
|
|
199
|
-
),
|
|
200
|
-
},
|
|
201
|
-
};
|
|
202
|
-
|
|
203
|
-
// Different delays
|
|
204
|
-
export const CustomDelays: Story = {
|
|
205
|
-
render: () => (
|
|
206
|
-
<Stack direction="row" spacing={3}>
|
|
207
|
-
<HoverCard
|
|
208
|
-
title="Fast Hover"
|
|
209
|
-
description="Shows quickly (100ms delay)"
|
|
210
|
-
enterDelay={100}
|
|
211
|
-
exitDelay={0}
|
|
212
|
-
>
|
|
213
|
-
<Button variant="outlined">Fast</Button>
|
|
214
|
-
</HoverCard>
|
|
215
|
-
<HoverCard
|
|
216
|
-
title="Normal Hover"
|
|
217
|
-
description="Shows after 700ms (default)"
|
|
218
|
-
enterDelay={700}
|
|
219
|
-
exitDelay={0}
|
|
220
|
-
>
|
|
221
|
-
<Button variant="outlined">Normal</Button>
|
|
222
|
-
</HoverCard>
|
|
223
|
-
<HoverCard
|
|
224
|
-
title="Slow Hover"
|
|
225
|
-
description="Shows after 1.5 seconds"
|
|
226
|
-
enterDelay={1500}
|
|
227
|
-
exitDelay={200}
|
|
228
|
-
>
|
|
229
|
-
<Button variant="outlined">Slow</Button>
|
|
230
|
-
</HoverCard>
|
|
231
|
-
</Stack>
|
|
232
|
-
),
|
|
233
|
-
};
|
|
234
|
-
|
|
235
|
-
// Complex content
|
|
236
|
-
export const ComplexContent: Story = {
|
|
237
|
-
render: () => (
|
|
238
|
-
<HoverCard variant="detailed" maxWidth={350}>
|
|
239
|
-
<Typography variant="body2" color="primary" sx={{ cursor: 'pointer' }}>
|
|
240
|
-
View Analytics Dashboard
|
|
241
|
-
</Typography>
|
|
242
|
-
<Box sx={{ p: 2, bgcolor: 'grey.50', borderRadius: 1, mt: 2 }}>
|
|
243
|
-
<Typography variant="h6" sx={{ mb: 2 }}>
|
|
244
|
-
Monthly Stats
|
|
245
|
-
</Typography>
|
|
246
|
-
<Stack spacing={1}>
|
|
247
|
-
<Box sx={{ display: 'flex', justifyContent: 'space-between' }}>
|
|
248
|
-
<Typography variant="body2">Total Views:</Typography>
|
|
249
|
-
<Typography variant="body2" fontWeight={600}>
|
|
250
|
-
12,345
|
|
251
|
-
</Typography>
|
|
252
|
-
</Box>
|
|
253
|
-
<Box sx={{ display: 'flex', justifyContent: 'space-between' }}>
|
|
254
|
-
<Typography variant="body2">Unique Visitors:</Typography>
|
|
255
|
-
<Typography variant="body2" fontWeight={600}>
|
|
256
|
-
8,901
|
|
257
|
-
</Typography>
|
|
258
|
-
</Box>
|
|
259
|
-
<Box sx={{ display: 'flex', justifyContent: 'space-between' }}>
|
|
260
|
-
<Typography variant="body2">Conversion Rate:</Typography>
|
|
261
|
-
<Typography variant="body2" fontWeight={600} color="success.main">
|
|
262
|
-
4.2%
|
|
263
|
-
</Typography>
|
|
264
|
-
</Box>
|
|
265
|
-
</Stack>
|
|
266
|
-
<Button fullWidth variant="outlined" size="small" sx={{ mt: 2 }}>
|
|
267
|
-
View Details
|
|
268
|
-
</Button>
|
|
269
|
-
</Box>
|
|
270
|
-
</HoverCard>
|
|
271
|
-
),
|
|
272
|
-
};
|
|
273
|
-
|
|
274
|
-
// Disabled state
|
|
275
|
-
export const DisabledState: Story = {
|
|
276
|
-
args: {
|
|
277
|
-
variant: 'default',
|
|
278
|
-
disabled: true,
|
|
279
|
-
title: 'Disabled HoverCard',
|
|
280
|
-
description: 'This hover card is disabled and will not appear.',
|
|
281
|
-
children: <Button disabled>Disabled Button</Button>,
|
|
282
|
-
},
|
|
283
|
-
};
|
|
284
|
-
|
|
285
|
-
// Loading state
|
|
286
|
-
export const LoadingState: Story = {
|
|
287
|
-
args: {
|
|
288
|
-
variant: 'default',
|
|
289
|
-
loading: true,
|
|
290
|
-
children: <Button>Loading Content</Button>,
|
|
291
|
-
},
|
|
292
|
-
};
|
|
293
|
-
|
|
294
|
-
// Loading with custom component
|
|
295
|
-
export const CustomLoadingState: Story = {
|
|
296
|
-
args: {
|
|
297
|
-
variant: 'default',
|
|
298
|
-
loading: true,
|
|
299
|
-
loadingComponent: (
|
|
300
|
-
<Box sx={{ display: 'flex', alignItems: 'center', gap: 2 }}>
|
|
301
|
-
<Typography>Custom loading message...</Typography>
|
|
302
|
-
</Box>
|
|
303
|
-
),
|
|
304
|
-
children: <Button>Custom Loading</Button>,
|
|
305
|
-
},
|
|
306
|
-
};
|
|
307
|
-
|
|
308
|
-
// Different placements
|
|
309
|
-
export const Placements: Story = {
|
|
310
|
-
render: () => (
|
|
311
|
-
<Box sx={{ display: 'grid', gridTemplateColumns: 'repeat(3, 1fr)', gap: 4, p: 8 }}>
|
|
312
|
-
<HoverCard
|
|
313
|
-
title="Top Placement"
|
|
314
|
-
description="Appears above the trigger"
|
|
315
|
-
placement="top"
|
|
316
|
-
showArrow={true}
|
|
317
|
-
enterDelay={100}
|
|
318
|
-
>
|
|
319
|
-
<Button variant="outlined">Top</Button>
|
|
320
|
-
</HoverCard>
|
|
321
|
-
<HoverCard
|
|
322
|
-
title="Bottom Placement"
|
|
323
|
-
description="Appears below the trigger"
|
|
324
|
-
placement="bottom"
|
|
325
|
-
showArrow={true}
|
|
326
|
-
enterDelay={100}
|
|
327
|
-
>
|
|
328
|
-
<Button variant="outlined">Bottom</Button>
|
|
329
|
-
</HoverCard>
|
|
330
|
-
<HoverCard
|
|
331
|
-
title="Left Placement"
|
|
332
|
-
description="Appears to the left"
|
|
333
|
-
placement="left"
|
|
334
|
-
showArrow={true}
|
|
335
|
-
enterDelay={100}
|
|
336
|
-
>
|
|
337
|
-
<Button variant="outlined">Left</Button>
|
|
338
|
-
</HoverCard>
|
|
339
|
-
<HoverCard
|
|
340
|
-
title="Right Placement"
|
|
341
|
-
description="Appears to the right"
|
|
342
|
-
placement="right"
|
|
343
|
-
showArrow={true}
|
|
344
|
-
enterDelay={100}
|
|
345
|
-
>
|
|
346
|
-
<Button variant="outlined">Right</Button>
|
|
347
|
-
</HoverCard>
|
|
348
|
-
</Box>
|
|
349
|
-
),
|
|
350
|
-
};
|
|
351
|
-
|
|
352
|
-
// Different animations
|
|
353
|
-
export const Animations: Story = {
|
|
354
|
-
render: () => (
|
|
355
|
-
<Stack direction="row" spacing={2}>
|
|
356
|
-
<HoverCard
|
|
357
|
-
title="Fade Animation"
|
|
358
|
-
description="Fades in smoothly"
|
|
359
|
-
animation="fade"
|
|
360
|
-
enterDelay={100}
|
|
361
|
-
>
|
|
362
|
-
<Button variant="outlined">Fade</Button>
|
|
363
|
-
</HoverCard>
|
|
364
|
-
<HoverCard
|
|
365
|
-
title="Scale Animation"
|
|
366
|
-
description="Scales up from center"
|
|
367
|
-
animation="scale"
|
|
368
|
-
enterDelay={100}
|
|
369
|
-
>
|
|
370
|
-
<Button variant="outlined">Scale</Button>
|
|
371
|
-
</HoverCard>
|
|
372
|
-
<HoverCard
|
|
373
|
-
title="Slide Up"
|
|
374
|
-
description="Slides up from below"
|
|
375
|
-
animation="slide-up"
|
|
376
|
-
enterDelay={100}
|
|
377
|
-
>
|
|
378
|
-
<Button variant="outlined">Slide Up</Button>
|
|
379
|
-
</HoverCard>
|
|
380
|
-
<HoverCard
|
|
381
|
-
title="Slide Down"
|
|
382
|
-
description="Slides down from above"
|
|
383
|
-
animation="slide-down"
|
|
384
|
-
enterDelay={100}
|
|
385
|
-
>
|
|
386
|
-
<Button variant="outlined">Slide Down</Button>
|
|
387
|
-
</HoverCard>
|
|
388
|
-
<HoverCard
|
|
389
|
-
title="Slide Left"
|
|
390
|
-
description="Slides from the right"
|
|
391
|
-
animation="slide-left"
|
|
392
|
-
enterDelay={100}
|
|
393
|
-
>
|
|
394
|
-
<Button variant="outlined">Slide Left</Button>
|
|
395
|
-
</HoverCard>
|
|
396
|
-
<HoverCard
|
|
397
|
-
title="Slide Right"
|
|
398
|
-
description="Slides from the left"
|
|
399
|
-
animation="slide-right"
|
|
400
|
-
enterDelay={100}
|
|
401
|
-
>
|
|
402
|
-
<Button variant="outlined">Slide Right</Button>
|
|
403
|
-
</HoverCard>
|
|
404
|
-
</Stack>
|
|
405
|
-
),
|
|
406
|
-
};
|
|
407
|
-
|
|
408
|
-
// Inline text hover
|
|
409
|
-
export const InlineText: Story = {
|
|
410
|
-
render: () => (
|
|
411
|
-
<Typography variant="body1">
|
|
412
|
-
You can hover over{' '}
|
|
413
|
-
<HoverCard
|
|
414
|
-
title="Hover Definition"
|
|
415
|
-
description="A hover card is a UI element that appears when you hover over a trigger element."
|
|
416
|
-
variant="glass"
|
|
417
|
-
>
|
|
418
|
-
<Typography
|
|
419
|
-
component="span"
|
|
420
|
-
color="primary"
|
|
421
|
-
sx={{ cursor: 'pointer', textDecoration: 'underline' }}
|
|
422
|
-
>
|
|
423
|
-
hover cards
|
|
424
|
-
</Typography>
|
|
425
|
-
</HoverCard>{' '}
|
|
426
|
-
to see additional information without navigating away from the current page.
|
|
427
|
-
</Typography>
|
|
428
|
-
),
|
|
429
|
-
};
|
|
430
|
-
|
|
431
|
-
// Required story exports for validation
|
|
432
|
-
export const AllVariants: Story = {
|
|
433
|
-
render: () => (
|
|
434
|
-
<Stack spacing={3} alignItems="center">
|
|
435
|
-
<Typography variant="h6">All HoverCard Variants</Typography>
|
|
436
|
-
<Stack direction="row" spacing={3} flexWrap="wrap">
|
|
437
|
-
<HoverCard
|
|
438
|
-
variant="default"
|
|
439
|
-
title="Default Variant"
|
|
440
|
-
description="Standard hover card with default styling"
|
|
441
|
-
>
|
|
442
|
-
<Button variant="outlined">Default</Button>
|
|
443
|
-
</HoverCard>
|
|
444
|
-
<HoverCard
|
|
445
|
-
variant="glass"
|
|
446
|
-
title="Glass Variant"
|
|
447
|
-
description="Glassmorphism effect with blur and transparency"
|
|
448
|
-
>
|
|
449
|
-
<Button variant="outlined">Glass</Button>
|
|
450
|
-
</HoverCard>
|
|
451
|
-
<HoverCard
|
|
452
|
-
variant="detailed"
|
|
453
|
-
title="Detailed Variant"
|
|
454
|
-
description="Enhanced styling for rich content display"
|
|
455
|
-
avatar="https://images.unsplash.com/photo-1494790108755-2616b612b789?w=150&h=150&fit=crop&crop=face"
|
|
456
|
-
>
|
|
457
|
-
<Button variant="outlined">Detailed</Button>
|
|
458
|
-
</HoverCard>
|
|
459
|
-
</Stack>
|
|
460
|
-
</Stack>
|
|
461
|
-
),
|
|
462
|
-
};
|
|
463
|
-
|
|
464
|
-
export const AllSizes: Story = {
|
|
465
|
-
render: () => (
|
|
466
|
-
<Stack spacing={3} alignItems="center">
|
|
467
|
-
<Typography variant="h6">All HoverCard Sizes</Typography>
|
|
468
|
-
<Stack direction="row" spacing={3} flexWrap="wrap">
|
|
469
|
-
<HoverCard title="Small Card" description="Compact size" maxWidth={200}>
|
|
470
|
-
<Button variant="outlined" size="small">
|
|
471
|
-
Small (200px)
|
|
472
|
-
</Button>
|
|
473
|
-
</HoverCard>
|
|
474
|
-
<HoverCard
|
|
475
|
-
title="Medium Card"
|
|
476
|
-
description="Default medium size for standard content"
|
|
477
|
-
maxWidth={300}
|
|
478
|
-
>
|
|
479
|
-
<Button variant="outlined">Medium (300px)</Button>
|
|
480
|
-
</HoverCard>
|
|
481
|
-
<HoverCard
|
|
482
|
-
title="Large Card"
|
|
483
|
-
description="Large size for detailed information and rich content display"
|
|
484
|
-
maxWidth={400}
|
|
485
|
-
>
|
|
486
|
-
<Button variant="outlined" size="large">
|
|
487
|
-
Large (400px)
|
|
488
|
-
</Button>
|
|
489
|
-
</HoverCard>
|
|
490
|
-
<HoverCard
|
|
491
|
-
title="Extra Large Card"
|
|
492
|
-
description="Extra large size for complex content layouts and detailed information panels"
|
|
493
|
-
maxWidth={500}
|
|
494
|
-
>
|
|
495
|
-
<Button variant="outlined" size="large">
|
|
496
|
-
XL (500px)
|
|
497
|
-
</Button>
|
|
498
|
-
</HoverCard>
|
|
499
|
-
</Stack>
|
|
500
|
-
</Stack>
|
|
501
|
-
),
|
|
502
|
-
};
|
|
503
|
-
|
|
504
|
-
export const AllStates: Story = {
|
|
505
|
-
render: () => (
|
|
506
|
-
<Stack spacing={3} alignItems="center">
|
|
507
|
-
<Typography variant="h6">All HoverCard States</Typography>
|
|
508
|
-
<Stack direction="row" spacing={3} flexWrap="wrap">
|
|
509
|
-
<HoverCard title="Normal State" description="Default interactive state">
|
|
510
|
-
<Button variant="outlined">Normal</Button>
|
|
511
|
-
</HoverCard>
|
|
512
|
-
<HoverCard
|
|
513
|
-
title="With Glow"
|
|
514
|
-
description="Glowing effect applied"
|
|
515
|
-
glow={true}
|
|
516
|
-
variant="glass"
|
|
517
|
-
>
|
|
518
|
-
<Button variant="outlined" color="primary">
|
|
519
|
-
Glow Effect
|
|
520
|
-
</Button>
|
|
521
|
-
</HoverCard>
|
|
522
|
-
<HoverCard title="With Pulse" description="Pulsing animation effect" pulse={true}>
|
|
523
|
-
<Button variant="outlined" color="warning">
|
|
524
|
-
Pulse Effect
|
|
525
|
-
</Button>
|
|
526
|
-
</HoverCard>
|
|
527
|
-
<HoverCard
|
|
528
|
-
title="Combined Effects"
|
|
529
|
-
description="Both glow and pulse"
|
|
530
|
-
glow={true}
|
|
531
|
-
pulse={true}
|
|
532
|
-
variant="detailed"
|
|
533
|
-
>
|
|
534
|
-
<Button variant="contained" color="secondary">
|
|
535
|
-
Combined
|
|
536
|
-
</Button>
|
|
537
|
-
</HoverCard>
|
|
538
|
-
<HoverCard title="Loading State" description="Content is loading" loading={true}>
|
|
539
|
-
<Button variant="outlined">Loading</Button>
|
|
540
|
-
</HoverCard>
|
|
541
|
-
<HoverCard title="Disabled State" description="This hover card is disabled" disabled={true}>
|
|
542
|
-
<Button disabled>Disabled</Button>
|
|
543
|
-
</HoverCard>
|
|
544
|
-
</Stack>
|
|
545
|
-
</Stack>
|
|
546
|
-
),
|
|
547
|
-
};
|
|
548
|
-
|
|
549
|
-
const InteractiveStatesComponent = () => {
|
|
550
|
-
const [open, setOpen] = React.useState(false);
|
|
551
|
-
const [clickCount, setClickCount] = React.useState(0);
|
|
552
|
-
|
|
553
|
-
return (
|
|
554
|
-
<Stack spacing={3} alignItems="center">
|
|
555
|
-
<Typography variant="h6">Interactive HoverCard States</Typography>
|
|
556
|
-
<Stack direction="row" spacing={3} flexWrap="wrap">
|
|
557
|
-
<HoverCard
|
|
558
|
-
title="Hover Interaction"
|
|
559
|
-
description="Shows on hover with 700ms delay"
|
|
560
|
-
enterDelay={700}
|
|
561
|
-
exitDelay={200}
|
|
562
|
-
>
|
|
563
|
-
<Button variant="outlined">Hover Me (700ms delay)</Button>
|
|
564
|
-
</HoverCard>
|
|
565
|
-
<HoverCard
|
|
566
|
-
title="Quick Hover"
|
|
567
|
-
description="Shows immediately on hover"
|
|
568
|
-
enterDelay={0}
|
|
569
|
-
exitDelay={0}
|
|
570
|
-
>
|
|
571
|
-
<Button variant="outlined" color="primary">
|
|
572
|
-
Quick Hover (0ms)
|
|
573
|
-
</Button>
|
|
574
|
-
</HoverCard>
|
|
575
|
-
<HoverCard
|
|
576
|
-
title="With Callbacks"
|
|
577
|
-
description={`Opened: ${open ? 'Yes' : 'No'}`}
|
|
578
|
-
onOpen={() => setOpen(true)}
|
|
579
|
-
onClose={() => setOpen(false)}
|
|
580
|
-
>
|
|
581
|
-
<Button variant="outlined" color="secondary">
|
|
582
|
-
Track State: {open ? 'Open' : 'Closed'}
|
|
583
|
-
</Button>
|
|
584
|
-
</HoverCard>
|
|
585
|
-
<HoverCard title="Click Counter" description={`Button clicked ${clickCount} times`}>
|
|
586
|
-
<Button variant="contained" onClick={() => setClickCount((c) => c + 1)}>
|
|
587
|
-
Click Count: {clickCount}
|
|
588
|
-
</Button>
|
|
589
|
-
</HoverCard>
|
|
590
|
-
</Stack>
|
|
591
|
-
<Typography variant="caption" color="text.secondary">
|
|
592
|
-
Test hover interactions, delays, and state management
|
|
593
|
-
</Typography>
|
|
594
|
-
</Stack>
|
|
595
|
-
);
|
|
596
|
-
};
|
|
597
|
-
|
|
598
|
-
export const InteractiveStates: Story = {
|
|
599
|
-
render: () => <InteractiveStatesComponent />,
|
|
600
|
-
};
|
|
601
|
-
|
|
602
|
-
export const Responsive: Story = {
|
|
603
|
-
parameters: {
|
|
604
|
-
viewport: {
|
|
605
|
-
defaultViewport: 'mobile1',
|
|
606
|
-
},
|
|
607
|
-
},
|
|
608
|
-
render: () => (
|
|
609
|
-
<Stack spacing={3} alignItems="center" sx={{ p: 2 }}>
|
|
610
|
-
<Typography variant="h6">Responsive HoverCard</Typography>
|
|
611
|
-
<Stack spacing={2} sx={{ width: '100%' }}>
|
|
612
|
-
<HoverCard
|
|
613
|
-
title="Mobile Optimized"
|
|
614
|
-
description="Touch-enabled for mobile devices"
|
|
615
|
-
touchEnabled={true}
|
|
616
|
-
placement="bottom"
|
|
617
|
-
maxWidth={280}
|
|
618
|
-
>
|
|
619
|
-
<Button fullWidth variant="outlined">
|
|
620
|
-
Touch & Hold (Mobile)
|
|
621
|
-
</Button>
|
|
622
|
-
</HoverCard>
|
|
623
|
-
<HoverCard
|
|
624
|
-
title="Tablet View"
|
|
625
|
-
description="Optimized for tablet screens"
|
|
626
|
-
placement="right"
|
|
627
|
-
maxWidth={350}
|
|
628
|
-
>
|
|
629
|
-
<Button fullWidth variant="outlined" color="primary">
|
|
630
|
-
Tablet Optimized
|
|
631
|
-
</Button>
|
|
632
|
-
</HoverCard>
|
|
633
|
-
<HoverCard
|
|
634
|
-
title="Desktop View"
|
|
635
|
-
description="Full-featured desktop experience with rich content"
|
|
636
|
-
variant="detailed"
|
|
637
|
-
avatar="https://images.unsplash.com/photo-1494790108755-2616b612b789?w=150&h=150&fit=crop&crop=face"
|
|
638
|
-
maxWidth={400}
|
|
639
|
-
>
|
|
640
|
-
<Button fullWidth variant="contained">
|
|
641
|
-
Desktop Experience
|
|
642
|
-
</Button>
|
|
643
|
-
</HoverCard>
|
|
644
|
-
</Stack>
|
|
645
|
-
<Typography variant="caption" color="text.secondary" sx={{ textAlign: 'center' }}>
|
|
646
|
-
Resize viewport to test responsive behavior
|
|
647
|
-
</Typography>
|
|
648
|
-
</Stack>
|
|
649
|
-
),
|
|
650
|
-
};
|