@workflow/web-shared 5.0.0-beta.37 → 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 (313) 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 +4 -5
  5. package/dist/components/index.d.ts.map +1 -1
  6. package/dist/components/index.js +4 -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-skeleton.d.ts +2 -0
  14. package/dist/components/stream-viewer-skeleton.d.ts.map +1 -0
  15. package/dist/components/stream-viewer-skeleton.js +12 -0
  16. package/dist/components/stream-viewer.d.ts +1 -1
  17. package/dist/components/stream-viewer.d.ts.map +1 -1
  18. package/dist/components/stream-viewer.js +9 -26
  19. package/dist/components/trace-viewer/components/copy-button.d.ts.map +1 -0
  20. package/dist/components/trace-viewer/components/copy-button.js +27 -0
  21. package/dist/components/trace-viewer/components/detail-panel-width.d.ts.map +1 -0
  22. package/dist/components/trace-viewer/components/detail-panel-width.js +67 -0
  23. package/dist/components/trace-viewer/components/detail-panel.d.ts.map +1 -0
  24. package/dist/components/trace-viewer/components/detail-panel.js +122 -0
  25. package/dist/components/trace-viewer/components/draggable-border.d.ts.map +1 -0
  26. package/dist/components/trace-viewer/components/draggable-border.js +140 -0
  27. package/dist/components/trace-viewer/components/event-list.d.ts.map +1 -0
  28. package/dist/components/trace-viewer/components/event-list.js +47 -0
  29. package/dist/components/trace-viewer/components/middle-truncate/copy-selection.d.ts.map +1 -0
  30. package/dist/components/trace-viewer/components/middle-truncate/copy-selection.js +54 -0
  31. package/dist/components/trace-viewer/components/middle-truncate/middle-truncate.d.ts.map +1 -0
  32. package/dist/components/trace-viewer/components/middle-truncate/middle-truncate.js +81 -0
  33. package/dist/components/trace-viewer/components/middle-truncate/truncate.d.ts.map +1 -0
  34. package/dist/components/trace-viewer/components/middle-truncate/truncate.js +101 -0
  35. package/dist/components/trace-viewer/components/middle-truncate/use-middle-truncate.d.ts.map +1 -0
  36. package/dist/components/trace-viewer/components/middle-truncate/use-middle-truncate.js +114 -0
  37. package/dist/components/trace-viewer/components/minimap.d.ts.map +1 -0
  38. package/dist/components/trace-viewer/components/minimap.js +337 -0
  39. package/dist/components/trace-viewer/components/pane-constants.d.ts.map +1 -0
  40. package/dist/components/trace-viewer/components/pane-constants.js +16 -0
  41. package/dist/components/trace-viewer/components/span-markers.d.ts.map +1 -0
  42. package/dist/components/trace-viewer/components/span-markers.js +85 -0
  43. package/dist/components/trace-viewer/components/split-pane.d.ts.map +1 -0
  44. package/dist/components/trace-viewer/components/split-pane.js +41 -0
  45. package/dist/components/trace-viewer/components/timeline.d.ts.map +1 -0
  46. package/dist/components/trace-viewer/components/timeline.js +321 -0
  47. package/dist/components/trace-viewer/components/trace-shortcut-helper.d.ts.map +1 -0
  48. package/dist/components/trace-viewer/components/trace-shortcut-helper.js +55 -0
  49. package/dist/components/trace-viewer/components/trace-viewer-skeleton.d.ts.map +1 -0
  50. package/dist/components/trace-viewer/components/trace-viewer-skeleton.js +26 -0
  51. package/dist/components/trace-viewer/components/use-element-width.d.ts.map +1 -0
  52. package/dist/components/trace-viewer/components/use-element-width.js +25 -0
  53. package/dist/components/trace-viewer/components/use-row-window.d.ts.map +1 -0
  54. package/dist/components/trace-viewer/components/use-row-window.js +107 -0
  55. package/dist/components/trace-viewer/context.d.ts +14 -182
  56. package/dist/components/trace-viewer/context.d.ts.map +1 -1
  57. package/dist/components/trace-viewer/context.js +44 -351
  58. package/dist/components/trace-viewer/icons.d.ts.map +1 -0
  59. package/dist/components/trace-viewer/icons.js +15 -0
  60. package/dist/components/trace-viewer/search.d.ts.map +1 -0
  61. package/dist/components/trace-viewer/search.js +134 -0
  62. package/dist/components/trace-viewer/trace-viewer.d.ts +7 -28
  63. package/dist/components/trace-viewer/trace-viewer.d.ts.map +1 -1
  64. package/dist/components/trace-viewer/trace-viewer.js +306 -356
  65. package/dist/components/trace-viewer/types.d.ts +2 -211
  66. package/dist/components/trace-viewer/types.d.ts.map +1 -1
  67. package/dist/components/trace-viewer/types.js +1 -1
  68. package/dist/components/trace-viewer/utils.d.ts.map +1 -0
  69. package/dist/components/trace-viewer/utils.js +430 -0
  70. package/dist/components/{trace-viewer-new.d.ts → trace-viewer.d.ts} +3 -3
  71. package/dist/components/trace-viewer.d.ts.map +1 -0
  72. package/dist/components/trace-viewer.js +21 -0
  73. package/dist/components/ui/alert.js +2 -2
  74. package/dist/components/ui/button.d.ts +1 -1
  75. package/dist/components/ui/button.d.ts.map +1 -1
  76. package/dist/components/ui/button.js +3 -3
  77. package/dist/components/ui/card.d.ts.map +1 -1
  78. package/dist/components/ui/card.js +3 -3
  79. package/dist/components/ui/error-card.js +2 -2
  80. package/dist/components/ui/error-stack-block.js +4 -4
  81. package/dist/components/ui/kbd.js +3 -3
  82. package/dist/components/ui/timestamp-tooltip.js +3 -3
  83. package/dist/components/workflow-traces/trace-span-construction.d.ts +1 -1
  84. package/dist/components/workflow-traces/trace-span-construction.js +1 -1
  85. package/dist/lib/trace-builder.d.ts +1 -1
  86. package/dist/lib/trace-builder.d.ts.map +1 -1
  87. package/dist/lib/trace-builder.js +1 -1
  88. package/dist/lib/trace-types.d.ts +54 -0
  89. package/dist/lib/trace-types.d.ts.map +1 -0
  90. package/dist/lib/trace-types.js +2 -0
  91. package/package.json +6 -6
  92. package/src/components/event-list-view.tsx +12 -9
  93. package/src/components/index.ts +4 -5
  94. package/src/components/sidebar/attribute-panel.tsx +46 -8
  95. package/src/components/sidebar/attributes-block.tsx +2 -2
  96. package/src/components/sidebar/copyable-data-block.tsx +1 -1
  97. package/src/components/sidebar/entity-detail-panel.tsx +3 -3
  98. package/src/components/sidebar/events-list.tsx +1 -1
  99. package/src/components/stream-viewer-skeleton.tsx +34 -0
  100. package/src/components/stream-viewer.tsx +34 -106
  101. package/src/components/{new-trace-viewer → trace-viewer}/components/event-list.tsx +1 -1
  102. package/src/components/{new-trace-viewer → trace-viewer}/components/minimap.tsx +1 -4
  103. package/src/components/{new-trace-viewer → trace-viewer}/components/timeline.tsx +2 -5
  104. package/src/components/{new-trace-viewer → trace-viewer}/components/trace-shortcut-helper.tsx +1 -1
  105. package/src/components/trace-viewer/context.tsx +63 -656
  106. package/src/components/trace-viewer/trace-viewer.tsx +563 -531
  107. package/src/components/trace-viewer/types.ts +2 -234
  108. package/src/components/{new-trace-viewer → trace-viewer}/utils.ts +2 -2
  109. package/src/components/{trace-viewer-new.tsx → trace-viewer.tsx} +5 -5
  110. package/src/components/ui/alert.tsx +1 -1
  111. package/src/components/ui/button.tsx +3 -3
  112. package/src/components/ui/card.tsx +2 -9
  113. package/src/components/ui/error-card.tsx +3 -3
  114. package/src/components/ui/error-stack-block.tsx +3 -3
  115. package/src/components/ui/kbd.tsx +2 -2
  116. package/src/components/ui/timestamp-tooltip.tsx +4 -4
  117. package/src/components/workflow-traces/trace-span-construction.ts +1 -1
  118. package/src/lib/trace-builder.ts +1 -1
  119. package/src/lib/trace-types.ts +56 -0
  120. package/dist/components/new-trace-viewer/components/copy-button.d.ts.map +0 -1
  121. package/dist/components/new-trace-viewer/components/copy-button.js +0 -27
  122. package/dist/components/new-trace-viewer/components/detail-panel-width.d.ts.map +0 -1
  123. package/dist/components/new-trace-viewer/components/detail-panel-width.js +0 -67
  124. package/dist/components/new-trace-viewer/components/detail-panel.d.ts.map +0 -1
  125. package/dist/components/new-trace-viewer/components/detail-panel.js +0 -122
  126. package/dist/components/new-trace-viewer/components/draggable-border.d.ts.map +0 -1
  127. package/dist/components/new-trace-viewer/components/draggable-border.js +0 -140
  128. package/dist/components/new-trace-viewer/components/event-list.d.ts.map +0 -1
  129. package/dist/components/new-trace-viewer/components/event-list.js +0 -47
  130. package/dist/components/new-trace-viewer/components/middle-truncate/copy-selection.d.ts.map +0 -1
  131. package/dist/components/new-trace-viewer/components/middle-truncate/copy-selection.js +0 -54
  132. package/dist/components/new-trace-viewer/components/middle-truncate/middle-truncate.d.ts.map +0 -1
  133. package/dist/components/new-trace-viewer/components/middle-truncate/middle-truncate.js +0 -81
  134. package/dist/components/new-trace-viewer/components/middle-truncate/truncate.d.ts.map +0 -1
  135. package/dist/components/new-trace-viewer/components/middle-truncate/truncate.js +0 -101
  136. package/dist/components/new-trace-viewer/components/middle-truncate/use-middle-truncate.d.ts.map +0 -1
  137. package/dist/components/new-trace-viewer/components/middle-truncate/use-middle-truncate.js +0 -114
  138. package/dist/components/new-trace-viewer/components/minimap.d.ts.map +0 -1
  139. package/dist/components/new-trace-viewer/components/minimap.js +0 -337
  140. package/dist/components/new-trace-viewer/components/pane-constants.d.ts.map +0 -1
  141. package/dist/components/new-trace-viewer/components/pane-constants.js +0 -16
  142. package/dist/components/new-trace-viewer/components/span-markers.d.ts.map +0 -1
  143. package/dist/components/new-trace-viewer/components/span-markers.js +0 -85
  144. package/dist/components/new-trace-viewer/components/split-pane.d.ts.map +0 -1
  145. package/dist/components/new-trace-viewer/components/split-pane.js +0 -41
  146. package/dist/components/new-trace-viewer/components/timeline.d.ts.map +0 -1
  147. package/dist/components/new-trace-viewer/components/timeline.js +0 -321
  148. package/dist/components/new-trace-viewer/components/trace-shortcut-helper.d.ts.map +0 -1
  149. package/dist/components/new-trace-viewer/components/trace-shortcut-helper.js +0 -55
  150. package/dist/components/new-trace-viewer/components/trace-viewer-skeleton.d.ts.map +0 -1
  151. package/dist/components/new-trace-viewer/components/trace-viewer-skeleton.js +0 -26
  152. package/dist/components/new-trace-viewer/components/use-element-width.d.ts.map +0 -1
  153. package/dist/components/new-trace-viewer/components/use-element-width.js +0 -25
  154. package/dist/components/new-trace-viewer/components/use-row-window.d.ts.map +0 -1
  155. package/dist/components/new-trace-viewer/components/use-row-window.js +0 -107
  156. package/dist/components/new-trace-viewer/context.d.ts +0 -17
  157. package/dist/components/new-trace-viewer/context.d.ts.map +0 -1
  158. package/dist/components/new-trace-viewer/context.js +0 -48
  159. package/dist/components/new-trace-viewer/icons.d.ts.map +0 -1
  160. package/dist/components/new-trace-viewer/icons.js +0 -15
  161. package/dist/components/new-trace-viewer/search.d.ts.map +0 -1
  162. package/dist/components/new-trace-viewer/search.js +0 -134
  163. package/dist/components/new-trace-viewer/trace-viewer.d.ts +0 -11
  164. package/dist/components/new-trace-viewer/trace-viewer.d.ts.map +0 -1
  165. package/dist/components/new-trace-viewer/trace-viewer.js +0 -336
  166. package/dist/components/new-trace-viewer/types.d.ts +0 -3
  167. package/dist/components/new-trace-viewer/types.d.ts.map +0 -1
  168. package/dist/components/new-trace-viewer/types.js +0 -2
  169. package/dist/components/new-trace-viewer/utils.d.ts.map +0 -1
  170. package/dist/components/new-trace-viewer/utils.js +0 -430
  171. package/dist/components/run-trace-view.d.ts +0 -23
  172. package/dist/components/run-trace-view.d.ts.map +0 -1
  173. package/dist/components/run-trace-view.js +0 -11
  174. package/dist/components/trace-viewer/components/map.d.ts +0 -8
  175. package/dist/components/trace-viewer/components/map.d.ts.map +0 -1
  176. package/dist/components/trace-viewer/components/map.js +0 -162
  177. package/dist/components/trace-viewer/components/markers.d.ts +0 -23
  178. package/dist/components/trace-viewer/components/markers.d.ts.map +0 -1
  179. package/dist/components/trace-viewer/components/markers.js +0 -416
  180. package/dist/components/trace-viewer/components/node.d.ts +0 -35
  181. package/dist/components/trace-viewer/components/node.d.ts.map +0 -1
  182. package/dist/components/trace-viewer/components/node.js +0 -286
  183. package/dist/components/trace-viewer/components/search-input.d.ts +0 -9
  184. package/dist/components/trace-viewer/components/search-input.d.ts.map +0 -1
  185. package/dist/components/trace-viewer/components/search-input.js +0 -9
  186. package/dist/components/trace-viewer/components/search.d.ts +0 -3
  187. package/dist/components/trace-viewer/components/search.d.ts.map +0 -1
  188. package/dist/components/trace-viewer/components/search.js +0 -25
  189. package/dist/components/trace-viewer/components/span-content.d.ts +0 -19
  190. package/dist/components/trace-viewer/components/span-content.d.ts.map +0 -1
  191. package/dist/components/trace-viewer/components/span-content.js +0 -137
  192. package/dist/components/trace-viewer/components/span-detail-panel.d.ts +0 -10
  193. package/dist/components/trace-viewer/components/span-detail-panel.d.ts.map +0 -1
  194. package/dist/components/trace-viewer/components/span-detail-panel.js +0 -285
  195. package/dist/components/trace-viewer/components/span-segments.d.ts +0 -50
  196. package/dist/components/trace-viewer/components/span-segments.d.ts.map +0 -1
  197. package/dist/components/trace-viewer/components/span-segments.js +0 -445
  198. package/dist/components/trace-viewer/components/span-strategies.d.ts +0 -46
  199. package/dist/components/trace-viewer/components/span-strategies.d.ts.map +0 -1
  200. package/dist/components/trace-viewer/components/span-strategies.js +0 -108
  201. package/dist/components/trace-viewer/components/ui.d.ts +0 -28
  202. package/dist/components/trace-viewer/components/ui.d.ts.map +0 -1
  203. package/dist/components/trace-viewer/components/ui.js +0 -39
  204. package/dist/components/trace-viewer/components/zoom-button.d.ts +0 -3
  205. package/dist/components/trace-viewer/components/zoom-button.d.ts.map +0 -1
  206. package/dist/components/trace-viewer/components/zoom-button.js +0 -29
  207. package/dist/components/trace-viewer/components/zoom-icons.d.ts +0 -11
  208. package/dist/components/trace-viewer/components/zoom-icons.d.ts.map +0 -1
  209. package/dist/components/trace-viewer/components/zoom-icons.js +0 -11
  210. package/dist/components/trace-viewer/index.d.ts +0 -5
  211. package/dist/components/trace-viewer/index.d.ts.map +0 -1
  212. package/dist/components/trace-viewer/index.js +0 -4
  213. package/dist/components/trace-viewer/trace-viewer.module.css +0 -1465
  214. package/dist/components/trace-viewer/util/constants.d.ts +0 -9
  215. package/dist/components/trace-viewer/util/constants.d.ts.map +0 -1
  216. package/dist/components/trace-viewer/util/constants.js +0 -9
  217. package/dist/components/trace-viewer/util/scrollbar-width.d.ts +0 -2
  218. package/dist/components/trace-viewer/util/scrollbar-width.d.ts.map +0 -1
  219. package/dist/components/trace-viewer/util/scrollbar-width.js +0 -14
  220. package/dist/components/trace-viewer/util/tree.d.ts +0 -13
  221. package/dist/components/trace-viewer/util/tree.d.ts.map +0 -1
  222. package/dist/components/trace-viewer/util/tree.js +0 -227
  223. package/dist/components/trace-viewer/util/use-immediate-style.d.ts +0 -15
  224. package/dist/components/trace-viewer/util/use-immediate-style.d.ts.map +0 -1
  225. package/dist/components/trace-viewer/util/use-immediate-style.js +0 -23
  226. package/dist/components/trace-viewer/util/use-streaming-spans.d.ts +0 -8
  227. package/dist/components/trace-viewer/util/use-streaming-spans.d.ts.map +0 -1
  228. package/dist/components/trace-viewer/util/use-streaming-spans.js +0 -345
  229. package/dist/components/trace-viewer/util/use-trackpad-zoom.d.ts +0 -6
  230. package/dist/components/trace-viewer/util/use-trackpad-zoom.d.ts.map +0 -1
  231. package/dist/components/trace-viewer/util/use-trackpad-zoom.js +0 -39
  232. package/dist/components/trace-viewer/worker.d.ts +0 -2
  233. package/dist/components/trace-viewer/worker.d.ts.map +0 -1
  234. package/dist/components/trace-viewer/worker.js +0 -109
  235. package/dist/components/trace-viewer-new.d.ts.map +0 -1
  236. package/dist/components/trace-viewer-new.js +0 -21
  237. package/dist/components/workflow-trace-view.d.ts +0 -39
  238. package/dist/components/workflow-trace-view.d.ts.map +0 -1
  239. package/dist/components/workflow-trace-view.js +0 -690
  240. package/dist/components/workflow-traces/trace-colors.d.ts +0 -15
  241. package/dist/components/workflow-traces/trace-colors.d.ts.map +0 -1
  242. package/dist/components/workflow-traces/trace-colors.js +0 -86
  243. package/src/components/new-trace-viewer/context.tsx +0 -93
  244. package/src/components/new-trace-viewer/trace-viewer.tsx +0 -632
  245. package/src/components/new-trace-viewer/types.ts +0 -2
  246. package/src/components/run-trace-view.tsx +0 -80
  247. package/src/components/trace-viewer/components/map.tsx +0 -226
  248. package/src/components/trace-viewer/components/markers.tsx +0 -612
  249. package/src/components/trace-viewer/components/node.tsx +0 -506
  250. package/src/components/trace-viewer/components/search-input.tsx +0 -52
  251. package/src/components/trace-viewer/components/search.tsx +0 -47
  252. package/src/components/trace-viewer/components/span-content.tsx +0 -247
  253. package/src/components/trace-viewer/components/span-detail-panel.tsx +0 -655
  254. package/src/components/trace-viewer/components/span-segments.ts +0 -585
  255. package/src/components/trace-viewer/components/span-strategies.ts +0 -205
  256. package/src/components/trace-viewer/components/ui.tsx +0 -156
  257. package/src/components/trace-viewer/components/zoom-button.tsx +0 -61
  258. package/src/components/trace-viewer/components/zoom-icons.tsx +0 -65
  259. package/src/components/trace-viewer/index.tsx +0 -4
  260. package/src/components/trace-viewer/trace-viewer.module.css +0 -1465
  261. package/src/components/trace-viewer/util/constants.ts +0 -8
  262. package/src/components/trace-viewer/util/scrollbar-width.ts +0 -13
  263. package/src/components/trace-viewer/util/tree.ts +0 -277
  264. package/src/components/trace-viewer/util/use-immediate-style.ts +0 -38
  265. package/src/components/trace-viewer/util/use-streaming-spans.ts +0 -426
  266. package/src/components/trace-viewer/util/use-trackpad-zoom.tsx +0 -51
  267. package/src/components/trace-viewer/worker.ts +0 -131
  268. package/src/components/workflow-trace-view.tsx +0 -1166
  269. package/src/components/workflow-traces/trace-colors.ts +0 -112
  270. package/dist/components/{new-trace-viewer → trace-viewer}/components/copy-button.d.ts +0 -0
  271. package/dist/components/{new-trace-viewer → trace-viewer}/components/detail-panel-width.d.ts +0 -0
  272. package/dist/components/{new-trace-viewer → trace-viewer}/components/detail-panel.d.ts +0 -0
  273. package/dist/components/{new-trace-viewer → trace-viewer}/components/draggable-border.d.ts +0 -0
  274. package/dist/components/{new-trace-viewer → trace-viewer}/components/event-list.d.ts +0 -0
  275. package/dist/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/copy-selection.d.ts +0 -0
  276. package/dist/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/middle-truncate.d.ts +0 -0
  277. package/dist/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/truncate.d.ts +0 -0
  278. package/dist/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/use-middle-truncate.d.ts +0 -0
  279. package/dist/components/{new-trace-viewer → trace-viewer}/components/minimap.d.ts +0 -0
  280. package/dist/components/{new-trace-viewer → trace-viewer}/components/pane-constants.d.ts +0 -0
  281. package/dist/components/{new-trace-viewer → trace-viewer}/components/span-markers.d.ts +0 -0
  282. package/dist/components/{new-trace-viewer → trace-viewer}/components/split-pane.d.ts +0 -0
  283. package/dist/components/{new-trace-viewer → trace-viewer}/components/timeline.d.ts +0 -0
  284. package/dist/components/{new-trace-viewer → trace-viewer}/components/timeline.module.css +0 -0
  285. package/dist/components/{new-trace-viewer → trace-viewer}/components/trace-shortcut-helper.d.ts +0 -0
  286. package/dist/components/{new-trace-viewer → trace-viewer}/components/trace-shortcut-helper.module.css +0 -0
  287. package/dist/components/{new-trace-viewer → trace-viewer}/components/trace-viewer-skeleton.d.ts +0 -0
  288. package/dist/components/{new-trace-viewer → trace-viewer}/components/use-element-width.d.ts +0 -0
  289. package/dist/components/{new-trace-viewer → trace-viewer}/components/use-row-window.d.ts +0 -0
  290. package/dist/components/{new-trace-viewer → trace-viewer}/icons.d.ts +0 -0
  291. package/dist/components/{new-trace-viewer → trace-viewer}/search.d.ts +0 -0
  292. package/dist/components/{new-trace-viewer → trace-viewer}/utils.d.ts +0 -0
  293. package/src/components/{new-trace-viewer → trace-viewer}/components/copy-button.tsx +0 -0
  294. package/src/components/{new-trace-viewer → trace-viewer}/components/detail-panel-width.test.ts +0 -0
  295. package/src/components/{new-trace-viewer → trace-viewer}/components/detail-panel-width.ts +0 -0
  296. package/src/components/{new-trace-viewer → trace-viewer}/components/detail-panel.tsx +0 -0
  297. package/src/components/{new-trace-viewer → trace-viewer}/components/draggable-border.tsx +0 -0
  298. package/src/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/copy-selection.ts +0 -0
  299. package/src/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/middle-truncate.tsx +1 -1
  300. /package/src/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/truncate.ts +0 -0
  301. /package/src/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/use-middle-truncate.ts +0 -0
  302. /package/src/components/{new-trace-viewer → trace-viewer}/components/pane-constants.ts +0 -0
  303. /package/src/components/{new-trace-viewer → trace-viewer}/components/span-markers.tsx +0 -0
  304. /package/src/components/{new-trace-viewer → trace-viewer}/components/split-pane.tsx +0 -0
  305. /package/src/components/{new-trace-viewer → trace-viewer}/components/timeline.module.css +0 -0
  306. /package/src/components/{new-trace-viewer → trace-viewer}/components/trace-shortcut-helper.module.css +0 -0
  307. /package/src/components/{new-trace-viewer → trace-viewer}/components/trace-viewer-skeleton.tsx +0 -0
  308. /package/src/components/{new-trace-viewer → trace-viewer}/components/use-element-width.ts +0 -0
  309. /package/src/components/{new-trace-viewer → trace-viewer}/components/use-row-window.ts +0 -0
  310. /package/src/components/{new-trace-viewer → trace-viewer}/icons.tsx +0 -0
  311. /package/src/components/{new-trace-viewer → trace-viewer}/search.ts +0 -0
  312. /package/src/components/{new-trace-viewer → trace-viewer}/utils.test.ts +0 -0
  313. /package/src/{components/trace-viewer/modules.d.ts → modules.d.ts} +0 -0
