@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,445 @@
1
+ import type { Meta, StoryObj } from '@storybook/react'
2
+ import { WakaTraceViewer, defaultTraceSpans } from './index'
3
+ import type { TraceSpan, SpanStatus } from './index'
4
+ import * as React from 'react'
5
+
6
+ const errorTrace: TraceSpan[] = [
7
+ {
8
+ id: 'span-1',
9
+ traceId: 'error-trace-123',
10
+ operationName: 'HTTP POST /api/orders',
11
+ serviceName: 'api-gateway',
12
+ startTime: 0,
13
+ duration: 512,
14
+ status: 'error',
15
+ children: [
16
+ {
17
+ id: 'span-2',
18
+ traceId: 'error-trace-123',
19
+ parentId: 'span-1',
20
+ operationName: 'validateOrder',
21
+ serviceName: 'order-service',
22
+ startTime: 10,
23
+ duration: 45,
24
+ status: 'ok',
25
+ },
26
+ {
27
+ id: 'span-3',
28
+ traceId: 'error-trace-123',
29
+ parentId: 'span-1',
30
+ operationName: 'processPayment',
31
+ serviceName: 'payment-service',
32
+ startTime: 60,
33
+ duration: 380,
34
+ status: 'error',
35
+ children: [
36
+ {
37
+ id: 'span-4',
38
+ traceId: 'error-trace-123',
39
+ parentId: 'span-3',
40
+ operationName: 'chargeCard',
41
+ serviceName: 'stripe-adapter',
42
+ startTime: 65,
43
+ duration: 350,
44
+ status: 'error',
45
+ tags: { 'error.type': 'PaymentDeclined', 'card.last4': '4242' },
46
+ },
47
+ ],
48
+ },
49
+ {
50
+ id: 'span-5',
51
+ traceId: 'error-trace-123',
52
+ parentId: 'span-1',
53
+ operationName: 'rollbackOrder',
54
+ serviceName: 'order-service',
55
+ startTime: 450,
56
+ duration: 55,
57
+ status: 'ok',
58
+ },
59
+ ],
60
+ },
61
+ ]
62
+
63
+ const deepTrace: TraceSpan[] = [
64
+ {
65
+ id: 'root',
66
+ traceId: 'deep-trace',
67
+ operationName: 'HTTP GET /api/dashboard',
68
+ serviceName: 'frontend-api',
69
+ startTime: 0,
70
+ duration: 850,
71
+ status: 'ok',
72
+ children: [
73
+ {
74
+ id: 'l1-1',
75
+ traceId: 'deep-trace',
76
+ parentId: 'root',
77
+ operationName: 'fetchUserData',
78
+ serviceName: 'user-service',
79
+ startTime: 5,
80
+ duration: 200,
81
+ status: 'ok',
82
+ children: [
83
+ {
84
+ id: 'l2-1',
85
+ traceId: 'deep-trace',
86
+ parentId: 'l1-1',
87
+ operationName: 'getUserById',
88
+ serviceName: 'user-db',
89
+ startTime: 10,
90
+ duration: 45,
91
+ status: 'ok',
92
+ },
93
+ {
94
+ id: 'l2-2',
95
+ traceId: 'deep-trace',
96
+ parentId: 'l1-1',
97
+ operationName: 'getPreferences',
98
+ serviceName: 'preferences-service',
99
+ startTime: 60,
100
+ duration: 120,
101
+ status: 'ok',
102
+ children: [
103
+ {
104
+ id: 'l3-1',
105
+ traceId: 'deep-trace',
106
+ parentId: 'l2-2',
107
+ operationName: 'cache.get',
108
+ serviceName: 'redis',
109
+ startTime: 65,
110
+ duration: 5,
111
+ status: 'ok',
112
+ },
113
+ {
114
+ id: 'l3-2',
115
+ traceId: 'deep-trace',
116
+ parentId: 'l2-2',
117
+ operationName: 'SELECT * FROM prefs',
118
+ serviceName: 'postgres',
119
+ startTime: 75,
120
+ duration: 95,
121
+ status: 'ok',
122
+ },
123
+ ],
124
+ },
125
+ ],
126
+ },
127
+ {
128
+ id: 'l1-2',
129
+ traceId: 'deep-trace',
130
+ parentId: 'root',
131
+ operationName: 'fetchMetrics',
132
+ serviceName: 'metrics-service',
133
+ startTime: 210,
134
+ duration: 300,
135
+ status: 'ok',
136
+ },
137
+ {
138
+ id: 'l1-3',
139
+ traceId: 'deep-trace',
140
+ parentId: 'root',
141
+ operationName: 'fetchNotifications',
142
+ serviceName: 'notification-service',
143
+ startTime: 515,
144
+ duration: 250,
145
+ status: 'ok',
146
+ },
147
+ ],
148
+ },
149
+ ]
150
+
151
+ const microservicesTrace: TraceSpan[] = [
152
+ {
153
+ id: 'gateway',
154
+ traceId: 'microservices-demo',
155
+ operationName: 'HTTP GET /api/products/123',
156
+ serviceName: 'api-gateway',
157
+ startTime: 0,
158
+ duration: 156,
159
+ status: 'ok',
160
+ children: [
161
+ {
162
+ id: 'auth',
163
+ traceId: 'microservices-demo',
164
+ parentId: 'gateway',
165
+ operationName: 'validateToken',
166
+ serviceName: 'auth-service',
167
+ startTime: 2,
168
+ duration: 12,
169
+ status: 'ok',
170
+ },
171
+ {
172
+ id: 'product',
173
+ traceId: 'microservices-demo',
174
+ parentId: 'gateway',
175
+ operationName: 'getProduct',
176
+ serviceName: 'product-service',
177
+ startTime: 18,
178
+ duration: 85,
179
+ status: 'ok',
180
+ },
181
+ {
182
+ id: 'inventory',
183
+ traceId: 'microservices-demo',
184
+ parentId: 'gateway',
185
+ operationName: 'checkStock',
186
+ serviceName: 'inventory-service',
187
+ startTime: 18,
188
+ duration: 42,
189
+ status: 'ok',
190
+ },
191
+ {
192
+ id: 'pricing',
193
+ traceId: 'microservices-demo',
194
+ parentId: 'gateway',
195
+ operationName: 'getPrice',
196
+ serviceName: 'pricing-service',
197
+ startTime: 18,
198
+ duration: 35,
199
+ status: 'ok',
200
+ },
201
+ {
202
+ id: 'cache',
203
+ traceId: 'microservices-demo',
204
+ parentId: 'gateway',
205
+ operationName: 'cache.set',
206
+ serviceName: 'redis',
207
+ startTime: 108,
208
+ duration: 8,
209
+ status: 'ok',
210
+ },
211
+ {
212
+ id: 'serialize',
213
+ traceId: 'microservices-demo',
214
+ parentId: 'gateway',
215
+ operationName: 'serializeResponse',
216
+ serviceName: 'api-gateway',
217
+ startTime: 120,
218
+ duration: 32,
219
+ status: 'ok',
220
+ },
221
+ ],
222
+ },
223
+ ]
224
+
225
+ const meta: Meta<typeof WakaTraceViewer> = {
226
+ title: 'Components/DevOps/WakaTraceViewer',
227
+ component: WakaTraceViewer,
228
+ parameters: {
229
+ layout: 'centered',
230
+ docs: {
231
+ description: {
232
+ component: 'A distributed tracing viewer with span hierarchy, timeline visualization, service colors, and expand/collapse functionality.',
233
+ },
234
+ },
235
+ },
236
+ tags: ['autodocs'],
237
+ argTypes: {
238
+ showServiceColors: {
239
+ control: 'boolean',
240
+ description: 'Show service color legend',
241
+ },
242
+ },
243
+ }
244
+
245
+ export default meta
246
+ type Story = StoryObj<typeof WakaTraceViewer>
247
+
248
+ export const Default: Story = {
249
+ args: {
250
+ spans: defaultTraceSpans,
251
+ traceId: 'abc123def456789012345678',
252
+ },
253
+ render: (args) => (
254
+ <div className="w-[900px] h-[500px]">
255
+ <WakaTraceViewer
256
+ {...args}
257
+ onSpanClick={(span) => console.log('Click:', span)}
258
+ onCopyTraceId={(id) => console.log('Copy:', id)}
259
+ />
260
+ </div>
261
+ ),
262
+ }
263
+
264
+ export const ErrorTrace: Story = {
265
+ render: () => (
266
+ <div className="w-[900px] h-[500px]">
267
+ <p className="text-sm text-muted-foreground mb-4">
268
+ Trace showing a failed payment flow
269
+ </p>
270
+ <WakaTraceViewer
271
+ spans={errorTrace}
272
+ traceId="error-trace-123456"
273
+ onSpanClick={(span) => console.log('Click:', span)}
274
+ />
275
+ </div>
276
+ ),
277
+ }
278
+
279
+ export const DeepHierarchy: Story = {
280
+ render: () => (
281
+ <div className="w-[900px] h-[500px]">
282
+ <p className="text-sm text-muted-foreground mb-4">
283
+ Deep nested trace with multiple service calls
284
+ </p>
285
+ <WakaTraceViewer
286
+ spans={deepTrace}
287
+ traceId="deep-trace-789012"
288
+ onSpanClick={(span) => console.log('Click:', span)}
289
+ />
290
+ </div>
291
+ ),
292
+ }
293
+
294
+ export const Microservices: Story = {
295
+ render: () => (
296
+ <div className="w-[900px] h-[500px]">
297
+ <WakaTraceViewer
298
+ spans={microservicesTrace}
299
+ traceId="microservices-demo-456"
300
+ onSpanClick={(span) => console.log('Click:', span)}
301
+ />
302
+ </div>
303
+ ),
304
+ }
305
+
306
+ export const NoServiceColors: Story = {
307
+ render: () => (
308
+ <div className="w-[900px] h-[400px]">
309
+ <WakaTraceViewer
310
+ spans={defaultTraceSpans}
311
+ traceId="abc123def456"
312
+ showServiceColors={false}
313
+ />
314
+ </div>
315
+ ),
316
+ }
317
+
318
+ export const MultipleRootSpans: Story = {
319
+ render: () => {
320
+ const multipleRoots: TraceSpan[] = [
321
+ {
322
+ id: 'root-1',
323
+ traceId: 'multi-root',
324
+ operationName: 'HTTP GET /api/users',
325
+ serviceName: 'api-gateway',
326
+ startTime: 0,
327
+ duration: 120,
328
+ status: 'ok',
329
+ children: [
330
+ {
331
+ id: 'child-1',
332
+ traceId: 'multi-root',
333
+ parentId: 'root-1',
334
+ operationName: 'query users',
335
+ serviceName: 'user-service',
336
+ startTime: 5,
337
+ duration: 100,
338
+ status: 'ok',
339
+ },
340
+ ],
341
+ },
342
+ {
343
+ id: 'root-2',
344
+ traceId: 'multi-root',
345
+ operationName: 'HTTP GET /api/products',
346
+ serviceName: 'api-gateway',
347
+ startTime: 150,
348
+ duration: 80,
349
+ status: 'ok',
350
+ children: [
351
+ {
352
+ id: 'child-2',
353
+ traceId: 'multi-root',
354
+ parentId: 'root-2',
355
+ operationName: 'query products',
356
+ serviceName: 'product-service',
357
+ startTime: 155,
358
+ duration: 65,
359
+ status: 'ok',
360
+ },
361
+ ],
362
+ },
363
+ ]
364
+
365
+ return (
366
+ <div className="w-[900px] h-[400px]">
367
+ <WakaTraceViewer
368
+ spans={multipleRoots}
369
+ traceId="multi-root-trace"
370
+ />
371
+ </div>
372
+ )
373
+ },
374
+ }
375
+
376
+ export const LongOperationNames: Story = {
377
+ render: () => {
378
+ const longNames: TraceSpan[] = [
379
+ {
380
+ id: '1',
381
+ traceId: 'long-names',
382
+ operationName: 'HTTP POST /api/v2/organizations/{orgId}/projects/{projectId}/deployments',
383
+ serviceName: 'deployment-controller',
384
+ startTime: 0,
385
+ duration: 500,
386
+ status: 'ok',
387
+ children: [
388
+ {
389
+ id: '2',
390
+ traceId: 'long-names',
391
+ parentId: '1',
392
+ operationName: 'validateDeploymentConfiguration.checkResourceLimits.validateCPUAndMemory',
393
+ serviceName: 'validator-service',
394
+ startTime: 10,
395
+ duration: 100,
396
+ status: 'ok',
397
+ },
398
+ ],
399
+ },
400
+ ]
401
+
402
+ return (
403
+ <div className="w-[900px] h-[300px]">
404
+ <WakaTraceViewer spans={longNames} traceId="long-names-123" />
405
+ </div>
406
+ )
407
+ },
408
+ }
409
+
410
+ export const Empty: Story = {
411
+ render: () => (
412
+ <div className="w-[900px] h-[300px]">
413
+ <WakaTraceViewer spans={[]} traceId="empty-trace" />
414
+ </div>
415
+ ),
416
+ }
417
+
418
+ export const ObservabilityDashboard: Story = {
419
+ render: () => (
420
+ <div className="p-6 rounded-xl border bg-card">
421
+ <div className="flex items-center justify-between mb-6">
422
+ <div>
423
+ <h2 className="text-xl font-bold">Trace Details</h2>
424
+ <p className="text-sm text-muted-foreground">Request: GET /api/users</p>
425
+ </div>
426
+ <div className="flex items-center gap-2 text-sm">
427
+ <span className="text-muted-foreground">Status:</span>
428
+ <span className="text-green-500 font-medium">Completed</span>
429
+ </div>
430
+ </div>
431
+
432
+ <div className="w-[850px]">
433
+ <WakaTraceViewer
434
+ spans={defaultTraceSpans}
435
+ traceId="abc123def456789012345678901234"
436
+ onSpanClick={(span) => console.log('Click:', span)}
437
+ onCopyTraceId={(id) => {
438
+ navigator.clipboard?.writeText(id)
439
+ alert('Trace ID copied!')
440
+ }}
441
+ />
442
+ </div>
443
+ </div>
444
+ ),
445
+ }