@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
@@ -1,655 +0,0 @@
1
- 'use client';
2
-
3
- import { clsx } from 'clsx';
4
- import type { PointerEventHandler, ReactNode } from 'react';
5
- import {
6
- Fragment,
7
- memo,
8
- useCallback,
9
- useEffect,
10
- useMemo,
11
- useRef,
12
- useState,
13
- } from 'react';
14
- import {
15
- initialState,
16
- useCustomPanelComponent,
17
- useTraceViewer,
18
- } from '../context';
19
- import styles from '../trace-viewer.module.css';
20
- import type {
21
- GetQuickLinks,
22
- QuickLinkValue,
23
- RootNode,
24
- Span,
25
- SpanNode,
26
- TraceNode,
27
- } from '../types';
28
- import { formatDuration } from '../util/timing';
29
- import { getSpanColorClassName } from './node';
30
- import {
31
- ButtonLink,
32
- IconChevronDown,
33
- IconCross,
34
- IconExternalSmall,
35
- Link,
36
- Note,
37
- Skeleton,
38
- } from './ui';
39
-
40
- const percentage = (n: number): string => `${(100 * n).toFixed(3)}%`;
41
-
42
- interface GroupedAttribute {
43
- prefix: string;
44
- attributes: Attribute[];
45
- }
46
-
47
- interface Attribute {
48
- suffix: string;
49
- key: string;
50
- value: string;
51
- }
52
-
53
- const sortWord = (a: string, b: string): number => {
54
- if (a < b) {
55
- return -1;
56
- } else if (a > b) {
57
- return 1;
58
- }
59
- return 0;
60
- };
61
-
62
- const getGroupedAttributes = (
63
- attributes: Span['attributes']
64
- ): GroupedAttribute[] => {
65
- // Build groups of items with the same prefix
66
- const groups: Record<string, GroupedAttribute> = {};
67
- for (const [key, value] of Object.entries(attributes)) {
68
- const dotIndex = key.indexOf('.');
69
- let prefix = '';
70
- let suffix = '';
71
- if (dotIndex !== -1) {
72
- prefix = key.substring(0, dotIndex);
73
- suffix = key.substring(dotIndex + 1);
74
- } else {
75
- suffix = key;
76
- }
77
-
78
- let group = groups[prefix];
79
- if (!group) {
80
- group = {
81
- prefix,
82
- attributes: [],
83
- };
84
- groups[prefix] = group;
85
- }
86
- group.attributes.push({
87
- key,
88
- suffix,
89
- value: String(value),
90
- });
91
- }
92
-
93
- // List and sort everything
94
- const result = Array.from(Object.values(groups)).sort((a, b) =>
95
- sortWord(a.prefix, b.prefix)
96
- );
97
- for (const group of result) {
98
- group.attributes.sort((a, b) => sortWord(a.suffix, b.suffix));
99
- }
100
- return result;
101
- };
102
-
103
- // biome-ignore lint/correctness/noUnusedFunctionParameters: ignored using `--suppress`
104
- const getAncestors = (_root: RootNode, start: SpanNode | null): SpanNode[] => {
105
- const result: SpanNode[] = [];
106
-
107
- if (!start) return result;
108
-
109
- for (let node: TraceNode = start; 'parent' in node; node = node.parent) {
110
- result.unshift(node);
111
- }
112
-
113
- return result;
114
- };
115
-
116
- export const SpanDetailPanelBody = () => {
117
- const {
118
- state: { root, selected, resourceMap, getQuickLinks },
119
- dispatch,
120
- } = useTraceViewer();
121
-
122
- const ancestors = useMemo(
123
- () => getAncestors(root, selected),
124
- [root, selected]
125
- );
126
-
127
- const attributeGroups = useMemo(
128
- () => getGroupedAttributes(selected?.span.attributes ?? {}),
129
- [selected]
130
- );
131
-
132
- const resourceAttributeGroups = useMemo(() => {
133
- const resourceName = selected?.span.resource;
134
- if (!resourceName) return [];
135
- const resourceAttributes = resourceMap[resourceName];
136
- if (!resourceAttributes) return [];
137
- return getGroupedAttributes(resourceAttributes);
138
- }, [resourceMap, selected]);
139
-
140
- if (!selected) return null;
141
-
142
- const { span } = selected;
143
-
144
- const isEntrySpan = detectIsEntrySpan(selected);
145
-
146
- return (
147
- <>
148
- {selected.isVercel ? <InfraSpanDescription node={selected} /> : null}
149
- {selected.isInstrumentationHint ? <InstrumentationHint /> : null}
150
- {!selected.isInstrumentationHint && ancestors.length ? (
151
- <DetailGroup className={styles.ancestorGroup} name="Location">
152
- {ancestors.map((node) => (
153
- <button
154
- className={styles.ancestorNode}
155
- key={`${selected.span.spanId}.${node.span.spanId}`}
156
- onClick={() =>
157
- dispatch({
158
- type: 'select',
159
- id: node.span.spanId,
160
- })
161
- }
162
- type="button"
163
- >
164
- <div className={styles.ancestorText}>
165
- <span className={styles.ancestorName}>
166
- {node.label || node.span.name}
167
- </span>
168
- <span className={styles.ancestorDuration}>
169
- {formatDuration(node.duration)}
170
- </span>
171
- </div>
172
- <span aria-hidden className={styles.ancestorLineContainer}>
173
- <span
174
- className={clsx(
175
- styles.ancestorLine,
176
- getSpanColorClassName(node)
177
- )}
178
- style={{
179
- left: percentage(
180
- (node.startTime - root.startTime) / root.duration
181
- ),
182
- width: percentage(node.duration / root.duration),
183
- }}
184
- />
185
- </span>
186
- </button>
187
- ))}
188
- </DetailGroup>
189
- ) : null}
190
- {isEntrySpan ? (
191
- <EntrySpanLinks getQuickLinks={getQuickLinks} span={selected.span} />
192
- ) : null}
193
- {selected.events?.length ? (
194
- <DetailGroup name="Events">
195
- {selected.events.map((event) => (
196
- <Fragment key={event.key}>
197
- <dl className={styles.spanDetailPanelAttribute}>
198
- <dt className={styles.spanDetailPanelAttributeKey}>
199
- {event.event.name}
200
- </dt>
201
- <dd className={styles.spanDetailPanelAttributeValue}>
202
- {formatDuration(event.timestamp - root.startTime)}
203
- </dd>
204
- </dl>
205
- {Object.entries(event.event.attributes).map(([key, value]) => (
206
- <DetailLine
207
- key={key}
208
- name={`${event.event.name}.${key}`}
209
- value={value}
210
- />
211
- ))}
212
- </Fragment>
213
- ))}
214
- </DetailGroup>
215
- ) : null}
216
- {attributeGroups.length ? (
217
- <DetailGroup name="Attributes">
218
- {attributeGroups.map((group) => (
219
- <Fragment key={group.prefix}>
220
- {group.attributes.map(({ key, value }) => (
221
- <DetailLine key={key} name={key} value={value} />
222
- ))}
223
- </Fragment>
224
- ))}
225
- </DetailGroup>
226
- ) : null}
227
- {resourceAttributeGroups.length ? (
228
- <DetailGroup name="Resource">
229
- {resourceAttributeGroups.map((group) => (
230
- <Fragment key={group.prefix}>
231
- {group.attributes.map(({ key, value }) => (
232
- <DetailLine key={key} name={key} value={value} />
233
- ))}
234
- </Fragment>
235
- ))}
236
- </DetailGroup>
237
- ) : null}
238
- {selected.isInstrumentationHint ? null : (
239
- <DetailGroup name="Library">
240
- <DetailLine name="name" value={span.library.name} />
241
- {span.library.version ? (
242
- <DetailLine name="version" value={span.library.version} />
243
- ) : null}
244
- </DetailGroup>
245
- )}
246
- </>
247
- );
248
- };
249
-
250
- export function SpanDetailPanel({
251
- attached = false,
252
- }: {
253
- attached?: boolean;
254
- }): ReactNode {
255
- const {
256
- state: { selected, isMobile },
257
- dispatch,
258
- } = useTraceViewer();
259
- const customPanelComponent = useCustomPanelComponent();
260
-
261
- if (!selected) return null;
262
-
263
- const { span } = selected;
264
-
265
- return (
266
- <div className={clsx(styles.spanDetailPanel, isMobile && styles.mobile)}>
267
- {attached && !isMobile ? <PanelResizer /> : null}
268
- <div className={styles.spanDetailPanelTop}>
269
- <div className={styles.spanDetailPanelTopInfo}>
270
- {/* Name/ID first */}
271
- <span className={styles.spanDetailPanelName} title={span.name}>
272
- {span.name}
273
- </span>
274
- {/* Right side: duration badge, separator, close */}
275
- <div className={styles.spanDetailPanelCorner}>
276
- {selected.isInstrumentationHint ? null : (
277
- <span className={styles.spanDetailPanelDuration}>
278
- {formatDuration(selected.duration)}
279
- </span>
280
- )}
281
- <div className={styles.spanDetailPanelCloseVerticalRule} />
282
- <button
283
- aria-label="Close Span Details"
284
- className={styles.spanDetailPanelClose}
285
- onClick={() =>
286
- dispatch({
287
- type: 'deselect',
288
- })
289
- }
290
- type="button"
291
- >
292
- <IconCross color="gray-700" size={20} />
293
- </button>
294
- </div>
295
- </div>
296
- </div>
297
- <div className={clsx('flex gap-3', styles.spanDetailPanelBody)}>
298
- {customPanelComponent || <SpanDetailPanelBody />}
299
- </div>
300
- </div>
301
- );
302
- }
303
-
304
- const EXPANDED_STORAGE_KEY_PREFIX = 'vc-trace-span-exp:';
305
-
306
- function DetailGroup({
307
- name,
308
- className = '',
309
- children,
310
- }: {
311
- name: string;
312
- className?: string;
313
- children: ReactNode;
314
- }): ReactNode {
315
- const [isExpanded, setIsExpanded] = useState(() => {
316
- if (!('localStorage' in globalThis)) return true;
317
- return (
318
- localStorage.getItem(`${EXPANDED_STORAGE_KEY_PREFIX}${name}`) !== '0'
319
- );
320
- });
321
-
322
- const toggleExpanded = useCallback(() => {
323
- setIsExpanded((x) => {
324
- const willBeExpanded = !x;
325
- localStorage.setItem(
326
- `${EXPANDED_STORAGE_KEY_PREFIX}${name}`,
327
- String(Number(willBeExpanded))
328
- );
329
- return willBeExpanded;
330
- });
331
- }, [name]);
332
-
333
- return (
334
- <div
335
- className={clsx(
336
- styles.detailGroup,
337
- isExpanded ? styles.expanded : styles.collapsed,
338
- className
339
- )}
340
- >
341
- <button
342
- className={styles.detailHeading}
343
- onClick={toggleExpanded}
344
- type="button"
345
- >
346
- <span>{name}</span>
347
- <IconChevronDown />
348
- </button>
349
- {isExpanded ? children : null}
350
- </div>
351
- );
352
- }
353
-
354
- const CommonHttpVerbs = new Set([
355
- 'OPTIONS',
356
- 'HEAD',
357
- 'GET',
358
- 'PUT',
359
- 'POST',
360
- 'DELETE',
361
- ]);
362
- const KnownSpans: Record<string, string> = {
363
- 'Resolve Deployment': `How long it took Vercel's routing layer to retrieve details for the deployment.`,
364
- 'Resolve Cache': `How long it took Vercel's routing layer to check for a cached function invocation.`,
365
- 'Resolve Route': `How long it took Vercel's routing layer to resolve routing rules, including redirects and rewrites.`,
366
- 'Invoke Middleware': `How long it took this middleware to start and run user code.`,
367
- 'Invoke Function': `How long it took this Vercel Function to start and run user code.`,
368
- waitUntil: `How long it took to run user code inside of waitUntil.`,
369
- 'Start VM': `How long it took to start the Virtual Machine which contains the Vercel Function.`,
370
- 'Spawn Node.js': `How long it took the Virtual Machine to start the Node.js runtime.`,
371
- 'Spawn Python': `How long it took the Virtual Machine to start the Python runtime.`,
372
- 'Init User Code': `How long it took to import the user code and run any globally-scoped code.`,
373
- };
374
-
375
- const ColdStartSpanNames = new Set([
376
- 'Start VM',
377
- 'Spawn Node.js',
378
- 'Spawn Python',
379
- 'Init User Code',
380
- ]);
381
-
382
- const getRegion = (
383
- node: SpanNode | RootNode | null | undefined
384
- ): string | null => {
385
- if (!node || !('span' in node)) {
386
- return null;
387
- }
388
-
389
- const attr = node.span.attributes;
390
- const region = attr['vercel.region'] || attr['vercel.function.region'];
391
- if (region) return String(region);
392
- return null;
393
- };
394
-
395
- const getNote = (node: SpanNode): ReactNode => {
396
- const { name } = node.span;
397
- const region = getRegion(node);
398
- const parentRegion = getRegion(node.parent);
399
-
400
- if (node.span.attributes['vercel.middleware.internal'] === 'true') {
401
- return 'The Vercel Toolbar created this middleware.';
402
- } else if (
403
- ColdStartSpanNames.has(name) ||
404
- (name === 'Invoke Function' &&
405
- node.children.some((x) => ColdStartSpanNames.has(x.span.name)))
406
- ) {
407
- return 'This function encountered a cold start.';
408
- } else if (region && parentRegion && region !== parentRegion) {
409
- return 'This request was routed across regions.';
410
- }
411
-
412
- return null;
413
- };
414
-
415
- const detectIsEntrySpan = (node: SpanNode): boolean => {
416
- if (!node.isVercel) return false;
417
- const { name } = node.span;
418
- const spaceIndex = name.indexOf(' ');
419
- if (spaceIndex === -1) return false;
420
- const firstWord = name.substring(0, spaceIndex);
421
- return CommonHttpVerbs.has(firstWord);
422
- };
423
-
424
- function InfraSpanDescription({ node }: { node: SpanNode }): ReactNode {
425
- const { name } = node.span;
426
- let description = KnownSpans[name];
427
-
428
- if (!description && detectIsEntrySpan(node)) {
429
- description = `How long it took for Vercel to process the request and send the response.`;
430
- }
431
-
432
- if (!description) return null;
433
-
434
- const note = getNote(node);
435
-
436
- return (
437
- <DetailGroup name="What is this?">
438
- <div className={styles.infraSpanDescription}>
439
- <span>{description}</span>
440
- {note ? <Note>{note}</Note> : note}
441
- </div>
442
- </DetailGroup>
443
- );
444
- }
445
-
446
- const EntrySpanLinks = memo(function EntrySpanLinks({
447
- getQuickLinks,
448
- span,
449
- }: {
450
- getQuickLinks: GetQuickLinks;
451
- span: Span;
452
- }): ReactNode {
453
- const links = getQuickLinks(span);
454
-
455
- if (!links.length) return null;
456
-
457
- return (
458
- <DetailGroup name="Links">
459
- {links.map(({ key, value }) => (
460
- <EntrySpanLink key={key} link={value} name={key} />
461
- ))}
462
- </DetailGroup>
463
- );
464
- });
465
-
466
- interface ResolvablePromise<T> extends Promise<T> {
467
- __resolvedValue?: T;
468
- __rejectedValue?: unknown;
469
- }
470
-
471
- function usePromise<T>(promise: ResolvablePromise<T>): T | undefined {
472
- const [_, setLatest] = useState({});
473
- const fulfilled =
474
- promise.__resolvedValue !== undefined ||
475
- promise.__rejectedValue !== undefined;
476
- useEffect(() => {
477
- if (fulfilled) return;
478
-
479
- promise
480
- .then((value) => {
481
- promise.__resolvedValue = value;
482
- })
483
- .catch((err) => {
484
- promise.__rejectedValue = err;
485
- })
486
- .finally(() => setLatest({}));
487
- }, [promise, fulfilled]);
488
-
489
- return promise.__resolvedValue;
490
- }
491
-
492
- function EntrySpanLink({
493
- name,
494
- link: linkPromise,
495
- }: {
496
- name: string;
497
- link: Promise<QuickLinkValue>;
498
- }): ReactNode {
499
- const link = usePromise(linkPromise);
500
-
501
- return (
502
- <Link
503
- as={link ? undefined : 'span'}
504
- className={clsx(
505
- styles.spanDetailPanelAttribute,
506
- styles.spanDetailPanelQuickLink
507
- )}
508
- href={link?.href || ''}
509
- >
510
- <span className={styles.spanDetailPanelAttributeKey}>{name}</span>
511
- <span
512
- className={clsx(
513
- styles.spanDetailPanelAttributeValue,
514
- styles.spanDetailPanelQuickLinkLabel
515
- )}
516
- >
517
- {link ? (
518
- <>
519
- {link.label}
520
- {link.icon || <IconExternalSmall color="gray-900" />}
521
- </>
522
- ) : (
523
- <>
524
- <Skeleton height={18} width={32 + name.length * 8} />
525
- <Skeleton height={18} rounded width={18} />
526
- </>
527
- )}
528
- </span>
529
- </Link>
530
- );
531
- }
532
-
533
- function InstrumentationHint(): ReactNode {
534
- return (
535
- <DetailGroup name="What is this?">
536
- <div className={styles.infraSpanDescription}>
537
- <span>{`You can visualize your application's spans alongside Vercel's spans in this viewer.`}</span>
538
- <ButtonLink
539
- href="https://vercel.com/docs/session-tracing#adding-custom-spans"
540
- size="small"
541
- target="_blank"
542
- >
543
- Get Started
544
- </ButtonLink>
545
- </div>
546
- </DetailGroup>
547
- );
548
- }
549
-
550
- function DetailLine({
551
- name,
552
- value,
553
- }: {
554
- name: string;
555
- value: unknown;
556
- }): ReactNode {
557
- return (
558
- <dl className={styles.spanDetailPanelAttribute}>
559
- <dt className={styles.spanDetailPanelAttributeKey}>{name}</dt>
560
- <dd
561
- className={styles.spanDetailPanelAttributeValue}
562
- title={String(value)}
563
- >
564
- {String(value)}
565
- </dd>
566
- </dl>
567
- );
568
- }
569
-
570
- interface ResizeGestureRef {
571
- start: {
572
- x: number;
573
- width: number;
574
- };
575
- x: number;
576
- width: number;
577
- isHeld: boolean;
578
- }
579
-
580
- /**
581
- * Resizer component for the trace viewer panel.
582
- */
583
- export function PanelResizer(): ReactNode {
584
- const {
585
- state: { panelWidth },
586
- dispatch,
587
- } = useTraceViewer();
588
- const gestureRef = useRef<ResizeGestureRef>({
589
- start: {
590
- x: 0,
591
- width: panelWidth,
592
- },
593
- x: 0,
594
- width: panelWidth,
595
- isHeld: false,
596
- });
597
- gestureRef.current.width = panelWidth;
598
-
599
- const onPointerDown = useCallback<PointerEventHandler>((event) => {
600
- if (event.pointerType !== 'mouse') return;
601
- event.preventDefault();
602
- const g = gestureRef.current;
603
- g.start.x = event.clientX;
604
- g.x = event.clientX;
605
- g.start.width = g.width;
606
- g.isHeld = true;
607
- }, []);
608
-
609
- const onDoubleClick = useCallback(() => {
610
- dispatch({
611
- type: 'setPanelWidth',
612
- width: initialState.panelWidth,
613
- });
614
- }, [dispatch]);
615
-
616
- useEffect(() => {
617
- let nextFrame = 0;
618
- const onFrame = (): void => {
619
- const g = gestureRef.current;
620
- const width = g.start.width + g.start.x - g.x;
621
- dispatch({
622
- type: 'setPanelWidth',
623
- width,
624
- });
625
- };
626
-
627
- const onPointerMove = (event: PointerEvent): void => {
628
- if (!gestureRef.current.isHeld) return;
629
- event.preventDefault();
630
- gestureRef.current.x = event.clientX;
631
- cancelAnimationFrame(nextFrame);
632
- nextFrame = requestAnimationFrame(onFrame);
633
- };
634
- const onPointerUp = (): void => {
635
- gestureRef.current.isHeld = false;
636
- };
637
-
638
- window.addEventListener('pointermove', onPointerMove);
639
- window.addEventListener('pointerup', onPointerUp);
640
-
641
- return () => {
642
- window.removeEventListener('pointermove', onPointerMove);
643
- window.removeEventListener('pointerup', onPointerUp);
644
- };
645
- }, [dispatch]);
646
-
647
- return (
648
- <div
649
- aria-hidden
650
- className={styles.spanDetailPanelResizer}
651
- onDoubleClick={onDoubleClick}
652
- onPointerDown={onPointerDown}
653
- />
654
- );
655
- }