@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,359 @@
1
+ import type { Meta, StoryObj } from '@storybook/react'
2
+ import { WakaTree, moveNode } from './index'
3
+ import type { TreeNode } from './index'
4
+ import * as React from 'react'
5
+ import { FileText, Image, FileCode, Settings, Database, Globe } from 'lucide-react'
6
+
7
+ const meta: Meta<typeof WakaTree> = {
8
+ title: 'Components/Display/WakaTree',
9
+ component: WakaTree,
10
+ parameters: {
11
+ layout: 'centered',
12
+ docs: {
13
+ description: {
14
+ component: 'A tree view component for displaying hierarchical data with selection, expansion, and drag-and-drop support.',
15
+ },
16
+ },
17
+ },
18
+ tags: ['autodocs'],
19
+ argTypes: {
20
+ selectionMode: {
21
+ control: 'select',
22
+ options: ['none', 'single', 'multiple'],
23
+ description: 'Selection mode',
24
+ },
25
+ showCheckboxes: {
26
+ control: 'boolean',
27
+ description: 'Show checkboxes',
28
+ },
29
+ showIcons: {
30
+ control: 'boolean',
31
+ description: 'Show file/folder icons',
32
+ },
33
+ draggable: {
34
+ control: 'boolean',
35
+ description: 'Enable drag and drop',
36
+ },
37
+ size: {
38
+ control: 'select',
39
+ options: ['sm', 'md', 'lg'],
40
+ description: 'Size of the tree',
41
+ },
42
+ },
43
+ }
44
+
45
+ export default meta
46
+ type Story = StoryObj<typeof WakaTree>
47
+
48
+ const fileSystemData: TreeNode[] = [
49
+ {
50
+ id: 'src',
51
+ label: 'src',
52
+ children: [
53
+ {
54
+ id: 'components',
55
+ label: 'components',
56
+ children: [
57
+ { id: 'button.tsx', label: 'Button.tsx' },
58
+ { id: 'input.tsx', label: 'Input.tsx' },
59
+ { id: 'card.tsx', label: 'Card.tsx' },
60
+ ],
61
+ },
62
+ {
63
+ id: 'hooks',
64
+ label: 'hooks',
65
+ children: [
66
+ { id: 'useState.ts', label: 'useState.ts' },
67
+ { id: 'useEffect.ts', label: 'useEffect.ts' },
68
+ ],
69
+ },
70
+ {
71
+ id: 'utils',
72
+ label: 'utils',
73
+ children: [
74
+ { id: 'helpers.ts', label: 'helpers.ts' },
75
+ { id: 'constants.ts', label: 'constants.ts' },
76
+ ],
77
+ },
78
+ { id: 'app.tsx', label: 'App.tsx' },
79
+ { id: 'index.tsx', label: 'index.tsx' },
80
+ ],
81
+ },
82
+ {
83
+ id: 'public',
84
+ label: 'public',
85
+ children: [
86
+ { id: 'index.html', label: 'index.html' },
87
+ { id: 'favicon.ico', label: 'favicon.ico' },
88
+ ],
89
+ },
90
+ { id: 'package.json', label: 'package.json' },
91
+ { id: 'tsconfig.json', label: 'tsconfig.json' },
92
+ { id: 'readme.md', label: 'README.md' },
93
+ ]
94
+
95
+ export const Default: Story = {
96
+ args: {
97
+ data: fileSystemData,
98
+ className: 'w-[300px] border rounded-lg p-2',
99
+ },
100
+ }
101
+
102
+ export const WithSelection: Story = {
103
+ render: () => {
104
+ const [selectedIds, setSelectedIds] = React.useState<string[]>(['button.tsx'])
105
+
106
+ return (
107
+ <div className="w-[300px] border rounded-lg p-2">
108
+ <WakaTree
109
+ data={fileSystemData}
110
+ selectedIds={selectedIds}
111
+ onSelect={setSelectedIds}
112
+ selectionMode="single"
113
+ />
114
+ <div className="mt-4 pt-4 border-t text-sm">
115
+ Selected: {selectedIds.length > 0 ? selectedIds.join(', ') : 'None'}
116
+ </div>
117
+ </div>
118
+ )
119
+ },
120
+ }
121
+
122
+ export const MultipleSelection: Story = {
123
+ render: () => {
124
+ const [selectedIds, setSelectedIds] = React.useState<string[]>([])
125
+
126
+ return (
127
+ <div className="w-[300px] border rounded-lg p-2">
128
+ <WakaTree
129
+ data={fileSystemData}
130
+ selectedIds={selectedIds}
131
+ onSelect={setSelectedIds}
132
+ selectionMode="multiple"
133
+ showCheckboxes
134
+ />
135
+ <div className="mt-4 pt-4 border-t text-sm">
136
+ Selected ({selectedIds.length}): {selectedIds.join(', ') || 'None'}
137
+ </div>
138
+ </div>
139
+ )
140
+ },
141
+ }
142
+
143
+ export const ExpandAll: Story = {
144
+ args: {
145
+ data: fileSystemData,
146
+ defaultExpandAll: true,
147
+ className: 'w-[300px] border rounded-lg p-2',
148
+ },
149
+ }
150
+
151
+ export const Sizes: Story = {
152
+ render: () => {
153
+ const simpleData: TreeNode[] = [
154
+ {
155
+ id: 'folder1',
156
+ label: 'Documents',
157
+ children: [
158
+ { id: 'file1', label: 'report.pdf' },
159
+ { id: 'file2', label: 'summary.docx' },
160
+ ],
161
+ },
162
+ {
163
+ id: 'folder2',
164
+ label: 'Images',
165
+ children: [
166
+ { id: 'img1', label: 'photo.jpg' },
167
+ { id: 'img2', label: 'screenshot.png' },
168
+ ],
169
+ },
170
+ ]
171
+
172
+ return (
173
+ <div className="flex gap-8">
174
+ <div>
175
+ <p className="text-sm text-muted-foreground mb-2">Small</p>
176
+ <WakaTree
177
+ data={simpleData}
178
+ size="sm"
179
+ defaultExpandAll
180
+ className="w-[200px] border rounded-lg p-2"
181
+ />
182
+ </div>
183
+ <div>
184
+ <p className="text-sm text-muted-foreground mb-2">Medium</p>
185
+ <WakaTree
186
+ data={simpleData}
187
+ size="md"
188
+ defaultExpandAll
189
+ className="w-[200px] border rounded-lg p-2"
190
+ />
191
+ </div>
192
+ <div>
193
+ <p className="text-sm text-muted-foreground mb-2">Large</p>
194
+ <WakaTree
195
+ data={simpleData}
196
+ size="lg"
197
+ defaultExpandAll
198
+ className="w-[200px] border rounded-lg p-2"
199
+ />
200
+ </div>
201
+ </div>
202
+ )
203
+ },
204
+ }
205
+
206
+ export const WithCustomIcons: Story = {
207
+ render: () => {
208
+ const dataWithIcons: TreeNode[] = [
209
+ {
210
+ id: 'docs',
211
+ label: 'Documents',
212
+ icon: <FileText className="h-4 w-4 text-blue-500" />,
213
+ children: [
214
+ { id: 'doc1', label: 'Report.pdf', icon: <FileText className="h-4 w-4 text-red-500" /> },
215
+ { id: 'doc2', label: 'Notes.txt', icon: <FileText className="h-4 w-4 text-gray-500" /> },
216
+ ],
217
+ },
218
+ {
219
+ id: 'images',
220
+ label: 'Images',
221
+ icon: <Image className="h-4 w-4 text-green-500" />,
222
+ children: [
223
+ { id: 'img1', label: 'Photo.jpg', icon: <Image className="h-4 w-4 text-green-500" /> },
224
+ { id: 'img2', label: 'Logo.png', icon: <Image className="h-4 w-4 text-green-500" /> },
225
+ ],
226
+ },
227
+ {
228
+ id: 'code',
229
+ label: 'Source Code',
230
+ icon: <FileCode className="h-4 w-4 text-purple-500" />,
231
+ children: [
232
+ { id: 'code1', label: 'index.ts', icon: <FileCode className="h-4 w-4 text-blue-500" /> },
233
+ { id: 'code2', label: 'app.tsx', icon: <FileCode className="h-4 w-4 text-blue-500" /> },
234
+ ],
235
+ },
236
+ ]
237
+
238
+ return (
239
+ <WakaTree
240
+ data={dataWithIcons}
241
+ showIcons={false}
242
+ defaultExpandAll
243
+ className="w-[300px] border rounded-lg p-2"
244
+ />
245
+ )
246
+ },
247
+ }
248
+
249
+ export const DragAndDrop: Story = {
250
+ render: () => {
251
+ const [data, setData] = React.useState<TreeNode[]>([
252
+ {
253
+ id: 'folder1',
254
+ label: 'Folder A',
255
+ children: [
256
+ { id: 'item1', label: 'Item 1' },
257
+ { id: 'item2', label: 'Item 2' },
258
+ ],
259
+ },
260
+ {
261
+ id: 'folder2',
262
+ label: 'Folder B',
263
+ children: [
264
+ { id: 'item3', label: 'Item 3' },
265
+ ],
266
+ },
267
+ {
268
+ id: 'folder3',
269
+ label: 'Folder C',
270
+ children: [],
271
+ },
272
+ ])
273
+
274
+ const handleDrop = (draggedId: string, targetId: string, position: 'before' | 'after' | 'inside') => {
275
+ setData(prev => moveNode(prev, draggedId, targetId, position))
276
+ }
277
+
278
+ return (
279
+ <div className="w-[300px] border rounded-lg p-2">
280
+ <p className="text-sm text-muted-foreground mb-4">Drag items to reorganize</p>
281
+ <WakaTree
282
+ data={data}
283
+ draggable
284
+ onDrop={handleDrop}
285
+ defaultExpandAll
286
+ />
287
+ </div>
288
+ )
289
+ },
290
+ }
291
+
292
+ export const NoIcons: Story = {
293
+ args: {
294
+ data: fileSystemData,
295
+ showIcons: false,
296
+ defaultExpandAll: true,
297
+ className: 'w-[300px] border rounded-lg p-2',
298
+ },
299
+ }
300
+
301
+ export const SettingsTree: Story = {
302
+ render: () => {
303
+ const settingsData: TreeNode[] = [
304
+ {
305
+ id: 'general',
306
+ label: 'General',
307
+ icon: <Settings className="h-4 w-4" />,
308
+ children: [
309
+ { id: 'profile', label: 'Profile' },
310
+ { id: 'account', label: 'Account' },
311
+ { id: 'notifications', label: 'Notifications' },
312
+ ],
313
+ },
314
+ {
315
+ id: 'security',
316
+ label: 'Security',
317
+ icon: <Database className="h-4 w-4" />,
318
+ children: [
319
+ { id: 'password', label: 'Password' },
320
+ { id: '2fa', label: 'Two-Factor Auth' },
321
+ { id: 'sessions', label: 'Active Sessions' },
322
+ ],
323
+ },
324
+ {
325
+ id: 'integrations',
326
+ label: 'Integrations',
327
+ icon: <Globe className="h-4 w-4" />,
328
+ children: [
329
+ { id: 'api', label: 'API Keys' },
330
+ { id: 'webhooks', label: 'Webhooks' },
331
+ { id: 'oauth', label: 'OAuth Apps' },
332
+ ],
333
+ },
334
+ ]
335
+
336
+ const [selectedIds, setSelectedIds] = React.useState<string[]>(['profile'])
337
+
338
+ return (
339
+ <div className="flex border rounded-lg overflow-hidden w-[600px]">
340
+ <div className="w-[200px] border-r p-2 bg-muted/30">
341
+ <WakaTree
342
+ data={settingsData}
343
+ selectedIds={selectedIds}
344
+ onSelect={setSelectedIds}
345
+ selectionMode="single"
346
+ showIcons={false}
347
+ defaultExpandAll
348
+ />
349
+ </div>
350
+ <div className="flex-1 p-4">
351
+ <h3 className="font-semibold capitalize">{selectedIds[0] || 'Select a setting'}</h3>
352
+ <p className="text-sm text-muted-foreground mt-2">
353
+ Configure your {selectedIds[0] || '...'} settings here.
354
+ </p>
355
+ </div>
356
+ </div>
357
+ )
358
+ },
359
+ }