@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
@@ -220,4 +220,4 @@ export function ResolveHookModal({ isOpen, onClose, onSubmit, isSubmitting = fal
220
220
  e.currentTarget.style.opacity = '1';
221
221
  }, children: [_jsx(Send, { style: { width: 14, height: 14 } }), isSubmitting ? 'Sending...' : 'Send Payload'] })] })] })] })] }));
222
222
  }
223
- //# sourceMappingURL=resolve-hook-modal.js.map
223
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZS1ob29rLW1vZGFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvc2lkZWJhci9yZXNvbHZlLWhvb2stbW9kYWwudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7QUFFYixPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN2QyxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBYWpFOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUFDLEVBQy9CLE1BQU0sRUFDTixPQUFPLEVBQ1AsUUFBUSxFQUNSLFlBQVksR0FBRyxLQUFLLEdBQ0U7SUFDdEIsTUFBTSxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsR0FBRyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDL0MsTUFBTSxDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsR0FBRyxRQUFRLENBQWdCLElBQUksQ0FBQyxDQUFDO0lBQ2xFLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBc0IsSUFBSSxDQUFDLENBQUM7SUFFdEQsMENBQTBDO0lBQzFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDYixJQUFJLE1BQU0sSUFBSSxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM5QixDQUFDO0lBQ0gsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUViLGdDQUFnQztJQUNoQyxTQUFTLENBQUMsR0FBRyxFQUFFO1FBQ2IsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ1osWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2pCLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QixDQUFDO0lBQ0gsQ0FBQyxFQUFFLENB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RyxLQUFLLENBQUM7d0NBQzNELENBQUMsRUFDRCxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTs0Q0FDbEIsSUFBSSxDQUFDLFlBQVk7Z0RBQUUsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQzt3Q0FDekQsQ0FBQyxhQUVELEtBQUMsSUFBSSxJQUFDLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFJLEVBQ3pDLFlBQVksQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxjQUFjLElBQ3RDLElBQ0wsSUFDRCxJQUNILElBQ0YsQ0FDUCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0IHsgU2VuZCwgWCB9IGZyb20gJ2x1Y2lkZS1yZWFjdCc7XG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuXG5pbnRlcmZhY2UgUmVzb2x2ZUhvb2tNb2RhbFByb3BzIHtcbiAgLyoqIFdoZXRoZXIgdGhlIG1vZGFsIGlzIG9wZW4gKi9cbiAgaXNPcGVuOiBib29sZWFuO1xuICAvKiogQ2FsbGJhY2sgd2hlbiB0aGUgbW9kYWwgc2hvdWxkIGJlIGNsb3NlZCAqL1xuICBvbkNsb3NlOiAoKSA9PiB2b2lkO1xuICAvKiogQ2FsbGJhY2sgd2hlbiB0aGUgZm9ybSBpcyBzdWJtaXR0ZWQgd2l0aCB0aGUgcGFyc2VkIEpTT04gcGF5bG9hZCAqL1xuICBvblN1Ym1pdDogKHBheWxvYWQ6IHVua25vd24pID0+IFByb21pc2U8dm9pZD47XG4gIC8qKiBXaGV0aGVyIHRoZSBzdWJtaXNzaW9uIGlzIGluIHByb2dyZXNzICovXG4gIGlzU3VibWl0dGluZz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogTW9kYWwgY29tcG9uZW50IGZvciByZXNvbHZpbmcgYSBob29rIGJ5IGVudGVyaW5nIGEgSlNPTiBwYXlsb2FkLlxuICpcbiAqIFN0eWxlZCB0byBtYXRjaCB0aGUgR2Vpc3QgZGVzaWduLXN5c3RlbSBkaWFsb2cgY29tcG9uZW50IHVzZWQgaW4gdGhlXG4gKiBWZXJjZWwgZGFzaGJvYXJkIHNvIGl0IGxvb2tzIG5hdGl2ZSB3aGVuIHJlbmRlcmVkIGluc2lkZSBgZnJvbnRgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gUmVzb2x2ZUhvb2tNb2RhbCh7XG4gIGlzT3BlbixcbiAgb25DbG9zZSxcbiAgb25TdWJtaXQsXG4gIGlzU3VibWl0dGluZyA9IGZhbHNlLFxufTogUmVzb2x2ZUhvb2tNb2RhbFByb3BzKTogUmVhY3QuSlNYLkVsZW1lbnQgfCBudWxsIHtcbiAgY29uc3QgW2pzb25JbnB1dCwgc2V0SnNvbklucHV0XSA9IHVzZVN0YXRlKCcnKTtcbiAgY29uc3QgW3BhcnNlRXJyb3IsIHNldFBhcnNlRXJyb3JdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IHRleHRhcmVhUmVmID0gdXNlUmVmPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KG51bGwpO1xuXG4gIC8vIEZvY3VzIHRoZSB0ZXh0YXJlYSB3aGVuIHRoZSBtb2RhbCBvcGVuc1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpc09wZW4gJiYgdGV4dGFyZWFSZWYuY3VycmVudCkge1xuICAgICAgdGV4dGFyZWFSZWYuY3VycmVudC5mb2N1cygpO1xuICAgIH1cbiAgfSwgW2lzT3Blbl0pO1xuXG4gIC8vIFJlc2V0IHN0YXRlIHdoZW4gbW9kYWwgY2xvc2VzXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc09wZW4pIHtcbiAgICAgIHNldEpzb25JbnB1dCgnJyk7XG4gICAgICBzZXRQYXJzZUVycm9yKG51bGwpO1xuICAgIH1cbiAgfSwgW2lzT3Blbl0pO1xuXG4gIC8vIEhhbmRsZSBlc2NhcGUga2V5IHRvIGNsb3NlXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlS2V5RG93biA9IChlOiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICBpZiAoZS5rZXkgPT09ICdFc2NhcGUnICYmIGlzT3BlbiAmJiAhaXNTdWJtaXR0aW5nKSB7XG4gICAgICAgIG9uQ2xvc2UoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVLZXlEb3duKTtcbiAgICByZXR1cm4gKCkgPT4gZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGhhbmRsZUtleURvd24pO1xuICB9LCBbaXNPcGVuLCBpc1N1Ym1pdHRpbmcsIG9uQ2xvc2VdKTtcblxuICBjb25zdCBzdWJtaXRQYXlsb2FkID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIHNldFBhcnNlRXJyb3IobnVsbCk7XG5cbiAgICAvLyBQYXJzZSB0aGUgSlNPTiBpbnB1dFxuICAgIGxldCBwYXlsb2FkOiB1bmtub3duO1xuICAgIHRyeSB7XG4gICAgICAvLyBBbGxvdyBlbXB0eSBzdHJpbmcgYXMgbnVsbCBwYXlsb2FkXG4gICAgICBpZiAoanNvbklucHV0LnRyaW0oKSA9PT0gJycpIHtcbiAgICAgICAgcGF5bG9hZCA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXlsb2FkID0gSlNPTi5wYXJzZShqc29uSW5wdXQpO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgc2V0UGFyc2VFcnJvcignSW52YWxpZCBKU09OLiBQbGVhc2UgY2hlY2sgeW91ciBpbnB1dC4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBhd2FpdCBvblN1Ym1pdChwYXlsb2FkKTtcbiAgfSwgW2pzb25JbnB1dCwgb25TdWJtaXRdKTtcblxuICBjb25zdCBoYW5kbGVTdWJtaXQgPSB1c2VDYWxsYmFjayhcbiAgICAoZTogUmVhY3QuRm9ybUV2ZW50KSA9PiB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB2b2lkIHN1Ym1pdFBheWxvYWQoKTtcbiAgICB9LFxuICAgIFtzdWJtaXRQYXlsb2FkXVxuICApO1xuXG4gIGNvbnN0IGlzTWFjUGxhdGZvcm0gPVxuICAgIHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmXG4gICAgKFxuICAgICAgKG5hdmlnYXRvciBhcyBOYXZpZ2F0b3IgJiB7IHVzZXJBZ2VudERhdGE/OiB7IHBsYXRmb3JtPzogc3RyaW5nIH0gfSlcbiAgICAgICAgLnVzZXJBZ2VudERhdGE/LnBsYXRmb3JtID8/IG5hdmlnYXRvci51c2VyQWdlbnRcbiAgICApXG4gICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgLmluY2x1ZGVzKCdtYWMnKTtcblxuICAvLyBIYW5kbGUgQ21kL0N0cmwgKyBFbnRlciB0byBzdWJtaXRcbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBSZWFjdC5LZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICBpZiAoKGUubWV0YUtleSB8fCBlLmN0cmxLZXkpICYmIGUua2V5ID09PSAnRW50ZXInICYmICFpc1N1Ym1pdHRpbmcpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBoYW5kbGVTdWJtaXQoZSBhcyB1bmtub3duIGFzIFJlYWN0LkZvcm1FdmVudCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbaGFuZGxlU3VibWl0LCBpc1N1Ym1pdHRpbmddXG4gICk7XG5cbiAgaWYgKCFpc09wZW4pIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgc3R5bGU9e3tcbiAgICAgICAgcG9zaXRpb246ICdmaXhlZCcsXG4gICAgICAgIGluc2V0OiAwLFxuICAgICAgICB6SW5kZXg6IDUwLFxuICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICB9fVxuICAgICAgcm9sZT1cImRpYWxvZ1wiXG4gICAgICBhcmlhLW1vZGFsPVwidHJ1ZVwiXG4gICAgICBhcmlhLWxhYmVsbGVkYnk9XCJyZXNvbHZlLWhvb2stbW9kYWwtdGl0bGVcIlxuICAgID5cbiAgICAgIHsvKiBCYWNrZHJvcCDigJQgbWF0Y2hlcyBHZWlzdCBkaWFsb2cgOjpiYWNrZHJvcCAqL31cbiAgICAgIDxkaXZcbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICBpbnNldDogMCxcbiAgICAgICAgICBiYWNrZ3JvdW5kOiAncmdiYSgwLCAwLCAwLCAwLjcpJyxcbiAgICAgICAgfX1cbiAgICAgICAgb25DbGljaz17aXNTdWJtaXR0aW5nID8gdW5kZWZpbmVkIDogb25DbG9zZX1cbiAgICAgIC8+XG5cbiAgICAgIHsvKiBNb2RhbCBjYXJkIOKAlCBtYXRjaGVzIEdlaXN0IGRpYWxvZy5nZWlzdC1kaWFsb2cgKi99XG4gICAgICA8ZGl2XG4gICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgICAgICAgekluZGV4OiAxMCxcbiAgICAgICAgICB3aWR0aDogNDgwLFxuICAgICAgICAgIG1heFdpZHRoOiAnY2FsYygxMDAlIC0gMzJweCknLFxuICAgICAgICAgIGJvcmRlclJhZGl1czogMTIsXG4gICAgICAgICAgYm9yZGVyOiAnbm9uZScsXG4gICAgICAgICAgYm94U2hhZG93OiAndmFyKC0tZHMtc2hhZG93LW1lbnUpJyxcbiAgICAgICAgICBiYWNrZ3JvdW5kOiAndmFyKC0tZHMtYmFja2dyb3VuZC0xMDApJyxcbiAgICAgICAgICBjb2xvcjogJ3ZhcigtLWRzLWdyYXktMTAwMCknLFxuICAgICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgey8qIEhlYWRlciAqL31cbiAgICAgICAgPGRpdlxuICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnc3BhY2UtYmV0d2VlbicsXG4gICAgICAgICAgICBwYWRkaW5nOiAnMTZweCAyNHB4JyxcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAgPGgyXG4gICAgICAgICAgICBpZD1cInJlc29sdmUtaG9vay1tb2RhbC10aXRsZVwiXG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICBtYXJnaW46IDAsXG4gICAgICAgICAgICAgIGZvbnRTaXplOiAxNixcbiAgICAgICAgICAgICAgZm9udFdlaWdodDogNjAwLFxuICAgICAgICAgICAgICBjb2xvcjogJ3ZhcigtLWRzLWdyYXktMTAwMCknLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICBSZXNvbHZlIEhvb2tcbiAgICAgICAgICA8L2gyPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgb25DbGljaz17b25DbG9zZX1cbiAgICAgICAgICAgIGRpc2FibGVkPXtpc1N1Ym1pdHRpbmd9XG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiQ2xvc2UgbW9kYWxcIlxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgICBwYWRkaW5nOiA0LFxuICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IDYsXG4gICAgICAgICAgICAgIGJvcmRlcjogJ25vbmUnLFxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgICBjb2xvcjogJ3ZhcigtLWRzLWdyYXktOTAwKScsXG4gICAgICAgICAgICAgIGN1cnNvcjogaXNTdWJtaXR0aW5nID8gJ25vdC1hbGxvd2VkJyA6ICdwb2ludGVyJyxcbiAgICAgICAgICAgICAgb3BhY2l0eTogaXNTdWJtaXR0aW5nID8gMC41IDogMSxcbiAgICAgICAgICAgICAgdHJhbnNpdGlvbjogJ2JhY2tncm91bmQgMC4xNXMnLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIG9uTW91c2VFbnRlcj17KGUpID0+IHtcbiAgICAgICAgICAgICAgZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmJhY2tncm91bmQgPSAndmFyKC0tZHMtZ3JheS1hbHBoYS0yMDApJztcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBvbk1vdXNlTGVhdmU9eyhlKSA9PiB7XG4gICAgICAgICAgICAgIGUuY3VycmVudFRhcmdldC5zdHlsZS5iYWNrZ3JvdW5kID0gJ3RyYW5zcGFyZW50JztcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFggc3R5bGU9e3sgd2lkdGg6IDE2LCBoZWlnaHQ6IDE2IH19IC8+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIHsvKiBCb2R5ICovfVxuICAgICAgICA8Zm9ybSBvblN1Ym1pdD17aGFuZGxlU3VibWl0fT5cbiAgICAgICAgICA8ZGl2IHN0eWxlPXt7IHBhZGRpbmc6ICcwIDI0cHggMTZweCcgfX0+XG4gICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgaHRtbEZvcj1cImpzb24tcGF5bG9hZFwiXG4gICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogJ2Jsb2NrJyxcbiAgICAgICAgICAgICAgICBmb250U2l6ZTogMTQsXG4gICAgICAgICAgICAgICAgZm9udFdlaWdodDogNTAwLFxuICAgICAgICAgICAgICAgIG1hcmdpbkJvdHRvbTogNixcbiAgICAgICAgICAgICAgICBjb2xvcjogJ3ZhcigtLWRzLWdyYXktMTAwMCknLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBKU09OIFBheWxvYWRcbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8cFxuICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgIGZvbnRTaXplOiAxMyxcbiAgICAgICAgICAgICAgICBtYXJnaW5Cb3R0b206IDEyLFxuICAgICAgICAgICAgICAgIG1hcmdpblRvcDogMCxcbiAgICAgICAgICAgICAgICBjb2xvcjogJ3ZhcigtLWRzLWdyYXktOTAwKScsXG4gICAgICAgICAgICAgICAgbGluZUhlaWdodDogMS41LFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBFbnRlciBhIEpTT04gdmFsdWUgdG8gc2VuZCB0byB0aGUgaG9vay4gTGVhdmUgZW1wdHkgdG8gc2VuZHsnICd9XG4gICAgICAgICAgICAgIDxjb2RlXG4gICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgIHBhZGRpbmc6ICcycHggNnB4JyxcbiAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogNCxcbiAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiAxMixcbiAgICAgICAgICAgICAgICAgIGZvbnRGYW1pbHk6XG4gICAgICAgICAgICAgICAgICAgICd2YXIoLS1mb250LW1vbm8sIHVpLW1vbm9zcGFjZSwgU0ZNb25vLVJlZ3VsYXIsIFwiU0YgTW9ub1wiLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSknLFxuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJ3ZhcigtLWRzLWdyYXktYWxwaGEtMjAwKScsXG4gICAgICAgICAgICAgICAgICBjb2xvcjogJ3ZhcigtLWRzLWdyYXktMTAwMCknLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICAgIDwvY29kZT5cbiAgICAgICAgICAgICAgLlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPHRleHRhcmVhXG4gICAgICAgICAgICAgIHJlZj17dGV4dGFyZWFSZWZ9XG4gICAgICAgICAgICAgIGlkPVwianNvbi1wYXlsb2FkXCJcbiAgICAgICAgICAgICAgdmFsdWU9e2pzb25JbnB1dH1cbiAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgc2V0SnNvbklucHV0KGUudGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgICAgICAgICBzZXRQYXJzZUVycm9yKG51bGwpO1xuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBvbktleURvd249e2hhbmRsZUtleURvd259XG4gICAgICAgICAgICAgIGRpc2FibGVkPXtpc1N1Ym1pdHRpbmd9XG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSd7XCJrZXlcIjogXCJ2YWx1ZVwifSdcbiAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgIGhlaWdodDogMTYwLFxuICAgICAgICAgICAgICAgIHBhZGRpbmc6ICc4cHggMTJweCcsXG4gICAgICAgICAgICAgICAgZm9udEZhbWlseTpcbiAgICAgICAgICAgICAgICAgICd2YXIoLS1mb250LW1vbm8sIHVpLW1vbm9zcGFjZSwgU0ZNb25vLVJlZ3VsYXIsIFwiU0YgTW9ub1wiLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSknLFxuICAgICAgICAgICAgICAgIGZvbnRTaXplOiAxMyxcbiAgICAgICAgICAgICAgICBsaW5lSGVpZ2h0OiAxLjUsXG4gICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiA4LFxuICAgICAgICAgICAgICAgIGJvcmRlcjogYDFweCBzb2xpZCAke3BhcnNlRXJyb3IgPyAndmFyKC0tZHMtcmVkLTcwMCknIDogJ3ZhcigtLWRzLWdyYXktYWxwaGEtNDAwKSd9YCxcbiAgICAgICAgICAgICAgICBjb2xvcjogJ3ZhcigtLWRzLWdyYXktMTAwMCknLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICd2YXIoLS1kcy1iYWNrZ3JvdW5kLTEwMCknLFxuICAgICAgICAgICAgICAgIG91dGxpbmU6ICdub25lJyxcbiAgICAgICAgICAgICAgICByZXNpemU6ICdub25lJyxcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiBpc1N1Ym1pdHRpbmcgPyAwLjUgOiAxLFxuICAgICAgICAgICAgICAgIGN1cnNvcjogaXNTdWJtaXR0aW5nID8gJ25vdC1hbGxvd2VkJyA6ICd0ZXh0JyxcbiAgICAgICAgICAgICAgICBib3hTaXppbmc6ICdib3JkZXItYm94JyxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB7cGFyc2VFcnJvciAmJiAoXG4gICAgICAgICAgICAgIDxwXG4gICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgIG1hcmdpblRvcDogOCxcbiAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiAxMyxcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiAndmFyKC0tZHMtcmVkLTkwMCknLFxuICAgICAgICAgICAgICAgICAgbWFyZ2luOiAnOHB4IDAgMCcsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtwYXJzZUVycm9yfVxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPHBcbiAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICBtYXJnaW5Ub3A6IDgsXG4gICAgICAgICAgICAgICAgZm9udFNpemU6IDEyLFxuICAgICAgICAgICAgICAgIGNvbG9yOiAndmFyKC0tZHMtZ3JheS04MDApJyxcbiAgICAgICAgICAgICAgICBtYXJnaW46ICc4cHggMCAwJyxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgUHJlc3N7JyAnfVxuICAgICAgICAgICAgICA8a2JkXG4gICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgIHBhZGRpbmc6ICcycHggNXB4JyxcbiAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogNCxcbiAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiAxMSxcbiAgICAgICAgICAgICAgICAgIGZvbnRGYW1pbHk6XG4gICAgICAgICAgICAgICAgICAgICd2YXIoLS1mb250LW1vbm8sIHVpLW1vbm9zcGFjZSwgU0ZNb25vLVJlZ3VsYXIsIFwiU0YgTW9ub1wiLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSknLFxuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJ3ZhcigtLWRzLWdyYXktYWxwaGEtMjAwKScsXG4gICAgICAgICAgICAgICAgICBib3JkZXI6ICcxcHggc29saWQgdmFyKC0tZHMtZ3JheS1hbHBoYS00MDApJyxcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge2lzTWFjUGxhdGZvcm0gPyAn4oyYJyA6ICdDdHJsJ31cbiAgICAgICAgICAgICAgICArRW50ZXJcbiAgICAgICAgICAgICAgPC9rYmQ+eycgJ31cbiAgICAgICAgICAgICAgdG8gc3VibWl0XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICB7LyogRm9vdGVyICovfVxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnZmxleC1lbmQnLFxuICAgICAgICAgICAgICBnYXA6IDgsXG4gICAgICAgICAgICAgIHBhZGRpbmc6ICcxMnB4IDI0cHgnLFxuICAgICAgICAgICAgICBib3JkZXJUb3A6ICcxcHggc29saWQgdmFyKC0tZHMtZ3JheS1hbHBoYS00MDApJyxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgb25DbGljaz17b25DbG9zZX1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzU3VibWl0dGluZ31cbiAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAnOHB4IDE2cHgnLFxuICAgICAgICAgICAgICAgIGZvbnRTaXplOiAxNCxcbiAgICAgICAgICAgICAgICBmb250V2VpZ2h0OiA1MDAsXG4gICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiA4LFxuICAgICAgICAgICAgICAgIGJvcmRlcjogJzFweCBzb2xpZCB2YXIoLS1kcy1ncmF5LWFscGhhLTQwMCknLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICd2YXIoLS1kcy1iYWNrZ3JvdW5kLTEwMCknLFxuICAgICAgICAgICAgICAgIGNvbG9yOiAndmFyKC0tZHMtZ3JheS0xMDAwKScsXG4gICAgICAgICAgICAgICAgY3Vyc29yOiBpc1N1Ym1pdHRpbmcgPyAnbm90LWFsbG93ZWQnIDogJ3BvaW50ZXInLFxuICAgICAgICAgICAgICAgIG9wYWNpdHk6IGlzU3VibWl0dGluZyA/IDAuNSA6IDEsXG4gICAgICAgICAgICAgICAgdHJhbnNpdGlvbjogJ2JhY2tncm91bmQgMC4xNXMnLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBvbk1vdXNlRW50ZXI9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmJhY2tncm91bmQgPSAndmFyKC0tZHMtZ3JheS1hbHBoYS0xMDApJztcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgb25Nb3VzZUxlYXZlPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGUuY3VycmVudFRhcmdldC5zdHlsZS5iYWNrZ3JvdW5kID0gJ3ZhcigtLWRzLWJhY2tncm91bmQtMTAwKSc7XG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIENhbmNlbFxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB2b2lkIHN1Ym1pdFBheWxvYWQoKX1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzU3VibWl0dGluZ31cbiAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgZ2FwOiA2LFxuICAgICAgICAgICAgICAgIHBhZGRpbmc6ICc4cHggMTZweCcsXG4gICAgICAgICAgICAgICAgZm9udFNpemU6IDE0LFxuICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IDUwMCxcbiAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IDgsXG4gICAgICAgICAgICAgICAgYm9yZGVyOiAnbm9uZScsXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJ3ZhcigtLWRzLWdyYXktMTAwMCknLFxuICAgICAgICAgICAgICAgIGNvbG9yOiAndmFyKC0tZHMtYmFja2dyb3VuZC0xMDApJyxcbiAgICAgICAgICAgICAgICBjdXJzb3I6IGlzU3VibWl0dGluZyA/ICdub3QtYWxsb3dlZCcgOiAncG9pbnRlcicsXG4gICAgICAgICAgICAgICAgb3BhY2l0eTogaXNTdWJtaXR0aW5nID8gMC41IDogMSxcbiAgICAgICAgICAgICAgICB0cmFuc2l0aW9uOiAnb3BhY2l0eSAwLjE1cycsXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIG9uTW91c2VFbnRlcj17KGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzU3VibWl0dGluZykgZS5jdXJyZW50VGFyZ2V0LnN0eWxlLm9wYWNpdHkgPSAnMC45JztcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgb25Nb3VzZUxlYXZlPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghaXNTdWJtaXR0aW5nKSBlLmN1cnJlbnRUYXJnZXQuc3R5bGUub3BhY2l0eSA9ICcxJztcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPFNlbmQgc3R5bGU9e3sgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH19IC8+XG4gICAgICAgICAgICAgIHtpc1N1Ym1pdHRpbmcgPyAnU2VuZGluZy4uLicgOiAnU2VuZCBQYXlsb2FkJ31cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Zvcm0+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cbiJdfQ==
@@ -1,24 +1,27 @@
1
+ import type { Event, Hook, WorkflowRun } from '@workflow/world';
1
2
  import { type ReactNode } from 'react';
