@wakastellar/ui 2.3.4 → 2.4.0
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/dist/blocks/dashboard/index.d.ts +4 -1
- package/dist/blocks/empty-states/index.d.ts +4 -1
- package/dist/blocks/error-pages/index.d.ts +4 -1
- package/dist/blocks/index.d.ts +1 -1
- package/dist/blocks/landing/index.d.ts +4 -1
- package/dist/blocks/pricing/index.d.ts +5 -1
- package/dist/blocks/sidebar/index.d.ts +5 -1
- package/dist/index.cjs.js +130 -130
- package/dist/index.d.ts +1 -0
- package/dist/index.es.js +7905 -7856
- package/dist/stories/Button.d.ts +14 -0
- package/dist/stories/Button.stories.d.ts +8 -0
- package/dist/stories/Header.d.ts +11 -0
- package/dist/stories/Header.stories.d.ts +6 -0
- package/dist/stories/Page.d.ts +2 -0
- package/dist/stories/Page.stories.d.ts +6 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/link.d.ts +23 -0
- package/package.json +11 -3
- package/src/blocks/activity-timeline/ActivityTimeline.stories.tsx +460 -0
- package/src/blocks/apm-overview/APMOverview.stories.tsx +435 -0
- package/src/blocks/auth-2fa/Auth2FA.stories.tsx +308 -0
- package/src/blocks/calendar-view/CalendarView.stories.tsx +398 -0
- package/src/blocks/chat/Chat.stories.tsx +466 -0
- package/src/blocks/chat-interface/ChatInterface.stories.tsx +412 -0
- package/src/blocks/checkout-flow/CheckoutFlow.stories.tsx +408 -0
- package/src/blocks/cicd-builder/CICDBuilder.stories.tsx +499 -0
- package/src/blocks/cloud-cost-dashboard/CloudCostDashboard.stories.tsx +356 -0
- package/src/blocks/container-orchestrator/ContainerOrchestrator.stories.tsx +461 -0
- package/src/blocks/dashboard/Dashboard.stories.tsx +559 -0
- package/src/blocks/dashboard/index.tsx +68 -27
- package/src/blocks/dashboard-kpi/DashboardKPI.stories.tsx +422 -0
- package/src/blocks/database-admin/DatabaseAdmin.stories.tsx +393 -0
- package/src/blocks/deployment-dashboard/DeploymentDashboard.stories.tsx +457 -0
- package/src/blocks/empty-states/EmptyStates.stories.tsx +467 -0
- package/src/blocks/empty-states/index.tsx +26 -8
- package/src/blocks/error-pages/ErrorPages.stories.tsx +401 -0
- package/src/blocks/error-pages/index.tsx +26 -8
- package/src/blocks/faq/FAQ.stories.tsx +416 -0
- package/src/blocks/file-manager/FileManager.stories.tsx +413 -0
- package/src/blocks/footer/Footer.stories.tsx +328 -0
- package/src/blocks/gitops-sync-status/GitOpsSyncStatus.stories.tsx +529 -0
- package/src/blocks/header/WakaHeader.stories.tsx +455 -0
- package/src/blocks/headtab/Headtab.stories.tsx +369 -0
- package/src/blocks/i18n-editor/I18nEditor.stories.tsx +451 -0
- package/src/blocks/incident-manager/IncidentManager.stories.tsx +464 -0
- package/src/blocks/index.ts +1 -1
- package/src/blocks/infrastructure-map/InfrastructureMap.stories.tsx +533 -0
- package/src/blocks/kanban-board/KanbanBoard.stories.tsx +494 -0
- package/src/blocks/landing/WakaLanding.stories.tsx +449 -0
- package/src/blocks/landing/index.tsx +125 -66
- package/src/blocks/language-selector/LanguageSelector.stories.tsx +345 -0
- package/src/blocks/layout/Layout.stories.tsx +373 -0
- package/src/blocks/login/Login.stories.tsx +443 -0
- package/src/blocks/on-call-schedule/OnCallSchedule.stories.tsx +381 -0
- package/src/blocks/player-profile/PlayerProfile.stories.tsx +316 -0
- package/src/blocks/pricing/WakaPricing.stories.tsx +530 -0
- package/src/blocks/pricing/index.tsx +38 -4
- package/src/blocks/profile/Profile.stories.tsx +371 -0
- package/src/blocks/release-notes/ReleaseNotes.stories.tsx +431 -0
- package/src/blocks/settings/Settings.stories.tsx +520 -0
- package/src/blocks/sidebar/WakaSidebar.stories.tsx +513 -0
- package/src/blocks/sidebar/index.tsx +49 -20
- package/src/blocks/theme-creator-block/ThemeCreatorBlock.stories.tsx +370 -0
- package/src/blocks/user-management/UserManagement.stories.tsx +411 -0
- package/src/blocks/wizard/Wizard.stories.tsx +683 -0
- package/src/components/accordion/Accordion.stories.tsx +93 -0
- package/src/components/alert/Alert.stories.tsx +95 -0
- package/src/components/alert-dialog/AlertDialog.stories.tsx +126 -0
- package/src/components/aspect-ratio/AspectRatio.stories.tsx +118 -0
- package/src/components/avatar/Avatar.stories.tsx +104 -0
- package/src/components/button/Button.stories.tsx +12 -1
- package/src/components/calendar/Calendar.stories.tsx +102 -0
- package/src/components/card/Card.stories.tsx +125 -0
- package/src/components/checkbox/Checkbox.stories.tsx +100 -0
- package/src/components/code/Code.stories.tsx +402 -0
- package/src/components/collapsible/Collapsible.stories.tsx +123 -0
- package/src/components/command/Command.stories.tsx +207 -0
- package/src/components/context-menu/ContextMenu.stories.tsx +220 -0
- package/src/components/dialog/Dialog.stories.tsx +157 -0
- package/src/components/dropdown-menu/DropdownMenu.stories.tsx +225 -0
- package/src/components/form/Form.stories.tsx +413 -0
- package/src/components/hover-card/HoverCard.stories.tsx +148 -0
- package/src/components/input-otp/InputOTP.stories.tsx +255 -0
- package/src/components/label/Label.stories.tsx +68 -0
- package/src/components/menubar/Menubar.stories.tsx +278 -0
- package/src/components/navigation-menu/NavigationMenu.stories.tsx +202 -0
- package/src/components/popover/Popover.stories.tsx +199 -0
- package/src/components/progress/Progress.stories.tsx +104 -0
- package/src/components/radio-group/RadioGroup.stories.tsx +138 -0
- package/src/components/scroll-area/ScrollArea.stories.tsx +153 -0
- package/src/components/select/Select.stories.tsx +146 -0
- package/src/components/separator/Separator.stories.tsx +117 -0
- package/src/components/sheet/Sheet.stories.tsx +195 -0
- package/src/components/skeleton/Skeleton.stories.tsx +114 -0
- package/src/components/slider/Slider.stories.tsx +157 -0
- package/src/components/switch/Switch.stories.tsx +114 -0
- package/src/components/table/Table.stories.tsx +153 -0
- package/src/components/tabs/Tabs.stories.tsx +155 -0
- package/src/components/textarea/Textarea.stories.tsx +116 -0
- package/src/components/toast/Toast.stories.tsx +160 -0
- package/src/components/toggle/Toggle.stories.tsx +125 -0
- package/src/components/tooltip/Tooltip.stories.tsx +133 -0
- package/src/components/typography/Typography.stories.tsx +207 -0
- package/src/components/waka-3d-pie-chart/Waka3DPieChart.stories.tsx +308 -0
- package/src/components/waka-achievement-unlock/WakaAchievementUnlock.stories.tsx +353 -0
- package/src/components/waka-artifact-list/WakaArtifactList.stories.tsx +258 -0
- package/src/components/waka-autocomplete/WakaAutocomplete.stories.tsx +224 -0
- package/src/components/waka-badge-showcase/WakaBadgeShowcase.stories.tsx +269 -0
- package/src/components/waka-barcode/WakaBarcode.stories.tsx +227 -0
- package/src/components/waka-bottom-sheet/WakaBottomSheet.stories.tsx +408 -0
- package/src/components/waka-breadcrumb/WakaBreadcrumb.stories.tsx +237 -0
- package/src/components/waka-build-matrix/WakaBuildMatrix.stories.tsx +328 -0
- package/src/components/waka-carousel/WakaCarousel.stories.tsx +296 -0
- package/src/components/waka-charts/WakaCharts.stories.tsx +519 -0
- package/src/components/waka-color-picker/WakaColorPicker.stories.tsx +200 -0
- package/src/components/waka-combobox/WakaCombobox.stories.tsx +250 -0
- package/src/components/waka-container-list/WakaContainerList.stories.tsx +315 -0
- package/src/components/waka-contribution-graph/WakaContributionGraph.stories.tsx +354 -0
- package/src/components/waka-cost-breakdown/WakaCostBreakdown.stories.tsx +348 -0
- package/src/components/waka-daily-reward/WakaDailyReward.stories.tsx +365 -0
- package/src/components/waka-database-card/WakaDatabaseCard.stories.tsx +306 -0
- package/src/components/waka-date-range-picker/WakaDateRangePicker.stories.tsx +339 -0
- package/src/components/waka-datetime-picker/WakaDateTimePicker.stories.tsx +317 -0
- package/src/components/waka-deployment-lane/WakaDeploymentLane.stories.tsx +292 -0
- package/src/components/waka-dock/WakaDock.stories.tsx +332 -0
- package/src/components/waka-drawer/WakaDrawer.stories.tsx +437 -0
- package/src/components/waka-env-var-editor/WakaEnvVarEditor.stories.tsx +263 -0
- package/src/components/waka-error-shake/WakaErrorShake.stories.tsx +410 -0
- package/src/components/waka-file-upload/WakaFileUpload.stories.tsx +239 -0
- package/src/components/waka-flow-diagram/WakaFlowDiagram.stories.tsx +365 -0
- package/src/components/waka-funnel-chart/WakaFunnelChart.stories.tsx +281 -0
- package/src/components/waka-glow-card/WakaGlowCard.stories.tsx +274 -0
- package/src/components/waka-haptic-button/WakaHapticButton.stories.tsx +349 -0
- package/src/components/waka-health-pulse/WakaHealthPulse.stories.tsx +293 -0
- package/src/components/waka-heatmap/WakaHeatmap.stories.tsx +376 -0
- package/src/components/waka-image/WakaImage.stories.tsx +255 -0
- package/src/components/waka-incident-timeline/WakaIncidentTimeline.stories.tsx +300 -0
- package/src/components/waka-kanban/WakaKanban.stories.tsx +399 -0
- package/src/components/waka-kubernetes-overview/WakaKubernetesOverview.stories.tsx +281 -0
- package/src/components/waka-leaderboard/WakaLeaderboard.stories.tsx +300 -0
- package/src/components/waka-level-progress/WakaLevelProgress.stories.tsx +313 -0
- package/src/components/waka-loading-orbit/WakaLoadingOrbit.stories.tsx +413 -0
- package/src/components/waka-log-viewer/WakaLogViewer.stories.tsx +312 -0
- package/src/components/waka-loot-box/WakaLootBox.stories.tsx +374 -0
- package/src/components/waka-metric-sparkline/WakaMetricSparkline.stories.tsx +312 -0
- package/src/components/waka-migration-list/WakaMigrationList.stories.tsx +289 -0
- package/src/components/waka-modal/WakaModal.stories.tsx +434 -0
- package/src/components/waka-morph-button/WakaMorphButton.stories.tsx +405 -0
- package/src/components/waka-network-topology/WakaNetworkTopology.stories.tsx +364 -0
- package/src/components/waka-notifications/WakaNotifications.stories.tsx +290 -0
- package/src/components/waka-number-input/WakaNumberInput.stories.tsx +282 -0
- package/src/components/waka-pagination/WakaPagination.stories.tsx +328 -0
- package/src/components/waka-password-strength/WakaPasswordStrength.stories.tsx +318 -0
- package/src/components/waka-pipeline-view/WakaPipelineView.stories.tsx +386 -0
- package/src/components/waka-player-card/WakaPlayerCard.stories.tsx +333 -0
- package/src/components/waka-pod-card/WakaPodCard.stories.tsx +435 -0
- package/src/components/waka-qrcode/WakaQRCode.stories.tsx +232 -0
- package/src/components/waka-query-explain/WakaQueryExplain.stories.tsx +407 -0
- package/src/components/waka-quest-card/WakaQuestCard.stories.tsx +394 -0
- package/src/components/waka-quota-bar/WakaQuotaBar.stories.tsx +435 -0
- package/src/components/waka-radar-score/WakaRadarScore.stories.tsx +372 -0
- package/src/components/waka-resource-gauge/WakaResourceGauge.stories.tsx +366 -0
- package/src/components/waka-rich-text-editor/WakaRichTextEditor.stories.tsx +238 -0
- package/src/components/waka-sankey-diagram/WakaSankeyDiagram.stories.tsx +389 -0
- package/src/components/waka-scratch-card/WakaScratchCard.stories.tsx +388 -0
- package/src/components/waka-secret-card/WakaSecretCard.stories.tsx +314 -0
- package/src/components/waka-segmented-control/WakaSegmentedControl.stories.tsx +309 -0
- package/src/components/waka-server-rack/WakaServerRack.stories.tsx +382 -0
- package/src/components/waka-service-graph/WakaServiceGraph.stories.tsx +262 -0
- package/src/components/waka-skeleton-wave/WakaSkeletonWave.stories.tsx +321 -0
- package/src/components/waka-skill-tree/WakaSkillTree.stories.tsx +308 -0
- package/src/components/waka-spin-wheel/WakaSpinWheel.stories.tsx +368 -0
- package/src/components/waka-spinner/WakaSpinner.stories.tsx +156 -0
- package/src/components/waka-stat/WakaStat.stories.tsx +334 -0
- package/src/components/waka-status-matrix/WakaStatusMatrix.stories.tsx +331 -0
- package/src/components/waka-stepper/WakaStepper.stories.tsx +468 -0
- package/src/components/waka-streak-counter/WakaStreakCounter.stories.tsx +235 -0
- package/src/components/waka-success-explosion/WakaSuccessExplosion.stories.tsx +389 -0
- package/src/components/waka-tabs-morph/WakaTabsMorph.stories.tsx +471 -0
- package/src/components/waka-terminal-output/WakaTerminalOutput.stories.tsx +351 -0
- package/src/components/waka-test-report/WakaTestReport.stories.tsx +322 -0
- package/src/components/waka-tilt-card/WakaTiltCard.stories.tsx +300 -0
- package/src/components/waka-time-picker/WakaTimePicker.stories.tsx +227 -0
- package/src/components/waka-timeline/WakaTimeline.stories.tsx +383 -0
- package/src/components/waka-tournament-bracket/WakaTournamentBracket.stories.tsx +375 -0
- package/src/components/waka-trace-viewer/WakaTraceViewer.stories.tsx +445 -0
- package/src/components/waka-tree/WakaTree.stories.tsx +359 -0
- package/src/components/waka-treemap-chart/WakaTreemapChart.stories.tsx +378 -0
- package/src/components/waka-typewriter/WakaTypewriter.stories.tsx +366 -0
- package/src/components/waka-versus-card/WakaVersusCard.stories.tsx +530 -0
- package/src/components/waka-video/WakaVideo.stories.tsx +203 -0
- package/src/components/waka-virtual-list/WakaVirtualList.stories.tsx +273 -0
- package/src/components/waka-xp-bar/WakaXPBar.stories.tsx +305 -0
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react'
|
|
2
|
+
import {
|
|
3
|
+
Dialog,
|
|
4
|
+
DialogTrigger,
|
|
5
|
+
DialogContent,
|
|
6
|
+
DialogHeader,
|
|
7
|
+
DialogTitle,
|
|
8
|
+
DialogDescription,
|
|
9
|
+
DialogFooter,
|
|
10
|
+
DialogClose,
|
|
11
|
+
} from './index'
|
|
12
|
+
import { Button } from '../button'
|
|
13
|
+
import { Input } from '../input'
|
|
14
|
+
import { Label } from '../label'
|
|
15
|
+
|
|
16
|
+
const meta: Meta<typeof Dialog> = {
|
|
17
|
+
title: 'Components/Dialog',
|
|
18
|
+
component: Dialog,
|
|
19
|
+
parameters: {
|
|
20
|
+
layout: 'centered',
|
|
21
|
+
docs: {
|
|
22
|
+
description: {
|
|
23
|
+
component: 'A window overlaid on either the primary window or another dialog window, rendering the content underneath inert.',
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
tags: ['autodocs'],
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export default meta
|
|
31
|
+
type Story = StoryObj<typeof Dialog>
|
|
32
|
+
|
|
33
|
+
export const Default: Story = {
|
|
34
|
+
args: {},
|
|
35
|
+
render: (args) => (
|
|
36
|
+
<Dialog {...args}>
|
|
37
|
+
<DialogTrigger asChild>
|
|
38
|
+
<Button variant="outline">Open Dialog</Button>
|
|
39
|
+
</DialogTrigger>
|
|
40
|
+
<DialogContent className="sm:max-w-[425px]">
|
|
41
|
+
<DialogHeader>
|
|
42
|
+
<DialogTitle>Edit profile</DialogTitle>
|
|
43
|
+
<DialogDescription>
|
|
44
|
+
Make changes to your profile here. Click save when you're done.
|
|
45
|
+
</DialogDescription>
|
|
46
|
+
</DialogHeader>
|
|
47
|
+
<div className="grid gap-4 py-4">
|
|
48
|
+
<div className="grid grid-cols-4 items-center gap-4">
|
|
49
|
+
<Label htmlFor="name" className="text-right">
|
|
50
|
+
Name
|
|
51
|
+
</Label>
|
|
52
|
+
<Input id="name" defaultValue="Pedro Duarte" className="col-span-3" />
|
|
53
|
+
</div>
|
|
54
|
+
<div className="grid grid-cols-4 items-center gap-4">
|
|
55
|
+
<Label htmlFor="username" className="text-right">
|
|
56
|
+
Username
|
|
57
|
+
</Label>
|
|
58
|
+
<Input id="username" defaultValue="@peduarte" className="col-span-3" />
|
|
59
|
+
</div>
|
|
60
|
+
</div>
|
|
61
|
+
<DialogFooter>
|
|
62
|
+
<Button type="submit">Save changes</Button>
|
|
63
|
+
</DialogFooter>
|
|
64
|
+
</DialogContent>
|
|
65
|
+
</Dialog>
|
|
66
|
+
),
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export const Simple: Story = {
|
|
70
|
+
render: () => (
|
|
71
|
+
<Dialog>
|
|
72
|
+
<DialogTrigger asChild>
|
|
73
|
+
<Button>Open</Button>
|
|
74
|
+
</DialogTrigger>
|
|
75
|
+
<DialogContent>
|
|
76
|
+
<DialogHeader>
|
|
77
|
+
<DialogTitle>Are you sure?</DialogTitle>
|
|
78
|
+
<DialogDescription>
|
|
79
|
+
This action cannot be undone. This will permanently delete your account
|
|
80
|
+
and remove your data from our servers.
|
|
81
|
+
</DialogDescription>
|
|
82
|
+
</DialogHeader>
|
|
83
|
+
<DialogFooter>
|
|
84
|
+
<DialogClose asChild>
|
|
85
|
+
<Button variant="outline">Cancel</Button>
|
|
86
|
+
</DialogClose>
|
|
87
|
+
<Button variant="destructive">Delete</Button>
|
|
88
|
+
</DialogFooter>
|
|
89
|
+
</DialogContent>
|
|
90
|
+
</Dialog>
|
|
91
|
+
),
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export const CustomWidth: Story = {
|
|
95
|
+
render: () => (
|
|
96
|
+
<Dialog>
|
|
97
|
+
<DialogTrigger asChild>
|
|
98
|
+
<Button variant="secondary">Large Dialog</Button>
|
|
99
|
+
</DialogTrigger>
|
|
100
|
+
<DialogContent className="max-w-2xl">
|
|
101
|
+
<DialogHeader>
|
|
102
|
+
<DialogTitle>Large Content Dialog</DialogTitle>
|
|
103
|
+
<DialogDescription>
|
|
104
|
+
This dialog has a custom width for displaying more content.
|
|
105
|
+
</DialogDescription>
|
|
106
|
+
</DialogHeader>
|
|
107
|
+
<div className="py-4">
|
|
108
|
+
<p className="text-sm text-muted-foreground">
|
|
109
|
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod
|
|
110
|
+
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim
|
|
111
|
+
veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea
|
|
112
|
+
commodo consequat.
|
|
113
|
+
</p>
|
|
114
|
+
</div>
|
|
115
|
+
<DialogFooter>
|
|
116
|
+
<DialogClose asChild>
|
|
117
|
+
<Button>Got it</Button>
|
|
118
|
+
</DialogClose>
|
|
119
|
+
</DialogFooter>
|
|
120
|
+
</DialogContent>
|
|
121
|
+
</Dialog>
|
|
122
|
+
),
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
export const WithForm: Story = {
|
|
126
|
+
render: () => (
|
|
127
|
+
<Dialog>
|
|
128
|
+
<DialogTrigger asChild>
|
|
129
|
+
<Button>Create Account</Button>
|
|
130
|
+
</DialogTrigger>
|
|
131
|
+
<DialogContent className="sm:max-w-md">
|
|
132
|
+
<DialogHeader>
|
|
133
|
+
<DialogTitle>Create account</DialogTitle>
|
|
134
|
+
<DialogDescription>
|
|
135
|
+
Enter your email below to create your account.
|
|
136
|
+
</DialogDescription>
|
|
137
|
+
</DialogHeader>
|
|
138
|
+
<form className="space-y-4">
|
|
139
|
+
<div className="space-y-2">
|
|
140
|
+
<Label htmlFor="email">Email</Label>
|
|
141
|
+
<Input id="email" type="email" placeholder="m@example.com" />
|
|
142
|
+
</div>
|
|
143
|
+
<div className="space-y-2">
|
|
144
|
+
<Label htmlFor="password">Password</Label>
|
|
145
|
+
<Input id="password" type="password" />
|
|
146
|
+
</div>
|
|
147
|
+
</form>
|
|
148
|
+
<DialogFooter className="sm:justify-between">
|
|
149
|
+
<DialogClose asChild>
|
|
150
|
+
<Button variant="ghost">Cancel</Button>
|
|
151
|
+
</DialogClose>
|
|
152
|
+
<Button type="submit">Create</Button>
|
|
153
|
+
</DialogFooter>
|
|
154
|
+
</DialogContent>
|
|
155
|
+
</Dialog>
|
|
156
|
+
),
|
|
157
|
+
}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react'
|
|
2
|
+
import {
|
|
3
|
+
DropdownMenu,
|
|
4
|
+
DropdownMenuContent,
|
|
5
|
+
DropdownMenuGroup,
|
|
6
|
+
DropdownMenuItem,
|
|
7
|
+
DropdownMenuLabel,
|
|
8
|
+
DropdownMenuSeparator,
|
|
9
|
+
DropdownMenuShortcut,
|
|
10
|
+
DropdownMenuTrigger,
|
|
11
|
+
DropdownMenuCheckboxItem,
|
|
12
|
+
DropdownMenuRadioGroup,
|
|
13
|
+
DropdownMenuRadioItem,
|
|
14
|
+
DropdownMenuSub,
|
|
15
|
+
DropdownMenuSubContent,
|
|
16
|
+
DropdownMenuSubTrigger,
|
|
17
|
+
} from './index'
|
|
18
|
+
import { Button } from '../button'
|
|
19
|
+
import {
|
|
20
|
+
User,
|
|
21
|
+
CreditCard,
|
|
22
|
+
Settings,
|
|
23
|
+
Keyboard,
|
|
24
|
+
Users,
|
|
25
|
+
UserPlus,
|
|
26
|
+
Mail,
|
|
27
|
+
MessageSquare,
|
|
28
|
+
PlusCircle,
|
|
29
|
+
Plus,
|
|
30
|
+
Github,
|
|
31
|
+
LifeBuoy,
|
|
32
|
+
Cloud,
|
|
33
|
+
LogOut,
|
|
34
|
+
ChevronDown,
|
|
35
|
+
} from 'lucide-react'
|
|
36
|
+
import * as React from 'react'
|
|
37
|
+
|
|
38
|
+
const meta: Meta<typeof DropdownMenu> = {
|
|
39
|
+
title: 'Components/DropdownMenu',
|
|
40
|
+
component: DropdownMenu,
|
|
41
|
+
parameters: {
|
|
42
|
+
layout: 'centered',
|
|
43
|
+
docs: {
|
|
44
|
+
description: {
|
|
45
|
+
component: 'Displays a menu to the user with a list of actions or options triggered by a button.',
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
tags: ['autodocs'],
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export default meta
|
|
53
|
+
type Story = StoryObj<typeof DropdownMenu>
|
|
54
|
+
|
|
55
|
+
export const Default: Story = {
|
|
56
|
+
args: {},
|
|
57
|
+
render: (args) => (
|
|
58
|
+
<DropdownMenu {...args}>
|
|
59
|
+
<DropdownMenuTrigger asChild>
|
|
60
|
+
<Button variant="outline">
|
|
61
|
+
Open Menu
|
|
62
|
+
<ChevronDown className="ml-2 h-4 w-4" />
|
|
63
|
+
</Button>
|
|
64
|
+
</DropdownMenuTrigger>
|
|
65
|
+
<DropdownMenuContent className="w-56">
|
|
66
|
+
<DropdownMenuLabel>My Account</DropdownMenuLabel>
|
|
67
|
+
<DropdownMenuSeparator />
|
|
68
|
+
<DropdownMenuGroup>
|
|
69
|
+
<DropdownMenuItem>
|
|
70
|
+
<User className="mr-2 h-4 w-4" />
|
|
71
|
+
<span>Profile</span>
|
|
72
|
+
<DropdownMenuShortcut>⇧⌘P</DropdownMenuShortcut>
|
|
73
|
+
</DropdownMenuItem>
|
|
74
|
+
<DropdownMenuItem>
|
|
75
|
+
<CreditCard className="mr-2 h-4 w-4" />
|
|
76
|
+
<span>Billing</span>
|
|
77
|
+
<DropdownMenuShortcut>⌘B</DropdownMenuShortcut>
|
|
78
|
+
</DropdownMenuItem>
|
|
79
|
+
<DropdownMenuItem>
|
|
80
|
+
<Settings className="mr-2 h-4 w-4" />
|
|
81
|
+
<span>Settings</span>
|
|
82
|
+
<DropdownMenuShortcut>⌘S</DropdownMenuShortcut>
|
|
83
|
+
</DropdownMenuItem>
|
|
84
|
+
</DropdownMenuGroup>
|
|
85
|
+
<DropdownMenuSeparator />
|
|
86
|
+
<DropdownMenuItem>
|
|
87
|
+
<LogOut className="mr-2 h-4 w-4" />
|
|
88
|
+
<span>Log out</span>
|
|
89
|
+
<DropdownMenuShortcut>⇧⌘Q</DropdownMenuShortcut>
|
|
90
|
+
</DropdownMenuItem>
|
|
91
|
+
</DropdownMenuContent>
|
|
92
|
+
</DropdownMenu>
|
|
93
|
+
),
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
export const WithCheckboxes: Story = {
|
|
97
|
+
render: function CheckboxMenu() {
|
|
98
|
+
const [showStatusBar, setShowStatusBar] = React.useState(true)
|
|
99
|
+
const [showActivityBar, setShowActivityBar] = React.useState(false)
|
|
100
|
+
const [showPanel, setShowPanel] = React.useState(false)
|
|
101
|
+
|
|
102
|
+
return (
|
|
103
|
+
<DropdownMenu>
|
|
104
|
+
<DropdownMenuTrigger asChild>
|
|
105
|
+
<Button variant="outline">View Options</Button>
|
|
106
|
+
</DropdownMenuTrigger>
|
|
107
|
+
<DropdownMenuContent className="w-56">
|
|
108
|
+
<DropdownMenuLabel>Appearance</DropdownMenuLabel>
|
|
109
|
+
<DropdownMenuSeparator />
|
|
110
|
+
<DropdownMenuCheckboxItem
|
|
111
|
+
checked={showStatusBar}
|
|
112
|
+
onCheckedChange={setShowStatusBar}
|
|
113
|
+
>
|
|
114
|
+
Status Bar
|
|
115
|
+
</DropdownMenuCheckboxItem>
|
|
116
|
+
<DropdownMenuCheckboxItem
|
|
117
|
+
checked={showActivityBar}
|
|
118
|
+
onCheckedChange={setShowActivityBar}
|
|
119
|
+
>
|
|
120
|
+
Activity Bar
|
|
121
|
+
</DropdownMenuCheckboxItem>
|
|
122
|
+
<DropdownMenuCheckboxItem
|
|
123
|
+
checked={showPanel}
|
|
124
|
+
onCheckedChange={setShowPanel}
|
|
125
|
+
>
|
|
126
|
+
Panel
|
|
127
|
+
</DropdownMenuCheckboxItem>
|
|
128
|
+
</DropdownMenuContent>
|
|
129
|
+
</DropdownMenu>
|
|
130
|
+
)
|
|
131
|
+
},
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
export const WithRadioGroup: Story = {
|
|
135
|
+
render: function RadioMenu() {
|
|
136
|
+
const [position, setPosition] = React.useState("bottom")
|
|
137
|
+
|
|
138
|
+
return (
|
|
139
|
+
<DropdownMenu>
|
|
140
|
+
<DropdownMenuTrigger asChild>
|
|
141
|
+
<Button variant="outline">Panel Position</Button>
|
|
142
|
+
</DropdownMenuTrigger>
|
|
143
|
+
<DropdownMenuContent className="w-56">
|
|
144
|
+
<DropdownMenuLabel>Panel Position</DropdownMenuLabel>
|
|
145
|
+
<DropdownMenuSeparator />
|
|
146
|
+
<DropdownMenuRadioGroup value={position} onValueChange={setPosition}>
|
|
147
|
+
<DropdownMenuRadioItem value="top">Top</DropdownMenuRadioItem>
|
|
148
|
+
<DropdownMenuRadioItem value="bottom">Bottom</DropdownMenuRadioItem>
|
|
149
|
+
<DropdownMenuRadioItem value="right">Right</DropdownMenuRadioItem>
|
|
150
|
+
</DropdownMenuRadioGroup>
|
|
151
|
+
</DropdownMenuContent>
|
|
152
|
+
</DropdownMenu>
|
|
153
|
+
)
|
|
154
|
+
},
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
export const WithSubmenu: Story = {
|
|
158
|
+
render: () => (
|
|
159
|
+
<DropdownMenu>
|
|
160
|
+
<DropdownMenuTrigger asChild>
|
|
161
|
+
<Button variant="outline">Open</Button>
|
|
162
|
+
</DropdownMenuTrigger>
|
|
163
|
+
<DropdownMenuContent className="w-56">
|
|
164
|
+
<DropdownMenuGroup>
|
|
165
|
+
<DropdownMenuItem>
|
|
166
|
+
<User className="mr-2 h-4 w-4" />
|
|
167
|
+
<span>Profile</span>
|
|
168
|
+
</DropdownMenuItem>
|
|
169
|
+
<DropdownMenuSub>
|
|
170
|
+
<DropdownMenuSubTrigger>
|
|
171
|
+
<UserPlus className="mr-2 h-4 w-4" />
|
|
172
|
+
<span>Invite users</span>
|
|
173
|
+
</DropdownMenuSubTrigger>
|
|
174
|
+
<DropdownMenuSubContent>
|
|
175
|
+
<DropdownMenuItem>
|
|
176
|
+
<Mail className="mr-2 h-4 w-4" />
|
|
177
|
+
<span>Email</span>
|
|
178
|
+
</DropdownMenuItem>
|
|
179
|
+
<DropdownMenuItem>
|
|
180
|
+
<MessageSquare className="mr-2 h-4 w-4" />
|
|
181
|
+
<span>Message</span>
|
|
182
|
+
</DropdownMenuItem>
|
|
183
|
+
<DropdownMenuSeparator />
|
|
184
|
+
<DropdownMenuItem>
|
|
185
|
+
<PlusCircle className="mr-2 h-4 w-4" />
|
|
186
|
+
<span>More...</span>
|
|
187
|
+
</DropdownMenuItem>
|
|
188
|
+
</DropdownMenuSubContent>
|
|
189
|
+
</DropdownMenuSub>
|
|
190
|
+
</DropdownMenuGroup>
|
|
191
|
+
<DropdownMenuSeparator />
|
|
192
|
+
<DropdownMenuItem>
|
|
193
|
+
<Github className="mr-2 h-4 w-4" />
|
|
194
|
+
<span>GitHub</span>
|
|
195
|
+
</DropdownMenuItem>
|
|
196
|
+
<DropdownMenuItem>
|
|
197
|
+
<LifeBuoy className="mr-2 h-4 w-4" />
|
|
198
|
+
<span>Support</span>
|
|
199
|
+
</DropdownMenuItem>
|
|
200
|
+
<DropdownMenuItem disabled>
|
|
201
|
+
<Cloud className="mr-2 h-4 w-4" />
|
|
202
|
+
<span>API (coming soon)</span>
|
|
203
|
+
</DropdownMenuItem>
|
|
204
|
+
</DropdownMenuContent>
|
|
205
|
+
</DropdownMenu>
|
|
206
|
+
),
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
export const Simple: Story = {
|
|
210
|
+
render: () => (
|
|
211
|
+
<DropdownMenu>
|
|
212
|
+
<DropdownMenuTrigger asChild>
|
|
213
|
+
<Button variant="ghost" size="sm">
|
|
214
|
+
Actions
|
|
215
|
+
</Button>
|
|
216
|
+
</DropdownMenuTrigger>
|
|
217
|
+
<DropdownMenuContent>
|
|
218
|
+
<DropdownMenuItem>Edit</DropdownMenuItem>
|
|
219
|
+
<DropdownMenuItem>Duplicate</DropdownMenuItem>
|
|
220
|
+
<DropdownMenuSeparator />
|
|
221
|
+
<DropdownMenuItem className="text-destructive">Delete</DropdownMenuItem>
|
|
222
|
+
</DropdownMenuContent>
|
|
223
|
+
</DropdownMenu>
|
|
224
|
+
),
|
|
225
|
+
}
|