@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,332 @@
1
+ import type { Meta, StoryObj } from '@storybook/react'
2
+ import { WakaDock, WakaFloatingDock, WakaAppDock } from './index'
3
+ import type { DockItem } from './index'
4
+ import * as React from 'react'
5
+ import {
6
+ Home,
7
+ Search,
8
+ Mail,
9
+ Calendar,
10
+ Settings,
11
+ Music,
12
+ Image,
13
+ FileText,
14
+ Terminal,
15
+ Globe,
16
+ MessageSquare,
17
+ ShoppingBag,
18
+ Gamepad2,
19
+ Palette,
20
+ FolderOpen,
21
+ } from 'lucide-react'
22
+
23
+ const meta: Meta<typeof WakaDock> = {
24
+ title: 'Components/Display/WakaDock',
25
+ component: WakaDock,
26
+ parameters: {
27
+ layout: 'centered',
28
+ docs: {
29
+ description: {
30
+ component: 'A macOS-style dock component with magnification effect, tooltips, and badge support.',
31
+ },
32
+ },
33
+ },
34
+ tags: ['autodocs'],
35
+ argTypes: {
36
+ position: {
37
+ control: 'select',
38
+ options: ['bottom', 'left', 'right'],
39
+ description: 'Position of the dock',
40
+ },
41
+ size: {
42
+ control: 'select',
43
+ options: ['sm', 'default', 'lg'],
44
+ description: 'Size of dock icons',
45
+ },
46
+ magnification: {
47
+ control: { type: 'range', min: 1, max: 2, step: 0.1 },
48
+ description: 'Magnification factor on hover',
49
+ },
50
+ magnificationDistance: {
51
+ control: { type: 'range', min: 50, max: 300, step: 10 },
52
+ description: 'Distance for magnification effect',
53
+ },
54
+ showLabels: {
55
+ control: 'boolean',
56
+ description: 'Show labels on hover',
57
+ },
58
+ fixed: {
59
+ control: 'boolean',
60
+ description: 'Use fixed positioning',
61
+ },
62
+ },
63
+ }
64
+
65
+ export default meta
66
+ type Story = StoryObj<typeof WakaDock>
67
+
68
+ const basicItems: DockItem[] = [
69
+ { id: 'home', icon: <Home className="h-6 w-6" />, label: 'Home', onClick: () => console.log('Home') },
70
+ { id: 'search', icon: <Search className="h-6 w-6" />, label: 'Search', onClick: () => console.log('Search') },
71
+ { id: 'mail', icon: <Mail className="h-6 w-6" />, label: 'Mail', badge: 3, onClick: () => console.log('Mail') },
72
+ { id: 'calendar', icon: <Calendar className="h-6 w-6" />, label: 'Calendar', onClick: () => console.log('Calendar') },
73
+ { id: 'settings', icon: <Settings className="h-6 w-6" />, label: 'Settings', onClick: () => console.log('Settings') },
74
+ ]
75
+
76
+ export const Default: Story = {
77
+ args: {
78
+ items: basicItems,
79
+ fixed: false,
80
+ },
81
+ }
82
+
83
+ export const Positions: Story = {
84
+ render: () => {
85
+ const [position, setPosition] = React.useState<'bottom' | 'left' | 'right'>('bottom')
86
+
87
+ return (
88
+ <div className="w-[500px] h-[400px] border rounded-lg relative bg-muted/30 overflow-hidden">
89
+ <div className="absolute top-4 left-4 flex gap-2">
90
+ {(['bottom', 'left', 'right'] as const).map((pos) => (
91
+ <button
92
+ key={pos}
93
+ onClick={() => setPosition(pos)}
94
+ className={`px-3 py-1 text-sm rounded ${
95
+ position === pos ? 'bg-primary text-primary-foreground' : 'bg-background border'
96
+ }`}
97
+ >
98
+ {pos}
99
+ </button>
100
+ ))}
101
+ </div>
102
+ <WakaDock items={basicItems} position={position} fixed={false} />
103
+ </div>
104
+ )
105
+ },
106
+ }
107
+
108
+ export const Sizes: Story = {
109
+ render: () => (
110
+ <div className="space-y-12">
111
+ <div>
112
+ <p className="text-sm text-muted-foreground mb-4">Small</p>
113
+ <WakaDock items={basicItems} size="sm" fixed={false} />
114
+ </div>
115
+ <div>
116
+ <p className="text-sm text-muted-foreground mb-4">Default</p>
117
+ <WakaDock items={basicItems} size="default" fixed={false} />
118
+ </div>
119
+ <div>
120
+ <p className="text-sm text-muted-foreground mb-4">Large</p>
121
+ <WakaDock items={basicItems} size="lg" fixed={false} />
122
+ </div>
123
+ </div>
124
+ ),
125
+ }
126
+
127
+ export const WithBadges: Story = {
128
+ render: () => {
129
+ const itemsWithBadges: DockItem[] = [
130
+ { id: 'mail', icon: <Mail className="h-6 w-6" />, label: 'Mail', badge: 12 },
131
+ { id: 'messages', icon: <MessageSquare className="h-6 w-6" />, label: 'Messages', badge: 3 },
132
+ { id: 'calendar', icon: <Calendar className="h-6 w-6" />, label: 'Calendar', badge: '!' },
133
+ { id: 'store', icon: <ShoppingBag className="h-6 w-6" />, label: 'Store', badge: 'New' },
134
+ { id: 'settings', icon: <Settings className="h-6 w-6" />, label: 'Settings' },
135
+ ]
136
+
137
+ return <WakaDock items={itemsWithBadges} fixed={false} />
138
+ },
139
+ }
140
+
141
+ export const WithActiveIndicator: Story = {
142
+ render: () => {
143
+ const [activeId, setActiveId] = React.useState('home')
144
+
145
+ const items: DockItem[] = [
146
+ { id: 'home', icon: <Home className="h-6 w-6" />, label: 'Home' },
147
+ { id: 'search', icon: <Search className="h-6 w-6" />, label: 'Search' },
148
+ { id: 'mail', icon: <Mail className="h-6 w-6" />, label: 'Mail' },
149
+ { id: 'settings', icon: <Settings className="h-6 w-6" />, label: 'Settings' },
150
+ ].map((item) => ({
151
+ ...item,
152
+ active: item.id === activeId,
153
+ onClick: () => setActiveId(item.id),
154
+ }))
155
+
156
+ return (
157
+ <div className="space-y-4">
158
+ <WakaDock items={items} fixed={false} />
159
+ <p className="text-sm text-muted-foreground text-center">
160
+ Active: {activeId}
161
+ </p>
162
+ </div>
163
+ )
164
+ },
165
+ }
166
+
167
+ export const MacOSStyle: Story = {
168
+ render: () => {
169
+ const macItems: DockItem[] = [
170
+ { id: 'finder', icon: <FolderOpen className="h-6 w-6 text-blue-500" />, label: 'Finder', active: true },
171
+ { id: 'safari', icon: <Globe className="h-6 w-6 text-blue-400" />, label: 'Safari' },
172
+ { id: 'mail', icon: <Mail className="h-6 w-6 text-blue-600" />, label: 'Mail', badge: 5 },
173
+ { id: 'music', icon: <Music className="h-6 w-6 text-red-500" />, label: 'Music' },
174
+ { id: 'photos', icon: <Image className="h-6 w-6 text-gradient" />, label: 'Photos' },
175
+ { id: 'messages', icon: <MessageSquare className="h-6 w-6 text-green-500" />, label: 'Messages', badge: 2 },
176
+ { id: 'notes', icon: <FileText className="h-6 w-6 text-yellow-500" />, label: 'Notes' },
177
+ { id: 'terminal', icon: <Terminal className="h-6 w-6 text-gray-500" />, label: 'Terminal' },
178
+ ]
179
+
180
+ return (
181
+ <div className="w-[600px] h-[400px] border rounded-lg relative bg-gradient-to-br from-blue-500/20 to-purple-500/20 overflow-hidden">
182
+ <div className="absolute inset-0 flex items-center justify-center text-muted-foreground">
183
+ Desktop
184
+ </div>
185
+ <div className="absolute bottom-4 left-1/2 -translate-x-1/2">
186
+ <WakaDock
187
+ items={macItems}
188
+ magnification={1.6}
189
+ magnificationDistance={120}
190
+ fixed={false}
191
+ />
192
+ </div>
193
+ </div>
194
+ )
195
+ },
196
+ }
197
+
198
+ export const VerticalDock: Story = {
199
+ render: () => {
200
+ const items: DockItem[] = [
201
+ { id: 'home', icon: <Home className="h-5 w-5" />, label: 'Home' },
202
+ { id: 'search', icon: <Search className="h-5 w-5" />, label: 'Search' },
203
+ { id: 'mail', icon: <Mail className="h-5 w-5" />, label: 'Mail', badge: 3 },
204
+ { id: 'calendar', icon: <Calendar className="h-5 w-5" />, label: 'Calendar' },
205
+ { id: 'settings', icon: <Settings className="h-5 w-5" />, label: 'Settings' },
206
+ ]
207
+
208
+ return (
209
+ <div className="flex gap-8">
210
+ <div className="w-[300px] h-[400px] border rounded-lg relative bg-muted/30 overflow-hidden">
211
+ <div className="absolute inset-0 flex items-center justify-center text-sm text-muted-foreground">
212
+ Left Dock
213
+ </div>
214
+ <WakaDock items={items} position="left" size="sm" fixed={false} />
215
+ </div>
216
+ <div className="w-[300px] h-[400px] border rounded-lg relative bg-muted/30 overflow-hidden">
217
+ <div className="absolute inset-0 flex items-center justify-center text-sm text-muted-foreground">
218
+ Right Dock
219
+ </div>
220
+ <WakaDock items={items} position="right" size="sm" fixed={false} />
221
+ </div>
222
+ </div>
223
+ )
224
+ },
225
+ }
226
+
227
+ export const NoLabels: Story = {
228
+ args: {
229
+ items: basicItems,
230
+ showLabels: false,
231
+ fixed: false,
232
+ },
233
+ }
234
+
235
+ export const MagnificationSettings: Story = {
236
+ render: () => {
237
+ const [magnification, setMagnification] = React.useState(1.5)
238
+ const [distance, setDistance] = React.useState(150)
239
+
240
+ return (
241
+ <div className="space-y-8">
242
+ <div className="space-y-4">
243
+ <div className="flex items-center gap-4">
244
+ <label className="text-sm w-32">Magnification:</label>
245
+ <input
246
+ type="range"
247
+ min={1}
248
+ max={2}
249
+ step={0.1}
250
+ value={magnification}
251
+ onChange={(e) => setMagnification(Number(e.target.value))}
252
+ className="flex-1"
253
+ />
254
+ <span className="text-sm w-12">{magnification.toFixed(1)}x</span>
255
+ </div>
256
+ <div className="flex items-center gap-4">
257
+ <label className="text-sm w-32">Distance:</label>
258
+ <input
259
+ type="range"
260
+ min={50}
261
+ max={300}
262
+ step={10}
263
+ value={distance}
264
+ onChange={(e) => setDistance(Number(e.target.value))}
265
+ className="flex-1"
266
+ />
267
+ <span className="text-sm w-12">{distance}px</span>
268
+ </div>
269
+ </div>
270
+ <WakaDock
271
+ items={basicItems}
272
+ magnification={magnification}
273
+ magnificationDistance={distance}
274
+ fixed={false}
275
+ />
276
+ </div>
277
+ )
278
+ },
279
+ }
280
+
281
+ export const AppDockWithSections: Story = {
282
+ render: () => {
283
+ const sections = [
284
+ {
285
+ items: [
286
+ { id: 'finder', icon: <FolderOpen className="h-6 w-6 text-blue-500" />, label: 'Finder', active: true },
287
+ { id: 'safari', icon: <Globe className="h-6 w-6 text-blue-400" />, label: 'Safari' },
288
+ { id: 'mail', icon: <Mail className="h-6 w-6 text-blue-600" />, label: 'Mail', badge: 5 },
289
+ ],
290
+ },
291
+ {
292
+ items: [
293
+ { id: 'music', icon: <Music className="h-6 w-6 text-red-500" />, label: 'Music' },
294
+ { id: 'photos', icon: <Image className="h-6 w-6" />, label: 'Photos' },
295
+ { id: 'games', icon: <Gamepad2 className="h-6 w-6 text-purple-500" />, label: 'Games' },
296
+ ],
297
+ },
298
+ {
299
+ items: [
300
+ { id: 'terminal', icon: <Terminal className="h-6 w-6 text-gray-500" />, label: 'Terminal' },
301
+ { id: 'settings', icon: <Settings className="h-6 w-6 text-gray-600" />, label: 'Settings' },
302
+ ],
303
+ },
304
+ ]
305
+
306
+ return (
307
+ <div className="w-[700px] h-[400px] border rounded-lg relative bg-gradient-to-br from-gray-100 to-gray-200 dark:from-gray-800 dark:to-gray-900 overflow-hidden">
308
+ <div className="absolute inset-0 flex items-center justify-center text-muted-foreground">
309
+ App Dock with Sections
310
+ </div>
311
+ <div className="absolute bottom-4 left-1/2 -translate-x-1/2">
312
+ <WakaAppDock sections={sections} fixed={false} />
313
+ </div>
314
+ </div>
315
+ )
316
+ },
317
+ }
318
+
319
+ export const DarkMode: Story = {
320
+ render: () => (
321
+ <div className="dark bg-gray-900 p-8 rounded-lg">
322
+ <div className="w-[500px] h-[300px] border border-gray-700 rounded-lg relative bg-gradient-to-br from-gray-800 to-gray-900 overflow-hidden">
323
+ <div className="absolute inset-0 flex items-center justify-center text-gray-400">
324
+ Dark Mode Dock
325
+ </div>
326
+ <div className="absolute bottom-4 left-1/2 -translate-x-1/2">
327
+ <WakaDock items={basicItems} fixed={false} />
328
+ </div>
329
+ </div>
330
+ </div>
331
+ ),
332
+ }