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

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,416 +0,0 @@
1
- 'use client';
2
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
- import { clsx } from 'clsx';
4
- import { useEffect, useMemo, useRef, useState } from 'react';
5
- import { useTraceViewer } from '../context';
6
- import styles from '../trace-viewer.module.css';
7
- import { MARKER_HEIGHT, ROW_HEIGHT, ROW_PADDING, TIMELINE_PADDING, } from '../util/constants';
8
- import { formatDurationForTimeline, formatTimeSelection, formatWallClockTime, } from '../util/timing';
9
- import { useImmediateStyle } from '../util/use-immediate-style';
10
- import { useTrackpadZoom } from '../util/use-trackpad-zoom';
11
- /**
12
- * Snap a raw duration to the nearest "nice" number in the 1-2-5 × 10^n
13
- * sequence (e.g. …, 0.5, 1, 2, 5, 10, 20, 50, 100, …).
14
- */
15
- function snapToNice(raw) {
16
- if (raw <= 0)
17
- return 1;
18
- const log10 = Math.floor(Math.log10(raw));
19
- const pow = 10 ** log10;
20
- const normalized = raw / pow;
21
- if (normalized <= 1.5)
22
- return pow;
23
- if (normalized <= 3.5)
24
- return 2 * pow;
25
- if (normalized <= 7.5)
26
- return 5 * pow;
27
- return 10 * pow;
28
- }
29
- export function Markers({ scale, isLive = false, }) {
30
- const { state: { root }, } = useTraceViewer();
31
- // Force a re-render every second when live to pick up new tick marks.
32
- // The markers container width is grown at 60fps by useLiveTick;
33
- // this interval only ensures the marker *labels* stay current.
34
- const [, forceMarkerUpdate] = useState(0);
35
- useEffect(() => {
36
- if (!isLive)
37
- return;
38
- const id = setInterval(() => forceMarkerUpdate((v) => v + 1), 1000);
39
- return () => clearInterval(id);
40
- }, [isLive]);
41
- const fullDuration = root.duration;
42
- // Calculate a marker interval that gives reasonable spacing at any zoom level.
43
- // We target ~50px per notch mark; labels appear on every Nth notch via labelSpacing.
44
- // When scale is <= 0 (e.g. the initial -1 sentinel), fall back to a safe default
45
- // to avoid generating an absurd number of markers.
46
- const effectiveScale = scale > 0 ? scale : fullDuration > 0 ? 1 / fullDuration : 1;
47
- const targetNotchPx = 50;
48
- let markerDuration = snapToNice(targetNotchPx / effectiveScale);
49
- markerDuration = Math.max(1, markerDuration);
50
- let markerWidth = markerDuration * effectiveScale;
51
- // Cap marker count to avoid creating too many DOM elements at extreme zoom
52
- // on very long traces. Only the visible portion is shown on screen anyway.
53
- const MAX_MARKERS = 1000;
54
- if (fullDuration / markerDuration > MAX_MARKERS) {
55
- markerDuration = snapToNice(fullDuration / MAX_MARKERS);
56
- markerWidth = markerDuration * effectiveScale;
57
- }
58
- const markerCount = Math.ceil(fullDuration / markerDuration);
59
- // How often labels should appear for markers, e.g. 3 === one label for every third marker
60
- const labelSpacing = Math.ceil(100 / markerWidth) || 1;
61
- return (_jsx("div", { className: styles.markersContainer, children: _jsx("div", { "aria-hidden": true, className: styles.markers, style: {
62
- width: Math.floor(root.duration * scale + 15),
63
- visibility: scale !== -1 ? 'visible' : 'hidden',
64
- '--marker-width': `${markerWidth}px`,
65
- }, children: new Array(markerCount).fill(null).map((_, i) => {
66
- const hasLabel = i % labelSpacing === 0;
67
- return (_jsx("span", { className: clsx(styles.marker, !hasLabel && styles.notch), children: hasLabel ? (_jsxs("span", { className: styles.markerLabel, children: [formatDurationForTimeline(markerDuration * i), _jsx("span", { className: styles.markerClockTime, children: formatWallClockTime(root.startTime + markerDuration * i) })] })) : null }, String(i)));
68
- }) }) }));
69
- }
70
- export function EventMarkers({ events, root, scale, }) {
71
- // Filter out events that should not show vertical lines (workflow-specific feature)
72
- const eventsWithVerticalLines = useMemo(() => events.filter((x) => x.event.showVerticalLine !== false), [events]);
73
- return (_jsx("div", { className: styles.eventMarkersContainer, children: _jsx("div", { "aria-hidden": true, className: styles.eventMarkers, style: {
74
- width: Math.floor(root.duration * scale),
75
- }, children: eventsWithVerticalLines.map((x) => {
76
- return (_jsx("span", { className: clsx(styles.eventMarker), style: {
77
- left: Math.floor((x.timestamp - root.startTime) * scale),
78
- ...(x.event.color && { borderLeftColor: x.event.color }),
79
- } }, x.key));
80
- }) }) }));
81
- }
82
- const HOVER_OVERSCAN = 2;
83
- export function CursorMarker({ memoCacheRef, timelineRef, root, spans, events, scale, dispatch, scrollSnapshotRef, }) {
84
- const hasEnteredRef = useRef(false);
85
- const spansRef = useRef(spans);
86
- spansRef.current = spans;
87
- const eventsRef = useRef(events);
88
- eventsRef.current = events;
89
- const labelRef = useRef(null);
90
- const { style: labelStyle, setStyle: setLabelStyle } = useImmediateStyle(labelRef);
91
- const labelTextRef = useRef(null);
92
- const ref = useRef(null);
93
- const { style, setStyle } = useImmediateStyle(ref);
94
- const rectRef = useRef(undefined);
95
- const selectionRef = useRef(null);
96
- const { style: selectionStyle, setStyle: setSelectionStyle } = useImmediateStyle(selectionRef);
97
- const xRef = useRef(0);
98
- useEffect(() => {
99
- const $timeline = timelineRef.current;
100
- if (!$timeline)
101
- return;
102
- let x = xRef.current;
103
- let xStart = 0;
104
- let isDragging = false;
105
- let isExternalDrag = false;
106
- let hasMoved = false;
107
- let isRightClick = false;
108
- let scrollX = 0;
109
- let scrollY = 0;
110
- const hoverStartT = Date.now() + 500;
111
- const updateRect = () => {
112
- if (rectRef.current)
113
- return;
114
- rectRef.current = $timeline.getBoundingClientRect();
115
- };
116
- const getRowFromY = (y) => {
117
- if (!rectRef.current)
118
- return 0;
119
- return ((y - MARKER_HEIGHT - TIMELINE_PADDING) / (ROW_HEIGHT + ROW_PADDING));
120
- };
121
- const removeHover = () => {
122
- const cache = memoCacheRef.current;
123
- // Remove hover styling from any elements that have it
124
- for (const span of spansRef.current) {
125
- if (!span.isHovered)
126
- continue;
127
- span.isHovered = false;
128
- cache.set(span.span.spanId, {});
129
- }
130
- dispatch({
131
- type: 'forceRender',
132
- });
133
- };
134
- let nextFrame = 0;
135
- const onFrame = () => {
136
- if (!hasEnteredRef.current)
137
- return;
138
- if (!rectRef.current)
139
- updateRect();
140
- const rect = rectRef.current;
141
- if (!rect)
142
- return;
143
- const { scrollLeft, scrollTop } = $timeline;
144
- const left = Math.max(0, Math.min(x + scrollLeft - rect.left - TIMELINE_PADDING, root.duration * scale));
145
- const leftStyle = `${left - scrollLeft + TIMELINE_PADDING}px`;
146
- setStyle('left', leftStyle);
147
- setLabelStyle('left', leftStyle);
148
- const t = root.startTime + left / scale;
149
- const labelT = t - root.startTime;
150
- if (labelT < 0 || labelT > root.duration) {
151
- labelTextRef.current?.removeAttribute('data-text');
152
- }
153
- else {
154
- labelTextRef.current?.setAttribute('data-text', formatTimeSelection(labelT));
155
- }
156
- if (isDragging) {
157
- const xDelta = x - xStart;
158
- const width = Math.abs(xDelta);
159
- if (!hasMoved) {
160
- if (width < 4)
161
- return;
162
- hasMoved = true;
163
- setSelectionStyle('display', 'flex');
164
- removeHover();
165
- }
166
- if (xDelta > 0) {
167
- setSelectionStyle('left', '');
168
- setSelectionStyle('right', '0');
169
- }
170
- else {
171
- setSelectionStyle('left', '0');
172
- setSelectionStyle('right', '');
173
- }
174
- setSelectionStyle('width', `${width}px`);
175
- const leftStart = Math.max(0, Math.min(xStart + scrollLeft - rect.left - TIMELINE_PADDING, root.duration * scale));
176
- const labelTStart = leftStart / scale;
177
- let t1;
178
- let t2;
179
- if (labelTStart < labelT) {
180
- t1 = labelTStart;
181
- t2 = labelT;
182
- }
183
- else {
184
- t1 = labelT;
185
- t2 = labelTStart;
186
- }
187
- selectionRef.current?.setAttribute('data-range', `${formatTimeSelection(t1)} — ${formatTimeSelection(t2)}`);
188
- selectionRef.current?.setAttribute('data-duration', `${formatTimeSelection(t2 - t1)} selected`);
189
- }
190
- if (Date.now() < hoverStartT) {
191
- nextFrame = requestAnimationFrame(onFrame);
192
- return;
193
- }
194
- if (scrollLeft !== scrollX || scrollTop !== scrollY) {
195
- scrollX = scrollLeft;
196
- scrollY = scrollTop;
197
- nextFrame = requestAnimationFrame(onFrame);
198
- return;
199
- }
200
- if (x - rect.left < 128) {
201
- labelTextRef.current?.setAttribute('data-align', 'left');
202
- }
203
- else if (x - rect.left > rect.width - 128) {
204
- labelTextRef.current?.setAttribute('data-align', 'right');
205
- }
206
- else {
207
- labelTextRef.current?.removeAttribute('data-align');
208
- }
209
- if (!hasMoved && !isExternalDrag) {
210
- const cache = memoCacheRef.current;
211
- // Span Hover
212
- const rowMin = getRowFromY(scrollTop) - HOVER_OVERSCAN;
213
- const rowMax = getRowFromY(scrollTop + rect.height) + HOVER_OVERSCAN;
214
- for (const span of spansRef.current) {
215
- const isHovered = span.row >= rowMin &&
216
- span.row <= rowMax &&
217
- t >= span.startTime &&
218
- t <= span.endTime;
219
- if (span.isHovered === isHovered)
220
- continue;
221
- span.isHovered = isHovered;
222
- cache.set(span.span.spanId, {});
223
- }
224
- // Event Hover — only show the nearest event when multiple overlap
225
- const eventSpreadPx = 12;
226
- const eventSpreadMs = eventSpreadPx / scale;
227
- let closestEvent = null;
228
- let closestDist = Infinity;
229
- for (const event of eventsRef.current) {
230
- const dist = Math.abs(event.timestamp - t);
231
- if (dist <= eventSpreadMs && dist < closestDist) {
232
- closestDist = dist;
233
- closestEvent = event;
234
- }
235
- }
236
- for (const event of eventsRef.current) {
237
- const isHovered = event === closestEvent;
238
- if (event.isHovered === isHovered)
239
- continue;
240
- event.isHovered = isHovered;
241
- const $event = event.ref?.current;
242
- if (!$event)
243
- continue;
244
- $event.setAttribute('data-hovered', String(isHovered));
245
- }
246
- dispatch({
247
- type: 'forceRender',
248
- });
249
- }
250
- };
251
- nextFrame = requestAnimationFrame(onFrame);
252
- const onPointerEnter = (event) => {
253
- if (event.pointerType !== 'mouse')
254
- return;
255
- hasEnteredRef.current = true;
256
- };
257
- const onPointerLeave = () => {
258
- if (!hasEnteredRef.current)
259
- return;
260
- hasEnteredRef.current = false;
261
- removeHover();
262
- };
263
- const onMouseMove = ({ clientX }) => {
264
- x = clientX;
265
- xRef.current = x;
266
- cancelAnimationFrame(nextFrame);
267
- nextFrame = requestAnimationFrame(onFrame);
268
- };
269
- const onContextMenu = (event) => {
270
- event.preventDefault();
271
- };
272
- const onMouseDown = (event) => {
273
- if (event.button === 2) {
274
- isRightClick = true;
275
- event.preventDefault();
276
- }
277
- else if (event.button !== 0) {
278
- return;
279
- }
280
- else {
281
- isRightClick = false;
282
- }
283
- if (timelineRef.current?.contains(event.target)) {
284
- xStart = x;
285
- isDragging = true;
286
- }
287
- else {
288
- isExternalDrag = true;
289
- requestAnimationFrame(removeHover);
290
- }
291
- };
292
- const onMouseUp = (event) => {
293
- isExternalDrag = false;
294
- if (!isDragging)
295
- return;
296
- isDragging = false;
297
- if (!hasMoved)
298
- return;
299
- hasMoved = false;
300
- setSelectionStyle('display', '');
301
- setSelectionStyle('left', '');
302
- setSelectionStyle('right', '');
303
- setSelectionStyle('width', '');
304
- event.preventDefault();
305
- event.stopImmediatePropagation();
306
- if (isRightClick) {
307
- isRightClick = false;
308
- return;
309
- }
310
- if (!rectRef.current)
311
- updateRect();
312
- const rect = rectRef.current;
313
- if (!rect)
314
- return;
315
- const { scrollLeft } = $timeline;
316
- const start = Math.max(0, Math.min((xStart + scrollLeft - rect.left - TIMELINE_PADDING) / scale, root.duration));
317
- const end = Math.max(0, Math.min((x + scrollLeft - rect.left - TIMELINE_PADDING) / scale, root.duration));
318
- dispatch({
319
- type: 'scaleToRange',
320
- t1: start + root.startTime,
321
- t2: end + root.startTime,
322
- });
323
- };
324
- const onKeyDown = (event) => {
325
- if (!isDragging)
326
- return;
327
- if (event.key !== 'Escape')
328
- return;
329
- isRightClick = true;
330
- onMouseUp(event);
331
- };
332
- const onWindowScroll = () => {
333
- rectRef.current = undefined;
334
- trackpadZoomRef.current = undefined;
335
- cancelAnimationFrame(nextFrame);
336
- nextFrame = requestAnimationFrame(onFrame);
337
- };
338
- const onScroll = () => {
339
- cancelAnimationFrame(nextFrame);
340
- nextFrame = requestAnimationFrame(onFrame);
341
- };
342
- const observer = new ResizeObserver(() => {
343
- // NOTE: I tried to use the entry from this to immediately set the rect,
344
- // but for some reason it has different dimensions than the one from
345
- // .getBoundingClientRect()
346
- rectRef.current = undefined;
347
- });
348
- observer.observe($timeline);
349
- window.addEventListener('mousemove', onMouseMove);
350
- $timeline.addEventListener('contextmenu', onContextMenu);
351
- window.addEventListener('mousedown', onMouseDown);
352
- window.addEventListener('mouseup', onMouseUp);
353
- window.addEventListener('blur', onMouseUp);
354
- window.addEventListener('keydown', onKeyDown, true);
355
- window.addEventListener('scroll', onWindowScroll);
356
- $timeline.addEventListener('scroll', onScroll);
357
- $timeline.addEventListener('pointerenter', onPointerEnter);
358
- $timeline.addEventListener('pointerleave', onPointerLeave);
359
- return () => {
360
- observer.disconnect();
361
- window.removeEventListener('mousemove', onMouseMove);
362
- $timeline.removeEventListener('contextmenu', onContextMenu);
363
- window.removeEventListener('mousedown', onMouseDown);
364
- window.removeEventListener('mouseup', onMouseUp);
365
- window.removeEventListener('blur', onMouseUp);
366
- window.removeEventListener('keydown', onKeyDown, true);
367
- window.removeEventListener('scroll', onWindowScroll);
368
- $timeline.removeEventListener('scroll', onScroll);
369
- $timeline.removeEventListener('pointerenter', onPointerEnter);
370
- $timeline.removeEventListener('pointerleave', onPointerLeave);
371
- cancelAnimationFrame(nextFrame);
372
- xRef.current = x;
373
- removeHover();
374
- };
375
- }, [
376
- dispatch,
377
- root,
378
- scale,
379
- setStyle,
380
- setLabelStyle,
381
- setSelectionStyle,
382
- memoCacheRef,
383
- timelineRef,
384
- scrollSnapshotRef,
385
- ]);
386
- const trackpadZoomRef = useRef(undefined);
387
- useTrackpadZoom((delta) => {
388
- const $timeline = timelineRef.current;
389
- if (!$timeline)
390
- return;
391
- rectRef.current ??= $timeline.getBoundingClientRect();
392
- const rect = rectRef.current;
393
- const anchorX = Math.max(0, Math.min(xRef.current - rect.left - TIMELINE_PADDING, rect.width - 2 * TIMELINE_PADDING));
394
- let anchorT = 0;
395
- let existing = trackpadZoomRef.current;
396
- if (existing?.anchorX === anchorX) {
397
- anchorT = existing.anchorT;
398
- }
399
- else {
400
- anchorT = ($timeline.scrollLeft + anchorX) / scale;
401
- existing = {
402
- anchorT,
403
- anchorX,
404
- };
405
- trackpadZoomRef.current = existing;
406
- }
407
- dispatch({
408
- type: 'trackpadScale',
409
- delta: delta / 64,
410
- anchorT,
411
- anchorX,
412
- });
413
- });
414
- return (_jsxs(_Fragment, { children: [_jsx("div", { className: styles.cursorMarkerStickyParent, children: _jsx("div", { className: styles.cursorMarkerLabelContainer, ref: labelRef, style: labelStyle, children: _jsx("div", { className: styles.cursorMarkerLabel, ref: labelTextRef }) }) }), _jsx("div", { className: styles.cursorMarkerStickyParent, children: _jsx("div", { className: styles.cursorMarkerContainer, ref: ref, style: style, children: _jsx("div", { className: styles.cursorMarker, children: _jsx("div", { className: styles.cursorSelection, ref: selectionRef, style: selectionStyle }) }) }) })] }));
415
- }
416
- //# sourceMappingURL=markers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"markers.js","sourceRoot":"","sources":["../../../../src/components/trace-viewer/components/markers.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport { clsx } from 'clsx';\nimport type {\n CSSProperties,\n Dispatch,\n MutableRefObject,\n ReactNode,\n} from 'react';\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { type TraceViewerAction, useTraceViewer } from '../context';\nimport styles from '../trace-viewer.module.css';\nimport type {\n MemoCache,\n RootNode,\n ScrollSnapshot,\n VisibleSpan,\n VisibleSpanEvent,\n} from '../types';\nimport {\n MARKER_HEIGHT,\n ROW_HEIGHT,\n ROW_PADDING,\n TIMELINE_PADDING,\n} from '../util/constants';\nimport {\n formatDurationForTimeline,\n formatTimeSelection,\n formatWallClockTime,\n} from '../util/timing';\nimport { useImmediateStyle } from '../util/use-immediate-style';\nimport { useTrackpadZoom } from '../util/use-trackpad-zoom';\n\n/**\n * Snap a raw duration to the nearest \"nice\" number in the 1-2-5 × 10^n\n * sequence (e.g. …, 0.5, 1, 2, 5, 10, 20, 50, 100, …).\n */\nfunction snapToNice(raw: number): number {\n if (raw <= 0) return 1;\n const log10 = Math.floor(Math.log10(raw));\n const pow = 10 ** log10;\n const normalized = raw / pow;\n\n if (normalized <= 1.5) return pow;\n if (normalized <= 3.5) return 2 * pow;\n if (normalized <= 7.5) return 5 * pow;\n return 10 * pow;\n}\n\nexport function Markers({\n scale,\n isLive = false,\n}: {\n scale: number;\n isLive?: boolean;\n}): ReactNode {\n const {\n state: { root },\n } = useTraceViewer();\n // Force a re-render every second when live to pick up new tick marks.\n // The markers container width is grown at 60fps by useLiveTick;\n // this interval only ensures the marker *labels* stay current.\n const [, forceMarkerUpdate] = useState(0);\n useEffect(() => {\n if (!isLive) return;\n const id = setInterval(() => forceMarkerUpdate((v) => v + 1), 1000);\n return () => clearInterval(id);\n }, [isLive]);\n\n const fullDuration = root.duration;\n\n // Calculate a marker interval that gives reasonable spacing at any zoom level.\n // We target ~50px per notch mark; labels appear on every Nth notch via labelSpacing.\n // When scale is <= 0 (e.g. the initial -1 sentinel), fall back to a safe default\n // to avoid generating an absurd number of markers.\n const effectiveScale =\n scale > 0 ? scale : fullDuration > 0 ? 1 / fullDuration : 1;\n const targetNotchPx = 50;\n let markerDuration = snapToNice(targetNotchPx / effectiveScale);\n markerDuration = Math.max(1, markerDuration);\n let markerWidth = markerDuration * effectiveScale;\n\n // Cap marker count to avoid creating too many DOM elements at extreme zoom\n // on very long traces. Only the visible portion is shown on screen anyway.\n const MAX_MARKERS = 1000;\n if (fullDuration / markerDuration > MAX_MARKERS) {\n markerDuration = snapToNice(fullDuration / MAX_MARKERS);\n markerWidth = markerDuration * effectiveScale;\n }\n const markerCount = Math.ceil(fullDuration / markerDuration);\n\n // How often labels should appear for markers, e.g. 3 === one label for every third marker\n const labelSpacing = Math.ceil(100 / markerWidth) || 1;\n\n return (\n <div className={styles.markersContainer}>\n <div\n aria-hidden\n className={styles.markers}\n style={\n {\n width: Math.floor(root.duration * scale + 15),\n visibility: scale !== -1 ? 'visible' : 'hidden',\n '--marker-width': `${markerWidth}px`,\n } as CSSProperties\n }\n >\n {new Array(markerCount).fill(null).map((_, i) => {\n const hasLabel = i % labelSpacing === 0;\n return (\n <span\n className={clsx(styles.marker, !hasLabel && styles.notch)}\n key={String(i)}\n >\n {hasLabel ? (\n <span className={styles.markerLabel}>\n {formatDurationForTimeline(markerDuration * i)}\n <span className={styles.markerClockTime}>\n {formatWallClockTime(root.startTime + markerDuration * i)}\n </span>\n </span>\n ) : null}\n </span>\n );\n })}\n </div>\n </div>\n );\n}\n\nexport function EventMarkers({\n events,\n root,\n scale,\n}: {\n events: VisibleSpanEvent[];\n root: RootNode;\n scale: number;\n}): ReactNode {\n // Filter out events that should not show vertical lines (workflow-specific feature)\n const eventsWithVerticalLines = useMemo(\n () => events.filter((x) => x.event.showVerticalLine !== false),\n [events]\n );\n\n return (\n <div className={styles.eventMarkersContainer}>\n <div\n aria-hidden\n className={styles.eventMarkers}\n style={\n {\n width: Math.floor(root.duration * scale),\n } as CSSProperties\n }\n >\n {eventsWithVerticalLines.map((x) => {\n return (\n <span\n className={clsx(styles.eventMarker)}\n key={x.key}\n style={{\n left: Math.floor((x.timestamp - root.startTime) * scale),\n ...(x.event.color && { borderLeftColor: x.event.color }),\n }}\n />\n );\n })}\n </div>\n </div>\n );\n}\n\nconst HOVER_OVERSCAN = 2;\n\ninterface TrackpadZoom {\n anchorX: number;\n anchorT: number;\n}\n\nexport function CursorMarker({\n memoCacheRef,\n timelineRef,\n root,\n spans,\n events,\n scale,\n dispatch,\n scrollSnapshotRef,\n}: {\n memoCacheRef: MutableRefObject<MemoCache>;\n timelineRef: MutableRefObject<HTMLDivElement | null>;\n root: RootNode;\n spans: VisibleSpan[];\n events: VisibleSpanEvent[];\n scale: number;\n dispatch: Dispatch<TraceViewerAction>;\n scrollSnapshotRef: MutableRefObject<ScrollSnapshot | undefined>;\n}): ReactNode {\n const hasEnteredRef = useRef(false);\n const spansRef = useRef(spans);\n spansRef.current = spans;\n const eventsRef = useRef(events);\n eventsRef.current = events;\n const labelRef = useRef<HTMLDivElement>(null);\n const { style: labelStyle, setStyle: setLabelStyle } =\n useImmediateStyle(labelRef);\n const labelTextRef = useRef<HTMLDivElement>(null);\n\n const ref = useRef<HTMLDivElement>(null);\n const { style, setStyle } = useImmediateStyle(ref);\n const rectRef = useRef<DOMRect>(undefined);\n\n const selectionRef = useRef<HTMLDivElement>(null);\n const { style: selectionStyle, setStyle: setSelectionStyle } =\n useImmediateStyle(selectionRef);\n\n const xRef = useRef(0);\n useEffect(() => {\n const $timeline = timelineRef.current;\n if (!$timeline) return;\n\n let x = xRef.current;\n let xStart = 0;\n let isDragging = false;\n let isExternalDrag = false;\n let hasMoved = false;\n let isRightClick = false;\n let scrollX = 0;\n let scrollY = 0;\n const hoverStartT = Date.now() + 500;\n const updateRect = (): void => {\n if (rectRef.current) return;\n rectRef.current = $timeline.getBoundingClientRect();\n };\n\n const getRowFromY = (y: number): number => {\n if (!rectRef.current) return 0;\n return (\n (y - MARKER_HEIGHT - TIMELINE_PADDING) / (ROW_HEIGHT + ROW_PADDING)\n );\n };\n\n const removeHover = (): void => {\n const cache = memoCacheRef.current;\n // Remove hover styling from any elements that have it\n for (const span of spansRef.current) {\n if (!span.isHovered) continue;\n span.isHovered = false;\n cache.set(span.span.spanId, {});\n }\n dispatch({\n type: 'forceRender',\n });\n };\n\n let nextFrame = 0;\n const onFrame = (): void => {\n if (!hasEnteredRef.current) return;\n if (!rectRef.current) updateRect();\n const rect = rectRef.current;\n if (!rect) return;\n\n const { scrollLeft, scrollTop } = $timeline;\n\n const left = Math.max(\n 0,\n Math.min(\n x + scrollLeft - rect.left - TIMELINE_PADDING,\n root.duration * scale\n )\n );\n const leftStyle = `${left - scrollLeft + TIMELINE_PADDING}px`;\n setStyle('left', leftStyle);\n setLabelStyle('left', leftStyle);\n\n const t = root.startTime + left / scale;\n const labelT = t - root.startTime;\n if (labelT < 0 || labelT > root.duration) {\n labelTextRef.current?.removeAttribute('data-text');\n } else {\n labelTextRef.current?.setAttribute(\n 'data-text',\n formatTimeSelection(labelT)\n );\n }\n\n if (isDragging) {\n const xDelta = x - xStart;\n const width = Math.abs(xDelta);\n if (!hasMoved) {\n if (width < 4) return;\n hasMoved = true;\n setSelectionStyle('display', 'flex');\n removeHover();\n }\n\n if (xDelta > 0) {\n setSelectionStyle('left', '');\n setSelectionStyle('right', '0');\n } else {\n setSelectionStyle('left', '0');\n setSelectionStyle('right', '');\n }\n setSelectionStyle('width', `${width}px`);\n\n const leftStart = Math.max(\n 0,\n Math.min(\n xStart + scrollLeft - rect.left - TIMELINE_PADDING,\n root.duration * scale\n )\n );\n const labelTStart = leftStart / scale;\n let t1: number;\n let t2: number;\n if (labelTStart < labelT) {\n t1 = labelTStart;\n t2 = labelT;\n } else {\n t1 = labelT;\n t2 = labelTStart;\n }\n selectionRef.current?.setAttribute(\n 'data-range',\n `${formatTimeSelection(t1)} — ${formatTimeSelection(t2)}`\n );\n selectionRef.current?.setAttribute(\n 'data-duration',\n `${formatTimeSelection(t2 - t1)} selected`\n );\n }\n\n if (Date.now() < hoverStartT) {\n nextFrame = requestAnimationFrame(onFrame);\n return;\n }\n\n if (scrollLeft !== scrollX || scrollTop !== scrollY) {\n scrollX = scrollLeft;\n scrollY = scrollTop;\n nextFrame = requestAnimationFrame(onFrame);\n return;\n }\n\n if (x - rect.left < 128) {\n labelTextRef.current?.setAttribute('data-align', 'left');\n } else if (x - rect.left > rect.width - 128) {\n labelTextRef.current?.setAttribute('data-align', 'right');\n } else {\n labelTextRef.current?.removeAttribute('data-align');\n }\n\n if (!hasMoved && !isExternalDrag) {\n const cache = memoCacheRef.current;\n\n // Span Hover\n const rowMin = getRowFromY(scrollTop) - HOVER_OVERSCAN;\n const rowMax = getRowFromY(scrollTop + rect.height) + HOVER_OVERSCAN;\n for (const span of spansRef.current) {\n const isHovered =\n span.row >= rowMin &&\n span.row <= rowMax &&\n t >= span.startTime &&\n t <= span.endTime;\n if (span.isHovered === isHovered) continue;\n span.isHovered = isHovered;\n cache.set(span.span.spanId, {});\n }\n\n // Event Hover — only show the nearest event when multiple overlap\n const eventSpreadPx = 12;\n const eventSpreadMs = eventSpreadPx / scale;\n let closestEvent: (typeof eventsRef.current)[number] | null = null;\n let closestDist = Infinity;\n for (const event of eventsRef.current) {\n const dist = Math.abs(event.timestamp - t);\n if (dist <= eventSpreadMs && dist < closestDist) {\n closestDist = dist;\n closestEvent = event;\n }\n }\n for (const event of eventsRef.current) {\n const isHovered = event === closestEvent;\n if (event.isHovered === isHovered) continue;\n event.isHovered = isHovered;\n const $event = event.ref?.current;\n if (!$event) continue;\n $event.setAttribute('data-hovered', String(isHovered));\n }\n\n dispatch({\n type: 'forceRender',\n });\n }\n };\n nextFrame = requestAnimationFrame(onFrame);\n\n const onPointerEnter = (event: PointerEvent): void => {\n if (event.pointerType !== 'mouse') return;\n hasEnteredRef.current = true;\n };\n const onPointerLeave = (): void => {\n if (!hasEnteredRef.current) return;\n hasEnteredRef.current = false;\n removeHover();\n };\n\n const onMouseMove = ({ clientX }: MouseEvent): void => {\n x = clientX;\n xRef.current = x;\n cancelAnimationFrame(nextFrame);\n nextFrame = requestAnimationFrame(onFrame);\n };\n\n const onContextMenu = (event: MouseEvent): void => {\n event.preventDefault();\n };\n const onMouseDown = (event: MouseEvent): void => {\n if (event.button === 2) {\n isRightClick = true;\n event.preventDefault();\n } else if (event.button !== 0) {\n return;\n } else {\n isRightClick = false;\n }\n if (timelineRef.current?.contains(event.target as HTMLElement)) {\n xStart = x;\n isDragging = true;\n } else {\n isExternalDrag = true;\n requestAnimationFrame(removeHover);\n }\n };\n const onMouseUp = (event: Event): void => {\n isExternalDrag = false;\n\n if (!isDragging) return;\n isDragging = false;\n\n if (!hasMoved) return;\n hasMoved = false;\n setSelectionStyle('display', '');\n setSelectionStyle('left', '');\n setSelectionStyle('right', '');\n setSelectionStyle('width', '');\n\n event.preventDefault();\n event.stopImmediatePropagation();\n\n if (isRightClick) {\n isRightClick = false;\n return;\n }\n\n if (!rectRef.current) updateRect();\n const rect = rectRef.current;\n if (!rect) return;\n\n const { scrollLeft } = $timeline;\n\n const start = Math.max(\n 0,\n Math.min(\n (xStart + scrollLeft - rect.left - TIMELINE_PADDING) / scale,\n root.duration\n )\n );\n const end = Math.max(\n 0,\n Math.min(\n (x + scrollLeft - rect.left - TIMELINE_PADDING) / scale,\n root.duration\n )\n );\n\n dispatch({\n type: 'scaleToRange',\n t1: start + root.startTime,\n t2: end + root.startTime,\n });\n };\n\n const onKeyDown = (event: KeyboardEvent): void => {\n if (!isDragging) return;\n if (event.key !== 'Escape') return;\n\n isRightClick = true;\n onMouseUp(event);\n };\n\n const onWindowScroll = (): void => {\n rectRef.current = undefined;\n trackpadZoomRef.current = undefined;\n cancelAnimationFrame(nextFrame);\n nextFrame = requestAnimationFrame(onFrame);\n };\n\n const onScroll = (): void => {\n cancelAnimationFrame(nextFrame);\n nextFrame = requestAnimationFrame(onFrame);\n };\n\n const observer = new ResizeObserver(() => {\n // NOTE: I tried to use the entry from this to immediately set the rect,\n // but for some reason it has different dimensions than the one from\n // .getBoundingClientRect()\n rectRef.current = undefined;\n });\n observer.observe($timeline);\n\n window.addEventListener('mousemove', onMouseMove);\n $timeline.addEventListener('contextmenu', onContextMenu);\n window.addEventListener('mousedown', onMouseDown);\n window.addEventListener('mouseup', onMouseUp);\n window.addEventListener('blur', onMouseUp);\n window.addEventListener('keydown', onKeyDown, true);\n window.addEventListener('scroll', onWindowScroll);\n $timeline.addEventListener('scroll', onScroll);\n $timeline.addEventListener('pointerenter', onPointerEnter);\n $timeline.addEventListener('pointerleave', onPointerLeave);\n\n return () => {\n observer.disconnect();\n window.removeEventListener('mousemove', onMouseMove);\n $timeline.removeEventListener('contextmenu', onContextMenu);\n window.removeEventListener('mousedown', onMouseDown);\n window.removeEventListener('mouseup', onMouseUp);\n window.removeEventListener('blur', onMouseUp);\n window.removeEventListener('keydown', onKeyDown, true);\n window.removeEventListener('scroll', onWindowScroll);\n $timeline.removeEventListener('scroll', onScroll);\n $timeline.removeEventListener('pointerenter', onPointerEnter);\n $timeline.removeEventListener('pointerleave', onPointerLeave);\n cancelAnimationFrame(nextFrame);\n xRef.current = x;\n removeHover();\n };\n }, [\n dispatch,\n root,\n scale,\n setStyle,\n setLabelStyle,\n setSelectionStyle,\n memoCacheRef,\n timelineRef,\n scrollSnapshotRef,\n ]);\n\n const trackpadZoomRef = useRef<TrackpadZoom>(undefined);\n useTrackpadZoom((delta) => {\n const $timeline = timelineRef.current;\n if (!$timeline) return;\n\n rectRef.current ??= $timeline.getBoundingClientRect();\n const rect = rectRef.current;\n const anchorX = Math.max(\n 0,\n Math.min(\n xRef.current - rect.left - TIMELINE_PADDING,\n rect.width - 2 * TIMELINE_PADDING\n )\n );\n\n let anchorT = 0;\n let existing = trackpadZoomRef.current;\n if (existing?.anchorX === anchorX) {\n anchorT = existing.anchorT;\n } else {\n anchorT = ($timeline.scrollLeft + anchorX) / scale;\n existing = {\n anchorT,\n anchorX,\n };\n trackpadZoomRef.current = existing;\n }\n\n dispatch({\n type: 'trackpadScale',\n delta: delta / 64,\n anchorT,\n anchorX,\n });\n });\n\n return (\n <>\n <div className={styles.cursorMarkerStickyParent}>\n <div\n className={styles.cursorMarkerLabelContainer}\n ref={labelRef}\n style={labelStyle}\n >\n <div className={styles.cursorMarkerLabel} ref={labelTextRef} />\n </div>\n </div>\n <div className={styles.cursorMarkerStickyParent}>\n <div className={styles.cursorMarkerContainer} ref={ref} style={style}>\n <div className={styles.cursorMarker}>\n <div\n className={styles.cursorSelection}\n ref={selectionRef}\n style={selectionStyle}\n />\n </div>\n </div>\n </div>\n </>\n );\n}\n"]}
@@ -1,35 +0,0 @@
1
- import type { MutableRefObject } from 'react';
2
- import type { MemoCache, MemoCacheKey, RootNode, ScrollSnapshot, SpanNode, VisibleSpan, VisibleSpanEvent } from '../types';
3
- export declare const getSpanColorClassName: (node: SpanNode) => string;
4
- export declare const SpanNodes: import("react").NamedExoticComponent<{
5
- root: RootNode;
6
- scale: number;
7
- spans: VisibleSpan[];
8
- isLive?: boolean;
9
- scrollSnapshotRef: MutableRefObject<ScrollSnapshot | undefined>;
10
- /** Not used in the body — exists solely to bust React.memo when the global memo cache changes. */
11
- cacheKey?: MemoCacheKey;
12
- cache: MemoCache;
13
- customSpanClassNameFunc?: (span: SpanNode) => string;
14
- customSpanEventClassNameFunc?: (event: VisibleSpanEvent) => string;
15
- }>;
16
- export declare const SpanComponent: import("react").NamedExoticComponent<{
17
- node: VisibleSpan;
18
- root: RootNode;
19
- scale: number;
20
- traceIsLive?: boolean;
21
- scrollSnapshotRef: MutableRefObject<ScrollSnapshot | undefined>;
22
- /** Not used in the body — exists solely to bust React.memo for this span. */
23
- cacheKey?: MemoCacheKey;
24
- customSpanClassNameFunc?: (span: SpanNode) => string;
25
- customSpanEventClassNameFunc?: (event: VisibleSpanEvent) => string;
26
- }>;
27
- export declare const SpanEventComponent: import("react").NamedExoticComponent<{
28
- event: VisibleSpanEvent;
29
- node: VisibleSpan;
30
- root: RootNode;
31
- scale: number;
32
- customSpanEventClassNameFunc?: (event: VisibleSpanEvent) => string;
33
- asBoundary?: boolean;
34
- }>;
35
- //# sourceMappingURL=node.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../../../src/components/trace-viewer/components/node.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAiB,gBAAgB,EAAa,MAAM,OAAO,CAAC;AAGxE,OAAO,KAAK,EACV,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,cAAc,EACd,QAAQ,EACR,WAAW,EACX,gBAAgB,EACjB,MAAM,UAAU,CAAC;AAYlB,eAAO,MAAM,qBAAqB,GAAI,MAAM,QAAQ,KAAG,MAGtD,CAAC;AAoDF,eAAO,MAAM,SAAS;UAUd,QAAQ;WACP,MAAM;WACN,WAAW,EAAE;aACX,OAAO;uBACG,gBAAgB,CAAC,cAAc,GAAG,SAAS,CAAC;IAC/D,kGAAkG;eACvF,YAAY;WAChB,SAAS;8BACU,CAAC,IAAI,EAAE,QAAQ,KAAK,MAAM;mCACrB,CAAC,KAAK,EAAE,gBAAgB,KAAK,MAAM;EAelE,CAAC;AAuCH,eAAO,MAAM,aAAa;UASlB,WAAW;UACX,QAAQ;WACP,MAAM;kBACC,OAAO;uBACF,gBAAgB,CAAC,cAAc,GAAG,SAAS,CAAC;IAC/D,6EAA6E;eAClE,YAAY;8BACG,CAAC,IAAI,EAAE,QAAQ,KAAK,MAAM;mCACrB,CAAC,KAAK,EAAE,gBAAgB,KAAK,MAAM;EA6KlE,CAAC;AAsBH,eAAO,MAAM,kBAAkB;WAQtB,gBAAgB;UACjB,WAAW;UACX,QAAQ;WACP,MAAM;mCACkB,CAAC,KAAK,EAAE,gBAAgB,KAAK,MAAM;iBACrD,OAAO;EA6HpB,CAAC"}