@workflow/web-shared 5.0.0-beta.38 → 5.0.0-beta.39

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 (307) hide show
  1. package/README.md +3 -3
  2. package/dist/components/event-list-view.d.ts.map +1 -1
  3. package/dist/components/event-list-view.js +10 -10
  4. package/dist/components/index.d.ts +3 -5
  5. package/dist/components/index.d.ts.map +1 -1
  6. package/dist/components/index.js +3 -5
  7. package/dist/components/sidebar/attribute-panel.d.ts.map +1 -1
  8. package/dist/components/sidebar/attribute-panel.js +32 -8
  9. package/dist/components/sidebar/attributes-block.js +3 -3
  10. package/dist/components/sidebar/copyable-data-block.js +2 -2
  11. package/dist/components/sidebar/entity-detail-panel.js +3 -3
  12. package/dist/components/sidebar/events-list.js +2 -2
  13. package/dist/components/stream-viewer.js +2 -2
  14. package/dist/components/trace-viewer/components/copy-button.d.ts.map +1 -0
  15. package/dist/components/trace-viewer/components/copy-button.js +27 -0
  16. package/dist/components/trace-viewer/components/detail-panel-width.d.ts.map +1 -0
  17. package/dist/components/trace-viewer/components/detail-panel-width.js +67 -0
  18. package/dist/components/trace-viewer/components/detail-panel.d.ts.map +1 -0
  19. package/dist/components/trace-viewer/components/detail-panel.js +122 -0
  20. package/dist/components/trace-viewer/components/draggable-border.d.ts.map +1 -0
  21. package/dist/components/trace-viewer/components/draggable-border.js +140 -0
  22. package/dist/components/trace-viewer/components/event-list.d.ts.map +1 -0
  23. package/dist/components/trace-viewer/components/event-list.js +47 -0
  24. package/dist/components/trace-viewer/components/middle-truncate/copy-selection.d.ts.map +1 -0
  25. package/dist/components/trace-viewer/components/middle-truncate/copy-selection.js +54 -0
  26. package/dist/components/trace-viewer/components/middle-truncate/middle-truncate.d.ts.map +1 -0
  27. package/dist/components/trace-viewer/components/middle-truncate/middle-truncate.js +81 -0
  28. package/dist/components/trace-viewer/components/middle-truncate/truncate.d.ts.map +1 -0
  29. package/dist/components/trace-viewer/components/middle-truncate/truncate.js +101 -0
  30. package/dist/components/trace-viewer/components/middle-truncate/use-middle-truncate.d.ts.map +1 -0
  31. package/dist/components/trace-viewer/components/middle-truncate/use-middle-truncate.js +114 -0
  32. package/dist/components/trace-viewer/components/minimap.d.ts.map +1 -0
  33. package/dist/components/trace-viewer/components/minimap.js +337 -0
  34. package/dist/components/trace-viewer/components/pane-constants.d.ts.map +1 -0
  35. package/dist/components/trace-viewer/components/pane-constants.js +16 -0
  36. package/dist/components/trace-viewer/components/span-markers.d.ts.map +1 -0
  37. package/dist/components/trace-viewer/components/span-markers.js +85 -0
  38. package/dist/components/trace-viewer/components/split-pane.d.ts.map +1 -0
  39. package/dist/components/trace-viewer/components/split-pane.js +41 -0
  40. package/dist/components/trace-viewer/components/timeline.d.ts.map +1 -0
  41. package/dist/components/trace-viewer/components/timeline.js +321 -0
  42. package/dist/components/trace-viewer/components/trace-shortcut-helper.d.ts.map +1 -0
  43. package/dist/components/trace-viewer/components/trace-shortcut-helper.js +55 -0
  44. package/dist/components/trace-viewer/components/trace-viewer-skeleton.d.ts.map +1 -0
  45. package/dist/components/trace-viewer/components/trace-viewer-skeleton.js +26 -0
  46. package/dist/components/trace-viewer/components/use-element-width.d.ts.map +1 -0
  47. package/dist/components/trace-viewer/components/use-element-width.js +25 -0
  48. package/dist/components/trace-viewer/components/use-row-window.d.ts.map +1 -0
  49. package/dist/components/trace-viewer/components/use-row-window.js +107 -0
  50. package/dist/components/trace-viewer/context.d.ts +14 -182
  51. package/dist/components/trace-viewer/context.d.ts.map +1 -1
  52. package/dist/components/trace-viewer/context.js +44 -351
  53. package/dist/components/trace-viewer/icons.d.ts.map +1 -0
  54. package/dist/components/trace-viewer/icons.js +15 -0
  55. package/dist/components/trace-viewer/search.d.ts.map +1 -0
  56. package/dist/components/trace-viewer/search.js +134 -0
  57. package/dist/components/trace-viewer/trace-viewer.d.ts +7 -28
  58. package/dist/components/trace-viewer/trace-viewer.d.ts.map +1 -1
  59. package/dist/components/trace-viewer/trace-viewer.js +306 -356
  60. package/dist/components/trace-viewer/types.d.ts +2 -211
  61. package/dist/components/trace-viewer/types.d.ts.map +1 -1
  62. package/dist/components/trace-viewer/types.js +1 -1
  63. package/dist/components/trace-viewer/utils.d.ts.map +1 -0
  64. package/dist/components/trace-viewer/utils.js +430 -0
  65. package/dist/components/{trace-viewer-new.d.ts → trace-viewer.d.ts} +3 -3
  66. package/dist/components/trace-viewer.d.ts.map +1 -0
  67. package/dist/components/trace-viewer.js +21 -0
  68. package/dist/components/ui/alert.js +2 -2
  69. package/dist/components/ui/button.d.ts +1 -1
  70. package/dist/components/ui/button.d.ts.map +1 -1
  71. package/dist/components/ui/button.js +3 -3
  72. package/dist/components/ui/card.d.ts.map +1 -1
  73. package/dist/components/ui/card.js +3 -3
  74. package/dist/components/ui/error-card.js +2 -2
  75. package/dist/components/ui/error-stack-block.js +4 -4
  76. package/dist/components/ui/kbd.js +3 -3
  77. package/dist/components/ui/timestamp-tooltip.js +3 -3
  78. package/dist/components/workflow-traces/trace-span-construction.d.ts +1 -1
  79. package/dist/components/workflow-traces/trace-span-construction.js +1 -1
  80. package/dist/lib/trace-builder.d.ts +1 -1
  81. package/dist/lib/trace-builder.d.ts.map +1 -1
  82. package/dist/lib/trace-builder.js +1 -1
  83. package/dist/lib/trace-types.d.ts +54 -0
  84. package/dist/lib/trace-types.d.ts.map +1 -0
  85. package/dist/lib/trace-types.js +2 -0
  86. package/package.json +5 -5
  87. package/src/components/event-list-view.tsx +12 -9
  88. package/src/components/index.ts +3 -5
  89. package/src/components/sidebar/attribute-panel.tsx +46 -8
  90. package/src/components/sidebar/attributes-block.tsx +2 -2
  91. package/src/components/sidebar/copyable-data-block.tsx +1 -1
  92. package/src/components/sidebar/entity-detail-panel.tsx +3 -3
  93. package/src/components/sidebar/events-list.tsx +1 -1
  94. package/src/components/stream-viewer.tsx +1 -1
  95. package/src/components/{new-trace-viewer → trace-viewer}/components/event-list.tsx +1 -1
  96. package/src/components/{new-trace-viewer → trace-viewer}/components/minimap.tsx +1 -4
  97. package/src/components/{new-trace-viewer → trace-viewer}/components/timeline.tsx +2 -5
  98. package/src/components/{new-trace-viewer → trace-viewer}/components/trace-shortcut-helper.tsx +1 -1
  99. package/src/components/trace-viewer/context.tsx +63 -656
  100. package/src/components/trace-viewer/trace-viewer.tsx +563 -531
  101. package/src/components/trace-viewer/types.ts +2 -234
  102. package/src/components/{new-trace-viewer → trace-viewer}/utils.ts +2 -2
  103. package/src/components/{trace-viewer-new.tsx → trace-viewer.tsx} +5 -5
  104. package/src/components/ui/alert.tsx +1 -1
  105. package/src/components/ui/button.tsx +3 -3
  106. package/src/components/ui/card.tsx +2 -9
  107. package/src/components/ui/error-card.tsx +3 -3
  108. package/src/components/ui/error-stack-block.tsx +3 -3
  109. package/src/components/ui/kbd.tsx +2 -2
  110. package/src/components/ui/timestamp-tooltip.tsx +4 -4
  111. package/src/components/workflow-traces/trace-span-construction.ts +1 -1
  112. package/src/lib/trace-builder.ts +1 -1
  113. package/src/lib/trace-types.ts +56 -0
  114. package/dist/components/new-trace-viewer/components/copy-button.d.ts.map +0 -1
  115. package/dist/components/new-trace-viewer/components/copy-button.js +0 -27
  116. package/dist/components/new-trace-viewer/components/detail-panel-width.d.ts.map +0 -1
  117. package/dist/components/new-trace-viewer/components/detail-panel-width.js +0 -67
  118. package/dist/components/new-trace-viewer/components/detail-panel.d.ts.map +0 -1
  119. package/dist/components/new-trace-viewer/components/detail-panel.js +0 -122
  120. package/dist/components/new-trace-viewer/components/draggable-border.d.ts.map +0 -1
  121. package/dist/components/new-trace-viewer/components/draggable-border.js +0 -140
  122. package/dist/components/new-trace-viewer/components/event-list.d.ts.map +0 -1
  123. package/dist/components/new-trace-viewer/components/event-list.js +0 -47
  124. package/dist/components/new-trace-viewer/components/middle-truncate/copy-selection.d.ts.map +0 -1
  125. package/dist/components/new-trace-viewer/components/middle-truncate/copy-selection.js +0 -54
  126. package/dist/components/new-trace-viewer/components/middle-truncate/middle-truncate.d.ts.map +0 -1
  127. package/dist/components/new-trace-viewer/components/middle-truncate/middle-truncate.js +0 -81
  128. package/dist/components/new-trace-viewer/components/middle-truncate/truncate.d.ts.map +0 -1
  129. package/dist/components/new-trace-viewer/components/middle-truncate/truncate.js +0 -101
  130. package/dist/components/new-trace-viewer/components/middle-truncate/use-middle-truncate.d.ts.map +0 -1
  131. package/dist/components/new-trace-viewer/components/middle-truncate/use-middle-truncate.js +0 -114
  132. package/dist/components/new-trace-viewer/components/minimap.d.ts.map +0 -1
  133. package/dist/components/new-trace-viewer/components/minimap.js +0 -337
  134. package/dist/components/new-trace-viewer/components/pane-constants.d.ts.map +0 -1
  135. package/dist/components/new-trace-viewer/components/pane-constants.js +0 -16
  136. package/dist/components/new-trace-viewer/components/span-markers.d.ts.map +0 -1
  137. package/dist/components/new-trace-viewer/components/span-markers.js +0 -85
  138. package/dist/components/new-trace-viewer/components/split-pane.d.ts.map +0 -1
  139. package/dist/components/new-trace-viewer/components/split-pane.js +0 -41
  140. package/dist/components/new-trace-viewer/components/timeline.d.ts.map +0 -1
  141. package/dist/components/new-trace-viewer/components/timeline.js +0 -321
  142. package/dist/components/new-trace-viewer/components/trace-shortcut-helper.d.ts.map +0 -1
  143. package/dist/components/new-trace-viewer/components/trace-shortcut-helper.js +0 -55
  144. package/dist/components/new-trace-viewer/components/trace-viewer-skeleton.d.ts.map +0 -1
  145. package/dist/components/new-trace-viewer/components/trace-viewer-skeleton.js +0 -26
  146. package/dist/components/new-trace-viewer/components/use-element-width.d.ts.map +0 -1
  147. package/dist/components/new-trace-viewer/components/use-element-width.js +0 -25
  148. package/dist/components/new-trace-viewer/components/use-row-window.d.ts.map +0 -1
  149. package/dist/components/new-trace-viewer/components/use-row-window.js +0 -107
  150. package/dist/components/new-trace-viewer/context.d.ts +0 -17
  151. package/dist/components/new-trace-viewer/context.d.ts.map +0 -1
  152. package/dist/components/new-trace-viewer/context.js +0 -48
  153. package/dist/components/new-trace-viewer/icons.d.ts.map +0 -1
  154. package/dist/components/new-trace-viewer/icons.js +0 -15
  155. package/dist/components/new-trace-viewer/search.d.ts.map +0 -1
  156. package/dist/components/new-trace-viewer/search.js +0 -134
  157. package/dist/components/new-trace-viewer/trace-viewer.d.ts +0 -11
  158. package/dist/components/new-trace-viewer/trace-viewer.d.ts.map +0 -1
  159. package/dist/components/new-trace-viewer/trace-viewer.js +0 -336
  160. package/dist/components/new-trace-viewer/types.d.ts +0 -3
  161. package/dist/components/new-trace-viewer/types.d.ts.map +0 -1
  162. package/dist/components/new-trace-viewer/types.js +0 -2
  163. package/dist/components/new-trace-viewer/utils.d.ts.map +0 -1
  164. package/dist/components/new-trace-viewer/utils.js +0 -430
  165. package/dist/components/run-trace-view.d.ts +0 -23
  166. package/dist/components/run-trace-view.d.ts.map +0 -1
  167. package/dist/components/run-trace-view.js +0 -11
  168. package/dist/components/trace-viewer/components/map.d.ts +0 -8
  169. package/dist/components/trace-viewer/components/map.d.ts.map +0 -1
  170. package/dist/components/trace-viewer/components/map.js +0 -162
  171. package/dist/components/trace-viewer/components/markers.d.ts +0 -23
  172. package/dist/components/trace-viewer/components/markers.d.ts.map +0 -1
  173. package/dist/components/trace-viewer/components/markers.js +0 -416
  174. package/dist/components/trace-viewer/components/node.d.ts +0 -35
  175. package/dist/components/trace-viewer/components/node.d.ts.map +0 -1
  176. package/dist/components/trace-viewer/components/node.js +0 -286
  177. package/dist/components/trace-viewer/components/search-input.d.ts +0 -9
  178. package/dist/components/trace-viewer/components/search-input.d.ts.map +0 -1
  179. package/dist/components/trace-viewer/components/search-input.js +0 -9
  180. package/dist/components/trace-viewer/components/search.d.ts +0 -3
  181. package/dist/components/trace-viewer/components/search.d.ts.map +0 -1
  182. package/dist/components/trace-viewer/components/search.js +0 -25
  183. package/dist/components/trace-viewer/components/span-content.d.ts +0 -19
  184. package/dist/components/trace-viewer/components/span-content.d.ts.map +0 -1
  185. package/dist/components/trace-viewer/components/span-content.js +0 -137
  186. package/dist/components/trace-viewer/components/span-detail-panel.d.ts +0 -10
  187. package/dist/components/trace-viewer/components/span-detail-panel.d.ts.map +0 -1
  188. package/dist/components/trace-viewer/components/span-detail-panel.js +0 -285
  189. package/dist/components/trace-viewer/components/span-segments.d.ts +0 -50
  190. package/dist/components/trace-viewer/components/span-segments.d.ts.map +0 -1
  191. package/dist/components/trace-viewer/components/span-segments.js +0 -445
  192. package/dist/components/trace-viewer/components/span-strategies.d.ts +0 -46
  193. package/dist/components/trace-viewer/components/span-strategies.d.ts.map +0 -1
  194. package/dist/components/trace-viewer/components/span-strategies.js +0 -108
  195. package/dist/components/trace-viewer/components/ui.d.ts +0 -28
  196. package/dist/components/trace-viewer/components/ui.d.ts.map +0 -1
  197. package/dist/components/trace-viewer/components/ui.js +0 -39
  198. package/dist/components/trace-viewer/components/zoom-button.d.ts +0 -3
  199. package/dist/components/trace-viewer/components/zoom-button.d.ts.map +0 -1
  200. package/dist/components/trace-viewer/components/zoom-button.js +0 -29
  201. package/dist/components/trace-viewer/components/zoom-icons.d.ts +0 -11
  202. package/dist/components/trace-viewer/components/zoom-icons.d.ts.map +0 -1
  203. package/dist/components/trace-viewer/components/zoom-icons.js +0 -11
  204. package/dist/components/trace-viewer/index.d.ts +0 -5
  205. package/dist/components/trace-viewer/index.d.ts.map +0 -1
  206. package/dist/components/trace-viewer/index.js +0 -4
  207. package/dist/components/trace-viewer/trace-viewer.module.css +0 -1465
  208. package/dist/components/trace-viewer/util/constants.d.ts +0 -9
  209. package/dist/components/trace-viewer/util/constants.d.ts.map +0 -1
  210. package/dist/components/trace-viewer/util/constants.js +0 -9
  211. package/dist/components/trace-viewer/util/scrollbar-width.d.ts +0 -2
  212. package/dist/components/trace-viewer/util/scrollbar-width.d.ts.map +0 -1
  213. package/dist/components/trace-viewer/util/scrollbar-width.js +0 -14
  214. package/dist/components/trace-viewer/util/tree.d.ts +0 -13
  215. package/dist/components/trace-viewer/util/tree.d.ts.map +0 -1
  216. package/dist/components/trace-viewer/util/tree.js +0 -227
  217. package/dist/components/trace-viewer/util/use-immediate-style.d.ts +0 -15
  218. package/dist/components/trace-viewer/util/use-immediate-style.d.ts.map +0 -1
  219. package/dist/components/trace-viewer/util/use-immediate-style.js +0 -23
  220. package/dist/components/trace-viewer/util/use-streaming-spans.d.ts +0 -8
  221. package/dist/components/trace-viewer/util/use-streaming-spans.d.ts.map +0 -1
  222. package/dist/components/trace-viewer/util/use-streaming-spans.js +0 -345
  223. package/dist/components/trace-viewer/util/use-trackpad-zoom.d.ts +0 -6
  224. package/dist/components/trace-viewer/util/use-trackpad-zoom.d.ts.map +0 -1
  225. package/dist/components/trace-viewer/util/use-trackpad-zoom.js +0 -39
  226. package/dist/components/trace-viewer/worker.d.ts +0 -2
  227. package/dist/components/trace-viewer/worker.d.ts.map +0 -1
  228. package/dist/components/trace-viewer/worker.js +0 -109
  229. package/dist/components/trace-viewer-new.d.ts.map +0 -1
  230. package/dist/components/trace-viewer-new.js +0 -21
  231. package/dist/components/workflow-trace-view.d.ts +0 -39
  232. package/dist/components/workflow-trace-view.d.ts.map +0 -1
  233. package/dist/components/workflow-trace-view.js +0 -690
  234. package/dist/components/workflow-traces/trace-colors.d.ts +0 -15
  235. package/dist/components/workflow-traces/trace-colors.d.ts.map +0 -1
  236. package/dist/components/workflow-traces/trace-colors.js +0 -86
  237. package/src/components/new-trace-viewer/context.tsx +0 -93
  238. package/src/components/new-trace-viewer/trace-viewer.tsx +0 -632
  239. package/src/components/new-trace-viewer/types.ts +0 -2
  240. package/src/components/run-trace-view.tsx +0 -80
  241. package/src/components/trace-viewer/components/map.tsx +0 -226
  242. package/src/components/trace-viewer/components/markers.tsx +0 -612
  243. package/src/components/trace-viewer/components/node.tsx +0 -506
  244. package/src/components/trace-viewer/components/search-input.tsx +0 -52
  245. package/src/components/trace-viewer/components/search.tsx +0 -47
  246. package/src/components/trace-viewer/components/span-content.tsx +0 -247
  247. package/src/components/trace-viewer/components/span-detail-panel.tsx +0 -655
  248. package/src/components/trace-viewer/components/span-segments.ts +0 -585
  249. package/src/components/trace-viewer/components/span-strategies.ts +0 -205
  250. package/src/components/trace-viewer/components/ui.tsx +0 -156
  251. package/src/components/trace-viewer/components/zoom-button.tsx +0 -61
  252. package/src/components/trace-viewer/components/zoom-icons.tsx +0 -65
  253. package/src/components/trace-viewer/index.tsx +0 -4
  254. package/src/components/trace-viewer/trace-viewer.module.css +0 -1465
  255. package/src/components/trace-viewer/util/constants.ts +0 -8
  256. package/src/components/trace-viewer/util/scrollbar-width.ts +0 -13
  257. package/src/components/trace-viewer/util/tree.ts +0 -277
  258. package/src/components/trace-viewer/util/use-immediate-style.ts +0 -38
  259. package/src/components/trace-viewer/util/use-streaming-spans.ts +0 -426
  260. package/src/components/trace-viewer/util/use-trackpad-zoom.tsx +0 -51
  261. package/src/components/trace-viewer/worker.ts +0 -131
  262. package/src/components/workflow-trace-view.tsx +0 -1166
  263. package/src/components/workflow-traces/trace-colors.ts +0 -112
  264. package/dist/components/{new-trace-viewer → trace-viewer}/components/copy-button.d.ts +0 -0
  265. package/dist/components/{new-trace-viewer → trace-viewer}/components/detail-panel-width.d.ts +0 -0
  266. package/dist/components/{new-trace-viewer → trace-viewer}/components/detail-panel.d.ts +0 -0
  267. package/dist/components/{new-trace-viewer → trace-viewer}/components/draggable-border.d.ts +0 -0
  268. package/dist/components/{new-trace-viewer → trace-viewer}/components/event-list.d.ts +0 -0
  269. package/dist/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/copy-selection.d.ts +0 -0
  270. package/dist/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/middle-truncate.d.ts +0 -0
  271. package/dist/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/truncate.d.ts +0 -0
  272. package/dist/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/use-middle-truncate.d.ts +0 -0
  273. package/dist/components/{new-trace-viewer → trace-viewer}/components/minimap.d.ts +0 -0
  274. package/dist/components/{new-trace-viewer → trace-viewer}/components/pane-constants.d.ts +0 -0
  275. package/dist/components/{new-trace-viewer → trace-viewer}/components/span-markers.d.ts +0 -0
  276. package/dist/components/{new-trace-viewer → trace-viewer}/components/split-pane.d.ts +0 -0
  277. package/dist/components/{new-trace-viewer → trace-viewer}/components/timeline.d.ts +0 -0
  278. package/dist/components/{new-trace-viewer → trace-viewer}/components/timeline.module.css +0 -0
  279. package/dist/components/{new-trace-viewer → trace-viewer}/components/trace-shortcut-helper.d.ts +0 -0
  280. package/dist/components/{new-trace-viewer → trace-viewer}/components/trace-shortcut-helper.module.css +0 -0
  281. package/dist/components/{new-trace-viewer → trace-viewer}/components/trace-viewer-skeleton.d.ts +0 -0
  282. package/dist/components/{new-trace-viewer → trace-viewer}/components/use-element-width.d.ts +0 -0
  283. package/dist/components/{new-trace-viewer → trace-viewer}/components/use-row-window.d.ts +0 -0
  284. package/dist/components/{new-trace-viewer → trace-viewer}/icons.d.ts +0 -0
  285. package/dist/components/{new-trace-viewer → trace-viewer}/search.d.ts +0 -0
  286. package/dist/components/{new-trace-viewer → trace-viewer}/utils.d.ts +0 -0
  287. package/src/components/{new-trace-viewer → trace-viewer}/components/copy-button.tsx +0 -0
  288. package/src/components/{new-trace-viewer → trace-viewer}/components/detail-panel-width.test.ts +0 -0
  289. package/src/components/{new-trace-viewer → trace-viewer}/components/detail-panel-width.ts +0 -0
  290. package/src/components/{new-trace-viewer → trace-viewer}/components/detail-panel.tsx +0 -0
  291. package/src/components/{new-trace-viewer → trace-viewer}/components/draggable-border.tsx +0 -0
  292. package/src/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/copy-selection.ts +0 -0
  293. package/src/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/middle-truncate.tsx +1 -1
  294. /package/src/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/truncate.ts +0 -0
  295. /package/src/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/use-middle-truncate.ts +0 -0
  296. /package/src/components/{new-trace-viewer → trace-viewer}/components/pane-constants.ts +0 -0
  297. /package/src/components/{new-trace-viewer → trace-viewer}/components/span-markers.tsx +0 -0
  298. /package/src/components/{new-trace-viewer → trace-viewer}/components/split-pane.tsx +0 -0
  299. /package/src/components/{new-trace-viewer → trace-viewer}/components/timeline.module.css +0 -0
  300. /package/src/components/{new-trace-viewer → trace-viewer}/components/trace-shortcut-helper.module.css +0 -0
  301. /package/src/components/{new-trace-viewer → trace-viewer}/components/trace-viewer-skeleton.tsx +0 -0
  302. /package/src/components/{new-trace-viewer → trace-viewer}/components/use-element-width.ts +0 -0
  303. /package/src/components/{new-trace-viewer → trace-viewer}/components/use-row-window.ts +0 -0
  304. /package/src/components/{new-trace-viewer → trace-viewer}/icons.tsx +0 -0
  305. /package/src/components/{new-trace-viewer → trace-viewer}/search.ts +0 -0
  306. /package/src/components/{new-trace-viewer → trace-viewer}/utils.test.ts +0 -0
  307. /package/src/{components/trace-viewer/modules.d.ts → modules.d.ts} +0 -0