2
- import type { Event, Hook, Step, WorkflowRun } from '@workflow/world';
3
- import type { SpanSelectionInfo } from './entity-detail-panel';
3
+ import type { FetchSpanDetail } from './use-selected-span-detail';
4
4
  export interface SidebarDataContextValue {
5
5
  run: WorkflowRun;
6
6
  events: Event[];
7
- spanDetailData: WorkflowRun | Step | Hook | Event | null;
8
- spanDetailError?: Error | null;
9
- spanDetailLoading?: boolean;
10
- onSpanSelect: (info: SpanSelectionInfo) => void;
7
+ fetchSpanDetail: FetchSpanDetail;
11
8
  onStreamClick?: (streamId: string) => void;
12
9
  onRunClick?: (runId: string) => void;
13
10
  onWakeUpSleep?: (runId: string, correlationId: string) => Promise<{
14
11
  stoppedCount: number;
15
12
  }>;
16
- onLoadEventData?: (correlationId: string, eventId: string) => Promise<unknown | null>;
13
+ onLoadEventData?: (event: Event) => Promise<unknown | null>;
17
14
  onResolveHook?: (hookToken: string, payload: unknown, hook?: Hook) => Promise<void>;
18
15
  encryptionKey?: Uint8Array;
19
16
  onDecrypt?: () => void;
20
17
  isDecrypting?: boolean;
21
18
  hasEncryptedData?: boolean;
19
+ /** Show occurredAt separately instead of folding it into the Created timestamp. */
20
+ showSeparateEventOccurrenceTimestamps?: boolean;
21
+ getModuleSourceUrl?: (info: {
22
+ moduleSpecifier: string;
23
+ deploymentId: string;
24
+ }) => string | undefined;
22
25
  }
