@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,445 +0,0 @@
1
- // ──────────────────────────────────────────────────────────────────────────
2
- // CSS class mapping (segment status → module CSS class name)
3
- // ──────────────────────────────────────────────────────────────────────────
4
- /**
5
- * Maps a SegmentStatus to the CSS module class name to use.
6
- * These class names must exist in trace-viewer.module.css.
7
- */
8
- export const SEGMENT_CLASS_MAP = {
9
- queued: 'segQueued',
10
- running: 'segRunning',
11
- failed: 'segFailed',
12
- retrying: 'segRetrying',
13
- succeeded: 'segSucceeded',
14
- waiting: 'segWaiting',
15
- sleeping: 'segSleeping',
16
- received: 'segReceived',
17
- };
18
- // ──────────────────────────────────────────────────────────────────────────
19
- // Helpers
20
- // ──────────────────────────────────────────────────────────────────────────
21
- function clampFraction(value) {
22
- return Math.max(0, Math.min(1, value));
23
- }
24
- function timeToFraction(time, spanStart, spanDuration) {
25
- if (spanDuration <= 0)
26
- return 0;
27
- return clampFraction((time - spanStart) / spanDuration);
28
- }
29
- /**
30
- * Sort events by timestamp ascending.
31
- */
32
- function sortedEvents(events) {
33
- return [...events].sort((a, b) => a.timestamp - b.timestamp);
34
- }
35
- // ──────────────────────────────────────────────────────────────────────────
36
- // Step segments
37
- // ──────────────────────────────────────────────────────────────────────────
38
- /**
39
- * Compute segments for a step span.
40
- *
41
- * Timeline: [queued] → [attempt₁ (fail)] → [retry wait] → [attempt₂ (fail)] → ... → [attemptₙ (success)]
42
- *
43
- * Events used: step_started, step_retrying, step_failed, step_completed
44
- * The final segment is 'succeeded' if no trailing step_retrying/step_failed.
45
- */
46
- function computeStepSegments(node) {
47
- const events = node.events ? sortedEvents(node.events) : [];
48
- const { startTime, duration } = node;
49
- const segments = [];
50
- if (duration <= 0)
51
- return segments;
52
- const marks = events
53
- .filter((e) => [
54
- 'step_started',
55
- 'step_retrying',
56
- 'step_failed',
57
- 'step_completed',
58
- ].includes(e.event.name))
59
- .map((e) => ({ time: e.timestamp, type: e.event.name }));
60
- if (marks.length === 0) {
61
- // No events — show entire span as running
62
- segments.push({ startFraction: 0, endFraction: 1, status: 'running' });
63
- return segments;
64
- }
65
- // Queued period: from span start to first event
66
- const firstMark = marks[0];
67
- const firstFraction = timeToFraction(firstMark.time, startTime, duration);
68
- if (firstFraction > 0.001) {
69
- segments.push({
70
- startFraction: 0,
71
- endFraction: firstFraction,
72
- status: 'queued',
73
- });
74
- }
75
- // Walk through events to build attempt/retry segments
76
- for (let i = 0; i < marks.length; i++) {
77
- const mark = marks[i];
78
- const markFraction = timeToFraction(mark.time, startTime, duration);
79
- const nextMark = marks[i + 1];
80
- const nextFraction = nextMark
81
- ? timeToFraction(nextMark.time, startTime, duration)
82
- : 1;
83
- if (mark.type === 'step_started') {
84
- // This is the start of an execution attempt.
85
- // It runs until the next event (step_retrying or step_failed) or end of span.
86
- const isLastMark = i === marks.length - 1;
87
- if (isLastMark) {
88
- // Last event is step_started — this attempt is either still running or succeeded
89
- segments.push({
90
- startFraction: markFraction,
91
- endFraction: 1,
92
- status: 'succeeded',
93
- });
94
- }
95
- else {
96
- // Attempt runs until the next event
97
- const nextType = nextMark.type;
98
- const attemptStatus = nextType === 'step_retrying' || nextType === 'step_failed'
99
- ? 'failed'
100
- : nextType === 'step_completed'
101
- ? 'succeeded'
102
- : 'running';
103
- segments.push({
104
- startFraction: markFraction,
105
- endFraction: nextFraction,
106
- status: attemptStatus,
107
- });
108
- }
109
- }
110
- else if (mark.type === 'step_retrying') {
111
- // Retry wait: from this event to the next step_started (or end)
112
- segments.push({
113
- startFraction: markFraction,
114
- endFraction: nextFraction,
115
- status: 'retrying',
116
- });
117
- }
118
- else if (mark.type === 'step_failed') {
119
- // Terminal failure: from this event to the end
120
- if (markFraction < 0.999) {
121
- segments.push({
122
- startFraction: markFraction,
123
- endFraction: 1,
124
- status: 'failed',
125
- });
126
- }
127
- }
128
- else if (mark.type === 'step_completed') {
129
- // Terminal success: do nothing here since the preceding step_started
130
- // segment already terminates at this marker.
131
- }
132
- }
133
- return segments;
134
- }
135
- // ──────────────────────────────────────────────────────────────────────────
136
- // Hook segments
137
- // ──────────────────────────────────────────────────────────────────────────
138
- /**
139
- * Compute segments for a hook span.
140
- *
141
- * Timeline: [waiting] → [received] → [disposed]
142
- */
143
- function computeHookSegments(node) {
144
- const events = node.events ? sortedEvents(node.events) : [];
145
- const { startTime, duration } = node;
146
- const segments = [];
147
- if (duration <= 0)
148
- return segments;
149
- const receivedEvent = events.find((e) => e.event.name === 'hook_received');
150
- const disposedEvent = events.find((e) => e.event.name === 'hook_disposed');
151
- if (!receivedEvent && !disposedEvent) {
152
- // Still waiting
153
- segments.push({ startFraction: 0, endFraction: 1, status: 'waiting' });
154
- return segments;
155
- }
156
- const receivedFraction = receivedEvent
157
- ? timeToFraction(receivedEvent.timestamp, startTime, duration)
158
- : null;
159
- const disposedFraction = disposedEvent
160
- ? timeToFraction(disposedEvent.timestamp, startTime, duration)
161
- : null;
162
- // Waiting period (before received)
163
- if (receivedFraction !== null && receivedFraction > 0.001) {
164
- segments.push({
165
- startFraction: 0,
166
- endFraction: receivedFraction,
167
- status: 'waiting',
168
- });
169
- }
170
- else if (receivedFraction === null && disposedFraction !== null) {
171
- // Disposed without receiving — waiting the whole time
172
- segments.push({
173
- startFraction: 0,
174
- endFraction: disposedFraction,
175
- status: 'waiting',
176
- });
177
- }
178
- // Received period
179
- if (receivedFraction !== null) {
180
- const end = disposedFraction ?? 1;
181
- segments.push({
182
- startFraction: receivedFraction,
183
- endFraction: end,
184
- status: 'received',
185
- });
186
- }
187
- // Post-disposed (if there's remaining span after disposal)
188
- if (disposedFraction !== null && disposedFraction < 0.999) {
189
- segments.push({
190
- startFraction: disposedFraction,
191
- endFraction: 1,
192
- status: 'succeeded',
193
- });
194
- }
195
- return segments;
196
- }
197
- // ──────────────────────────────────────────────────────────────────────────
198
- // Sleep segments
199
- // ──────────────────────────────────────────────────────────────────────────
200
- /**
201
- * Compute segments for a sleep span.
202
- *
203
- * Timeline: [sleeping] → [completed]
204
- */
205
- function computeSleepSegments(node) {
206
- const events = node.events ? sortedEvents(node.events) : [];
207
- const { startTime, duration } = node;
208
- const segments = [];
209
- if (duration <= 0)
210
- return segments;
211
- const completedEvent = events.find((e) => e.event.name === 'wait_completed');
212
- if (!completedEvent) {
213
- // Still sleeping
214
- segments.push({ startFraction: 0, endFraction: 1, status: 'sleeping' });
215
- return segments;
216
- }
217
- const completedFraction = timeToFraction(completedEvent.timestamp, startTime, duration);
218
- if (completedFraction > 0.001) {
219
- segments.push({
220
- startFraction: 0,
221
- endFraction: completedFraction,
222
- status: 'sleeping',
223
- });
224
- }
225
- segments.push({
226
- startFraction: completedFraction,
227
- endFraction: 1,
228
- status: 'succeeded',
229
- });
230
- return segments;
231
- }
232
- // ──────────────────────────────────────────────────────────────────────────
233
- // Run segments
234
- // ──────────────────────────────────────────────────────────────────────────
235
- /**
236
- * Compute segments for a run span.
237
- *
238
- * Timeline: [queued] → [running] → [completed/failed]
239
- *
240
- * The queued period is derived from activeStartTime (run.startedAt).
241
- * A synthetic run_started event is injected at that timestamp so
242
- * the boundary is hoverable in the trace viewer.
243
- */
244
- function computeRunSegments(node) {
245
- const events = node.events ? sortedEvents(node.events) : [];
246
- const { startTime, duration, activeStartTime } = node;
247
- const segments = [];
248
- if (duration <= 0)
249
- return segments;
250
- // V1 runs (specVersion 1) don't emit run lifecycle events (run_created,
251
- // run_started, run_completed). Detect this by checking for the absence of
252
- // run_created — it's always the first event for v2 runs and is always
253
- // loaded in the first page, so its absence reliably signals a v1 run.
254
- // For v1, fall back to the run entity's status from span.attributes.data.
255
- const hasRunCreated = events.some((e) => e.event.name === 'run_created');
256
- if (!hasRunCreated) {
257
- const runData = node.span.attributes?.data;
258
- const runStatus = runData?.status;
259
- return computeV1RunSegments(startTime, duration, activeStartTime, runStatus);
260
- }
261
- const failedEvent = events.find((e) => e.event.name === 'run_failed');
262
- const completedEvent = events.find((e) => e.event.name === 'run_completed');
263
- // Queued period (from span start to activeStartTime)
264
- let cursor = 0;
265
- if (activeStartTime && activeStartTime > startTime) {
266
- const queuedFraction = timeToFraction(activeStartTime, startTime, duration);
267
- if (queuedFraction > 0.001) {
268
- segments.push({
269
- startFraction: 0,
270
- endFraction: queuedFraction,
271
- status: 'queued',
272
- });
273
- cursor = queuedFraction;
274
- }
275
- }
276
- if (failedEvent) {
277
- const failedFraction = timeToFraction(failedEvent.timestamp, startTime, duration);
278
- // Running until failure
279
- if (failedFraction > cursor + 0.001) {
280
- segments.push({
281
- startFraction: cursor,
282
- endFraction: failedFraction,
283
- status: 'running',
284
- });
285
- }
286
- segments.push({
287
- startFraction: failedFraction,
288
- endFraction: 1,
289
- status: 'failed',
290
- });
291
- }
292
- else if (completedEvent) {
293
- const completedFraction = timeToFraction(completedEvent.timestamp, startTime, duration);
294
- if (completedFraction > cursor + 0.001) {
295
- segments.push({
296
- startFraction: cursor,
297
- endFraction: completedFraction,
298
- status: 'running',
299
- });
300
- }
301
- segments.push({
302
- startFraction: completedFraction,
303
- endFraction: 1,
304
- status: 'succeeded',
305
- });
306
- }
307
- else {
308
- // Running to completion (or terminal events haven't loaded yet)
309
- segments.push({
310
- startFraction: cursor,
311
- endFraction: 1,
312
- status: 'running',
313
- });
314
- }
315
- return segments;
316
- }
317
- /**
318
- * Compute segments for a v1 run using only the run entity's status and
319
- * activeStartTime (derived from run.startedAt). V1 runs have no run
320
- * lifecycle events, so we infer the visual segments from entity fields.
321
- */
322
- function computeV1RunSegments(startTime, duration, activeStartTime, runStatus) {
323
- const segments = [];
324
- let cursor = 0;
325
- if (activeStartTime && activeStartTime > startTime) {
326
- const queuedFraction = timeToFraction(activeStartTime, startTime, duration);
327
- if (queuedFraction > 0.001) {
328
- segments.push({
329
- startFraction: 0,
330
- endFraction: queuedFraction,
331
- status: 'queued',
332
- });
333
- cursor = queuedFraction;
334
- }
335
- }
336
- if (runStatus === 'failed') {
337
- segments.push({
338
- startFraction: cursor,
339
- endFraction: 1,
340
- status: 'failed',
341
- });
342
- }
343
- else if (runStatus === 'completed' || runStatus === 'cancelled') {
344
- segments.push({
345
- startFraction: cursor,
346
- endFraction: 1,
347
- status: 'succeeded',
348
- });
349
- }
350
- else {
351
- segments.push({
352
- startFraction: cursor,
353
- endFraction: 1,
354
- status: 'running',
355
- });
356
- }
357
- return segments;
358
- }
359
- // ──────────────────────────────────────────────────────────────────────────
360
- // Boundary computation
361
- // ──────────────────────────────────────────────────────────────────────────
362
- /** Event names to human-readable labels */
363
- const EVENT_LABELS = {
364
- step_started: 'Started',
365
- step_retrying: 'Retrying',
366
- step_failed: 'Failed',
367
- hook_created: 'Created',
368
- hook_received: 'Received',
369
- hook_disposed: 'Resolved',
370
- wait_created: 'Sleep started',
371
- wait_completed: 'Sleep completed',
372
- run_completed: 'Completed',
373
- run_failed: 'Run failed',
374
- step_completed: 'Completed',
375
- };
376
- /**
377
- * Extract boundaries from a span's events. Each boundary sits at the
378
- * fractional position of a relevant event within the span duration.
379
- * Only includes events that are used as segment boundaries (not at the
380
- * very start or very end of the span, to avoid edge clutter).
381
- */
382
- function computeBoundaries(node, relevantEventNames) {
383
- const events = node.events ? sortedEvents(node.events) : [];
384
- const { startTime, duration } = node;
385
- if (duration <= 0)
386
- return [];
387
- const boundaries = [];
388
- for (const e of events) {
389
- if (!relevantEventNames.includes(e.event.name))
390
- continue;
391
- const fraction = timeToFraction(e.timestamp, startTime, duration);
392
- // Skip boundaries at the very edges (< 1% or > 99%) to avoid clutter
393
- if (fraction < 0.01 || fraction > 0.99)
394
- continue;
395
- boundaries.push({
396
- fraction,
397
- label: EVENT_LABELS[e.event.name] ?? e.event.name,
398
- offsetMs: e.timestamp - startTime,
399
- });
400
- }
401
- return boundaries;
402
- }
403
- // ──────────────────────────────────────────────────────────────────────────
404
- // Dispatcher
405
- // ──────────────────────────────────────────────────────────────────────────
406
- /**
407
- * Compute the event-based segments and boundaries for a span based on its resource type.
408
- * Returns empty arrays for 'default' (generic OTEL) spans.
409
- */
410
- export function computeSegments(resourceType, node) {
411
- switch (resourceType) {
412
- case 'step':
413
- return {
414
- segments: computeStepSegments(node),
415
- boundaries: computeBoundaries(node, [
416
- 'step_started',
417
- 'step_retrying',
418
- 'step_failed',
419
- 'step_completed',
420
- ]),
421
- };
422
- case 'hook':
423
- return {
424
- segments: computeHookSegments(node),
425
- boundaries: computeBoundaries(node, [
426
- 'hook_created',
427
- 'hook_received',
428
- 'hook_disposed',
429
- ]),
430
- };
431
- case 'sleep':
432
- return {
433
- segments: computeSleepSegments(node),
434
- boundaries: computeBoundaries(node, ['wait_created', 'wait_completed']),
435
- };
436
- case 'run':
437
- return {
438
- segments: computeRunSegments(node),
439
- boundaries: computeBoundaries(node, ['run_completed', 'run_failed']),
440
- };
441
- default:
442
- return { segments: [], boundaries: [] };
443
- }
444
- }
445
- //# sourceMappingURL=span-segments.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"span-segments.js","sourceRoot":"","sources":["../../../../src/components/trace-viewer/components/span-segments.ts"],"names":[],"mappings":"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","sourcesContent":["import type { SpanNode, SpanNodeEvent } from '../types';\nimport type { ResourceType } from './span-strategies';\n\n// ──────────────────────────────────────────────────────────────────────────\n// Segment types\n// ──────────────────────────────────────────────────────────────────────────\n\n/**\n * Visual status of a segment within a span bar.\n *\n * - queued: Waiting to start (hatched pattern)\n * - running: Actively executing (solid blue)\n * - failed: Attempt that ended in failure (soft red)\n * - retrying: Waiting between retry attempts (hatched pattern)\n * - succeeded: Final successful attempt (soft green)\n * - waiting: Passive waiting, e.g. hook waiting for payload (hatched pattern)\n * - sleeping: Sleep in progress (soft amber)\n * - received: Hook received a payload (soft blue)\n */\nexport type SegmentStatus =\n | 'queued'\n | 'running'\n | 'failed'\n | 'retrying'\n | 'succeeded'\n | 'waiting'\n | 'sleeping'\n | 'received';\n\nexport interface Segment {\n /** Fraction of span width where this segment starts (0–1) */\n startFraction: number;\n /** Fraction of span width where this segment ends (0–1) */\n endFraction: number;\n /** Visual status controlling color/pattern */\n status: SegmentStatus;\n}\n\n/**\n * A boundary between two segments, representing an event that caused\n * a transition. Rendered as a hoverable divider with a tooltip.\n */\nexport interface SegmentBoundary {\n /** Fractional position along the span (0–1) */\n fraction: number;\n /** Display label for the tooltip (e.g. \"step_started\") */\n label: string;\n /** Formatted timestamp relative to span start */\n offsetMs: number;\n}\n\n// ──────────────────────────────────────────────────────────────────────────\n// CSS class mapping (segment status → module CSS class name)\n// ──────────────────────────────────────────────────────────────────────────\n\n/**\n * Maps a SegmentStatus to the CSS module class name to use.\n * These class names must exist in trace-viewer.module.css.\n */\nexport const SEGMENT_CLASS_MAP: Record<SegmentStatus, string> = {\n queued: 'segQueued',\n running: 'segRunning',\n failed: 'segFailed',\n retrying: 'segRetrying',\n succeeded: 'segSucceeded',\n waiting: 'segWaiting',\n sleeping: 'segSleeping',\n received: 'segReceived',\n};\n\n// ──────────────────────────────────────────────────────────────────────────\n// Helpers\n// ──────────────────────────────────────────────────────────────────────────\n\nfunction clampFraction(value: number): number {\n return Math.max(0, Math.min(1, value));\n}\n\nfunction timeToFraction(\n time: number,\n spanStart: number,\n spanDuration: number\n): number {\n if (spanDuration <= 0) return 0;\n return clampFraction((time - spanStart) / spanDuration);\n}\n\n/**\n * Sort events by timestamp ascending.\n */\nfunction sortedEvents(events: SpanNodeEvent[]): SpanNodeEvent[] {\n return [...events].sort((a, b) => a.timestamp - b.timestamp);\n}\n\n// ──────────────────────────────────────────────────────────────────────────\n// Step segments\n// ──────────────────────────────────────────────────────────────────────────\n\n/**\n * Compute segments for a step span.\n *\n * Timeline: [queued] → [attempt₁ (fail)] → [retry wait] → [attempt₂ (fail)] → ... → [attemptₙ (success)]\n *\n * Events used: step_started, step_retrying, step_failed, step_completed\n * The final segment is 'succeeded' if no trailing step_retrying/step_failed.\n */\nfunction computeStepSegments(node: SpanNode): Segment[] {\n const events = node.events ? sortedEvents(node.events) : [];\n const { startTime, duration } = node;\n const segments: Segment[] = [];\n\n if (duration <= 0) return segments;\n\n // Build a timeline of event boundaries\n interface EventMark {\n time: number;\n type: string;\n }\n const marks: EventMark[] = events\n .filter((e) =>\n [\n 'step_started',\n 'step_retrying',\n 'step_failed',\n 'step_completed',\n ].includes(e.event.name)\n )\n .map((e) => ({ time: e.timestamp, type: e.event.name }));\n\n if (marks.length === 0) {\n // No events — show entire span as running\n segments.push({ startFraction: 0, endFraction: 1, status: 'running' });\n return segments;\n }\n\n // Queued period: from span start to first event\n const firstMark = marks[0];\n const firstFraction = timeToFraction(firstMark.time, startTime, duration);\n if (firstFraction > 0.001) {\n segments.push({\n startFraction: 0,\n endFraction: firstFraction,\n status: 'queued',\n });\n }\n\n // Walk through events to build attempt/retry segments\n for (let i = 0; i < marks.length; i++) {\n const mark = marks[i];\n const markFraction = timeToFraction(mark.time, startTime, duration);\n const nextMark = marks[i + 1];\n const nextFraction = nextMark\n ? timeToFraction(nextMark.time, startTime, duration)\n : 1;\n\n if (mark.type === 'step_started') {\n // This is the start of an execution attempt.\n // It runs until the next event (step_retrying or step_failed) or end of span.\n const isLastMark = i === marks.length - 1;\n if (isLastMark) {\n // Last event is step_started — this attempt is either still running or succeeded\n segments.push({\n startFraction: markFraction,\n endFraction: 1,\n status: 'succeeded',\n });\n } else {\n // Attempt runs until the next event\n const nextType = nextMark.type;\n const attemptStatus: SegmentStatus =\n nextType === 'step_retrying' || nextType === 'step_failed'\n ? 'failed'\n : nextType === 'step_completed'\n ? 'succeeded'\n : 'running';\n segments.push({\n startFraction: markFraction,\n endFraction: nextFraction,\n status: attemptStatus,\n });\n }\n } else if (mark.type === 'step_retrying') {\n // Retry wait: from this event to the next step_started (or end)\n segments.push({\n startFraction: markFraction,\n endFraction: nextFraction,\n status: 'retrying',\n });\n } else if (mark.type === 'step_failed') {\n // Terminal failure: from this event to the end\n if (markFraction < 0.999) {\n segments.push({\n startFraction: markFraction,\n endFraction: 1,\n status: 'failed',\n });\n }\n } else if (mark.type === 'step_completed') {\n // Terminal success: do nothing here since the preceding step_started\n // segment already terminates at this marker.\n }\n }\n\n return segments;\n}\n\n// ──────────────────────────────────────────────────────────────────────────\n// Hook segments\n// ──────────────────────────────────────────────────────────────────────────\n\n/**\n * Compute segments for a hook span.\n *\n * Timeline: [waiting] → [received] → [disposed]\n */\nfunction computeHookSegments(node: SpanNode): Segment[] {\n const events = node.events ? sortedEvents(node.events) : [];\n const { startTime, duration } = node;\n const segments: Segment[] = [];\n\n if (duration <= 0) return segments;\n\n const receivedEvent = events.find((e) => e.event.name === 'hook_received');\n const disposedEvent = events.find((e) => e.event.name === 'hook_disposed');\n\n if (!receivedEvent && !disposedEvent) {\n // Still waiting\n segments.push({ startFraction: 0, endFraction: 1, status: 'waiting' });\n return segments;\n }\n\n const receivedFraction = receivedEvent\n ? timeToFraction(receivedEvent.timestamp, startTime, duration)\n : null;\n const disposedFraction = disposedEvent\n ? timeToFraction(disposedEvent.timestamp, startTime, duration)\n : null;\n\n // Waiting period (before received)\n if (receivedFraction !== null && receivedFraction > 0.001) {\n segments.push({\n startFraction: 0,\n endFraction: receivedFraction,\n status: 'waiting',\n });\n } else if (receivedFraction === null && disposedFraction !== null) {\n // Disposed without receiving — waiting the whole time\n segments.push({\n startFraction: 0,\n endFraction: disposedFraction,\n status: 'waiting',\n });\n }\n\n // Received period\n if (receivedFraction !== null) {\n const end = disposedFraction ?? 1;\n segments.push({\n startFraction: receivedFraction,\n endFraction: end,\n status: 'received',\n });\n }\n\n // Post-disposed (if there's remaining span after disposal)\n if (disposedFraction !== null && disposedFraction < 0.999) {\n segments.push({\n startFraction: disposedFraction,\n endFraction: 1,\n status: 'succeeded',\n });\n }\n\n return segments;\n}\n\n// ──────────────────────────────────────────────────────────────────────────\n// Sleep segments\n// ──────────────────────────────────────────────────────────────────────────\n\n/**\n * Compute segments for a sleep span.\n *\n * Timeline: [sleeping] → [completed]\n */\nfunction computeSleepSegments(node: SpanNode): Segment[] {\n const events = node.events ? sortedEvents(node.events) : [];\n const { startTime, duration } = node;\n const segments: Segment[] = [];\n\n if (duration <= 0) return segments;\n\n const completedEvent = events.find((e) => e.event.name === 'wait_completed');\n\n if (!completedEvent) {\n // Still sleeping\n segments.push({ startFraction: 0, endFraction: 1, status: 'sleeping' });\n return segments;\n }\n\n const completedFraction = timeToFraction(\n completedEvent.timestamp,\n startTime,\n duration\n );\n\n if (completedFraction > 0.001) {\n segments.push({\n startFraction: 0,\n endFraction: completedFraction,\n status: 'sleeping',\n });\n }\n\n segments.push({\n startFraction: completedFraction,\n endFraction: 1,\n status: 'succeeded',\n });\n\n return segments;\n}\n\n// ──────────────────────────────────────────────────────────────────────────\n// Run segments\n// ──────────────────────────────────────────────────────────────────────────\n\n/**\n * Compute segments for a run span.\n *\n * Timeline: [queued] → [running] → [completed/failed]\n *\n * The queued period is derived from activeStartTime (run.startedAt).\n * A synthetic run_started event is injected at that timestamp so\n * the boundary is hoverable in the trace viewer.\n */\nfunction computeRunSegments(node: SpanNode): Segment[] {\n const events = node.events ? sortedEvents(node.events) : [];\n const { startTime, duration, activeStartTime } = node;\n const segments: Segment[] = [];\n\n if (duration <= 0) return segments;\n\n // V1 runs (specVersion 1) don't emit run lifecycle events (run_created,\n // run_started, run_completed). Detect this by checking for the absence of\n // run_created — it's always the first event for v2 runs and is always\n // loaded in the first page, so its absence reliably signals a v1 run.\n // For v1, fall back to the run entity's status from span.attributes.data.\n const hasRunCreated = events.some((e) => e.event.name === 'run_created');\n\n if (!hasRunCreated) {\n const runData = node.span.attributes?.data as\n | Record<string, unknown>\n | undefined;\n const runStatus = runData?.status as string | undefined;\n return computeV1RunSegments(\n startTime,\n duration,\n activeStartTime,\n runStatus\n );\n }\n\n const failedEvent = events.find((e) => e.event.name === 'run_failed');\n const completedEvent = events.find((e) => e.event.name === 'run_completed');\n\n // Queued period (from span start to activeStartTime)\n let cursor = 0;\n if (activeStartTime && activeStartTime > startTime) {\n const queuedFraction = timeToFraction(activeStartTime, startTime, duration);\n if (queuedFraction > 0.001) {\n segments.push({\n startFraction: 0,\n endFraction: queuedFraction,\n status: 'queued',\n });\n cursor = queuedFraction;\n }\n }\n\n if (failedEvent) {\n const failedFraction = timeToFraction(\n failedEvent.timestamp,\n startTime,\n duration\n );\n // Running until failure\n if (failedFraction > cursor + 0.001) {\n segments.push({\n startFraction: cursor,\n endFraction: failedFraction,\n status: 'running',\n });\n }\n segments.push({\n startFraction: failedFraction,\n endFraction: 1,\n status: 'failed',\n });\n } else if (completedEvent) {\n const completedFraction = timeToFraction(\n completedEvent.timestamp,\n startTime,\n duration\n );\n if (completedFraction > cursor + 0.001) {\n segments.push({\n startFraction: cursor,\n endFraction: completedFraction,\n status: 'running',\n });\n }\n segments.push({\n startFraction: completedFraction,\n endFraction: 1,\n status: 'succeeded',\n });\n } else {\n // Running to completion (or terminal events haven't loaded yet)\n segments.push({\n startFraction: cursor,\n endFraction: 1,\n status: 'running',\n });\n }\n\n return segments;\n}\n\n/**\n * Compute segments for a v1 run using only the run entity's status and\n * activeStartTime (derived from run.startedAt). V1 runs have no run\n * lifecycle events, so we infer the visual segments from entity fields.\n */\nfunction computeV1RunSegments(\n startTime: number,\n duration: number,\n activeStartTime: number | undefined,\n runStatus: string | undefined\n): Segment[] {\n const segments: Segment[] = [];\n\n let cursor = 0;\n if (activeStartTime && activeStartTime > startTime) {\n const queuedFraction = timeToFraction(activeStartTime, startTime, duration);\n if (queuedFraction > 0.001) {\n segments.push({\n startFraction: 0,\n endFraction: queuedFraction,\n status: 'queued',\n });\n cursor = queuedFraction;\n }\n }\n\n if (runStatus === 'failed') {\n segments.push({\n startFraction: cursor,\n endFraction: 1,\n status: 'failed',\n });\n } else if (runStatus === 'completed' || runStatus === 'cancelled') {\n segments.push({\n startFraction: cursor,\n endFraction: 1,\n status: 'succeeded',\n });\n } else {\n segments.push({\n startFraction: cursor,\n endFraction: 1,\n status: 'running',\n });\n }\n\n return segments;\n}\n\n// ──────────────────────────────────────────────────────────────────────────\n// Dispatcher\n// ──────────────────────────────────────────────────────────────────────────\n\nexport interface SegmentResult {\n segments: Segment[];\n boundaries: SegmentBoundary[];\n}\n\n// ──────────────────────────────────────────────────────────────────────────\n// Boundary computation\n// ──────────────────────────────────────────────────────────────────────────\n\n/** Event names to human-readable labels */\nconst EVENT_LABELS: Record<string, string> = {\n step_started: 'Started',\n step_retrying: 'Retrying',\n step_failed: 'Failed',\n hook_created: 'Created',\n hook_received: 'Received',\n hook_disposed: 'Resolved',\n wait_created: 'Sleep started',\n wait_completed: 'Sleep completed',\n run_completed: 'Completed',\n run_failed: 'Run failed',\n step_completed: 'Completed',\n};\n\n/**\n * Extract boundaries from a span's events. Each boundary sits at the\n * fractional position of a relevant event within the span duration.\n * Only includes events that are used as segment boundaries (not at the\n * very start or very end of the span, to avoid edge clutter).\n */\nfunction computeBoundaries(\n node: SpanNode,\n relevantEventNames: string[]\n): SegmentBoundary[] {\n const events = node.events ? sortedEvents(node.events) : [];\n const { startTime, duration } = node;\n\n if (duration <= 0) return [];\n\n const boundaries: SegmentBoundary[] = [];\n for (const e of events) {\n if (!relevantEventNames.includes(e.event.name)) continue;\n\n const fraction = timeToFraction(e.timestamp, startTime, duration);\n // Skip boundaries at the very edges (< 1% or > 99%) to avoid clutter\n if (fraction < 0.01 || fraction > 0.99) continue;\n\n boundaries.push({\n fraction,\n label: EVENT_LABELS[e.event.name] ?? e.event.name,\n offsetMs: e.timestamp - startTime,\n });\n }\n\n return boundaries;\n}\n\n// ──────────────────────────────────────────────────────────────────────────\n// Dispatcher\n// ──────────────────────────────────────────────────────────────────────────\n\n/**\n * Compute the event-based segments and boundaries for a span based on its resource type.\n * Returns empty arrays for 'default' (generic OTEL) spans.\n */\nexport function computeSegments(\n resourceType: ResourceType,\n node: SpanNode\n): SegmentResult {\n switch (resourceType) {\n case 'step':\n return {\n segments: computeStepSegments(node),\n boundaries: computeBoundaries(node, [\n 'step_started',\n 'step_retrying',\n 'step_failed',\n 'step_completed',\n ]),\n };\n case 'hook':\n return {\n segments: computeHookSegments(node),\n boundaries: computeBoundaries(node, [\n 'hook_created',\n 'hook_received',\n 'hook_disposed',\n ]),\n };\n case 'sleep':\n return {\n segments: computeSleepSegments(node),\n boundaries: computeBoundaries(node, ['wait_created', 'wait_completed']),\n };\n case 'run':\n return {\n segments: computeRunSegments(node),\n boundaries: computeBoundaries(node, ['run_completed', 'run_failed']),\n };\n default:\n return { segments: [], boundaries: [] };\n }\n}\n"]}
@@ -1,46 +0,0 @@
1
- import type { RefObject } from 'react';
2
- import type { RootNode, ScrollSnapshot, VisibleSpan } from '../types';
3
- /**
4
- * The resource type of a workflow span, read from span.attributes.resource.
5
- * Falls back to 'default' for non-workflow (generic OTEL) spans.
6
- */
7
- export type ResourceType = 'run' | 'step' | 'hook' | 'sleep' | 'default';
8
- /**
9
- * Layout result computed by a span strategy. Controls how the span
10
- * is sized and positioned in the timeline.
11
- */
12
- export interface SpanLayout {
13
- /** The rendered width in pixels */
14
- width: number;
15
- /** The actual duration-based width (before min-width clamping) */
16
- actualWidth: number;
17
- /** The rendered height in pixels */
18
- height: number;
19
- /** The y position in pixels */
20
- top: number;
21
- /** The x position in pixels (from left) */
22
- left: number;
23
- /** Whether the span is considered "small" (< 64px actual width) */
24
- isSmall: boolean;
25
- /** Whether the span is considered "huge" (>= 500px actual width) */
26
- isHuge: boolean;
27
- /** Whether the span is currently hovered (with hover eligibility) */
28
- isHovered: boolean;
29
- /** Whether the span is expanded (hovered or selected) — controls sizing */
30
- isExpanded: boolean;
31
- /** Whether the span is near the right side of the visible area */
32
- isNearRightSide: boolean;
33
- }
34
- /**
35
- * Reads the resource type from a span's attributes.
36
- */
37
- export declare function getResourceType(node: VisibleSpan): ResourceType;
38
- export declare function getRunLayout(node: VisibleSpan, root: RootNode, scale: number, scrollSnapshotRef: RefObject<ScrollSnapshot | undefined>): SpanLayout;
39
- export declare function getStepLayout(node: VisibleSpan, root: RootNode, scale: number, scrollSnapshotRef: RefObject<ScrollSnapshot | undefined>): SpanLayout;
40
- export declare function getHookLayout(node: VisibleSpan, root: RootNode, scale: number, scrollSnapshotRef: RefObject<ScrollSnapshot | undefined>): SpanLayout;
41
- export declare function getSleepLayout(node: VisibleSpan, root: RootNode, scale: number, scrollSnapshotRef: RefObject<ScrollSnapshot | undefined>): SpanLayout;
42
- /**
43
- * Computes the layout for a span based on its resource type.
44
- */
45
- export declare function getSpanLayout(resourceType: ResourceType, node: VisibleSpan, root: RootNode, scale: number, scrollSnapshotRef: RefObject<ScrollSnapshot | undefined>): SpanLayout;
46
- //# sourceMappingURL=span-strategies.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"span-strategies.d.ts","sourceRoot":"","sources":["../../../../src/components/trace-viewer/components/span-strategies.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAGtE;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;AAKzE;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,kEAAkE;IAClE,WAAW,EAAE,MAAM,CAAC;IACpB,oCAAoC;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,mEAAmE;IACnE,OAAO,EAAE,OAAO,CAAC;IACjB,oEAAoE;IACpE,MAAM,EAAE,OAAO,CAAC;IAChB,qEAAqE;IACrE,SAAS,EAAE,OAAO,CAAC;IACnB,2EAA2E;IAC3E,UAAU,EAAE,OAAO,CAAC;IACpB,kEAAkE;IAClE,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,WAAW,GAAG,YAAY,CAW/D;AAwFD,wBAAgB,YAAY,CAC1B,IAAI,EAAE,WAAW,EACjB,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,MAAM,EACb,iBAAiB,EAAE,SAAS,CAAC,cAAc,GAAG,SAAS,CAAC,GACvD,UAAU,CAEZ;AAED,wBAAgB,aAAa,CAC3B,IAAI,EAAE,WAAW,EACjB,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,MAAM,EACb,iBAAiB,EAAE,SAAS,CAAC,cAAc,GAAG,SAAS,CAAC,GACvD,UAAU,CAEZ;AAED,wBAAgB,aAAa,CAC3B,IAAI,EAAE,WAAW,EACjB,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,MAAM,EACb,iBAAiB,EAAE,SAAS,CAAC,cAAc,GAAG,SAAS,CAAC,GACvD,UAAU,CAEZ;AAED,wBAAgB,cAAc,CAC5B,IAAI,EAAE,WAAW,EACjB,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,MAAM,EACb,iBAAiB,EAAE,SAAS,CAAC,cAAc,GAAG,SAAS,CAAC,GACvD,UAAU,CAEZ;AAMD;;GAEG;AACH,wBAAgB,aAAa,CAC3B,YAAY,EAAE,YAAY,EAC1B,IAAI,EAAE,WAAW,EACjB,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,MAAM,EACb,iBAAiB,EAAE,SAAS,CAAC,cAAc,GAAG,SAAS,CAAC,GACvD,UAAU,CAaZ"}