@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.
Files changed (194) hide show
  1. package/dist/blocks/dashboard/index.d.ts +4 -1
  2. package/dist/blocks/empty-states/index.d.ts +4 -1
  3. package/dist/blocks/error-pages/index.d.ts +4 -1
  4. package/dist/blocks/index.d.ts +1 -1
  5. package/dist/blocks/landing/index.d.ts +4 -1
  6. package/dist/blocks/pricing/index.d.ts +5 -1
  7. package/dist/blocks/sidebar/index.d.ts +5 -1
  8. package/dist/index.cjs.js +130 -130
  9. package/dist/index.d.ts +1 -0
  10. package/dist/index.es.js +7905 -7856
  11. package/dist/stories/Button.d.ts +14 -0
  12. package/dist/stories/Button.stories.d.ts +8 -0
  13. package/dist/stories/Header.d.ts +11 -0
  14. package/dist/stories/Header.stories.d.ts +6 -0
  15. package/dist/stories/Page.d.ts +2 -0
  16. package/dist/stories/Page.stories.d.ts +6 -0
  17. package/dist/types/index.d.ts +1 -0
  18. package/dist/types/link.d.ts +23 -0
  19. package/package.json +11 -3
  20. package/src/blocks/activity-timeline/ActivityTimeline.stories.tsx +460 -0
  21. package/src/blocks/apm-overview/APMOverview.stories.tsx +435 -0
  22. package/src/blocks/auth-2fa/Auth2FA.stories.tsx +308 -0
  23. package/src/blocks/calendar-view/CalendarView.stories.tsx +398 -0
  24. package/src/blocks/chat/Chat.stories.tsx +466 -0
  25. package/src/blocks/chat-interface/ChatInterface.stories.tsx +412 -0
  26. package/src/blocks/checkout-flow/CheckoutFlow.stories.tsx +408 -0
  27. package/src/blocks/cicd-builder/CICDBuilder.stories.tsx +499 -0
  28. package/src/blocks/cloud-cost-dashboard/CloudCostDashboard.stories.tsx +356 -0
  29. package/src/blocks/container-orchestrator/ContainerOrchestrator.stories.tsx +461 -0
  30. package/src/blocks/dashboard/Dashboard.stories.tsx +559 -0
  31. package/src/blocks/dashboard/index.tsx +68 -27
  32. package/src/blocks/dashboard-kpi/DashboardKPI.stories.tsx +422 -0
  33. package/src/blocks/database-admin/DatabaseAdmin.stories.tsx +393 -0
  34. package/src/blocks/deployment-dashboard/DeploymentDashboard.stories.tsx +457 -0
  35. package/src/blocks/empty-states/EmptyStates.stories.tsx +467 -0
  36. package/src/blocks/empty-states/index.tsx +26 -8
  37. package/src/blocks/error-pages/ErrorPages.stories.tsx +401 -0
  38. package/src/blocks/error-pages/index.tsx +26 -8
  39. package/src/blocks/faq/FAQ.stories.tsx +416 -0
  40. package/src/blocks/file-manager/FileManager.stories.tsx +413 -0
  41. package/src/blocks/footer/Footer.stories.tsx +328 -0
  42. package/src/blocks/gitops-sync-status/GitOpsSyncStatus.stories.tsx +529 -0
  43. package/src/blocks/header/WakaHeader.stories.tsx +455 -0
  44. package/src/blocks/headtab/Headtab.stories.tsx +369 -0
  45. package/src/blocks/i18n-editor/I18nEditor.stories.tsx +451 -0
  46. package/src/blocks/incident-manager/IncidentManager.stories.tsx +464 -0
  47. package/src/blocks/index.ts +1 -1
  48. package/src/blocks/infrastructure-map/InfrastructureMap.stories.tsx +533 -0
  49. package/src/blocks/kanban-board/KanbanBoard.stories.tsx +494 -0
  50. package/src/blocks/landing/WakaLanding.stories.tsx +449 -0
  51. package/src/blocks/landing/index.tsx +125 -66
  52. package/src/blocks/language-selector/LanguageSelector.stories.tsx +345 -0
  53. package/src/blocks/layout/Layout.stories.tsx +373 -0
  54. package/src/blocks/login/Login.stories.tsx +443 -0
  55. package/src/blocks/on-call-schedule/OnCallSchedule.stories.tsx +381 -0
  56. package/src/blocks/player-profile/PlayerProfile.stories.tsx +316 -0
  57. package/src/blocks/pricing/WakaPricing.stories.tsx +530 -0
  58. package/src/blocks/pricing/index.tsx +38 -4
  59. package/src/blocks/profile/Profile.stories.tsx +371 -0
  60. package/src/blocks/release-notes/ReleaseNotes.stories.tsx +431 -0
  61. package/src/blocks/settings/Settings.stories.tsx +520 -0
  62. package/src/blocks/sidebar/WakaSidebar.stories.tsx +513 -0
  63. package/src/blocks/sidebar/index.tsx +49 -20
  64. package/src/blocks/theme-creator-block/ThemeCreatorBlock.stories.tsx +370 -0
  65. package/src/blocks/user-management/UserManagement.stories.tsx +411 -0
  66. package/src/blocks/wizard/Wizard.stories.tsx +683 -0
  67. package/src/components/accordion/Accordion.stories.tsx +93 -0
  68. package/src/components/alert/Alert.stories.tsx +95 -0
  69. package/src/components/alert-dialog/AlertDialog.stories.tsx +126 -0
  70. package/src/components/aspect-ratio/AspectRatio.stories.tsx +118 -0
  71. package/src/components/avatar/Avatar.stories.tsx +104 -0
  72. package/src/components/button/Button.stories.tsx +12 -1
  73. package/src/components/calendar/Calendar.stories.tsx +102 -0
  74. package/src/components/card/Card.stories.tsx +125 -0
  75. package/src/components/checkbox/Checkbox.stories.tsx +100 -0
  76. package/src/components/code/Code.stories.tsx +402 -0
  77. package/src/components/collapsible/Collapsible.stories.tsx +123 -0
  78. package/src/components/command/Command.stories.tsx +207 -0
  79. package/src/components/context-menu/ContextMenu.stories.tsx +220 -0
  80. package/src/components/dialog/Dialog.stories.tsx +157 -0
  81. package/src/components/dropdown-menu/DropdownMenu.stories.tsx +225 -0
  82. package/src/components/form/Form.stories.tsx +413 -0
  83. package/src/components/hover-card/HoverCard.stories.tsx +148 -0
  84. package/src/components/input-otp/InputOTP.stories.tsx +255 -0
  85. package/src/components/label/Label.stories.tsx +68 -0
  86. package/src/components/menubar/Menubar.stories.tsx +278 -0
  87. package/src/components/navigation-menu/NavigationMenu.stories.tsx +202 -0
  88. package/src/components/popover/Popover.stories.tsx +199 -0
  89. package/src/components/progress/Progress.stories.tsx +104 -0
  90. package/src/components/radio-group/RadioGroup.stories.tsx +138 -0
  91. package/src/components/scroll-area/ScrollArea.stories.tsx +153 -0
  92. package/src/components/select/Select.stories.tsx +146 -0
  93. package/src/components/separator/Separator.stories.tsx +117 -0
  94. package/src/components/sheet/Sheet.stories.tsx +195 -0
  95. package/src/components/skeleton/Skeleton.stories.tsx +114 -0
  96. package/src/components/slider/Slider.stories.tsx +157 -0
  97. package/src/components/switch/Switch.stories.tsx +114 -0
  98. package/src/components/table/Table.stories.tsx +153 -0
  99. package/src/components/tabs/Tabs.stories.tsx +155 -0
  100. package/src/components/textarea/Textarea.stories.tsx +116 -0
  101. package/src/components/toast/Toast.stories.tsx +160 -0
  102. package/src/components/toggle/Toggle.stories.tsx +125 -0
  103. package/src/components/tooltip/Tooltip.stories.tsx +133 -0
  104. package/src/components/typography/Typography.stories.tsx +207 -0
  105. package/src/components/waka-3d-pie-chart/Waka3DPieChart.stories.tsx +308 -0
  106. package/src/components/waka-achievement-unlock/WakaAchievementUnlock.stories.tsx +353 -0
  107. package/src/components/waka-artifact-list/WakaArtifactList.stories.tsx +258 -0
  108. package/src/components/waka-autocomplete/WakaAutocomplete.stories.tsx +224 -0
  109. package/src/components/waka-badge-showcase/WakaBadgeShowcase.stories.tsx +269 -0
  110. package/src/components/waka-barcode/WakaBarcode.stories.tsx +227 -0
  111. package/src/components/waka-bottom-sheet/WakaBottomSheet.stories.tsx +408 -0
  112. package/src/components/waka-breadcrumb/WakaBreadcrumb.stories.tsx +237 -0
  113. package/src/components/waka-build-matrix/WakaBuildMatrix.stories.tsx +328 -0
  114. package/src/components/waka-carousel/WakaCarousel.stories.tsx +296 -0
  115. package/src/components/waka-charts/WakaCharts.stories.tsx +519 -0
  116. package/src/components/waka-color-picker/WakaColorPicker.stories.tsx +200 -0
  117. package/src/components/waka-combobox/WakaCombobox.stories.tsx +250 -0
  118. package/src/components/waka-container-list/WakaContainerList.stories.tsx +315 -0
  119. package/src/components/waka-contribution-graph/WakaContributionGraph.stories.tsx +354 -0
  120. package/src/components/waka-cost-breakdown/WakaCostBreakdown.stories.tsx +348 -0
  121. package/src/components/waka-daily-reward/WakaDailyReward.stories.tsx +365 -0
  122. package/src/components/waka-database-card/WakaDatabaseCard.stories.tsx +306 -0
  123. package/src/components/waka-date-range-picker/WakaDateRangePicker.stories.tsx +339 -0
  124. package/src/components/waka-datetime-picker/WakaDateTimePicker.stories.tsx +317 -0
  125. package/src/components/waka-deployment-lane/WakaDeploymentLane.stories.tsx +292 -0
  126. package/src/components/waka-dock/WakaDock.stories.tsx +332 -0
  127. package/src/components/waka-drawer/WakaDrawer.stories.tsx +437 -0
  128. package/src/components/waka-env-var-editor/WakaEnvVarEditor.stories.tsx +263 -0
  129. package/src/components/waka-error-shake/WakaErrorShake.stories.tsx +410 -0
  130. package/src/components/waka-file-upload/WakaFileUpload.stories.tsx +239 -0
  131. package/src/components/waka-flow-diagram/WakaFlowDiagram.stories.tsx +365 -0
  132. package/src/components/waka-funnel-chart/WakaFunnelChart.stories.tsx +281 -0
  133. package/src/components/waka-glow-card/WakaGlowCard.stories.tsx +274 -0
  134. package/src/components/waka-haptic-button/WakaHapticButton.stories.tsx +349 -0
  135. package/src/components/waka-health-pulse/WakaHealthPulse.stories.tsx +293 -0
  136. package/src/components/waka-heatmap/WakaHeatmap.stories.tsx +376 -0
  137. package/src/components/waka-image/WakaImage.stories.tsx +255 -0
  138. package/src/components/waka-incident-timeline/WakaIncidentTimeline.stories.tsx +300 -0
  139. package/src/components/waka-kanban/WakaKanban.stories.tsx +399 -0
  140. package/src/components/waka-kubernetes-overview/WakaKubernetesOverview.stories.tsx +281 -0
  141. package/src/components/waka-leaderboard/WakaLeaderboard.stories.tsx +300 -0
  142. package/src/components/waka-level-progress/WakaLevelProgress.stories.tsx +313 -0
  143. package/src/components/waka-loading-orbit/WakaLoadingOrbit.stories.tsx +413 -0
  144. package/src/components/waka-log-viewer/WakaLogViewer.stories.tsx +312 -0
  145. package/src/components/waka-loot-box/WakaLootBox.stories.tsx +374 -0
  146. package/src/components/waka-metric-sparkline/WakaMetricSparkline.stories.tsx +312 -0
  147. package/src/components/waka-migration-list/WakaMigrationList.stories.tsx +289 -0
  148. package/src/components/waka-modal/WakaModal.stories.tsx +434 -0
  149. package/src/components/waka-morph-button/WakaMorphButton.stories.tsx +405 -0
  150. package/src/components/waka-network-topology/WakaNetworkTopology.stories.tsx +364 -0
  151. package/src/components/waka-notifications/WakaNotifications.stories.tsx +290 -0
  152. package/src/components/waka-number-input/WakaNumberInput.stories.tsx +282 -0
  153. package/src/components/waka-pagination/WakaPagination.stories.tsx +328 -0
  154. package/src/components/waka-password-strength/WakaPasswordStrength.stories.tsx +318 -0
  155. package/src/components/waka-pipeline-view/WakaPipelineView.stories.tsx +386 -0
  156. package/src/components/waka-player-card/WakaPlayerCard.stories.tsx +333 -0
  157. package/src/components/waka-pod-card/WakaPodCard.stories.tsx +435 -0
  158. package/src/components/waka-qrcode/WakaQRCode.stories.tsx +232 -0
  159. package/src/components/waka-query-explain/WakaQueryExplain.stories.tsx +407 -0
  160. package/src/components/waka-quest-card/WakaQuestCard.stories.tsx +394 -0
  161. package/src/components/waka-quota-bar/WakaQuotaBar.stories.tsx +435 -0
  162. package/src/components/waka-radar-score/WakaRadarScore.stories.tsx +372 -0
  163. package/src/components/waka-resource-gauge/WakaResourceGauge.stories.tsx +366 -0
  164. package/src/components/waka-rich-text-editor/WakaRichTextEditor.stories.tsx +238 -0
  165. package/src/components/waka-sankey-diagram/WakaSankeyDiagram.stories.tsx +389 -0
  166. package/src/components/waka-scratch-card/WakaScratchCard.stories.tsx +388 -0
  167. package/src/components/waka-secret-card/WakaSecretCard.stories.tsx +314 -0
  168. package/src/components/waka-segmented-control/WakaSegmentedControl.stories.tsx +309 -0
  169. package/src/components/waka-server-rack/WakaServerRack.stories.tsx +382 -0
  170. package/src/components/waka-service-graph/WakaServiceGraph.stories.tsx +262 -0
  171. package/src/components/waka-skeleton-wave/WakaSkeletonWave.stories.tsx +321 -0
  172. package/src/components/waka-skill-tree/WakaSkillTree.stories.tsx +308 -0
  173. package/src/components/waka-spin-wheel/WakaSpinWheel.stories.tsx +368 -0
  174. package/src/components/waka-spinner/WakaSpinner.stories.tsx +156 -0
  175. package/src/components/waka-stat/WakaStat.stories.tsx +334 -0
  176. package/src/components/waka-status-matrix/WakaStatusMatrix.stories.tsx +331 -0
  177. package/src/components/waka-stepper/WakaStepper.stories.tsx +468 -0
  178. package/src/components/waka-streak-counter/WakaStreakCounter.stories.tsx +235 -0
  179. package/src/components/waka-success-explosion/WakaSuccessExplosion.stories.tsx +389 -0
  180. package/src/components/waka-tabs-morph/WakaTabsMorph.stories.tsx +471 -0
  181. package/src/components/waka-terminal-output/WakaTerminalOutput.stories.tsx +351 -0
  182. package/src/components/waka-test-report/WakaTestReport.stories.tsx +322 -0
  183. package/src/components/waka-tilt-card/WakaTiltCard.stories.tsx +300 -0
  184. package/src/components/waka-time-picker/WakaTimePicker.stories.tsx +227 -0
  185. package/src/components/waka-timeline/WakaTimeline.stories.tsx +383 -0
  186. package/src/components/waka-tournament-bracket/WakaTournamentBracket.stories.tsx +375 -0
  187. package/src/components/waka-trace-viewer/WakaTraceViewer.stories.tsx +445 -0
  188. package/src/components/waka-tree/WakaTree.stories.tsx +359 -0
  189. package/src/components/waka-treemap-chart/WakaTreemapChart.stories.tsx +378 -0
  190. package/src/components/waka-typewriter/WakaTypewriter.stories.tsx +366 -0
  191. package/src/components/waka-versus-card/WakaVersusCard.stories.tsx +530 -0
  192. package/src/components/waka-video/WakaVideo.stories.tsx +203 -0
  193. package/src/components/waka-virtual-list/WakaVirtualList.stories.tsx +273 -0
  194. 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
+ }