@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,345 +0,0 @@
1
- 'use client';
2
- import { useEffect, useRef, useState } from 'react';
3
- import { useTraceViewer } from '../context';
4
- import { MARKER_HEIGHT, ROW_HEIGHT, ROW_PADDING, TIMELINE_PADDING, } from './constants';
5
- import { adjustSpanVisibility } from './tree';
6
- function emptyArrayInit() {
7
- return [];
8
- }
9
- export const useStreamingSpans = (highlightedSpans, eagerRender = false) => {
10
- const { state, dispatch } = useTraceViewer();
11
- const { root, filter: ctxFilter, scale, timelineRef, timelineWidth, spanMap, scrollSnapshotRef, selected, memoCacheRef, } = state;
12
- const timelineHeight = useStableValue(state.timelineHeight);
13
- const counterRef = useRef(0);
14
- const [rows, setRows] = useState(emptyArrayInit);
15
- const [visibleSpans, setVisibleSpans] = useState(emptyArrayInit);
16
- const [visibleEvents, setVisibleEvents] = useState(emptyArrayInit);
17
- const [resultScale, setResultScale] = useState(-1);
18
- const updateFilterRef = useRef(undefined);
19
- useEffect(() => updateFilterRef.current?.(ctxFilter), [ctxFilter]);
20
- useEffect(() => {
21
- if (!highlightedSpans?.length)
22
- return;
23
- for (const row of rows) {
24
- for (const node of row) {
25
- const isHighlighted = highlightedSpans.includes(node.span.spanId);
26
- if (node.isHighlighted === isHighlighted)
27
- continue;
28
- node.isHighlighted = isHighlighted;
29
- memoCacheRef.current.set(node.span.spanId, {});
30
- }
31
- }
32
- dispatch({
33
- type: 'forceRender',
34
- });
35
- }, [rows, highlightedSpans, dispatch, memoCacheRef]);
36
- useEffect(() => {
37
- if (!root.startTime)
38
- return;
39
- const worker = new Worker(new URL('../worker', import.meta.url), {
40
- type: 'module',
41
- });
42
- let requestId = ++counterRef.current;
43
- const onMessage = (event) => {
44
- const data = event.data;
45
- switch (data.type) {
46
- case 'setRowsResult': {
47
- if (data?.requestId !== requestId)
48
- return;
49
- if (data.isEnd) {
50
- for (const row of data.rows) {
51
- for (const node of row) {
52
- // Ensure that we remap to the original span to reduce memory overhead
53
- // and confusion down the line
54
- node.span = spanMap[node.span.spanId]?.span ?? node.span;
55
- }
56
- }
57
- }
58
- setRows(data.rows);
59
- break;
60
- }
61
- case 'updateHighlight': {
62
- if (data?.requestId !== requestId)
63
- return;
64
- const { matches } = data;
65
- setRows((previous) => {
66
- for (const row of previous) {
67
- for (const node of row) {
68
- const isHighlighted = matches.has(node.span.spanId);
69
- if (node.isHighlighted === isHighlighted)
70
- continue;
71
- node.isHighlighted = isHighlighted;
72
- memoCacheRef.current.set(node.span.spanId, {});
73
- }
74
- }
75
- return previous;
76
- });
77
- dispatch({
78
- type: 'forceRender',
79
- });
80
- break;
81
- }
82
- default:
83
- break;
84
- }
85
- };
86
- worker.addEventListener('message', onMessage);
87
- const message = {
88
- requestId,
89
- type: 'calculateSpanPositions',
90
- root,
91
- };
92
- worker.postMessage(message);
93
- updateFilterRef.current = (_filter) => {
94
- const filter = _filter.trim().toLocaleLowerCase();
95
- if (!filter) {
96
- setRows((previous) => previous.map((row) => row.map((node) => {
97
- node.isHighlighted = undefined;
98
- return {
99
- ...node,
100
- };
101
- })));
102
- return;
103
- }
104
- requestId = ++counterRef.current;
105
- const filterMessage = {
106
- type: 'filterSpans',
107
- requestId,
108
- root,
109
- filter,
110
- };
111
- worker.postMessage(filterMessage);
112
- };
113
- return () => {
114
- worker.terminate();
115
- };
116
- }, [root, spanMap, dispatch, memoCacheRef]);
117
- useEffect(() => {
118
- if (!rows.length)
119
- return;
120
- if (eagerRender) {
121
- const visible = [];
122
- const events = [];
123
- for (const row of rows) {
124
- for (const span of row) {
125
- if (!adjustSpanVisibility(span, scale))
126
- continue;
127
- visible.push(span);
128
- if (span.events) {
129
- events.push(...span.events);
130
- }
131
- }
132
- }
133
- setVisibleSpans(visible);
134
- setVisibleEvents(events);
135
- setResultScale(scale);
136
- return;
137
- }
138
- const $timeline = timelineRef.current;
139
- let snapshot = scrollSnapshotRef.current;
140
- let hasScrolled = false;
141
- let isDone = false;
142
- let maxD = 0;
143
- let currentD = 0;
144
- const overscan = Math.max(500, timelineWidth * 0.5);
145
- const queue = new Array(rows.length).fill(null);
146
- const buildQueue = () => {
147
- isDone = true;
148
- const lastRow = Math.min(1 + currentD + Math.ceil(snapshot?.endRow ?? Number.POSITIVE_INFINITY), rows.length);
149
- for (let i = lastRow; i--;) {
150
- if (queue[i])
151
- continue;
152
- const rowDelta = getRowDelta(i);
153
- if (Math.abs(rowDelta) > currentD) {
154
- isDone = false;
155
- if (rowDelta > 0) {
156
- continue;
157
- }
158
- else {
159
- break;
160
- }
161
- }
162
- const queueRow = [];
163
- const row = rows[i];
164
- if (!row)
165
- continue;
166
- for (const span of row) {
167
- if (!adjustSpanVisibility(span, scale))
168
- continue;
169
- const d = getDistance(span);
170
- maxD = Math.max(d, maxD);
171
- queueRow.push({
172
- d,
173
- span,
174
- });
175
- }
176
- queue[i] = queueRow;
177
- }
178
- };
179
- /**
180
- * This returns the signed distance between the row and the targeted rows
181
- */
182
- const getRowDelta = (row) => {
183
- if (!snapshot)
184
- return 0;
185
- if (row < snapshot.startRow) {
186
- return row - snapshot.startRow;
187
- }
188
- else if (row > snapshot.endRow) {
189
- return row - snapshot.endRow;
190
- }
191
- return 0;
192
- };
193
- const getDistance = (span) => {
194
- if (!snapshot)
195
- return 0;
196
- let xDistance = 0;
197
- if (span.endTime < snapshot.startTime) {
198
- xDistance = snapshot.startTime - span.endTime;
199
- }
200
- else if (span.startTime > snapshot.endTime) {
201
- xDistance = span.startTime - snapshot.endTime;
202
- }
203
- const yDistance = Math.abs(getRowDelta(span.row));
204
- if (!xDistance && !yDistance)
205
- return 0;
206
- return Math.sqrt((xDistance / scale) ** 2 + (yDistance * ROW_HEIGHT + ROW_PADDING) ** 2);
207
- };
208
- const updateSnapshot = () => {
209
- if (!$timeline)
210
- return;
211
- const { scrollLeft, scrollTop } = $timeline;
212
- const anchorX = 0;
213
- const anchorT = scrollLeft / scale;
214
- const startRow = (scrollTop - MARKER_HEIGHT - TIMELINE_PADDING) /
215
- (ROW_HEIGHT + ROW_PADDING);
216
- const endRow = startRow + Math.ceil(timelineHeight / (ROW_HEIGHT + ROW_PADDING));
217
- snapshot = {
218
- anchorT,
219
- anchorX,
220
- scrollLeft,
221
- scrollTop,
222
- startTime: root.startTime + scrollLeft / scale,
223
- endTime: root.startTime + (scrollLeft + timelineWidth) / scale,
224
- startRow,
225
- endRow,
226
- scale,
227
- };
228
- scrollSnapshotRef.current = snapshot;
229
- for (let i = queue.length; i--;) {
230
- queue[i] = null;
231
- }
232
- };
233
- let nextFrame = 0;
234
- const onFrame = () => {
235
- if (hasScrolled || !snapshot) {
236
- hasScrolled = false;
237
- updateSnapshot();
238
- }
239
- buildQueue();
240
- const visible = [];
241
- const events = [];
242
- for (const row of queue) {
243
- if (!row)
244
- continue;
245
- for (const { d, span } of row) {
246
- if (d > currentD)
247
- continue;
248
- visible.push(span);
249
- if (span.events) {
250
- events.push(...span.events);
251
- }
252
- }
253
- }
254
- if (currentD < overscan && (!isDone || currentD < maxD)) {
255
- currentD = Math.min(overscan, currentD + 100);
256
- nextFrame = requestAnimationFrame(onFrame);
257
- }
258
- setVisibleSpans(visible);
259
- setVisibleEvents(events);
260
- setResultScale(scale);
261
- };
262
- onFrame();
263
- let ignoreT = Date.now();
264
- const onWheel = (event) => {
265
- if (event.ctrlKey || event.metaKey) {
266
- ignoreT = Date.now();
267
- }
268
- };
269
- $timeline?.addEventListener('wheel', onWheel);
270
- const onScroll = () => {
271
- if (Date.now() - ignoreT <= 50)
272
- return;
273
- hasScrolled = true;
274
- cancelAnimationFrame(nextFrame);
275
- nextFrame = requestAnimationFrame(onFrame);
276
- };
277
- $timeline?.addEventListener('scroll', onScroll);
278
- return () => {
279
- cancelAnimationFrame(nextFrame);
280
- $timeline?.removeEventListener('wheel', onWheel);
281
- $timeline?.removeEventListener('scroll', onScroll);
282
- };
283
- }, [
284
- rows,
285
- root,
286
- scale,
287
- scrollSnapshotRef,
288
- timelineRef,
289
- timelineWidth,
290
- timelineHeight,
291
- eagerRender,
292
- ]);
293
- useEffect(() => {
294
- if (!selected)
295
- return;
296
- let span;
297
- for (const x of visibleSpans) {
298
- if (x.span.spanId === selected.span.spanId) {
299
- span = x;
300
- break;
301
- }
302
- }
303
- const $span = span?.ref?.current;
304
- if (!span || !$span)
305
- return;
306
- span.isSelected = true;
307
- $span.setAttribute('data-selected', '');
308
- return () => {
309
- span.isSelected = false;
310
- $span.removeAttribute('data-selected');
311
- };
312
- }, [visibleSpans, selected]);
313
- return {
314
- rows,
315
- spans: visibleSpans,
316
- events: visibleEvents,
317
- scale: resultScale,
318
- };
319
- };
320
- /**
321
- * This hook keeps returning the same value until the current value
322
- * has been stable for a few frames in a row
323
- */
324
- function useStableValue(value) {
325
- const [cached, setCached] = useState(value);
326
- useEffect(() => {
327
- if (cached === value)
328
- return;
329
- let frameCount = 0;
330
- let nextFrame = 0;
331
- const onFrame = () => {
332
- if (++frameCount <= 3) {
333
- nextFrame = requestAnimationFrame(onFrame);
334
- return;
335
- }
336
- setCached(value);
337
- };
338
- onFrame();
339
- return () => {
340
- cancelAnimationFrame(nextFrame);
341
- };
342
- }, [cached, value]);
343
- return cached;
344
- }
345
- //# sourceMappingURL=use-streaming-spans.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-streaming-spans.js","sourceRoot":"","sources":["../../../../src/components/trace-viewer/util/use-streaming-spans.ts"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport { useEffect, useRef, useState } from 'react';\nimport { useTraceViewer } from '../context';\nimport type {\n VisibleSpan,\n VisibleSpanEvent,\n WorkerRequest,\n WorkerResponse,\n} from '../types';\nimport {\n MARKER_HEIGHT,\n ROW_HEIGHT,\n ROW_PADDING,\n TIMELINE_PADDING,\n} from './constants';\nimport { adjustSpanVisibility } from './tree';\n\ntype UpdateFilter = (filter: string) => void;\n\ninterface QueuedSpan {\n /** The distance from this span to the viewport */\n d: number;\n /** The span that's waiting to be rendered */\n span: VisibleSpan;\n}\n\nfunction emptyArrayInit<T>(): T[] {\n return [];\n}\n\nexport const useStreamingSpans = (\n highlightedSpans?: string[],\n eagerRender = false\n): {\n rows: VisibleSpan[][];\n spans: VisibleSpan[];\n events: VisibleSpanEvent[];\n scale: number;\n} => {\n const { state, dispatch } = useTraceViewer();\n const {\n root,\n filter: ctxFilter,\n scale,\n timelineRef,\n timelineWidth,\n spanMap,\n scrollSnapshotRef,\n selected,\n memoCacheRef,\n } = state;\n const timelineHeight = useStableValue(state.timelineHeight);\n const counterRef = useRef(0);\n const [rows, setRows] = useState<VisibleSpan[][]>(emptyArrayInit);\n const [visibleSpans, setVisibleSpans] =\n useState<VisibleSpan[]>(emptyArrayInit);\n const [visibleEvents, setVisibleEvents] =\n useState<VisibleSpanEvent[]>(emptyArrayInit);\n const [resultScale, setResultScale] = useState(-1);\n\n const updateFilterRef = useRef<UpdateFilter>(undefined);\n useEffect(() => updateFilterRef.current?.(ctxFilter), [ctxFilter]);\n\n useEffect(() => {\n if (!highlightedSpans?.length) return;\n\n for (const row of rows) {\n for (const node of row) {\n const isHighlighted = highlightedSpans.includes(node.span.spanId);\n if (node.isHighlighted === isHighlighted) continue;\n node.isHighlighted = isHighlighted;\n memoCacheRef.current.set(node.span.spanId, {});\n }\n }\n dispatch({\n type: 'forceRender',\n });\n }, [rows, highlightedSpans, dispatch, memoCacheRef]);\n\n useEffect(() => {\n if (!root.startTime) return;\n\n const worker = new Worker(new URL('../worker', import.meta.url), {\n type: 'module',\n });\n let requestId = ++counterRef.current;\n const onMessage = (event: MessageEvent): void => {\n const data = event.data as WorkerResponse;\n\n switch (data.type) {\n case 'setRowsResult': {\n if (data?.requestId !== requestId) return;\n if (data.isEnd) {\n for (const row of data.rows) {\n for (const node of row) {\n // Ensure that we remap to the original span to reduce memory overhead\n // and confusion down the line\n node.span = spanMap[node.span.spanId]?.span ?? node.span;\n }\n }\n }\n setRows(data.rows);\n break;\n }\n case 'updateHighlight': {\n if (data?.requestId !== requestId) return;\n const { matches } = data;\n setRows((previous) => {\n for (const row of previous) {\n for (const node of row) {\n const isHighlighted = matches.has(node.span.spanId);\n if (node.isHighlighted === isHighlighted) continue;\n node.isHighlighted = isHighlighted;\n memoCacheRef.current.set(node.span.spanId, {});\n }\n }\n return previous;\n });\n dispatch({\n type: 'forceRender',\n });\n break;\n }\n default:\n break;\n }\n };\n worker.addEventListener('message', onMessage);\n\n const message: WorkerRequest = {\n requestId,\n type: 'calculateSpanPositions',\n root,\n };\n worker.postMessage(message);\n\n updateFilterRef.current = (_filter) => {\n const filter = _filter.trim().toLocaleLowerCase();\n if (!filter) {\n setRows((previous) =>\n previous.map((row) =>\n row.map((node) => {\n node.isHighlighted = undefined;\n return {\n ...node,\n };\n })\n )\n );\n return;\n }\n\n requestId = ++counterRef.current;\n const filterMessage: WorkerRequest = {\n type: 'filterSpans',\n requestId,\n root,\n filter,\n };\n worker.postMessage(filterMessage);\n };\n\n return () => {\n worker.terminate();\n };\n }, [root, spanMap, dispatch, memoCacheRef]);\n\n useEffect(() => {\n if (!rows.length) return;\n\n if (eagerRender) {\n const visible: VisibleSpan[] = [];\n const events: VisibleSpanEvent[] = [];\n for (const row of rows) {\n for (const span of row) {\n if (!adjustSpanVisibility(span, scale)) continue;\n visible.push(span);\n if (span.events) {\n events.push(...span.events);\n }\n }\n }\n setVisibleSpans(visible);\n setVisibleEvents(events);\n setResultScale(scale);\n return;\n }\n\n const $timeline = timelineRef.current;\n let snapshot = scrollSnapshotRef.current;\n let hasScrolled = false;\n let isDone = false;\n let maxD = 0;\n let currentD = 0;\n const overscan = Math.max(500, timelineWidth * 0.5);\n const queue = new Array<QueuedSpan[] | null>(rows.length).fill(null);\n\n const buildQueue = (): void => {\n isDone = true;\n\n const lastRow = Math.min(\n 1 + currentD + Math.ceil(snapshot?.endRow ?? Number.POSITIVE_INFINITY),\n rows.length\n );\n for (let i = lastRow; i--; ) {\n if (queue[i]) continue;\n const rowDelta = getRowDelta(i);\n if (Math.abs(rowDelta) > currentD) {\n isDone = false;\n if (rowDelta > 0) {\n continue;\n } else {\n break;\n }\n }\n\n const queueRow: QueuedSpan[] = [];\n const row = rows[i];\n if (!row) continue;\n\n for (const span of row) {\n if (!adjustSpanVisibility(span, scale)) continue;\n\n const d = getDistance(span);\n maxD = Math.max(d, maxD);\n\n queueRow.push({\n d,\n span,\n });\n }\n\n queue[i] = queueRow;\n }\n };\n\n /**\n * This returns the signed distance between the row and the targeted rows\n */\n const getRowDelta = (row: number): number => {\n if (!snapshot) return 0;\n\n if (row < snapshot.startRow) {\n return row - snapshot.startRow;\n } else if (row > snapshot.endRow) {\n return row - snapshot.endRow;\n }\n\n return 0;\n };\n\n const getDistance = (span: VisibleSpan): number => {\n if (!snapshot) return 0;\n\n let xDistance = 0;\n if (span.endTime < snapshot.startTime) {\n xDistance = snapshot.startTime - span.endTime;\n } else if (span.startTime > snapshot.endTime) {\n xDistance = span.startTime - snapshot.endTime;\n }\n\n const yDistance = Math.abs(getRowDelta(span.row));\n\n if (!xDistance && !yDistance) return 0;\n\n return Math.sqrt(\n (xDistance / scale) ** 2 + (yDistance * ROW_HEIGHT + ROW_PADDING) ** 2\n );\n };\n\n const updateSnapshot = (): void => {\n if (!$timeline) return;\n\n const { scrollLeft, scrollTop } = $timeline;\n const anchorX = 0;\n const anchorT = scrollLeft / scale;\n const startRow =\n (scrollTop - MARKER_HEIGHT - TIMELINE_PADDING) /\n (ROW_HEIGHT + ROW_PADDING);\n const endRow =\n startRow + Math.ceil(timelineHeight / (ROW_HEIGHT + ROW_PADDING));\n\n snapshot = {\n anchorT,\n anchorX,\n scrollLeft,\n scrollTop,\n startTime: root.startTime + scrollLeft / scale,\n endTime: root.startTime + (scrollLeft + timelineWidth) / scale,\n startRow,\n endRow,\n scale,\n };\n scrollSnapshotRef.current = snapshot;\n\n for (let i = queue.length; i--; ) {\n queue[i] = null;\n }\n };\n\n let nextFrame = 0;\n const onFrame = (): void => {\n if (hasScrolled || !snapshot) {\n hasScrolled = false;\n updateSnapshot();\n }\n buildQueue();\n const visible: VisibleSpan[] = [];\n const events: VisibleSpanEvent[] = [];\n for (const row of queue) {\n if (!row) continue;\n\n for (const { d, span } of row) {\n if (d > currentD) continue;\n visible.push(span);\n if (span.events) {\n events.push(...span.events);\n }\n }\n }\n\n if (currentD < overscan && (!isDone || currentD < maxD)) {\n currentD = Math.min(overscan, currentD + 100);\n nextFrame = requestAnimationFrame(onFrame);\n }\n\n setVisibleSpans(visible);\n setVisibleEvents(events);\n setResultScale(scale);\n };\n onFrame();\n\n let ignoreT = Date.now();\n const onWheel = (event: WheelEvent): void => {\n if (event.ctrlKey || event.metaKey) {\n ignoreT = Date.now();\n }\n };\n $timeline?.addEventListener('wheel', onWheel);\n\n const onScroll = (): void => {\n if (Date.now() - ignoreT <= 50) return;\n\n hasScrolled = true;\n cancelAnimationFrame(nextFrame);\n nextFrame = requestAnimationFrame(onFrame);\n };\n $timeline?.addEventListener('scroll', onScroll);\n\n return () => {\n cancelAnimationFrame(nextFrame);\n $timeline?.removeEventListener('wheel', onWheel);\n $timeline?.removeEventListener('scroll', onScroll);\n };\n }, [\n rows,\n root,\n scale,\n scrollSnapshotRef,\n timelineRef,\n timelineWidth,\n timelineHeight,\n eagerRender,\n ]);\n\n useEffect(() => {\n if (!selected) return;\n\n let span: VisibleSpan | undefined;\n for (const x of visibleSpans) {\n if (x.span.spanId === selected.span.spanId) {\n span = x;\n break;\n }\n }\n\n const $span = span?.ref?.current;\n if (!span || !$span) return;\n\n span.isSelected = true;\n $span.setAttribute('data-selected', '');\n\n return () => {\n span.isSelected = false;\n $span.removeAttribute('data-selected');\n };\n }, [visibleSpans, selected]);\n\n return {\n rows,\n spans: visibleSpans,\n events: visibleEvents,\n scale: resultScale,\n };\n};\n\n/**\n * This hook keeps returning the same value until the current value\n * has been stable for a few frames in a row\n */\nfunction useStableValue<T>(value: T): T {\n const [cached, setCached] = useState(value);\n\n useEffect(() => {\n if (cached === value) return;\n\n let frameCount = 0;\n let nextFrame = 0;\n const onFrame = (): void => {\n if (++frameCount <= 3) {\n nextFrame = requestAnimationFrame(onFrame);\n return;\n }\n\n setCached(value);\n };\n onFrame();\n\n return () => {\n cancelAnimationFrame(nextFrame);\n };\n }, [cached, value]);\n\n return cached;\n}\n"]}
@@ -1,6 +0,0 @@
1
- /**
2
- * The delta is positive while zooming in, negative while zooming out
3
- */
4
- export type TrackpadZoomHandler = (delta: number) => void;
5
- export declare function useTrackpadZoom(handler: TrackpadZoomHandler): void;
6
- //# sourceMappingURL=use-trackpad-zoom.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-trackpad-zoom.d.ts","sourceRoot":"","sources":["../../../../src/components/trace-viewer/util/use-trackpad-zoom.tsx"],"names":[],"mappings":"AAIA;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;AAE1D,wBAAgB,eAAe,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAyClE"}
@@ -1,39 +0,0 @@
1
- 'use client';
2
- import { useEffect, useRef } from 'react';
3
- export function useTrackpadZoom(handler) {
4
- const handlerRef = useRef(handler);
5
- handlerRef.current = handler;
6
- useEffect(() => {
7
- let pendingDelta = 0;
8
- let nextFrame = 0;
9
- const onFrame = () => {
10
- handlerRef.current(pendingDelta);
11
- pendingDelta = 0;
12
- };
13
- const onWheel = (event) => {
14
- if (!event.ctrlKey && !event.metaKey)
15
- return;
16
- event.preventDefault();
17
- let delta = -event.deltaY;
18
- switch (event.deltaMode) {
19
- case WheelEvent.DOM_DELTA_PAGE:
20
- delta *= window.innerHeight;
21
- break;
22
- case WheelEvent.DOM_DELTA_LINE:
23
- delta *= 20;
24
- break;
25
- default:
26
- break;
27
- }
28
- pendingDelta += delta;
29
- cancelAnimationFrame(nextFrame);
30
- nextFrame = requestAnimationFrame(onFrame);
31
- };
32
- window.addEventListener('wheel', onWheel, { passive: false });
33
- return () => {
34
- window.removeEventListener('wheel', onWheel);
35
- cancelAnimationFrame(nextFrame);
36
- };
37
- }, []);
38
- }
39
- //# sourceMappingURL=use-trackpad-zoom.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-trackpad-zoom.js","sourceRoot":"","sources":["../../../../src/components/trace-viewer/util/use-trackpad-zoom.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAO1C,MAAM,UAAU,eAAe,CAAC,OAA4B;IAC1D,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IACnC,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;IAE7B,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,MAAM,OAAO,GAAG,GAAS,EAAE;YACzB,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YACjC,YAAY,GAAG,CAAC,CAAC;QACnB,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,CAAC,KAAiB,EAAQ,EAAE;YAC1C,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO;gBAAE,OAAO;YAE7C,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,KAAK,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;YAE1B,QAAQ,KAAK,CAAC,SAAS,EAAE,CAAC;gBACxB,KAAK,UAAU,CAAC,cAAc;oBAC5B,KAAK,IAAI,MAAM,CAAC,WAAW,CAAC;oBAC5B,MAAM;gBACR,KAAK,UAAU,CAAC,cAAc;oBAC5B,KAAK,IAAI,EAAE,CAAC;oBACZ,MAAM;gBACR;oBACE,MAAM;YACV,CAAC;YAED,YAAY,IAAI,KAAK,CAAC;YACtB,oBAAoB,CAAC,SAAS,CAAC,CAAC;YAChC,SAAS,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;QAC7C,CAAC,CAAC;QAEF,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QAE9D,OAAO,GAAG,EAAE;YACV,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC7C,oBAAoB,CAAC,SAAS,CAAC,CAAC;QAClC,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;AACT,CAAC","sourcesContent":["'use client';\n\nimport { useEffect, useRef } from 'react';\n\n/**\n * The delta is positive while zooming in, negative while zooming out\n */\nexport type TrackpadZoomHandler = (delta: number) => void;\n\nexport function useTrackpadZoom(handler: TrackpadZoomHandler): void {\n const handlerRef = useRef(handler);\n handlerRef.current = handler;\n\n useEffect(() => {\n let pendingDelta = 0;\n let nextFrame = 0;\n const onFrame = (): void => {\n handlerRef.current(pendingDelta);\n pendingDelta = 0;\n };\n\n const onWheel = (event: WheelEvent): void => {\n if (!event.ctrlKey && !event.metaKey) return;\n\n event.preventDefault();\n let delta = -event.deltaY;\n\n switch (event.deltaMode) {\n case WheelEvent.DOM_DELTA_PAGE:\n delta *= window.innerHeight;\n break;\n case WheelEvent.DOM_DELTA_LINE:\n delta *= 20;\n break;\n default:\n break;\n }\n\n pendingDelta += delta;\n cancelAnimationFrame(nextFrame);\n nextFrame = requestAnimationFrame(onFrame);\n };\n\n window.addEventListener('wheel', onWheel, { passive: false });\n\n return () => {\n window.removeEventListener('wheel', onWheel);\n cancelAnimationFrame(nextFrame);\n };\n }, []);\n}\n"]}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=worker.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../../src/components/trace-viewer/worker.ts"],"names":[],"mappings":""}
@@ -1,109 +0,0 @@
1
- import { addToRow } from './util/tree';
2
- // The most recent requestId
3
- let requestId = 0;
4
- self.addEventListener('message', (event) => {
5
- const data = event.data;
6
- requestId = Math.max(requestId, data?.requestId || 0);
7
- switch (data.type) {
8
- case 'calculateSpanPositions':
9
- calculateSpanPositions(data.root);
10
- break;
11
- case 'filterSpans':
12
- filterSpans(data.root, data.filter);
13
- break;
14
- default:
15
- break;
16
- }
17
- });
18
- const positionHelper = (node, pending) => {
19
- if ('parent' in node) {
20
- const n = node;
21
- n.row = -1;
22
- n.isVisible = true;
23
- pending.push(n);
24
- }
25
- const sortedChildren = node.children
26
- .slice()
27
- .sort((a, b) => a.startTime - b.startTime || b.duration - a.duration);
28
- for (const child of sortedChildren) {
29
- positionHelper(child, pending);
30
- }
31
- };
32
- const calculateSpanPositions = (root) => {
33
- const responseId = requestId;
34
- const placed = [];
35
- const pending = [];
36
- positionHelper(root, pending);
37
- let lastFlushT = Date.now() - 10;
38
- let lastFlushC = -64;
39
- let count = 0;
40
- const flush = () => {
41
- for (const row of placed) {
42
- row.sort((a, b) => a.startTime - b.startTime);
43
- }
44
- const message = {
45
- requestId: responseId,
46
- type: 'setRowsResult',
47
- rows: placed,
48
- isEnd: !pending.length,
49
- };
50
- postMessage(message);
51
- lastFlushT = Date.now();
52
- lastFlushC = count;
53
- };
54
- while (true) {
55
- const node = pending.shift();
56
- if (!node) {
57
- flush();
58
- return;
59
- }
60
- addToRow(placed, node, 0.001);
61
- ++count;
62
- if (Date.now() - lastFlushT >= 15 || count - lastFlushC >= 256) {
63
- flush();
64
- }
65
- }
66
- };
67
- const ATTR_FILTER_REGEX = /(?<=^|\s)(?<pair>(?<key>[\w.]+):(?<value>\S*))/g;
68
- const filterSpans = (root, filter) => {
69
- const responseId = requestId;
70
- const matches = new Set();
71
- const name = filter
72
- .replace(ATTR_FILTER_REGEX, '')
73
- .replace(/\s{2,}/g, ' ')
74
- .trim();
75
- const attrs = [];
76
- for (const m of filter.matchAll(ATTR_FILTER_REGEX)) {
77
- const { key = '', value = '' } = m.groups || {};
78
- attrs.push([key, value.toLocaleLowerCase()]);
79
- }
80
- const match = (span) => {
81
- const nameMatch = span.name.toLocaleLowerCase().includes(name) ||
82
- span.spanId.toLocaleLowerCase().includes(name);
83
- if (!nameMatch)
84
- return false;
85
- // TODO: support resource attribute filtering
86
- return attrs.every(([key, value]) => {
87
- const v = span.attributes[key];
88
- if (!v)
89
- return false;
90
- return String(v).toLocaleLowerCase().includes(value);
91
- });
92
- };
93
- const helper = (node) => {
94
- for (const child of node.children) {
95
- if (match(child.span)) {
96
- matches.add(child.span.spanId);
97
- }
98
- helper(child);
99
- }
100
- };
101
- helper(root);
102
- const message = {
103
- requestId: responseId,
104
- type: 'updateHighlight',
105
- matches,
106
- };
107
- postMessage(message);
108
- };
109
- //# sourceMappingURL=worker.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../../src/components/trace-viewer/worker.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n RootNode,\n Span,\n TraceNode,\n VisibleSpan,\n WorkerRequest,\n WorkerResponse,\n} from './types';\nimport { addToRow } from './util/tree';\n\n// The most recent requestId\nlet requestId = 0;\n\nself.addEventListener('message', (event) => {\n const data = event.data as WorkerRequest;\n requestId = Math.max(requestId, data?.requestId || 0);\n\n switch (data.type) {\n case 'calculateSpanPositions':\n calculateSpanPositions(data.root);\n break;\n case 'filterSpans':\n filterSpans(data.root, data.filter);\n break;\n default:\n break;\n }\n});\n\nconst positionHelper = (node: TraceNode, pending: VisibleSpan[]): void => {\n if ('parent' in node) {\n const n = node as VisibleSpan;\n n.row = -1;\n n.isVisible = true;\n pending.push(n);\n }\n\n const sortedChildren = node.children\n .slice()\n .sort((a, b) => a.startTime - b.startTime || b.duration - a.duration);\n for (const child of sortedChildren) {\n positionHelper(child, pending);\n }\n};\n\nconst calculateSpanPositions = (root: RootNode): void => {\n const responseId = requestId;\n const placed: VisibleSpan[][] = [];\n const pending: VisibleSpan[] = [];\n\n positionHelper(root, pending);\n\n let lastFlushT = Date.now() - 10;\n let lastFlushC = -64;\n let count = 0;\n const flush = (): void => {\n for (const row of placed) {\n row.sort((a, b) => a.startTime - b.startTime);\n }\n const message: WorkerResponse = {\n requestId: responseId,\n type: 'setRowsResult',\n rows: placed,\n isEnd: !pending.length,\n };\n postMessage(message);\n lastFlushT = Date.now();\n lastFlushC = count;\n };\n\n while (true) {\n const node = pending.shift();\n if (!node) {\n flush();\n return;\n }\n addToRow(placed, node, 0.001);\n ++count;\n if (Date.now() - lastFlushT >= 15 || count - lastFlushC >= 256) {\n flush();\n }\n }\n};\n\nconst ATTR_FILTER_REGEX = /(?<=^|\\s)(?<pair>(?<key>[\\w.]+):(?<value>\\S*))/g;\n\nconst filterSpans = (root: RootNode, filter: string): void => {\n const responseId = requestId;\n\n const matches = new Set<string>();\n\n const name = filter\n .replace(ATTR_FILTER_REGEX, '')\n .replace(/\\s{2,}/g, ' ')\n .trim();\n const attrs: [string, string][] = [];\n for (const m of filter.matchAll(ATTR_FILTER_REGEX)) {\n const { key = '', value = '' } = m.groups || {};\n attrs.push([key, value.toLocaleLowerCase()]);\n }\n\n const match = (span: Span): boolean => {\n const nameMatch =\n span.name.toLocaleLowerCase().includes(name) ||\n span.spanId.toLocaleLowerCase().includes(name);\n if (!nameMatch) return false;\n // TODO: support resource attribute filtering\n return attrs.every(([key, value]) => {\n const v = span.attributes[key];\n if (!v) return false;\n return String(v).toLocaleLowerCase().includes(value);\n });\n };\n\n const helper = (node: TraceNode): void => {\n for (const child of node.children) {\n if (match(child.span)) {\n matches.add(child.span.spanId);\n }\n helper(child);\n }\n };\n helper(root);\n\n const message: WorkerResponse = {\n requestId: responseId,\n type: 'updateHighlight',\n matches,\n };\n postMessage(message);\n};\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"trace-viewer-new.d.ts","sourceRoot":"","sources":["../../src/components/trace-viewer-new.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAG7C,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,gCAAgC,CAAC;AAGxC,QAAA,MAAM,cAAc,GAAI,+BAIrB;IACD,GAAG,EAAE,WAAW,CAAC;IACjB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,WAAW,EAAE,uBAAuB,CAAC;CACtC,4CA2BA,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,CAAC"}
@@ -1,23 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { useMemo } from 'react';
3
- import { buildTrace } from '../lib/trace-builder';
4
- import { NewTraceViewer as NewTraceViewerComponent } from './new-trace-viewer/trace-viewer';
5
- import { SidebarDataProvider, } from './sidebar/sidebar-data-context';
6
- const NewTraceViewer = ({ run, events, sidebarData, }) => {
7
- // Build trace only when actual data changes — no timer-driven rebuilds.
8
- // Active span widths are animated imperatively by useLiveTick at 60fps.
9
- const traceWithMeta = useMemo(() => {
10
- if (!run?.runId) {
11
- return undefined;
12
- }
13
- return buildTrace(run, events, new Date());
14
- // eslint-disable-next-line react-hooks/exhaustive-deps -- `new Date()` is intentionally not a dep; useLiveTick handles live growth
15
- }, [run, events]);
16
- const trace = traceWithMeta;
17
- if (!trace) {
18
- return (_jsx("div", { className: "relative w-full h-full flex items-center justify-center", children: _jsx("div", { className: "text-gray-500 text-sm", children: "Loading trace\u2026" }) }));
19
- }
20
- return (_jsx(SidebarDataProvider, { value: sidebarData, children: _jsx("div", { className: "relative w-full h-full flex", children: _jsx(NewTraceViewerComponent, { trace: trace }) }) }));
21
- };
22
- export { NewTraceViewer };
23
- //# sourceMappingURL=trace-viewer-new.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"trace-viewer-new.js","sourceRoot":"","sources":["../../src/components/trace-viewer-new.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAGhC,OAAO,EAAE,UAAU,EAAsB,MAAM,sBAAsB,CAAC;AACtE,OAAO,EAAE,cAAc,IAAI,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC5F,OAAO,EACL,mBAAmB,GAEpB,MAAM,gCAAgC,CAAC;AAGxC,MAAM,cAAc,GAAG,CAAC,EACtB,GAAG,EACH,MAAM,EACN,WAAW,GAKZ,EAAE,EAAE;IACH,wEAAwE;IACxE,wEAAwE;IACxE,MAAM,aAAa,GAA8B,OAAO,CAAC,GAAG,EAAE;QAC5D,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC;YAChB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;QAC3C,mIAAmI;IACrI,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;IAClB,MAAM,KAAK,GAAG,aAAa,CAAC;IAE5B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CACL,cAAK,SAAS,EAAC,yDAAyD,YACtE,cAAK,SAAS,EAAC,uBAAuB,oCAAqB,GACvD,CACP,CAAC;IACJ,CAAC;IAED,OAAO,CACL,KAAC,mBAAmB,IAAC,KAAK,EAAE,WAAW,YACrC,cAAK,SAAS,EAAC,6BAA6B,YAC1C,KAAC,uBAAuB,IAAC,KAAK,EAAE,KAAc,GAAI,GAC9C,GACc,CACvB,CAAC;AACJ,CAAC,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,CAAC","sourcesContent":["import { useMemo } from 'react';\nimport type { WorkflowRun } from '@workflow/core/runtime';\nimport type { Event } from '@workflow/world';\nimport { buildTrace, type TraceWithMeta } from '../lib/trace-builder';\nimport { NewTraceViewer as NewTraceViewerComponent } from './new-trace-viewer/trace-viewer';\nimport {\n SidebarDataProvider,\n type SidebarDataContextValue,\n} from './sidebar/sidebar-data-context';\nimport type { Trace } from './trace-viewer/types';\n\nconst NewTraceViewer = ({\n run,\n events,\n sidebarData,\n}: {\n run: WorkflowRun;\n events: Event[];\n sidebarData: SidebarDataContextValue;\n}) => {\n // Build trace only when actual data changes — no timer-driven rebuilds.\n // Active span widths are animated imperatively by useLiveTick at 60fps.\n const traceWithMeta: TraceWithMeta | undefined = useMemo(() => {\n if (!run?.runId) {\n return undefined;\n }\n return buildTrace(run, events, new Date());\n // eslint-disable-next-line react-hooks/exhaustive-deps -- `new Date()` is intentionally not a dep; useLiveTick handles live growth\n }, [run, events]);\n const trace = traceWithMeta;\n\n if (!trace) {\n return (\n <div className=\"relative w-full h-full flex items-center justify-center\">\n <div className=\"text-gray-500 text-sm\">Loading trace…</div>\n </div>\n );\n }\n\n return (\n <SidebarDataProvider value={sidebarData}>\n <div className=\"relative w-full h-full flex\">\n <NewTraceViewerComponent trace={trace as Trace} />\n </div>\n </SidebarDataProvider>\n );\n};\n\nexport { NewTraceViewer };\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"alert.js","sourceRoot":"","sources":["../../../src/components/ui/alert.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAqB,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAErC,MAAM,aAAa,GAAG,GAAG,CACvB,mIAAmI,EACnI;IACE,QAAQ,EAAE;QACR,OAAO,EAAE;YACP,OAAO,EAAE,EAAE;YACX,WAAW,EACT,sEAAsE;SACzE;KACF;IACD,eAAe,EAAE;QACf,OAAO,EAAE,SAAS;KACnB;CACF,CACF,CAAC;AAEF,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAG5B,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAC3C,cACE,GAAG,EAAE,GAAG,EACR,IAAI,EAAC,OAAO,EACZ,SAAS,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,CAAC,KAChD,KAAK,GACT,CACH,CAAC,CAAC;AACH,KAAK,CAAC,WAAW,GAAG,OAAO,CAAC;AAE5B,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAGjC,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAClC,aACE,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CAAC,8CAA8C,EAAE,SAAS,CAAC,KACpE,KAAK,GACT,CACH,CAAC,CAAC;AACH,UAAU,CAAC,WAAW,GAAG,YAAY,CAAC;AAEtC,MAAM,gBAAgB,GAAG,KAAK,CAAC,UAAU,CAGvC,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAClC,cACE,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CAAC,+BAA+B,EAAE,SAAS,CAAC,KACrD,KAAK,GACT,CACH,CAAC,CAAC;AACH,gBAAgB,CAAC,WAAW,GAAG,kBAAkB,CAAC;AAElD,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,CAAC","sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\nimport * as React from 'react';\n\nimport { cn } from '../../lib/utils';\n\nconst alertVariants = cva(\n 'relative w-full rounded-lg border p-4 [&>svg~*]:pl-7 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4',\n {\n variants: {\n variant: {\n default: '',\n destructive:\n 'border-red-400 text-red-900 dark:border-red-700 [&>svg]:text-red-900',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n }\n);\n\nconst Alert = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & VariantProps<typeof alertVariants>\n>(({ className, variant, ...props }, ref) => (\n <div\n ref={ref}\n role=\"alert\"\n className={cn(alertVariants({ variant }), className)}\n {...props}\n />\n));\nAlert.displayName = 'Alert';\n\nconst AlertTitle = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h5\n ref={ref}\n className={cn('mb-1 font-medium leading-none tracking-tight', className)}\n {...props}\n />\n));\nAlertTitle.displayName = 'AlertTitle';\n\nconst AlertDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn('text-sm [&_p]:leading-relaxed', className)}\n {...props}\n />\n));\nAlertDescription.displayName = 'AlertDescription';\n\nexport { Alert, AlertTitle, AlertDescription };\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"card.js","sourceRoot":"","sources":["../../../src/components/ui/card.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAErC,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAG3B,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAClC,cACE,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CAAC,6BAA6B,EAAE,SAAS,CAAC,KACnD,KAAK,GACT,CACH,CAAC,CAAC;AACH,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC;AAE1B,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAGjC,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAClC,cACE,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CAAC,+BAA+B,EAAE,SAAS,CAAC,KACrD,KAAK,GACT,CACH,CAAC,CAAC;AACH,UAAU,CAAC,WAAW,GAAG,YAAY,CAAC;AAEtC,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAGhC,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAClC,cACE,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CACX,oDAAoD,EACpD,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAC,CAAC;AACH,SAAS,CAAC,WAAW,GAAG,WAAW,CAAC;AAEpC,MAAM,eAAe,GAAG,KAAK,CAAC,UAAU,CAGtC,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAClC,cACE,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EACnC,KAAK,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE,KAClC,KAAK,GACT,CACH,CAAC,CAAC;AACH,eAAe,CAAC,WAAW,GAAG,iBAAiB,CAAC;AAEhD,MAAM,WAAW,GAAG,KAAK,CAAC,UAAU,CAGlC,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAClC,cAAK,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC,KAAM,KAAK,GAAI,CACnE,CAAC,CAAC;AACH,WAAW,CAAC,WAAW,GAAG,aAAa,CAAC;AAExC,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAGjC,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAClC,cACE,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CAAC,4BAA4B,EAAE,SAAS,CAAC,KAClD,KAAK,GACT,CACH,CAAC,CAAC;AACH,UAAU,CAAC,WAAW,GAAG,YAAY,CAAC;AAEtC,OAAO,EACL,IAAI,EACJ,UAAU,EACV,UAAU,EACV,SAAS,EACT,eAAe,EACf,WAAW,GACZ,CAAC","sourcesContent":["'use client';\n\nimport * as React from 'react';\n\nimport { cn } from '../../lib/utils';\n\nconst Card = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn('rounded-lg border shadow-sm', className)}\n {...props}\n />\n));\nCard.displayName = 'Card';\n\nconst CardHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn('flex flex-col space-y-1.5 p-6', className)}\n {...props}\n />\n));\nCardHeader.displayName = 'CardHeader';\n\nconst CardTitle = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n 'text-2xl font-semibold leading-none tracking-tight',\n className\n )}\n {...props}\n />\n));\nCardTitle.displayName = 'CardTitle';\n\nconst CardDescription = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn('text-sm', className)}\n style={{ color: 'var(--ds-gray-900)' }}\n {...props}\n />\n));\nCardDescription.displayName = 'CardDescription';\n\nconst CardContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn('p-6 pt-0', className)} {...props} />\n));\nCardContent.displayName = 'CardContent';\n\nconst CardFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn('flex items-center p-6 pt-0', className)}\n {...props}\n />\n));\nCardFooter.displayName = 'CardFooter';\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardDescription,\n CardContent,\n};\n"]}