23
26
  export declare function SidebarDataProvider({ value, children, }: {
24
27
  value: SidebarDataContextValue;
@@ -1 +1 @@
1
- {"version":3,"file":"sidebar-data-context.d.ts","sourceRoot":"","sources":["../../../src/components/sidebar/sidebar-data-context.tsx"],"names":[],"mappings":"AAEA,OAAO,EAA6B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAClE,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACtE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,MAAM,WAAW,uBAAuB;IACtC,GAAG,EAAE,WAAW,CAAC;IACjB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,cAAc,EAAE,WAAW,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC;IACzD,eAAe,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IAC/B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,YAAY,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAChD,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,aAAa,CAAC,EAAE,CACd,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,KAClB,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvC,eAAe,CAAC,EAAE,CAChB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,KACZ,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAC7B,aAAa,CAAC,EAAE,CACd,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,OAAO,EAChB,IAAI,CAAC,EAAE,IAAI,KACR,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,aAAa,CAAC,EAAE,UAAU,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAKD,wBAAgB,mBAAmB,CAAC,EAClC,KAAK,EACL,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,uBAAuB,CAAC;IAC/B,QAAQ,EAAE,SAAS,CAAC;CACrB,2CAMA;AAED,wBAAgB,cAAc,IAAI,uBAAuB,CAMxD;AAED,wBAAgB,sBAAsB,IAAI,uBAAuB,GAAG,IAAI,CAEvE"}
1
+ {"version":3,"file":"sidebar-data-context.d.ts","sourceRoot":"","sources":["../../../src/components/sidebar/sidebar-data-context.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAiB,KAAK,SAAS,EAAc,MAAM,OAAO,CAAC;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAElE,MAAM,WAAW,uBAAuB;IACtC,GAAG,EAAE,WAAW,CAAC;IACjB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,eAAe,EAAE,eAAe,CAAC;IACjC,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,aAAa,CAAC,EAAE,CACd,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,KAClB,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvC,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAC5D,aAAa,CAAC,EAAE,CACd,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,OAAO,EAChB,IAAI,CAAC,EAAE,IAAI,KACR,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,aAAa,CAAC,EAAE,UAAU,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,mFAAmF;IACnF,qCAAqC,CAAC,EAAE,OAAO,CAAC;IAChD,kBAAkB,CAAC,EAAE,CAAC,IAAI,EAAE;QAC1B,eAAe,EAAE,MAAM,CAAC;QACxB,YAAY,EAAE,MAAM,CAAC;KACtB,KAAK,MAAM,GAAG,SAAS,CAAC;CAC1B;AAKD,wBAAgB,mBAAmB,CAAC,EAClC,KAAK,EACL,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,uBAAuB,CAAC;IAC/B,QAAQ,EAAE,SAAS,CAAC;CACrB,2CAMA;AAED,wBAAgB,cAAc,IAAI,uBAAuB,CAMxD;AAED,wBAAgB,sBAAsB,IAAI,uBAAuB,GAAG,IAAI,CAEvE"}
@@ -16,4 +16,4 @@ export function useSidebarData() {
16
16
  export function useSidebarDataOptional() {
17
17
  return useContext(SidebarDataContext);
18
18
  }
19
- //# sourceMappingURL=sidebar-data-context.js.map
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZWJhci1kYXRhLWNvbnRleHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy9zaWRlYmFyL3NpZGViYXItZGF0YS1jb250ZXh0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUM7O0FBR2IsT0FBTyxFQUFFLGFBQWEsRUFBa0IsVUFBVSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBK0JsRSxNQUFNLGtCQUFrQixHQUFHLGFBQWEsQ0FBaUMsSUFBSSxDQUFDLENBQUM7QUFDL0Usa0JBQWtCLENBQUMsV0FBVyxHQUFHLG9CQUFvQixDQUFDO0FBRXRELE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxFQUNsQyxLQUFLLEVBQ0wsUUFBUSxHQUlUO0lBQ0MsT0FBTyxDQUNMLEtBQUMsa0JBQWtCLENBQUMsUUFBUSxJQUFDLEtBQUssRUFBRSxLQUFLLFlBQ3RDLFFBQVEsR0FDbUIsQ0FDL0IsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsY0FBYztJQUM1QixNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUMzQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDVCxNQUFNLElBQUksS0FBSyxDQUFDLDBEQUEwRCxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sVUFBVSxzQkFBc0I7SUFDcEMsT0FBTyxVQUFVLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUN4QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgdHlwZSB7IEV2ZW50LCBIb29rLCBXb3JrZmxvd1J1biB9IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgeyBjcmVhdGVDb250ZXh0LCB0eXBlIFJlYWN0Tm9kZSwgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB0eXBlIHsgRmV0Y2hTcGFuRGV0YWlsIH0gZnJvbSAnLi91c2Utc2VsZWN0ZWQtc3Bhbi1kZXRhaWwnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNpZGViYXJEYXRhQ29udGV4dFZhbHVlIHtcbiAgcnVuOiBXb3JrZmxvd1J1bjtcbiAgZXZlbnRzOiBFdmVudFtdO1xuICBmZXRjaFNwYW5EZXRhaWw6IEZldGNoU3BhbkRldGFpbDtcbiAgb25TdHJlYW1DbGljaz86IChzdHJlYW1JZDogc3RyaW5nKSA9PiB2b2lkO1xuICBvblJ1bkNsaWNrPzogKHJ1bklkOiBzdHJpbmcpID0+IHZvaWQ7XG4gIG9uV2FrZVVwU2xlZXA/OiAoXG4gICAgcnVuSWQ6IHN0cmluZyxcbiAgICBjb3JyZWxhdGlvbklkOiBzdHJpbmdcbiAgKSA9PiBQcm9taXNlPHsgc3RvcHBlZENvdW50OiBudW1iZXIgfT47XG4gIG9uTG9hZEV2ZW50RGF0YT86IChldmVudDogRXZlbnQpID0+IFByb21pc2U8dW5rbm93biB8IG51bGw+O1xuICBvblJlc29sdmVIb29rPzogKFxuICAgIGhvb2tUb2tlbjogc3RyaW5nLFxuICAgIHBheWxvYWQ6IHVua25vd24sXG4gICAgaG9vaz86IEhvb2tcbiAgKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBlbmNyeXB0aW9uS2V5PzogVWludDhBcnJheTtcbiAgb25EZWNyeXB0PzogKCkgPT4gdm9pZDtcbiAgaXNEZWNyeXB0aW5nPzogYm9vbGVhbjtcbiAgaGFzRW5jcnlwdGVkRGF0YT86IGJvb2xlYW47XG4gIC8qKiBTaG93IG9jY3VycmVkQXQgc2VwYXJhdGVseSBpbnN0ZWFkIG9mIGZvbGRpbmcgaXQgaW50byB0aGUgQ3JlYXRlZCB0aW1lc3RhbXAuICovXG4gIHNob3dTZXBhcmF0ZUV2ZW50T2NjdXJyZW5jZVRpbWVzdGFtcHM/OiBib29sZWFuO1xuICBnZXRNb2R1bGVTb3VyY2VVcmw/OiAoaW5mbzoge1xuICAgIG1vZHVsZVNwZWNpZmllcjogc3RyaW5nO1xuICAgIGRlcGxveW1lbnRJZDogc3RyaW5nO1xuICB9KSA9PiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmNvbnN0IFNpZGViYXJEYXRhQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8U2lkZWJhckRhdGFDb250ZXh0VmFsdWUgfCBudWxsPihudWxsKTtcblNpZGViYXJEYXRhQ29udGV4dC5kaXNwbGF5TmFtZSA9ICdTaWRlYmFyRGF0YUNvbnRleHQnO1xuXG5leHBvcnQgZnVuY3Rpb24gU2lkZWJhckRhdGFQcm92aWRlcih7XG4gIHZhbHVlLFxuICBjaGlsZHJlbixcbn06IHtcbiAgdmFsdWU6IFNpZGViYXJEYXRhQ29udGV4dFZhbHVlO1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xufSkge1xuICByZXR1cm4gKFxuICAgIDxTaWRlYmFyRGF0YUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3ZhbHVlfT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L1NpZGViYXJEYXRhQ29udGV4dC5Qcm92aWRlcj5cbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVNpZGViYXJEYXRhKCk6IFNpZGViYXJEYXRhQ29udGV4dFZhbHVlIHtcbiAgY29uc3QgY3R4ID0gdXNlQ29udGV4dChTaWRlYmFyRGF0YUNvbnRleHQpO1xuICBpZiAoIWN0eCkge1xuICAgIHRocm93IG5ldyBFcnJvcigndXNlU2lkZWJhckRhdGEgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIFNpZGViYXJEYXRhUHJvdmlkZXInKTtcbiAgfVxuICByZXR1cm4gY3R4O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlU2lkZWJhckRhdGFPcHRpb25hbCgpOiBTaWRlYmFyRGF0YUNvbnRleHRWYWx1ZSB8IG51bGwge1xuICByZXR1cm4gdXNlQ29udGV4dChTaWRlYmFyRGF0YUNvbnRleHQpO1xufVxuIl19
@@ -0,0 +1,31 @@
1
+ export declare function resourceNeedsFetchedDetail(resource: string | undefined): boolean;
2
+ export type SpanDetailStatus = 'idle' | 'loading' | 'ready' | 'error';
3
+ export interface SpanDetailView {
4
+ status: SpanDetailStatus;
5
+ displayData: Record<string, unknown>;
6
+ detail: unknown;
7
+ error: Error | undefined;
8
+ }
9
+ export declare function deriveSpanDetailView(args: {
10
+ resource: string | undefined;
11
+ resourceId: string | undefined;
12
+ inlineData: unknown;
13
+ fetchedDetail: unknown;
14
+ fetchedError: Error | null;
15
+ }): SpanDetailView;
16
+ /**
17
+ * Returns true when the fetched `detail` belongs to the current selection.
18
+ * The fetch lags selection, so it can briefly hold a previously selected span
19
+ * (even a different resource type); reject it before merging or its fields
20
+ * union into the wrong panel. Steps/hooks/waits carry their parent `runId`, so
21
+ * a `run` selection excludes objects identifiable as a child resource.
22
+ */
23
+ export declare function spanDetailMatchesSelection(detail: unknown, resource: string | undefined, resourceId: string | undefined): boolean;
24
+ /**
25
+ * Merges fetched `detail` over the span's own data. The detail supplies the
26
+ * heavy fields the trace strips (input/output/error/metadata, sleep resumeAt);
27
+ * the span's identity, status, and event-derived timestamps stay authoritative
28
+ * so they don't flicker to the backend row's millisecond-different values.
29
+ */
30
+ export declare function mergeSpanDetail(spanData: unknown, detail: unknown): unknown;
31
+ //# sourceMappingURL=span-detail-merge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"span-detail-merge.d.ts","sourceRoot":"","sources":["../../../src/components/sidebar/span-detail-merge.ts"],"names":[],"mappings":"AAOA,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC3B,OAAO,CAET;AAED,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;AAEtE,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,gBAAgB,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC;CAC1B;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE;IACzC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,KAAK,GAAG,IAAI,CAAC;CAC5B,GAAG,cAAc,CA4CjB;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,OAAO,EACf,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,UAAU,EAAE,MAAM,GAAG,SAAS,GAC7B,OAAO,CAsBT;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAkB3E"}
@@ -0,0 +1,92 @@
1
+ const hasField = (value, key) => key in value;
2
+ const RESOURCES_WITH_FETCHED_DETAIL = new Set(['run', 'step', 'sleep']);
3
+ export function resourceNeedsFetchedDetail(resource) {
4
+ return resource !== undefined && RESOURCES_WITH_FETCHED_DETAIL.has(resource);
5
+ }
6
+ export function deriveSpanDetailView(args) {
7
+ const { resource, resourceId, inlineData, fetchedDetail, fetchedError } = args;
8
+ const matchedDetail = spanDetailMatchesSelection(fetchedDetail, resource, resourceId)
9
+ ? fetchedDetail
10
+ : null;
11
+ const displayData = mergeSpanDetail(inlineData, matchedDetail);
12
+ if (!resource || !resourceId) {
13
+ return { status: 'idle', displayData, detail: null, error: undefined };
14
+ }
15
+ if (fetchedError) {
16
+ return {
17
+ status: 'error',
18
+ displayData,
19
+ detail: matchedDetail,
20
+ error: fetchedError,
21
+ };
22
+ }
23
+ if (!resourceNeedsFetchedDetail(resource)) {
24
+ return {
25
+ status: 'ready',
26
+ displayData,
27
+ detail: matchedDetail,
28
+ error: undefined,
29
+ };
30
+ }
31
+ if (matchedDetail !== null) {
32
+ return {
33
+ status: 'ready',
34
+ displayData,
35
+ detail: matchedDetail,
36
+ error: undefined,
37
+ };
38
+ }
39
+ return { status: 'loading', displayData, detail: null, error: undefined };
40
+ }
41
+ /**
42
+ * Returns true when the fetched `detail` belongs to the current selection.
43
+ * The fetch lags selection, so it can briefly hold a previously selected span
44
+ * (even a different resource type); reject it before merging or its fields
45
+ * union into the wrong panel. Steps/hooks/waits carry their parent `runId`, so
46
+ * a `run` selection excludes objects identifiable as a child resource.
47
+ */
48
+ export function spanDetailMatchesSelection(detail, resource, resourceId) {
49
+ if (!detail || typeof detail !== 'object' || !resource || !resourceId) {
50
+ return false;
51
+ }
52
+ switch (resource) {
53
+ case 'step':
54
+ return hasField(detail, 'stepId') && detail.stepId === resourceId;
55
+ case 'hook':
56
+ return hasField(detail, 'hookId') && detail.hookId === resourceId;
57
+ case 'sleep':
58
+ return hasField(detail, 'waitId') && detail.waitId === resourceId;
59
+ case 'run':
60
+ return (hasField(detail, 'runId') &&
61
+ !('stepId' in detail) &&
62
+ !('hookId' in detail) &&
63
+ !('waitId' in detail) &&
64
+ detail.runId === resourceId);
65
+ default:
66
+ return false;
67
+ }
68
+ }
69
+ /**
70
+ * Merges fetched `detail` over the span's own data. The detail supplies the
71
+ * heavy fields the trace strips (input/output/error/metadata, sleep resumeAt);
72
+ * the span's identity, status, and event-derived timestamps stay authoritative
73
+ * so they don't flicker to the backend row's millisecond-different values.
74
+ */
75
+ export function mergeSpanDetail(spanData, detail) {
76
+ if (!detail || typeof detail !== 'object') {
77
+ return spanData;
78
+ }
79
+ if (!spanData || typeof spanData !== 'object') {
80
+ return detail;
81
+ }
82
+ // Skip `undefined` span fields so they don't clobber a value the detail
83
+ // legitimately provides (e.g. a step's optional startedAt).
84
+ const merged = { ...detail };
85
+ for (const [key, value] of Object.entries(spanData)) {
86
+ if (value !== undefined) {
87
+ merged[key] = value;
88
+ }
89
+ }
90
+ return merged;
91
+ }
92
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Bhbi1kZXRhaWwtbWVyZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy9zaWRlYmFyL3NwYW4tZGV0YWlsLW1lcmdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sUUFBUSxHQUFHLENBQ2YsS0FBYSxFQUNiLEdBQVcsRUFDdUIsRUFBRSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUM7QUFFcEQsTUFBTSw2QkFBNkIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUV4RSxNQUFNLFVBQVUsMEJBQTBCLENBQ3hDLFFBQTRCO0lBRTVCLE9BQU8sUUFBUSxLQUFLLFNBQVMsSUFBSSw2QkFBNkIsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDL0UsQ0FBQztBQVdELE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxJQU1wQztJQUNDLE1BQU0sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLEdBQ3JFLElBQUksQ0FBQztJQUVQLE1BQU0sYUFBYSxHQUFHLDBCQUEwQixDQUM5QyxhQUFhLEVBQ2IsUUFBUSxFQUNSLFVBQVUsQ0FDWDtRQUNDLENBQUMsQ0FBQyxhQUFhO1FBQ2YsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNULE1BQU0sV0FBVyxHQUFHLGVBQWUsQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUc1RCxDQUFDO0lBRUYsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzdCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsQ0FBQztJQUN6RSxDQUFDO0lBQ0QsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNqQixPQUFPO1lBQ0wsTUFBTSxFQUFFLE9B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Z1xuKTogdmFsdWUgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPT4ga2V5IGluIHZhbHVlO1xuXG5jb25zdCBSRVNPVVJDRVNfV0lUSF9GRVRDSEVEX0RFVEFJTCA9IG5ldyBTZXQoWydydW4nLCAnc3RlcCcsICdzbGVlcCddKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlc291cmNlTmVlZHNGZXRjaGVkRGV0YWlsKFxuICByZXNvdXJjZTogc3RyaW5nIHwgdW5kZWZpbmVkXG4pOiBib29sZWFuIHtcbiAgcmV0dXJuIHJlc291cmNlICE9PSB1bmRlZmluZWQgJiYgUkVTT1VSQ0VTX1dJVEhfRkVUQ0hFRF9ERVRBSUwuaGFzKHJlc291cmNlKTtcbn1cblxuZXhwb3J0IHR5cGUgU3BhbkRldGFpbFN0YXR1cyA9ICdpZGxlJyB8ICdsb2FkaW5nJyB8ICdyZWFkeScgfCAnZXJyb3InO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNwYW5EZXRhaWxWaWV3IHtcbiAgc3RhdHVzOiBTcGFuRGV0YWlsU3RhdHVzO1xuICBkaXNwbGF5RGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGRldGFpbDogdW5rbm93bjtcbiAgZXJyb3I6IEVycm9yIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVyaXZlU3BhbkRldGFpbFZpZXcoYXJnczoge1xuICByZXNvdXJjZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICByZXNvdXJjZUlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGlubGluZURhdGE6IHVua25vd247XG4gIGZldGNoZWREZXRhaWw6IHVua25vd247XG4gIGZldGNoZWRFcnJvcjogRXJyb3IgfCBudWxsO1xufSk6IFNwYW5EZXRhaWxWaWV3IHtcbiAgY29uc3QgeyByZXNvdXJjZSwgcmVzb3VyY2VJZCwgaW5saW5lRGF0YSwgZmV0Y2hlZERldGFpbCwgZmV0Y2hlZEVycm9yIH0gPVxuICAgIGFyZ3M7XG5cbiAgY29uc3QgbWF0Y2hlZERldGFpbCA9IHNwYW5EZXRhaWxNYXRjaGVzU2VsZWN0aW9uKFxuICAgIGZldGNoZWREZXRhaWwsXG4gICAgcmVzb3VyY2UsXG4gICAgcmVzb3VyY2VJZFxuICApXG4gICAgPyBmZXRjaGVkRGV0YWlsXG4gICAgOiBudWxsO1xuICBjb25zdCBkaXNwbGF5RGF0YSA9IG1lcmdlU3BhbkRldGFpbChpbmxpbmVEYXRhLCBtYXRjaGVkRGV0YWlsKSBhcyBSZWNvcmQ8XG4gICAgc3RyaW5nLFxuICAgIHVua25vd25cbiAgPjtcblxuICBpZiAoIXJlc291cmNlIHx8ICFyZXNvdXJjZUlkKSB7XG4gICAgcmV0dXJuIHsgc3RhdHVzOiAnaWRsZScsIGRpc3BsYXlEYXRhLCBkZXRhaWw6IG51bGwsIGVycm9yOiB1bmRlZmluZWQgfTtcbiAgfVxuICBpZiAoZmV0Y2hlZEVycm9yKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogJ2Vycm9yJyxcbiAgICAgIGRpc3BsYXlEYXRhLFxuICAgICAgZGV0YWlsOiBtYXRjaGVkRGV0YWlsLFxuICAgICAgZXJyb3I6IGZldGNoZWRFcnJvcixcbiAgICB9O1xuICB9XG4gIGlmICghcmVzb3VyY2VOZWVkc0ZldGNoZWREZXRhaWwocmVzb3VyY2UpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogJ3JlYWR5JyxcbiAgICAgIGRpc3BsYXlEYXRhLFxuICAgICAgZGV0YWlsOiBtYXRjaGVkRGV0YWlsLFxuICAgICAgZXJyb3I6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG4gIGlmIChtYXRjaGVkRGV0YWlsICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogJ3JlYWR5JyxcbiAgICAgIGRpc3BsYXlEYXRhLFxuICAgICAgZGV0YWlsOiBtYXRjaGVkRGV0YWlsLFxuICAgICAgZXJyb3I6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG4gIHJldHVybiB7IHN0YXR1czogJ2xvYWRpbmcnLCBkaXNwbGF5RGF0YSwgZGV0YWlsOiBudWxsLCBlcnJvcjogdW5kZWZpbmVkIH07XG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIHdoZW4gdGhlIGZldGNoZWQgYGRldGFpbGAgYmVsb25ncyB0byB0aGUgY3VycmVudCBzZWxlY3Rpb24uXG4gKiBUaGUgZmV0Y2ggbGFncyBzZWxlY3Rpb24sIHNvIGl0IGNhbiBicmllZmx5IGhvbGQgYSBwcmV2aW91c2x5IHNlbGVjdGVkIHNwYW5cbiAqIChldmVuIGEgZGlmZmVyZW50IHJlc291cmNlIHR5cGUpOyByZWplY3QgaXQgYmVmb3JlIG1lcmdpbmcgb3IgaXRzIGZpZWxkc1xuICogdW5pb24gaW50byB0aGUgd3JvbmcgcGFuZWwuIFN0ZXBzL2hvb2tzL3dhaXRzIGNhcnJ5IHRoZWlyIHBhcmVudCBgcnVuSWRgLCBzb1xuICogYSBgcnVuYCBzZWxlY3Rpb24gZXhjbHVkZXMgb2JqZWN0cyBpZGVudGlmaWFibGUgYXMgYSBjaGlsZCByZXNvdXJjZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNwYW5EZXRhaWxNYXRjaGVzU2VsZWN0aW9uKFxuICBkZXRhaWw6IHVua25vd24sXG4gIHJlc291cmNlOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIHJlc291cmNlSWQ6IHN0cmluZyB8IHVuZGVmaW5lZFxuKTogYm9vbGVhbiB7XG4gIGlmICghZGV0YWlsIHx8IHR5cGVvZiBkZXRhaWwgIT09ICdvYmplY3QnIHx8ICFyZXNvdXJjZSB8fCAhcmVzb3VyY2VJZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBzd2l0Y2ggKHJlc291cmNlKSB7XG4gICAgY2FzZSAnc3RlcCc6XG4gICAgICByZXR1cm4gaGFzRmllbGQoZGV0YWlsLCAnc3RlcElkJykgJiYgZGV0YWlsLnN0ZXBJZCA9PT0gcmVzb3VyY2VJZDtcbiAgICBjYXNlICdob29rJzpcbiAgICAgIHJldHVybiBoYXNGaWVsZChkZXRhaWwsICdob29rSWQnKSAmJiBkZXRhaWwuaG9va0lkID09PSByZXNvdXJjZUlkO1xuICAgIGNhc2UgJ3NsZWVwJzpcbiAgICAgIHJldHVybiBoYXNGaWVsZChkZXRhaWwsICd3YWl0SWQnKSAmJiBkZXRhaWwud2FpdElkID09PSByZXNvdXJjZUlkO1xuICAgIGNhc2UgJ3J1bic6XG4gICAgICByZXR1cm4gKFxuICAgICAgICBoYXNGaWVsZChkZXRhaWwsICdydW5JZCcpICYmXG4gICAgICAgICEoJ3N0ZXBJZCcgaW4gZGV0YWlsKSAmJlxuICAgICAgICAhKCdob29rSWQnIGluIGRldGFpbCkgJiZcbiAgICAgICAgISgnd2FpdElkJyBpbiBkZXRhaWwpICYmXG4gICAgICAgIGRldGFpbC5ydW5JZCA9PT0gcmVzb3VyY2VJZFxuICAgICAgKTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogTWVyZ2VzIGZldGNoZWQgYGRldGFpbGAgb3ZlciB0aGUgc3BhbidzIG93biBkYXRhLiBUaGUgZGV0YWlsIHN1cHBsaWVzIHRoZVxuICogaGVhdnkgZmllbGRzIHRoZSB0cmFjZSBzdHJpcHMgKGlucHV0L291dHB1dC9lcnJvci9tZXRhZGF0YSwgc2xlZXAgcmVzdW1lQXQpO1xuICogdGhlIHNwYW4ncyBpZGVudGl0eSwgc3RhdHVzLCBhbmQgZXZlbnQtZGVyaXZlZCB0aW1lc3RhbXBzIHN0YXkgYXV0aG9yaXRhdGl2ZVxuICogc28gdGhleSBkb24ndCBmbGlja2VyIHRvIHRoZSBiYWNrZW5kIHJvdydzIG1pbGxpc2Vjb25kLWRpZmZlcmVudCB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZVNwYW5EZXRhaWwoc3BhbkRhdGE6IHVua25vd24sIGRldGFpbDogdW5rbm93bik6IHVua25vd24ge1xuICBpZiAoIWRldGFpbCB8fCB0eXBlb2YgZGV0YWlsICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBzcGFuRGF0YTtcbiAgfVxuICBpZiAoIXNwYW5EYXRhIHx8IHR5cGVvZiBzcGFuRGF0YSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZGV0YWlsO1xuICB9XG4gIC8vIFNraXAgYHVuZGVmaW5lZGAgc3BhbiBmaWVsZHMgc28gdGhleSBkb24ndCBjbG9iYmVyIGEgdmFsdWUgdGhlIGRldGFpbFxuICAvLyBsZWdpdGltYXRlbHkgcHJvdmlkZXMgKGUuZy4gYSBzdGVwJ3Mgb3B0aW9uYWwgc3RhcnRlZEF0KS5cbiAgY29uc3QgbWVyZ2VkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHsgLi4uZGV0YWlsIH07XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKFxuICAgIHNwYW5EYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICkpIHtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbWVyZ2VkW2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1lcmdlZDtcbn1cbiJdfQ==
@@ -0,0 +1,16 @@
1
+ import type { Event, Hook, Step, WorkflowRun } from '@workflow/world';
2
+ import type { SelectedSpanInfo, SpanSelectionInfo } from './entity-detail-panel';
3
+ import { type SpanDetailStatus } from './span-detail-merge';
4
+ export type DetailResource = WorkflowRun | Step | Hook | Event;
5
+ export type FetchSpanDetail = (selection: SpanSelectionInfo) => Promise<DetailResource>;
6
+ export interface SelectedSpanDetailResult {
7
+ status: SpanDetailStatus;
8
+ resource: SpanSelectionInfo['resource'] | undefined;
9
+ resourceId: string | undefined;
10
+ runId: string | undefined;
11
+ displayData: Record<string, unknown>;
12
+ detail: DetailResource | null;
13
+ error: Error | undefined;
14
+ }
15
+ export declare function useSelectedSpanDetail(selectedSpan: SelectedSpanInfo | null, fetchSpanDetail: FetchSpanDetail): SelectedSpanDetailResult;
16
+ //# sourceMappingURL=use-selected-span-detail.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-selected-span-detail.d.ts","sourceRoot":"","sources":["../../../src/components/sidebar/use-selected-span-detail.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEtE,OAAO,KAAK,EACV,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC;AAE/D,MAAM,MAAM,eAAe,GAAG,CAC5B,SAAS,EAAE,iBAAiB,KACzB,OAAO,CAAC,cAAc,CAAC,CAAC;AA6C7B,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,gBAAgB,CAAC;IACzB,QAAQ,EAAE,iBAAiB,CAAC,UAAU,CAAC,GAAG,SAAS,CAAC;IACpD,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,MAAM,EAAE,cAAc,GAAG,IAAI,CAAC;IAC9B,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC;CAC1B;AAED,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,gBAAgB,GAAG,IAAI,EACrC,eAAe,EAAE,eAAe,GAC/B,wBAAwB,CAqE1B"}
@@ -0,0 +1,93 @@
1
+ 'use client';
2
+ import { useEffect, useMemo, useRef, useState } from 'react';
3
+ import { deriveSpanDetailView, resourceNeedsFetchedDetail, } from './span-detail-merge';
4
+ function deriveSpanSelection(selectedSpan) {
5
+ if (!selectedSpan)
6
+ return null;
7
+ const { resource, data } = selectedSpan;
8
+ if (resource === 'step' &&
9
+ data &&
10
+ typeof data === 'object' &&
11
+ 'stepId' in data) {
12
+ const step = data;
13
+ return { resource: 'step', resourceId: step.stepId, runId: step.runId };
14
+ }
15
+ if (resource === 'run' &&
16
+ data &&
17
+ typeof data === 'object' &&
18
+ 'runId' in data) {
19
+ return { resource: 'run', resourceId: data.runId };
20
+ }
21
+ if (resource === 'hook' &&
22
+ data &&
23
+ typeof data === 'object' &&
24
+ 'hookId' in data) {
25
+ return { resource: 'hook', resourceId: data.hookId };
26
+ }
27
+ if (resource === 'sleep') {
28
+ if (!selectedSpan.spanId)
29
+ return null;
30
+ const waitData = data;
31
+ return {
32
+ resource: 'sleep',
33
+ resourceId: selectedSpan.spanId,
34
+ runId: waitData?.runId,
35
+ };
36
+ }
37
+ return null;
38
+ }
39
+ export function useSelectedSpanDetail(selectedSpan, fetchSpanDetail) {
40
+ const selection = useMemo(() => deriveSpanSelection(selectedSpan), [selectedSpan]);
41
+ const resource = selection?.resource;
42
+ const resourceId = selection?.resourceId;
43
+ const runId = selection?.runId;
44
+ const selectionKey = resource && resourceId ? `${resource}:${resourceId}` : null;
45
+ const needsFetch = resourceNeedsFetchedDetail(resource);
46
+ const [fetched, setFetched] = useState({ detail: null, error: null, errorKey: null });
47
+ const tokenRef = useRef(0);
48
+ const selectionRef = useRef(selection);
49
+ selectionRef.current = selection;
50
+ useEffect(() => {
51
+ if (!selectionKey || !needsFetch) {
52
+ return;
53
+ }
54
+ const activeSelection = selectionRef.current;
55
+ if (!activeSelection) {
56
+ return;
57
+ }
58
+ const token = ++tokenRef.current;
59
+ fetchSpanDetail(activeSelection)
60
+ .then((detail) => {
61
+ if (tokenRef.current !== token)
62
+ return;
63
+ setFetched({ detail, error: null, errorKey: null });
64
+ })
65
+ .catch((err) => {
66
+ if (tokenRef.current !== token)
67
+ return;
68
+ setFetched({
69
+ detail: null,
70
+ error: err instanceof Error ? err : new Error(String(err)),
71
+ errorKey: selectionKey,
72
+ });
73
+ });
74
+ }, [selectionKey, runId, needsFetch, fetchSpanDetail]);
75
+ const scopedError = fetched.errorKey === selectionKey ? fetched.error : null;
76
+ const view = useMemo(() => deriveSpanDetailView({
77
+ resource,
78
+ resourceId,
79
+ inlineData: selectedSpan?.data,
80
+ fetchedDetail: fetched.detail,
81
+ fetchedError: scopedError,
82
+ }), [resource, resourceId, selectedSpan?.data, fetched.detail, scopedError]);
83
+ return {
84
+ status: view.status,
85
+ resource,
86
+ resourceId,
87
+ runId,
88
+ displayData: view.displayData,
89
+ detail: view.detail,
90
+ error: view.error,
91
+ };
92
+ }
93
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLXNlbGVjdGVkLXNwYW4tZGV0YWlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvc2lkZWJhci91c2Utc2VsZWN0ZWQtc3Bhbi1kZXRhaWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDO0FBR2IsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUs3RCxPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLDBCQUEwQixHQUUzQixNQUFNLHFCQUFxQixDQUFDO0FBUTdCLFNBQVMsbUJBQW1CLENBQzFCLFlBQXFDO0lBRXJDLElBQUksQ0FBQyxZQUFZO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDL0IsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsR0FBRyxZQUFZLENBQUM7SUFFeEMsSUFDRSxRQUFRLEtBQUssTUFBTTtRQUNuQixJQUFJO1FBQ0osT0FBTyxJQUFJLEtBQUssUUFBUTtRQUN4QixRQUFRLElBQUksSUFBSSxFQUNoQixDQUFDO1FBQ0QsTUFBTSxJQUFJLEdBQUcsSUFBWSxDQUFDO1FBQzFCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDMUUsQ0FBQztJQUNELElBQ0UsUUFBUSxLQUFLLEtBQUs7UUFDbEIsSUFBSTtRQUNKLE9BQU8sSUFBSSxLQUFLLFFBQVE7UUFDeEIsT0FBTyxJQUFJLElBQUksRUFDZixDQUFDO1FBQ0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFHLElBQW9CLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDdEUsQ0FBQztJQUNELElBQ0UsUUFBUSxLQUFLLE1BQU07UUFDbkIsSUFBSTtRQUNKLE9BQU8sSUFBSSxLQUFLLFFBQVE7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RUFBRSxVQUFVLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQztJQUV2RCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsUUFBUSxLQUFLLFlBQVksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBRTdFLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FDbEIsR0FBRyxFQUFFLENBQ0gsb0JBQW9CLENBQUM7UUFDbkIsUUFBUTtRQUNSLFVBQVU7UUFDVixVQUFVLEVBQUUsWUFBWSxFQUFFLElBQUk7UUFDOUIsYUFBYSxFQUFFLE9BQU8sQ0FBQyxNQUFNO1FBQzdCLFlBQVksRUFBRSxXQUFXO0tBQzFCLENBQUMsRUFDSixDQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUN4RSxDQUFDO0lBRUYsT0FBTztRQUNMLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtRQUNuQixRQUFRO1FBQ1IsVUFBVTtRQUNWLEtBQUs7UUFDTCxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7UUFDN0IsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUErQjtRQUM1QyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7S0FDbEIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB0eXBlIHsgRXZlbnQsIEhvb2ssIFN0ZXAsIFdvcmtmbG93UnVuIH0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB0eXBlIHtcbiAgU2VsZWN0ZWRTcGFuSW5mbyxcbiAgU3BhblNlbGVjdGlvbkluZm8sXG59IGZyb20gJy4vZW50aXR5LWRldGFpbC1wYW5lbCc7XG5pbXBvcnQge1xuICBkZXJpdmVTcGFuRGV0YWlsVmlldyxcbiAgcmVzb3VyY2VOZWVkc0ZldGNoZWREZXRhaWwsXG4gIHR5cGUgU3BhbkRldGFpbFN0YXR1cyxcbn0gZnJvbSAnLi9zcGFuLWRldGFpbC1tZXJnZSc7XG5cbmV4cG9ydCB0eXBlIERldGFpbFJlc291cmNlID0gV29ya2Zsb3dSdW4gfCBTdGVwIHwgSG9vayB8IEV2ZW50O1xuXG5leHBvcnQgdHlwZSBGZXRjaFNwYW5EZXRhaWwgPSAoXG4gIHNlbGVjdGlvbjogU3BhblNlbGVjdGlvbkluZm9cbikgPT4gUHJvbWlzZTxEZXRhaWxSZXNvdXJjZT47XG5cbmZ1bmN0aW9uIGRlcml2ZVNwYW5TZWxlY3Rpb24oXG4gIHNlbGVjdGVkU3BhbjogU2VsZWN0ZWRTcGFuSW5mbyB8IG51bGxcbik6IFNwYW5TZWxlY3Rpb25JbmZvIHwgbnVsbCB7XG4gIGlmICghc2VsZWN0ZWRTcGFuKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgeyByZXNvdXJjZSwgZGF0YSB9ID0gc2VsZWN0ZWRTcGFuO1xuXG4gIGlmIChcbiAgICByZXNvdXJjZSA9PT0gJ3N0ZXAnICYmXG4gICAgZGF0YSAmJlxuICAgIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyAmJlxuICAgICdzdGVwSWQnIGluIGRhdGFcbiAgKSB7XG4gICAgY29uc3Qgc3RlcCA9IGRhdGEgYXMgU3RlcDtcbiAgICByZXR1cm4geyByZXNvdXJjZTogJ3N0ZXAnLCByZXNvdXJjZUlkOiBzdGVwLnN0ZXBJZCwgcnVuSWQ6IHN0ZXAucnVuSWQgfTtcbiAgfVxuICBpZiAoXG4gICAgcmVzb3VyY2UgPT09ICdydW4nICYmXG4gICAgZGF0YSAmJlxuICAgIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyAmJlxuICAgICdydW5JZCcgaW4gZGF0YVxuICApIHtcbiAgICByZXR1cm4geyByZXNvdXJjZTogJ3J1bicsIHJlc291cmNlSWQ6IChkYXRhIGFzIFdvcmtmbG93UnVuKS5ydW5JZCB9O1xuICB9XG4gIGlmIChcbiAgICByZXNvdXJjZSA9PT0gJ2hvb2snICYmXG4gICAgZGF0YSAmJlxuICAgIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyAmJlxuICAgICdob29rSWQnIGluIGRhdGFcbiAgKSB7XG4gICAgcmV0dXJuIHsgcmVzb3VyY2U6ICdob29rJywgcmVzb3VyY2VJZDogKGRhdGEgYXMgSG9vaykuaG9va0lkIH07XG4gIH1cbiAgaWYgKHJlc291cmNlID09PSAnc2xlZXAnKSB7XG4gICAgaWYgKCFzZWxlY3RlZFNwYW4uc3BhbklkKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCB3YWl0RGF0YSA9IGRhdGEgYXMgeyBydW5JZD86IHN0cmluZyB9IHwgdW5kZWZpbmVkO1xuICAgIHJldHVybiB7XG4gICAgICByZXNvdXJjZTogJ3NsZWVwJyxcbiAgICAgIHJlc291cmNlSWQ6IHNlbGVjdGVkU3Bhbi5zcGFuSWQsXG4gICAgICBydW5JZDogd2FpdERhdGE/LnJ1bklkLFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0ZWRTcGFuRGV0YWlsUmVzdWx0IHtcbiAgc3RhdHVzOiBTcGFuRGV0YWlsU3RhdHVzO1xuICByZXNvdXJjZTogU3BhblNlbGVjdGlvbkluZm9bJ3Jlc291cmNlJ10gfCB1bmRlZmluZWQ7XG4gIHJlc291cmNlSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcnVuSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgZGlzcGxheURhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBkZXRhaWw6IERldGFpbFJlc291cmNlIHwgbnVsbDtcbiAgZXJyb3I6IEVycm9yIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlU2VsZWN0ZWRTcGFuRGV0YWlsKFxuICBzZWxlY3RlZFNwYW46IFNlbGVjdGVkU3BhbkluZm8gfCBudWxsLFxuICBmZXRjaFNwYW5EZXRhaWw6IEZldGNoU3BhbkRldGFpbFxuKTogU2VsZWN0ZWRTcGFuRGV0YWlsUmVzdWx0IHtcbiAgY29uc3Qgc2VsZWN0aW9uID0gdXNlTWVtbyhcbiAgICAoKSA9PiBkZXJpdmVTcGFuU2VsZWN0aW9uKHNlbGVjdGVkU3BhbiksXG4gICAgW3NlbGVjdGVkU3Bhbl1cbiAgKTtcbiAgY29uc3QgcmVzb3VyY2UgPSBzZWxlY3Rpb24/LnJlc291cmNlO1xuICBjb25zdCByZXNvdXJjZUlkID0gc2VsZWN0aW9uPy5yZXNvdXJjZUlkO1xuICBjb25zdCBydW5JZCA9IHNlbGVjdGlvbj8ucnVuSWQ7XG4gIGNvbnN0IHNlbGVjdGlvbktleSA9XG4gICAgcmVzb3VyY2UgJiYgcmVzb3VyY2VJZCA/IGAke3Jlc291cmNlfToke3Jlc291cmNlSWR9YCA6IG51bGw7XG4gIGNvbnN0IG5lZWRzRmV0Y2ggPSByZXNvdXJjZU5lZWRzRmV0Y2hlZERldGFpbChyZXNvdXJjZSk7XG5cbiAgY29uc3QgW2ZldGNoZWQsIHNldEZldGNoZWRdID0gdXNlU3RhdGU8e1xuICAgIGRldGFpbDogRGV0YWlsUmVzb3VyY2UgfCBudWxsO1xuICAgIGVycm9yOiBFcnJvciB8IG51bGw7XG4gICAgZXJyb3JLZXk6IHN0cmluZyB8IG51bGw7XG4gIH0+KHsgZGV0YWlsOiBudWxsLCBlcnJvcjogbnVsbCwgZXJyb3JLZXk6IG51bGwgfSk7XG5cbiAgY29uc3QgdG9rZW5SZWYgPSB1c2VSZWYoMCk7XG4gIGNvbnN0IHNlbGVjdGlvblJlZiA9IHVzZVJlZihzZWxlY3Rpb24pO1xuICBzZWxlY3Rpb25SZWYuY3VycmVudCA9IHNlbGVjdGlvbjtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghc2VsZWN0aW9uS2V5IHx8ICFuZWVkc0ZldGNoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGFjdGl2ZVNlbGVjdGlvbiA9IHNlbGVjdGlvblJlZi5jdXJyZW50O1xuICAgIGlmICghYWN0aXZlU2VsZWN0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHRva2VuID0gKyt0b2tlblJlZi5jdXJyZW50O1xuICAgIGZldGNoU3BhbkRldGFpbChhY3RpdmVTZWxlY3Rpb24pXG4gICAgICAudGhlbigoZGV0YWlsKSA9PiB7XG4gICAgICAgIGlmICh0b2tlblJlZi5jdXJyZW50ICE9PSB0b2tlbikgcmV0dXJuO1xuICAgICAgICBzZXRGZXRjaGVkKHsgZGV0YWlsLCBlcnJvcjogbnVsbCwgZXJyb3JLZXk6IG51bGwgfSk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnI6IHVua25vd24pID0+IHtcbiAgICAgICAgaWYgKHRva2VuUmVmLmN1cnJlbnQgIT09IHRva2VuKSByZXR1cm47XG4gICAgICAgIHNldEZldGNoZWQoe1xuICAgICAgICAgIGRldGFpbDogbnVsbCxcbiAgICAgICAgICBlcnJvcjogZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIgOiBuZXcgRXJyb3IoU3RyaW5nKGVycikpLFxuICAgICAgICAgIGVycm9yS2V5OiBzZWxlY3Rpb25LZXksXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH0sIFtzZWxlY3Rpb25LZXksIHJ1bklkLCBuZWVkc0ZldGNoLCBmZXRjaFNwYW5EZXRhaWxdKTtcblxuICBjb25zdCBzY29wZWRFcnJvciA9IGZldGNoZWQuZXJyb3JLZXkgPT09IHNlbGVjdGlvbktleSA/IGZldGNoZWQuZXJyb3IgOiBudWxsO1xuXG4gIGNvbnN0IHZpZXcgPSB1c2VNZW1vKFxuICAgICgpID0+XG4gICAgICBkZXJpdmVTcGFuRGV0YWlsVmlldyh7XG4gICAgICAgIHJlc291cmNlLFxuICAgICAgICByZXNvdXJjZUlkLFxuICAgICAgICBpbmxpbmVEYXRhOiBzZWxlY3RlZFNwYW4/LmRhdGEsXG4gICAgICAgIGZldGNoZWREZXRhaWw6IGZldGNoZWQuZGV0YWlsLFxuICAgICAgICBmZXRjaGVkRXJyb3I6IHNjb3BlZEVycm9yLFxuICAgICAgfSksXG4gICAgW3Jlc291cmNlLCByZXNvdXJjZUlkLCBzZWxlY3RlZFNwYW4/LmRhdGEsIGZldGNoZWQuZGV0YWlsLCBzY29wZWRFcnJvcl1cbiAgKTtcblxuICByZXR1cm4ge1xuICAgIHN0YXR1czogdmlldy5zdGF0dXMsXG4gICAgcmVzb3VyY2UsXG4gICAgcmVzb3VyY2VJZCxcbiAgICBydW5JZCxcbiAgICBkaXNwbGF5RGF0YTogdmlldy5kaXNwbGF5RGF0YSxcbiAgICBkZXRhaWw6IHZpZXcuZGV0YWlsIGFzIERldGFpbFJlc291cmNlIHwgbnVsbCxcbiAgICBlcnJvcjogdmlldy5lcnJvcixcbiAgfTtcbn1cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export declare function StreamViewerSkeleton(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=stream-viewer-skeleton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream-viewer-skeleton.d.ts","sourceRoot":"","sources":["../../src/components/stream-viewer-skeleton.tsx"],"names":[],"mappings":"AASA,wBAAgB,oBAAoB,4CAwBnC"}
@@ -0,0 +1,12 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Skeleton } from './ui/skeleton';
3
+ const STREAM_SKELETON_ROWS = [
4
+ { id: 'stream-skeleton-row-1', width: '72%' },
5
+ { id: 'stream-skeleton-row-2', width: '58%' },
6
+ { id: 'stream-skeleton-row-3', width: '80%' },
7
+ { id: 'stream-skeleton-row-4', width: '64%' },
8
+ ];
9
+ export function StreamViewerSkeleton() {
10
+ return (_jsxs("output", { "aria-busy": "true", "aria-label": "Loading stream", className: "flex h-full min-h-0 w-full flex-col overflow-hidden bg-background-100", children: [_jsx("span", { className: "sr-only", children: "Loading stream\u2026" }), _jsx("div", { className: "flex h-10 min-h-10 items-center border-b border-gray-alpha-400 px-3", children: _jsx(Skeleton, { className: "h-3 w-10" }) }), _jsx("div", { className: "flex flex-col", children: STREAM_SKELETON_ROWS.map((row) => (_jsxs("div", { className: "flex h-10 items-center gap-2 border-b border-gray-alpha-400 px-3", children: [_jsx(Skeleton, { className: "h-3", style: { width: row.width } }), _jsx(Skeleton, { className: "h-4 w-4 shrink-0 rounded-sm" })] }, row.id))) })] }));
11
+ }
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyZWFtLXZpZXdlci1za2VsZXRvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL3N0cmVhbS12aWV3ZXItc2tlbGV0b24udHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE1BQU0sb0JBQW9CLEdBQUc7SUFDM0IsRUFBRSxFQUFFLEVBQUUsdUJBQXVCLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRTtJQUM3QyxFQUFFLEVBQUUsRUFBRSx1QkFBdUIsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO0lBQzdDLEVBQUUsRUFBRSxFQUFFLHVCQUF1QixFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7SUFDN0MsRUFBRSxFQUFFLEVBQUUsdUJBQXVCLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRTtDQUM5QyxDQUFDO0FBRUYsTUFBTSxVQUFVLG9CQUFvQjtJQUNsQyxPQUFPLENBQ0wsK0JBQ1ksTUFBTSxnQkFDTCxnQkFBZ0IsRUFDM0IsU0FBUyxFQUFDLHVFQUF1RSxhQUVqRixlQUFNLFNBQVMsRUFBQyxTQUFTLHFDQUF1QixFQUNoRCxjQUFLLFNBQVMsRUFBQyxxRUFBcUUsWUFDbEYsS0FBQyxRQUFRLElBQUMsU0FBUyxFQUFDLFVBQVUsR0FBRyxHQUM3QixFQUNOLGNBQUssU0FBUyxFQUFDLGVBQWUsWUFDM0Isb0JBQW9CLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUNqQyxlQUVFLFNBQVMsRUFBQyxrRUFBa0UsYUFFNUUsS0FBQyxRQUFRLElBQUMsU0FBUyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFJLEVBQ3pELEtBQUMsUUFBUSxJQUFDLFNBQVMsRUFBQyw2QkFBNkIsR0FBRyxLQUovQyxHQUFHLENBQUMsRUFBRSxDQUtQLENBQ1AsQ0FBQyxHQUNFLElBQ0MsQ0FDVixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNrZWxldG9uIH0gZnJvbSAnLi91aS9za2VsZXRvbic7XG5cbmNvbnN0IFNUUkVBTV9TS0VMRVRPTl9ST1dTID0gW1xuICB7IGlkOiAnc3RyZWFtLXNrZWxldG9uLXJvdy0xJywgd2lkdGg6ICc3MiUnIH0sXG4gIHsgaWQ6ICdzdHJlYW0tc2tlbGV0b24tcm93LTInLCB3aWR0aDogJzU4JScgfSxcbiAgeyBpZDogJ3N0cmVhbS1za2VsZXRvbi1yb3ctMycsIHdpZHRoOiAnODAlJyB9LFxuICB7IGlkOiAnc3RyZWFtLXNrZWxldG9uLXJvdy00Jywgd2lkdGg6ICc2NCUnIH0sXG5dO1xuXG5leHBvcnQgZnVuY3Rpb24gU3RyZWFtVmlld2VyU2tlbGV0b24oKSB7XG4gIHJldHVybiAoXG4gICAgPG91dHB1dFxuICAgICAgYXJpYS1idXN5PVwidHJ1ZVwiXG4gICAgICBhcmlhLWxhYmVsPVwiTG9hZGluZyBzdHJlYW1cIlxuICAgICAgY2xhc3NOYW1lPVwiZmxleCBoLWZ1bGwgbWluLWgtMCB3LWZ1bGwgZmxleC1jb2wgb3ZlcmZsb3ctaGlkZGVuIGJnLWJhY2tncm91bmQtMTAwXCJcbiAgICA+XG4gICAgICA8c3BhbiBjbGFzc05hbWU9XCJzci1vbmx5XCI+TG9hZGluZyBzdHJlYW3igKY8L3NwYW4+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaC0xMCBtaW4taC0xMCBpdGVtcy1jZW50ZXIgYm9yZGVyLWIgYm9yZGVyLWdyYXktYWxwaGEtNDAwIHB4LTNcIj5cbiAgICAgICAgPFNrZWxldG9uIGNsYXNzTmFtZT1cImgtMyB3LTEwXCIgLz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sXCI+XG4gICAgICAgIHtTVFJFQU1fU0tFTEVUT05fUk9XUy5tYXAoKHJvdykgPT4gKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGtleT17cm93LmlkfVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBoLTEwIGl0ZW1zLWNlbnRlciBnYXAtMiBib3JkZXItYiBib3JkZXItZ3JheS1hbHBoYS00MDAgcHgtM1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFNrZWxldG9uIGNsYXNzTmFtZT1cImgtM1wiIHN0eWxlPXt7IHdpZHRoOiByb3cud2lkdGggfX0gLz5cbiAgICAgICAgICAgIDxTa2VsZXRvbiBjbGFzc05hbWU9XCJoLTQgdy00IHNocmluay0wIHJvdW5kZWQtc21cIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApKX1cbiAgICAgIDwvZGl2PlxuICAgIDwvb3V0cHV0PlxuICApO1xufVxuIl19
@@ -10,7 +10,7 @@ interface StreamViewerProps {
10
10
  error?: string | null;
11
11
  /** True while the initial stream connection is being established */
12
12
  isLoading?: boolean;
13
- /** Called when the user scrolls near the bottom, for triggering pagination */
13
+ /** Called when the user scrolls near the rendered end. */
14
14
  onScrollEnd?: () => void;
15
15
  }
16
16
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"stream-viewer.d.ts","sourceRoot":"","sources":["../../src/components/stream-viewer.tsx"],"names":[],"mappings":"AAWA,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,KAAK,KAAK,GAAG,WAAW,CAAC;AAEzB,UAAU,iBAAiB;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,oEAAoE;IACpE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,8EAA8E;IAC9E,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;CAC1B;AAgED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EAAE,SAAS,EACnB,MAAM,EACN,MAAM,EACN,KAAK,EACL,SAAS,EACT,WAAW,GACZ,EAAE,iBAAiB,2CAmGnB"}
1
+ {"version":3,"file":"stream-viewer.d.ts","sourceRoot":"","sources":["../../src/components/stream-viewer.tsx"],"names":[],"mappings":"AAaA,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,KAAK,KAAK,GAAG,WAAW,CAAC;AAEzB,UAAU,iBAAiB;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,oEAAoE;IACpE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,0DAA0D;IAC1D,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;CAC1B;AA+BD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EAAE,SAAS,EACnB,MAAM,EACN,MAAM,EACN,KAAK,EACL,SAAS,EACT,WAAW,GACZ,EAAE,iBAAiB,2CA0DnB"}
@@ -1,25 +1,18 @@
1
1
  'use client';
2
- import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
3
  import React, { useEffect, useRef } from 'react';
4
4
  import { Virtuoso } from 'react-virtuoso';
5
+ import { serializeForClipboard } from './sidebar/copyable-data-block';
6
+ import { StreamViewerSkeleton } from './stream-viewer-skeleton';
7
+ import { CopyButton } from './trace-viewer/components/copy-button';
5
8
  import { DataInspector } from './ui/data-inspector';
6
- import { Skeleton } from './ui/skeleton';
7
9
  // ──────────────────────────────────────────────────────────────────────────
8
10
  // Chunk row — memoized to prevent remounts during polling
9
11
  // ──────────────────────────────────────────────────────────────────────────
10
- const ChunkRow = React.memo(function ChunkRow({ chunk, index, }) {
11
- return (_jsx("div", { className: "text-[11px] rounded-md border p-3", style: {
12
- borderColor: 'var(--ds-gray-300)',
13
- backgroundColor: 'var(--ds-gray-100)',
14
- }, children: _jsxs("div", { className: "flex items-start gap-2", children: [_jsxs("span", { className: "select-none pt-px", style: { color: 'var(--ds-gray-500)' }, children: ["[", index, "]"] }), _jsx("div", { className: "min-w-0 flex-1", children: typeof chunk.value === 'string' ? (_jsx("span", { className: "whitespace-pre-wrap break-words", style: { color: 'var(--ds-gray-1000)' }, children: chunk.value })) : (_jsx(DataInspector, { data: chunk.value, expandLevel: 1 })) })] }) }));
12
+ const ChunkRow = React.memo(function ChunkRow({ chunk }) {
13
+ return (_jsxs("div", { className: "flex w-full items-start gap-1 border-b border-gray-alpha-400 px-3 py-2", children: [_jsx("div", { className: "min-w-0 flex-1", children: typeof chunk.value === 'string' ? (_jsx("span", { className: "whitespace-pre-wrap break-words text-label-12 font-mono text-gray-1000", children: chunk.value })) : (_jsx(DataInspector, { data: chunk.value, expandLevel: 1 })) }), _jsx(CopyButton, { copyText: serializeForClipboard(chunk.value), ariaLabel: "Copy chunk", className: "shrink-0 -mr-1 [&>div]:h-4 [&>div]:w-4 [&_svg]:h-4 [&_svg]:w-4" })] }));
15
14
  });
16
15
  // ──────────────────────────────────────────────────────────────────────────
17
- // Skeleton loading
18
- // ──────────────────────────────────────────────────────────────────────────
19
- function StreamSkeleton() {
20
- return (_jsxs("div", { className: "flex flex-col gap-3 animate-in fade-in", children: [_jsx(Skeleton, { style: { width: 120, height: 16, borderRadius: 4 } }), [1, 2, 3, 4].map((i) => (_jsx(Skeleton, { style: { height: 56, borderRadius: 6 } }, i)))] }));
21
- }
22
- // ──────────────────────────────────────────────────────────────────────────
23
16
  // Main component
24
17
  // ──────────────────────────────────────────────────────────────────────────
25
18
  /**
@@ -30,7 +23,6 @@ function StreamSkeleton() {
30
23
  export function StreamViewer({ streamId: _streamId, chunks, isLive, error, isLoading, onScrollEnd, }) {
31
24
  const virtuosoRef = useRef(null);
32
25
  const prevChunkCountRef = useRef(0);
33
- // Auto-scroll to bottom when new chunks arrive (live streaming)
34
26
  useEffect(() => {
35
27
  if (chunks.length > prevChunkCountRef.current && chunks.length > 0) {
36
28
  virtuosoRef.current?.scrollToIndex({
@@ -40,18 +32,9 @@ export function StreamViewer({ streamId: _streamId, chunks, isLive, error, isLoa
40
32
  }
41
33
  prevChunkCountRef.current = chunks.length;
42
34
  }, [chunks.length]);
43
- // Show skeleton when loading and no chunks have arrived yet
44
35
  if (isLoading && chunks.length === 0) {
45
- return (_jsx("div", { className: "flex flex-col h-full", children: _jsx(StreamSkeleton, {}) }));
36
+ return _jsx(StreamViewerSkeleton, {});
46
37
  }
47
- return (_jsxs("div", { className: "flex flex-col h-full", children: [isLive && (_jsxs("div", { className: "flex items-center gap-1.5 mb-2 px-1", children: [_jsx("span", { className: "inline-block w-2 h-2 rounded-full", style: { backgroundColor: 'var(--ds-green-600)' } }), _jsx("span", { className: "text-xs", style: { color: 'var(--ds-green-700)' }, children: "Live" })] })), chunks.length > 0 && (_jsxs("div", { className: "flex items-center gap-2 mb-2 px-1", children: [_jsx("span", { className: "text-[13px] font-medium", style: { color: 'var(--ds-gray-900)' }, children: "Stream Chunks" }), _jsxs("span", { className: "text-xs tabular-nums", style: { color: 'var(--ds-gray-600)' }, children: ["(", chunks.length, ")"] })] })), _jsx("div", { className: "flex-1 min-h-0", children: error ? (_jsxs("div", { className: "text-[11px] rounded-md border p-3", style: {
48
- borderColor: 'var(--ds-red-300)',
49
- backgroundColor: 'var(--ds-red-100)',
50
- color: 'var(--ds-red-700)',
51
- }, children: [_jsx("div", { children: "Error reading stream:" }), _jsx("div", { children: error })] })) : chunks.length === 0 ? (_jsx("div", { className: "text-[11px] rounded-md border p-3", style: {
52
- borderColor: 'var(--ds-gray-300)',
53
- backgroundColor: 'var(--ds-gray-100)',
54
- color: 'var(--ds-gray-600)',
55
- }, children: isLive ? 'Waiting for stream data...' : 'Stream is empty' })) : (_jsx(Virtuoso, { ref: virtuosoRef, totalCount: chunks.length, overscan: 10, endReached: () => onScrollEnd?.(), itemContent: (index) => (_jsx("div", { style: { paddingBottom: 8 }, children: _jsx(ChunkRow, { chunk: chunks[index], index: index }) })), style: { flex: 1, minHeight: 0 } })) })] }));
38
+ return (_jsxs("div", { className: "flex h-full w-full flex-col overflow-hidden bg-background-100", children: [_jsx("div", { className: "flex h-10 min-h-10 items-center gap-1.5 border-b border-gray-alpha-400 px-3", children: isLive && (_jsxs(_Fragment, { children: [_jsx("span", { className: "inline-block h-2 w-2 rounded-full bg-green-600" }), _jsx("span", { className: "text-label-12 text-green-700", children: "Live" })] })) }), _jsx("div", { className: "flex-1 min-h-0", children: error ? (_jsxs("div", { className: "border-b border-red-400 bg-red-100 px-3 py-2 text-label-12 text-red-900", children: [_jsx("div", { children: "Error reading stream:" }), _jsx("div", { children: error })] })) : chunks.length === 0 ? (_jsx("div", { className: "flex h-10 items-center border-b border-gray-alpha-400 bg-background-200 px-3 text-label-12 text-gray-900", children: isLive ? 'Waiting for stream data...' : 'Stream is empty' })) : (_jsx(Virtuoso, { ref: virtuosoRef, totalCount: chunks.length, overscan: 10, endReached: () => onScrollEnd?.(), itemContent: (index) => (_jsx("div", { className: "w-full", children: _jsx(ChunkRow, { chunk: chunks[index] }) })), style: { flex: 1, minHeight: 0 } })) })] }));
56
39
  }
57
- //# sourceMappingURL=stream-viewer.js.map
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyZWFtLXZpZXdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL3N0cmVhbS12aWV3ZXIudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7QUFFYixPQUFPLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDakQsT0FBTyxFQUFFLFFBQVEsRUFBdUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN0RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBd0JwRCw2RUFBNkU7QUFDN0UsMERBQTBEO0FBQzFELDZFQUE2RTtBQUU3RSxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsUUFBUSxDQUFDLEVBQUUsS0FBSyxFQUFvQjtJQUN2RSxPQUFPLENBQ0wsZUFBSyxTQUFTLEVBQUMsd0VBQXdFLGFBQ3JGLGNBQUssU0FBUyxFQUFDLGdCQUFnQixZQUM1QixPQUFPLEtBQUssQ0FBQyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUNqQyxlQUFNLFNBQVMsRUFBQyx3RUFBd0UsWUFDckYsS0FBSyxDQUFDLEtBQUssR0FDUCxDQUNSLENBQUMsQ0FBQyxDQUFDLENBQ0YsS0FBQyxhQUFhLElBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBSSxDQUNyRCxHQUNHLEVBQ04sS0FBQyxVQUFVLElBQ1QsUUFBUSxFQUFFLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFDNUMsU0FBUyxFQUFDLFlBQVksRUFDdEIsU0FBUyxFQUFDLGdFQUFnRSxHQUMxRSxJQUNFLENBQ1AsQ0FBQztBQUNKLENBQUMsQ0FBQyxDQUFDO0FBRUgsNkVBQTZFO0FBQzdFLGlCQUFpQjtBQUNqQiw2RUFBNkU7QUFFN0U7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUMsRUFDM0IsUUFBUSxFQUFFLFNBQVMsRUFDbkIsTUFBTSxFQUNOLE1BQU0sRUFDTixLQUFLLEVBQ0wsU0FBUyxFQUNULFdBQVcsR0FDTztJQUNsQixNQUFNLFdBQVcsR0FBRyxNQUFNLENBQWlCLElBQUksQ0FBQyxDQUFDO0lBQ2pELE1BQU0saUJBQWlCLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXBDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDYixJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsaUJBQWlCLENBQUMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDbkUsV0FBVyxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUM7Z0JBQ2pDLEtBQUssRUFBRSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUM7Z0JBQ3hCLEtBQUssRUFBRSxLQUFLO2FBQ2IsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELGlCQUFpQixDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQzVDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBRXBCLElBQUksU0FBUyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDckMsT0FBTyxLQUFDLG9CQUFvQixLQUFHLENBQUM7SUFDbEMsQ0FBQztJQUVELE9BQU8sQ0FDTCxlQUFLLFNBQVMsRUFBQywrREFBK0QsYUFFNUUsY0FBSyxTQUFTLEVBQUMsNkVBQTZFLFlBQ3pGLE1BQU0sSUFBSSxDQUNULDhCQUNFLGVBQU0sU0FBUyxFQUFDLGdEQUFnRCxHQUFHLEVBQ25FLGVBQU0sU0FBUyxFQUFDLDhCQUE4QixxQkFBWSxJQUN6RCxDQUNKLEdBQ0csRUFHTixjQUFLLFNBQVMsRUFBQyxnQkFBZ0IsWUFDNUIsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUNQLGVBQUssU0FBUyxFQUFDLHlFQUF5RSxhQUN0RixrREFBZ0MsRUFDaEMsd0JBQU0sS0FBSyxHQUFPLElBQ2QsQ0FDUCxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDeEIsY0FBSyxTQUFTLEVBQUMsMEdBQTBHLFlBQ3RILE1BQU0sQ0FBQyxDQUFDLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixHQUN0RCxDQUNQLENBQUMsQ0FBQyxDQUFDLENBQ0YsS0FBQyxRQUFRLElBQ1AsR0FBRyxFQUFFLFdBQVcsRUFDaEIsVUFBVSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQ3pCLFFBQVEsRUFBRSxFQUFFLEVBQ1osVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFLEVBQ2pDLFdBQVcsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FDdEIsY0FBSyxTQUFTLEVBQUMsUUFBUSxZQUNyQixLQUFDLFFBQVEsSUFBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFJLEdBQzlCLENBQ1AsRUFDRCxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsR0FDaEMsQ0FDSCxHQUNHLElBQ0YsQ0FDUCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgVmlydHVvc28sIHR5cGUgVmlydHVvc29IYW5kbGUgfSBmcm9tICdyZWFjdC12aXJ0dW9zbyc7XG5pbXBvcnQgeyBzZXJpYWxpemVGb3JDbGlwYm9hcmQgfSBmcm9tICcuL3NpZGViYXIvY29weWFibGUtZGF0YS1ibG9jayc7XG5pbXBvcnQgeyBTdHJlYW1WaWV3ZXJTa2VsZXRvbiB9IGZyb20gJy4vc3RyZWFtLXZpZXdlci1za2VsZXRvbic7XG5pbXBvcnQgeyBDb3B5QnV0dG9uIH0gZnJvbSAnLi90cmFjZS12aWV3ZXIvY29tcG9uZW50cy9jb3B5LWJ1dHRvbic7XG5pbXBvcnQgeyBEYXRhSW5zcGVjdG9yIH0gZnJvbSAnLi91aS9kYXRhLWluc3BlY3Rvcic7XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gVHlwZXNcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgaW50ZXJmYWNlIFN0cmVhbUNodW5rIHtcbiAgaWQ6IG51bWJlcjtcbiAgdmFsdWU6IHVua25vd247XG59XG5cbnR5cGUgQ2h1bmsgPSBTdHJlYW1DaHVuaztcblxuaW50ZXJmYWNlIFN0cmVhbVZpZXdlclByb3BzIHtcbiAgc3RyZWFtSWQ6IHN0cmluZztcbiAgY2h1bmtzOiBDaHVua1tdO1xuICBpc0xpdmU6IGJvb2xlYW47XG4gIGVycm9yPzogc3RyaW5nIHwgbnVsbDtcbiAgLyoqIFRydWUgd2hpbGUgdGhlIGluaXRpYWwgc3RyZWFtIGNvbm5lY3Rpb24gaXMgYmVpbmcgZXN0YWJsaXNoZWQgKi9cbiAgaXNMb2FkaW5nPzogYm9vbGVhbjtcbiAgLyoqIENhbGxlZCB3aGVuIHRoZSB1c2VyIHNjcm9sbHMgbmVhciB0aGUgcmVuZGVyZWQgZW5kLiAqL1xuICBvblNjcm9sbEVuZD86ICgpID0+IHZvaWQ7XG59XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gQ2h1bmsgcm93IOKAlCBtZW1vaXplZCB0byBwcmV2ZW50IHJlbW91bnRzIGR1cmluZyBwb2xsaW5nXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuY29uc3QgQ2h1bmtSb3cgPSBSZWFjdC5tZW1vKGZ1bmN0aW9uIENodW5rUm93KHsgY2h1bmsgfTogeyBjaHVuazogQ2h1bmsgfSkge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGwgaXRlbXMtc3RhcnQgZ2FwLTEgYm9yZGVyLWIgYm9yZGVyLWdyYXktYWxwaGEtNDAwIHB4LTMgcHktMlwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJtaW4tdy0wIGZsZXgtMVwiPlxuICAgICAgICB7dHlwZW9mIGNodW5rLnZhbHVlID09PSAnc3RyaW5nJyA/IChcbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ3aGl0ZXNwYWNlLXByZS13cmFwIGJyZWFrLXdvcmRzIHRleHQtbGFiZWwtMTIgZm9udC1tb25vIHRleHQtZ3JheS0xMDAwXCI+XG4gICAgICAgICAgICB7Y2h1bmsudmFsdWV9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxEYXRhSW5zcGVjdG9yIGRhdGE9e2NodW5rLnZhbHVlfSBleHBhbmRMZXZlbD17MX0gLz5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgICAgPENvcHlCdXR0b25cbiAgICAgICAgY29weVRleHQ9e3NlcmlhbGl6ZUZvckNsaXBib2FyZChjaHVuay52YWx1ZSl9XG4gICAgICAgIGFyaWFMYWJlbD1cIkNvcHkgY2h1bmtcIlxuICAgICAgICBjbGFzc05hbWU9XCJzaHJpbmstMCAtbXItMSBbJj5kaXZdOmgtNCBbJj5kaXZdOnctNCBbJl9zdmddOmgtNCBbJl9zdmddOnctNFwiXG4gICAgICAvPlxuICAgIDwvZGl2PlxuICApO1xufSk7XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gTWFpbiBjb21wb25lbnRcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIFN0cmVhbVZpZXdlciBjb21wb25lbnQgdGhhdCBkaXNwbGF5cyByZWFsLXRpbWUgc3RyZWFtIGRhdGEuXG4gKiBFYWNoIGNodW5rIGlzIHJlbmRlcmVkIHdpdGggRGF0YUluc3BlY3RvciBmb3IgcHJvcGVyIGRpc3BsYXlcbiAqIG9mIGNvbXBsZXggdHlwZXMgKE1hcCwgU2V0LCBEYXRlLCBjdXN0b20gY2xhc3NlcywgZXRjLikuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBTdHJlYW1WaWV3ZXIoe1xuICBzdHJlYW1JZDogX3N0cmVhbUlkLFxuICBjaHVua3MsXG4gIGlzTGl2ZSxcbiAgZXJyb3IsXG4gIGlzTG9hZGluZyxcbiAgb25TY3JvbGxFbmQsXG59OiBTdHJlYW1WaWV3ZXJQcm9wcykge1xuICBjb25zdCB2aXJ0dW9zb1JlZiA9IHVzZVJlZjxWaXJ0dW9zb0hhbmRsZT4obnVsbCk7XG4gIGNvbnN0IHByZXZDaHVua0NvdW50UmVmID0gdXNlUmVmKDApO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGNodW5rcy5sZW5ndGggPiBwcmV2Q2h1bmtDb3VudFJlZi5jdXJyZW50ICYmIGNodW5rcy5sZW5ndGggPiAwKSB7XG4gICAgICB2aXJ0dW9zb1JlZi5jdXJyZW50Py5zY3JvbGxUb0luZGV4KHtcbiAgICAgICAgaW5kZXg6IGNodW5rcy5sZW5ndGggLSAxLFxuICAgICAgICBhbGlnbjogJ2VuZCcsXG4gICAgICB9KTtcbiAgICB9XG4gICAgcHJldkNodW5rQ291bnRSZWYuY3VycmVudCA9IGNodW5rcy5sZW5ndGg7XG4gIH0sIFtjaHVua3MubGVuZ3RoXSk7XG5cbiAgaWYgKGlzTG9hZGluZyAmJiBjaHVua3MubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIDxTdHJlYW1WaWV3ZXJTa2VsZXRvbiAvPjtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGgtZnVsbCB3LWZ1bGwgZmxleC1jb2wgb3ZlcmZsb3ctaGlkZGVuIGJnLWJhY2tncm91bmQtMTAwXCI+XG4gICAgICB7LyogU3RhdHVzIGhlYWRlciAqL31cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBoLTEwIG1pbi1oLTEwIGl0ZW1zLWNlbnRlciBnYXAtMS41IGJvcmRlci1iIGJvcmRlci1ncmF5LWFscGhhLTQwMCBweC0zXCI+XG4gICAgICAgIHtpc0xpdmUgJiYgKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJpbmxpbmUtYmxvY2sgaC0yIHctMiByb3VuZGVkLWZ1bGwgYmctZ3JlZW4tNjAwXCIgLz5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtbGFiZWwtMTIgdGV4dC1ncmVlbi03MDBcIj5MaXZlPC9zcGFuPlxuICAgICAgICAgIDwvPlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIHsvKiBDb250ZW50ICovfVxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgbWluLWgtMFwiPlxuICAgICAgICB7ZXJyb3IgPyAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJib3JkZXItYiBib3JkZXItcmVkLTQwMCBiZy1yZWQtMTAwIHB4LTMgcHktMiB0ZXh0LWxhYmVsLTEyIHRleHQtcmVkLTkwMFwiPlxuICAgICAgICAgICAgPGRpdj5FcnJvciByZWFkaW5nIHN0cmVhbTo8L2Rpdj5cbiAgICAgICAgICAgIDxkaXY+e2Vycm9yfTwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApIDogY2h1bmtzLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaC0xMCBpdGVtcy1jZW50ZXIgYm9yZGVyLWIgYm9yZGVyLWdyYXktYWxwaGEtNDAwIGJnLWJhY2tncm91bmQtMjAwIHB4LTMgdGV4dC1sYWJlbC0xMiB0ZXh0LWdyYXktOTAwXCI+XG4gICAgICAgICAgICB7aXNMaXZlID8gJ1dhaXRpbmcgZm9yIHN0cmVhbSBkYXRhLi4uJyA6ICdTdHJlYW0gaXMgZW1wdHknfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxWaXJ0dW9zb1xuICAgICAgICAgICAgcmVmPXt2aXJ0dW9zb1JlZn1cbiAgICAgICAgICAgIHRvdGFsQ291bnQ9e2NodW5rcy5sZW5ndGh9XG4gICAgICAgICAgICBvdmVyc2Nhbj17MTB9XG4gICAgICAgICAgICBlbmRSZWFjaGVkPXsoKSA9PiBvblNjcm9sbEVuZD8uKCl9XG4gICAgICAgICAgICBpdGVtQ29udGVudD17KGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgPENodW5rUm93IGNodW5rPXtjaHVua3NbaW5kZXhdfSAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICBzdHlsZT17eyBmbGV4OiAxLCBtaW5IZWlnaHQ6IDAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG59XG4iXX0=
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copy-button.d.ts","sourceRoot":"","sources":["../../../../src/components/trace-viewer/components/copy-button.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,GAAG,EAA+B,MAAM,OAAO,CAAC;AAG9D,UAAU,eAAe;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,UAAU,CAAC,EACzB,QAAQ,EACR,SAAS,EACT,SAAS,GACV,EAAE,eAAe,GAAG,GAAG,CAAC,OAAO,CAmD/B"}
@@ -0,0 +1,27 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Check, Copy } from 'lucide-react';
4
+ import { useEffect, useRef, useState } from 'react';
5
+ import { cn } from '../../../lib/cn';
6
+ export function CopyButton({ copyText, ariaLabel, className, }) {
7
+ const [copied, setCopied] = useState(false);
8
+ const timeoutRef = useRef(null);
9
+ useEffect(() => {
10
+ return () => {
11
+ if (timeoutRef.current) {
12
+ clearTimeout(timeoutRef.current);
13
+ }
14
+ };
15
+ }, []);
16
+ return (_jsx("button", { type: "button", "aria-label": ariaLabel, className: cn('cursor-pointer text-gray-800 hover:text-gray-1000 bg-transparent border-0 p-1 m-0', className), onClick: (e) => {
17
+ e.stopPropagation();
18
+ if (timeoutRef.current) {
19
+ clearTimeout(timeoutRef.current);
20
+ }
21
+ void navigator.clipboard.writeText(copyText).then(() => {
22
+ setCopied(true);
23
+ timeoutRef.current = setTimeout(() => setCopied(false), 1000);
24
+ });
25
+ }, children: _jsxs("div", { className: "relative w-3 h-3", children: [_jsx("div", { className: cn('absolute inset-0 flex items-center justify-center transition-all duration-150 ease-out', copied ? 'scale-100 opacity-100' : 'scale-0 opacity-0'), children: _jsx(Check, { className: "w-3 h-3" }) }), _jsx("div", { className: cn('absolute inset-0 flex items-center justify-center transition-all duration-150 ease-out', copied ? 'scale-0 opacity-0' : 'scale-100 opacity-100'), children: _jsx(Copy, { className: "w-3 h-3" }) })] }) }));
26
+ }
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29weS1idXR0b24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy90cmFjZS12aWV3ZXIvY29tcG9uZW50cy9jb3B5LWJ1dHRvbi50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOztBQUViLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzNDLE9BQU8sRUFBWSxTQUFTLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUM5RCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFRckMsTUFBTSxVQUFVLFVBQVUsQ0FBQyxFQUN6QixRQUFRLEVBQ1IsU0FBUyxFQUNULFNBQVMsR0FDTztJQUNoQixNQUFNLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQXVDLElBQUksQ0FBQyxDQUFDO0lBRXRFLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDYixPQUFPLEdBQUcsRUFBRTtZQUNWLElBQUksVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUN2QixZQUFZLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ25DLENBQUM7UUFDSCxDQUFDLENBQUM7SUFDSixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFUCxPQUFPLENBQ0wsaUJBQ0UsSUFBSSxFQUFDLFFBQVEsZ0JBQ0QsU0FBUyxFQUNyQixTQUFTLEVBQUUsRUFBRSxDQUNYLG1GQUFtRixFQUNuRixTQUFTLENBQ1YsRUFDRCxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNiLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNwQixJQUFJLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDdkIsWUFBWSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNuQyxDQUFDO1lBQ0QsS0FBSyxTQUFTLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUNyRCxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2hCLFVBQVUsQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNoRSxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsWUFFRCxlQUFLLFNBQVMsRUFBQyxrQkFBa0IsYUFDL0IsY0FDRSxTQUFTLEVBQUUsRUFBRSxDQUNYLHdGQUF3RixFQUN4RixNQUFNLENBQUMsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FDdkQsWUFFRCxLQUFDLEtBQUssSUFBQyxTQUFTLEVBQUMsU0FBUyxHQUFHLEdBQ3pCLEVBQ04sY0FDRSxTQUFTLEVBQUUsRUFBRSxDQUNYLHdGQUF3RixFQUN4RixNQUFNLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyx1QkFBdUIsQ0FDdkQsWUFFRCxLQUFDLElBQUksSUFBQyxTQUFTLEVBQUMsU0FBUyxHQUFHLEdBQ3hCLElBQ0YsR0FDQyxDQUNWLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgeyBDaGVjaywgQ29weSB9IGZyb20gJ2x1Y2lkZS1yZWFjdCc7XG5pbXBvcnQgeyB0eXBlIEpTWCwgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY24gfSBmcm9tICcuLi8uLi8uLi9saWIvY24nO1xuXG5pbnRlcmZhY2UgQ29weUJ1dHRvblByb3BzIHtcbiAgY29weVRleHQ6IHN0cmluZztcbiAgYXJpYUxhYmVsOiBzdHJpbmc7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENvcHlCdXR0b24oe1xuICBjb3B5VGV4dCxcbiAgYXJpYUxhYmVsLFxuICBjbGFzc05hbWUsXG59OiBDb3B5QnV0dG9uUHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IFtjb3BpZWQsIHNldENvcGllZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IHRpbWVvdXRSZWYgPSB1c2VSZWY8UmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCBudWxsPihudWxsKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAodGltZW91dFJlZi5jdXJyZW50KSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0UmVmLmN1cnJlbnQpO1xuICAgICAgfVxuICAgIH07XG4gIH0sIFtdKTtcblxuICByZXR1cm4gKFxuICAgIDxidXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgYXJpYS1sYWJlbD17YXJpYUxhYmVsfVxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2N1cnNvci1wb2ludGVyIHRleHQtZ3JheS04MDAgaG92ZXI6dGV4dC1ncmF5LTEwMDAgYmctdHJhbnNwYXJlbnQgYm9yZGVyLTAgcC0xIG0tMCcsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGlmICh0aW1lb3V0UmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dFJlZi5jdXJyZW50KTtcbiAgICAgICAgfVxuICAgICAgICB2b2lkIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGNvcHlUZXh0KS50aGVuKCgpID0+IHtcbiAgICAgICAgICBzZXRDb3BpZWQodHJ1ZSk7XG4gICAgICAgICAgdGltZW91dFJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiBzZXRDb3BpZWQoZmFsc2UpLCAxMDAwKTtcbiAgICAgICAgfSk7XG4gICAgICB9fVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmUgdy0zIGgtM1wiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICdhYnNvbHV0ZSBpbnNldC0wIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTE1MCBlYXNlLW91dCcsXG4gICAgICAgICAgICBjb3BpZWQgPyAnc2NhbGUtMTAwIG9wYWNpdHktMTAwJyA6ICdzY2FsZS0wIG9wYWNpdHktMCdcbiAgICAgICAgICApfVxuICAgICAgICA+XG4gICAgICAgICAgPENoZWNrIGNsYXNzTmFtZT1cInctMyBoLTNcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAnYWJzb2x1dGUgaW5zZXQtMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0xNTAgZWFzZS1vdXQnLFxuICAgICAgICAgICAgY29waWVkID8gJ3NjYWxlLTAgb3BhY2l0eS0wJyA6ICdzY2FsZS0xMDAgb3BhY2l0eS0xMDAnXG4gICAgICAgICAgKX1cbiAgICAgICAgPlxuICAgICAgICAgIDxDb3B5IGNsYXNzTmFtZT1cInctMyBoLTNcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvYnV0dG9uPlxuICApO1xufVxuIl19