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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (307) hide show
  1. package/README.md +3 -3
  2. package/dist/components/event-list-view.d.ts.map +1 -1
  3. package/dist/components/event-list-view.js +10 -10
  4. package/dist/components/index.d.ts +3 -5
  5. package/dist/components/index.d.ts.map +1 -1
  6. package/dist/components/index.js +3 -5
  7. package/dist/components/sidebar/attribute-panel.d.ts.map +1 -1
  8. package/dist/components/sidebar/attribute-panel.js +32 -8
  9. package/dist/components/sidebar/attributes-block.js +3 -3
  10. package/dist/components/sidebar/copyable-data-block.js +2 -2
  11. package/dist/components/sidebar/entity-detail-panel.js +3 -3
  12. package/dist/components/sidebar/events-list.js +2 -2
  13. package/dist/components/stream-viewer.js +2 -2
  14. package/dist/components/trace-viewer/components/copy-button.d.ts.map +1 -0
  15. package/dist/components/trace-viewer/components/copy-button.js +27 -0
  16. package/dist/components/trace-viewer/components/detail-panel-width.d.ts.map +1 -0
  17. package/dist/components/trace-viewer/components/detail-panel-width.js +67 -0
  18. package/dist/components/trace-viewer/components/detail-panel.d.ts.map +1 -0
  19. package/dist/components/trace-viewer/components/detail-panel.js +122 -0
  20. package/dist/components/trace-viewer/components/draggable-border.d.ts.map +1 -0
  21. package/dist/components/trace-viewer/components/draggable-border.js +140 -0
  22. package/dist/components/trace-viewer/components/event-list.d.ts.map +1 -0
  23. package/dist/components/trace-viewer/components/event-list.js +47 -0
  24. package/dist/components/trace-viewer/components/middle-truncate/copy-selection.d.ts.map +1 -0
  25. package/dist/components/trace-viewer/components/middle-truncate/copy-selection.js +54 -0
  26. package/dist/components/trace-viewer/components/middle-truncate/middle-truncate.d.ts.map +1 -0
  27. package/dist/components/trace-viewer/components/middle-truncate/middle-truncate.js +81 -0
  28. package/dist/components/trace-viewer/components/middle-truncate/truncate.d.ts.map +1 -0
  29. package/dist/components/trace-viewer/components/middle-truncate/truncate.js +101 -0
  30. package/dist/components/trace-viewer/components/middle-truncate/use-middle-truncate.d.ts.map +1 -0
  31. package/dist/components/trace-viewer/components/middle-truncate/use-middle-truncate.js +114 -0
  32. package/dist/components/trace-viewer/components/minimap.d.ts.map +1 -0
  33. package/dist/components/trace-viewer/components/minimap.js +337 -0
  34. package/dist/components/trace-viewer/components/pane-constants.d.ts.map +1 -0
  35. package/dist/components/trace-viewer/components/pane-constants.js +16 -0
  36. package/dist/components/trace-viewer/components/span-markers.d.ts.map +1 -0
  37. package/dist/components/trace-viewer/components/span-markers.js +85 -0
  38. package/dist/components/trace-viewer/components/split-pane.d.ts.map +1 -0
  39. package/dist/components/trace-viewer/components/split-pane.js +41 -0
  40. package/dist/components/trace-viewer/components/timeline.d.ts.map +1 -0
  41. package/dist/components/trace-viewer/components/timeline.js +321 -0
  42. package/dist/components/trace-viewer/components/trace-shortcut-helper.d.ts.map +1 -0
  43. package/dist/components/trace-viewer/components/trace-shortcut-helper.js +55 -0
  44. package/dist/components/trace-viewer/components/trace-viewer-skeleton.d.ts.map +1 -0
  45. package/dist/components/trace-viewer/components/trace-viewer-skeleton.js +26 -0
  46. package/dist/components/trace-viewer/components/use-element-width.d.ts.map +1 -0
  47. package/dist/components/trace-viewer/components/use-element-width.js +25 -0
  48. package/dist/components/trace-viewer/components/use-row-window.d.ts.map +1 -0
  49. package/dist/components/trace-viewer/components/use-row-window.js +107 -0
  50. package/dist/components/trace-viewer/context.d.ts +14 -182
  51. package/dist/components/trace-viewer/context.d.ts.map +1 -1
  52. package/dist/components/trace-viewer/context.js +44 -351
  53. package/dist/components/trace-viewer/icons.d.ts.map +1 -0
  54. package/dist/components/trace-viewer/icons.js +15 -0
  55. package/dist/components/trace-viewer/search.d.ts.map +1 -0
  56. package/dist/components/trace-viewer/search.js +134 -0
  57. package/dist/components/trace-viewer/trace-viewer.d.ts +7 -28
  58. package/dist/components/trace-viewer/trace-viewer.d.ts.map +1 -1
  59. package/dist/components/trace-viewer/trace-viewer.js +306 -356
  60. package/dist/components/trace-viewer/types.d.ts +2 -211
  61. package/dist/components/trace-viewer/types.d.ts.map +1 -1
  62. package/dist/components/trace-viewer/types.js +1 -1
  63. package/dist/components/trace-viewer/utils.d.ts.map +1 -0
  64. package/dist/components/trace-viewer/utils.js +430 -0
  65. package/dist/components/{trace-viewer-new.d.ts → trace-viewer.d.ts} +3 -3
  66. package/dist/components/trace-viewer.d.ts.map +1 -0
  67. package/dist/components/trace-viewer.js +21 -0
  68. package/dist/components/ui/alert.js +2 -2
  69. package/dist/components/ui/button.d.ts +1 -1
  70. package/dist/components/ui/button.d.ts.map +1 -1
  71. package/dist/components/ui/button.js +3 -3
  72. package/dist/components/ui/card.d.ts.map +1 -1
  73. package/dist/components/ui/card.js +3 -3
  74. package/dist/components/ui/error-card.js +2 -2
  75. package/dist/components/ui/error-stack-block.js +4 -4
  76. package/dist/components/ui/kbd.js +3 -3
  77. package/dist/components/ui/timestamp-tooltip.js +3 -3
  78. package/dist/components/workflow-traces/trace-span-construction.d.ts +1 -1
  79. package/dist/components/workflow-traces/trace-span-construction.js +1 -1
  80. package/dist/lib/trace-builder.d.ts +1 -1
  81. package/dist/lib/trace-builder.d.ts.map +1 -1
  82. package/dist/lib/trace-builder.js +1 -1
  83. package/dist/lib/trace-types.d.ts +54 -0
  84. package/dist/lib/trace-types.d.ts.map +1 -0
  85. package/dist/lib/trace-types.js +2 -0
  86. package/package.json +5 -5
  87. package/src/components/event-list-view.tsx +12 -9
  88. package/src/components/index.ts +3 -5
  89. package/src/components/sidebar/attribute-panel.tsx +46 -8
  90. package/src/components/sidebar/attributes-block.tsx +2 -2
  91. package/src/components/sidebar/copyable-data-block.tsx +1 -1
  92. package/src/components/sidebar/entity-detail-panel.tsx +3 -3
  93. package/src/components/sidebar/events-list.tsx +1 -1
  94. package/src/components/stream-viewer.tsx +1 -1
  95. package/src/components/{new-trace-viewer → trace-viewer}/components/event-list.tsx +1 -1
  96. package/src/components/{new-trace-viewer → trace-viewer}/components/minimap.tsx +1 -4
  97. package/src/components/{new-trace-viewer → trace-viewer}/components/timeline.tsx +2 -5
  98. package/src/components/{new-trace-viewer → trace-viewer}/components/trace-shortcut-helper.tsx +1 -1
  99. package/src/components/trace-viewer/context.tsx +63 -656
  100. package/src/components/trace-viewer/trace-viewer.tsx +563 -531
  101. package/src/components/trace-viewer/types.ts +2 -234
  102. package/src/components/{new-trace-viewer → trace-viewer}/utils.ts +2 -2
  103. package/src/components/{trace-viewer-new.tsx → trace-viewer.tsx} +5 -5
  104. package/src/components/ui/alert.tsx +1 -1
  105. package/src/components/ui/button.tsx +3 -3
  106. package/src/components/ui/card.tsx +2 -9
  107. package/src/components/ui/error-card.tsx +3 -3
  108. package/src/components/ui/error-stack-block.tsx +3 -3
  109. package/src/components/ui/kbd.tsx +2 -2
  110. package/src/components/ui/timestamp-tooltip.tsx +4 -4
  111. package/src/components/workflow-traces/trace-span-construction.ts +1 -1
  112. package/src/lib/trace-builder.ts +1 -1
  113. package/src/lib/trace-types.ts +56 -0
  114. package/dist/components/new-trace-viewer/components/copy-button.d.ts.map +0 -1
  115. package/dist/components/new-trace-viewer/components/copy-button.js +0 -27
  116. package/dist/components/new-trace-viewer/components/detail-panel-width.d.ts.map +0 -1
  117. package/dist/components/new-trace-viewer/components/detail-panel-width.js +0 -67
  118. package/dist/components/new-trace-viewer/components/detail-panel.d.ts.map +0 -1
  119. package/dist/components/new-trace-viewer/components/detail-panel.js +0 -122
  120. package/dist/components/new-trace-viewer/components/draggable-border.d.ts.map +0 -1
  121. package/dist/components/new-trace-viewer/components/draggable-border.js +0 -140
  122. package/dist/components/new-trace-viewer/components/event-list.d.ts.map +0 -1
  123. package/dist/components/new-trace-viewer/components/event-list.js +0 -47
  124. package/dist/components/new-trace-viewer/components/middle-truncate/copy-selection.d.ts.map +0 -1
  125. package/dist/components/new-trace-viewer/components/middle-truncate/copy-selection.js +0 -54
  126. package/dist/components/new-trace-viewer/components/middle-truncate/middle-truncate.d.ts.map +0 -1
  127. package/dist/components/new-trace-viewer/components/middle-truncate/middle-truncate.js +0 -81
  128. package/dist/components/new-trace-viewer/components/middle-truncate/truncate.d.ts.map +0 -1
  129. package/dist/components/new-trace-viewer/components/middle-truncate/truncate.js +0 -101
  130. package/dist/components/new-trace-viewer/components/middle-truncate/use-middle-truncate.d.ts.map +0 -1
  131. package/dist/components/new-trace-viewer/components/middle-truncate/use-middle-truncate.js +0 -114
  132. package/dist/components/new-trace-viewer/components/minimap.d.ts.map +0 -1
  133. package/dist/components/new-trace-viewer/components/minimap.js +0 -337
  134. package/dist/components/new-trace-viewer/components/pane-constants.d.ts.map +0 -1
  135. package/dist/components/new-trace-viewer/components/pane-constants.js +0 -16
  136. package/dist/components/new-trace-viewer/components/span-markers.d.ts.map +0 -1
  137. package/dist/components/new-trace-viewer/components/span-markers.js +0 -85
  138. package/dist/components/new-trace-viewer/components/split-pane.d.ts.map +0 -1
  139. package/dist/components/new-trace-viewer/components/split-pane.js +0 -41
  140. package/dist/components/new-trace-viewer/components/timeline.d.ts.map +0 -1
  141. package/dist/components/new-trace-viewer/components/timeline.js +0 -321
  142. package/dist/components/new-trace-viewer/components/trace-shortcut-helper.d.ts.map +0 -1
  143. package/dist/components/new-trace-viewer/components/trace-shortcut-helper.js +0 -55
  144. package/dist/components/new-trace-viewer/components/trace-viewer-skeleton.d.ts.map +0 -1
  145. package/dist/components/new-trace-viewer/components/trace-viewer-skeleton.js +0 -26
  146. package/dist/components/new-trace-viewer/components/use-element-width.d.ts.map +0 -1
  147. package/dist/components/new-trace-viewer/components/use-element-width.js +0 -25
  148. package/dist/components/new-trace-viewer/components/use-row-window.d.ts.map +0 -1
  149. package/dist/components/new-trace-viewer/components/use-row-window.js +0 -107
  150. package/dist/components/new-trace-viewer/context.d.ts +0 -17
  151. package/dist/components/new-trace-viewer/context.d.ts.map +0 -1
  152. package/dist/components/new-trace-viewer/context.js +0 -48
  153. package/dist/components/new-trace-viewer/icons.d.ts.map +0 -1
  154. package/dist/components/new-trace-viewer/icons.js +0 -15
  155. package/dist/components/new-trace-viewer/search.d.ts.map +0 -1
  156. package/dist/components/new-trace-viewer/search.js +0 -134
  157. package/dist/components/new-trace-viewer/trace-viewer.d.ts +0 -11
  158. package/dist/components/new-trace-viewer/trace-viewer.d.ts.map +0 -1
  159. package/dist/components/new-trace-viewer/trace-viewer.js +0 -336
  160. package/dist/components/new-trace-viewer/types.d.ts +0 -3
  161. package/dist/components/new-trace-viewer/types.d.ts.map +0 -1
  162. package/dist/components/new-trace-viewer/types.js +0 -2
  163. package/dist/components/new-trace-viewer/utils.d.ts.map +0 -1
  164. package/dist/components/new-trace-viewer/utils.js +0 -430
  165. package/dist/components/run-trace-view.d.ts +0 -23
  166. package/dist/components/run-trace-view.d.ts.map +0 -1
  167. package/dist/components/run-trace-view.js +0 -11
  168. package/dist/components/trace-viewer/components/map.d.ts +0 -8
  169. package/dist/components/trace-viewer/components/map.d.ts.map +0 -1
  170. package/dist/components/trace-viewer/components/map.js +0 -162
  171. package/dist/components/trace-viewer/components/markers.d.ts +0 -23
  172. package/dist/components/trace-viewer/components/markers.d.ts.map +0 -1
  173. package/dist/components/trace-viewer/components/markers.js +0 -416
  174. package/dist/components/trace-viewer/components/node.d.ts +0 -35
  175. package/dist/components/trace-viewer/components/node.d.ts.map +0 -1
  176. package/dist/components/trace-viewer/components/node.js +0 -286
  177. package/dist/components/trace-viewer/components/search-input.d.ts +0 -9
  178. package/dist/components/trace-viewer/components/search-input.d.ts.map +0 -1
  179. package/dist/components/trace-viewer/components/search-input.js +0 -9
  180. package/dist/components/trace-viewer/components/search.d.ts +0 -3
  181. package/dist/components/trace-viewer/components/search.d.ts.map +0 -1
  182. package/dist/components/trace-viewer/components/search.js +0 -25
  183. package/dist/components/trace-viewer/components/span-content.d.ts +0 -19
  184. package/dist/components/trace-viewer/components/span-content.d.ts.map +0 -1
  185. package/dist/components/trace-viewer/components/span-content.js +0 -137
  186. package/dist/components/trace-viewer/components/span-detail-panel.d.ts +0 -10
  187. package/dist/components/trace-viewer/components/span-detail-panel.d.ts.map +0 -1
  188. package/dist/components/trace-viewer/components/span-detail-panel.js +0 -285
  189. package/dist/components/trace-viewer/components/span-segments.d.ts +0 -50
  190. package/dist/components/trace-viewer/components/span-segments.d.ts.map +0 -1
  191. package/dist/components/trace-viewer/components/span-segments.js +0 -445
  192. package/dist/components/trace-viewer/components/span-strategies.d.ts +0 -46
  193. package/dist/components/trace-viewer/components/span-strategies.d.ts.map +0 -1
  194. package/dist/components/trace-viewer/components/span-strategies.js +0 -108
  195. package/dist/components/trace-viewer/components/ui.d.ts +0 -28
  196. package/dist/components/trace-viewer/components/ui.d.ts.map +0 -1
  197. package/dist/components/trace-viewer/components/ui.js +0 -39
  198. package/dist/components/trace-viewer/components/zoom-button.d.ts +0 -3
  199. package/dist/components/trace-viewer/components/zoom-button.d.ts.map +0 -1
  200. package/dist/components/trace-viewer/components/zoom-button.js +0 -29
  201. package/dist/components/trace-viewer/components/zoom-icons.d.ts +0 -11
  202. package/dist/components/trace-viewer/components/zoom-icons.d.ts.map +0 -1
  203. package/dist/components/trace-viewer/components/zoom-icons.js +0 -11
  204. package/dist/components/trace-viewer/index.d.ts +0 -5
  205. package/dist/components/trace-viewer/index.d.ts.map +0 -1
  206. package/dist/components/trace-viewer/index.js +0 -4
  207. package/dist/components/trace-viewer/trace-viewer.module.css +0 -1465
  208. package/dist/components/trace-viewer/util/constants.d.ts +0 -9
  209. package/dist/components/trace-viewer/util/constants.d.ts.map +0 -1
  210. package/dist/components/trace-viewer/util/constants.js +0 -9
  211. package/dist/components/trace-viewer/util/scrollbar-width.d.ts +0 -2
  212. package/dist/components/trace-viewer/util/scrollbar-width.d.ts.map +0 -1
  213. package/dist/components/trace-viewer/util/scrollbar-width.js +0 -14
  214. package/dist/components/trace-viewer/util/tree.d.ts +0 -13
  215. package/dist/components/trace-viewer/util/tree.d.ts.map +0 -1
  216. package/dist/components/trace-viewer/util/tree.js +0 -227
  217. package/dist/components/trace-viewer/util/use-immediate-style.d.ts +0 -15
  218. package/dist/components/trace-viewer/util/use-immediate-style.d.ts.map +0 -1
  219. package/dist/components/trace-viewer/util/use-immediate-style.js +0 -23
  220. package/dist/components/trace-viewer/util/use-streaming-spans.d.ts +0 -8
  221. package/dist/components/trace-viewer/util/use-streaming-spans.d.ts.map +0 -1
  222. package/dist/components/trace-viewer/util/use-streaming-spans.js +0 -345
  223. package/dist/components/trace-viewer/util/use-trackpad-zoom.d.ts +0 -6
  224. package/dist/components/trace-viewer/util/use-trackpad-zoom.d.ts.map +0 -1
  225. package/dist/components/trace-viewer/util/use-trackpad-zoom.js +0 -39
  226. package/dist/components/trace-viewer/worker.d.ts +0 -2
  227. package/dist/components/trace-viewer/worker.d.ts.map +0 -1
  228. package/dist/components/trace-viewer/worker.js +0 -109
  229. package/dist/components/trace-viewer-new.d.ts.map +0 -1
  230. package/dist/components/trace-viewer-new.js +0 -21
  231. package/dist/components/workflow-trace-view.d.ts +0 -39
  232. package/dist/components/workflow-trace-view.d.ts.map +0 -1
  233. package/dist/components/workflow-trace-view.js +0 -690
  234. package/dist/components/workflow-traces/trace-colors.d.ts +0 -15
  235. package/dist/components/workflow-traces/trace-colors.d.ts.map +0 -1
  236. package/dist/components/workflow-traces/trace-colors.js +0 -86
  237. package/src/components/new-trace-viewer/context.tsx +0 -93
  238. package/src/components/new-trace-viewer/trace-viewer.tsx +0 -632
  239. package/src/components/new-trace-viewer/types.ts +0 -2
  240. package/src/components/run-trace-view.tsx +0 -80
  241. package/src/components/trace-viewer/components/map.tsx +0 -226
  242. package/src/components/trace-viewer/components/markers.tsx +0 -612
  243. package/src/components/trace-viewer/components/node.tsx +0 -506
  244. package/src/components/trace-viewer/components/search-input.tsx +0 -52
  245. package/src/components/trace-viewer/components/search.tsx +0 -47
  246. package/src/components/trace-viewer/components/span-content.tsx +0 -247
  247. package/src/components/trace-viewer/components/span-detail-panel.tsx +0 -655
  248. package/src/components/trace-viewer/components/span-segments.ts +0 -585
  249. package/src/components/trace-viewer/components/span-strategies.ts +0 -205
  250. package/src/components/trace-viewer/components/ui.tsx +0 -156
  251. package/src/components/trace-viewer/components/zoom-button.tsx +0 -61
  252. package/src/components/trace-viewer/components/zoom-icons.tsx +0 -65
  253. package/src/components/trace-viewer/index.tsx +0 -4
  254. package/src/components/trace-viewer/trace-viewer.module.css +0 -1465
  255. package/src/components/trace-viewer/util/constants.ts +0 -8
  256. package/src/components/trace-viewer/util/scrollbar-width.ts +0 -13
  257. package/src/components/trace-viewer/util/tree.ts +0 -277
  258. package/src/components/trace-viewer/util/use-immediate-style.ts +0 -38
  259. package/src/components/trace-viewer/util/use-streaming-spans.ts +0 -426
  260. package/src/components/trace-viewer/util/use-trackpad-zoom.tsx +0 -51
  261. package/src/components/trace-viewer/worker.ts +0 -131
  262. package/src/components/workflow-trace-view.tsx +0 -1166
  263. package/src/components/workflow-traces/trace-colors.ts +0 -112
  264. package/dist/components/{new-trace-viewer → trace-viewer}/components/copy-button.d.ts +0 -0
  265. package/dist/components/{new-trace-viewer → trace-viewer}/components/detail-panel-width.d.ts +0 -0
  266. package/dist/components/{new-trace-viewer → trace-viewer}/components/detail-panel.d.ts +0 -0
  267. package/dist/components/{new-trace-viewer → trace-viewer}/components/draggable-border.d.ts +0 -0
  268. package/dist/components/{new-trace-viewer → trace-viewer}/components/event-list.d.ts +0 -0
  269. package/dist/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/copy-selection.d.ts +0 -0
  270. package/dist/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/middle-truncate.d.ts +0 -0
  271. package/dist/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/truncate.d.ts +0 -0
  272. package/dist/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/use-middle-truncate.d.ts +0 -0
  273. package/dist/components/{new-trace-viewer → trace-viewer}/components/minimap.d.ts +0 -0
  274. package/dist/components/{new-trace-viewer → trace-viewer}/components/pane-constants.d.ts +0 -0
  275. package/dist/components/{new-trace-viewer → trace-viewer}/components/span-markers.d.ts +0 -0
  276. package/dist/components/{new-trace-viewer → trace-viewer}/components/split-pane.d.ts +0 -0
  277. package/dist/components/{new-trace-viewer → trace-viewer}/components/timeline.d.ts +0 -0
  278. package/dist/components/{new-trace-viewer → trace-viewer}/components/timeline.module.css +0 -0
  279. package/dist/components/{new-trace-viewer → trace-viewer}/components/trace-shortcut-helper.d.ts +0 -0
  280. package/dist/components/{new-trace-viewer → trace-viewer}/components/trace-shortcut-helper.module.css +0 -0
  281. package/dist/components/{new-trace-viewer → trace-viewer}/components/trace-viewer-skeleton.d.ts +0 -0
  282. package/dist/components/{new-trace-viewer → trace-viewer}/components/use-element-width.d.ts +0 -0
  283. package/dist/components/{new-trace-viewer → trace-viewer}/components/use-row-window.d.ts +0 -0
  284. package/dist/components/{new-trace-viewer → trace-viewer}/icons.d.ts +0 -0
  285. package/dist/components/{new-trace-viewer → trace-viewer}/search.d.ts +0 -0
  286. package/dist/components/{new-trace-viewer → trace-viewer}/utils.d.ts +0 -0
  287. package/src/components/{new-trace-viewer → trace-viewer}/components/copy-button.tsx +0 -0
  288. package/src/components/{new-trace-viewer → trace-viewer}/components/detail-panel-width.test.ts +0 -0
  289. package/src/components/{new-trace-viewer → trace-viewer}/components/detail-panel-width.ts +0 -0
  290. package/src/components/{new-trace-viewer → trace-viewer}/components/detail-panel.tsx +0 -0
  291. package/src/components/{new-trace-viewer → trace-viewer}/components/draggable-border.tsx +0 -0
  292. package/src/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/copy-selection.ts +0 -0
  293. package/src/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/middle-truncate.tsx +1 -1
  294. /package/src/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/truncate.ts +0 -0
  295. /package/src/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/use-middle-truncate.ts +0 -0
  296. /package/src/components/{new-trace-viewer → trace-viewer}/components/pane-constants.ts +0 -0
  297. /package/src/components/{new-trace-viewer → trace-viewer}/components/span-markers.tsx +0 -0
  298. /package/src/components/{new-trace-viewer → trace-viewer}/components/split-pane.tsx +0 -0
  299. /package/src/components/{new-trace-viewer → trace-viewer}/components/timeline.module.css +0 -0
  300. /package/src/components/{new-trace-viewer → trace-viewer}/components/trace-shortcut-helper.module.css +0 -0
  301. /package/src/components/{new-trace-viewer → trace-viewer}/components/trace-viewer-skeleton.tsx +0 -0
  302. /package/src/components/{new-trace-viewer → trace-viewer}/components/use-element-width.ts +0 -0
  303. /package/src/components/{new-trace-viewer → trace-viewer}/components/use-row-window.ts +0 -0
  304. /package/src/components/{new-trace-viewer → trace-viewer}/icons.tsx +0 -0
  305. /package/src/components/{new-trace-viewer → trace-viewer}/search.ts +0 -0
  306. /package/src/components/{new-trace-viewer → trace-viewer}/utils.test.ts +0 -0
  307. /package/src/{components/trace-viewer/modules.d.ts → modules.d.ts} +0 -0
@@ -1,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
- }