@@ -1,632 +0,0 @@
1
- 'use client';
2
-
3
- import { RotateCcw, Search, ZoomIn, ZoomOut } from 'lucide-react';
4
- import {
5
- type ReactNode,
6
- useCallback,
7
- useDeferredValue,
8
- useEffect,
9
- useMemo,
10
- useRef,
11
- useState,
12
- } from 'react';
13
- import { useLoadMoreOnScroll } from '../../hooks/use-load-more-on-scroll';
14
- import { useReducedMotion } from '../../hooks/use-reduced-motion';
15
- import {
16
- formatDurationPrecise,
17
- getHighResInMs,
18
- } from '../trace-viewer/util/timing';
19
- import { IconButton } from '../ui/icon-button';
20
- import { Kbd } from '../ui/kbd';
21
- import { Spinner } from '../ui/spinner';
22
- import { TooltipProvider } from '../ui/tooltip';
23
- import { TraceDetailPanel } from './components/detail-panel';
24
- import EventList from './components/event-list';
25
- import { Minimap } from './components/minimap';
26
- import { SplitPane } from './components/split-pane';
27
- import {
28
- TIMELINE_PADDING_PX,
29
- Timeline,
30
- TimelineHeader,
31
- type TimelineHover,
32
- } from './components/timeline';
33
- import { TraceShortcutHelper } from './components/trace-shortcut-helper';
34
- import { ROW_HEIGHT_PX, scrollRowIntoView } from './components/use-row-window';
35
- import { ActiveSpanProvider, useActiveSpan } from './context';
36
- import { searchSpans } from './search';
37
- import type { TraceWithMeta } from './types';
38
- import {
39
- clampViewportToRoot,
40
- computeRootBounds,
41
- computeTimeMarkers,
42
- type ViewportRange,
43
- wheelDeltaToPixels,
44
- wheelZoomScaleFactor,
45
- } from './utils';
46
-
47
- interface NewTraceViewerProps {
48
- trace: TraceWithMeta;
49
- onLoadMore?: () => void | Promise<void>;
50
- hasMore?: boolean;
51
- isLoadingMore?: boolean;
52
- }
53
-
54
- const MIN_VIEWPORT_MS = 0.001;
55
-
56
- const ZOOM_DEBOUNCE_MS = 150;
57
-
58
- function useAnimatedViewport(initial: ViewportRange) {
59
- const [viewport, setViewportState] = useState<ViewportRange>(initial);
60
- const animRef = useRef<{
61
- raf: number;
62
- from: ViewportRange;
63
- to: ViewportRange;
64
- start: number;
65
- } | null>(null);
66
- const currentRef = useRef(initial);
67
- currentRef.current = viewport;
68
- const reducedMotion = useReducedMotion();
69
-
70
- const cancel = useCallback(() => {
71
- if (animRef.current) {
72
- cancelAnimationFrame(animRef.current.raf);
73
- animRef.current = null;
74
- }
75
- }, []);
76
-
77
- const animateTo = useCallback(
78
- (target: ViewportRange) => {
79
- cancel();
80
-
81
- if (reducedMotion) {
82
- currentRef.current = target;
83
- setViewportState(target);
84
- return;
85
- }
86
-
87
- const from = currentRef.current;
88
- const anim = { raf: 0, from, to: target, start: performance.now() };
89
-
90
- const tick = () => {
91
- const t = Math.min((performance.now() - anim.start) / 240, 1);
92
- const e = t < 0.5 ? 8 * t * t * t * t : 1 - (-2 * t + 2) ** 4 / 2;
93
- setViewportState({
94
- start: anim.from.start + (anim.to.start - anim.from.start) * e,
95
- end: anim.from.end + (anim.to.end - anim.from.end) * e,
96
- });
97
- if (t < 1) anim.raf = requestAnimationFrame(tick);
98
- else animRef.current = null;
99
- };
100
-
101
- animRef.current = anim;
102
- anim.raf = requestAnimationFrame(tick);
103
- },
104
- [cancel, reducedMotion]
105
- );
106
-
107
- const setViewport = useCallback(
108
- (update: ViewportRange | ((prev: ViewportRange) => ViewportRange)) => {
109
- cancel();
110
- if (typeof update === 'function') {
111
- setViewportState((prev) => {
112
- const next = update(prev);
113
- currentRef.current = next;
114
- return next;
115
- });
116
- } else {
117
- currentRef.current = update;
118
- setViewportState(update);
119
- }
120
- },
121
- [cancel]
122
- );
123
-
124
- useEffect(() => cancel, [cancel]);
125
-
126
- return { viewport, setViewport, animateTo };
127
- }
128
-
129
- // ---------------------------------------------------------------------------
130
- // Root component
131
- // ---------------------------------------------------------------------------
132
-
133
- export function NewTraceViewer({
134
- trace,
135
- onLoadMore,
136
- hasMore,
137
- isLoadingMore,
138
- }: NewTraceViewerProps): ReactNode {
139
- return (
140
- <TooltipProvider delayDuration={300}>
141
- <ActiveSpanProvider spans={trace.spans}>
142
- <NewTraceViewerContent
143
- trace={trace}
144
- onLoadMore={onLoadMore}
145
- hasMore={hasMore}
146
- isLoadingMore={isLoadingMore}
147
- />
148
- </ActiveSpanProvider>
149
- </TooltipProvider>
150
- );
151
- }
152
-
153
- function NewTraceViewerContent({
154
- trace,
155
- onLoadMore,
156
- hasMore,
157
- isLoadingMore,
158
- }: NewTraceViewerProps): ReactNode {
159
- const { activeSpanId, setActiveSpan, clearActiveSpan } = useActiveSpan();
160
-
161
- const reducedMotion = useReducedMotion();
162
-
163
- const [searchQuery, setSearchQuery] = useState('');
164
- const deferredSearchQuery = useDeferredValue(searchQuery);
165
-
166
- const paneRootRef = useRef<HTMLDivElement>(null);
167
-
168
- const searchResult = useMemo(
169
- () => searchSpans(trace.spans, deferredSearchQuery),
170
- [trace.spans, deferredSearchQuery]
171
- );
172
-
173
- const root = useMemo(() => computeRootBounds(trace.spans), [trace.spans]);
174
-
175
- const scrollContainerRef = useRef<HTMLDivElement>(null);
176
- const loadMore = useCallback(() => {
177
- void onLoadMore?.();
178
- }, [onLoadMore]);
179
- const loadMoreSentinelRef = useLoadMoreOnScroll(loadMore, {
180
- hasMore: Boolean(onLoadMore && hasMore),
181
- isLoadingMore: Boolean(isLoadingMore),
182
- rootRef: scrollContainerRef,
183
- });
184
-
185
- const { viewport, setViewport, animateTo } = useAnimatedViewport({
186
- start: root.startTime,
187
- end: root.startTime + root.duration,
188
- });
189
-
190
- const prevRootRef = useRef<ViewportRange>({
191
- start: root.startTime,
192
- end: root.startTime + root.duration,
193
- });
194
-
195
- useEffect(() => {
196
- const prevRoot = prevRootRef.current;
197
- const newStart = root.startTime;
198
- const newEnd = root.startTime + root.duration;
199
-
200
- setViewport((prev) => {
201
- const wasAtFullExtent =
202
- Math.abs(prev.start - prevRoot.start) < 0.01 &&
203
- Math.abs(prev.end - prevRoot.end) < 0.01;
204
-
205
- if (wasAtFullExtent) {
206
- return { start: newStart, end: newEnd };
207
- }
208
- return prev;
209
- });
210
-
211
- prevRootRef.current = { start: newStart, end: newEnd };
212
- }, [root.startTime, root.duration, setViewport]);
213
-
214
- const viewDuration = viewport.end - viewport.start;
215
-
216
- // Keep a ref to the live viewport so zoom callbacks can read the current
217
- // range without being recreated on every pan (which would bust TimelineBar's
218
- // memo and re-render every row each animation frame).
219
- const viewportRef = useRef(viewport);
220
- viewportRef.current = viewport;
221
-
222
- const timeMarkers = useMemo(
223
- () => computeTimeMarkers(viewDuration, viewport.start - root.startTime),
224
- [viewDuration, viewport.start, root.startTime]
225
- );
226
-
227
- const resetZoom = useCallback(() => {
228
- animateTo({ start: root.startTime, end: root.startTime + root.duration });
229
- }, [animateTo, root.startTime, root.duration]);
230
-
231
- const clampToRoot = useCallback(
232
- (next: ViewportRange): ViewportRange =>
233
- clampViewportToRoot(next, root.startTime, root.endTime, MIN_VIEWPORT_MS),
234
- [root.startTime, root.endTime]
235
- );
236
-
237
- // Pan (keeping the current zoom) so `timeMs` is centered in view — used by the
238
- // off-screen marker indicators to scroll their marker into view.
239
- const handleRevealTime = useCallback(
240
- (timeMs: number) => {
241
- const { start, end } = viewportRef.current;
242
- const duration = end - start;
243
- animateTo(
244
- clampToRoot({
245
- start: timeMs - duration / 2,
246
- end: timeMs + duration / 2,
247
- })
248
- );
249
- },
250
- [animateTo, clampToRoot]
251
- );
252
-
253
- const ZOOM_FACTOR = 0.5;
254
-
255
- const zoomBy = useCallback(
256
- (factor: number) => {
257
- const { start, end } = viewportRef.current;
258
- const center = (start + end) / 2;
259
- const newDuration = Math.max(MIN_VIEWPORT_MS, (end - start) * factor);
260
- animateTo(
261
- clampToRoot({
262
- start: center - newDuration / 2,
263
- end: center + newDuration / 2,
264
- })
265
- );
266
- },
267
- [animateTo, clampToRoot]
268
- );
269
-
270
- const zoomIn = useCallback(() => zoomBy(ZOOM_FACTOR), [zoomBy]);
271
- const zoomOut = useCallback(() => zoomBy(1 / ZOOM_FACTOR), [zoomBy]);
272
- const isAtMinZoom = viewDuration >= root.duration;
273
- const isAtMaxZoom = viewDuration <= MIN_VIEWPORT_MS;
274
-
275
- const focusViewportOnSpan = useCallback(
276
- (spanId: string) => {
277
- const span = trace.spans.find((s) => s.spanId === spanId);
278
- if (!span) return;
279
-
280
- const spanStart = getHighResInMs(span.startTime);
281
- const spanEnd = getHighResInMs(span.endTime);
282
- const spanDuration = spanEnd - spanStart;
283
-
284
- if (spanDuration > root.duration * 0.8) {
285
- animateTo({ start: root.startTime, end: root.endTime });
286
- return;
287
- }
288
-
289
- const padding = Math.max(spanDuration * 0.2, MIN_VIEWPORT_MS / 2);
290
- let newStart = spanStart - padding;
291
- let newEnd = spanEnd + padding;
292
-
293
- if (newEnd - newStart < MIN_VIEWPORT_MS) {
294
- const center = (spanStart + spanEnd) / 2;
295
- newStart = center - MIN_VIEWPORT_MS / 2;
296
- newEnd = center + MIN_VIEWPORT_MS / 2;
297
- }
298
-
299
- animateTo(clampToRoot({ start: newStart, end: newEnd }));
300
- },
301
- [
302
- animateTo,
303
- trace.spans,
304
- root.startTime,
305
- root.endTime,
306
- root.duration,
307
- clampToRoot,
308
- ]
309
- );
310
-
311
- // Bring a row into view when keyboard/button navigation lands on a span that
312
- // sits outside the shared scroll container's visible area. The list is
313
- // windowed, so an off-screen row has no DOM node to `scrollIntoView` —
314
- // `scrollRowIntoView` computes the target offset from the span's index.
315
- const scrollSpanIntoView = useCallback(
316
- (spanId: string) => {
317
- const index = trace.spans.findIndex((s) => s.spanId === spanId);
318
- if (index === -1) return;
319
-
320
- const list =
321
- scrollContainerRef.current?.querySelector<HTMLElement>('#event-list') ??
322
- null;
323
- scrollRowIntoView(list, index, ROW_HEIGHT_PX, {
324
- behavior: reducedMotion ? 'auto' : 'smooth',
325
- });
326
- },
327
- [trace.spans, reducedMotion]
328
- );
329
-
330
- const zoomTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);
331
- const cancelPendingZoom = useCallback(() => {
332
- if (zoomTimerRef.current !== null) {
333
- clearTimeout(zoomTimerRef.current);
334
- zoomTimerRef.current = null;
335
- }
336
- }, []);
337
- useEffect(() => cancelPendingZoom, [cancelPendingZoom]);
338
-
339
- const handleClearActiveSpan = useCallback(() => {
340
- cancelPendingZoom();
341
- clearActiveSpan();
342
- }, [cancelPendingZoom, clearActiveSpan]);
343
-
344
- const handleSelectSpan = useCallback(
345
- (spanId: string) => {
346
- cancelPendingZoom();
347
- if (spanId === activeSpanId) {
348
- clearActiveSpan();
349
- return;
350
- }
351
- setActiveSpan(spanId);
352
- focusViewportOnSpan(spanId);
353
- },
354
- [
355
- cancelPendingZoom,
356
- activeSpanId,
357
- clearActiveSpan,
358
- setActiveSpan,
359
- focusViewportOnSpan,
360
- ]
361
- );
362
-
363
- const navigateToSpan = useCallback(
364
- (spanId: string) => {
365
- setActiveSpan(spanId);
366
- scrollSpanIntoView(spanId);
367
- cancelPendingZoom();
368
- zoomTimerRef.current = setTimeout(() => {
369
- zoomTimerRef.current = null;
370
- focusViewportOnSpan(spanId);
371
- }, ZOOM_DEBOUNCE_MS);
372
- },
373
- [setActiveSpan, scrollSpanIntoView, cancelPendingZoom, focusViewportOnSpan]
374
- );
375
-
376
- const [altHeld, setAltHeld] = useState(false);
377
-
378
- useEffect(() => {
379
- const onKeyDown = (e: KeyboardEvent): void => {
380
- if (e.key === 'Escape') {
381
- handleClearActiveSpan();
382
- } else if (e.key === 'Alt') {
383
- setAltHeld(true);
384
- }
385
- };
386
- const onKeyUp = (e: KeyboardEvent): void => {
387
- if (e.key === 'Alt') setAltHeld(false);
388
- };
389
- const onBlur = (): void => setAltHeld(false);
390
-
391
- window.addEventListener('keydown', onKeyDown);
392
- window.addEventListener('keyup', onKeyUp);
393
- window.addEventListener('blur', onBlur);
394
- return () => {
395
- window.removeEventListener('keydown', onKeyDown);
396
- window.removeEventListener('keyup', onKeyUp);
397
- window.removeEventListener('blur', onBlur);
398
- };
399
- }, [handleClearActiveSpan]);
400
-
401
- const timelineRef = useRef<HTMLDivElement>(null);
402
- const [hover, setHover] = useState<TimelineHover | null>(null);
403
-
404
- const hoverInfo = useMemo(() => {
405
- if (hover == null) return null;
406
- const absTime = viewport.start + hover.fraction * viewDuration;
407
- const offset = absTime - root.startTime;
408
- return { fraction: hover.fraction, label: formatDurationPrecise(offset) };
409
- }, [hover, viewport.start, viewDuration, root.startTime]);
410
-
411
- const handleTimelineMouseMove = useCallback(
412
- (e: React.MouseEvent<HTMLDivElement>) => {
413
- const el = timelineRef.current;
414
- if (!el) return;
415
- const rect = el.getBoundingClientRect();
416
- const contentWidth = rect.width - TIMELINE_PADDING_PX * 2;
417
- if (contentWidth <= 0) return;
418
- const fraction = Math.max(
419
- 0,
420
- Math.min(
421
- 1,
422
- (e.clientX - rect.left - TIMELINE_PADDING_PX) / contentWidth
423
- )
424
- );
425
- setHover({
426
- fraction,
427
- rowIndex: Math.floor((e.clientY - rect.top) / ROW_HEIGHT_PX),
428
- });
429
- },
430
- []
431
- );
432
-
433
- const handleTimelineMouseLeave = useCallback(() => {
434
- setHover(null);
435
- }, []);
436
-
437
- useEffect(() => {
438
- const el = timelineRef.current;
439
- if (!el || root.duration <= 0) return;
440
-
441
- const onWheel = (e: WheelEvent): void => {
442
- const isZoomGesture = e.ctrlKey || e.metaKey;
443
- const hasDeltaX = Math.abs(e.deltaX) > Math.abs(e.deltaY);
444
-
445
- if (!isZoomGesture && !hasDeltaX) return;
446
- e.preventDefault();
447
-
448
- const rect = el.getBoundingClientRect();
449
- const contentWidth = rect.width - TIMELINE_PADDING_PX * 2;
450
- if (contentWidth <= 0) return;
451
-
452
- if (isZoomGesture) {
453
- const cursorFraction = Math.max(
454
- 0,
455
- Math.min(
456
- 1,
457
- (e.clientX - rect.left - TIMELINE_PADDING_PX) / contentWidth
458
- )
459
- );
460
- const scaleFactor = wheelZoomScaleFactor(e);
461
-
462
- setViewport((prev) => {
463
- const prevDuration = prev.end - prev.start;
464
- const cursorTime = prev.start + cursorFraction * prevDuration;
465
- // Clamp the duration before anchoring so the cursor keeps its
466
- // fraction even when the zoom hits the min/max bounds.
467
- const newDuration = Math.max(
468
- MIN_VIEWPORT_MS,
469
- Math.min(root.duration, prevDuration * scaleFactor)
470
- );
471
- return clampToRoot({
472
- start: cursorTime - cursorFraction * newDuration,
473
- end: cursorTime + (1 - cursorFraction) * newDuration,
474
- });
475
- });
476
- } else {
477
- const dx = wheelDeltaToPixels(e.deltaX, e.deltaMode);
478
- setViewport((prev) => {
479
- const panAmount = (dx / contentWidth) * (prev.end - prev.start);
480
- return clampToRoot({
481
- start: prev.start + panAmount,
482
- end: prev.end + panAmount,
483
- });
484
- });
485
- }
486
- };
487
-
488
- el.addEventListener('wheel', onWheel, { passive: false });
489
- return () => el.removeEventListener('wheel', onWheel);
490
- }, [root.duration, setViewport, clampToRoot]);
491
-
492
- return (
493
- <div
494
- ref={paneRootRef}
495
- data-pane="pane-root"
496
- className="relative flex w-full h-full max-h-full"
497
- >
498
- <div
499
- id="trace-parent"
500
- className="@container flex-1 min-w-0 grid grid-rows-[auto_1fr] h-full min-h-0 overflow-hidden relative bg-background-100"
501
- >
502
- <Minimap
503
- spans={trace.spans}
504
- root={root}
505
- viewport={viewport}
506
- minViewportMs={MIN_VIEWPORT_MS}
507
- onViewportChange={setViewport}
508
- onAnimateTo={animateTo}
509
- />
510
- <SplitPane
511
- scrollContainerRef={scrollContainerRef}
512
- startHeader={
513
- <div className="bg-background-100 border-b border-gray-alpha-400 h-10 min-h-10 flex items-center pl-4 pr-2 gap-1.5">
514
- <Search className="w-3.5 h-3.5 shrink-0 text-gray-800" />
515
- <input
516
- id="trace-viewer-search"
517
- name="trace-viewer-search"
518
- type="text"
519
- value={searchQuery}
520
- onChange={(e) => setSearchQuery(e.target.value)}
521
- onKeyDown={(e) => {
522
- if (e.key === 'Escape' && searchQuery) {
523
- e.preventDefault();
524
- e.stopPropagation();
525
- setSearchQuery('');
526
- }
527
- }}
528
- placeholder="Search spans..."
529
- aria-label="Search spans"
530
- className="flex-1 min-w-0 bg-transparent text-sm text-gray-1000 placeholder:text-gray-800 outline-none"
531
- />
532
- {searchQuery && (
533
- <button
534
- type="button"
535
- aria-label="Clear search"
536
- onClick={() => setSearchQuery('')}
537
- className="-mr-2 hidden h-full max-w-full shrink-0 cursor-pointer items-center rounded-r-md border-0 bg-transparent px-2.5 font-inherit text-base text-gray-900 no-underline transition-colors duration-150 ease-in hover:text-gray-1000 focus-visible:-outline-offset-1 focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--ds-focus-color)] min-[961px]:flex"
538
- >
539
- <Kbd variant="outline" size="search">
540
- Esc
541
- </Kbd>
542
- </button>
543
- )}
544
- </div>
545
- }
546
- endHeader={
547
- <TimelineHeader markers={timeMarkers} hoverInfo={hoverInfo} />
548
- }
549
- >
550
- <div className="block overflow-visible">
551
- <EventList
552
- spans={trace.spans}
553
- activeSpanId={activeSpanId}
554
- searchResult={searchResult}
555
- onSelectSpan={handleSelectSpan}
556
- />
557
- <div ref={loadMoreSentinelRef} className="flex justify-center">
558
- {isLoadingMore ? (
559
- <div className="flex items-center justify-center gap-2 py-3 text-sm text-gray-800">
560
- <Spinner size={14} />
561
- <span>Loading spans…</span>
562
- </div>
563
- ) : null}
564
- </div>
565
- </div>
566
- {/* biome-ignore lint/a11y/noStaticElementInteractions: timeline hover and wheel gestures are pointer-only annotations */}
567
- <div
568
- ref={timelineRef}
569
- id="trace-timeline"
570
- className="@container block min-h-0 overflow-visible relative"
571
- onDoubleClick={resetZoom}
572
- onMouseMove={handleTimelineMouseMove}
573
- onMouseLeave={handleTimelineMouseLeave}
574
- >
575
- <Timeline
576
- spans={trace.spans}
577
- viewStart={viewport.start}
578
- viewEnd={viewport.end}
579
- markers={timeMarkers}
580
- selectedId={activeSpanId}
581
- searchResult={searchResult}
582
- onSelect={handleSelectSpan}
583
- onRevealTime={handleRevealTime}
584
- hover={hover}
585
- altHeld={altHeld}
586
- />
587
- </div>
588
- <>
589
- <TraceShortcutHelper
590
- hasMultipleSpans={trace.spans.length > 1}
591
- reducedMotion={reducedMotion}
592
- />
593
- <div className="pointer-events-auto flex items-center border border-gray-alpha-400 rounded-md bg-background-100 shadow-sm overflow-hidden divide-x divide-gray-alpha-400">
594
- <IconButton
595
- variant="muted"
596
- size="small"
597
- onClick={zoomOut}
598
- disabled={isAtMinZoom}
599
- aria-label="Zoom out"
600
- >
601
- <ZoomOut className="w-4 h-4" />
602
- </IconButton>
603
- <IconButton
604
- variant="muted"
605
- size="small"
606
- onClick={resetZoom}
607
- aria-label="Reset zoom"
608
- >
609
- <RotateCcw className="w-3.5 h-3.5" />
610
- </IconButton>
611
- <IconButton
612
- variant="muted"
613
- size="small"
614
- onClick={zoomIn}
615
- disabled={isAtMaxZoom}
616
- aria-label="Zoom in"
617
- >
618
- <ZoomIn className="w-4 h-4" />
619
- </IconButton>
620
- </div>
621
- </>
622
- </SplitPane>
623
- </div>
624
-
625
- <TraceDetailPanel
626
- containerRef={paneRootRef}
627
- onNavigateToSpan={navigateToSpan}
628
- onClose={handleClearActiveSpan}
629
- />
630
- </div>
631
- );
632
- }
@@ -1,2 +0,0 @@
1
- export type { Span, SpanEvent, Trace } from '../trace-viewer/types';
2
- export type { TraceWithMeta } from '../../lib/trace-builder';
@@ -1,80 +0,0 @@
1
- 'use client';
2
-
3
- import type { Event, Hook, WorkflowRun } from '@workflow/world';
4
- import { AlertCircle } from 'lucide-react';
5
- import type { FetchSpanDetail } from './sidebar/use-selected-span-detail';
6
- import { WorkflowTraceViewer } from './workflow-trace-view';
7
-
8
- interface RunTraceViewProps {
9
- run: WorkflowRun;
10
- events: Event[];
11
- isLoading?: boolean;
12
- error?: Error | null;
13
- fetchSpanDetail: FetchSpanDetail;
14
- onWakeUpSleep?: (
15
- runId: string,
16
- correlationId: string
17
- ) => Promise<{ stoppedCount: number }>;
18
- onResolveHook?: (
19
- hookToken: string,
20
- payload: unknown,
21
- hook?: Hook
22
- ) => Promise<void>;
23
- onCancelRun?: (runId: string) => Promise<void>;
24
- onStreamClick?: (streamId: string) => void;
25
- onRunClick?: (runId: string) => void;
26
- onLoadMoreSpans?: () => void | Promise<void>;
27
- hasMoreSpans?: boolean;
28
- isLoadingMoreSpans?: boolean;
29
- showSeparateEventOccurrenceTimestamps?: boolean;
30
- }
31
-
32
- export function RunTraceView({
33
- run,
34
- events,
35
- isLoading,
36
- error,
37
- fetchSpanDetail,
38
- onWakeUpSleep,
39
- onResolveHook,
40
- onCancelRun,
41
- onStreamClick,
42
- onRunClick,
43
- onLoadMoreSpans,
44
- hasMoreSpans,
45
- isLoadingMoreSpans,
46
- showSeparateEventOccurrenceTimestamps,
47
- }: RunTraceViewProps) {
48
- if (error && !run) {
49
- return (
50
- <div className="m-4">
51
- <AlertCircle className="h-4 w-4" />
52
- <p>Error loading workflow run</p>
53
- <p>{error.message}</p>
54
- </div>
55
- );
56
- }
57
-
58
- return (
59
- <div className="w-full h-full relative">
60
- <WorkflowTraceViewer
61
- error={error}
62
- events={events}
63
- run={run}
64
- isLoading={isLoading}
65
- fetchSpanDetail={fetchSpanDetail}
66
- onWakeUpSleep={onWakeUpSleep}
67
- onResolveHook={onResolveHook}
68
- onCancelRun={onCancelRun}
69
- onStreamClick={onStreamClick}
70
- onRunClick={onRunClick}
71
- onLoadMoreSpans={onLoadMoreSpans}
72
- hasMoreSpans={hasMoreSpans}
73
- isLoadingMoreSpans={isLoadingMoreSpans}
74
- showSeparateEventOccurrenceTimestamps={
75
- showSeparateEventOccurrenceTimestamps
76
- }
77
- />
78
- </div>
79
- );
80
- }