@@ -0,0 +1,54 @@
1
+ export interface Span {
2
+ name: string;
3
+ kind: number;
4
+ resource: string;
5
+ library: {
6
+ name: string;
7
+ version?: string;
8
+ };
9
+ spanId: string;
10
+ parentSpanId?: string;
11
+ status: {
12
+ code: number;
13
+ };
14
+ traceFlags: number;
15
+ attributes: Record<string, unknown>;
16
+ links: Record<string, unknown>[];
17
+ events: SpanEvent[];
18
+ startTime: [number, number];
19
+ endTime: [number, number];
20
+ duration: [number, number];
21
+ /**
22
+ * The time when the span became active/started executing (optional).
23
+ * If provided and different from startTime, the portion between startTime
24
+ * and activeStartTime will be rendered as a "queued" period with different styling.
25
+ */
26
+ activeStartTime?: [number, number];
27
+ }
28
+ export interface SpanEvent {
29
+ name: string;
30
+ timestamp: [number, number];
31
+ attributes: Record<string, unknown>;
32
+ /**
33
+ * Optional custom color for this event marker (workflow-specific feature).
34
+ * If provided, this color will be used for the event marker line/diamond.
35
+ */
36
+ color?: string;
37
+ /**
38
+ * Whether to show a vertical line for this event in the timeline (workflow-specific feature).
39
+ * If false, only the diamond marker on the span will be shown.
40
+ * Defaults to true if not specified.
41
+ */
42
+ showVerticalLine?: boolean;
43
+ }
44
+ export interface Resource {
45
+ name: string;
46
+ attributes: Record<string, string>;
47
+ }
48
+ export interface Trace {
49
+ traceId: string;
50
+ resources?: Resource[];
51
+ spans: Span[];
52
+ rootSpanId?: string;
53
+ }
54
+ //# sourceMappingURL=trace-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace-types.d.ts","sourceRoot":"","sources":["../../src/lib/trace-types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IACjC,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1B,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3B;;;;OAIG;IACH,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,KAAK;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2UtdHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL3RyYWNlLXR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIFNwYW4ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGtpbmQ6IG51bWJlcjtcbiAgcmVzb3VyY2U6IHN0cmluZztcbiAgbGlicmFyeToge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB2ZXJzaW9uPzogc3RyaW5nO1xuICB9O1xuICBzcGFuSWQ6IHN0cmluZztcbiAgcGFyZW50U3BhbklkPzogc3RyaW5nO1xuICBzdGF0dXM6IHtcbiAgICBjb2RlOiBudW1iZXI7XG4gIH07XG4gIHRyYWNlRmxhZ3M6IG51bWJlcjtcbiAgYXR0cmlidXRlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGxpbmtzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdO1xuICBldmVudHM6IFNwYW5FdmVudFtdO1xuICBzdGFydFRpbWU6IFtudW1iZXIsIG51bWJlcl07XG4gIGVuZFRpbWU6IFtudW1iZXIsIG51bWJlcl07XG4gIGR1cmF0aW9uOiBbbnVtYmVyLCBudW1iZXJdO1xuICAvKipcbiAgICogVGhlIHRpbWUgd2hlbiB0aGUgc3BhbiBiZWNhbWUgYWN0aXZlL3N0YXJ0ZWQgZXhlY3V0aW5nIChvcHRpb25hbCkuXG4gICAqIElmIHByb3ZpZGVkIGFuZCBkaWZmZXJlbnQgZnJvbSBzdGFydFRpbWUsIHRoZSBwb3J0aW9uIGJldHdlZW4gc3RhcnRUaW1lXG4gICAqIGFuZCBhY3RpdmVTdGFydFRpbWUgd2lsbCBiZSByZW5kZXJlZCBhcyBhIFwicXVldWVkXCIgcGVyaW9kIHdpdGggZGlmZmVyZW50IHN0eWxpbmcuXG4gICAqL1xuICBhY3RpdmVTdGFydFRpbWU/OiBbbnVtYmVyLCBudW1iZXJdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNwYW5FdmVudCB7XG4gIG5hbWU6IHN0cmluZztcbiAgdGltZXN0YW1wOiBbbnVtYmVyLCBudW1iZXJdO1xuICBhdHRyaWJ1dGVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIGN1c3RvbSBjb2xvciBmb3IgdGhpcyBldmVudCBtYXJrZXIgKHdvcmtmbG93LXNwZWNpZmljIGZlYXR1cmUpLlxuICAgKiBJZiBwcm92aWRlZCwgdGhpcyBjb2xvciB3aWxsIGJlIHVzZWQgZm9yIHRoZSBldmVudCBtYXJrZXIgbGluZS9kaWFtb25kLlxuICAgKi9cbiAgY29sb3I/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHNob3cgYSB2ZXJ0aWNhbCBsaW5lIGZvciB0aGlzIGV2ZW50IGluIHRoZSB0aW1lbGluZSAod29ya2Zsb3ctc3BlY2lmaWMgZmVhdHVyZSkuXG4gICAqIElmIGZhbHNlLCBvbmx5IHRoZSBkaWFtb25kIG1hcmtlciBvbiB0aGUgc3BhbiB3aWxsIGJlIHNob3duLlxuICAgKiBEZWZhdWx0cyB0byB0cnVlIGlmIG5vdCBzcGVjaWZpZWQuXG4gICAqL1xuICBzaG93VmVydGljYWxMaW5lPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXNvdXJjZSB7XG4gIG5hbWU6IHN0cmluZztcbiAgYXR0cmlidXRlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUcmFjZSB7XG4gIHRyYWNlSWQ6IHN0cmluZztcbiAgcmVzb3VyY2VzPzogUmVzb3VyY2VbXTtcbiAgc3BhbnM6IFNwYW5bXTtcbiAgcm9vdFNwYW5JZD86IHN0cmluZztcbn1cbiJdfQ==
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@workflow/web-shared",
3
3
  "description": "Shared components for Workflow Observability UI",
