@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,202 @@
1
+ import type { Meta, StoryObj } from '@storybook/react'
2
+ import {
3
+ NavigationMenu,
4
+ NavigationMenuContent,
5
+ NavigationMenuItem,
6
+ NavigationMenuLink,
7
+ NavigationMenuList,
8
+ NavigationMenuTrigger,
9
+ navigationMenuTriggerStyle,
10
+ } from './index'
11
+ import { cn } from '../../utils/cn'
12
+ import * as React from 'react'
13
+
14
+ const meta: Meta<typeof NavigationMenu> = {
15
+ title: 'Components/NavigationMenu',
16
+ component: NavigationMenu,
17
+ parameters: {
18
+ layout: 'centered',
19
+ docs: {
20
+ description: {
21
+ component: 'A collection of links for navigating websites.',
22
+ },
23
+ },
24
+ },
25
+ tags: ['autodocs'],
26
+ }
27
+
28
+ export default meta
29
+ type Story = StoryObj<typeof NavigationMenu>
30
+
31
+ const ListItem = React.forwardRef<
32
+ React.ElementRef<'a'>,
33
+ React.ComponentPropsWithoutRef<'a'> & { title: string }
34
+ >(({ className, title, children, ...props }, ref) => {
35
+ return (
36
+ <li>
37
+ <NavigationMenuLink asChild>
38
+ <a
39
+ ref={ref}
40
+ className={cn(
41
+ 'block select-none space-y-1 rounded-md p-3 leading-none no-underline outline-none transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground',
42
+ className
43
+ )}
44
+ {...props}
45
+ >
46
+ <div className="text-sm font-medium leading-none">{title}</div>
47
+ <p className="line-clamp-2 text-sm leading-snug text-muted-foreground">
48
+ {children}
49
+ </p>
50
+ </a>
51
+ </NavigationMenuLink>
52
+ </li>
53
+ )
54
+ })
55
+ ListItem.displayName = 'ListItem'
56
+
57
+ export const Default: Story = {
58
+ args: {},
59
+ render: (args) => (
60
+ <NavigationMenu {...args}>
61
+ <NavigationMenuList>
62
+ <NavigationMenuItem>
63
+ <NavigationMenuTrigger>Getting started</NavigationMenuTrigger>
64
+ <NavigationMenuContent>
65
+ <ul className="grid gap-3 p-6 md:w-[400px] lg:w-[500px] lg:grid-cols-[.75fr_1fr]">
66
+ <li className="row-span-3">
67
+ <NavigationMenuLink asChild>
68
+ <a
69
+ className="flex h-full w-full select-none flex-col justify-end rounded-md bg-gradient-to-b from-muted/50 to-muted p-6 no-underline outline-none focus:shadow-md"
70
+ href="#"
71
+ >
72
+ <div className="mb-2 mt-4 text-lg font-medium">
73
+ shadcn/ui
74
+ </div>
75
+ <p className="text-sm leading-tight text-muted-foreground">
76
+ Beautifully designed components built with Radix UI and
77
+ Tailwind CSS.
78
+ </p>
79
+ </a>
80
+ </NavigationMenuLink>
81
+ </li>
82
+ <ListItem href="#" title="Introduction">
83
+ Re-usable components built using Radix UI and Tailwind CSS.
84
+ </ListItem>
85
+ <ListItem href="#" title="Installation">
86
+ How to install dependencies and structure your app.
87
+ </ListItem>
88
+ <ListItem href="#" title="Typography">
89
+ Styles for headings, paragraphs, lists...etc
90
+ </ListItem>
91
+ </ul>
92
+ </NavigationMenuContent>
93
+ </NavigationMenuItem>
94
+ <NavigationMenuItem>
95
+ <NavigationMenuTrigger>Components</NavigationMenuTrigger>
96
+ <NavigationMenuContent>
97
+ <ul className="grid w-[400px] gap-3 p-4 md:w-[500px] md:grid-cols-2 lg:w-[600px]">
98
+ <ListItem href="#" title="Alert Dialog">
99
+ A modal dialog that interrupts the user with important content.
100
+ </ListItem>
101
+ <ListItem href="#" title="Hover Card">
102
+ For sighted users to preview content behind a link.
103
+ </ListItem>
104
+ <ListItem href="#" title="Progress">
105
+ Displays an indicator showing the completion progress.
106
+ </ListItem>
107
+ <ListItem href="#" title="Scroll-area">
108
+ Visually or semantically separates content.
109
+ </ListItem>
110
+ <ListItem href="#" title="Tabs">
111
+ A set of layered sections of content.
112
+ </ListItem>
113
+ <ListItem href="#" title="Tooltip">
114
+ A popup that displays information on hover.
115
+ </ListItem>
116
+ </ul>
117
+ </NavigationMenuContent>
118
+ </NavigationMenuItem>
119
+ <NavigationMenuItem>
120
+ <NavigationMenuLink className={navigationMenuTriggerStyle()} href="#">
121
+ Documentation
122
+ </NavigationMenuLink>
123
+ </NavigationMenuItem>
124
+ </NavigationMenuList>
125
+ </NavigationMenu>
126
+ ),
127
+ }
128
+
129
+ export const Simple: Story = {
130
+ render: () => (
131
+ <NavigationMenu>
132
+ <NavigationMenuList>
133
+ <NavigationMenuItem>
134
+ <NavigationMenuLink className={navigationMenuTriggerStyle()} href="#">
135
+ Home
136
+ </NavigationMenuLink>
137
+ </NavigationMenuItem>
138
+ <NavigationMenuItem>
139
+ <NavigationMenuLink className={navigationMenuTriggerStyle()} href="#">
140
+ About
141
+ </NavigationMenuLink>
142
+ </NavigationMenuItem>
143
+ <NavigationMenuItem>
144
+ <NavigationMenuLink className={navigationMenuTriggerStyle()} href="#">
145
+ Services
146
+ </NavigationMenuLink>
147
+ </NavigationMenuItem>
148
+ <NavigationMenuItem>
149
+ <NavigationMenuLink className={navigationMenuTriggerStyle()} href="#">
150
+ Contact
151
+ </NavigationMenuLink>
152
+ </NavigationMenuItem>
153
+ </NavigationMenuList>
154
+ </NavigationMenu>
155
+ ),
156
+ }
157
+
158
+ export const WithDropdowns: Story = {
159
+ render: () => (
160
+ <NavigationMenu>
161
+ <NavigationMenuList>
162
+ <NavigationMenuItem>
163
+ <NavigationMenuTrigger>Products</NavigationMenuTrigger>
164
+ <NavigationMenuContent>
165
+ <ul className="grid w-[400px] gap-3 p-4">
166
+ <ListItem href="#" title="Analytics">
167
+ Track and measure your application performance.
168
+ </ListItem>
169
+ <ListItem href="#" title="Engagement">
170
+ Build better relationships with your users.
171
+ </ListItem>
172
+ <ListItem href="#" title="Security">
173
+ Protect your data and your users.
174
+ </ListItem>
175
+ </ul>
176
+ </NavigationMenuContent>
177
+ </NavigationMenuItem>
178
+ <NavigationMenuItem>
179
+ <NavigationMenuTrigger>Resources</NavigationMenuTrigger>
180
+ <NavigationMenuContent>
181
+ <ul className="grid w-[400px] gap-3 p-4">
182
+ <ListItem href="#" title="Documentation">
183
+ Learn how to integrate our tools.
184
+ </ListItem>
185
+ <ListItem href="#" title="API Reference">
186
+ Complete API documentation.
187
+ </ListItem>
188
+ <ListItem href="#" title="Guides">
189
+ Step-by-step tutorials.
190
+ </ListItem>
191
+ </ul>
192
+ </NavigationMenuContent>
193
+ </NavigationMenuItem>
194
+ <NavigationMenuItem>
195
+ <NavigationMenuLink className={navigationMenuTriggerStyle()} href="#">
196
+ Pricing
197
+ </NavigationMenuLink>
198
+ </NavigationMenuItem>
199
+ </NavigationMenuList>
200
+ </NavigationMenu>
201
+ ),
202
+ }
@@ -0,0 +1,199 @@
1
+ import type { Meta, StoryObj } from '@storybook/react'
2
+ import { Popover, PopoverContent, PopoverTrigger } from './index'
3
+ import { Button } from '../button'
4
+ import { Input } from '../input'
5
+ import { Label } from '../label'
6
+ import { Settings, Share, Plus } from 'lucide-react'
7
+
8
+ const meta: Meta<typeof Popover> = {
9
+ title: 'Components/Popover',
10
+ component: Popover,
11
+ parameters: {
12
+ layout: 'centered',
13
+ docs: {
14
+ description: {
15
+ component: 'Displays rich content in a portal, triggered by a button.',
16
+ },
17
+ },
18
+ },
19
+ tags: ['autodocs'],
20
+ }
21
+
22
+ export default meta
23
+ type Story = StoryObj<typeof Popover>
24
+
25
+ export const Default: Story = {
26
+ args: {},
27
+ render: (args) => (
28
+ <Popover {...args}>
29
+ <PopoverTrigger asChild>
30
+ <Button variant="outline">Open popover</Button>
31
+ </PopoverTrigger>
32
+ <PopoverContent className="w-80">
33
+ <div className="grid gap-4">
34
+ <div className="space-y-2">
35
+ <h4 className="font-medium leading-none">Dimensions</h4>
36
+ <p className="text-sm text-muted-foreground">
37
+ Set the dimensions for the layer.
38
+ </p>
39
+ </div>
40
+ <div className="grid gap-2">
41
+ <div className="grid grid-cols-3 items-center gap-4">
42
+ <Label htmlFor="width">Width</Label>
43
+ <Input
44
+ id="width"
45
+ defaultValue="100%"
46
+ className="col-span-2 h-8"
47
+ />
48
+ </div>
49
+ <div className="grid grid-cols-3 items-center gap-4">
50
+ <Label htmlFor="height">Height</Label>
51
+ <Input
52
+ id="height"
53
+ defaultValue="25px"
54
+ className="col-span-2 h-8"
55
+ />
56
+ </div>
57
+ </div>
58
+ </div>
59
+ </PopoverContent>
60
+ </Popover>
61
+ ),
62
+ }
63
+
64
+ export const Positions: Story = {
65
+ render: () => (
66
+ <div className="flex gap-8">
67
+ <Popover>
68
+ <PopoverTrigger asChild>
69
+ <Button variant="outline">Top</Button>
70
+ </PopoverTrigger>
71
+ <PopoverContent side="top" className="w-auto">
72
+ <p className="text-sm">Popover on top</p>
73
+ </PopoverContent>
74
+ </Popover>
75
+ <Popover>
76
+ <PopoverTrigger asChild>
77
+ <Button variant="outline">Right</Button>
78
+ </PopoverTrigger>
79
+ <PopoverContent side="right" className="w-auto">
80
+ <p className="text-sm">Popover on right</p>
81
+ </PopoverContent>
82
+ </Popover>
83
+ <Popover>
84
+ <PopoverTrigger asChild>
85
+ <Button variant="outline">Bottom</Button>
86
+ </PopoverTrigger>
87
+ <PopoverContent side="bottom" className="w-auto">
88
+ <p className="text-sm">Popover on bottom</p>
89
+ </PopoverContent>
90
+ </Popover>
91
+ <Popover>
92
+ <PopoverTrigger asChild>
93
+ <Button variant="outline">Left</Button>
94
+ </PopoverTrigger>
95
+ <PopoverContent side="left" className="w-auto">
96
+ <p className="text-sm">Popover on left</p>
97
+ </PopoverContent>
98
+ </Popover>
99
+ </div>
100
+ ),
101
+ }
102
+
103
+ export const WithForm: Story = {
104
+ render: () => (
105
+ <Popover>
106
+ <PopoverTrigger asChild>
107
+ <Button>
108
+ <Plus className="mr-2 h-4 w-4" />
109
+ Add item
110
+ </Button>
111
+ </PopoverTrigger>
112
+ <PopoverContent className="w-80">
113
+ <form className="grid gap-4">
114
+ <div className="space-y-2">
115
+ <h4 className="font-medium leading-none">Add new item</h4>
116
+ <p className="text-sm text-muted-foreground">
117
+ Fill in the details below.
118
+ </p>
119
+ </div>
120
+ <div className="grid gap-2">
121
+ <div className="grid gap-1">
122
+ <Label htmlFor="name">Name</Label>
123
+ <Input id="name" placeholder="Enter name" />
124
+ </div>
125
+ <div className="grid gap-1">
126
+ <Label htmlFor="description">Description</Label>
127
+ <Input id="description" placeholder="Enter description" />
128
+ </div>
129
+ </div>
130
+ <Button type="submit">Save</Button>
131
+ </form>
132
+ </PopoverContent>
133
+ </Popover>
134
+ ),
135
+ }
136
+
137
+ export const SharePopover: Story = {
138
+ render: () => (
139
+ <Popover>
140
+ <PopoverTrigger asChild>
141
+ <Button variant="secondary">
142
+ <Share className="mr-2 h-4 w-4" />
143
+ Share
144
+ </Button>
145
+ </PopoverTrigger>
146
+ <PopoverContent className="w-80">
147
+ <div className="grid gap-4">
148
+ <div className="space-y-2">
149
+ <h4 className="font-medium leading-none">Share link</h4>
150
+ <p className="text-sm text-muted-foreground">
151
+ Anyone with this link can view this content.
152
+ </p>
153
+ </div>
154
+ <div className="flex gap-2">
155
+ <Input
156
+ defaultValue="https://example.com/share/abc123"
157
+ readOnly
158
+ className="h-8"
159
+ />
160
+ <Button size="sm" className="px-3">
161
+ Copy
162
+ </Button>
163
+ </div>
164
+ </div>
165
+ </PopoverContent>
166
+ </Popover>
167
+ ),
168
+ }
169
+
170
+ export const SettingsPopover: Story = {
171
+ render: () => (
172
+ <Popover>
173
+ <PopoverTrigger asChild>
174
+ <Button variant="ghost" size="icon">
175
+ <Settings className="h-4 w-4" />
176
+ </Button>
177
+ </PopoverTrigger>
178
+ <PopoverContent className="w-56">
179
+ <div className="grid gap-4">
180
+ <h4 className="font-medium leading-none">Settings</h4>
181
+ <div className="grid gap-2">
182
+ <button className="text-left text-sm hover:bg-muted p-2 rounded-md">
183
+ Profile settings
184
+ </button>
185
+ <button className="text-left text-sm hover:bg-muted p-2 rounded-md">
186
+ Notifications
187
+ </button>
188
+ <button className="text-left text-sm hover:bg-muted p-2 rounded-md">
189
+ Privacy
190
+ </button>
191
+ <button className="text-left text-sm text-destructive hover:bg-muted p-2 rounded-md">
192
+ Sign out
193
+ </button>
194
+ </div>
195
+ </div>
196
+ </PopoverContent>
197
+ </Popover>
198
+ ),
199
+ }
@@ -0,0 +1,104 @@
1
+ import type { Meta, StoryObj } from '@storybook/react'
2
+ import { Progress } from './index'
3
+ import * as React from 'react'
4
+
5
+ const meta: Meta<typeof Progress> = {
6
+ title: 'Components/Progress',
7
+ component: Progress,
8
+ parameters: {
9
+ layout: 'centered',
10
+ docs: {
11
+ description: {
12
+ component: 'Displays an indicator showing the completion progress of a task.',
13
+ },
14
+ },
15
+ },
16
+ tags: ['autodocs'],
17
+ argTypes: {
18
+ value: {
19
+ control: { type: 'range', min: 0, max: 100, step: 1 },
20
+ description: 'The progress value (0-100)',
21
+ },
22
+ },
23
+ }
24
+
25
+ export default meta
26
+ type Story = StoryObj<typeof Progress>
27
+
28
+ export const Default: Story = {
29
+ args: {
30
+ value: 60,
31
+ className: 'w-[300px]',
32
+ },
33
+ }
34
+
35
+ export const Values: Story = {
36
+ render: () => (
37
+ <div className="flex flex-col gap-4 w-[300px]">
38
+ <div className="space-y-1">
39
+ <span className="text-sm text-muted-foreground">0%</span>
40
+ <Progress value={0} />
41
+ </div>
42
+ <div className="space-y-1">
43
+ <span className="text-sm text-muted-foreground">25%</span>
44
+ <Progress value={25} />
45
+ </div>
46
+ <div className="space-y-1">
47
+ <span className="text-sm text-muted-foreground">50%</span>
48
+ <Progress value={50} />
49
+ </div>
50
+ <div className="space-y-1">
51
+ <span className="text-sm text-muted-foreground">75%</span>
52
+ <Progress value={75} />
53
+ </div>
54
+ <div className="space-y-1">
55
+ <span className="text-sm text-muted-foreground">100%</span>
56
+ <Progress value={100} />
57
+ </div>
58
+ </div>
59
+ ),
60
+ }
61
+
62
+ export const Animated: Story = {
63
+ render: function AnimatedProgress() {
64
+ const [progress, setProgress] = React.useState(13)
65
+
66
+ React.useEffect(() => {
67
+ const timer = setTimeout(() => setProgress(66), 500)
68
+ return () => clearTimeout(timer)
69
+ }, [])
70
+
71
+ return <Progress value={progress} className="w-[300px]" />
72
+ },
73
+ }
74
+
75
+ export const Sizes: Story = {
76
+ render: () => (
77
+ <div className="flex flex-col gap-4 w-[300px]">
78
+ <div className="space-y-1">
79
+ <span className="text-sm text-muted-foreground">Small (h-2)</span>
80
+ <Progress value={60} className="h-2" />
81
+ </div>
82
+ <div className="space-y-1">
83
+ <span className="text-sm text-muted-foreground">Default (h-4)</span>
84
+ <Progress value={60} />
85
+ </div>
86
+ <div className="space-y-1">
87
+ <span className="text-sm text-muted-foreground">Large (h-6)</span>
88
+ <Progress value={60} className="h-6" />
89
+ </div>
90
+ </div>
91
+ ),
92
+ }
93
+
94
+ export const WithLabel: Story = {
95
+ render: () => (
96
+ <div className="w-[300px] space-y-2">
97
+ <div className="flex justify-between text-sm">
98
+ <span>Uploading...</span>
99
+ <span className="text-muted-foreground">73%</span>
100
+ </div>
101
+ <Progress value={73} />
102
+ </div>
103
+ ),
104
+ }
@@ -0,0 +1,138 @@
1
+ import type { Meta, StoryObj } from '@storybook/react'
2
+ import { RadioGroup, RadioGroupItem } from './index'
3
+ import { Label } from '../label'
4
+
5
+ const meta: Meta<typeof RadioGroup> = {
6
+ title: 'Components/RadioGroup',
7
+ component: RadioGroup,
8
+ parameters: {
9
+ layout: 'centered',
10
+ docs: {
11
+ description: {
12
+ component: 'A set of checkable buttons where only one can be checked at a time.',
13
+ },
14
+ },
15
+ },
16
+ tags: ['autodocs'],
17
+ }
18
+
19
+ export default meta
20
+ type Story = StoryObj<typeof RadioGroup>
21
+
22
+ export const Default: Story = {
23
+ args: {
24
+ defaultValue: 'comfortable',
25
+ },
26
+ render: (args) => (
27
+ <RadioGroup {...args}>
28
+ <div className="flex items-center space-x-2">
29
+ <RadioGroupItem value="default" id="r1" />
30
+ <Label htmlFor="r1">Default</Label>
31
+ </div>
32
+ <div className="flex items-center space-x-2">
33
+ <RadioGroupItem value="comfortable" id="r2" />
34
+ <Label htmlFor="r2">Comfortable</Label>
35
+ </div>
36
+ <div className="flex items-center space-x-2">
37
+ <RadioGroupItem value="compact" id="r3" />
38
+ <Label htmlFor="r3">Compact</Label>
39
+ </div>
40
+ </RadioGroup>
41
+ ),
42
+ }
43
+
44
+ export const Horizontal: Story = {
45
+ render: () => (
46
+ <RadioGroup defaultValue="option-1" className="flex gap-4">
47
+ <div className="flex items-center space-x-2">
48
+ <RadioGroupItem value="option-1" id="h1" />
49
+ <Label htmlFor="h1">Option 1</Label>
50
+ </div>
51
+ <div className="flex items-center space-x-2">
52
+ <RadioGroupItem value="option-2" id="h2" />
53
+ <Label htmlFor="h2">Option 2</Label>
54
+ </div>
55
+ <div className="flex items-center space-x-2">
56
+ <RadioGroupItem value="option-3" id="h3" />
57
+ <Label htmlFor="h3">Option 3</Label>
58
+ </div>
59
+ </RadioGroup>
60
+ ),
61
+ }
62
+
63
+ export const WithDescription: Story = {
64
+ render: () => (
65
+ <RadioGroup defaultValue="card" className="gap-4">
66
+ <div className="flex items-start space-x-3">
67
+ <RadioGroupItem value="card" id="card" className="mt-1" />
68
+ <div className="grid gap-1.5 leading-none">
69
+ <Label htmlFor="card">Card payment</Label>
70
+ <p className="text-sm text-muted-foreground">
71
+ Pay with credit or debit card
72
+ </p>
73
+ </div>
74
+ </div>
75
+ <div className="flex items-start space-x-3">
76
+ <RadioGroupItem value="paypal" id="paypal" className="mt-1" />
77
+ <div className="grid gap-1.5 leading-none">
78
+ <Label htmlFor="paypal">PayPal</Label>
79
+ <p className="text-sm text-muted-foreground">
80
+ Pay with your PayPal account
81
+ </p>
82
+ </div>
83
+ </div>
84
+ <div className="flex items-start space-x-3">
85
+ <RadioGroupItem value="bank" id="bank" className="mt-1" />
86
+ <div className="grid gap-1.5 leading-none">
87
+ <Label htmlFor="bank">Bank transfer</Label>
88
+ <p className="text-sm text-muted-foreground">
89
+ Pay via bank transfer
90
+ </p>
91
+ </div>
92
+ </div>
93
+ </RadioGroup>
94
+ ),
95
+ }
96
+
97
+ export const Disabled: Story = {
98
+ render: () => (
99
+ <RadioGroup defaultValue="option-1">
100
+ <div className="flex items-center space-x-2">
101
+ <RadioGroupItem value="option-1" id="d1" />
102
+ <Label htmlFor="d1">Available</Label>
103
+ </div>
104
+ <div className="flex items-center space-x-2">
105
+ <RadioGroupItem value="option-2" id="d2" disabled />
106
+ <Label htmlFor="d2" className="text-muted-foreground">Disabled</Label>
107
+ </div>
108
+ <div className="flex items-center space-x-2">
109
+ <RadioGroupItem value="option-3" id="d3" />
110
+ <Label htmlFor="d3">Available</Label>
111
+ </div>
112
+ </RadioGroup>
113
+ ),
114
+ }
115
+
116
+ export const FormExample: Story = {
117
+ render: () => (
118
+ <form className="w-[300px] space-y-6">
119
+ <div className="space-y-3">
120
+ <Label>Notification preferences</Label>
121
+ <RadioGroup defaultValue="all">
122
+ <div className="flex items-center space-x-2">
123
+ <RadioGroupItem value="all" id="notify-all" />
124
+ <Label htmlFor="notify-all">All notifications</Label>
125
+ </div>
126
+ <div className="flex items-center space-x-2">
127
+ <RadioGroupItem value="important" id="notify-important" />
128
+ <Label htmlFor="notify-important">Important only</Label>
129
+ </div>
130
+ <div className="flex items-center space-x-2">
131
+ <RadioGroupItem value="none" id="notify-none" />
132
+ <Label htmlFor="notify-none">None</Label>
133
+ </div>
134
+ </RadioGroup>
135
+ </div>
136
+ </form>
137
+ ),
138
+ }