@workflow/web-shared 5.0.0-beta.37 → 5.0.0-beta.39

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 (313) hide show
  1. package/README.md +3 -3
  2. package/dist/components/event-list-view.d.ts.map +1 -1
  3. package/dist/components/event-list-view.js +10 -10
  4. package/dist/components/index.d.ts +4 -5
  5. package/dist/components/index.d.ts.map +1 -1
  6. package/dist/components/index.js +4 -5
  7. package/dist/components/sidebar/attribute-panel.d.ts.map +1 -1
  8. package/dist/components/sidebar/attribute-panel.js +32 -8
  9. package/dist/components/sidebar/attributes-block.js +3 -3
  10. package/dist/components/sidebar/copyable-data-block.js +2 -2
  11. package/dist/components/sidebar/entity-detail-panel.js +3 -3
  12. package/dist/components/sidebar/events-list.js +2 -2
  13. package/dist/components/stream-viewer-skeleton.d.ts +2 -0
  14. package/dist/components/stream-viewer-skeleton.d.ts.map +1 -0
  15. package/dist/components/stream-viewer-skeleton.js +12 -0
  16. package/dist/components/stream-viewer.d.ts +1 -1
  17. package/dist/components/stream-viewer.d.ts.map +1 -1
  18. package/dist/components/stream-viewer.js +9 -26
  19. package/dist/components/trace-viewer/components/copy-button.d.ts.map +1 -0
  20. package/dist/components/trace-viewer/components/copy-button.js +27 -0
  21. package/dist/components/trace-viewer/components/detail-panel-width.d.ts.map +1 -0
  22. package/dist/components/trace-viewer/components/detail-panel-width.js +67 -0
  23. package/dist/components/trace-viewer/components/detail-panel.d.ts.map +1 -0
  24. package/dist/components/trace-viewer/components/detail-panel.js +122 -0
  25. package/dist/components/trace-viewer/components/draggable-border.d.ts.map +1 -0
  26. package/dist/components/trace-viewer/components/draggable-border.js +140 -0
  27. package/dist/components/trace-viewer/components/event-list.d.ts.map +1 -0
  28. package/dist/components/trace-viewer/components/event-list.js +47 -0
  29. package/dist/components/trace-viewer/components/middle-truncate/copy-selection.d.ts.map +1 -0
  30. package/dist/components/trace-viewer/components/middle-truncate/copy-selection.js +54 -0
  31. package/dist/components/trace-viewer/components/middle-truncate/middle-truncate.d.ts.map +1 -0
  32. package/dist/components/trace-viewer/components/middle-truncate/middle-truncate.js +81 -0
  33. package/dist/components/trace-viewer/components/middle-truncate/truncate.d.ts.map +1 -0
  34. package/dist/components/trace-viewer/components/middle-truncate/truncate.js +101 -0
  35. package/dist/components/trace-viewer/components/middle-truncate/use-middle-truncate.d.ts.map +1 -0
  36. package/dist/components/trace-viewer/components/middle-truncate/use-middle-truncate.js +114 -0
  37. package/dist/components/trace-viewer/components/minimap.d.ts.map +1 -0
  38. package/dist/components/trace-viewer/components/minimap.js +337 -0
  39. package/dist/components/trace-viewer/components/pane-constants.d.ts.map +1 -0
  40. package/dist/components/trace-viewer/components/pane-constants.js +16 -0
  41. package/dist/components/trace-viewer/components/span-markers.d.ts.map +1 -0
  42. package/dist/components/trace-viewer/components/span-markers.js +85 -0
  43. package/dist/components/trace-viewer/components/split-pane.d.ts.map +1 -0
  44. package/dist/components/trace-viewer/components/split-pane.js +41 -0
  45. package/dist/components/trace-viewer/components/timeline.d.ts.map +1 -0
  46. package/dist/components/trace-viewer/components/timeline.js +321 -0
  47. package/dist/components/trace-viewer/components/trace-shortcut-helper.d.ts.map +1 -0
  48. package/dist/components/trace-viewer/components/trace-shortcut-helper.js +55 -0
  49. package/dist/components/trace-viewer/components/trace-viewer-skeleton.d.ts.map +1 -0
  50. package/dist/components/trace-viewer/components/trace-viewer-skeleton.js +26 -0
  51. package/dist/components/trace-viewer/components/use-element-width.d.ts.map +1 -0
  52. package/dist/components/trace-viewer/components/use-element-width.js +25 -0
  53. package/dist/components/trace-viewer/components/use-row-window.d.ts.map +1 -0
  54. package/dist/components/trace-viewer/components/use-row-window.js +107 -0
  55. package/dist/components/trace-viewer/context.d.ts +14 -182
  56. package/dist/components/trace-viewer/context.d.ts.map +1 -1
  57. package/dist/components/trace-viewer/context.js +44 -351
  58. package/dist/components/trace-viewer/icons.d.ts.map +1 -0
  59. package/dist/components/trace-viewer/icons.js +15 -0
  60. package/dist/components/trace-viewer/search.d.ts.map +1 -0
  61. package/dist/components/trace-viewer/search.js +134 -0
  62. package/dist/components/trace-viewer/trace-viewer.d.ts +7 -28
  63. package/dist/components/trace-viewer/trace-viewer.d.ts.map +1 -1
  64. package/dist/components/trace-viewer/trace-viewer.js +306 -356
  65. package/dist/components/trace-viewer/types.d.ts +2 -211
  66. package/dist/components/trace-viewer/types.d.ts.map +1 -1
  67. package/dist/components/trace-viewer/types.js +1 -1
  68. package/dist/components/trace-viewer/utils.d.ts.map +1 -0
  69. package/dist/components/trace-viewer/utils.js +430 -0
  70. package/dist/components/{trace-viewer-new.d.ts → trace-viewer.d.ts} +3 -3
  71. package/dist/components/trace-viewer.d.ts.map +1 -0
  72. package/dist/components/trace-viewer.js +21 -0
  73. package/dist/components/ui/alert.js +2 -2
  74. package/dist/components/ui/button.d.ts +1 -1
  75. package/dist/components/ui/button.d.ts.map +1 -1
  76. package/dist/components/ui/button.js +3 -3
  77. package/dist/components/ui/card.d.ts.map +1 -1
  78. package/dist/components/ui/card.js +3 -3
  79. package/dist/components/ui/error-card.js +2 -2
  80. package/dist/components/ui/error-stack-block.js +4 -4
  81. package/dist/components/ui/kbd.js +3 -3
  82. package/dist/components/ui/timestamp-tooltip.js +3 -3
  83. package/dist/components/workflow-traces/trace-span-construction.d.ts +1 -1
  84. package/dist/components/workflow-traces/trace-span-construction.js +1 -1
  85. package/dist/lib/trace-builder.d.ts +1 -1
  86. package/dist/lib/trace-builder.d.ts.map +1 -1
  87. package/dist/lib/trace-builder.js +1 -1
  88. package/dist/lib/trace-types.d.ts +54 -0
  89. package/dist/lib/trace-types.d.ts.map +1 -0
  90. package/dist/lib/trace-types.js +2 -0
  91. package/package.json +6 -6
  92. package/src/components/event-list-view.tsx +12 -9
  93. package/src/components/index.ts +4 -5
  94. package/src/components/sidebar/attribute-panel.tsx +46 -8
  95. package/src/components/sidebar/attributes-block.tsx +2 -2
  96. package/src/components/sidebar/copyable-data-block.tsx +1 -1
  97. package/src/components/sidebar/entity-detail-panel.tsx +3 -3
  98. package/src/components/sidebar/events-list.tsx +1 -1
  99. package/src/components/stream-viewer-skeleton.tsx +34 -0
  100. package/src/components/stream-viewer.tsx +34 -106
  101. package/src/components/{new-trace-viewer → trace-viewer}/components/event-list.tsx +1 -1
  102. package/src/components/{new-trace-viewer → trace-viewer}/components/minimap.tsx +1 -4
  103. package/src/components/{new-trace-viewer → trace-viewer}/components/timeline.tsx +2 -5
  104. package/src/components/{new-trace-viewer → trace-viewer}/components/trace-shortcut-helper.tsx +1 -1
  105. package/src/components/trace-viewer/context.tsx +63 -656
  106. package/src/components/trace-viewer/trace-viewer.tsx +563 -531
  107. package/src/components/trace-viewer/types.ts +2 -234
  108. package/src/components/{new-trace-viewer → trace-viewer}/utils.ts +2 -2
  109. package/src/components/{trace-viewer-new.tsx → trace-viewer.tsx} +5 -5
  110. package/src/components/ui/alert.tsx +1 -1
  111. package/src/components/ui/button.tsx +3 -3
  112. package/src/components/ui/card.tsx +2 -9
  113. package/src/components/ui/error-card.tsx +3 -3
  114. package/src/components/ui/error-stack-block.tsx +3 -3
  115. package/src/components/ui/kbd.tsx +2 -2
  116. package/src/components/ui/timestamp-tooltip.tsx +4 -4
  117. package/src/components/workflow-traces/trace-span-construction.ts +1 -1
  118. package/src/lib/trace-builder.ts +1 -1
  119. package/src/lib/trace-types.ts +56 -0
  120. package/dist/components/new-trace-viewer/components/copy-button.d.ts.map +0 -1
  121. package/dist/components/new-trace-viewer/components/copy-button.js +0 -27
  122. package/dist/components/new-trace-viewer/components/detail-panel-width.d.ts.map +0 -1
  123. package/dist/components/new-trace-viewer/components/detail-panel-width.js +0 -67
  124. package/dist/components/new-trace-viewer/components/detail-panel.d.ts.map +0 -1
  125. package/dist/components/new-trace-viewer/components/detail-panel.js +0 -122
  126. package/dist/components/new-trace-viewer/components/draggable-border.d.ts.map +0 -1
  127. package/dist/components/new-trace-viewer/components/draggable-border.js +0 -140
  128. package/dist/components/new-trace-viewer/components/event-list.d.ts.map +0 -1
  129. package/dist/components/new-trace-viewer/components/event-list.js +0 -47
  130. package/dist/components/new-trace-viewer/components/middle-truncate/copy-selection.d.ts.map +0 -1
  131. package/dist/components/new-trace-viewer/components/middle-truncate/copy-selection.js +0 -54
  132. package/dist/components/new-trace-viewer/components/middle-truncate/middle-truncate.d.ts.map +0 -1
  133. package/dist/components/new-trace-viewer/components/middle-truncate/middle-truncate.js +0 -81
  134. package/dist/components/new-trace-viewer/components/middle-truncate/truncate.d.ts.map +0 -1
  135. package/dist/components/new-trace-viewer/components/middle-truncate/truncate.js +0 -101
  136. package/dist/components/new-trace-viewer/components/middle-truncate/use-middle-truncate.d.ts.map +0 -1
  137. package/dist/components/new-trace-viewer/components/middle-truncate/use-middle-truncate.js +0 -114
  138. package/dist/components/new-trace-viewer/components/minimap.d.ts.map +0 -1
  139. package/dist/components/new-trace-viewer/components/minimap.js +0 -337
  140. package/dist/components/new-trace-viewer/components/pane-constants.d.ts.map +0 -1
  141. package/dist/components/new-trace-viewer/components/pane-constants.js +0 -16
  142. package/dist/components/new-trace-viewer/components/span-markers.d.ts.map +0 -1
  143. package/dist/components/new-trace-viewer/components/span-markers.js +0 -85
  144. package/dist/components/new-trace-viewer/components/split-pane.d.ts.map +0 -1
  145. package/dist/components/new-trace-viewer/components/split-pane.js +0 -41
  146. package/dist/components/new-trace-viewer/components/timeline.d.ts.map +0 -1
  147. package/dist/components/new-trace-viewer/components/timeline.js +0 -321
  148. package/dist/components/new-trace-viewer/components/trace-shortcut-helper.d.ts.map +0 -1
  149. package/dist/components/new-trace-viewer/components/trace-shortcut-helper.js +0 -55
  150. package/dist/components/new-trace-viewer/components/trace-viewer-skeleton.d.ts.map +0 -1
  151. package/dist/components/new-trace-viewer/components/trace-viewer-skeleton.js +0 -26
  152. package/dist/components/new-trace-viewer/components/use-element-width.d.ts.map +0 -1
  153. package/dist/components/new-trace-viewer/components/use-element-width.js +0 -25
  154. package/dist/components/new-trace-viewer/components/use-row-window.d.ts.map +0 -1
  155. package/dist/components/new-trace-viewer/components/use-row-window.js +0 -107
  156. package/dist/components/new-trace-viewer/context.d.ts +0 -17
  157. package/dist/components/new-trace-viewer/context.d.ts.map +0 -1
  158. package/dist/components/new-trace-viewer/context.js +0 -48
  159. package/dist/components/new-trace-viewer/icons.d.ts.map +0 -1
  160. package/dist/components/new-trace-viewer/icons.js +0 -15
  161. package/dist/components/new-trace-viewer/search.d.ts.map +0 -1
  162. package/dist/components/new-trace-viewer/search.js +0 -134
  163. package/dist/components/new-trace-viewer/trace-viewer.d.ts +0 -11
  164. package/dist/components/new-trace-viewer/trace-viewer.d.ts.map +0 -1
  165. package/dist/components/new-trace-viewer/trace-viewer.js +0 -336
  166. package/dist/components/new-trace-viewer/types.d.ts +0 -3
  167. package/dist/components/new-trace-viewer/types.d.ts.map +0 -1
  168. package/dist/components/new-trace-viewer/types.js +0 -2
  169. package/dist/components/new-trace-viewer/utils.d.ts.map +0 -1
  170. package/dist/components/new-trace-viewer/utils.js +0 -430
  171. package/dist/components/run-trace-view.d.ts +0 -23
  172. package/dist/components/run-trace-view.d.ts.map +0 -1
  173. package/dist/components/run-trace-view.js +0 -11
  174. package/dist/components/trace-viewer/components/map.d.ts +0 -8
  175. package/dist/components/trace-viewer/components/map.d.ts.map +0 -1
  176. package/dist/components/trace-viewer/components/map.js +0 -162
  177. package/dist/components/trace-viewer/components/markers.d.ts +0 -23
  178. package/dist/components/trace-viewer/components/markers.d.ts.map +0 -1
  179. package/dist/components/trace-viewer/components/markers.js +0 -416
  180. package/dist/components/trace-viewer/components/node.d.ts +0 -35
  181. package/dist/components/trace-viewer/components/node.d.ts.map +0 -1
  182. package/dist/components/trace-viewer/components/node.js +0 -286
  183. package/dist/components/trace-viewer/components/search-input.d.ts +0 -9
  184. package/dist/components/trace-viewer/components/search-input.d.ts.map +0 -1
  185. package/dist/components/trace-viewer/components/search-input.js +0 -9
  186. package/dist/components/trace-viewer/components/search.d.ts +0 -3
  187. package/dist/components/trace-viewer/components/search.d.ts.map +0 -1
  188. package/dist/components/trace-viewer/components/search.js +0 -25
  189. package/dist/components/trace-viewer/components/span-content.d.ts +0 -19
  190. package/dist/components/trace-viewer/components/span-content.d.ts.map +0 -1
  191. package/dist/components/trace-viewer/components/span-content.js +0 -137
  192. package/dist/components/trace-viewer/components/span-detail-panel.d.ts +0 -10
  193. package/dist/components/trace-viewer/components/span-detail-panel.d.ts.map +0 -1
  194. package/dist/components/trace-viewer/components/span-detail-panel.js +0 -285
  195. package/dist/components/trace-viewer/components/span-segments.d.ts +0 -50
  196. package/dist/components/trace-viewer/components/span-segments.d.ts.map +0 -1
  197. package/dist/components/trace-viewer/components/span-segments.js +0 -445
  198. package/dist/components/trace-viewer/components/span-strategies.d.ts +0 -46
  199. package/dist/components/trace-viewer/components/span-strategies.d.ts.map +0 -1
  200. package/dist/components/trace-viewer/components/span-strategies.js +0 -108
  201. package/dist/components/trace-viewer/components/ui.d.ts +0 -28
  202. package/dist/components/trace-viewer/components/ui.d.ts.map +0 -1
  203. package/dist/components/trace-viewer/components/ui.js +0 -39
  204. package/dist/components/trace-viewer/components/zoom-button.d.ts +0 -3
  205. package/dist/components/trace-viewer/components/zoom-button.d.ts.map +0 -1
  206. package/dist/components/trace-viewer/components/zoom-button.js +0 -29
  207. package/dist/components/trace-viewer/components/zoom-icons.d.ts +0 -11
  208. package/dist/components/trace-viewer/components/zoom-icons.d.ts.map +0 -1
  209. package/dist/components/trace-viewer/components/zoom-icons.js +0 -11
  210. package/dist/components/trace-viewer/index.d.ts +0 -5
  211. package/dist/components/trace-viewer/index.d.ts.map +0 -1
  212. package/dist/components/trace-viewer/index.js +0 -4
  213. package/dist/components/trace-viewer/trace-viewer.module.css +0 -1465
  214. package/dist/components/trace-viewer/util/constants.d.ts +0 -9
  215. package/dist/components/trace-viewer/util/constants.d.ts.map +0 -1
  216. package/dist/components/trace-viewer/util/constants.js +0 -9
  217. package/dist/components/trace-viewer/util/scrollbar-width.d.ts +0 -2
  218. package/dist/components/trace-viewer/util/scrollbar-width.d.ts.map +0 -1
  219. package/dist/components/trace-viewer/util/scrollbar-width.js +0 -14
  220. package/dist/components/trace-viewer/util/tree.d.ts +0 -13
  221. package/dist/components/trace-viewer/util/tree.d.ts.map +0 -1
  222. package/dist/components/trace-viewer/util/tree.js +0 -227
  223. package/dist/components/trace-viewer/util/use-immediate-style.d.ts +0 -15
  224. package/dist/components/trace-viewer/util/use-immediate-style.d.ts.map +0 -1
  225. package/dist/components/trace-viewer/util/use-immediate-style.js +0 -23
  226. package/dist/components/trace-viewer/util/use-streaming-spans.d.ts +0 -8
  227. package/dist/components/trace-viewer/util/use-streaming-spans.d.ts.map +0 -1
  228. package/dist/components/trace-viewer/util/use-streaming-spans.js +0 -345
  229. package/dist/components/trace-viewer/util/use-trackpad-zoom.d.ts +0 -6
  230. package/dist/components/trace-viewer/util/use-trackpad-zoom.d.ts.map +0 -1
  231. package/dist/components/trace-viewer/util/use-trackpad-zoom.js +0 -39
  232. package/dist/components/trace-viewer/worker.d.ts +0 -2
  233. package/dist/components/trace-viewer/worker.d.ts.map +0 -1
  234. package/dist/components/trace-viewer/worker.js +0 -109
  235. package/dist/components/trace-viewer-new.d.ts.map +0 -1
  236. package/dist/components/trace-viewer-new.js +0 -21
  237. package/dist/components/workflow-trace-view.d.ts +0 -39
  238. package/dist/components/workflow-trace-view.d.ts.map +0 -1
  239. package/dist/components/workflow-trace-view.js +0 -690
  240. package/dist/components/workflow-traces/trace-colors.d.ts +0 -15
  241. package/dist/components/workflow-traces/trace-colors.d.ts.map +0 -1
  242. package/dist/components/workflow-traces/trace-colors.js +0 -86
  243. package/src/components/new-trace-viewer/context.tsx +0 -93
  244. package/src/components/new-trace-viewer/trace-viewer.tsx +0 -632
  245. package/src/components/new-trace-viewer/types.ts +0 -2
  246. package/src/components/run-trace-view.tsx +0 -80
  247. package/src/components/trace-viewer/components/map.tsx +0 -226
  248. package/src/components/trace-viewer/components/markers.tsx +0 -612
  249. package/src/components/trace-viewer/components/node.tsx +0 -506
  250. package/src/components/trace-viewer/components/search-input.tsx +0 -52
  251. package/src/components/trace-viewer/components/search.tsx +0 -47
  252. package/src/components/trace-viewer/components/span-content.tsx +0 -247
  253. package/src/components/trace-viewer/components/span-detail-panel.tsx +0 -655
  254. package/src/components/trace-viewer/components/span-segments.ts +0 -585
  255. package/src/components/trace-viewer/components/span-strategies.ts +0 -205
  256. package/src/components/trace-viewer/components/ui.tsx +0 -156
  257. package/src/components/trace-viewer/components/zoom-button.tsx +0 -61
  258. package/src/components/trace-viewer/components/zoom-icons.tsx +0 -65
  259. package/src/components/trace-viewer/index.tsx +0 -4
  260. package/src/components/trace-viewer/trace-viewer.module.css +0 -1465
  261. package/src/components/trace-viewer/util/constants.ts +0 -8
  262. package/src/components/trace-viewer/util/scrollbar-width.ts +0 -13
  263. package/src/components/trace-viewer/util/tree.ts +0 -277
  264. package/src/components/trace-viewer/util/use-immediate-style.ts +0 -38
  265. package/src/components/trace-viewer/util/use-streaming-spans.ts +0 -426
  266. package/src/components/trace-viewer/util/use-trackpad-zoom.tsx +0 -51
  267. package/src/components/trace-viewer/worker.ts +0 -131
  268. package/src/components/workflow-trace-view.tsx +0 -1166
  269. package/src/components/workflow-traces/trace-colors.ts +0 -112
  270. package/dist/components/{new-trace-viewer → trace-viewer}/components/copy-button.d.ts +0 -0
  271. package/dist/components/{new-trace-viewer → trace-viewer}/components/detail-panel-width.d.ts +0 -0
  272. package/dist/components/{new-trace-viewer → trace-viewer}/components/detail-panel.d.ts +0 -0
  273. package/dist/components/{new-trace-viewer → trace-viewer}/components/draggable-border.d.ts +0 -0
  274. package/dist/components/{new-trace-viewer → trace-viewer}/components/event-list.d.ts +0 -0
  275. package/dist/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/copy-selection.d.ts +0 -0
  276. package/dist/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/middle-truncate.d.ts +0 -0
  277. package/dist/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/truncate.d.ts +0 -0
  278. package/dist/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/use-middle-truncate.d.ts +0 -0
  279. package/dist/components/{new-trace-viewer → trace-viewer}/components/minimap.d.ts +0 -0
  280. package/dist/components/{new-trace-viewer → trace-viewer}/components/pane-constants.d.ts +0 -0
  281. package/dist/components/{new-trace-viewer → trace-viewer}/components/span-markers.d.ts +0 -0
  282. package/dist/components/{new-trace-viewer → trace-viewer}/components/split-pane.d.ts +0 -0
  283. package/dist/components/{new-trace-viewer → trace-viewer}/components/timeline.d.ts +0 -0
  284. package/dist/components/{new-trace-viewer → trace-viewer}/components/timeline.module.css +0 -0
  285. package/dist/components/{new-trace-viewer → trace-viewer}/components/trace-shortcut-helper.d.ts +0 -0
  286. package/dist/components/{new-trace-viewer → trace-viewer}/components/trace-shortcut-helper.module.css +0 -0
  287. package/dist/components/{new-trace-viewer → trace-viewer}/components/trace-viewer-skeleton.d.ts +0 -0
  288. package/dist/components/{new-trace-viewer → trace-viewer}/components/use-element-width.d.ts +0 -0
  289. package/dist/components/{new-trace-viewer → trace-viewer}/components/use-row-window.d.ts +0 -0
  290. package/dist/components/{new-trace-viewer → trace-viewer}/icons.d.ts +0 -0
  291. package/dist/components/{new-trace-viewer → trace-viewer}/search.d.ts +0 -0
  292. package/dist/components/{new-trace-viewer → trace-viewer}/utils.d.ts +0 -0
  293. package/src/components/{new-trace-viewer → trace-viewer}/components/copy-button.tsx +0 -0
  294. package/src/components/{new-trace-viewer → trace-viewer}/components/detail-panel-width.test.ts +0 -0
  295. package/src/components/{new-trace-viewer → trace-viewer}/components/detail-panel-width.ts +0 -0
  296. package/src/components/{new-trace-viewer → trace-viewer}/components/detail-panel.tsx +0 -0
  297. package/src/components/{new-trace-viewer → trace-viewer}/components/draggable-border.tsx +0 -0
  298. package/src/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/copy-selection.ts +0 -0
  299. package/src/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/middle-truncate.tsx +1 -1
  300. /package/src/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/truncate.ts +0 -0
  301. /package/src/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/use-middle-truncate.ts +0 -0
  302. /package/src/components/{new-trace-viewer → trace-viewer}/components/pane-constants.ts +0 -0
  303. /package/src/components/{new-trace-viewer → trace-viewer}/components/span-markers.tsx +0 -0
  304. /package/src/components/{new-trace-viewer → trace-viewer}/components/split-pane.tsx +0 -0
  305. /package/src/components/{new-trace-viewer → trace-viewer}/components/timeline.module.css +0 -0
  306. /package/src/components/{new-trace-viewer → trace-viewer}/components/trace-shortcut-helper.module.css +0 -0
  307. /package/src/components/{new-trace-viewer → trace-viewer}/components/trace-viewer-skeleton.tsx +0 -0
  308. /package/src/components/{new-trace-viewer → trace-viewer}/components/use-element-width.ts +0 -0
  309. /package/src/components/{new-trace-viewer → trace-viewer}/components/use-row-window.ts +0 -0
  310. /package/src/components/{new-trace-viewer → trace-viewer}/icons.tsx +0 -0
  311. /package/src/components/{new-trace-viewer → trace-viewer}/search.ts +0 -0
  312. /package/src/components/{new-trace-viewer → trace-viewer}/utils.test.ts +0 -0
  313. /package/src/{components/trace-viewer/modules.d.ts → modules.d.ts} +0 -0
