@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,300 @@
1
+ import type { Meta, StoryObj } from '@storybook/react'
2
+ import { WakaTiltCard, WakaTiltShowcaseCard } from './index'
3
+ import * as React from 'react'
4
+ import { Zap, Rocket, Shield, CreditCard, Cpu, Globe } from 'lucide-react'
5
+
6
+ const meta: Meta<typeof WakaTiltCard> = {
7
+ title: 'Components/Effects/WakaTiltCard',
8
+ component: WakaTiltCard,
9
+ parameters: {
10
+ layout: 'centered',
11
+ docs: {
12
+ description: {
13
+ component: 'A 3D tilt card component with perspective effect, glare, and gyroscope support.',
14
+ },
15
+ },
16
+ },
17
+ tags: ['autodocs'],
18
+ argTypes: {
19
+ maxTilt: {
20
+ control: { type: 'range', min: 0, max: 45, step: 1 },
21
+ description: 'Maximum tilt angle in degrees',
22
+ },
23
+ perspective: {
24
+ control: { type: 'range', min: 500, max: 2000, step: 100 },
25
+ description: 'Perspective distance',
26
+ },
27
+ scale: {
28
+ control: { type: 'range', min: 1, max: 1.2, step: 0.01 },
29
+ description: 'Scale on hover',
30
+ },
31
+ speed: {
32
+ control: { type: 'range', min: 100, max: 1000, step: 50 },
33
+ description: 'Transition speed in ms',
34
+ },
35
+ glare: {
36
+ control: 'boolean',
37
+ description: 'Enable glare effect',
38
+ },
39
+ maxGlare: {
40
+ control: { type: 'range', min: 0, max: 1, step: 0.05 },
41
+ description: 'Maximum glare opacity',
42
+ },
43
+ reset: {
44
+ control: 'boolean',
45
+ description: 'Reset on mouse leave',
46
+ },
47
+ reverse: {
48
+ control: 'boolean',
49
+ description: 'Reverse tilt direction',
50
+ },
51
+ disabled: {
52
+ control: 'boolean',
53
+ description: 'Disable tilt effect',
54
+ },
55
+ },
56
+ }
57
+
58
+ export default meta
59
+ type Story = StoryObj<typeof WakaTiltCard>
60
+
61
+ export const Default: Story = {
62
+ args: {},
63
+ render: (args) => (
64
+ <WakaTiltCard {...args}>
65
+ <div className="w-[300px] p-6 bg-card border rounded-xl shadow-lg">
66
+ <h3 className="font-semibold text-lg mb-2">3D Tilt Card</h3>
67
+ <p className="text-muted-foreground">
68
+ Move your cursor over this card to see the 3D tilt effect.
69
+ </p>
70
+ </div>
71
+ </WakaTiltCard>
72
+ ),
73
+ }
74
+
75
+ export const WithGlare: Story = {
76
+ render: () => (
77
+ <WakaTiltCard glare maxGlare={0.3}>
78
+ <div className="w-[300px] p-6 bg-gradient-to-br from-primary/20 to-primary/5 border rounded-xl shadow-lg">
79
+ <h3 className="font-semibold text-lg mb-2">Glare Effect</h3>
80
+ <p className="text-muted-foreground">
81
+ Notice the glare effect that follows your cursor.
82
+ </p>
83
+ </div>
84
+ </WakaTiltCard>
85
+ ),
86
+ }
87
+
88
+ export const TiltIntensities: Story = {
89
+ render: () => (
90
+ <div className="flex gap-6">
91
+ <WakaTiltCard maxTilt={5}>
92
+ <div className="w-[180px] p-4 bg-card border rounded-xl shadow-lg">
93
+ <h4 className="font-medium">Subtle</h4>
94
+ <p className="text-sm text-muted-foreground">5° tilt</p>
95
+ </div>
96
+ </WakaTiltCard>
97
+ <WakaTiltCard maxTilt={15}>
98
+ <div className="w-[180px] p-4 bg-card border rounded-xl shadow-lg">
99
+ <h4 className="font-medium">Medium</h4>
100
+ <p className="text-sm text-muted-foreground">15° tilt</p>
101
+ </div>
102
+ </WakaTiltCard>
103
+ <WakaTiltCard maxTilt={30}>
104
+ <div className="w-[180px] p-4 bg-card border rounded-xl shadow-lg">
105
+ <h4 className="font-medium">Strong</h4>
106
+ <p className="text-sm text-muted-foreground">30° tilt</p>
107
+ </div>
108
+ </WakaTiltCard>
109
+ </div>
110
+ ),
111
+ }
112
+
113
+ export const ReverseTilt: Story = {
114
+ render: () => (
115
+ <div className="flex gap-6">
116
+ <WakaTiltCard reverse={false}>
117
+ <div className="w-[200px] p-4 bg-card border rounded-xl shadow-lg">
118
+ <h4 className="font-medium">Normal</h4>
119
+ <p className="text-sm text-muted-foreground">Standard direction</p>
120
+ </div>
121
+ </WakaTiltCard>
122
+ <WakaTiltCard reverse>
123
+ <div className="w-[200px] p-4 bg-card border rounded-xl shadow-lg">
124
+ <h4 className="font-medium">Reversed</h4>
125
+ <p className="text-sm text-muted-foreground">Inverted direction</p>
126
+ </div>
127
+ </WakaTiltCard>
128
+ </div>
129
+ ),
130
+ }
131
+
132
+ export const NoReset: Story = {
133
+ render: () => (
134
+ <WakaTiltCard reset={false}>
135
+ <div className="w-[300px] p-6 bg-card border rounded-xl shadow-lg">
136
+ <h3 className="font-semibold text-lg mb-2">No Reset</h3>
137
+ <p className="text-muted-foreground">
138
+ The tilt stays when you move the cursor away.
139
+ </p>
140
+ </div>
141
+ </WakaTiltCard>
142
+ ),
143
+ }
144
+
145
+ export const WithScale: Story = {
146
+ render: () => (
147
+ <div className="flex gap-6">
148
+ <WakaTiltCard scale={1}>
149
+ <div className="w-[180px] p-4 bg-card border rounded-xl shadow-lg">
150
+ <h4 className="font-medium">No Scale</h4>
151
+ <p className="text-sm text-muted-foreground">scale: 1</p>
152
+ </div>
153
+ </WakaTiltCard>
154
+ <WakaTiltCard scale={1.05}>
155
+ <div className="w-[180px] p-4 bg-card border rounded-xl shadow-lg">
156
+ <h4 className="font-medium">Slight Scale</h4>
157
+ <p className="text-sm text-muted-foreground">scale: 1.05</p>
158
+ </div>
159
+ </WakaTiltCard>
160
+ <WakaTiltCard scale={1.1}>
161
+ <div className="w-[180px] p-4 bg-card border rounded-xl shadow-lg">
162
+ <h4 className="font-medium">More Scale</h4>
163
+ <p className="text-sm text-muted-foreground">scale: 1.1</p>
164
+ </div>
165
+ </WakaTiltCard>
166
+ </div>
167
+ ),
168
+ }
169
+
170
+ export const ShowcaseCard: Story = {
171
+ render: () => (
172
+ <div className="flex gap-6">
173
+ <WakaTiltShowcaseCard
174
+ title="Fast Performance"
175
+ description="Optimized for speed and efficiency"
176
+ icon={<Zap className="h-6 w-6 text-primary" />}
177
+ glowColor="hsl(var(--primary))"
178
+ />
179
+ <WakaTiltShowcaseCard
180
+ title="Secure & Reliable"
181
+ description="Enterprise-grade security built-in"
182
+ icon={<Shield className="h-6 w-6 text-green-500" />}
183
+ glowColor="hsl(142.1 76.2% 36.3%)"
184
+ />
185
+ </div>
186
+ ),
187
+ }
188
+
189
+ export const ShowcaseWithImage: Story = {
190
+ render: () => (
191
+ <WakaTiltShowcaseCard
192
+ title="Launch Your Project"
193
+ description="Deploy in seconds with our powerful infrastructure"
194
+ icon={<Rocket className="h-6 w-6 text-violet-500" />}
195
+ image="https://images.unsplash.com/photo-1451187580459-43490279c0fa?w=400&h=200&fit=crop"
196
+ glowColor="rgb(139, 92, 246)"
197
+ footer={
198
+ <button className="w-full py-2 bg-primary text-primary-foreground rounded-lg font-medium">
199
+ Get Started
200
+ </button>
201
+ }
202
+ />
203
+ ),
204
+ }
205
+
206
+ export const CreditCardStyle: Story = {
207
+ render: () => (
208
+ <WakaTiltCard maxTilt={15} glare maxGlare={0.2}>
209
+ <div className="w-[380px] h-[220px] p-6 bg-gradient-to-br from-violet-600 to-indigo-900 rounded-2xl text-white shadow-2xl">
210
+ <div className="flex justify-between items-start">
211
+ <div className="w-12 h-10 bg-yellow-400/80 rounded-md" />
212
+ <Globe className="h-8 w-8 text-white/50" />
213
+ </div>
214
+ <div className="mt-8">
215
+ <p className="text-lg tracking-[0.25em] font-mono">4242 4242 4242 4242</p>
216
+ </div>
217
+ <div className="mt-6 flex justify-between items-end">
218
+ <div>
219
+ <p className="text-xs text-white/60 uppercase">Card Holder</p>
220
+ <p className="font-medium">John Doe</p>
221
+ </div>
222
+ <div>
223
+ <p className="text-xs text-white/60 uppercase">Expires</p>
224
+ <p className="font-medium">12/28</p>
225
+ </div>
226
+ <div className="flex gap-1">
227
+ <div className="w-8 h-8 rounded-full bg-red-500/80" />
228
+ <div className="w-8 h-8 rounded-full bg-orange-500/80 -ml-4" />
229
+ </div>
230
+ </div>
231
+ </div>
232
+ </WakaTiltCard>
233
+ ),
234
+ }
235
+
236
+ export const ProductShowcase: Story = {
237
+ render: () => (
238
+ <WakaTiltCard maxTilt={12} scale={1.03} glare>
239
+ <div className="w-[320px] overflow-hidden bg-card border rounded-2xl shadow-xl">
240
+ <div className="aspect-square bg-gradient-to-br from-blue-100 to-blue-50 flex items-center justify-center">
241
+ <div
242
+ className="w-48 h-48 rounded-3xl bg-white shadow-lg flex items-center justify-center"
243
+ style={{ transform: 'translateZ(40px)' }}
244
+ >
245
+ <Cpu className="h-24 w-24 text-blue-500" style={{ transform: 'translateZ(20px)' }} />
246
+ </div>
247
+ </div>
248
+ <div className="p-6">
249
+ <h3 className="font-bold text-lg">Next-Gen Processor</h3>
250
+ <p className="text-sm text-muted-foreground mt-1">
251
+ Ultra-fast computing for demanding workloads
252
+ </p>
253
+ <div className="mt-4 flex items-center justify-between">
254
+ <span className="text-2xl font-bold">$599</span>
255
+ <button className="px-4 py-2 bg-primary text-primary-foreground rounded-lg text-sm font-medium">
256
+ Buy Now
257
+ </button>
258
+ </div>
259
+ </div>
260
+ </div>
261
+ </WakaTiltCard>
262
+ ),
263
+ }
264
+
265
+ export const GridOfCards: Story = {
266
+ render: () => (
267
+ <div className="grid grid-cols-3 gap-6">
268
+ {[
269
+ { icon: <Zap className="h-5 w-5" />, title: 'Fast', color: 'text-yellow-500' },
270
+ { icon: <Shield className="h-5 w-5" />, title: 'Secure', color: 'text-green-500' },
271
+ { icon: <Rocket className="h-5 w-5" />, title: 'Powerful', color: 'text-violet-500' },
272
+ { icon: <Globe className="h-5 w-5" />, title: 'Global', color: 'text-blue-500' },
273
+ { icon: <CreditCard className="h-5 w-5" />, title: 'Payments', color: 'text-pink-500' },
274
+ { icon: <Cpu className="h-5 w-5" />, title: 'Smart', color: 'text-orange-500' },
275
+ ].map((item, i) => (
276
+ <WakaTiltCard key={i} maxTilt={10} scale={1.02}>
277
+ <div className="w-[140px] p-4 bg-card border rounded-xl shadow-md text-center">
278
+ <div className={`inline-flex p-2 rounded-lg bg-muted ${item.color}`}>
279
+ {item.icon}
280
+ </div>
281
+ <p className="mt-2 font-medium">{item.title}</p>
282
+ </div>
283
+ </WakaTiltCard>
284
+ ))}
285
+ </div>
286
+ ),
287
+ }
288
+
289
+ export const Disabled: Story = {
290
+ render: () => (
291
+ <WakaTiltCard disabled>
292
+ <div className="w-[300px] p-6 bg-card border rounded-xl shadow-lg opacity-60">
293
+ <h3 className="font-semibold text-lg mb-2">Disabled</h3>
294
+ <p className="text-muted-foreground">
295
+ Tilt effect is disabled on this card.
296
+ </p>
297
+ </div>
298
+ </WakaTiltCard>
299
+ ),
300
+ }
@@ -0,0 +1,227 @@
1
+ import type { Meta, StoryObj } from '@storybook/react'
2
+ import { WakaTimePicker } from './index'
3
+ import * as React from 'react'
4
+
5
+ const meta: Meta<typeof WakaTimePicker> = {
6
+ title: 'Components/Forms/WakaTimePicker',
7
+ component: WakaTimePicker,
8
+ parameters: {
9
+ layout: 'centered',
10
+ docs: {
11
+ description: {
12
+ component: 'A time picker component with 12h/24h format support and quick selection.',
13
+ },
14
+ },
15
+ },
16
+ tags: ['autodocs'],
17
+ argTypes: {
18
+ format: {
19
+ control: 'select',
20
+ options: ['12h', '24h'],
21
+ description: 'Time format',
22
+ },
23
+ size: {
24
+ control: 'select',
25
+ options: ['sm', 'md', 'lg'],
26
+ description: 'Size of the component',
27
+ },
28
+ showSeconds: {
29
+ control: 'boolean',
30
+ description: 'Show seconds input',
31
+ },
32
+ disabled: {
33
+ control: 'boolean',
34
+ description: 'Disable the picker',
35
+ },
36
+ },
37
+ }
38
+
39
+ export default meta
40
+ type Story = StoryObj<typeof WakaTimePicker>
41
+
42
+ export const Default: Story = {
43
+ render: function TimePickerDemo() {
44
+ const [time, setTime] = React.useState<string>('')
45
+
46
+ return (
47
+ <div className="w-[200px]">
48
+ <WakaTimePicker
49
+ value={time}
50
+ onChange={setTime}
51
+ placeholder="Select time"
52
+ />
53
+ {time && (
54
+ <p className="text-sm text-muted-foreground mt-2">Selected: {time}</p>
55
+ )}
56
+ </div>
57
+ )
58
+ },
59
+ }
60
+
61
+ export const Format24h: Story = {
62
+ render: function Format24hDemo() {
63
+ const [time, setTime] = React.useState<string>('14:30')
64
+
65
+ return (
66
+ <div className="w-[200px]">
67
+ <WakaTimePicker
68
+ value={time}
69
+ onChange={setTime}
70
+ format="24h"
71
+ placeholder="HH:mm"
72
+ />
73
+ </div>
74
+ )
75
+ },
76
+ }
77
+
78
+ export const Format12h: Story = {
79
+ render: function Format12hDemo() {
80
+ const [time, setTime] = React.useState<string>('14:30')
81
+
82
+ return (
83
+ <div className="w-[200px]">
84
+ <WakaTimePicker
85
+ value={time}
86
+ onChange={setTime}
87
+ format="12h"
88
+ placeholder="hh:mm AM/PM"
89
+ />
90
+ </div>
91
+ )
92
+ },
93
+ }
94
+
95
+ export const WithSeconds: Story = {
96
+ render: function WithSecondsDemo() {
97
+ const [time, setTime] = React.useState<string>('09:15:30')
98
+
99
+ return (
100
+ <div className="w-[200px]">
101
+ <WakaTimePicker
102
+ value={time}
103
+ onChange={setTime}
104
+ showSeconds
105
+ placeholder="HH:mm:ss"
106
+ />
107
+ </div>
108
+ )
109
+ },
110
+ }
111
+
112
+ export const WithMinuteStep: Story = {
113
+ render: function MinuteStepDemo() {
114
+ const [time, setTime] = React.useState<string>('')
115
+
116
+ return (
117
+ <div className="w-[200px]">
118
+ <WakaTimePicker
119
+ value={time}
120
+ onChange={setTime}
121
+ minuteStep={15}
122
+ placeholder="15 minute intervals"
123
+ />
124
+ <p className="text-xs text-muted-foreground mt-2">
125
+ Minutes: 00, 15, 30, 45
126
+ </p>
127
+ </div>
128
+ )
129
+ },
130
+ }
131
+
132
+ export const WithMinMaxTime: Story = {
133
+ render: function MinMaxDemo() {
134
+ const [time, setTime] = React.useState<string>('10:00')
135
+
136
+ return (
137
+ <div className="w-[200px]">
138
+ <WakaTimePicker
139
+ value={time}
140
+ onChange={setTime}
141
+ minTime="09:00"
142
+ maxTime="17:00"
143
+ placeholder="Business hours"
144
+ />
145
+ <p className="text-xs text-muted-foreground mt-2">
146
+ Available: 09:00 - 17:00
147
+ </p>
148
+ </div>
149
+ )
150
+ },
151
+ }
152
+
153
+ export const Sizes: Story = {
154
+ render: function SizesDemo() {
155
+ const [time, setTime] = React.useState<string>('12:00')
156
+
157
+ return (
158
+ <div className="space-y-4 w-[200px]">
159
+ <div>
160
+ <p className="text-sm text-muted-foreground mb-1">Small</p>
161
+ <WakaTimePicker value={time} onChange={setTime} size="sm" />
162
+ </div>
163
+ <div>
164
+ <p className="text-sm text-muted-foreground mb-1">Medium</p>
165
+ <WakaTimePicker value={time} onChange={setTime} size="md" />
166
+ </div>
167
+ <div>
168
+ <p className="text-sm text-muted-foreground mb-1">Large</p>
169
+ <WakaTimePicker value={time} onChange={setTime} size="lg" />
170
+ </div>
171
+ </div>
172
+ )
173
+ },
174
+ }
175
+
176
+ export const WithError: Story = {
177
+ render: () => (
178
+ <div className="w-[200px]">
179
+ <WakaTimePicker value="" error placeholder="Required" />
180
+ <p className="text-sm text-destructive mt-1">Please select a time</p>
181
+ </div>
182
+ ),
183
+ }
184
+
185
+ export const Disabled: Story = {
186
+ render: () => (
187
+ <div className="w-[200px]">
188
+ <WakaTimePicker value="10:30" disabled />
189
+ </div>
190
+ ),
191
+ }
192
+
193
+ export const MeetingScheduler: Story = {
194
+ render: function MeetingSchedulerDemo() {
195
+ const [startTime, setStartTime] = React.useState<string>('09:00')
196
+ const [endTime, setEndTime] = React.useState<string>('10:00')
197
+
198
+ return (
199
+ <div className="space-y-4 w-[300px] p-4 border rounded-lg">
200
+ <h3 className="font-semibold">Schedule Meeting</h3>
201
+ <div className="grid grid-cols-2 gap-4">
202
+ <div>
203
+ <p className="text-sm text-muted-foreground mb-1">Start</p>
204
+ <WakaTimePicker
205
+ value={startTime}
206
+ onChange={setStartTime}
207
+ minuteStep={15}
208
+ />
209
+ </div>
210
+ <div>
211
+ <p className="text-sm text-muted-foreground mb-1">End</p>
212
+ <WakaTimePicker
213
+ value={endTime}
214
+ onChange={setEndTime}
215
+ minuteStep={15}
216
+ />
217
+ </div>
218
+ </div>
219
+ <p className="text-sm text-muted-foreground">
220
+ Duration: {startTime && endTime
221
+ ? `${startTime} - ${endTime}`
222
+ : 'Select times'}
223
+ </p>
224
+ </div>
225
+ )
226
+ },
227
+ }