@workflow/web-shared 5.0.0-beta.4 → 5.0.0-beta.40

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 (517) hide show
  1. package/README.md +5 -13
  2. package/dist/components/error-boundary.js +1 -1
  3. package/dist/components/event-list-view.d.ts +46 -1
  4. package/dist/components/event-list-view.d.ts.map +1 -1
  5. package/dist/components/event-list-view.js +235 -97
  6. package/dist/components/hook-actions.js +1 -1
  7. package/dist/components/index.d.ts +8 -5
  8. package/dist/components/index.d.ts.map +1 -1
  9. package/dist/components/index.js +6 -4
  10. package/dist/components/sidebar/attribute-panel.d.ts +4 -1
  11. package/dist/components/sidebar/attribute-panel.d.ts.map +1 -1
  12. package/dist/components/sidebar/attribute-panel.js +173 -119
  13. package/dist/components/sidebar/attributes-block.d.ts +40 -0
  14. package/dist/components/sidebar/attributes-block.d.ts.map +1 -0
  15. package/dist/components/sidebar/attributes-block.js +140 -0
  16. package/dist/components/sidebar/conversation-view.js +1 -1
  17. package/dist/components/sidebar/copyable-data-block.d.ts +2 -0
  18. package/dist/components/sidebar/copyable-data-block.d.ts.map +1 -1
  19. package/dist/components/sidebar/copyable-data-block.js +17 -16
  20. package/dist/components/sidebar/entity-detail-panel.d.ts +11 -11
  21. package/dist/components/sidebar/entity-detail-panel.d.ts.map +1 -1
  22. package/dist/components/sidebar/entity-detail-panel.js +37 -71
  23. package/dist/components/sidebar/events-list.d.ts +6 -2
  24. package/dist/components/sidebar/events-list.d.ts.map +1 -1
  25. package/dist/components/sidebar/events-list.js +77 -63
  26. package/dist/components/sidebar/resolve-hook-modal.js +1 -1
  27. package/dist/components/sidebar/sidebar-data-context.d.ts +10 -7
  28. package/dist/components/sidebar/sidebar-data-context.d.ts.map +1 -1
  29. package/dist/components/sidebar/sidebar-data-context.js +1 -1
  30. package/dist/components/sidebar/span-detail-merge.d.ts +31 -0
  31. package/dist/components/sidebar/span-detail-merge.d.ts.map +1 -0
  32. package/dist/components/sidebar/span-detail-merge.js +92 -0
  33. package/dist/components/sidebar/use-selected-span-detail.d.ts +16 -0
  34. package/dist/components/sidebar/use-selected-span-detail.d.ts.map +1 -0
  35. package/dist/components/sidebar/use-selected-span-detail.js +93 -0
  36. package/dist/components/stream-viewer-skeleton.d.ts +2 -0
  37. package/dist/components/stream-viewer-skeleton.d.ts.map +1 -0
  38. package/dist/components/stream-viewer-skeleton.js +12 -0
  39. package/dist/components/stream-viewer.d.ts +1 -1
  40. package/dist/components/stream-viewer.d.ts.map +1 -1
  41. package/dist/components/stream-viewer.js +9 -26
  42. package/dist/components/trace-viewer/components/copy-button.d.ts.map +1 -0
  43. package/dist/components/trace-viewer/components/copy-button.js +27 -0
  44. package/dist/components/trace-viewer/components/detail-panel-width.d.ts +34 -0
  45. package/dist/components/trace-viewer/components/detail-panel-width.d.ts.map +1 -0
  46. package/dist/components/trace-viewer/components/detail-panel-width.js +67 -0
  47. package/dist/components/trace-viewer/components/detail-panel.d.ts +14 -0
  48. package/dist/components/trace-viewer/components/detail-panel.d.ts.map +1 -0
  49. package/dist/components/trace-viewer/components/detail-panel.js +122 -0
  50. package/dist/components/trace-viewer/components/draggable-border.d.ts +31 -0
  51. package/dist/components/trace-viewer/components/draggable-border.d.ts.map +1 -0
  52. package/dist/components/trace-viewer/components/draggable-border.js +140 -0
  53. package/dist/components/trace-viewer/components/event-list.d.ts +10 -0
  54. package/dist/components/trace-viewer/components/event-list.d.ts.map +1 -0
  55. package/dist/components/trace-viewer/components/event-list.js +47 -0
  56. package/dist/components/trace-viewer/components/middle-truncate/copy-selection.d.ts.map +1 -0
  57. package/dist/components/trace-viewer/components/middle-truncate/copy-selection.js +54 -0
  58. package/dist/components/trace-viewer/components/middle-truncate/middle-truncate.d.ts.map +1 -0
  59. package/dist/components/trace-viewer/components/middle-truncate/middle-truncate.js +81 -0
  60. package/dist/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/truncate.d.ts +1 -1
  61. package/dist/components/trace-viewer/components/middle-truncate/truncate.d.ts.map +1 -0
  62. package/dist/components/trace-viewer/components/middle-truncate/truncate.js +101 -0
  63. package/dist/components/trace-viewer/components/middle-truncate/use-middle-truncate.d.ts.map +1 -0
  64. package/dist/components/trace-viewer/components/middle-truncate/use-middle-truncate.js +114 -0
  65. package/dist/components/trace-viewer/components/minimap.d.ts +14 -0
  66. package/dist/components/trace-viewer/components/minimap.d.ts.map +1 -0
  67. package/dist/components/trace-viewer/components/minimap.js +337 -0
  68. package/dist/components/trace-viewer/components/pane-constants.d.ts +14 -0
  69. package/dist/components/trace-viewer/components/pane-constants.d.ts.map +1 -0
  70. package/dist/components/trace-viewer/components/pane-constants.js +16 -0
  71. package/dist/components/trace-viewer/components/span-markers.d.ts +46 -0
  72. package/dist/components/trace-viewer/components/span-markers.d.ts.map +1 -0
  73. package/dist/components/trace-viewer/components/span-markers.js +85 -0
  74. package/dist/components/trace-viewer/components/split-pane.d.ts +10 -0
  75. package/dist/components/trace-viewer/components/split-pane.d.ts.map +1 -0
  76. package/dist/components/trace-viewer/components/split-pane.js +41 -0
  77. package/dist/components/trace-viewer/components/timeline.d.ts +42 -0
  78. package/dist/components/trace-viewer/components/timeline.d.ts.map +1 -0
  79. package/dist/components/trace-viewer/components/timeline.js +321 -0
  80. package/dist/components/trace-viewer/components/timeline.module.css +46 -0
  81. package/dist/components/trace-viewer/components/trace-shortcut-helper.d.ts +5 -0
  82. package/dist/components/trace-viewer/components/trace-shortcut-helper.d.ts.map +1 -0
  83. package/dist/components/trace-viewer/components/trace-shortcut-helper.js +55 -0
  84. package/dist/components/trace-viewer/components/trace-shortcut-helper.module.css +20 -0
  85. package/dist/components/trace-viewer/components/trace-viewer-skeleton.d.ts +2 -0
  86. package/dist/components/trace-viewer/components/trace-viewer-skeleton.d.ts.map +1 -0
  87. package/dist/components/trace-viewer/components/trace-viewer-skeleton.js +26 -0
  88. package/dist/components/trace-viewer/components/use-element-width.d.ts +8 -0
  89. package/dist/components/trace-viewer/components/use-element-width.d.ts.map +1 -0
  90. package/dist/components/trace-viewer/components/use-element-width.js +25 -0
  91. package/dist/components/trace-viewer/components/use-row-window.d.ts +34 -0
  92. package/dist/components/trace-viewer/components/use-row-window.d.ts.map +1 -0
  93. package/dist/components/trace-viewer/components/use-row-window.js +107 -0
  94. package/dist/components/trace-viewer/context.d.ts +14 -182
  95. package/dist/components/trace-viewer/context.d.ts.map +1 -1
  96. package/dist/components/trace-viewer/context.js +44 -351
  97. package/dist/components/trace-viewer/icons.d.ts.map +1 -0
  98. package/dist/components/trace-viewer/icons.js +15 -0
  99. package/dist/components/trace-viewer/search.d.ts +19 -0
  100. package/dist/components/trace-viewer/search.d.ts.map +1 -0
  101. package/dist/components/trace-viewer/search.js +134 -0
  102. package/dist/components/trace-viewer/trace-viewer.d.ts +7 -28
  103. package/dist/components/trace-viewer/trace-viewer.d.ts.map +1 -1
  104. package/dist/components/trace-viewer/trace-viewer.js +306 -356
  105. package/dist/components/trace-viewer/types.d.ts +2 -211
  106. package/dist/components/trace-viewer/types.d.ts.map +1 -1
  107. package/dist/components/trace-viewer/types.js +1 -1
  108. package/dist/components/trace-viewer/util/timing.d.ts +2 -2
  109. package/dist/components/trace-viewer/util/timing.d.ts.map +1 -1
  110. package/dist/components/trace-viewer/util/timing.js +3 -3
  111. package/dist/components/trace-viewer/utils.d.ts +111 -0
  112. package/dist/components/trace-viewer/utils.d.ts.map +1 -0
  113. package/dist/components/trace-viewer/utils.js +430 -0
  114. package/dist/components/{trace-viewer-new.d.ts → trace-viewer.d.ts} +7 -3
  115. package/dist/components/trace-viewer.d.ts.map +1 -0
  116. package/dist/components/trace-viewer.js +21 -0
  117. package/dist/components/ui/alert.js +3 -3
  118. package/dist/components/ui/button.d.ts +10 -0
  119. package/dist/components/ui/button.d.ts.map +1 -0
  120. package/dist/components/ui/button.js +46 -0
  121. package/dist/components/ui/card.d.ts.map +1 -1
  122. package/dist/components/ui/card.js +4 -4
  123. package/dist/components/ui/collapsible.d.ts +46 -0
  124. package/dist/components/ui/collapsible.d.ts.map +1 -0
  125. package/dist/components/ui/collapsible.js +66 -0
  126. package/dist/components/ui/context-card.d.ts +47 -0
  127. package/dist/components/ui/context-card.d.ts.map +1 -0
  128. package/dist/components/ui/context-card.js +471 -0
  129. package/dist/components/ui/data-inspector.d.ts +7 -6
  130. package/dist/components/ui/data-inspector.d.ts.map +1 -1
  131. package/dist/components/ui/data-inspector.js +232 -99
  132. package/dist/components/ui/data-inspector.styles.d.ts +29 -0
  133. package/dist/components/ui/data-inspector.styles.d.ts.map +1 -0
  134. package/dist/components/ui/data-inspector.styles.js +95 -0
  135. package/dist/components/ui/decrypt-button.js +1 -1
  136. package/dist/components/ui/error-card.js +3 -3
  137. package/dist/components/ui/error-stack-block.d.ts +17 -10
  138. package/dist/components/ui/error-stack-block.d.ts.map +1 -1
  139. package/dist/components/ui/error-stack-block.js +49 -30
  140. package/dist/components/ui/icon-button.d.ts +19 -0
  141. package/dist/components/ui/icon-button.d.ts.map +1 -0
  142. package/dist/components/ui/icon-button.js +29 -0
  143. package/dist/components/ui/kbd.d.ts +10 -0
  144. package/dist/components/ui/kbd.d.ts.map +1 -0
  145. package/dist/components/ui/kbd.js +25 -0
  146. package/dist/components/ui/load-more-button.js +1 -1
  147. package/dist/components/ui/menu-dropdown.js +1 -1
  148. package/dist/components/ui/skeleton.js +2 -2
  149. package/dist/components/ui/spinner.js +1 -1
  150. package/dist/components/ui/timestamp-tooltip.d.ts +34 -1
  151. package/dist/components/ui/timestamp-tooltip.d.ts.map +1 -1
  152. package/dist/components/ui/timestamp-tooltip.js +80 -132
  153. package/dist/components/ui/tooltip.d.ts +10 -0
  154. package/dist/components/ui/tooltip.d.ts.map +1 -0
  155. package/dist/components/ui/tooltip.js +12 -0
  156. package/dist/components/workflow-traces/event-colors.d.ts +2 -1
  157. package/dist/components/workflow-traces/event-colors.d.ts.map +1 -1
  158. package/dist/components/workflow-traces/event-colors.js +15 -7
  159. package/dist/components/workflow-traces/trace-span-construction.d.ts +6 -3
  160. package/dist/components/workflow-traces/trace-span-construction.d.ts.map +1 -1
  161. package/dist/components/workflow-traces/trace-span-construction.js +71 -30
  162. package/dist/components/workflow-traces/trace-time-utils.js +1 -1
  163. package/dist/hooks/use-dark-mode.js +1 -1
  164. package/dist/hooks/use-intersection-observer.d.ts +17 -0
  165. package/dist/hooks/use-intersection-observer.d.ts.map +1 -0
  166. package/dist/hooks/use-intersection-observer.js +29 -0
  167. package/dist/hooks/use-load-more-on-scroll.d.ts +21 -0
  168. package/dist/hooks/use-load-more-on-scroll.d.ts.map +1 -0
  169. package/dist/hooks/use-load-more-on-scroll.js +28 -0
  170. package/dist/hooks/use-reduced-motion.d.ts +10 -0
  171. package/dist/hooks/use-reduced-motion.d.ts.map +1 -0
  172. package/dist/hooks/use-reduced-motion.js +29 -0
  173. package/dist/index.d.ts +4 -3
  174. package/dist/index.d.ts.map +1 -1
  175. package/dist/index.js +4 -3
  176. package/dist/lib/cn.d.ts +10 -0
  177. package/dist/lib/cn.d.ts.map +1 -0
  178. package/dist/lib/cn.js +83 -0
  179. package/dist/lib/event-analysis.d.ts +1 -1
  180. package/dist/lib/event-analysis.d.ts.map +1 -1
  181. package/dist/lib/event-analysis.js +3 -2
  182. package/dist/lib/event-materialization.d.ts +1 -1
  183. package/dist/lib/event-materialization.d.ts.map +1 -1
  184. package/dist/lib/event-materialization.js +29 -21
  185. package/dist/lib/exact-event-search-id.d.ts +25 -0
  186. package/dist/lib/exact-event-search-id.d.ts.map +1 -0
  187. package/dist/lib/exact-event-search-id.js +39 -0
  188. package/dist/lib/hydration.d.ts +17 -2
  189. package/dist/lib/hydration.d.ts.map +1 -1
  190. package/dist/lib/hydration.js +194 -23
  191. package/dist/lib/stream-display.js +1 -1
  192. package/dist/lib/toast.js +1 -1
  193. package/dist/lib/trace-builder.d.ts +17 -5
  194. package/dist/lib/trace-builder.d.ts.map +1 -1
  195. package/dist/lib/trace-builder.js +32 -14
  196. package/dist/lib/trace-types.d.ts +54 -0
  197. package/dist/lib/trace-types.d.ts.map +1 -0
  198. package/dist/lib/trace-types.js +2 -0
  199. package/dist/lib/utils.d.ts +14 -2
  200. package/dist/lib/utils.d.ts.map +1 -1
  201. package/dist/lib/utils.js +46 -6
  202. package/dist/lib/zstd-browser-decoder.d.ts +7 -0
  203. package/dist/lib/zstd-browser-decoder.d.ts.map +1 -0
  204. package/dist/lib/zstd-browser-decoder.js +41 -0
  205. package/dist/styles.css +210 -139
  206. package/package.json +11 -8
  207. package/src/components/event-list-view.tsx +385 -123
  208. package/src/components/index.ts +14 -8
  209. package/src/components/sidebar/attribute-panel.tsx +331 -282
  210. package/src/components/sidebar/attributes-block.tsx +326 -0
  211. package/src/components/sidebar/copyable-data-block.tsx +50 -28
  212. package/src/components/sidebar/entity-detail-panel.tsx +92 -126
  213. package/src/components/sidebar/events-list.tsx +197 -179
  214. package/src/components/sidebar/sidebar-data-context.tsx +11 -11
  215. package/src/components/sidebar/span-detail-merge.ts +134 -0
  216. package/src/components/sidebar/use-selected-span-detail.ts +146 -0
  217. package/src/components/stream-viewer-skeleton.tsx +34 -0
  218. package/src/components/stream-viewer.tsx +34 -106
  219. package/src/components/{new-trace-viewer → trace-viewer}/components/copy-button.tsx +2 -2
  220. package/src/components/trace-viewer/components/detail-panel-width.test.ts +123 -0
  221. package/src/components/trace-viewer/components/detail-panel-width.ts +76 -0
  222. package/src/components/trace-viewer/components/detail-panel.tsx +273 -0
  223. package/src/components/trace-viewer/components/draggable-border.tsx +216 -0
  224. package/src/components/trace-viewer/components/event-list.tsx +144 -0
  225. package/src/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/middle-truncate.tsx +8 -8
  226. package/src/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/truncate.ts +1 -1
  227. package/src/components/trace-viewer/components/minimap.tsx +556 -0
  228. package/src/components/trace-viewer/components/pane-constants.ts +19 -0
  229. package/src/components/trace-viewer/components/span-markers.tsx +173 -0
  230. package/src/components/trace-viewer/components/split-pane.tsx +141 -0
  231. package/src/components/trace-viewer/components/timeline.module.css +46 -0
  232. package/src/components/trace-viewer/components/timeline.tsx +850 -0
  233. package/src/components/trace-viewer/components/trace-shortcut-helper.module.css +20 -0
  234. package/src/components/trace-viewer/components/trace-shortcut-helper.tsx +116 -0
  235. package/src/components/trace-viewer/components/trace-viewer-skeleton.tsx +114 -0
  236. package/src/components/trace-viewer/components/use-element-width.ts +29 -0
  237. package/src/components/trace-viewer/components/use-row-window.ts +140 -0
  238. package/src/components/trace-viewer/context.tsx +63 -656
  239. package/src/components/{new-trace-viewer → trace-viewer}/icons.tsx +2 -2
  240. package/src/components/trace-viewer/search.ts +178 -0
  241. package/src/components/trace-viewer/trace-viewer.tsx +563 -531
  242. package/src/components/trace-viewer/types.ts +2 -234
  243. package/src/components/trace-viewer/util/timing.ts +2 -2
  244. package/src/components/trace-viewer/utils.test.ts +458 -0
  245. package/src/components/{new-trace-viewer → trace-viewer}/utils.ts +271 -50
  246. package/src/components/{trace-viewer-new.tsx → trace-viewer.tsx} +24 -18
  247. package/src/components/ui/alert.tsx +2 -2
  248. package/src/components/ui/button.tsx +68 -0
  249. package/src/components/ui/card.tsx +3 -10
  250. package/src/components/ui/collapsible.tsx +219 -0
  251. package/src/components/ui/context-card.tsx +784 -0
  252. package/src/components/ui/data-inspector.styles.ts +96 -0
  253. package/src/components/ui/data-inspector.tsx +501 -204
  254. package/src/components/ui/error-card.tsx +4 -4
  255. package/src/components/ui/error-stack-block.tsx +84 -55
  256. package/src/components/ui/icon-button.tsx +53 -0
  257. package/src/components/ui/kbd.tsx +43 -0
  258. package/src/components/ui/skeleton.tsx +1 -1
  259. package/src/components/ui/timestamp-tooltip.tsx +132 -194
  260. package/src/components/ui/tooltip.tsx +47 -0
  261. package/src/components/workflow-traces/event-colors.ts +15 -11
  262. package/src/components/workflow-traces/trace-span-construction.test.ts +85 -0
  263. package/src/components/workflow-traces/trace-span-construction.ts +97 -32
  264. package/src/hooks/use-intersection-observer.ts +57 -0
  265. package/src/hooks/use-load-more-on-scroll.ts +49 -0
  266. package/src/hooks/use-reduced-motion.ts +34 -0
  267. package/src/index.ts +10 -4
  268. package/src/lib/cn.ts +93 -0
  269. package/src/lib/event-analysis.ts +6 -4
  270. package/src/lib/event-materialization.ts +35 -21
  271. package/src/lib/exact-event-search-id.ts +67 -0
  272. package/src/lib/hydration.ts +210 -30
  273. package/src/lib/trace-builder.ts +43 -19
  274. package/src/lib/trace-types.ts +56 -0
  275. package/src/lib/utils.test.ts +33 -0
  276. package/src/lib/utils.ts +53 -6
  277. package/src/lib/zstd-browser-decoder.ts +42 -0
  278. package/src/styles.css +210 -139
  279. package/dist/components/error-boundary.js.map +0 -1
  280. package/dist/components/event-list-view.js.map +0 -1
  281. package/dist/components/hook-actions.js.map +0 -1
  282. package/dist/components/index.js.map +0 -1
  283. package/dist/components/new-trace-viewer/components/copy-button.d.ts.map +0 -1
  284. package/dist/components/new-trace-viewer/components/copy-button.js +0 -27
  285. package/dist/components/new-trace-viewer/components/copy-button.js.map +0 -1
  286. package/dist/components/new-trace-viewer/components/event-list.d.ts +0 -8
  287. package/dist/components/new-trace-viewer/components/event-list.d.ts.map +0 -1
  288. package/dist/components/new-trace-viewer/components/event-list.js +0 -38
  289. package/dist/components/new-trace-viewer/components/event-list.js.map +0 -1
  290. package/dist/components/new-trace-viewer/components/middle-truncate/copy-selection.d.ts.map +0 -1
  291. package/dist/components/new-trace-viewer/components/middle-truncate/copy-selection.js +0 -54
  292. package/dist/components/new-trace-viewer/components/middle-truncate/copy-selection.js.map +0 -1
  293. package/dist/components/new-trace-viewer/components/middle-truncate/middle-truncate.d.ts.map +0 -1
  294. package/dist/components/new-trace-viewer/components/middle-truncate/middle-truncate.js +0 -81
  295. package/dist/components/new-trace-viewer/components/middle-truncate/middle-truncate.js.map +0 -1
  296. package/dist/components/new-trace-viewer/components/middle-truncate/truncate.d.ts.map +0 -1
  297. package/dist/components/new-trace-viewer/components/middle-truncate/truncate.js +0 -101
  298. package/dist/components/new-trace-viewer/components/middle-truncate/truncate.js.map +0 -1
  299. package/dist/components/new-trace-viewer/components/middle-truncate/use-middle-truncate.d.ts.map +0 -1
  300. package/dist/components/new-trace-viewer/components/middle-truncate/use-middle-truncate.js +0 -114
  301. package/dist/components/new-trace-viewer/components/middle-truncate/use-middle-truncate.js.map +0 -1
  302. package/dist/components/new-trace-viewer/components/split-pane.d.ts +0 -14
  303. package/dist/components/new-trace-viewer/components/split-pane.d.ts.map +0 -1
  304. package/dist/components/new-trace-viewer/components/split-pane.js +0 -99
  305. package/dist/components/new-trace-viewer/components/split-pane.js.map +0 -1
  306. package/dist/components/new-trace-viewer/components/timeline.d.ts +0 -31
  307. package/dist/components/new-trace-viewer/components/timeline.d.ts.map +0 -1
  308. package/dist/components/new-trace-viewer/components/timeline.js +0 -138
  309. package/dist/components/new-trace-viewer/components/timeline.js.map +0 -1
  310. package/dist/components/new-trace-viewer/context.d.ts +0 -15
  311. package/dist/components/new-trace-viewer/context.d.ts.map +0 -1
  312. package/dist/components/new-trace-viewer/context.js +0 -47
  313. package/dist/components/new-trace-viewer/context.js.map +0 -1
  314. package/dist/components/new-trace-viewer/detail-panel.d.ts +0 -10
  315. package/dist/components/new-trace-viewer/detail-panel.d.ts.map +0 -1
  316. package/dist/components/new-trace-viewer/detail-panel.js +0 -12
  317. package/dist/components/new-trace-viewer/detail-panel.js.map +0 -1
  318. package/dist/components/new-trace-viewer/icons.d.ts.map +0 -1
  319. package/dist/components/new-trace-viewer/icons.js +0 -15
  320. package/dist/components/new-trace-viewer/icons.js.map +0 -1
  321. package/dist/components/new-trace-viewer/trace-viewer.d.ts +0 -8
  322. package/dist/components/new-trace-viewer/trace-viewer.d.ts.map +0 -1
  323. package/dist/components/new-trace-viewer/trace-viewer.js +0 -349
  324. package/dist/components/new-trace-viewer/trace-viewer.js.map +0 -1
  325. package/dist/components/new-trace-viewer/types.d.ts +0 -1
  326. package/dist/components/new-trace-viewer/types.d.ts.map +0 -1
  327. package/dist/components/new-trace-viewer/types.js +0 -2
  328. package/dist/components/new-trace-viewer/types.js.map +0 -1
  329. package/dist/components/new-trace-viewer/util/constants.d.ts +0 -1
  330. package/dist/components/new-trace-viewer/util/constants.d.ts.map +0 -1
  331. package/dist/components/new-trace-viewer/util/constants.js +0 -2
  332. package/dist/components/new-trace-viewer/util/constants.js.map +0 -1
  333. package/dist/components/new-trace-viewer/utils.d.ts +0 -42
  334. package/dist/components/new-trace-viewer/utils.d.ts.map +0 -1
  335. package/dist/components/new-trace-viewer/utils.js +0 -305
  336. package/dist/components/new-trace-viewer/utils.js.map +0 -1
  337. package/dist/components/run-trace-view.d.ts +0 -25
  338. package/dist/components/run-trace-view.d.ts.map +0 -1
  339. package/dist/components/run-trace-view.js +0 -11
  340. package/dist/components/run-trace-view.js.map +0 -1
  341. package/dist/components/sidebar/attribute-panel.js.map +0 -1
  342. package/dist/components/sidebar/conversation-view.js.map +0 -1
  343. package/dist/components/sidebar/copyable-data-block.js.map +0 -1
  344. package/dist/components/sidebar/detail-card.d.ts +0 -14
  345. package/dist/components/sidebar/detail-card.d.ts.map +0 -1
  346. package/dist/components/sidebar/detail-card.js +0 -20
  347. package/dist/components/sidebar/detail-card.js.map +0 -1
  348. package/dist/components/sidebar/entity-detail-panel.js.map +0 -1
  349. package/dist/components/sidebar/events-list.js.map +0 -1
  350. package/dist/components/sidebar/resolve-hook-modal.js.map +0 -1
  351. package/dist/components/sidebar/sidebar-data-context.js.map +0 -1
  352. package/dist/components/stream-viewer.js.map +0 -1
  353. package/dist/components/trace-viewer/components/map.d.ts +0 -8
  354. package/dist/components/trace-viewer/components/map.d.ts.map +0 -1
  355. package/dist/components/trace-viewer/components/map.js +0 -162
  356. package/dist/components/trace-viewer/components/map.js.map +0 -1
  357. package/dist/components/trace-viewer/components/markers.d.ts +0 -23
  358. package/dist/components/trace-viewer/components/markers.d.ts.map +0 -1
  359. package/dist/components/trace-viewer/components/markers.js +0 -416
  360. package/dist/components/trace-viewer/components/markers.js.map +0 -1
  361. package/dist/components/trace-viewer/components/node.d.ts +0 -35
  362. package/dist/components/trace-viewer/components/node.d.ts.map +0 -1
  363. package/dist/components/trace-viewer/components/node.js +0 -285
  364. package/dist/components/trace-viewer/components/node.js.map +0 -1
  365. package/dist/components/trace-viewer/components/search-input.d.ts +0 -9
  366. package/dist/components/trace-viewer/components/search-input.d.ts.map +0 -1
  367. package/dist/components/trace-viewer/components/search-input.js +0 -9
  368. package/dist/components/trace-viewer/components/search-input.js.map +0 -1
  369. package/dist/components/trace-viewer/components/search.d.ts +0 -3
  370. package/dist/components/trace-viewer/components/search.d.ts.map +0 -1
  371. package/dist/components/trace-viewer/components/search.js +0 -25
  372. package/dist/components/trace-viewer/components/search.js.map +0 -1
  373. package/dist/components/trace-viewer/components/span-content.d.ts +0 -19
  374. package/dist/components/trace-viewer/components/span-content.d.ts.map +0 -1
  375. package/dist/components/trace-viewer/components/span-content.js +0 -137
  376. package/dist/components/trace-viewer/components/span-content.js.map +0 -1
  377. package/dist/components/trace-viewer/components/span-detail-panel.d.ts +0 -10
  378. package/dist/components/trace-viewer/components/span-detail-panel.d.ts.map +0 -1
  379. package/dist/components/trace-viewer/components/span-detail-panel.js +0 -285
  380. package/dist/components/trace-viewer/components/span-detail-panel.js.map +0 -1
  381. package/dist/components/trace-viewer/components/span-segments.d.ts +0 -50
  382. package/dist/components/trace-viewer/components/span-segments.d.ts.map +0 -1
  383. package/dist/components/trace-viewer/components/span-segments.js +0 -445
  384. package/dist/components/trace-viewer/components/span-segments.js.map +0 -1
  385. package/dist/components/trace-viewer/components/span-strategies.d.ts +0 -46
  386. package/dist/components/trace-viewer/components/span-strategies.d.ts.map +0 -1
  387. package/dist/components/trace-viewer/components/span-strategies.js +0 -108
  388. package/dist/components/trace-viewer/components/span-strategies.js.map +0 -1
  389. package/dist/components/trace-viewer/components/ui.d.ts +0 -28
  390. package/dist/components/trace-viewer/components/ui.d.ts.map +0 -1
  391. package/dist/components/trace-viewer/components/ui.js +0 -39
  392. package/dist/components/trace-viewer/components/ui.js.map +0 -1
  393. package/dist/components/trace-viewer/components/zoom-button.d.ts +0 -3
  394. package/dist/components/trace-viewer/components/zoom-button.d.ts.map +0 -1
  395. package/dist/components/trace-viewer/components/zoom-button.js +0 -29
  396. package/dist/components/trace-viewer/components/zoom-button.js.map +0 -1
  397. package/dist/components/trace-viewer/components/zoom-icons.d.ts +0 -11
  398. package/dist/components/trace-viewer/components/zoom-icons.d.ts.map +0 -1
  399. package/dist/components/trace-viewer/components/zoom-icons.js +0 -11
  400. package/dist/components/trace-viewer/components/zoom-icons.js.map +0 -1
  401. package/dist/components/trace-viewer/context.js.map +0 -1
  402. package/dist/components/trace-viewer/index.d.ts +0 -5
  403. package/dist/components/trace-viewer/index.d.ts.map +0 -1
  404. package/dist/components/trace-viewer/index.js +0 -4
  405. package/dist/components/trace-viewer/index.js.map +0 -1
  406. package/dist/components/trace-viewer/trace-viewer.js.map +0 -1
  407. package/dist/components/trace-viewer/trace-viewer.module.css +0 -1465
  408. package/dist/components/trace-viewer/types.js.map +0 -1
  409. package/dist/components/trace-viewer/util/constants.d.ts +0 -9
  410. package/dist/components/trace-viewer/util/constants.d.ts.map +0 -1
  411. package/dist/components/trace-viewer/util/constants.js +0 -9
  412. package/dist/components/trace-viewer/util/constants.js.map +0 -1
  413. package/dist/components/trace-viewer/util/scrollbar-width.d.ts +0 -2
  414. package/dist/components/trace-viewer/util/scrollbar-width.d.ts.map +0 -1
  415. package/dist/components/trace-viewer/util/scrollbar-width.js +0 -14
  416. package/dist/components/trace-viewer/util/scrollbar-width.js.map +0 -1
  417. package/dist/components/trace-viewer/util/timing.js.map +0 -1
  418. package/dist/components/trace-viewer/util/tree.d.ts +0 -13
  419. package/dist/components/trace-viewer/util/tree.d.ts.map +0 -1
  420. package/dist/components/trace-viewer/util/tree.js +0 -227
  421. package/dist/components/trace-viewer/util/tree.js.map +0 -1
  422. package/dist/components/trace-viewer/util/use-immediate-style.d.ts +0 -15
  423. package/dist/components/trace-viewer/util/use-immediate-style.d.ts.map +0 -1
  424. package/dist/components/trace-viewer/util/use-immediate-style.js +0 -23
  425. package/dist/components/trace-viewer/util/use-immediate-style.js.map +0 -1
  426. package/dist/components/trace-viewer/util/use-streaming-spans.d.ts +0 -8
  427. package/dist/components/trace-viewer/util/use-streaming-spans.d.ts.map +0 -1
  428. package/dist/components/trace-viewer/util/use-streaming-spans.js +0 -345
  429. package/dist/components/trace-viewer/util/use-streaming-spans.js.map +0 -1
  430. package/dist/components/trace-viewer/util/use-trackpad-zoom.d.ts +0 -6
  431. package/dist/components/trace-viewer/util/use-trackpad-zoom.d.ts.map +0 -1
  432. package/dist/components/trace-viewer/util/use-trackpad-zoom.js +0 -39
  433. package/dist/components/trace-viewer/util/use-trackpad-zoom.js.map +0 -1
  434. package/dist/components/trace-viewer/worker.d.ts +0 -2
  435. package/dist/components/trace-viewer/worker.d.ts.map +0 -1
  436. package/dist/components/trace-viewer/worker.js +0 -109
  437. package/dist/components/trace-viewer/worker.js.map +0 -1
  438. package/dist/components/trace-viewer-new.d.ts.map +0 -1
  439. package/dist/components/trace-viewer-new.js +0 -23
  440. package/dist/components/trace-viewer-new.js.map +0 -1
  441. package/dist/components/ui/alert.js.map +0 -1
  442. package/dist/components/ui/card.js.map +0 -1
  443. package/dist/components/ui/data-inspector.js.map +0 -1
  444. package/dist/components/ui/decrypt-button.js.map +0 -1
  445. package/dist/components/ui/error-card.js.map +0 -1
  446. package/dist/components/ui/error-stack-block.js.map +0 -1
  447. package/dist/components/ui/inspector-theme.d.ts +0 -95
  448. package/dist/components/ui/inspector-theme.d.ts.map +0 -1
  449. package/dist/components/ui/inspector-theme.js +0 -82
  450. package/dist/components/ui/inspector-theme.js.map +0 -1
  451. package/dist/components/ui/load-more-button.js.map +0 -1
  452. package/dist/components/ui/menu-dropdown.js.map +0 -1
  453. package/dist/components/ui/skeleton.js.map +0 -1
  454. package/dist/components/ui/spinner.js.map +0 -1
  455. package/dist/components/ui/timestamp-tooltip.js.map +0 -1
  456. package/dist/components/workflow-trace-view.d.ts +0 -40
  457. package/dist/components/workflow-trace-view.d.ts.map +0 -1
  458. package/dist/components/workflow-trace-view.js +0 -695
  459. package/dist/components/workflow-trace-view.js.map +0 -1
  460. package/dist/components/workflow-traces/event-colors.js.map +0 -1
  461. package/dist/components/workflow-traces/trace-colors.d.ts +0 -15
  462. package/dist/components/workflow-traces/trace-colors.d.ts.map +0 -1
  463. package/dist/components/workflow-traces/trace-colors.js +0 -87
  464. package/dist/components/workflow-traces/trace-colors.js.map +0 -1
  465. package/dist/components/workflow-traces/trace-span-construction.js.map +0 -1
  466. package/dist/components/workflow-traces/trace-time-utils.js.map +0 -1
  467. package/dist/hooks/use-dark-mode.js.map +0 -1
  468. package/dist/index.js.map +0 -1
  469. package/dist/lib/event-analysis.js.map +0 -1
  470. package/dist/lib/event-materialization.js.map +0 -1
  471. package/dist/lib/hydration.js.map +0 -1
  472. package/dist/lib/stream-display.js.map +0 -1
  473. package/dist/lib/toast.js.map +0 -1
  474. package/dist/lib/trace-builder.js.map +0 -1
  475. package/dist/lib/utils.js.map +0 -1
  476. package/src/components/new-trace-viewer/components/event-list.tsx +0 -116
  477. package/src/components/new-trace-viewer/components/split-pane.tsx +0 -185
  478. package/src/components/new-trace-viewer/components/timeline.tsx +0 -382
  479. package/src/components/new-trace-viewer/context.tsx +0 -92
  480. package/src/components/new-trace-viewer/detail-panel.tsx +0 -58
  481. package/src/components/new-trace-viewer/trace-viewer.tsx +0 -645
  482. package/src/components/new-trace-viewer/types.ts +0 -0
  483. package/src/components/new-trace-viewer/util/constants.ts +0 -0
  484. package/src/components/run-trace-view.tsx +0 -84
  485. package/src/components/sidebar/detail-card.tsx +0 -65
  486. package/src/components/trace-viewer/components/map.tsx +0 -226
  487. package/src/components/trace-viewer/components/markers.tsx +0 -612
  488. package/src/components/trace-viewer/components/node.tsx +0 -505
  489. package/src/components/trace-viewer/components/search-input.tsx +0 -52
  490. package/src/components/trace-viewer/components/search.tsx +0 -47
  491. package/src/components/trace-viewer/components/span-content.tsx +0 -247
  492. package/src/components/trace-viewer/components/span-detail-panel.tsx +0 -655
  493. package/src/components/trace-viewer/components/span-segments.ts +0 -585
  494. package/src/components/trace-viewer/components/span-strategies.ts +0 -205
  495. package/src/components/trace-viewer/components/ui.tsx +0 -156
  496. package/src/components/trace-viewer/components/zoom-button.tsx +0 -61
  497. package/src/components/trace-viewer/components/zoom-icons.tsx +0 -65
  498. package/src/components/trace-viewer/index.tsx +0 -4
  499. package/src/components/trace-viewer/trace-viewer.module.css +0 -1465
  500. package/src/components/trace-viewer/util/constants.ts +0 -8
  501. package/src/components/trace-viewer/util/scrollbar-width.ts +0 -13
  502. package/src/components/trace-viewer/util/tree.ts +0 -277
  503. package/src/components/trace-viewer/util/use-immediate-style.ts +0 -38
  504. package/src/components/trace-viewer/util/use-streaming-spans.ts +0 -426
  505. package/src/components/trace-viewer/util/use-trackpad-zoom.tsx +0 -51
  506. package/src/components/trace-viewer/worker.ts +0 -131
  507. package/src/components/ui/inspector-theme.ts +0 -110
  508. package/src/components/workflow-trace-view.tsx +0 -1171
  509. package/src/components/workflow-traces/trace-colors.ts +0 -112
  510. /package/dist/components/{new-trace-viewer → trace-viewer}/components/copy-button.d.ts +0 -0
  511. /package/dist/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/copy-selection.d.ts +0 -0
  512. /package/dist/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/middle-truncate.d.ts +0 -0
  513. /package/dist/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/use-middle-truncate.d.ts +0 -0
  514. /package/dist/components/{new-trace-viewer → trace-viewer}/icons.d.ts +0 -0
  515. /package/src/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/copy-selection.ts +0 -0
  516. /package/src/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/use-middle-truncate.ts +0 -0
  517. /package/src/{components/trace-viewer/modules.d.ts → modules.d.ts} +0 -0