@@ -1,286 +0,0 @@
1
- 'use client';
2
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { clsx } from 'clsx';
4
- import { memo, useEffect, useRef, useState } from 'react';
5
- import styles from '../trace-viewer.module.css';
6
- import { MARKER_HEIGHT, ROW_HEIGHT, ROW_PADDING } from '../util/constants';
7
- import { formatDuration, getHighResInMs } from '../util/timing';
8
- import { SpanContent } from './span-content';
9
- import { computeSegments } from './span-segments';
10
- import { getResourceType, getSpanLayout, } from './span-strategies';
11
- export const getSpanColorClassName = (node) => {
12
- if (node.isVercel)
13
- return String(styles.colorVercel);
14
- return String(styles[`color${node.resourceIndex % 5}`]);
15
- };
16
- function getTerminalTimestamp(resourceType, node) {
17
- const events = node.events;
18
- if (!events?.length)
19
- return undefined;
20
- switch (resourceType) {
21
- case 'hook':
22
- for (let i = events.length; i--;) {
23
- if (events[i].event.name === 'hook_disposed') {
24
- return events[i].timestamp;
25
- }
26
- }
27
- return undefined;
28
- case 'sleep':
29
- for (let i = events.length; i--;) {
30
- if (events[i].event.name === 'wait_completed') {
31
- return events[i].timestamp;
32
- }
33
- }
34
- return undefined;
35
- case 'run':
36
- for (let i = events.length; i--;) {
37
- const name = events[i].event.name;
38
- if (name === 'run_completed' ||
39
- name === 'run_failed' ||
40
- name === 'run_cancelled') {
41
- return events[i].timestamp;
42
- }
43
- }
44
- return undefined;
45
- case 'step':
46
- for (let i = events.length; i--;) {
47
- const name = events[i].event.name;
48
- if (name === 'step_completed' || name === 'step_failed') {
49
- return events[i].timestamp;
50
- }
51
- if (name === 'step_started' || name === 'step_retrying') {
52
- return undefined;
53
- }
54
- }
55
- return undefined;
56
- default:
57
- return undefined;
58
- }
59
- }
60
- export const SpanNodes = memo(function SpanNodes({ root, scale, spans, isLive = false, scrollSnapshotRef, cache, customSpanClassNameFunc, customSpanEventClassNameFunc, }) {
61
- return spans.map((x) => (_jsx(SpanComponent, { cacheKey: cache.get(x.span.spanId), customSpanEventClassNameFunc: customSpanEventClassNameFunc, customSpanClassNameFunc: customSpanClassNameFunc, node: x, root: root, scale: scale, traceIsLive: isLive, scrollSnapshotRef: scrollSnapshotRef }, x.span.spanId)));
62
- });
63
- // ──────────────────────────────────────────────────────────────────────────
64
- // Compute inline styles from a SpanLayout
65
- // ──────────────────────────────────────────────────────────────────────────
66
- function getSpanStyle(layout, node, root, scale) {
67
- // Use isExpanded (hovered or selected) for width expansion so that
68
- // selected small spans stay expanded and show their name.
69
- const expanded = layout.isExpanded;
70
- return {
71
- // Use actualWidth for CSS variable so hover expansion is accurate
72
- '--span-width': `${Math.max(layout.actualWidth, 1)}px`,
73
- minWidth: expanded ? layout.width : undefined,
74
- width: expanded ? undefined : layout.width,
75
- height: layout.height,
76
- maxWidth: expanded && !layout.isNearRightSide
77
- ? (root.endTime - node.startTime) * scale
78
- : undefined,
79
- containIntrinsicWidth: expanded ? undefined : layout.width,
80
- containIntrinsicHeight: layout.height,
81
- left: layout.isNearRightSide ? undefined : layout.left,
82
- right: layout.isNearRightSide
83
- ? (root.endTime - node.endTime) * scale
84
- : undefined,
85
- top: layout.top,
86
- };
87
- }
88
- // ──────────────────────────────────────────────────────────────────────────
89
- // SpanComponent
90
- // ──────────────────────────────────────────────────────────────────────────
91
- export const SpanComponent = memo(function SpanComponent({ node, root, scale, traceIsLive = false, scrollSnapshotRef, customSpanClassNameFunc, customSpanEventClassNameFunc, }) {
92
- const ref = useRef(null);
93
- useEffect(() => {
94
- node.ref = ref;
95
- return () => {
96
- node.ref = undefined;
97
- };
98
- }, [node]);
99
- const { span } = node;
100
- const resourceType = getResourceType(node);
101
- const [liveNow, setLiveNow] = useState(0);
102
- // Get custom class name from callback if provided
103
- const customClassName = customSpanClassNameFunc
104
- ? customSpanClassNameFunc(node)
105
- : '';
106
- // Workflow span types use colored segments + boundary line markers
107
- // Generic OTEL spans use diamond event markers
108
- const isWorkflowSpan = resourceType !== 'default';
109
- // Determine if this span is still active (live). We require the parent run
110
- // to be explicitly live to avoid completed/cancelled traces continuing to
111
- // grow due to timing heuristics.
112
- const data = span.attributes?.data;
113
- const terminalTimestamp = getTerminalTimestamp(resourceType, node);
114
- const hasTerminalEvent = terminalTimestamp != null;
115
- const isCompletedByData = resourceType === 'hook'
116
- ? Boolean(data?.disposedAt)
117
- : Boolean(data?.completedAt);
118
- const isCompleted = isCompletedByData || hasTerminalEvent;
119
- const isLive = traceIsLive && isWorkflowSpan && !isCompleted;
120
- useEffect(() => {
121
- if (!isLive)
122
- return;
123
- setLiveNow(Date.now());
124
- const interval = setInterval(() => {
125
- setLiveNow(Date.now());
126
- }, 250);
127
- return () => clearInterval(interval);
128
- }, [isLive]);
129
- const canonicalStartTime = getHighResInMs(span.startTime);
130
- const canonicalEndTime = getHighResInMs(span.endTime);
131
- const canonicalDuration = getHighResInMs(span.duration);
132
- const canonicalActiveStartTime = span.activeStartTime
133
- ? getHighResInMs(span.activeStartTime)
134
- : undefined;
135
- const durationMs = terminalTimestamp != null
136
- ? Math.max(0, terminalTimestamp - canonicalStartTime)
137
- : isLive
138
- ? Math.max(0, (liveNow || Date.now()) - canonicalStartTime)
139
- : canonicalDuration;
140
- const duration = node.isInstrumentationHint
141
- ? 'Get Started'
142
- : formatDuration(durationMs);
143
- const baseNode = {
144
- ...node,
145
- startTime: canonicalStartTime,
146
- endTime: canonicalEndTime,
147
- duration: canonicalDuration,
148
- activeStartTime: canonicalActiveStartTime,
149
- };
150
- const segmentNode = isLive
151
- ? {
152
- ...baseNode,
153
- duration: durationMs,
154
- endTime: canonicalStartTime + durationMs,
155
- }
156
- : baseNode;
157
- const hasSegments = isWorkflowSpan &&
158
- computeSegments(resourceType, segmentNode).segments.length > 0;
159
- const layout = getSpanLayout(resourceType, segmentNode, root, scale, scrollSnapshotRef);
160
- // For live spans the data-level `node.duration` can be stale (from the last
161
- // fetch) while the visual width is growing via rAF. Recompute from real
162
- // elapsed time so that:
163
- // - height/isSmall classification stays correct (not shrunken to 40%)
164
- // - React-rendered width matches the rAF-driven width, preventing a brief
165
- // shrink→expand flash on re-render that breaks cursor hit-testing
166
- if (isLive) {
167
- const elapsed = durationMs;
168
- const liveActualWidth = elapsed * scale;
169
- const liveWidth = Math.max(liveActualWidth, 4);
170
- layout.actualWidth = liveActualWidth;
171
- layout.width = liveWidth;
172
- layout.isSmall = liveActualWidth < 64;
173
- layout.isHuge = liveActualWidth >= 500;
174
- if (!layout.isSmall) {
175
- layout.height = ROW_HEIGHT;
176
- layout.top = MARKER_HEIGHT + (ROW_HEIGHT + ROW_PADDING) * segmentNode.row;
177
- }
178
- }
179
- // Smoothly grow active span width at 60fps using wall clock time
180
- useEffect(() => {
181
- if (!isLive || !ref.current)
182
- return;
183
- let rafId = 0;
184
- const tick = () => {
185
- const $el = ref.current;
186
- if (!$el)
187
- return;
188
- const elapsed = Date.now() - canonicalStartTime;
189
- const w = Math.max(elapsed * scale, 2);
190
- $el.style.width = `${w}px`;
191
- $el.style.setProperty('--span-width', `${w}px`);
192
- rafId = requestAnimationFrame(tick);
193
- };
194
- rafId = requestAnimationFrame(tick);
195
- return () => cancelAnimationFrame(rafId);
196
- }, [isLive, canonicalStartTime, scale]);
197
- const renderNode = segmentNode;
198
- return (_jsxs(_Fragment, { children: [_jsx("button", { "aria-label": `${span.name} - ${duration}`, className: clsx(styles.spanNode, layout.isHuge && styles.huge, layout.isSmall && styles.small, layout.isExpanded && styles.xHover, node.isHighlighted
199
- ? styles.colorHighlight
200
- : getSpanColorClassName(node), node.isHighlighted === false && styles.unlit, customClassName, hasSegments && styles.hasSegments), "data-span-id": span.spanId, "data-start-time": segmentNode.startTime - root.startTime, "data-right-side": layout.isNearRightSide, "data-selected": node.isSelected ? '' : undefined, ref: ref, style: getSpanStyle(layout, segmentNode, root, scale), type: "button", children: _jsx(SpanContent, { durationMs: durationMs, resourceType: resourceType, node: renderNode, layout: layout }) }), segmentNode.events && !layout.isSmall
201
- ? segmentNode.events.map((x) => (_jsx(SpanEventComponent, { customSpanEventClassNameFunc: customSpanEventClassNameFunc, event: x, node: segmentNode, root: root, scale: scale, asBoundary: isWorkflowSpan }, x.key)))
202
- : null] }));
203
- });
204
- // ──────────────────────────────────────────────────────────────────────────
205
- // SpanEventComponent
206
- // ──────────────────────────────────────────────────────────────────────────
207
- /** Human-readable labels for workflow event types */
208
- const BOUNDARY_LABELS = {
209
- step_started: 'Started',
210
- step_retrying: 'Retrying',
211
- step_failed: 'Failed',
212
- hook_created: 'Created',
213
- hook_received: 'Received',
214
- hook_disposed: 'Resolved',
215
- wait_created: 'Sleep started',
216
- wait_completed: 'Sleep completed',
217
- run_started: 'Started',
218
- run_completed: 'Completed',
219
- run_failed: 'Run failed',
220
- step_completed: 'Completed',
221
- attr_set: 'Attributes set',
222
- };
223
- export const SpanEventComponent = memo(function SpanEventComponent({ event, node, root, scale, customSpanEventClassNameFunc, asBoundary = false, }) {
224
- const ref = useRef(null);
225
- useEffect(() => {
226
- event.ref = ref;
227
- return () => {
228
- event.ref = undefined;
229
- };
230
- }, [event]);
231
- const { event: { name }, } = event;
232
- const timestamp = formatDuration(event.timestamp - root.startTime);
233
- const displayLabel = asBoundary ? (BOUNDARY_LABELS[name] ?? name) : name;
234
- // For boundary events, compute the duration of the phase.
235
- // "Forward" events (started, retrying) measure until the next event.
236
- // "Terminal" events (completed) measure from the previous started event.
237
- const isForwardEvent = asBoundary &&
238
- (name === 'step_started' ||
239
- name === 'run_started' ||
240
- name === 'step_retrying');
241
- const isTerminalEvent = asBoundary && (name === 'step_completed' || name === 'run_completed');
242
- let phaseDuration = null;
243
- let phaseLabel = null;
244
- if ((isForwardEvent || isTerminalEvent) && node.events) {
245
- const sortedNodeEvents = [...node.events].sort((a, b) => a.timestamp - b.timestamp);
246
- const currentIdx = sortedNodeEvents.findIndex((e) => e.key === event.key);
247
- if (isTerminalEvent) {
248
- // Look backward to find the last step_started
249
- let prevStartTime = null;
250
- for (let i = currentIdx - 1; i >= 0; i--) {
251
- if (sortedNodeEvents[i].event.name === 'step_started') {
252
- prevStartTime = sortedNodeEvents[i].timestamp;
253
- break;
254
- }
255
- }
256
- if (prevStartTime !== null) {
257
- phaseDuration = formatDuration(event.timestamp - prevStartTime);
258
- phaseLabel = 'Executed';
259
- }
260
- }
261
- else {
262
- // Look forward to the next event
263
- const nextEvent = sortedNodeEvents[currentIdx + 1];
264
- const endTime = nextEvent ? nextEvent.timestamp : node.endTime;
265
- phaseDuration = formatDuration(endTime - event.timestamp);
266
- phaseLabel = name === 'step_retrying' ? 'Waited' : 'Executed';
267
- }
268
- }
269
- const left = (event.timestamp - root.startTime) * scale;
270
- const top = MARKER_HEIGHT + (ROW_HEIGHT + ROW_PADDING) * node.row;
271
- const isLeftAligned = node.duration <= 0 ||
272
- (event.timestamp - node.startTime) / node.duration < 0.5;
273
- // Get custom class name from callback if provided
274
- const customClassName = customSpanEventClassNameFunc
275
- ? customSpanEventClassNameFunc(event)
276
- : '';
277
- return (_jsxs("div", { title: phaseDuration
278
- ? `${displayLabel} ${timestamp}\n${phaseLabel} ${phaseDuration}`
279
- : `${displayLabel} ${timestamp}`, className: clsx(styles.spanNodeEvent, customClassName, asBoundary && styles.boundaryMarker, node.isHighlighted
280
- ? styles.colorHighlight
281
- : getSpanColorClassName(node), node.isHighlighted === false && styles.unlit), "data-hovered": event.isHovered, ref: ref, style: {
282
- left,
283
- top,
284
- }, children: [_jsx("div", { className: clsx(styles.hoverInfo, isLeftAligned ? styles.alignStart : styles.alignEnd), children: asBoundary ? (_jsxs(_Fragment, { children: [_jsx("span", { className: styles.eventName, children: displayLabel }), _jsx("span", { className: styles.eventTimestamp, children: timestamp }), phaseDuration ? (_jsxs(_Fragment, { children: [_jsx("span", { className: styles.eventName, children: phaseLabel }), _jsx("span", { className: styles.eventTimestamp, children: phaseDuration })] })) : null] })) : (_jsxs(_Fragment, { children: [_jsx("span", { className: styles.eventName, children: name }), _jsx("span", { className: styles.eventTimestamp, children: timestamp })] })) }), asBoundary ? (_jsx("div", { className: styles.boundaryLine })) : (_jsx("div", { className: styles.eventDiamond }))] }));
285
- });
286
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3RyYWNlLXZpZXdlci9jb21wb25lbnRzL25vZGUudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7QUFFYixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTVCLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDMUQsT0FBTyxNQUFNLE1BQU0sNEJBQTRCLENBQUM7QUFVaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDM0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xELE9BQU8sRUFDTCxlQUFlLEVBQ2YsYUFBYSxHQUdkLE1BQU0sbUJBQW1CLENBQUM7QUFFM0IsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxJQUFjLEVBQVUsRUFBRTtJQUM5RCxJQUFJLElBQUksQ0FBQyxRQUFRO1FBQUUsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3JELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxFQUFjLENBQUMsQ0FBQyxDQUFDO0FBQ3RFLENBQUMsQ0FBQztBQUVGLFNBQVMsb0JBQW9CLENBQzNCLFlBQTBCLEVBQzFCLElBQWlCO0lBRWpCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDM0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNO1FBQUUsT0FB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O0FBQ0osQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB7IGNsc3ggfSBmcm9tICdjbHN4JztcbmltcG9ydCB0eXBlIHsgQ1NTUHJvcGVydGllcywgTXV0YWJsZVJlZk9iamVjdCwgUmVhY3ROb2RlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgbWVtbywgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuLi90cmFjZS12aWV3ZXIubW9kdWxlLmNzcyc7XG5pbXBvcnQgdHlwZSB7XG4gIE1lbW9DYWNoZSxcbiAgTWVtb0NhY2hlS2V5LFxuICBSb290Tm9kZSxcbiAgU2Nyb2xsU25hcHNob3QsXG4gIFNwYW5Ob2RlLFxuICBWaXNpYmxlU3BhbixcbiAgVmlzaWJsZVNwYW5FdmVudCxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgTUFSS0VSX0hFSUdIVCwgUk9XX0hFSUdIVCwgUk9XX1BBRERJTkcgfSBmcm9tICcuLi91dGlsL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBmb3JtYXREdXJhdGlvbiwgZ2V0SGlnaFJlc0luTXMgfSBmcm9tICcuLi91dGlsL3RpbWluZyc7XG5pbXBvcnQgeyBTcGFuQ29udGVudCB9IGZyb20gJy4vc3Bhbi1jb250ZW50JztcbmltcG9ydCB7IGNvbXB1dGVTZWdtZW50cyB9IGZyb20gJy4vc3Bhbi1zZWdtZW50cyc7XG5pbXBvcnQge1xuICBnZXRSZXNvdXJjZVR5cGUsXG4gIGdldFNwYW5MYXlvdXQsXG4gIHR5cGUgUmVzb3VyY2VUeXBlLFxuICB0eXBlIFNwYW5MYXlvdXQsXG59IGZyb20gJy4vc3Bhbi1zdHJhdGVnaWVzJztcblxuZXhwb3J0IGNvbnN0IGdldFNwYW5Db2xvckNsYXNzTmFtZSA9IChub2RlOiBTcGFuTm9kZSk6IHN0cmluZyA9PiB7XG4gIGlmIChub2RlLmlzVmVyY2VsKSByZXR1cm4gU3RyaW5nKHN0eWxlcy5jb2xvclZlcmNlbCk7XG4gIHJldHVybiBTdHJpbmcoc3R5bGVzW2Bjb2xvciR7bm9kZS5yZXNvdXJjZUluZGV4ICUgNX1gIGFzICdjb2xvcjAnXSk7XG59O1xuXG5mdW5jdGlvbiBnZXRUZXJtaW5hbFRpbWVzdGFtcChcbiAgcmVzb3VyY2VUeXBlOiBSZXNvdXJjZVR5cGUsXG4gIG5vZGU6IFZpc2libGVTcGFuXG4pOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICBjb25zdCBldmVudHMgPSBub2RlLmV2ZW50cztcbiAgaWYgKCFldmVudHM/Lmxlbmd0aCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICBzd2l0Y2ggKHJlc291cmNlVHlwZSkge1xuICAgIGNhc2UgJ2hvb2snOlxuICAgICAgZm9yIChsZXQgaSA9IGV2ZW50cy5sZW5ndGg7IGktLTsgKSB7XG4gICAgICAgIGlmIChldmVudHNbaV0uZXZlbnQubmFtZSA9PT0gJ2hvb2tfZGlzcG9zZWQnKSB7XG4gICAgICAgICAgcmV0dXJuIGV2ZW50c1tpXS50aW1lc3RhbXA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY2FzZSAnc2xlZXAnOlxuICAgICAgZm9yIChsZXQgaSA9IGV2ZW50cy5sZW5ndGg7IGktLTsgKSB7XG4gICAgICAgIGlmIChldmVudHNbaV0uZXZlbnQubmFtZSA9PT0gJ3dhaXRfY29tcGxldGVkJykge1xuICAgICAgICAgIHJldHVybiBldmVudHNbaV0udGltZXN0YW1wO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNhc2UgJ3J1bic6XG4gICAgICBmb3IgKGxldCBpID0gZXZlbnRzLmxlbmd0aDsgaS0tOyApIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IGV2ZW50c1tpXS5ldmVudC5uYW1lO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgbmFtZSA9PT0gJ3J1bl9jb21wbGV0ZWQnIHx8XG4gICAgICAgICAgbmFtZSA9PT0gJ3J1bl9mYWlsZWQnIHx8XG4gICAgICAgICAgbmFtZSA9PT0gJ3J1bl9jYW5jZWxsZWQnXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBldmVudHNbaV0udGltZXN0YW1wO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNhc2UgJ3N0ZXAnOlxuICAgICAgZm9yIChsZXQgaSA9IGV2ZW50cy5sZW5ndGg7IGktLTsgKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBldmVudHNbaV0uZXZlbnQubmFtZTtcbiAgICAgICAgaWYgKG5hbWUgPT09ICdzdGVwX2NvbXBsZXRlZCcgfHwgbmFtZSA9PT0gJ3N0ZXBfZmFpbGVkJykge1xuICAgICAgICAgIHJldHVybiBldmVudHNbaV0udGltZXN0YW1wO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuYW1lID09PSAnc3RlcF9zdGFydGVkJyB8fCBuYW1lID09PSAnc3RlcF9yZXRyeWluZycpIHtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBTcGFuTm9kZXMgPSBtZW1vKGZ1bmN0aW9uIFNwYW5Ob2Rlcyh7XG4gIHJvb3QsXG4gIHNjYWxlLFxuICBzcGFucyxcbiAgaXNMaXZlID0gZmFsc2UsXG4gIHNjcm9sbFNuYXBzaG90UmVmLFxuICBjYWNoZSxcbiAgY3VzdG9tU3BhbkNsYXNzTmFtZUZ1bmMsXG4gIGN1c3RvbVNwYW5FdmVudENsYXNzTmFtZUZ1bmMsXG59OiB7XG4gIHJvb3Q6IFJvb3ROb2RlO1xuICBzY2FsZTogbnVtYmVyO1xuICBzcGFuczogVmlzaWJsZVNwYW5bXTtcbiAgaXNMaXZlPzogYm9vbGVhbjtcbiAgc2Nyb2xsU25hcHNob3RSZWY6IE11dGFibGVSZWZPYmplY3Q8U2Nyb2xsU25hcHNob3QgfCB1bmRlZmluZWQ+O1xuICAvKiogTm90IHVzZWQgaW4gdGhlIGJvZHkg4oCUIGV4aXN0cyBzb2xlbHkgdG8gYnVzdCBSZWFjdC5tZW1vIHdoZW4gdGhlIGdsb2JhbCBtZW1vIGNhY2hlIGNoYW5nZXMuICovXG4gIGNhY2hlS2V5PzogTWVtb0NhY2hlS2V5O1xuICBjYWNoZTogTWVtb0NhY2hlO1xuICBjdXN0b21TcGFuQ2xhc3NOYW1lRnVuYz86IChzcGFuOiBTcGFuTm9kZSkgPT4gc3RyaW5nO1xuICBjdXN0b21TcGFuRXZlbnRDbGFzc05hbWVGdW5jPzogKGV2ZW50OiBWaXNpYmxlU3BhbkV2ZW50KSA9PiBzdHJpbmc7XG59KSB7XG4gIHJldHVybiBzcGFucy5tYXAoKHgpID0+IChcbiAgICA8U3BhbkNvbXBvbmVudFxuICAgICAgY2FjaGVLZXk9e2NhY2hlLmdldCh4LnNwYW4uc3BhbklkKX1cbiAgICAgIGN1c3RvbVNwYW5FdmVudENsYXNzTmFtZUZ1bmM9e2N1c3RvbVNwYW5FdmVudENsYXNzTmFtZUZ1bmN9XG4gICAgICBjdXN0b21TcGFuQ2xhc3NOYW1lRnVuYz17Y3VzdG9tU3BhbkNsYXNzTmFtZUZ1bmN9XG4gICAgICBrZXk9e3guc3Bhbi5zcGFuSWR9XG4gICAgICBub2RlPXt4fVxuICAgICAgcm9vdD17cm9vdH1cbiAgICAgIHNjYWxlPXtzY2FsZX1cbiAgICAgIHRyYWNlSXNMaXZlPXtpc0xpdmV9XG4gICAgICBzY3JvbGxTbmFwc2hvdFJlZj17c2Nyb2xsU25hcHNob3RSZWZ9XG4gICAgLz5cbiAgKSk7XG59KTtcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBDb21wdXRlIGlubGluZSBzdHlsZXMgZnJvbSBhIFNwYW5MYXlvdXRcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5mdW5jdGlvbiBnZXRTcGFuU3R5bGUoXG4gIGxheW91dDogU3BhbkxheW91dCxcbiAgbm9kZTogVmlzaWJsZVNwYW4sXG4gIHJvb3Q6IFJvb3ROb2RlLFxuICBzY2FsZTogbnVtYmVyXG4pOiBDU1NQcm9wZXJ0aWVzIHtcbiAgLy8gVXNlIGlzRXhwYW5kZWQgKGhvdmVyZWQgb3Igc2VsZWN0ZWQpIGZvciB3aWR0aCBleHBhbnNpb24gc28gdGhhdFxuICAvLyBzZWxlY3RlZCBzbWFsbCBzcGFucyBzdGF5IGV4cGFuZGVkIGFuZCBzaG93IHRoZWlyIG5hbWUuXG4gIGNvbnN0IGV4cGFuZGVkID0gbGF5b3V0LmlzRXhwYW5kZWQ7XG4gIHJldHVybiB7XG4gICAgLy8gVXNlIGFjdHVhbFdpZHRoIGZvciBDU1MgdmFyaWFibGUgc28gaG92ZXIgZXhwYW5zaW9uIGlzIGFjY3VyYXRlXG4gICAgJy0tc3Bhbi13aWR0aCc6IGAke01hdGgubWF4KGxheW91dC5hY3R1YWxXaWR0aCwgMSl9cHhgLFxuICAgIG1pbldpZHRoOiBleHBhbmRlZCA/IGxheW91dC53aWR0aCA6IHVuZGVmaW5lZCxcbiAgICB3aWR0aDogZXhwYW5kZWQgPyB1bmRlZmluZWQgOiBsYXlvdXQud2lkdGgsXG4gICAgaGVpZ2h0OiBsYXlvdXQuaGVpZ2h0LFxuICAgIG1heFdpZHRoOlxuICAgICAgZXhwYW5kZWQgJiYgIWxheW91dC5pc05lYXJSaWdodFNpZGVcbiAgICAgICAgPyAocm9vdC5lbmRUaW1lIC0gbm9kZS5zdGFydFRpbWUpICogc2NhbGVcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgY29udGFpbkludHJpbnNpY1dpZHRoOiBleHBhbmRlZCA/IHVuZGVmaW5lZCA6IGxheW91dC53aWR0aCxcbiAgICBjb250YWluSW50cmluc2ljSGVpZ2h0OiBsYXlvdXQuaGVpZ2h0LFxuICAgIGxlZnQ6IGxheW91dC5pc05lYXJSaWdodFNpZGUgPyB1bmRlZmluZWQgOiBsYXlvdXQubGVmdCxcbiAgICByaWdodDogbGF5b3V0LmlzTmVhclJpZ2h0U2lkZVxuICAgICAgPyAocm9vdC5lbmRUaW1lIC0gbm9kZS5lbmRUaW1lKSAqIHNjYWxlXG4gICAgICA6IHVuZGVmaW5lZCxcbiAgICB0b3A6IGxheW91dC50b3AsXG4gIH0gYXMgQ1NTUHJvcGVydGllcztcbn1cblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBTcGFuQ29tcG9uZW50XG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IGNvbnN0IFNwYW5Db21wb25lbnQgPSBtZW1vKGZ1bmN0aW9uIFNwYW5Db21wb25lbnQoe1xuICBub2RlLFxuICByb290LFxuICBzY2FsZSxcbiAgdHJhY2VJc0xpdmUgPSBmYWxzZSxcbiAgc2Nyb2xsU25hcHNob3RSZWYsXG4gIGN1c3RvbVNwYW5DbGFzc05hbWVGdW5jLFxuICBjdXN0b21TcGFuRXZlbnRDbGFzc05hbWVGdW5jLFxufToge1xuICBub2RlOiBWaXNpYmxlU3BhbjtcbiAgcm9vdDogUm9vdE5vZGU7XG4gIHNjYWxlOiBudW1iZXI7XG4gIHRyYWNlSXNMaXZlPzogYm9vbGVhbjtcbiAgc2Nyb2xsU25hcHNob3RSZWY6IE11dGFibGVSZWZPYmplY3Q8U2Nyb2xsU25hcHNob3QgfCB1bmRlZmluZWQ+O1xuICAvKiogTm90IHVzZWQgaW4gdGhlIGJvZHkg4oCUIGV4aXN0cyBzb2xlbHkgdG8gYnVzdCBSZWFjdC5tZW1vIGZvciB0aGlzIHNwYW4uICovXG4gIGNhY2hlS2V5PzogTWVtb0NhY2hlS2V5O1xuICBjdXN0b21TcGFuQ2xhc3NOYW1lRnVuYz86IChzcGFuOiBTcGFuTm9kZSkgPT4gc3RyaW5nO1xuICBjdXN0b21TcGFuRXZlbnRDbGFzc05hbWVGdW5jPzogKGV2ZW50OiBWaXNpYmxlU3BhbkV2ZW50KSA9PiBzdHJpbmc7XG59KTogUmVhY3ROb2RlIHtcbiAgY29uc3QgcmVmID0gdXNlUmVmPEhUTUxCdXR0b25FbGVtZW50PihudWxsKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIG5vZGUucmVmID0gcmVmO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBub2RlLnJlZiA9IHVuZGVmaW5lZDtcbiAgICB9O1xuICB9LCBbbm9kZV0pO1xuXG4gIGNvbnN0IHsgc3BhbiB9ID0gbm9kZTtcbiAgY29uc3QgcmVzb3VyY2VUeXBlID0gZ2V0UmVzb3VyY2VUeXBlKG5vZGUpO1xuICBjb25zdCBbbGl2ZU5vdywgc2V0TGl2ZU5vd10gPSB1c2VTdGF0ZSgwKTtcblxuICAvLyBHZXQgY3VzdG9tIGNsYXNzIG5hbWUgZnJvbSBjYWxsYmFjayBpZiBwcm92aWRlZFxuICBjb25zdCBjdXN0b21DbGFzc05hbWUgPSBjdXN0b21TcGFuQ2xhc3NOYW1lRnVuY1xuICAgID8gY3VzdG9tU3BhbkNsYXNzTmFtZUZ1bmMobm9kZSlcbiAgICA6ICcnO1xuXG4gIC8vIFdvcmtmbG93IHNwYW4gdHlwZXMgdXNlIGNvbG9yZWQgc2VnbWVudHMgKyBib3VuZGFyeSBsaW5lIG1hcmtlcnNcbiAgLy8gR2VuZXJpYyBPVEVMIHNwYW5zIHVzZSBkaWFtb25kIGV2ZW50IG1hcmtlcnNcbiAgY29uc3QgaXNXb3JrZmxvd1NwYW4gPSByZXNvdXJjZVR5cGUgIT09ICdkZWZhdWx0JztcblxuICAvLyBEZXRlcm1pbmUgaWYgdGhpcyBzcGFuIGlzIHN0aWxsIGFjdGl2ZSAobGl2ZSkuIFdlIHJlcXVpcmUgdGhlIHBhcmVudCBydW5cbiAgLy8gdG8gYmUgZXhwbGljaXRseSBsaXZlIHRvIGF2b2lkIGNvbXBsZXRlZC9jYW5jZWxsZWQgdHJhY2VzIGNvbnRpbnVpbmcgdG9cbiAgLy8gZ3JvdyBkdWUgdG8gdGltaW5nIGhldXJpc3RpY3MuXG4gIGNvbnN0IGRhdGEgPSBzcGFuLmF0dHJpYnV0ZXM/LmRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gIGNvbnN0IHRlcm1pbmFsVGltZXN0YW1wID0gZ2V0VGVybWluYWxUaW1lc3RhbXAocmVzb3VyY2VUeXBlLCBub2RlKTtcbiAgY29uc3QgaGFzVGVybWluYWxFdmVudCA9IHRlcm1pbmFsVGltZXN0YW1wICE9IG51bGw7XG4gIGNvbnN0IGlzQ29tcGxldGVkQnlEYXRhID1cbiAgICByZXNvdXJjZVR5cGUgPT09ICdob29rJ1xuICAgICAgPyBCb29sZWFuKGRhdGE/LmRpc3Bvc2VkQXQpXG4gICAgICA6IEJvb2xlYW4oZGF0YT8uY29tcGxldGVkQXQpO1xuICBjb25zdCBpc0NvbXBsZXRlZCA9IGlzQ29tcGxldGVkQnlEYXRhIHx8IGhhc1Rlcm1pbmFsRXZlbnQ7XG4gIGNvbnN0IGlzTGl2ZSA9IHRyYWNlSXNMaXZlICYmIGlzV29ya2Zsb3dTcGFuICYmICFpc0NvbXBsZXRlZDtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaXNMaXZlKSByZXR1cm47XG4gICAgc2V0TGl2ZU5vdyhEYXRlLm5vdygpKTtcbiAgICBjb25zdCBpbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIHNldExpdmVOb3coRGF0ZS5ub3coKSk7XG4gICAgfSwgMjUwKTtcbiAgICByZXR1cm4gKCkgPT4gY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XG4gIH0sIFtpc0xpdmVdKTtcblxuICBjb25zdCBjYW5vbmljYWxTdGFydFRpbWUgPSBnZXRIaWdoUmVzSW5NcyhzcGFuLnN0YXJ0VGltZSk7XG4gIGNvbnN0IGNhbm9uaWNhbEVuZFRpbWUgPSBnZXRIaWdoUmVzSW5NcyhzcGFuLmVuZFRpbWUpO1xuICBjb25zdCBjYW5vbmljYWxEdXJhdGlvbiA9IGdldEhpZ2hSZXNJbk1zKHNwYW4uZHVyYXRpb24pO1xuICBjb25zdCBjYW5vbmljYWxBY3RpdmVTdGFydFRpbWUgPSBzcGFuLmFjdGl2ZVN0YXJ0VGltZVxuICAgID8gZ2V0SGlnaFJlc0luTXMoc3Bhbi5hY3RpdmVTdGFydFRpbWUpXG4gICAgOiB1bmRlZmluZWQ7XG5cbiAgY29uc3QgZHVyYXRpb25NcyA9XG4gICAgdGVybWluYWxUaW1lc3RhbXAgIT0gbnVsbFxuICAgICAgPyBNYXRoLm1heCgwLCB0ZXJtaW5hbFRpbWVzdGFtcCAtIGNhbm9uaWNhbFN0YXJ0VGltZSlcbiAgICAgIDogaXNMaXZlXG4gICAgICAgID8gTWF0aC5tYXgoMCwgKGxpdmVOb3cgfHwgRGF0ZS5ub3coKSkgLSBjYW5vbmljYWxTdGFydFRpbWUpXG4gICAgICAgIDogY2Fub25pY2FsRHVyYXRpb247XG4gIGNvbnN0IGR1cmF0aW9uID0gbm9kZS5pc0luc3RydW1lbnRhdGlvbkhpbnRcbiAgICA/ICdHZXQgU3RhcnRlZCdcbiAgICA6IGZvcm1hdER1cmF0aW9uKGR1cmF0aW9uTXMpO1xuICBjb25zdCBiYXNlTm9kZSA9IHtcbiAgICAuLi5ub2RlLFxuICAgIHN0YXJ0VGltZTogY2Fub25pY2FsU3RhcnRUaW1lLFxuICAgIGVuZFRpbWU6IGNhbm9uaWNhbEVuZFRpbWUsXG4gICAgZHVyYXRpb246IGNhbm9uaWNhbER1cmF0aW9uLFxuICAgIGFjdGl2ZVN0YXJ0VGltZTogY2Fub25pY2FsQWN0aXZlU3RhcnRUaW1lLFxuICB9IGFzIFZpc2libGVTcGFuO1xuICBjb25zdCBzZWdtZW50Tm9kZSA9IGlzTGl2ZVxuICAgID8gKHtcbiAgICAgICAgLi4uYmFzZU5vZGUsXG4gICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvbk1zLFxuICAgICAgICBlbmRUaW1lOiBjYW5vbmljYWxTdGFydFRpbWUgKyBkdXJhdGlvbk1zLFxuICAgICAgfSBhcyBWaXNpYmxlU3BhbilcbiAgICA6IGJhc2VOb2RlO1xuICBjb25zdCBoYXNTZWdtZW50cyA9XG4gICAgaXNXb3JrZmxvd1NwYW4gJiZcbiAgICBjb21wdXRlU2VnbWVudHMocmVzb3VyY2VUeXBlLCBzZWdtZW50Tm9kZSkuc2VnbWVudHMubGVuZ3RoID4gMDtcbiAgY29uc3QgbGF5b3V0ID0gZ2V0U3BhbkxheW91dChcbiAgICByZXNvdXJjZVR5cGUsXG4gICAgc2VnbWVudE5vZGUsXG4gICAgcm9vdCxcbiAgICBzY2FsZSxcbiAgICBzY3JvbGxTbmFwc2hvdFJlZlxuICApO1xuXG4gIC8vIEZvciBsaXZlIHNwYW5zIHRoZSBkYXRhLWxldmVsIGBub2RlLmR1cmF0aW9uYCBjYW4gYmUgc3RhbGUgKGZyb20gdGhlIGxhc3RcbiAgLy8gZmV0Y2gpIHdoaWxlIHRoZSB2aXN1YWwgd2lkdGggaXMgZ3Jvd2luZyB2aWEgckFGLiBSZWNvbXB1dGUgZnJvbSByZWFsXG4gIC8vIGVsYXBzZWQgdGltZSBzbyB0aGF0OlxuICAvLyAgLSBoZWlnaHQvaXNTbWFsbCBjbGFzc2lmaWNhdGlvbiBzdGF5cyBjb3JyZWN0IChub3Qgc2hydW5rZW4gdG8gNDAlKVxuICAvLyAgLSBSZWFjdC1yZW5kZXJlZCB3aWR0aCBtYXRjaGVzIHRoZSByQUYtZHJpdmVuIHdpZHRoLCBwcmV2ZW50aW5nIGEgYnJpZWZcbiAgLy8gICAgc2hyaW5r4oaSZXhwYW5kIGZsYXNoIG9uIHJlLXJlbmRlciB0aGF0IGJyZWFrcyBjdXJzb3IgaGl0LXRlc3RpbmdcbiAgaWYgKGlzTGl2ZSkge1xuICAgIGNvbnN0IGVsYXBzZWQgPSBkdXJhdGlvbk1zO1xuICAgIGNvbnN0IGxpdmVBY3R1YWxXaWR0aCA9IGVsYXBzZWQgKiBzY2FsZTtcbiAgICBjb25zdCBsaXZlV2lkdGggPSBNYXRoLm1heChsaXZlQWN0dWFsV2lkdGgsIDQpO1xuICAgIGxheW91dC5hY3R1YWxXaWR0aCA9IGxpdmVBY3R1YWxXaWR0aDtcbiAgICBsYXlvdXQud2lkdGggPSBsaXZlV2lkdGg7XG4gICAgbGF5b3V0LmlzU21hbGwgPSBsaXZlQWN0dWFsV2lkdGggPCA2NDtcbiAgICBsYXlvdXQuaXNIdWdlID0gbGl2ZUFjdHVhbFdpZHRoID49IDUwMDtcbiAgICBpZiAoIWxheW91dC5pc1NtYWxsKSB7XG4gICAgICBsYXlvdXQuaGVpZ2h0ID0gUk9XX0hFSUdIVDtcbiAgICAgIGxheW91dC50b3AgPSBNQVJLRVJfSEVJR0hUICsgKFJPV19IRUlHSFQgKyBST1dfUEFERElORykgKiBzZWdtZW50Tm9kZS5yb3c7XG4gICAgfVxuICB9XG5cbiAgLy8gU21vb3RobHkgZ3JvdyBhY3RpdmUgc3BhbiB3aWR0aCBhdCA2MGZwcyB1c2luZyB3YWxsIGNsb2NrIHRpbWVcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzTGl2ZSB8fCAhcmVmLmN1cnJlbnQpIHJldHVybjtcblxuICAgIGxldCByYWZJZCA9IDA7XG4gICAgY29uc3QgdGljayA9ICgpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0ICRlbCA9IHJlZi5jdXJyZW50O1xuICAgICAgaWYgKCEkZWwpIHJldHVybjtcbiAgICAgIGNvbnN0IGVsYXBzZWQgPSBEYXRlLm5vdygpIC0gY2Fub25pY2FsU3RhcnRUaW1lO1xuICAgICAgY29uc3QgdyA9IE1hdGgubWF4KGVsYXBzZWQgKiBzY2FsZSwgMik7XG4gICAgICAkZWwuc3R5bGUud2lkdGggPSBgJHt3fXB4YDtcbiAgICAgICRlbC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zcGFuLXdpZHRoJywgYCR7d31weGApO1xuICAgICAgcmFmSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7XG4gICAgfTtcbiAgICByYWZJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTtcbiAgICByZXR1cm4gKCkgPT4gY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmSWQpO1xuICB9LCBbaXNMaXZlLCBjYW5vbmljYWxTdGFydFRpbWUsIHNjYWxlXSk7XG5cbiAgY29uc3QgcmVuZGVyTm9kZSA9IHNlZ21lbnROb2RlO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxidXR0b25cbiAgICAgICAgYXJpYS1sYWJlbD17YCR7c3Bhbi5uYW1lfSAtICR7ZHVyYXRpb259YH1cbiAgICAgICAgY2xhc3NOYW1lPXtjbHN4KFxuICAgICAgICAgIHN0eWxlcy5zcGFuTm9kZSxcbiAgICAgICAgICBsYXlvdXQuaXNIdWdlICYmIHN0eWxlcy5odWdlLFxuICAgICAgICAgIGxheW91dC5pc1NtYWxsICYmIHN0eWxlcy5zbWFsbCxcbiAgICAgICAgICBsYXlvdXQuaXNFeHBhbmRlZCAmJiBzdHlsZXMueEhvdmVyLFxuICAgICAgICAgIG5vZGUuaXNIaWdobGlnaHRlZFxuICAgICAgICAgICAgPyBzdHlsZXMuY29sb3JIaWdobGlnaHRcbiAgICAgICAgICAgIDogZ2V0U3BhbkNvbG9yQ2xhc3NOYW1lKG5vZGUpLFxuICAgICAgICAgIG5vZGUuaXNIaWdobGlnaHRlZCA9PT0gZmFsc2UgJiYgc3R5bGVzLnVubGl0LFxuICAgICAgICAgIGN1c3RvbUNsYXNzTmFtZSxcbiAgICAgICAgICBoYXNTZWdtZW50cyAmJiBzdHlsZXMuaGFzU2VnbWVudHNcbiAgICAgICAgKX1cbiAgICAgICAgZGF0YS1zcGFuLWlkPXtzcGFuLnNwYW5JZH1cbiAgICAgICAgZGF0YS1zdGFydC10aW1lPXtzZWdtZW50Tm9kZS5zdGFydFRpbWUgLSByb290LnN0YXJ0VGltZX1cbiAgICAgICAgZGF0YS1yaWdodC1zaWRlPXtsYXlvdXQuaXNOZWFyUmlnaHRTaWRlfVxuICAgICAgICBkYXRhLXNlbGVjdGVkPXtub2RlLmlzU2VsZWN0ZWQgPyAnJyA6IHVuZGVmaW5lZH1cbiAgICAgICAgcmVmPXtyZWZ9XG4gICAgICAgIHN0eWxlPXtnZXRTcGFuU3R5bGUobGF5b3V0LCBzZWdtZW50Tm9kZSwgcm9vdCwgc2NhbGUpfVxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgID5cbiAgICAgICAgPFNwYW5Db250ZW50XG4gICAgICAgICAgZHVyYXRpb25Ncz17ZHVyYXRpb25Nc31cbiAgICAgICAgICByZXNvdXJjZVR5cGU9e3Jlc291cmNlVHlwZX1cbiAgICAgICAgICBub2RlPXtyZW5kZXJOb2RlfVxuICAgICAgICAgIGxheW91dD17bGF5b3V0fVxuICAgICAgICAvPlxuICAgICAgPC9idXR0b24+XG4gICAgICB7c2VnbWVudE5vZGUuZXZlbnRzICYmICFsYXlvdXQuaXNTbWFsbFxuICAgICAgICA/IHNlZ21lbnROb2RlLmV2ZW50cy5tYXAoKHgpID0+IChcbiAgICAgICAgICAgIDxTcGFuRXZlbnRDb21wb25lbnRcbiAgICAgICAgICAgICAgY3VzdG9tU3BhbkV2ZW50Q2xhc3NOYW1lRnVuYz17Y3VzdG9tU3BhbkV2ZW50Q2xhc3NOYW1lRnVuY31cbiAgICAgICAgICAgICAgZXZlbnQ9e3h9XG4gICAgICAgICAgICAgIGtleT17eC5rZXl9XG4gICAgICAgICAgICAgIG5vZGU9e3NlZ21lbnROb2RlfVxuICAgICAgICAgICAgICByb290PXtyb290fVxuICAgICAgICAgICAgICBzY2FsZT17c2NhbGV9XG4gICAgICAgICAgICAgIGFzQm91bmRhcnk9e2lzV29ya2Zsb3dTcGFufVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApKVxuICAgICAgICA6IG51bGx9XG4gICAgPC8+XG4gICk7XG59KTtcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBTcGFuRXZlbnRDb21wb25lbnRcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKiogSHVtYW4tcmVhZGFibGUgbGFiZWxzIGZvciB3b3JrZmxvdyBldmVudCB0eXBlcyAqL1xuY29uc3QgQk9VTkRBUllfTEFCRUxTOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICBzdGVwX3N0YXJ0ZWQ6ICdTdGFydGVkJyxcbiAgc3RlcF9yZXRyeWluZzogJ1JldHJ5aW5nJyxcbiAgc3RlcF9mYWlsZWQ6ICdGYWlsZWQnLFxuICBob29rX2NyZWF0ZWQ6ICdDcmVhdGVkJyxcbiAgaG9va19yZWNlaXZlZDogJ1JlY2VpdmVkJyxcbiAgaG9va19kaXNwb3NlZDogJ1Jlc29sdmVkJyxcbiAgd2FpdF9jcmVhdGVkOiAnU2xlZXAgc3RhcnRlZCcsXG4gIHdhaXRfY29tcGxldGVkOiAnU2xlZXAgY29tcGxldGVkJyxcbiAgcnVuX3N0YXJ0ZWQ6ICdTdGFydGVkJyxcbiAgcnVuX2NvbXBsZXRlZDogJ0NvbXBsZXRlZCcsXG4gIHJ1bl9mYWlsZWQ6ICdSdW4gZmFpbGVkJyxcbiAgc3RlcF9jb21wbGV0ZWQ6ICdDb21wbGV0ZWQnLFxuICBhdHRyX3NldDogJ0F0dHJpYnV0ZXMgc2V0Jyxcbn07XG5cbmV4cG9ydCBjb25zdCBTcGFuRXZlbnRDb21wb25lbnQgPSBtZW1vKGZ1bmN0aW9uIFNwYW5FdmVudENvbXBvbmVudCh7XG4gIGV2ZW50LFxuICBub2RlLFxuICByb290LFxuICBzY2FsZSxcbiAgY3VzdG9tU3BhbkV2ZW50Q2xhc3NOYW1lRnVuYyxcbiAgYXNCb3VuZGFyeSA9IGZhbHNlLFxufToge1xuICBldmVudDogVmlzaWJsZVNwYW5FdmVudDtcbiAgbm9kZTogVmlzaWJsZVNwYW47XG4gIHJvb3Q6IFJvb3ROb2RlO1xuICBzY2FsZTogbnVtYmVyO1xuICBjdXN0b21TcGFuRXZlbnRDbGFzc05hbWVGdW5jPzogKGV2ZW50OiBWaXNpYmxlU3BhbkV2ZW50KSA9PiBzdHJpbmc7XG4gIGFzQm91bmRhcnk/OiBib29sZWFuO1xufSk6IFJlYWN0Tm9kZSB7XG4gIGNvbnN0IHJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBldmVudC5yZWYgPSByZWY7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGV2ZW50LnJlZiA9IHVuZGVmaW5lZDtcbiAgICB9O1xuICB9LCBbZXZlbnRdKTtcblxuICBjb25zdCB7XG4gICAgZXZlbnQ6IHsgbmFtZSB9LFxuICB9ID0gZXZlbnQ7XG4gIGNvbnN0IHRpbWVzdGFtcCA9IGZvcm1hdER1cmF0aW9uKGV2ZW50LnRpbWVzdGFtcCAtIHJvb3Quc3RhcnRUaW1lKTtcbiAgY29uc3QgZGlzcGxheUxhYmVsID0gYXNCb3VuZGFyeSA/IChCT1VOREFSWV9MQUJFTFNbbmFtZV0gPz8gbmFtZSkgOiBuYW1lO1xuXG4gIC8vIEZvciBib3VuZGFyeSBldmVudHMsIGNvbXB1dGUgdGhlIGR1cmF0aW9uIG9mIHRoZSBwaGFzZS5cbiAgLy8gXCJGb3J3YXJkXCIgZXZlbnRzIChzdGFydGVkLCByZXRyeWluZykgbWVhc3VyZSB1bnRpbCB0aGUgbmV4dCBldmVudC5cbiAgLy8gXCJUZXJtaW5hbFwiIGV2ZW50cyAoY29tcGxldGVkKSBtZWFzdXJlIGZyb20gdGhlIHByZXZpb3VzIHN0YXJ0ZWQgZXZlbnQuXG4gIGNvbnN0IGlzRm9yd2FyZEV2ZW50ID1cbiAgICBhc0JvdW5kYXJ5ICYmXG4gICAgKG5hbWUgPT09ICdzdGVwX3N0YXJ0ZWQnIHx8XG4gICAgICBuYW1lID09PSAncnVuX3N0YXJ0ZWQnIHx8XG4gICAgICBuYW1lID09PSAnc3RlcF9yZXRyeWluZycpO1xuICBjb25zdCBpc1Rlcm1pbmFsRXZlbnQgPVxuICAgIGFzQm91bmRhcnkgJiYgKG5hbWUgPT09ICdzdGVwX2NvbXBsZXRlZCcgfHwgbmFtZSA9PT0gJ3J1bl9jb21wbGV0ZWQnKTtcblxuICBsZXQgcGhhc2VEdXJhdGlvbjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIGxldCBwaGFzZUxhYmVsOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgaWYgKChpc0ZvcndhcmRFdmVudCB8fCBpc1Rlcm1pbmFsRXZlbnQpICYmIG5vZGUuZXZlbnRzKSB7XG4gICAgY29uc3Qgc29ydGVkTm9kZUV2ZW50cyA9IFsuLi5ub2RlLmV2ZW50c10uc29ydChcbiAgICAgIChhLCBiKSA9PiBhLnRpbWVzdGFtcCAtIGIudGltZXN0YW1wXG4gICAgKTtcbiAgICBjb25zdCBjdXJyZW50SWR4ID0gc29ydGVkTm9kZUV2ZW50cy5maW5kSW5kZXgoKGUpID0+IGUua2V5ID09PSBldmVudC5rZXkpO1xuXG4gICAgaWYgKGlzVGVybWluYWxFdmVudCkge1xuICAgICAgLy8gTG9vayBiYWNrd2FyZCB0byBmaW5kIHRoZSBsYXN0IHN0ZXBfc3RhcnRlZFxuICAgICAgbGV0IHByZXZTdGFydFRpbWU6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgICAgZm9yIChsZXQgaSA9IGN1cnJlbnRJZHggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBpZiAoc29ydGVkTm9kZUV2ZW50c1tpXS5ldmVudC5uYW1lID09PSAnc3RlcF9zdGFydGVkJykge1xuICAgICAgICAgIHByZXZTdGFydFRpbWUgPSBzb3J0ZWROb2RlRXZlbnRzW2ldLnRpbWVzdGFtcDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHByZXZTdGFydFRpbWUgIT09IG51bGwpIHtcbiAgICAgICAgcGhhc2VEdXJhdGlvbiA9IGZvcm1hdER1cmF0aW9uKGV2ZW50LnRpbWVzdGFtcCAtIHByZXZTdGFydFRpbWUpO1xuICAgICAgICBwaGFzZUxhYmVsID0gJ0V4ZWN1dGVkJztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTG9vayBmb3J3YXJkIHRvIHRoZSBuZXh0IGV2ZW50XG4gICAgICBjb25zdCBuZXh0RXZlbnQgPSBzb3J0ZWROb2RlRXZlbnRzW2N1cnJlbnRJZHggKyAxXTtcbiAgICAgIGNvbnN0IGVuZFRpbWUgPSBuZXh0RXZlbnQgPyBuZXh0RXZlbnQudGltZXN0YW1wIDogbm9kZS5lbmRUaW1lO1xuICAgICAgcGhhc2VEdXJhdGlvbiA9IGZvcm1hdER1cmF0aW9uKGVuZFRpbWUgLSBldmVudC50aW1lc3RhbXApO1xuICAgICAgcGhhc2VMYWJlbCA9IG5hbWUgPT09ICdzdGVwX3JldHJ5aW5nJyA/ICdXYWl0ZWQnIDogJ0V4ZWN1dGVkJztcbiAgICB9XG4gIH1cblxuICBjb25zdCBsZWZ0ID0gKGV2ZW50LnRpbWVzdGFtcCAtIHJvb3Quc3RhcnRUaW1lKSAqIHNjYWxlO1xuICBjb25zdCB0b3AgPSBNQVJLRVJfSEVJR0hUICsgKFJPV19IRUlHSFQgKyBST1dfUEFERElORykgKiBub2RlLnJvdztcbiAgY29uc3QgaXNMZWZ0QWxpZ25lZCA9XG4gICAgbm9kZS5kdXJhdGlvbiA8PSAwIHx8XG4gICAgKGV2ZW50LnRpbWVzdGFtcCAtIG5vZGUuc3RhcnRUaW1lKSAvIG5vZGUuZHVyYXRpb24gPCAwLjU7XG5cbiAgLy8gR2V0IGN1c3RvbSBjbGFzcyBuYW1lIGZyb20gY2FsbGJhY2sgaWYgcHJvdmlkZWRcbiAgY29uc3QgY3VzdG9tQ2xhc3NOYW1lID0gY3VzdG9tU3BhbkV2ZW50Q2xhc3NOYW1lRnVuY1xuICAgID8gY3VzdG9tU3BhbkV2ZW50Q2xhc3NOYW1lRnVuYyhldmVudClcbiAgICA6ICcnO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgdGl0bGU9e1xuICAgICAgICBwaGFzZUR1cmF0aW9uXG4gICAgICAgICAgPyBgJHtkaXNwbGF5TGFiZWx9ICR7dGltZXN0YW1wfVxcbiR7cGhhc2VMYWJlbH0gJHtwaGFzZUR1cmF0aW9ufWBcbiAgICAgICAgICA6IGAke2Rpc3BsYXlMYWJlbH0gJHt0aW1lc3RhbXB9YFxuICAgICAgfVxuICAgICAgY2xhc3NOYW1lPXtjbHN4KFxuICAgICAgICBzdHlsZXMuc3Bhbk5vZGVFdmVudCxcbiAgICAgICAgY3VzdG9tQ2xhc3NOYW1lLFxuICAgICAgICBhc0JvdW5kYXJ5ICYmIHN0eWxlcy5ib3VuZGFyeU1hcmtlcixcbiAgICAgICAgbm9kZS5pc0hpZ2hsaWdodGVkXG4gICAgICAgICAgPyBzdHlsZXMuY29sb3JIaWdobGlnaHRcbiAgICAgICAgICA6IGdldFNwYW5Db2xvckNsYXNzTmFtZShub2RlKSxcbiAgICAgICAgbm9kZS5pc0hpZ2hsaWdodGVkID09PSBmYWxzZSAmJiBzdHlsZXMudW5saXRcbiAgICAgICl9XG4gICAgICBkYXRhLWhvdmVyZWQ9e2V2ZW50LmlzSG92ZXJlZH1cbiAgICAgIHJlZj17cmVmfVxuICAgICAgc3R5bGU9e1xuICAgICAgICB7XG4gICAgICAgICAgbGVmdCxcbiAgICAgICAgICB0b3AsXG4gICAgICAgIH0gYXMgQ1NTUHJvcGVydGllc1xuICAgICAgfVxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtjbHN4KFxuICAgICAgICAgIHN0eWxlcy5ob3ZlckluZm8sXG4gICAgICAgICAgaXNMZWZ0QWxpZ25lZCA/IHN0eWxlcy5hbGlnblN0YXJ0IDogc3R5bGVzLmFsaWduRW5kXG4gICAgICAgICl9XG4gICAgICA+XG4gICAgICAgIHthc0JvdW5kYXJ5ID8gKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5ldmVudE5hbWV9PntkaXNwbGF5TGFiZWx9PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMuZXZlbnRUaW1lc3RhbXB9Pnt0aW1lc3RhbXB9PC9zcGFuPlxuICAgICAgICAgICAge3BoYXNlRHVyYXRpb24gPyAoXG4gICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMuZXZlbnROYW1lfT57cGhhc2VMYWJlbH08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMuZXZlbnRUaW1lc3RhbXB9PntwaGFzZUR1cmF0aW9ufTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICA8Lz5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMuZXZlbnROYW1lfT57bmFtZX08L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5ldmVudFRpbWVzdGFtcH0+e3RpbWVzdGFtcH08L3NwYW4+XG4gICAgICAgICAgPC8+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICAgIHthc0JvdW5kYXJ5ID8gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJvdW5kYXJ5TGluZX0gLz5cbiAgICAgICkgOiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuZXZlbnREaWFtb25kfSAvPlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn0pO1xuIl19
@@ -1,9 +0,0 @@
1
- import type { ChangeEventHandler, ReactNode } from 'react';
2
- export declare function SearchInput({ height, width, value, placeholder, onChange, }: {
3
- height: number | string;
4
- width?: number | string;
5
- value: string;
6
- placeholder?: string;
7
- onChange: ChangeEventHandler<HTMLInputElement>;
8
- }): ReactNode;
9
- //# sourceMappingURL=search-input.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"search-input.d.ts","sourceRoot":"","sources":["../../../../src/components/trace-viewer/components/search-input.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAG3D,wBAAgB,WAAW,CAAC,EAC1B,MAAM,EACN,KAAK,EACL,KAAK,EACL,WAAW,EACX,QAAQ,GACT,EAAE;IACD,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;CAChD,GAAG,SAAS,CAeZ"}
@@ -1,9 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import styles from '../trace-viewer.module.css';
3
- export function SearchInput({ height, width, value, placeholder, onChange, }) {
4
- return (_jsxs("label", { className: styles.searchInputLabel, children: [_jsx("div", { className: styles.searchInputPrefix, children: _jsx(MagnifyingGlassIcon, {}) }), _jsx("input", { type: "search", value: value, placeholder: placeholder, onChange: onChange, style: { height, width } })] }));
5
- }
6
- function MagnifyingGlassIcon() {
7
- return (_jsxs("svg", { width: 16, height: 16, viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true", focusable: "false", children: [_jsx("circle", { cx: "7", cy: "7", r: "4.5", stroke: "currentColor", strokeWidth: "1.5" }), _jsx("path", { d: "M11.5 11.5L14 14", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round" })] }));
8
- }
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWlucHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdHJhY2Utdmlld2VyL2NvbXBvbmVudHMvc2VhcmNoLWlucHV0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBTyxNQUFNLE1BQU0sNEJBQTRCLENBQUM7QUFFaEQsTUFBTSxVQUFVLFdBQVcsQ0FBQyxFQUMxQixNQUFNLEVBQ04sS0FBSyxFQUNMLEtBQUssRUFDTCxXQUFXLEVBQ1gsUUFBUSxHQU9UO0lBQ0MsT0FBTyxDQUNMLGlCQUFPLFNBQVMsRUFBRSxNQUFNLENBQUMsZ0JBQWdCLGFBQ3ZDLGNBQUssU0FBUyxFQUFFLE1BQU0sQ0FBQyxpQkFBaUIsWUFDdEMsS0FBQyxtQkFBbUIsS0FBRyxHQUNuQixFQUNOLGdCQUNFLElBQUksRUFBQyxRQUFRLEVBQ2IsS0FBSyxFQUFFLEtBQUssRUFDWixXQUFXLEVBQUUsV0FBVyxFQUN4QixRQUFRLEVBQUUsUUFBUSxFQUNsQixLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQ3hCLElBQ0ksQ0FDVCxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsbUJBQW1CO0lBQzFCLE9BQU8sQ0FDTCxlQUNFLEtBQUssRUFBRSxFQUFFLEVBQ1QsTUFBTSxFQUFFLEVBQUUsRUFDVixPQUFPLEVBQUMsV0FBVyxFQUNuQixJQUFJLEVBQUMsTUFBTSxpQkFDQyxNQUFNLEVBQ2xCLFNBQVMsRUFBQyxPQUFPLGFBRWpCLGlCQUFRLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxDQUFDLEVBQUMsS0FBSyxFQUFDLE1BQU0sRUFBQyxjQUFjLEVBQUMsV0FBVyxFQUFDLEtBQUssR0FBRyxFQUN4RSxlQUNFLENBQUMsRUFBQyxrQkFBa0IsRUFDcEIsTUFBTSxFQUFDLGNBQWMsRUFDckIsV0FBVyxFQUFDLEtBQUssRUFDakIsYUFBYSxFQUFDLE9BQU8sR0FDckIsSUFDRSxDQUNQLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDaGFuZ2VFdmVudEhhbmRsZXIsIFJlYWN0Tm9kZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi4vdHJhY2Utdmlld2VyLm1vZHVsZS5jc3MnO1xuXG5leHBvcnQgZnVuY3Rpb24gU2VhcmNoSW5wdXQoe1xuICBoZWlnaHQsXG4gIHdpZHRoLFxuICB2YWx1ZSxcbiAgcGxhY2Vob2xkZXIsXG4gIG9uQ2hhbmdlLFxufToge1xuICBoZWlnaHQ6IG51bWJlciB8IHN0cmluZztcbiAgd2lkdGg/OiBudW1iZXIgfCBzdHJpbmc7XG4gIHZhbHVlOiBzdHJpbmc7XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICBvbkNoYW5nZTogQ2hhbmdlRXZlbnRIYW5kbGVyPEhUTUxJbnB1dEVsZW1lbnQ+O1xufSk6IFJlYWN0Tm9kZSB7XG4gIHJldHVybiAoXG4gICAgPGxhYmVsIGNsYXNzTmFtZT17c3R5bGVzLnNlYXJjaElucHV0TGFiZWx9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5zZWFyY2hJbnB1dFByZWZpeH0+XG4gICAgICAgIDxNYWduaWZ5aW5nR2xhc3NJY29uIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxpbnB1dFxuICAgICAgICB0eXBlPVwic2VhcmNoXCJcbiAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICAgIG9uQ2hhbmdlPXtvbkNoYW5nZX1cbiAgICAgICAgc3R5bGU9e3sgaGVpZ2h0LCB3aWR0aCB9fVxuICAgICAgLz5cbiAgICA8L2xhYmVsPlxuICApO1xufVxuXG5mdW5jdGlvbiBNYWduaWZ5aW5nR2xhc3NJY29uKCk6IFJlYWN0Tm9kZSB7XG4gIHJldHVybiAoXG4gICAgPHN2Z1xuICAgICAgd2lkdGg9ezE2fVxuICAgICAgaGVpZ2h0PXsxNn1cbiAgICAgIHZpZXdCb3g9XCIwIDAgMTYgMTZcIlxuICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgIGZvY3VzYWJsZT1cImZhbHNlXCJcbiAgICA+XG4gICAgICA8Y2lyY2xlIGN4PVwiN1wiIGN5PVwiN1wiIHI9XCI0LjVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2VXaWR0aD1cIjEuNVwiIC8+XG4gICAgICA8cGF0aFxuICAgICAgICBkPVwiTTExLjUgMTEuNUwxNCAxNFwiXG4gICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXG4gICAgICAgIHN0cm9rZVdpZHRoPVwiMS41XCJcbiAgICAgICAgc3Ryb2tlTGluZWNhcD1cInJvdW5kXCJcbiAgICAgIC8+XG4gICAgPC9zdmc+XG4gICk7XG59XG4iXX0=
@@ -1,3 +0,0 @@
1
- import { type ReactNode } from 'react';
2
- export declare function SearchBar(): ReactNode;
3
- //# sourceMappingURL=search.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../../src/components/trace-viewer/components/search.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAuB,MAAM,OAAO,CAAC;AAM5D,wBAAgB,SAAS,IAAI,SAAS,CAMrC"}
@@ -1,25 +0,0 @@
1
- 'use client';
2
- import { jsx as _jsx } from "react/jsx-runtime";
3
- import { useEffect, useState } from 'react';
4
- import { useTraceViewer } from '../context';
5
- import styles from '../trace-viewer.module.css';
6
- import { SEARCH_HEIGHT } from '../util/constants';
7
- import { SearchInput } from './search-input';
8
- export function SearchBar() {
9
- return (_jsx("nav", { className: styles.searchBar, children: _jsx(SearchInputWrapper, {}) }));
10
- }
11
- function SearchInputWrapper() {
12
- const { dispatch } = useTraceViewer();
13
- const [value, setValue] = useState('');
14
- useEffect(() => {
15
- const timeout = setTimeout(() => dispatch({
16
- type: 'setFilter',
17
- filter: value,
18
- }), 100);
19
- return () => {
20
- clearTimeout(timeout);
21
- };
22
- }, [dispatch, value]);
23
- return (_jsx("div", { className: styles.searchInput, children: _jsx(SearchInput, { height: SEARCH_HEIGHT, onChange: (e) => setValue(e.target.value), placeholder: "Search spans\u2026", value: value, width: "100%" }) }));
24
- }
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdHJhY2Utdmlld2VyL2NvbXBvbmVudHMvc2VhcmNoLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUM7O0FBRWIsT0FBTyxFQUFrQixTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQzVELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDNUMsT0FBTyxNQUFNLE1BQU0sNEJBQTRCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3QyxNQUFNLFVBQVUsU0FBUztJQUN2QixPQUFPLENBQ0wsY0FBSyxTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVMsWUFDOUIsS0FBQyxrQkFBa0IsS0FBRyxHQUNsQixDQUNQLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxrQkFBa0I7SUFDekIsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLGNBQWMsRUFBRSxDQUFDO0lBQ3RDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRXZDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDYixNQUFNLE9BQU8sR0FBRyxVQUFVLENBQ3hCLEdBQUcsRUFBRSxDQUNILFFBQVEsQ0FBQztZQUNQLElBQUksRUFBRSxXQUFXO1lBQ2pCLE1BQU0sRUFBRSxLQUFLO1NBQ2QsQ0FBQyxFQUNKLEdBQUcsQ0FDSixDQUFDO1FBRUYsT0FBTyxHQUFHLEVBQUU7WUFDVixZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEIsQ0FBQyxDQUFDO0lBQ0osQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFFdEIsT0FBTyxDQUNMLGNBQUssU0FBUyxFQUFFLE1BQU0sQ0FBQyxXQUFXLFlBQ2hDLEtBQUMsV0FBVyxJQUNWLE1BQU0sRUFBRSxhQUFhLEVBQ3JCLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQ3pDLFdBQVcsRUFBQyxvQkFBZSxFQUMzQixLQUFLLEVBQUUsS0FBSyxFQUNaLEtBQUssRUFBQyxNQUFNLEdBQ1osR0FDRSxDQUNQLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgeyB0eXBlIFJlYWN0Tm9kZSwgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVRyYWNlVmlld2VyIH0gZnJvbSAnLi4vY29udGV4dCc7XG5pbXBvcnQgc3R5bGVzIGZyb20gJy4uL3RyYWNlLXZpZXdlci5tb2R1bGUuY3NzJztcbmltcG9ydCB7IFNFQVJDSF9IRUlHSFQgfSBmcm9tICcuLi91dGlsL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBTZWFyY2hJbnB1dCB9IGZyb20gJy4vc2VhcmNoLWlucHV0JztcblxuZXhwb3J0IGZ1bmN0aW9uIFNlYXJjaEJhcigpOiBSZWFjdE5vZGUge1xuICByZXR1cm4gKFxuICAgIDxuYXYgY2xhc3NOYW1lPXtzdHlsZXMuc2VhcmNoQmFyfT5cbiAgICAgIDxTZWFyY2hJbnB1dFdyYXBwZXIgLz5cbiAgICA8L25hdj5cbiAgKTtcbn1cblxuZnVuY3Rpb24gU2VhcmNoSW5wdXRXcmFwcGVyKCk6IFJlYWN0Tm9kZSB7XG4gIGNvbnN0IHsgZGlzcGF0Y2ggfSA9IHVzZVRyYWNlVmlld2VyKCk7XG4gIGNvbnN0IFt2YWx1ZSwgc2V0VmFsdWVdID0gdXNlU3RhdGUoJycpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoXG4gICAgICAoKSA9PlxuICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogJ3NldEZpbHRlcicsXG4gICAgICAgICAgZmlsdGVyOiB2YWx1ZSxcbiAgICAgICAgfSksXG4gICAgICAxMDBcbiAgICApO1xuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICB9O1xuICB9LCBbZGlzcGF0Y2gsIHZhbHVlXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnNlYXJjaElucHV0fT5cbiAgICAgIDxTZWFyY2hJbnB1dFxuICAgICAgICBoZWlnaHQ9e1NFQVJDSF9IRUlHSFR9XG4gICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gc2V0VmFsdWUoZS50YXJnZXQudmFsdWUpfVxuICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBzcGFuc+KAplwiXG4gICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgIC8+XG4gICAgPC9kaXY+XG4gICk7XG59XG4iXX0=
@@ -1,19 +0,0 @@
1
- import type { ReactNode } from 'react';
2
- import type { SpanNode } from '../types';
3
- import type { ResourceType, SpanLayout } from './span-strategies';
4
- export interface SpanContentProps {
5
- node: SpanNode;
6
- layout: SpanLayout;
7
- durationMs?: number;
8
- }
9
- export declare function RunContent(props: SpanContentProps): ReactNode;
10
- export declare function StepContent(props: SpanContentProps): ReactNode;
11
- export declare function HookContent(props: SpanContentProps): ReactNode;
12
- export declare function SleepContent(props: SpanContentProps): ReactNode;
13
- /**
14
- * Returns the inner content for a span based on its resource type.
15
- */
16
- export declare function SpanContent({ resourceType, ...props }: SpanContentProps & {
17
- resourceType: ResourceType;
18
- }): ReactNode;
19
- //# sourceMappingURL=span-content.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"span-content.d.ts","sourceRoot":"","sources":["../../../../src/components/trace-viewer/components/span-content.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAiB,SAAS,EAAE,MAAM,OAAO,CAAC;AAEtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAQzC,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAsJlE,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,UAAU,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAyCD,wBAAgB,UAAU,CAAC,KAAK,EAAE,gBAAgB,GAAG,SAAS,CAE7D;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,SAAS,CAE9D;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,SAAS,CAE9D;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,gBAAgB,GAAG,SAAS,CAE/D;AAMD;;GAEG;AACH,wBAAgB,WAAW,CAAC,EAC1B,YAAY,EACZ,GAAG,KAAK,EACT,EAAE,gBAAgB,GAAG;IAAE,YAAY,EAAE,YAAY,CAAA;CAAE,GAAG,SAAS,CAa/D"}