@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,370 @@
1
+ import type { Meta, StoryObj } from '@storybook/react'
2
+ import {
3
+ WakaThemeCreatorBlock,
4
+ defaultThemes,
5
+ } from './index'
6
+ import type { ThemeCreatorBlockTheme, ThemeBlockColors, ThemeBlockAssets } from './index'
7
+ import * as React from 'react'
8
+
9
+ const meta: Meta<typeof WakaThemeCreatorBlock> = {
10
+ title: 'Blocks/ThemeCreatorBlock',
11
+ component: WakaThemeCreatorBlock,
12
+ parameters: {
13
+ layout: 'fullscreen',
14
+ docs: {
15
+ description: {
16
+ component:
17
+ 'A visual theme creator for shadcn/ui with live preview, color pickers for all theme tokens (primary, secondary, accent, etc.), light/dark mode editing, asset uploads, and CSS export.',
18
+ },
19
+ },
20
+ },
21
+ tags: ['autodocs'],
22
+ }
23
+
24
+ export default meta
25
+ type Story = StoryObj<typeof WakaThemeCreatorBlock>
26
+
27
+ export const Default: Story = {
28
+ render: () => (
29
+ <div className="p-4 h-screen">
30
+ <WakaThemeCreatorBlock
31
+ themes={defaultThemes}
32
+ initialTheme={defaultThemes[0]}
33
+ onThemeChange={(theme) => console.log('Theme changed:', theme)}
34
+ onSave={async (theme) => {
35
+ console.log('Save theme:', theme)
36
+ await new Promise((resolve) => setTimeout(resolve, 1000))
37
+ }}
38
+ />
39
+ </div>
40
+ ),
41
+ }
42
+
43
+ export const OceanTheme: Story = {
44
+ render: () => (
45
+ <div className="p-4 h-screen">
46
+ <WakaThemeCreatorBlock
47
+ themes={defaultThemes}
48
+ initialTheme={defaultThemes.find((t) => t.id === 'ocean') || defaultThemes[1]}
49
+ onThemeChange={(theme) => console.log('Theme changed:', theme)}
50
+ />
51
+ </div>
52
+ ),
53
+ }
54
+
55
+ export const CustomThemes: Story = {
56
+ render: () => {
57
+ const customThemes: ThemeCreatorBlockTheme[] = [
58
+ ...defaultThemes,
59
+ {
60
+ id: 'sunset',
61
+ name: 'Sunset',
62
+ description: 'Warm sunset colors',
63
+ lightColors: {
64
+ background: '#fffbf5',
65
+ foreground: '#4a2c2a',
66
+ card: '#ffffff',
67
+ cardForeground: '#4a2c2a',
68
+ popover: '#ffffff',
69
+ popoverForeground: '#4a2c2a',
70
+ primary: '#e85d04',
71
+ primaryForeground: '#ffffff',
72
+ secondary: '#ffedd8',
73
+ secondaryForeground: '#4a2c2a',
74
+ muted: '#ffedd8',
75
+ mutedForeground: '#9d4a2c',
76
+ accent: '#f48c06',
77
+ accentForeground: '#ffffff',
78
+ destructive: '#dc2626',
79
+ destructiveForeground: '#ffffff',
80
+ border: '#ffd4a5',
81
+ input: '#ffd4a5',
82
+ ring: '#e85d04',
83
+ chart1: '#e85d04',
84
+ chart2: '#f48c06',
85
+ chart3: '#ffaa00',
86
+ chart4: '#dc6a2c',
87
+ chart5: '#9d4a2c',
88
+ },
89
+ darkColors: {
90
+ background: '#1a0f0a',
91
+ foreground: '#ffedd8',
92
+ card: '#2d1810',
93
+ cardForeground: '#ffedd8',
94
+ popover: '#2d1810',
95
+ popoverForeground: '#ffedd8',
96
+ primary: '#f48c06',
97
+ primaryForeground: '#1a0f0a',
98
+ secondary: '#3d2015',
99
+ secondaryForeground: '#ffedd8',
100
+ muted: '#3d2015',
101
+ mutedForeground: '#d4a574',
102
+ accent: '#e85d04',
103
+ accentForeground: '#ffffff',
104
+ destructive: '#b91c1c',
105
+ destructiveForeground: '#ffffff',
106
+ border: '#3d2015',
107
+ input: '#3d2015',
108
+ ring: '#f48c06',
109
+ chart1: '#f48c06',
110
+ chart2: '#ffaa00',
111
+ chart3: '#e85d04',
112
+ chart4: '#dc6a2c',
113
+ chart5: '#ffd4a5',
114
+ },
115
+ radius: '0.75rem',
116
+ },
117
+ {
118
+ id: 'forest',
119
+ name: 'Forest',
120
+ description: 'Natural green tones',
121
+ lightColors: {
122
+ background: '#f0fdf4',
123
+ foreground: '#14532d',
124
+ card: '#ffffff',
125
+ cardForeground: '#14532d',
126
+ popover: '#ffffff',
127
+ popoverForeground: '#14532d',
128
+ primary: '#16a34a',
129
+ primaryForeground: '#ffffff',
130
+ secondary: '#dcfce7',
131
+ secondaryForeground: '#14532d',
132
+ muted: '#dcfce7',
133
+ mutedForeground: '#4ade80',
134
+ accent: '#22c55e',
135
+ accentForeground: '#ffffff',
136
+ destructive: '#dc2626',
137
+ destructiveForeground: '#ffffff',
138
+ border: '#86efac',
139
+ input: '#86efac',
140
+ ring: '#16a34a',
141
+ chart1: '#16a34a',
142
+ chart2: '#22c55e',
143
+ chart3: '#4ade80',
144
+ chart4: '#166534',
145
+ chart5: '#15803d',
146
+ },
147
+ darkColors: {
148
+ background: '#052e16',
149
+ foreground: '#dcfce7',
150
+ card: '#14532d',
151
+ cardForeground: '#dcfce7',
152
+ popover: '#14532d',
153
+ popoverForeground: '#dcfce7',
154
+ primary: '#22c55e',
155
+ primaryForeground: '#052e16',
156
+ secondary: '#166534',
157
+ secondaryForeground: '#dcfce7',
158
+ muted: '#166534',
159
+ mutedForeground: '#4ade80',
160
+ accent: '#16a34a',
161
+ accentForeground: '#ffffff',
162
+ destructive: '#b91c1c',
163
+ destructiveForeground: '#ffffff',
164
+ border: '#166534',
165
+ input: '#166534',
166
+ ring: '#22c55e',
167
+ chart1: '#22c55e',
168
+ chart2: '#4ade80',
169
+ chart3: '#16a34a',
170
+ chart4: '#86efac',
171
+ chart5: '#15803d',
172
+ },
173
+ radius: '0.5rem',
174
+ },
175
+ ]
176
+
177
+ return (
178
+ <div className="p-4 h-screen">
179
+ <WakaThemeCreatorBlock
180
+ themes={customThemes}
181
+ initialTheme={customThemes[2]}
182
+ onThemeChange={(theme) => console.log('Theme changed:', theme)}
183
+ />
184
+ </div>
185
+ )
186
+ },
187
+ }
188
+
189
+ export const LoginPreviewOnly: Story = {
190
+ render: () => (
191
+ <div className="p-4 h-screen">
192
+ <WakaThemeCreatorBlock
193
+ themes={defaultThemes}
194
+ previewTabs={['login']}
195
+ onThemeChange={(theme) => console.log('Theme changed:', theme)}
196
+ />
197
+ </div>
198
+ ),
199
+ }
200
+
201
+ export const DashboardPreviewOnly: Story = {
202
+ render: () => (
203
+ <div className="p-4 h-screen">
204
+ <WakaThemeCreatorBlock
205
+ themes={defaultThemes}
206
+ previewTabs={['dashboard']}
207
+ onThemeChange={(theme) => console.log('Theme changed:', theme)}
208
+ />
209
+ </div>
210
+ ),
211
+ }
212
+
213
+ export const ChatPreviewOnly: Story = {
214
+ render: () => (
215
+ <div className="p-4 h-screen">
216
+ <WakaThemeCreatorBlock
217
+ themes={defaultThemes}
218
+ previewTabs={['chat']}
219
+ onThemeChange={(theme) => console.log('Theme changed:', theme)}
220
+ />
221
+ </div>
222
+ ),
223
+ }
224
+
225
+ export const WithAssetUpload: Story = {
226
+ render: () => (
227
+ <div className="p-4 h-screen">
228
+ <WakaThemeCreatorBlock
229
+ themes={defaultThemes}
230
+ onThemeChange={(theme) => console.log('Theme changed:', theme)}
231
+ onUploadAsset={async (file, assetType) => {
232
+ console.log('Upload asset:', file.name, assetType)
233
+ await new Promise((resolve) => setTimeout(resolve, 1500))
234
+ // Return a placeholder URL
235
+ return `https://placehold.co/400x200?text=${encodeURIComponent(assetType)}`
236
+ }}
237
+ onSave={async (theme) => {
238
+ console.log('Save theme with assets:', theme)
239
+ await new Promise((resolve) => setTimeout(resolve, 1000))
240
+ }}
241
+ />
242
+ </div>
243
+ ),
244
+ }
245
+
246
+ export const Interactive: Story = {
247
+ render: () => {
248
+ const [savedTheme, setSavedTheme] = React.useState<ThemeCreatorBlockTheme | null>(null)
249
+
250
+ const handleSave = async (theme: ThemeCreatorBlockTheme) => {
251
+ await new Promise((resolve) => setTimeout(resolve, 1000))
252
+ setSavedTheme(theme)
253
+ alert(`Theme "${theme.name}" saved successfully!`)
254
+ }
255
+
256
+ return (
257
+ <div className="h-screen flex flex-col">
258
+ {savedTheme && (
259
+ <div className="bg-green-500/10 border-b border-green-500/20 p-2 text-sm text-green-600">
260
+ Last saved: {savedTheme.name} (Primary: {savedTheme.lightColors.primary})
261
+ </div>
262
+ )}
263
+ <div className="flex-1 p-4">
264
+ <WakaThemeCreatorBlock
265
+ themes={defaultThemes}
266
+ onThemeChange={(theme) => console.log('Theme changed:', theme.name)}
267
+ onSave={handleSave}
268
+ />
269
+ </div>
270
+ </div>
271
+ )
272
+ },
273
+ }
274
+
275
+ export const BrandingEditor: Story = {
276
+ render: () => {
277
+ const brandTheme: ThemeCreatorBlockTheme = {
278
+ id: 'brand',
279
+ name: 'Company Brand',
280
+ description: 'Official company theme',
281
+ lightColors: {
282
+ background: '#ffffff',
283
+ foreground: '#1f2937',
284
+ card: '#ffffff',
285
+ cardForeground: '#1f2937',
286
+ popover: '#ffffff',
287
+ popoverForeground: '#1f2937',
288
+ primary: '#4f46e5',
289
+ primaryForeground: '#ffffff',
290
+ secondary: '#e0e7ff',
291
+ secondaryForeground: '#1f2937',
292
+ muted: '#f3f4f6',
293
+ mutedForeground: '#6b7280',
294
+ accent: '#818cf8',
295
+ accentForeground: '#ffffff',
296
+ destructive: '#ef4444',
297
+ destructiveForeground: '#ffffff',
298
+ border: '#e5e7eb',
299
+ input: '#e5e7eb',
300
+ ring: '#4f46e5',
301
+ chart1: '#4f46e5',
302
+ chart2: '#818cf8',
303
+ chart3: '#06b6d4',
304
+ chart4: '#10b981',
305
+ chart5: '#f59e0b',
306
+ },
307
+ darkColors: {
308
+ background: '#111827',
309
+ foreground: '#f9fafb',
310
+ card: '#1f2937',
311
+ cardForeground: '#f9fafb',
312
+ popover: '#1f2937',
313
+ popoverForeground: '#f9fafb',
314
+ primary: '#818cf8',
315
+ primaryForeground: '#111827',
316
+ secondary: '#374151',
317
+ secondaryForeground: '#f9fafb',
318
+ muted: '#374151',
319
+ mutedForeground: '#9ca3af',
320
+ accent: '#4f46e5',
321
+ accentForeground: '#ffffff',
322
+ destructive: '#dc2626',
323
+ destructiveForeground: '#ffffff',
324
+ border: '#374151',
325
+ input: '#374151',
326
+ ring: '#818cf8',
327
+ chart1: '#818cf8',
328
+ chart2: '#a5b4fc',
329
+ chart3: '#22d3ee',
330
+ chart4: '#34d399',
331
+ chart5: '#fbbf24',
332
+ },
333
+ radius: '0.5rem',
334
+ }
335
+
336
+ return (
337
+ <div className="min-h-screen bg-muted/30">
338
+ <header className="bg-background border-b px-6 py-4">
339
+ <div className="flex items-center justify-between">
340
+ <div>
341
+ <h1 className="font-bold text-xl">Brand Theme Editor</h1>
342
+ <p className="text-sm text-muted-foreground">Customize your application theme</p>
343
+ </div>
344
+ <nav className="flex gap-4 text-sm">
345
+ <a href="#" className="text-foreground font-medium">Theme</a>
346
+ <a href="#" className="text-muted-foreground hover:text-foreground">Typography</a>
347
+ <a href="#" className="text-muted-foreground hover:text-foreground">Components</a>
348
+ </nav>
349
+ </div>
350
+ </header>
351
+ <main className="p-4 h-[calc(100vh-73px)]">
352
+ <WakaThemeCreatorBlock
353
+ themes={[brandTheme, ...defaultThemes]}
354
+ initialTheme={brandTheme}
355
+ onThemeChange={(theme) => console.log('Theme changed:', theme)}
356
+ onSave={async (theme) => {
357
+ console.log('Save brand theme:', theme)
358
+ await new Promise((resolve) => setTimeout(resolve, 1000))
359
+ }}
360
+ onUploadAsset={async (file, assetType) => {
361
+ console.log('Upload:', file.name, assetType)
362
+ await new Promise((resolve) => setTimeout(resolve, 1000))
363
+ return URL.createObjectURL(file)
364
+ }}
365
+ />
366
+ </main>
367
+ </div>
368
+ )
369
+ },
370
+ }