@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,156 @@
1
+ import type { Meta, StoryObj } from '@storybook/react'
2
+ import { WakaSpinner } from './index'
3
+
4
+ const meta: Meta<typeof WakaSpinner> = {
5
+ title: 'Components/Display/WakaSpinner',
6
+ component: WakaSpinner,
7
+ parameters: {
8
+ layout: 'centered',
9
+ docs: {
10
+ description: {
11
+ component: 'A space-themed loading spinner with an orbiting rocket and floating asteroids.',
12
+ },
13
+ },
14
+ },
15
+ tags: ['autodocs'],
16
+ argTypes: {
17
+ size: {
18
+ control: 'select',
19
+ options: ['sm', 'md', 'lg', 'xl'],
20
+ description: 'Size of the spinner',
21
+ },
22
+ speed: {
23
+ control: { type: 'range', min: 0.5, max: 5, step: 0.5 },
24
+ description: 'Rotation speed in seconds',
25
+ },
26
+ showAsteroids: {
27
+ control: 'boolean',
28
+ description: 'Show floating asteroids',
29
+ },
30
+ rocketColor: {
31
+ control: 'text',
32
+ description: 'Color of the rocket',
33
+ },
34
+ asteroidColor: {
35
+ control: 'text',
36
+ description: 'Color of the asteroids',
37
+ },
38
+ },
39
+ }
40
+
41
+ export default meta
42
+ type Story = StoryObj<typeof WakaSpinner>
43
+
44
+ export const Default: Story = {
45
+ args: {},
46
+ }
47
+
48
+ export const Sizes: Story = {
49
+ render: () => (
50
+ <div className="flex items-end gap-8">
51
+ <div className="text-center">
52
+ <WakaSpinner size="sm" />
53
+ <p className="text-xs text-muted-foreground mt-2">Small</p>
54
+ </div>
55
+ <div className="text-center">
56
+ <WakaSpinner size="md" />
57
+ <p className="text-xs text-muted-foreground mt-2">Medium</p>
58
+ </div>
59
+ <div className="text-center">
60
+ <WakaSpinner size="lg" />
61
+ <p className="text-xs text-muted-foreground mt-2">Large</p>
62
+ </div>
63
+ <div className="text-center">
64
+ <WakaSpinner size="xl" />
65
+ <p className="text-xs text-muted-foreground mt-2">Extra Large</p>
66
+ </div>
67
+ </div>
68
+ ),
69
+ }
70
+
71
+ export const Speeds: Story = {
72
+ render: () => (
73
+ <div className="flex items-end gap-8">
74
+ <div className="text-center">
75
+ <WakaSpinner size="md" speed={1} />
76
+ <p className="text-xs text-muted-foreground mt-2">Fast (1s)</p>
77
+ </div>
78
+ <div className="text-center">
79
+ <WakaSpinner size="md" speed={2} />
80
+ <p className="text-xs text-muted-foreground mt-2">Normal (2s)</p>
81
+ </div>
82
+ <div className="text-center">
83
+ <WakaSpinner size="md" speed={4} />
84
+ <p className="text-xs text-muted-foreground mt-2">Slow (4s)</p>
85
+ </div>
86
+ </div>
87
+ ),
88
+ }
89
+
90
+ export const WithoutAsteroids: Story = {
91
+ args: {
92
+ size: 'lg',
93
+ showAsteroids: false,
94
+ },
95
+ }
96
+
97
+ export const CustomColors: Story = {
98
+ render: () => (
99
+ <div className="flex items-center gap-8">
100
+ <div className="text-center">
101
+ <WakaSpinner size="lg" rocketColor="text-blue-500" asteroidColor="text-blue-300" />
102
+ <p className="text-xs text-muted-foreground mt-2">Blue</p>
103
+ </div>
104
+ <div className="text-center">
105
+ <WakaSpinner size="lg" rocketColor="text-green-500" asteroidColor="text-green-300" />
106
+ <p className="text-xs text-muted-foreground mt-2">Green</p>
107
+ </div>
108
+ <div className="text-center">
109
+ <WakaSpinner size="lg" rocketColor="text-purple-500" asteroidColor="text-purple-300" />
110
+ <p className="text-xs text-muted-foreground mt-2">Purple</p>
111
+ </div>
112
+ <div className="text-center">
113
+ <WakaSpinner size="lg" rocketColor="text-orange-500" asteroidColor="text-orange-300" />
114
+ <p className="text-xs text-muted-foreground mt-2">Orange</p>
115
+ </div>
116
+ </div>
117
+ ),
118
+ }
119
+
120
+ export const LoadingOverlay: Story = {
121
+ render: () => (
122
+ <div className="relative w-[400px] h-[300px] border rounded-lg overflow-hidden">
123
+ <div className="absolute inset-0 flex items-center justify-center bg-background/80 backdrop-blur-sm">
124
+ <div className="text-center">
125
+ <WakaSpinner size="lg" />
126
+ <p className="mt-4 text-sm text-muted-foreground">Loading content...</p>
127
+ </div>
128
+ </div>
129
+ <div className="p-4 opacity-30">
130
+ <h3 className="font-semibold">Card Title</h3>
131
+ <p className="text-sm text-muted-foreground">
132
+ This content is loading. The spinner displays while data is being fetched.
133
+ </p>
134
+ </div>
135
+ </div>
136
+ ),
137
+ }
138
+
139
+ export const InButton: Story = {
140
+ render: () => (
141
+ <button className="inline-flex items-center gap-2 px-4 py-2 bg-primary text-primary-foreground rounded-md">
142
+ <WakaSpinner size="sm" rocketColor="text-primary-foreground" showAsteroids={false} />
143
+ <span>Processing...</span>
144
+ </button>
145
+ ),
146
+ }
147
+
148
+ export const FullPageLoader: Story = {
149
+ render: () => (
150
+ <div className="w-[600px] h-[400px] flex flex-col items-center justify-center bg-gradient-to-b from-background to-muted/30 rounded-lg">
151
+ <WakaSpinner size="xl" />
152
+ <h2 className="mt-6 text-lg font-semibold">Launching your experience</h2>
153
+ <p className="mt-2 text-sm text-muted-foreground">Please wait while we prepare everything...</p>
154
+ </div>
155
+ ),
156
+ }
@@ -0,0 +1,334 @@
1
+ import type { Meta, StoryObj } from '@storybook/react'
2
+ import { WakaStat, WakaStatGroup } from './index'
3
+ import * as React from 'react'
4
+ import { Users, DollarSign, ShoppingCart, TrendingUp, Activity, Package, Eye, Download } from 'lucide-react'
5
+
6
+ const meta: Meta<typeof WakaStat> = {
7
+ title: 'Components/Display/WakaStat',
8
+ component: WakaStat,
9
+ parameters: {
10
+ layout: 'centered',
11
+ docs: {
12
+ description: {
13
+ component: 'A statistic display component with trends, icons, and multiple visual variants.',
14
+ },
15
+ },
16
+ },
17
+ tags: ['autodocs'],
18
+ argTypes: {
19
+ variant: {
20
+ control: 'select',
21
+ options: ['default', 'card', 'minimal', 'gradient'],
22
+ description: 'Visual variant',
23
+ },
24
+ size: {
25
+ control: 'select',
26
+ options: ['sm', 'md', 'lg'],
27
+ description: 'Size of the component',
28
+ },
29
+ color: {
30
+ control: 'select',
31
+ options: ['default', 'primary', 'success', 'warning', 'destructive', 'blue', 'purple'],
32
+ description: 'Accent color',
33
+ },
34
+ trend: {
35
+ control: 'select',
36
+ options: ['up', 'down', 'neutral'],
37
+ description: 'Trend direction',
38
+ },
39
+ },
40
+ }
41
+
42
+ export default meta
43
+ type Story = StoryObj<typeof WakaStat>
44
+
45
+ export const Default: Story = {
46
+ args: {
47
+ label: 'Total Revenue',
48
+ value: '$45,231.89',
49
+ description: 'Monthly revenue from all sources',
50
+ trend: 'up',
51
+ trendValue: '+20.1%',
52
+ trendText: 'from last month',
53
+ icon: <DollarSign className="h-5 w-5" />,
54
+ },
55
+ }
56
+
57
+ export const Variants: Story = {
58
+ render: () => (
59
+ <div className="space-y-6 w-[600px]">
60
+ <div>
61
+ <p className="text-sm text-muted-foreground mb-2">Default</p>
62
+ <WakaStat
63
+ label="Total Users"
64
+ value="2,350"
65
+ trend="up"
66
+ trendValue="+12%"
67
+ icon={<Users className="h-5 w-5" />}
68
+ variant="default"
69
+ />
70
+ </div>
71
+ <div>
72
+ <p className="text-sm text-muted-foreground mb-2">Card</p>
73
+ <WakaStat
74
+ label="Total Users"
75
+ value="2,350"
76
+ trend="up"
77
+ trendValue="+12%"
78
+ icon={<Users className="h-5 w-5" />}
79
+ variant="card"
80
+ />
81
+ </div>
82
+ <div>
83
+ <p className="text-sm text-muted-foreground mb-2">Minimal</p>
84
+ <WakaStat
85
+ label="Total Users"
86
+ value="2,350"
87
+ trend="up"
88
+ trendValue="+12%"
89
+ variant="minimal"
90
+ />
91
+ </div>
92
+ <div>
93
+ <p className="text-sm text-muted-foreground mb-2">Gradient</p>
94
+ <WakaStat
95
+ label="Total Users"
96
+ value="2,350"
97
+ trend="up"
98
+ trendValue="+12%"
99
+ icon={<Users className="h-5 w-5" />}
100
+ variant="gradient"
101
+ color="primary"
102
+ />
103
+ </div>
104
+ </div>
105
+ ),
106
+ }
107
+
108
+ export const Colors: Story = {
109
+ render: () => (
110
+ <div className="grid grid-cols-2 gap-4 w-[600px]">
111
+ {(['default', 'primary', 'success', 'warning', 'destructive', 'blue', 'purple'] as const).map((color) => (
112
+ <WakaStat
113
+ key={color}
114
+ label={color.charAt(0).toUpperCase() + color.slice(1)}
115
+ value="1,234"
116
+ icon={<Activity className="h-5 w-5" />}
117
+ variant="card"
118
+ color={color}
119
+ />
120
+ ))}
121
+ </div>
122
+ ),
123
+ }
124
+
125
+ export const GradientColors: Story = {
126
+ render: () => (
127
+ <div className="grid grid-cols-2 gap-4 w-[600px]">
128
+ {(['primary', 'success', 'warning', 'destructive', 'blue', 'purple'] as const).map((color) => (
129
+ <WakaStat
130
+ key={color}
131
+ label={color.charAt(0).toUpperCase() + color.slice(1)}
132
+ value="1,234"
133
+ icon={<Activity className="h-5 w-5" />}
134
+ variant="gradient"
135
+ color={color}
136
+ />
137
+ ))}
138
+ </div>
139
+ ),
140
+ }
141
+
142
+ export const Sizes: Story = {
143
+ render: () => (
144
+ <div className="space-y-6 w-[400px]">
145
+ <WakaStat
146
+ label="Small"
147
+ value="$1,234"
148
+ trend="up"
149
+ trendValue="+5%"
150
+ icon={<DollarSign className="h-4 w-4" />}
151
+ variant="card"
152
+ size="sm"
153
+ />
154
+ <WakaStat
155
+ label="Medium (Default)"
156
+ value="$12,345"
157
+ trend="up"
158
+ trendValue="+10%"
159
+ icon={<DollarSign className="h-5 w-5" />}
160
+ variant="card"
161
+ size="md"
162
+ />
163
+ <WakaStat
164
+ label="Large"
165
+ value="$123,456"
166
+ trend="up"
167
+ trendValue="+15%"
168
+ icon={<DollarSign className="h-6 w-6" />}
169
+ variant="card"
170
+ size="lg"
171
+ />
172
+ </div>
173
+ ),
174
+ }
175
+
176
+ export const Trends: Story = {
177
+ render: () => (
178
+ <div className="grid grid-cols-3 gap-4 w-[600px]">
179
+ <WakaStat
180
+ label="Up Trend"
181
+ value="$45,231"
182
+ trend="up"
183
+ trendValue="+20.1%"
184
+ trendText="from last month"
185
+ variant="card"
186
+ />
187
+ <WakaStat
188
+ label="Down Trend"
189
+ value="$32,456"
190
+ trend="down"
191
+ trendValue="-8.2%"
192
+ trendText="from last month"
193
+ variant="card"
194
+ />
195
+ <WakaStat
196
+ label="Neutral"
197
+ value="$28,000"
198
+ trend="neutral"
199
+ trendValue="0%"
200
+ trendText="no change"
201
+ variant="card"
202
+ />
203
+ </div>
204
+ ),
205
+ }
206
+
207
+ export const InvertedTrend: Story = {
208
+ render: () => (
209
+ <div className="grid grid-cols-2 gap-4 w-[500px]">
210
+ <WakaStat
211
+ label="Churn Rate"
212
+ value="3.2%"
213
+ description="Down is good"
214
+ trend="down"
215
+ trendValue="-1.5%"
216
+ invertTrend
217
+ variant="card"
218
+ />
219
+ <WakaStat
220
+ label="Bug Count"
221
+ value="23"
222
+ description="Down is good"
223
+ trend="down"
224
+ trendValue="-15"
225
+ invertTrend
226
+ variant="card"
227
+ />
228
+ </div>
229
+ ),
230
+ }
231
+
232
+ export const Loading: Story = {
233
+ render: () => (
234
+ <div className="grid grid-cols-2 gap-4 w-[500px]">
235
+ <WakaStat label="Loading" value="" loading variant="card" size="sm" />
236
+ <WakaStat label="Loading" value="" loading variant="card" size="md" />
237
+ <WakaStat label="Loading" value="" loading variant="card" size="lg" />
238
+ <WakaStat label="Loading" value="" loading variant="gradient" color="primary" />
239
+ </div>
240
+ ),
241
+ }
242
+
243
+ export const StatGroup: Story = {
244
+ render: () => (
245
+ <WakaStatGroup layout="grid" columns={4} gap="md" className="w-[800px]">
246
+ <WakaStat
247
+ label="Total Revenue"
248
+ value="$45,231.89"
249
+ trend="up"
250
+ trendValue="+20.1%"
251
+ icon={<DollarSign className="h-5 w-5" />}
252
+ variant="card"
253
+ color="success"
254
+ />
255
+ <WakaStat
256
+ label="Subscriptions"
257
+ value="+2,350"
258
+ trend="up"
259
+ trendValue="+180.1%"
260
+ icon={<Users className="h-5 w-5" />}
261
+ variant="card"
262
+ color="blue"
263
+ />
264
+ <WakaStat
265
+ label="Sales"
266
+ value="+12,234"
267
+ trend="up"
268
+ trendValue="+19%"
269
+ icon={<ShoppingCart className="h-5 w-5" />}
270
+ variant="card"
271
+ color="purple"
272
+ />
273
+ <WakaStat
274
+ label="Active Now"
275
+ value="+573"
276
+ trend="up"
277
+ trendValue="+201"
278
+ icon={<Activity className="h-5 w-5" />}
279
+ variant="card"
280
+ color="primary"
281
+ />
282
+ </WakaStatGroup>
283
+ ),
284
+ }
285
+
286
+ export const Dashboard: Story = {
287
+ render: () => (
288
+ <div className="p-6 bg-muted/30 rounded-lg w-[900px]">
289
+ <h2 className="text-xl font-semibold mb-6">Dashboard Overview</h2>
290
+ <WakaStatGroup layout="grid" columns={4} gap="md">
291
+ <WakaStat
292
+ label="Total Revenue"
293
+ value="$45,231.89"
294
+ description="+20.1% from last month"
295
+ trend="up"
296
+ trendValue="+20.1%"
297
+ icon={<DollarSign className="h-5 w-5" />}
298
+ variant="card"
299
+ color="success"
300
+ />
301
+ <WakaStat
302
+ label="Active Users"
303
+ value="2,350"
304
+ description="+180 new users this week"
305
+ trend="up"
306
+ trendValue="+12%"
307
+ icon={<Users className="h-5 w-5" />}
308
+ variant="card"
309
+ color="blue"
310
+ />
311
+ <WakaStat
312
+ label="Page Views"
313
+ value="1.2M"
314
+ description="Total views this month"
315
+ trend="up"
316
+ trendValue="+5.2%"
317
+ icon={<Eye className="h-5 w-5" />}
318
+ variant="card"
319
+ color="purple"
320
+ />
321
+ <WakaStat
322
+ label="Downloads"
323
+ value="12,543"
324
+ description="App downloads"
325
+ trend="down"
326
+ trendValue="-3.1%"
327
+ icon={<Download className="h-5 w-5" />}
328
+ variant="card"
329
+ color="warning"
330
+ />
331
+ </WakaStatGroup>
332
+ </div>
333
+ ),
334
+ }