@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,116 @@
1
+ import type { Meta, StoryObj } from '@storybook/react'
2
+ import { Textarea } from './index'
3
+ import { Label } from '../label'
4
+ import { Button } from '../button'
5
+
6
+ const meta: Meta<typeof Textarea> = {
7
+ title: 'Components/Textarea',
8
+ component: Textarea,
9
+ parameters: {
10
+ layout: 'centered',
11
+ docs: {
12
+ description: {
13
+ component: 'Displays a form textarea or a component that looks like a textarea.',
14
+ },
15
+ },
16
+ },
17
+ tags: ['autodocs'],
18
+ argTypes: {
19
+ placeholder: {
20
+ control: 'text',
21
+ description: 'Placeholder text',
22
+ },
23
+ disabled: {
24
+ control: 'boolean',
25
+ description: 'When true, prevents the user from interacting with the textarea',
26
+ },
27
+ },
28
+ }
29
+
30
+ export default meta
31
+ type Story = StoryObj<typeof Textarea>
32
+
33
+ export const Default: Story = {
34
+ args: {
35
+ placeholder: 'Type your message here.',
36
+ className: 'w-[300px]',
37
+ },
38
+ }
39
+
40
+ export const WithLabel: Story = {
41
+ render: () => (
42
+ <div className="grid w-full max-w-sm gap-1.5">
43
+ <Label htmlFor="message">Your message</Label>
44
+ <Textarea placeholder="Type your message here." id="message" />
45
+ </div>
46
+ ),
47
+ }
48
+
49
+ export const Disabled: Story = {
50
+ render: () => (
51
+ <Textarea
52
+ placeholder="This textarea is disabled."
53
+ disabled
54
+ className="w-[300px]"
55
+ />
56
+ ),
57
+ }
58
+
59
+ export const WithText: Story = {
60
+ render: () => (
61
+ <div className="grid w-full max-w-sm gap-1.5">
62
+ <Label htmlFor="bio">Bio</Label>
63
+ <Textarea placeholder="Tell us about yourself" id="bio" />
64
+ <p className="text-sm text-muted-foreground">
65
+ Your bio will be visible to other users.
66
+ </p>
67
+ </div>
68
+ ),
69
+ }
70
+
71
+ export const WithButton: Story = {
72
+ render: () => (
73
+ <div className="grid w-full max-w-sm gap-2">
74
+ <Textarea placeholder="Type your message here." />
75
+ <Button>Send message</Button>
76
+ </div>
77
+ ),
78
+ }
79
+
80
+ export const FormExample: Story = {
81
+ render: () => (
82
+ <form className="w-[400px] space-y-4">
83
+ <div className="space-y-2">
84
+ <Label htmlFor="feedback">Feedback</Label>
85
+ <Textarea
86
+ id="feedback"
87
+ placeholder="Share your feedback with us..."
88
+ className="min-h-[120px]"
89
+ />
90
+ </div>
91
+ <div className="flex justify-end gap-2">
92
+ <Button variant="outline">Cancel</Button>
93
+ <Button>Submit</Button>
94
+ </div>
95
+ </form>
96
+ ),
97
+ }
98
+
99
+ export const Sizes: Story = {
100
+ render: () => (
101
+ <div className="flex flex-col gap-4 w-[300px]">
102
+ <div className="space-y-1">
103
+ <Label>Small</Label>
104
+ <Textarea placeholder="Small textarea" className="min-h-[60px]" />
105
+ </div>
106
+ <div className="space-y-1">
107
+ <Label>Default</Label>
108
+ <Textarea placeholder="Default textarea" />
109
+ </div>
110
+ <div className="space-y-1">
111
+ <Label>Large</Label>
112
+ <Textarea placeholder="Large textarea" className="min-h-[150px]" />
113
+ </div>
114
+ </div>
115
+ ),
116
+ }
@@ -0,0 +1,160 @@
1
+ import type { Meta, StoryObj } from '@storybook/react'
2
+ import {
3
+ Toast,
4
+ ToastAction,
5
+ ToastClose,
6
+ ToastDescription,
7
+ ToastProvider,
8
+ ToastTitle,
9
+ ToastViewport,
10
+ } from './index'
11
+ import { Button } from '../button'
12
+ import * as React from 'react'
13
+
14
+ const meta: Meta<typeof Toast> = {
15
+ title: 'Components/Toast',
16
+ component: Toast,
17
+ parameters: {
18
+ layout: 'centered',
19
+ docs: {
20
+ description: {
21
+ component: 'A succinct message that is displayed temporarily.',
22
+ },
23
+ },
24
+ },
25
+ tags: ['autodocs'],
26
+ }
27
+
28
+ export default meta
29
+ type Story = StoryObj<typeof Toast>
30
+
31
+ export const Default: Story = {
32
+ render: function ToastDemo() {
33
+ const [open, setOpen] = React.useState(false)
34
+
35
+ return (
36
+ <ToastProvider>
37
+ <Button
38
+ variant="outline"
39
+ onClick={() => setOpen(true)}
40
+ >
41
+ Show Toast
42
+ </Button>
43
+ <Toast open={open} onOpenChange={setOpen}>
44
+ <div className="grid gap-1">
45
+ <ToastTitle>Scheduled: Catch up</ToastTitle>
46
+ <ToastDescription>Friday, February 10, 2023 at 5:57 PM</ToastDescription>
47
+ </div>
48
+ <ToastClose />
49
+ </Toast>
50
+ <ToastViewport />
51
+ </ToastProvider>
52
+ )
53
+ },
54
+ }
55
+
56
+ export const WithAction: Story = {
57
+ render: function ToastWithAction() {
58
+ const [open, setOpen] = React.useState(false)
59
+
60
+ return (
61
+ <ToastProvider>
62
+ <Button
63
+ variant="outline"
64
+ onClick={() => setOpen(true)}
65
+ >
66
+ Add to Calendar
67
+ </Button>
68
+ <Toast open={open} onOpenChange={setOpen}>
69
+ <div className="grid gap-1">
70
+ <ToastTitle>Event Added</ToastTitle>
71
+ <ToastDescription>Your event has been added to the calendar.</ToastDescription>
72
+ </div>
73
+ <ToastAction altText="Undo">Undo</ToastAction>
74
+ <ToastClose />
75
+ </Toast>
76
+ <ToastViewport />
77
+ </ToastProvider>
78
+ )
79
+ },
80
+ }
81
+
82
+ export const Destructive: Story = {
83
+ render: function DestructiveToast() {
84
+ const [open, setOpen] = React.useState(false)
85
+
86
+ return (
87
+ <ToastProvider>
88
+ <Button
89
+ variant="destructive"
90
+ onClick={() => setOpen(true)}
91
+ >
92
+ Delete Item
93
+ </Button>
94
+ <Toast open={open} onOpenChange={setOpen} variant="destructive">
95
+ <div className="grid gap-1">
96
+ <ToastTitle>Error</ToastTitle>
97
+ <ToastDescription>Something went wrong. Please try again.</ToastDescription>
98
+ </div>
99
+ <ToastAction altText="Try again">Try again</ToastAction>
100
+ <ToastClose />
101
+ </Toast>
102
+ <ToastViewport />
103
+ </ToastProvider>
104
+ )
105
+ },
106
+ }
107
+
108
+ export const Variants: Story = {
109
+ render: function ToastVariants() {
110
+ const [defaultOpen, setDefaultOpen] = React.useState(false)
111
+ const [destructiveOpen, setDestructiveOpen] = React.useState(false)
112
+
113
+ return (
114
+ <ToastProvider>
115
+ <div className="flex gap-4">
116
+ <Button variant="outline" onClick={() => setDefaultOpen(true)}>
117
+ Default Toast
118
+ </Button>
119
+ <Button variant="destructive" onClick={() => setDestructiveOpen(true)}>
120
+ Destructive Toast
121
+ </Button>
122
+ </div>
123
+ <Toast open={defaultOpen} onOpenChange={setDefaultOpen}>
124
+ <div className="grid gap-1">
125
+ <ToastTitle>Success</ToastTitle>
126
+ <ToastDescription>Your changes have been saved.</ToastDescription>
127
+ </div>
128
+ <ToastClose />
129
+ </Toast>
130
+ <Toast open={destructiveOpen} onOpenChange={setDestructiveOpen} variant="destructive">
131
+ <div className="grid gap-1">
132
+ <ToastTitle>Error</ToastTitle>
133
+ <ToastDescription>Failed to save changes.</ToastDescription>
134
+ </div>
135
+ <ToastClose />
136
+ </Toast>
137
+ <ToastViewport />
138
+ </ToastProvider>
139
+ )
140
+ },
141
+ }
142
+
143
+ export const Simple: Story = {
144
+ render: function SimpleToast() {
145
+ const [open, setOpen] = React.useState(false)
146
+
147
+ return (
148
+ <ToastProvider>
149
+ <Button onClick={() => setOpen(true)}>
150
+ Show Simple Toast
151
+ </Button>
152
+ <Toast open={open} onOpenChange={setOpen}>
153
+ <ToastDescription>Your message has been sent.</ToastDescription>
154
+ <ToastClose />
155
+ </Toast>
156
+ <ToastViewport />
157
+ </ToastProvider>
158
+ )
159
+ },
160
+ }
@@ -0,0 +1,125 @@
1
+ import type { Meta, StoryObj } from '@storybook/react'
2
+ import { Toggle } from './index'
3
+ import { Bold, Italic, Underline, AlignLeft, AlignCenter, AlignRight } from 'lucide-react'
4
+
5
+ const meta: Meta<typeof Toggle> = {
6
+ title: 'Components/Toggle',
7
+ component: Toggle,
8
+ parameters: {
9
+ layout: 'centered',
10
+ docs: {
11
+ description: {
12
+ component: 'A two-state button that can be either on or off.',
13
+ },
14
+ },
15
+ },
16
+ tags: ['autodocs'],
17
+ argTypes: {
18
+ variant: {
19
+ control: 'select',
20
+ options: ['default', 'outline'],
21
+ description: 'The visual style of the toggle',
22
+ },
23
+ size: {
24
+ control: 'select',
25
+ options: ['default', 'sm', 'lg'],
26
+ description: 'The size of the toggle',
27
+ },
28
+ disabled: {
29
+ control: 'boolean',
30
+ description: 'When true, prevents the user from interacting with the toggle',
31
+ },
32
+ },
33
+ }
34
+
35
+ export default meta
36
+ type Story = StoryObj<typeof Toggle>
37
+
38
+ export const Default: Story = {
39
+ args: {
40
+ 'aria-label': 'Toggle bold',
41
+ },
42
+ render: (args) => (
43
+ <Toggle {...args}>
44
+ <Bold className="h-4 w-4" />
45
+ </Toggle>
46
+ ),
47
+ }
48
+
49
+ export const Outline: Story = {
50
+ render: () => (
51
+ <Toggle variant="outline" aria-label="Toggle italic">
52
+ <Italic className="h-4 w-4" />
53
+ </Toggle>
54
+ ),
55
+ }
56
+
57
+ export const WithText: Story = {
58
+ render: () => (
59
+ <Toggle aria-label="Toggle underline">
60
+ <Underline className="h-4 w-4 mr-2" />
61
+ Underline
62
+ </Toggle>
63
+ ),
64
+ }
65
+
66
+ export const Sizes: Story = {
67
+ render: () => (
68
+ <div className="flex items-center gap-4">
69
+ <Toggle size="sm" aria-label="Toggle small">
70
+ <Bold className="h-3 w-3" />
71
+ </Toggle>
72
+ <Toggle size="default" aria-label="Toggle default">
73
+ <Bold className="h-4 w-4" />
74
+ </Toggle>
75
+ <Toggle size="lg" aria-label="Toggle large">
76
+ <Bold className="h-5 w-5" />
77
+ </Toggle>
78
+ </div>
79
+ ),
80
+ }
81
+
82
+ export const Disabled: Story = {
83
+ render: () => (
84
+ <div className="flex gap-4">
85
+ <Toggle disabled aria-label="Disabled toggle">
86
+ <Bold className="h-4 w-4" />
87
+ </Toggle>
88
+ <Toggle disabled defaultPressed aria-label="Disabled pressed toggle">
89
+ <Italic className="h-4 w-4" />
90
+ </Toggle>
91
+ </div>
92
+ ),
93
+ }
94
+
95
+ export const ToggleGroup: Story = {
96
+ render: () => (
97
+ <div className="flex gap-1 rounded-md border p-1">
98
+ <Toggle size="sm" aria-label="Bold">
99
+ <Bold className="h-4 w-4" />
100
+ </Toggle>
101
+ <Toggle size="sm" aria-label="Italic">
102
+ <Italic className="h-4 w-4" />
103
+ </Toggle>
104
+ <Toggle size="sm" aria-label="Underline">
105
+ <Underline className="h-4 w-4" />
106
+ </Toggle>
107
+ </div>
108
+ ),
109
+ }
110
+
111
+ export const AlignmentGroup: Story = {
112
+ render: () => (
113
+ <div className="flex gap-1 rounded-md border p-1">
114
+ <Toggle size="sm" defaultPressed aria-label="Align left">
115
+ <AlignLeft className="h-4 w-4" />
116
+ </Toggle>
117
+ <Toggle size="sm" aria-label="Align center">
118
+ <AlignCenter className="h-4 w-4" />
119
+ </Toggle>
120
+ <Toggle size="sm" aria-label="Align right">
121
+ <AlignRight className="h-4 w-4" />
122
+ </Toggle>
123
+ </div>
124
+ ),
125
+ }
@@ -0,0 +1,133 @@
1
+ import type { Meta, StoryObj } from '@storybook/react'
2
+ import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from './index'
3
+ import { Button } from '../button'
4
+ import { Plus, HelpCircle, Info } from 'lucide-react'
5
+
6
+ const meta: Meta<typeof Tooltip> = {
7
+ title: 'Components/Tooltip',
8
+ component: Tooltip,
9
+ parameters: {
10
+ layout: 'centered',
11
+ docs: {
12
+ description: {
13
+ component: 'A popup that displays information related to an element when the element receives keyboard focus or the mouse hovers over it.',
14
+ },
15
+ },
16
+ },
17
+ tags: ['autodocs'],
18
+ decorators: [
19
+ (Story) => (
20
+ <TooltipProvider>
21
+ <Story />
22
+ </TooltipProvider>
23
+ ),
24
+ ],
25
+ }
26
+
27
+ export default meta
28
+ type Story = StoryObj<typeof Tooltip>
29
+
30
+ export const Default: Story = {
31
+ args: {},
32
+ render: (args) => (
33
+ <Tooltip {...args}>
34
+ <TooltipTrigger asChild>
35
+ <Button variant="outline">Hover me</Button>
36
+ </TooltipTrigger>
37
+ <TooltipContent>
38
+ <p>Add to library</p>
39
+ </TooltipContent>
40
+ </Tooltip>
41
+ ),
42
+ }
43
+
44
+ export const WithIcon: Story = {
45
+ render: () => (
46
+ <Tooltip>
47
+ <TooltipTrigger asChild>
48
+ <Button variant="outline" size="icon">
49
+ <Plus className="h-4 w-4" />
50
+ </Button>
51
+ </TooltipTrigger>
52
+ <TooltipContent>
53
+ <p>Add new item</p>
54
+ </TooltipContent>
55
+ </Tooltip>
56
+ ),
57
+ }
58
+
59
+ export const Positions: Story = {
60
+ render: () => (
61
+ <div className="flex gap-8">
62
+ <Tooltip>
63
+ <TooltipTrigger asChild>
64
+ <Button variant="outline">Top</Button>
65
+ </TooltipTrigger>
66
+ <TooltipContent side="top">
67
+ <p>Top tooltip</p>
68
+ </TooltipContent>
69
+ </Tooltip>
70
+ <Tooltip>
71
+ <TooltipTrigger asChild>
72
+ <Button variant="outline">Right</Button>
73
+ </TooltipTrigger>
74
+ <TooltipContent side="right">
75
+ <p>Right tooltip</p>
76
+ </TooltipContent>
77
+ </Tooltip>
78
+ <Tooltip>
79
+ <TooltipTrigger asChild>
80
+ <Button variant="outline">Bottom</Button>
81
+ </TooltipTrigger>
82
+ <TooltipContent side="bottom">
83
+ <p>Bottom tooltip</p>
84
+ </TooltipContent>
85
+ </Tooltip>
86
+ <Tooltip>
87
+ <TooltipTrigger asChild>
88
+ <Button variant="outline">Left</Button>
89
+ </TooltipTrigger>
90
+ <TooltipContent side="left">
91
+ <p>Left tooltip</p>
92
+ </TooltipContent>
93
+ </Tooltip>
94
+ </div>
95
+ ),
96
+ }
97
+
98
+ export const HelpTooltip: Story = {
99
+ render: () => (
100
+ <div className="flex items-center gap-2">
101
+ <span className="text-sm">Need help?</span>
102
+ <Tooltip>
103
+ <TooltipTrigger>
104
+ <HelpCircle className="h-4 w-4 text-muted-foreground" />
105
+ </TooltipTrigger>
106
+ <TooltipContent>
107
+ <p>Click here for more information</p>
108
+ </TooltipContent>
109
+ </Tooltip>
110
+ </div>
111
+ ),
112
+ }
113
+
114
+ export const WithRichContent: Story = {
115
+ render: () => (
116
+ <Tooltip>
117
+ <TooltipTrigger asChild>
118
+ <Button variant="secondary">
119
+ <Info className="mr-2 h-4 w-4" />
120
+ Details
121
+ </Button>
122
+ </TooltipTrigger>
123
+ <TooltipContent className="max-w-xs">
124
+ <div className="space-y-1">
125
+ <p className="font-medium">Additional Information</p>
126
+ <p className="text-xs text-muted-foreground">
127
+ This tooltip contains more detailed information that helps users understand the feature.
128
+ </p>
129
+ </div>
130
+ </TooltipContent>
131
+ </Tooltip>
132
+ ),
133
+ }