@@ -1,686 +1,93 @@
1
1
  'use client';
2
2
 
3
- import type { Dispatch, MutableRefObject, ReactNode, Reducer } from 'react';
4
3
  import {
5
4
  createContext,
5
+ type ReactNode,
6
+ useCallback,
6
7
  useContext,
7
8
  useEffect,
8
9
  useMemo,
9
- useReducer,
10
- useRef,
10
+ useState,
11
11
  } from 'react';
12
- import type {
13
- GetQuickLinks,
14
- MemoCache,
15
- MemoCacheKey,
16
- QuickLink,
17
- Resource,
18
- RootNode,
19
- ScrollSnapshot,
20
- SpanNode,
21
- VisibleSpanEvent,
22
- } from './types';
23
- import {
24
- MAP_HEIGHT,
25
- MARKER_HEIGHT,
26
- ROW_HEIGHT,
27
- ROW_PADDING,
28
- SEARCH_GAP,
29
- SEARCH_HEIGHT,
30
- TIMELINE_PADDING,
31
- } from './util/constants';
32
- import { detectScrollbarWidth } from './util/scrollbar-width';
33
-
34
- export interface TraceViewerState {
35
- /**
36
- * The root node for the tree
37
- */
38
- root: RootNode;
39
- /**
40
- * A map of spanId to span nodes
41
- */
42
- spanMap: Record<string, SpanNode>;
43
- /**
44
- * A map of resource name to resource
45
- */
46
- resourceMap: Record<string, Resource['attributes']>;
47
- /**
48
- * The current (debounced) search input value
49
- */
50
- filter: string;
51
- /**
52
- * The span that is currently focused and visible in the panel
53
- */
54
- selected: SpanNode | null;
55
- /**
56
- * The initial scale of the trace. At this scale the entire trace is visible
57
- */
58
- baseScale: number;
59
- /**
60
- * The multiplier of the base scale to get the current scale
61
- */
62
- scaleRatio: number;
63
- /**
64
- * The scale of 1ms in pixels
65
- */
66
- scale: number;
67
- /**
68
- * The width of the entire trace viewer in pixels
69
- */
70
- width: number;
71
- /**
72
- * The height of the entire trace viewer in pixels
73
- */
74
- height: number;
75
- /**
76
- * The width of the timeline view in pixels
77
- */
78
- timelineWidth: number;
79
- /**
80
- * The height of the timeline view in pixels
81
- */
82
- timelineHeight: number;
83
- /**
84
- * The width of the side panel in pixels
85
- */
86
- panelWidth: number;
87
- /**
88
- * The height of the side panel in pixels
89
- */
90
- panelHeight: number;
91
- /**
92
- * The width of scrollbars on this device
93
- */
94
- scrollbarWidth: number;
95
- /**
96
- * A ref for the timeline element
97
- */
98
- timelineRef: MutableRefObject<HTMLDivElement | null>;
99
- /**
100
- * A ref for updating timeline scroll position immediately after a scale operation
101
- */
102
- scrollSnapshotRef: MutableRefObject<ScrollSnapshot | undefined>;
103
- /**
104
- * A reference for the last time each node was mutated. Used for more efficent control
105
- * of what React re-renders and when.
106
- */
107
- memoCacheRef: MutableRefObject<MemoCache>;
108
- /**
109
- * A constant, wrapped version of the getQuickLinks property with caching
110
- */
111
- getQuickLinks: GetQuickLinks;
112
- /**
113
- * Whether the panel is being rendered attached to the timeline
114
- */
115
- withPanel: boolean;
116
- /**
117
- * Whether the trace viewer is small enough that it should be in mobile mode
118
- */
119
- isMobile: boolean;
120
- /**
121
- * A function to provide custom class names for spans.
122
- */
123
- customSpanClassNameFunc?: (span: SpanNode) => string;
124
- /**
125
- * A function to provide custom class names for span events.
126
- */
127
- customSpanEventClassNameFunc?: (event: VisibleSpanEvent) => string;
12
+ import type { Span } from './types';
13
+
14
+ interface ActiveSpanContextValue {
15
+ activeSpanId: string | null;
16
+ activeSpan: Span | null;
17
+ /** The full span list the selection lives in (ordered as rendered). */
18
+ spans: Span[];
19
+ setActiveSpan: (spanId: string) => void;
20
+ clearActiveSpan: () => void;
128
21
  }
129
22
 
130
- export type TraceViewerAction =
131
- | {
132
- type: 'setRoot';
133
- root: RootNode;
134
- spanMap: Record<string, SpanNode>;
135
- resources: Resource[];
136
- }
137
- | {
138
- type: 'setSize';
139
- width: number;
140
- height: number;
141
- }
142
- | {
143
- type: 'setPanelWidth';
144
- width: number;
145
- }
146
- | {
147
- type: 'setFilter';
148
- filter: string;
149
- }
150
- | {
151
- type: 'deselect';
152
- }
153
- | {
154
- type: 'select';
155
- id: string;
156
- }
157
- | {
158
- type: 'escape';
159
- }
160
- | {
161
- type: 'toggleSelection';
162
- id: string;
163
- }
164
- | {
165
- type: 'detectBaseScale';
166
- }
167
- | {
168
- type: 'setScale';
169
- scale: number;
170
- }
171
- | {
172
- type: 'resetScale';
173
- }
174
- | {
175
- type: 'scaleToNode';
176
- id: string;
177
- }
178
- | {
179
- type: 'scaleToRange';
180
- t1: number;
181
- t2: number;
182
- }
183
- | {
184
- type: 'adjustScaleRatio';
185
- direction: -1 | 0 | 1;
186
- }
187
- | {
188
- type: 'trackpadScale';
189
- delta: number;
190
- anchorT: number;
191
- anchorX: number;
192
- }
193
- | {
194
- type: 'minScale';
195
- }
196
- | {
197
- type: 'setScrollSnapshot';
198
- /**
199
- * The time that will remain the same location after scaling
200
- */
201
- anchorT: number;
202
- /**
203
- * The anchor point relative to the timeline's left position
204
- */
205
- anchorX: number;
206
- }
207
- | {
208
- type: 'setWithPanel';
209
- withPanel: boolean;
210
- }
211
- | {
212
- type: 'forceRender';
213
- }
214
- | {
215
- /** Like setRoot but preserves scroll position and memo cache (for incremental data updates) */
216
- type: 'updateRoot';
217
- root: RootNode;
218
- spanMap: Record<string, SpanNode>;
219
- resources: Resource[];
220
- };
221
-
222
- export interface TraceViewerContextProps {
223
- state: TraceViewerState;
224
- dispatch: Dispatch<TraceViewerAction>;
225
- }
226
-
227
- export const initialState: TraceViewerState = {
228
- root: {
229
- startTime: 0,
230
- endTime: 1,
231
- duration: 1,
232
- depth: 0,
233
- children: [],
234
- },
235
- spanMap: {},
236
- resourceMap: {},
237
- filter: '',
238
- selected: null,
239
- baseScale: 1,
240
- scaleRatio: 1,
241
- scale: 1,
242
- width: 640,
243
- height: 480,
244
- timelineWidth: 640,
245
- timelineHeight: 480,
246
- panelWidth: 380,
247
- panelHeight: 480,
248
- scrollbarWidth: 0,
249
- timelineRef: { current: null },
250
- scrollSnapshotRef: { current: undefined },
251
- memoCacheRef: { current: new Map() },
252
- getQuickLinks: () => [],
253
- withPanel: false,
254
- isMobile: false,
255
- };
256
-
257
- const getMinScale = (state: TraceViewerState): number => {
258
- return (state.timelineWidth - state.scrollbarWidth) / state.root.duration;
259
- };
260
-
261
- export const TraceViewerContext = createContext<TraceViewerContextProps>({
262
- state: initialState,
263
- dispatch: () => {
264
- // noop
265
- },
266
- });
267
- TraceViewerContext.displayName = 'TraceViewerContext';
268
-
269
- const reducer: Reducer<TraceViewerState, TraceViewerAction> = (
270
- state,
271
- action
272
- ) => {
273
- switch (action.type) {
274
- case 'setRoot':
275
- state.scrollSnapshotRef.current = undefined;
276
- state.memoCacheRef.current.clear();
277
- return reducer(
278
- {
279
- ...state,
280
- root: action.root,
281
- spanMap: action.spanMap,
282
- resourceMap: Object.fromEntries(
283
- action.resources.map(({ name, attributes }) => [name, attributes])
284
- ),
285
- },
286
- {
287
- type: 'detectBaseScale',
288
- }
289
- );
290
- case 'setSize': {
291
- const lowerHeight =
292
- action.height - MAP_HEIGHT - SEARCH_HEIGHT - 3 * SEARCH_GAP;
293
-
294
- const isMobile = state.withPanel && action.width <= 768;
295
-
296
- let newState = {
297
- ...state,
298
- width: action.width,
299
- height: action.height,
300
- timelineWidth:
301
- action.width -
302
- Number(Boolean(state.selected && state.withPanel && !isMobile)) *
303
- state.panelWidth,
304
- timelineHeight: lowerHeight,
305
- panelHeight: lowerHeight,
306
- isMobile,
307
- };
308
-
309
- if (newState.width !== state.width) {
310
- newState = reducer(newState, {
311
- type: 'detectBaseScale',
312
- });
313
- }
314
-
315
- return newState;
316
- }
317
- case 'setPanelWidth': {
318
- const panelWidth = Math.max(
319
- 240,
320
- Math.min(action.width, state.width - 240)
321
- );
322
- const timelineWidth =
323
- state.withPanel && state.selected && !state.isMobile
324
- ? state.width - panelWidth
325
- : state.width;
326
- return reducer(
327
- {
328
- ...state,
329
- timelineWidth,
330
- panelWidth,
331
- },
332
- {
333
- type: 'detectBaseScale',
334
- }
335
- );
336
- }
337
- case 'setFilter':
338
- return {
339
- ...state,
340
- filter: action.filter,
341
- };
342
- case 'deselect':
343
- return reducer(
344
- {
345
- ...state,
346
- selected: null,
347
- timelineWidth: state.width,
348
- },
349
- {
350
- type: 'detectBaseScale',
351
- }
352
- );
353
- case 'select': {
354
- const node = state.spanMap[action.id];
355
- if (!node) {
356
- return state;
357
- }
23
+ const ActiveSpanContext = createContext<ActiveSpanContextValue | null>(null);
24
+ ActiveSpanContext.displayName = 'ActiveSpanContext';
358
25
 
359
- return reducer(
360
- {
361
- ...state,
362
- selected: node,
363
- timelineWidth:
364
- state.width -
365
- (state.withPanel && !state.isMobile ? state.panelWidth : 0),
366
- },
367
- {
368
- type: 'detectBaseScale',
369
- }
370
- );
371
- }
372
- case 'escape': {
373
- if (state.selected) {
374
- return reducer(state, {
375
- type: 'deselect',
376
- });
377
- }
378
- return reducer(state, {
379
- type: 'resetScale',
380
- });
381
- }
382
- case 'toggleSelection': {
383
- let newState = state;
384
- if (state.selected) {
385
- newState = reducer(newState, {
386
- type: 'deselect',
387
- });
388
- }
389
- if (state.selected?.span.spanId === action.id) {
390
- return newState;
391
- }
392
- return reducer(newState, {
393
- type: 'select',
394
- id: action.id,
395
- });
396
- }
397
- case 'detectBaseScale': {
398
- const baseScale =
399
- (state.timelineWidth - state.scrollbarWidth) / state.root.duration;
26
+ export function ActiveSpanProvider({
27
+ spans,
28
+ children,
29
+ }: {
30
+ spans: Span[];
31
+ children: ReactNode;
32
+ }) {
33
+ const [activeSpanId, setActiveSpanId] = useState<string | null>(null);
400
34
 
401
- return reducer(
402
- {
403
- ...state,
404
- baseScale,
405
- scale: baseScale * state.scaleRatio,
406
- },
407
- {
408
- type: 'minScale',
409
- }
410
- );
411
- }
412
- case 'setScale':
413
- return {
414
- ...state,
415
- scaleRatio: action.scale,
416
- scale: state.baseScale * action.scale,
417
- };
418
- case 'resetScale':
419
- return reducer(state, {
420
- type: 'scaleToRange',
421
- t1: state.root.startTime,
422
- t2: state.root.endTime,
423
- });
424
- case 'scaleToNode': {
425
- const node = state.spanMap[action.id];
426
- if (!node) {
427
- return state;
35
+ useEffect(() => {
36
+ setActiveSpanId((currentSpanId) => {
37
+ if (!currentSpanId) {
38
+ return null;
428
39
  }
429
- return reducer(
430
- reducer(state, {
431
- type: 'setScale',
432
- scale:
433
- (state.width -
434
- state.scrollbarWidth -
435
- (state.withPanel && !state.isMobile ? state.panelWidth : 0)) /
436
- node.duration /
437
- state.baseScale,
438
- }),
439
- {
440
- type: 'setScrollSnapshot',
441
- anchorT: node.startTime - state.root.startTime,
442
- anchorX: 0,
443
- }
444
- );
445
- }
446
- case 'scaleToRange': {
447
- const duration = Math.abs(action.t1 - action.t2);
448
40
 
449
- return reducer(
450
- reducer(state, {
451
- type: 'setScale',
452
- scale:
453
- (state.width -
454
- state.scrollbarWidth -
455
- (state.selected && state.withPanel ? state.panelWidth : 0)) /
456
- duration /
457
- state.baseScale,
458
- }),
459
- {
460
- type: 'setScrollSnapshot',
461
- anchorT: Math.min(action.t1, action.t2) - state.root.startTime,
462
- anchorX: 0,
463
- }
41
+ const hasCurrentSpan = spans.some(
42
+ (span) => span.spanId === currentSpanId
464
43
  );
465
- }
466
- case 'adjustScaleRatio': {
467
- let { scaleRatio } = state;
468
- switch (action.direction) {
469
- case -1:
470
- scaleRatio *= 0.8;
471
- break;
472
- case 1:
473
- scaleRatio *= 1.25;
474
- break;
475
- default:
476
- scaleRatio = 1;
477
- break;
44
+ if (hasCurrentSpan) {
45
+ return currentSpanId;
478
46
  }
479
47
 
480
- const $timeline = state.timelineRef.current;
481
- if (!$timeline) {
482
- console.warn('timelineRef is null');
483
- return state;
484
- }
485
-
486
- const { clientWidth, scrollLeft } = $timeline;
487
-
488
- return reducer(
489
- reducer(
490
- {
491
- ...state,
492
- scaleRatio,
493
- scale: state.baseScale * scaleRatio,
494
- },
495
- {
496
- type: 'minScale',
497
- }
498
- ),
499
- {
500
- type: 'setScrollSnapshot',
501
- anchorT: (scrollLeft + clientWidth * 0.5) / state.scale,
502
- anchorX: clientWidth * 0.5,
503
- }
504
- );
505
- }
506
- case 'trackpadScale': {
507
- const minScaleRatio = getMinScale(state) / state.baseScale;
508
- const scaleRatio = Math.max(
509
- minScaleRatio,
510
- state.scaleRatio *
511
- (1 +
512
- 0.2 * Math.sign(action.delta) * Math.sqrt(Math.abs(action.delta)))
513
- );
514
-
515
- return reducer(
516
- {
517
- ...state,
518
- scaleRatio,
519
- scale: state.baseScale * scaleRatio,
520
- },
521
- {
522
- type: 'setScrollSnapshot',
523
- anchorT: action.anchorT,
524
- anchorX: action.anchorX,
525
- }
526
- );
527
- }
528
- case 'minScale': {
529
- const minScale = getMinScale(state);
530
- if (state.scale >= minScale) return state;
531
- return {
532
- ...state,
533
- scale: minScale,
534
- scaleRatio: minScale / state.baseScale,
535
- };
536
- }
537
- case 'setScrollSnapshot': {
538
- const $timeline = state.timelineRef.current;
539
- if (!$timeline) return state;
540
-
541
- const { anchorT, anchorX } = action;
542
-
543
- const scrollLeft = anchorT * state.scale - anchorX;
544
- const { scrollTop } = $timeline;
545
- const startRow =
546
- (scrollTop - MARKER_HEIGHT - TIMELINE_PADDING) /
547
- (ROW_HEIGHT + ROW_PADDING);
548
- const endRow =
549
- startRow + Math.ceil(state.timelineHeight / (ROW_HEIGHT + ROW_PADDING));
550
-
551
- state.scrollSnapshotRef.current = {
552
- anchorT,
553
- anchorX,
554
- scrollLeft,
555
- scrollTop,
556
- startTime: state.root.startTime + scrollLeft / state.scale,
557
- endTime:
558
- state.root.startTime +
559
- (scrollLeft + state.timelineWidth) / state.scale,
560
- startRow,
561
- endRow,
562
- scale: state.scale,
563
- };
48
+ return null;
49
+ });
50
+ }, [spans]);
564
51
 
565
- return state;
566
- }
567
- case 'setWithPanel': {
568
- if (state.withPanel === action.withPanel) return state;
569
- const timelineWidth =
570
- action.withPanel && state.selected && !state.isMobile
571
- ? state.width - state.panelWidth
572
- : state.width;
573
- return reducer(
574
- {
575
- ...state,
576
- withPanel: action.withPanel,
577
- timelineWidth,
578
- },
579
- {
580
- type: 'detectBaseScale',
581
- }
582
- );
52
+ const activeSpan = useMemo(() => {
53
+ if (!activeSpanId) {
54
+ return null;
583
55
  }
584
- case 'forceRender':
585
- state.memoCacheRef.current.set('', {});
586
- return {
587
- ...state,
588
- };
589
- case 'updateRoot':
590
- // Incremental update: preserve scroll snapshot and only invalidate
591
- // memo cache for spans whose data may have changed
592
- state.memoCacheRef.current.set('', {});
593
- return reducer(
594
- {
595
- ...state,
596
- root: action.root,
597
- spanMap: action.spanMap,
598
- resourceMap: Object.fromEntries(
599
- action.resources.map(({ name, attributes }) => [name, attributes])
600
- ),
601
- },
602
- {
603
- type: 'detectBaseScale',
604
- }
605
- );
606
- }
607
- };
608
56
 
609
- export function TraceViewerContextProvider({
610
- getQuickLinks,
611
- withPanel = false,
612
- children,
613
- customSpanClassNameFunc,
614
- customSpanEventClassNameFunc,
615
- customPanelComponent = null,
616
- }: {
617
- getQuickLinks?: GetQuickLinks;
618
- withPanel?: boolean;
619
- children: ReactNode;
620
- customSpanClassNameFunc?: (span: SpanNode) => string;
621
- customSpanEventClassNameFunc?: (event: VisibleSpanEvent) => string;
622
- customPanelComponent?: ReactNode;
623
- }): ReactNode {
624
- const timelineRef = useRef<HTMLDivElement>(null);
625
- const scrollSnapshotRef = useRef<ScrollSnapshot>(undefined);
626
- const getQuickLinksRef = useRef(getQuickLinks);
627
- getQuickLinksRef.current = getQuickLinks;
628
- const memoCacheRef = useRef(new Map<string, MemoCacheKey>());
629
- const quickLinksCache = useRef(new Map<string, QuickLink[]>());
630
- const [state, dispatch] = useReducer(reducer, initialState, (initial) => {
631
- return {
632
- ...initial,
633
- scrollbarWidth: detectScrollbarWidth(),
634
- timelineRef,
635
- scrollSnapshotRef,
636
- customSpanClassNameFunc,
637
- customSpanEventClassNameFunc,
638
- memoCacheRef,
639
- withPanel,
640
- getQuickLinks: (span) => {
641
- const cacheKey = span.spanId;
642
- const existing = quickLinksCache.current.get(cacheKey);
643
- if (existing) return existing;
57
+ return spans.find((span) => span.spanId === activeSpanId) ?? null;
58
+ }, [activeSpanId, spans]);
644
59
 
645
- const value = getQuickLinksRef.current?.(span) || [];
646
- quickLinksCache.current.set(cacheKey, value);
647
- return value;
648
- },
649
- };
650
- });
60
+ const setActiveSpan = useCallback((spanId: string) => {
61
+ setActiveSpanId(spanId);
62
+ }, []);
651
63
 
652
- useEffect(
653
- () =>
654
- dispatch({
655
- type: 'setWithPanel',
656
- withPanel,
657
- }),
658
- [withPanel]
659
- );
64
+ const clearActiveSpan = useCallback(() => {
65
+ setActiveSpanId(null);
66
+ }, []);
660
67
 
661
- const value: TraceViewerContextProps = useMemo(
662
- () => ({ state, dispatch }),
663
- [state, dispatch]
68
+ const value = useMemo<ActiveSpanContextValue>(
69
+ () => ({
70
+ activeSpanId,
71
+ activeSpan,
72
+ spans,
73
+ setActiveSpan,
74
+ clearActiveSpan,
75
+ }),
76
+ [activeSpanId, activeSpan, spans, setActiveSpan, clearActiveSpan]
664
77
  );
665
78
 
666
79
  return (
667
- <CustomPanelContext.Provider value={customPanelComponent}>
668
- <TraceViewerContext.Provider value={value}>
669
- {children}
670
- </TraceViewerContext.Provider>
671
- </CustomPanelContext.Provider>
80
+ <ActiveSpanContext.Provider value={value}>
81
+ {children}
82
+ </ActiveSpanContext.Provider>
672
83
  );
673
84
  }
674
85
 
675
- export const useTraceViewer = (): TraceViewerContextProps =>
676
- useContext(TraceViewerContext);
677
-
678
- /**
679
- * Separate context for the custom panel component. This is intentionally
680
- * outside the useReducer state so that the panel re-renders reactively
681
- * when props like spanDetailData change.
682
- */
683
- const CustomPanelContext = createContext<ReactNode | null>(null);
86
+ export const useActiveSpan = (): ActiveSpanContextValue => {
87
+ const context = useContext(ActiveSpanContext);
88
+ if (!context) {
89
+ throw new Error('useActiveSpan must be used within ActiveSpanProvider');
90
+ }
684
91
 
685
- export const useCustomPanelComponent = (): ReactNode | null =>
686
- useContext(CustomPanelContext);
92
+ return context;
93
+ };