4
- "version": "5.0.0-beta.37",
4
+ "version": "5.0.0-beta.39",
5
5
  "private": false,
6
6
  "files": [
7
7
  "dist",
@@ -55,9 +55,9 @@
55
55
  "streamdown": "2.3.0",
56
56
  "tailwind-merge": "3.5.0",
57
57
  "tailwindcss": "4",
58
- "@workflow/utils": "5.0.0-beta.7",
59
- "@workflow/core": "5.0.0-beta.37",
60
- "@workflow/world": "5.0.0-beta.23"
58
+ "@workflow/core": "5.0.0-beta.39",
59
+ "@workflow/utils": "5.0.0-beta.8",
60
+ "@workflow/world": "5.0.0-beta.24"
61
61
  },
62
62
  "devDependencies": {
63
63
  "@biomejs/biome": "^2.4.4",
@@ -67,11 +67,11 @@
67
67
  "ai": "6.0.116",
68
68
  "typescript": "^6.0.3",
69
69
  "vitest": "^4.1.10",
70
- "@workflow/errors": "5.0.0-beta.13",
70
+ "@workflow/errors": "5.0.0-beta.15",
71
71
  "@workflow/tsconfig": "5.0.0-beta.0"
72
72
  },
73
73
  "scripts": {
74
- "build": "tsc && cp -r src/components/trace-viewer/*.css dist/components/trace-viewer/ && cp src/components/new-trace-viewer/components/*.module.css dist/components/new-trace-viewer/components/ && cp src/styles.css dist/styles.css",
74
+ "build": "tsc && cp src/components/trace-viewer/components/*.module.css dist/components/trace-viewer/components/ && cp src/styles.css dist/styles.css",
75
75
  "dev": "tsc --watch",
76
76
  "clean": "tsc --build --clean && rm -r dist ||:",
77
77
  "test": "vitest run",
@@ -639,7 +639,10 @@ function PayloadBlock({
639
639
  : null;
640
640
  if (cancelReason) {
641
641
  return (
642
- <div className="p-2 text-xs" style={{ color: 'var(--ds-gray-1000)' }}>
642
+ <div
643
+ className="p-2 text-label-12"
644
+ style={{ color: 'var(--ds-gray-1000)' }}
645
+ >
643
646
  <span style={{ color: 'var(--ds-gray-900)' }}>Reason: </span>
644
647
  <span className="whitespace-pre-wrap break-words">
645
648
  {cancelReason}
@@ -660,7 +663,7 @@ function PayloadBlock({
660
663
  <button
661
664
  type="button"
662
665
  onClick={handleCopy}
663
- className="absolute bottom-2 right-2 opacity-0 group-hover/payload:opacity-100 transition-opacity flex items-center gap-1 px-2 py-1 rounded-md text-xs hover:bg-[var(--ds-gray-alpha-200)]"
666
+ className="absolute bottom-2 right-2 opacity-0 group-hover/payload:opacity-100 transition-opacity flex items-center gap-1 px-2 py-1 rounded-md text-button-12 hover:bg-[var(--ds-gray-alpha-200)]"
664
667
  style={{ ...BUTTON_RESET_STYLE, color: 'var(--ds-gray-700)' }}
665
668
  aria-label="Copy payload"
666
669
  >
@@ -1028,7 +1031,7 @@ export function EventRow({
1028
1031
  onKeyDown={(e) => {
1029
1032
  if (e.key === 'Enter' || e.key === ' ') handleRowClick();
1030
1033
  }}
1031
- className="w-full text-left flex items-center gap-0 text-[13px] hover:bg-[var(--ds-gray-alpha-100)] transition-colors cursor-pointer"
1034
+ className="w-full text-left flex items-center gap-0 text-label-13 hover:bg-[var(--ds-gray-alpha-100)] transition-colors cursor-pointer"
1032
1035
  style={{ minHeight: 40 }}
1033
1036
  >
1034
1037
  <TreeGutter
@@ -1185,7 +1188,7 @@ export function EventRow({
1185
1188
  {(durationInfo?.queued !== undefined ||
1186
1189
  durationInfo?.ran !== undefined) && (
1187
1190
  <div
1188
- className="px-2 pb-1.5 text-xs flex gap-3"
1191
+ className="px-2 pb-1.5 text-label-12 flex gap-3"
1189
1192
  style={{ color: 'var(--ds-gray-900)' }}
1190
1193
  >
1191
1194
  {durationInfo.queued !== undefined &&
@@ -1213,7 +1216,7 @@ export function EventRow({
1213
1216
  <PayloadBlock data={displayPayload} eventType={event.eventType} />
1214
1217
  ) : loadError ? (
1215
1218
  <div
1216
- className="rounded-md border p-3 text-xs"
1219
+ className="rounded-md border p-3 text-label-12"
1217
1220
  style={{
1218
1221
  borderColor: 'var(--ds-red-400)',
1219
1222
  backgroundColor: 'var(--ds-red-100)',
@@ -1233,7 +1236,7 @@ export function EventRow({
1233
1236
  </div>
1234
1237
  ) : (
1235
1238
  <div
1236
- className="p-2 text-xs"
1239
+ className="p-2 text-label-12"
1237
1240
  style={{ color: 'var(--ds-gray-900)' }}
1238
1241
  >
1239
1242
  No data
@@ -1708,7 +1711,7 @@ function EventListViewInner({
1708
1711
 
1709
1712
  {/* Header */}
1710
1713
  <div
1711
- className="flex items-center gap-0 text-[13px] font-medium h-10 border-b flex-shrink-0"
1714
+ className="flex items-center gap-0 text-label-13 font-medium h-10 border-b flex-shrink-0"
1712
1715
  style={{
1713
1716
  borderColor: 'var(--ds-gray-alpha-200)',
1714
1717
  color: 'var(--ds-gray-900)',
@@ -1748,7 +1751,7 @@ function EventListViewInner({
1748
1751
  />
1749
1752
  ) : sortedEvents.length === 0 ? (
1750
1753
  <div
1751
- className="flex flex-1 items-center justify-center px-6 text-center text-sm"
1754
+ className="flex flex-1 items-center justify-center px-6 text-center text-copy-14"
1752
1755
  style={{ color: 'var(--ds-gray-700)' }}
1753
1756
  >
1754
1757
  {searchNotFound && searchQuery.trim()
@@ -1813,7 +1816,7 @@ function EventListViewInner({
1813
1816
 
1814
1817
  {/* Fixed footer — count + load more */}
1815
1818
  <div
1816
- className="relative flex-shrink-0 flex items-center h-10 border-t px-4 text-xs"
1819
+ className="relative flex-shrink-0 flex items-center h-10 border-t px-4 text-label-12"
1817
1820
  style={{
1818
1821
  borderColor: 'var(--ds-gray-alpha-200)',
1819
1822
  color: 'var(--ds-gray-900)',
@@ -1,3 +1,4 @@
1
+ export type { Span, SpanEvent } from '../lib/trace-types';
1
2
  export { ErrorBoundary } from './error-boundary';
2
3
  export { EventListView } from './event-list-view';
3
4
  export type {
@@ -13,8 +14,6 @@ export {
13
14
  ResolveHookModal,
14
15
  useHookActions,
15
16
  } from './hook-actions';
16
- export { TraceViewerSkeleton } from './new-trace-viewer/components/trace-viewer-skeleton';
17
- export { RunTraceView } from './run-trace-view';
18
17
  export { ConversationView } from './sidebar/conversation-view';
19
18
  export type {
20
19
  SelectedSpanInfo,
@@ -29,8 +28,9 @@ export type {
29
28
  FetchSpanDetail,
30
29
  } from './sidebar/use-selected-span-detail';
31
30
  export { type StreamChunk, StreamViewer } from './stream-viewer';
32
- export type { Span, SpanEvent } from './trace-viewer/types';
33
- export { NewTraceViewer } from './trace-viewer-new';
31
+ export { StreamViewerSkeleton } from './stream-viewer-skeleton';
32
+ export { TraceViewer } from './trace-viewer';
33
+ export { TraceViewerSkeleton } from './trace-viewer/components/trace-viewer-skeleton';
34
34
  export {
35
35
  DataInspector,
36
36
  type DataInspectorProps,
@@ -43,4 +43,3 @@ export { Kbd } from './ui/kbd';
43
43
  export { LoadMoreButton } from './ui/load-more-button';
44
44
  export { MenuDropdown, type MenuDropdownOption } from './ui/menu-dropdown';
45
45
  export { Spinner } from './ui/spinner';
46
- export { WorkflowTraceViewer } from './workflow-trace-view';
@@ -204,7 +204,7 @@ function EncryptedFieldBlock() {
204
204
  function ExpiredFieldBlock() {
205
205
  return (
206
206
  <div
207
- className="flex items-center gap-1.5 rounded-md border px-3 py-2 text-xs"
207
+ className="flex items-center gap-1.5 rounded-md border px-3 py-2 text-label-12"
208
208
  style={{
209
209
  borderColor: 'var(--ds-gray-300)',
210
210
  backgroundColor: 'var(--ds-gray-100)',
@@ -243,7 +243,14 @@ type AttributeKey =
243
243
  | 'lastReceivedAt'
244
244
  | 'disposedAt'
245
245
  | 'isSystem'
246
- | 'errorCode';
246
+ | 'errorCode'
247
+ // Analytics-only provenance (AnalyticsEvent / AnalyticsStep), not on Event.
248
+ | 'computeInstanceId'
249
+ // Analytics-only, and event-grained: only AnalyticsEvent carries it. The key
250
+ // is `vercelId` because that is the name the backend stores the SDK's
251
+ // `requestId` under; AnalyticsEvent's sibling `requestId` column is never
252
+ // written, so reading that one would always be empty.
253
+ | 'vercelId';
247
254
 
248
255
  const attributeOrder: AttributeKey[] = [
249
256
  'workflowName',
@@ -256,12 +263,16 @@ const attributeOrder: AttributeKey[] = [
256
263
  'runId',
257
264
  'attempt',
258
265
  'token',
266
+ 'isWebhook',
267
+ 'isSystem',
259
268
  'receivedCount',
260
269
  'lastReceivedAt',
261
270
  'disposedAt',
262
271
  'correlationId',
263
272
  'eventType',
264
273
  'deploymentId',
274
+ 'vercelId',
275
+ 'computeInstanceId',
265
276
  'specVersion',
266
277
  'workflowCoreVersion',
267
278
  'ownerId',
@@ -275,6 +286,7 @@ const attributeOrder: AttributeKey[] = [
275
286
  'completedAt',
276
287
  'expiredAt',
277
288
  'retryAfter',
289
+ 'errorCode',
278
290
  'error',
279
291
  'metadata',
280
292
  'eventData',
@@ -284,12 +296,19 @@ const attributeOrder: AttributeKey[] = [
284
296
  'resumeAt',
285
297
  ];
286
298
 
287
- const sortByAttributeOrder = (a: string, b: string): number => {
288
- const aIndex = attributeOrder.indexOf(a as AttributeKey) || 0;
289
- const bIndex = attributeOrder.indexOf(b as AttributeKey) || 0;
290
- return aIndex - bIndex;
299
+ /**
300
+ * Rank of an attribute in {@link attributeOrder}. Keys absent from that list
301
+ * sort after every listed one rather than before them — `indexOf` reports a
302
+ * miss as `-1`, which is truthy, so a `|| 0` fallback never fires.
303
+ */
304
+ const attributeOrderIndex = (attribute: string): number => {
305
+ const index = attributeOrder.indexOf(attribute as AttributeKey);
306
+ return index === -1 ? attributeOrder.length : index;
291
307
  };
292
308
 
309
+ const sortByAttributeOrder = (a: string, b: string): number =>
310
+ attributeOrderIndex(a) - attributeOrderIndex(b);
311
+
293
312
  /**
294
313
  * Display names for attributes that should render differently from their key.
295
314
  */
@@ -307,6 +326,8 @@ const attributeDisplayNames: Partial<Record<AttributeKey, string>> = {
307
326
  errorCode: 'Error Code',
308
327
  correlationId: 'Correlation ID',
309
328
  deploymentId: 'Deployment ID',
329
+ vercelId: 'Request ID',
330
+ computeInstanceId: 'Compute Instance ID',
310
331
  specVersion: 'Spec Version',
311
332
  workflowCoreVersion: '@workflow/core version',
312
333
  occurredAt: 'Occurred',
@@ -388,6 +409,14 @@ const timestampWithTooltipOrNull = (value: unknown): ReactNode | null => {
388
409
  );
389
410
  };
390
411
 
412
+ /**
413
+ * Renders an opaque provenance id. The analytics read contract types these as
414
+ * nullable, and only a `null` return is filtered out of the panel, so a bare
415
+ * `String()` would surface the literal text "null" as the value.
416
+ */
417
+ const opaqueIdOrNull = (value: unknown): string | null =>
418
+ hasDisplayContent(value) ? String(value) : null;
419
+
391
420
  interface DisplayContext {
392
421
  stepName?: string;
393
422
  sectionOpen?: boolean;
@@ -419,11 +448,15 @@ const attributeToDisplayFn: Record<
419
448
  disposedAt: localMillisecondTimeOrNull,
420
449
  // Internal resume plumbing — not surfaced in the UI
421
450
  resumeContext: (_value: unknown) => null,
451
+ resumeId: (_value: unknown) => null,
452
+ resumeCapabilities: (_value: unknown) => null,
422
453
  // Event details
423
454
  eventType: (value: unknown) => String(value),
424
455
  correlationId: (value: unknown) => String(value),
425
456
  // Project details
426
457
  deploymentId: (value: unknown) => String(value),
458
+ vercelId: opaqueIdOrNull,
459
+ computeInstanceId: opaqueIdOrNull,
427
460
  specVersion: (value: unknown) => String(value),
428
461
  workflowCoreVersion: (value: unknown) => String(value),
429
462
  // Tenancy (we don't show these)
@@ -668,7 +701,7 @@ const selfHeaderedAttributes = new Set([
668
701
 
669
702
  const ExpiredDataMessage = () => (
670
703
  <div
671
- className="text-copy-12 rounded-md border p-4 my-2"
704
+ className="text-label-12 rounded-md border p-4 my-2"
672
705
  style={{
673
706
  borderColor: 'var(--ds-gray-300)',
674
707
  backgroundColor: 'var(--ds-gray-100)',
@@ -684,6 +717,8 @@ const copyableBasicAttributes = new Set<AttributeKey>([
684
717
  'hookId',
685
718
  'eventId',
686
719
  'deploymentId',
720
+ 'vercelId',
721
+ 'computeInstanceId',
687
722
  'moduleSpecifier',
688
723
  'token',
689
724
  ]);
@@ -776,7 +811,10 @@ export const AttributeBlock = ({
776
811
  <span className="text-label-14 text-gray-1000 font-medium first-letter:uppercase">
777
812
  {attribute}
778
813
  </span>
779
- <span className="text-xs" style={{ color: 'var(--ds-gray-1000)' }}>
814
+ <span
815
+ className="text-label-12"
816
+ style={{ color: 'var(--ds-gray-1000)' }}
817
+ >
780
818
  {displayValue}
781
819
  </span>
782
820
  </div>
@@ -8,8 +8,8 @@ import { cva, type VariantProps } from 'class-variance-authority';
8
8
  import { ArrowUpRight } from 'lucide-react';
9
9
  import type { ReactNode } from 'react';
10
10
  import { cn } from '../../lib/cn';
11
- import { CopyButton } from '../new-trace-viewer/components/copy-button';
12
- import { MiddleTruncate } from '../new-trace-viewer/components/middle-truncate/middle-truncate';
11
+ import { CopyButton } from '../trace-viewer/components/copy-button';
12
+ import { MiddleTruncate } from '../trace-viewer/components/middle-truncate/middle-truncate';
13
13
  import {
14
14
  CollapsibleContent,
15
15
  CollapsibleRoot,
@@ -2,7 +2,7 @@
2
2
 
3
3
  import { Lock } from 'lucide-react';
4
4
  import { useContext } from 'react';
5
- import { CopyButton } from '../new-trace-viewer/components/copy-button';
5
+ import { CopyButton } from '../trace-viewer/components/copy-button';
6
6
  import { Button } from '../ui/button';
7
7
  import { DataInspector, DecryptClickContext } from '../ui/data-inspector';
8
8
  import { Spinner } from '../ui/spinner';
@@ -323,7 +323,7 @@ export function EntityDetailPanel({
323
323
  }}
324
324
  >
325
325
  <p
326
- className="mb-2 px-1 text-[13px] font-medium uppercase tracking-wide"
326
+ className="mb-2 px-1 text-label-13 font-medium uppercase tracking-wide"
327
327
  style={{ color: 'var(--ds-gray-700)' }}
328
328
  >
329
329
  Actions
@@ -336,7 +336,7 @@ export function EntityDetailPanel({
336
336
  onClick={handleWakeUp}
337
337
  disabled={stoppingSleep}
338
338
  className={clsx(
339
- 'flex items-center justify-center gap-2 rounded-md px-3 py-2 text-sm font-medium',
339
+ 'flex items-center justify-center gap-2 rounded-md px-3 py-2 text-button-14',
340
340
  'disabled:opacity-50 disabled:cursor-not-allowed transition-colors',
341
341
  stoppingSleep
342
342
  ? 'opacity-50 cursor-not-allowed'
@@ -359,7 +359,7 @@ export function EntityDetailPanel({
359
359
  onClick={() => setShowResolveHookModal(true)}
360
360
  disabled={resolvingHook}
361
361
  className={clsx(
362
- 'flex items-center justify-center gap-2 rounded-md px-3 py-2 text-sm font-medium',
362
+ 'flex items-center justify-center gap-2 rounded-md px-3 py-2 text-button-14',
363
363
  'disabled:opacity-50 disabled:cursor-not-allowed transition-colors',
364
364
  resolvingHook
365
365
  ? 'opacity-50 cursor-not-allowed'
@@ -238,7 +238,7 @@ function EventDataBlock({
238
238
  if (isExpiredMarker(data) || hasOnlyExpiredFields(data, eventType)) {
239
239
  return (
240
240
  <div
241
- className="flex items-center gap-1.5 rounded-md border px-3 py-2 text-xs"
241
+ className="flex items-center gap-1.5 rounded-md border px-3 py-2 text-label-12"
242
242
  style={{
243
243
  borderColor: 'var(--ds-gray-300)',
244
244
  backgroundColor: 'var(--ds-gray-100)',
@@ -0,0 +1,34 @@
1
+ import { Skeleton } from './ui/skeleton';
2
+
3
+ const STREAM_SKELETON_ROWS = [
4
+ { id: 'stream-skeleton-row-1', width: '72%' },
5
+ { id: 'stream-skeleton-row-2', width: '58%' },
6
+ { id: 'stream-skeleton-row-3', width: '80%' },
7
+ { id: 'stream-skeleton-row-4', width: '64%' },
8
+ ];
9
+
10
+ export function StreamViewerSkeleton() {
11
+ return (
12
+ <output
13
+ aria-busy="true"
14
+ aria-label="Loading stream"
15
+ className="flex h-full min-h-0 w-full flex-col overflow-hidden bg-background-100"
16
+ >
17
+ <span className="sr-only">Loading stream…</span>
18
+ <div className="flex h-10 min-h-10 items-center border-b border-gray-alpha-400 px-3">
19
+ <Skeleton className="h-3 w-10" />
20
+ </div>
21
+ <div className="flex flex-col">
22
+ {STREAM_SKELETON_ROWS.map((row) => (
23
+ <div
24
+ key={row.id}
25
+ className="flex h-10 items-center gap-2 border-b border-gray-alpha-400 px-3"
26
+ >
27
+ <Skeleton className="h-3" style={{ width: row.width }} />
28
+ <Skeleton className="h-4 w-4 shrink-0 rounded-sm" />
29
+ </div>
30
+ ))}
31
+ </div>
32
+ </output>
33
+ );
34
+ }
@@ -2,8 +2,10 @@
2
2
 
3
3
  import React, { useEffect, useRef } from 'react';
4
4
  import { Virtuoso, type VirtuosoHandle } from 'react-virtuoso';
5
+ import { serializeForClipboard } from './sidebar/copyable-data-block';
6
+ import { StreamViewerSkeleton } from './stream-viewer-skeleton';
7
+ import { CopyButton } from './trace-viewer/components/copy-button';
5
8
  import { DataInspector } from './ui/data-inspector';
6
- import { Skeleton } from './ui/skeleton';
7
9
 
8
10
  // ──────────────────────────────────────────────────────────────────────────
9
11
  // Types
@@ -23,7 +25,7 @@ interface StreamViewerProps {
23
25
  error?: string | null;
24
26
  /** True while the initial stream connection is being established */
25
27
  isLoading?: boolean;
26
- /** Called when the user scrolls near the bottom, for triggering pagination */
28
+ /** Called when the user scrolls near the rendered end. */
27
29
  onScrollEnd?: () => void;
28
30
  }
29
31
 
@@ -31,60 +33,27 @@ interface StreamViewerProps {
31
33
  // Chunk row — memoized to prevent remounts during polling
32
34
  // ──────────────────────────────────────────────────────────────────────────
33
35
 
34
- const ChunkRow = React.memo(function ChunkRow({
35
- chunk,
36
- index,
37
- }: {
38
- chunk: Chunk;
39
- index: number;
40
- }) {
36
+ const ChunkRow = React.memo(function ChunkRow({ chunk }: { chunk: Chunk }) {
41
37
  return (
42
- <div
43
- className="text-[11px] rounded-md border p-3"
44
- style={{
45
- borderColor: 'var(--ds-gray-300)',
46
- backgroundColor: 'var(--ds-gray-100)',
47
- }}
48
- >
49
- <div className="flex items-start gap-2">
50
- <span
51
- className="select-none pt-px"
52
- style={{ color: 'var(--ds-gray-500)' }}
53
- >
54
- [{index}]
55
- </span>
56
- <div className="min-w-0 flex-1">
57
- {typeof chunk.value === 'string' ? (
58
- <span
59
- className="whitespace-pre-wrap break-words"
60
- style={{ color: 'var(--ds-gray-1000)' }}
61
- >
62
- {chunk.value}
63
- </span>
64
- ) : (
65
- <DataInspector data={chunk.value} expandLevel={1} />
66
- )}
67
- </div>
38
+ <div className="flex w-full items-start gap-1 border-b border-gray-alpha-400 px-3 py-2">
39
+ <div className="min-w-0 flex-1">
40
+ {typeof chunk.value === 'string' ? (
41
+ <span className="whitespace-pre-wrap break-words text-label-12 font-mono text-gray-1000">
42
+ {chunk.value}
43
+ </span>
44
+ ) : (
45
+ <DataInspector data={chunk.value} expandLevel={1} />
46
+ )}
68
47
  </div>
48
+ <CopyButton
49
+ copyText={serializeForClipboard(chunk.value)}
50
+ ariaLabel="Copy chunk"
51
+ className="shrink-0 -mr-1 [&>div]:h-4 [&>div]:w-4 [&_svg]:h-4 [&_svg]:w-4"
52
+ />
69
53
  </div>
70
54
  );
71
55
  });
72
56
 
73
- // ──────────────────────────────────────────────────────────────────────────
74
- // Skeleton loading
75
- // ──────────────────────────────────────────────────────────────────────────
76
-
77
- function StreamSkeleton() {
78
- return (
79
- <div className="flex flex-col gap-3 animate-in fade-in">
80
- <Skeleton style={{ width: 120, height: 16, borderRadius: 4 }} />
81
- {[1, 2, 3, 4].map((i) => (
82
- <Skeleton key={i} style={{ height: 56, borderRadius: 6 }} />
83
- ))}
84
- </div>
85
- );
86
- }
87
-
88
57
  // ──────────────────────────────────────────────────────────────────────────
89
58
  // Main component
90
59
  // ──────────────────────────────────────────────────────────────────────────
@@ -105,7 +74,6 @@ export function StreamViewer({
105
74
  const virtuosoRef = useRef<VirtuosoHandle>(null);
106
75
  const prevChunkCountRef = useRef(0);
107
76
 
108
- // Auto-scroll to bottom when new chunks arrive (live streaming)
109
77
  useEffect(() => {
110
78
  if (chunks.length > prevChunkCountRef.current && chunks.length > 0) {
111
79
  virtuosoRef.current?.scrollToIndex({
@@ -116,71 +84,31 @@ export function StreamViewer({
116
84
  prevChunkCountRef.current = chunks.length;
117
85
  }, [chunks.length]);
118
86
 
119
- // Show skeleton when loading and no chunks have arrived yet
120
87
  if (isLoading && chunks.length === 0) {
121
- return (
122
- <div className="flex flex-col h-full">
123
- <StreamSkeleton />
124
- </div>
125
- );
88
+ return <StreamViewerSkeleton />;
126
89
  }
127
90
 
128
91
  return (
129
- <div className="flex flex-col h-full">
130
- {/* Live indicator */}
131
- {isLive && (
132
- <div className="flex items-center gap-1.5 mb-2 px-1">
133
- <span
134
- className="inline-block w-2 h-2 rounded-full"
135
- style={{ backgroundColor: 'var(--ds-green-600)' }}
136
- />
137
- <span className="text-xs" style={{ color: 'var(--ds-green-700)' }}>
138
- Live
139
- </span>
140
- </div>
141
- )}
142
-
143
- {/* Header */}
144
- {chunks.length > 0 && (
145
- <div className="flex items-center gap-2 mb-2 px-1">
146
- <span
147
- className="text-[13px] font-medium"
148
- style={{ color: 'var(--ds-gray-900)' }}
149
- >
150
- Stream Chunks
151
- </span>
152
- <span
153
- className="text-xs tabular-nums"
154
- style={{ color: 'var(--ds-gray-600)' }}
155
- >
156
- ({chunks.length})
157
- </span>
158
- </div>
159
- )}
92
+ <div className="flex h-full w-full flex-col overflow-hidden bg-background-100">
93
+ {/* Status header */}
94
+ <div className="flex h-10 min-h-10 items-center gap-1.5 border-b border-gray-alpha-400 px-3">
95
+ {isLive && (
96
+ <>
97
+ <span className="inline-block h-2 w-2 rounded-full bg-green-600" />
98
+ <span className="text-label-12 text-green-700">Live</span>
99
+ </>
100
+ )}
101
+ </div>
160
102
 
161
103
  {/* Content */}
162
104
  <div className="flex-1 min-h-0">
163
105
  {error ? (
164
- <div
165
- className="text-[11px] rounded-md border p-3"
166
- style={{
167
- borderColor: 'var(--ds-red-300)',
168
- backgroundColor: 'var(--ds-red-100)',
169
- color: 'var(--ds-red-700)',
170
- }}
171
- >
106
+ <div className="border-b border-red-400 bg-red-100 px-3 py-2 text-label-12 text-red-900">
172
107
  <div>Error reading stream:</div>
173
108
  <div>{error}</div>
174
109
  </div>
175
110
  ) : chunks.length === 0 ? (
176
- <div
177
- className="text-[11px] rounded-md border p-3"
178
- style={{
179
- borderColor: 'var(--ds-gray-300)',
180
- backgroundColor: 'var(--ds-gray-100)',
181
- color: 'var(--ds-gray-600)',
182
- }}
183
- >
111
+ <div className="flex h-10 items-center border-b border-gray-alpha-400 bg-background-200 px-3 text-label-12 text-gray-900">
184
112
  {isLive ? 'Waiting for stream data...' : 'Stream is empty'}
185
113
  </div>
186
114
  ) : (
@@ -190,8 +118,8 @@ export function StreamViewer({
190
118
  overscan={10}
191
119
  endReached={() => onScrollEnd?.()}
192
120
  itemContent={(index) => (
193
- <div style={{ paddingBottom: 8 }}>
194
- <ChunkRow chunk={chunks[index]} index={index} />
121
+ <div className="w-full">
122
+ <ChunkRow chunk={chunks[index]} />
195
123
  </div>
196
124
  )}
197
125
  style={{ flex: 1, minHeight: 0 }}