@workflow/web-shared 5.0.0-beta.1 → 5.0.0-beta.11

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 (298) hide show
  1. package/README.md +1 -1
  2. package/dist/components/error-boundary.js +1 -1
  3. package/dist/components/event-list-view.d.ts +18 -1
  4. package/dist/components/event-list-view.d.ts.map +1 -1
  5. package/dist/components/event-list-view.js +219 -125
  6. package/dist/components/hook-actions.js +1 -1
  7. package/dist/components/index.d.ts +5 -1
  8. package/dist/components/index.d.ts.map +1 -1
  9. package/dist/components/index.js +6 -2
  10. package/dist/components/new-trace-viewer/components/copy-button.d.ts +9 -0
  11. package/dist/components/new-trace-viewer/components/copy-button.d.ts.map +1 -0
  12. package/dist/components/new-trace-viewer/components/copy-button.js +27 -0
  13. package/dist/components/new-trace-viewer/components/event-list.d.ts +10 -0
  14. package/dist/components/new-trace-viewer/components/event-list.d.ts.map +1 -0
  15. package/dist/components/new-trace-viewer/components/event-list.js +44 -0
  16. package/dist/components/new-trace-viewer/components/middle-truncate/copy-selection.d.ts +18 -0
  17. package/dist/components/new-trace-viewer/components/middle-truncate/copy-selection.d.ts.map +1 -0
  18. package/dist/components/new-trace-viewer/components/middle-truncate/copy-selection.js +54 -0
  19. package/dist/components/new-trace-viewer/components/middle-truncate/middle-truncate.d.ts +20 -0
  20. package/dist/components/new-trace-viewer/components/middle-truncate/middle-truncate.d.ts.map +1 -0
  21. package/dist/components/new-trace-viewer/components/middle-truncate/middle-truncate.js +81 -0
  22. package/dist/components/new-trace-viewer/components/middle-truncate/truncate.d.ts +25 -0
  23. package/dist/components/new-trace-viewer/components/middle-truncate/truncate.d.ts.map +1 -0
  24. package/dist/components/new-trace-viewer/components/middle-truncate/truncate.js +101 -0
  25. package/dist/components/new-trace-viewer/components/middle-truncate/use-middle-truncate.d.ts +20 -0
  26. package/dist/components/new-trace-viewer/components/middle-truncate/use-middle-truncate.d.ts.map +1 -0
  27. package/dist/components/new-trace-viewer/components/middle-truncate/use-middle-truncate.js +114 -0
  28. package/dist/components/new-trace-viewer/components/split-pane.d.ts +15 -0
  29. package/dist/components/new-trace-viewer/components/split-pane.d.ts.map +1 -0
  30. package/dist/components/new-trace-viewer/components/split-pane.js +105 -0
  31. package/dist/components/new-trace-viewer/components/timeline.d.ts +34 -0
  32. package/dist/components/new-trace-viewer/components/timeline.d.ts.map +1 -0
  33. package/dist/components/new-trace-viewer/components/timeline.js +221 -0
  34. package/dist/components/new-trace-viewer/components/trace-viewer-skeleton.d.ts +2 -0
  35. package/dist/components/new-trace-viewer/components/trace-viewer-skeleton.d.ts.map +1 -0
  36. package/dist/components/new-trace-viewer/components/trace-viewer-skeleton.js +19 -0
  37. package/dist/components/new-trace-viewer/components/use-row-window.d.ts +20 -0
  38. package/dist/components/new-trace-viewer/components/use-row-window.d.ts.map +1 -0
  39. package/dist/components/new-trace-viewer/components/use-row-window.js +69 -0
  40. package/dist/components/new-trace-viewer/context.d.ts +15 -0
  41. package/dist/components/new-trace-viewer/context.d.ts.map +1 -0
  42. package/dist/components/new-trace-viewer/context.js +47 -0
  43. package/dist/components/new-trace-viewer/detail-panel.d.ts +10 -0
  44. package/dist/components/new-trace-viewer/detail-panel.d.ts.map +1 -0
  45. package/dist/components/new-trace-viewer/detail-panel.js +13 -0
  46. package/dist/components/new-trace-viewer/icons.d.ts +6 -0
  47. package/dist/components/new-trace-viewer/icons.d.ts.map +1 -0
  48. package/dist/components/new-trace-viewer/icons.js +15 -0
  49. package/dist/components/new-trace-viewer/search.d.ts +19 -0
  50. package/dist/components/new-trace-viewer/search.d.ts.map +1 -0
  51. package/dist/components/new-trace-viewer/search.js +134 -0
  52. package/dist/components/new-trace-viewer/trace-viewer.d.ts +11 -0
  53. package/dist/components/new-trace-viewer/trace-viewer.d.ts.map +1 -0
  54. package/dist/components/new-trace-viewer/trace-viewer.js +400 -0
  55. package/dist/components/new-trace-viewer/types.d.ts +1 -0
  56. package/dist/components/new-trace-viewer/types.d.ts.map +1 -0
  57. package/dist/components/new-trace-viewer/types.js +2 -0
  58. package/dist/components/new-trace-viewer/util/constants.d.ts +1 -0
  59. package/dist/components/new-trace-viewer/util/constants.d.ts.map +1 -0
  60. package/dist/components/new-trace-viewer/util/constants.js +2 -0
  61. package/dist/components/new-trace-viewer/utils.d.ts +46 -0
  62. package/dist/components/new-trace-viewer/utils.d.ts.map +1 -0
  63. package/dist/components/new-trace-viewer/utils.js +330 -0
  64. package/dist/components/run-trace-view.d.ts +2 -1
  65. package/dist/components/run-trace-view.d.ts.map +1 -1
  66. package/dist/components/run-trace-view.js +3 -3
  67. package/dist/components/sidebar/attribute-panel.d.ts +7 -1
  68. package/dist/components/sidebar/attribute-panel.d.ts.map +1 -1
  69. package/dist/components/sidebar/attribute-panel.js +131 -70
  70. package/dist/components/sidebar/conversation-view.js +1 -1
  71. package/dist/components/sidebar/copyable-data-block.d.ts +1 -0
  72. package/dist/components/sidebar/copyable-data-block.d.ts.map +1 -1
  73. package/dist/components/sidebar/copyable-data-block.js +16 -15
  74. package/dist/components/sidebar/detail-card.d.ts +5 -6
  75. package/dist/components/sidebar/detail-card.d.ts.map +1 -1
  76. package/dist/components/sidebar/detail-card.js +32 -16
  77. package/dist/components/sidebar/entity-detail-panel.d.ts +3 -1
  78. package/dist/components/sidebar/entity-detail-panel.d.ts.map +1 -1
  79. package/dist/components/sidebar/entity-detail-panel.js +20 -37
  80. package/dist/components/sidebar/events-list.d.ts.map +1 -1
  81. package/dist/components/sidebar/events-list.js +21 -15
  82. package/dist/components/sidebar/resolve-hook-modal.js +1 -1
  83. package/dist/components/sidebar/sidebar-data-context.d.ts +29 -0
  84. package/dist/components/sidebar/sidebar-data-context.d.ts.map +1 -0
  85. package/dist/components/sidebar/sidebar-data-context.js +19 -0
  86. package/dist/components/stream-viewer.d.ts +1 -1
  87. package/dist/components/stream-viewer.d.ts.map +1 -1
  88. package/dist/components/stream-viewer.js +3 -27
  89. package/dist/components/trace-viewer/components/map.js +1 -1
  90. package/dist/components/trace-viewer/components/markers.js +1 -1
  91. package/dist/components/trace-viewer/components/node.js +1 -1
  92. package/dist/components/trace-viewer/components/search-input.js +1 -1
  93. package/dist/components/trace-viewer/components/search.js +1 -1
  94. package/dist/components/trace-viewer/components/span-content.js +1 -1
  95. package/dist/components/trace-viewer/components/span-detail-panel.js +1 -1
  96. package/dist/components/trace-viewer/components/span-segments.js +1 -1
  97. package/dist/components/trace-viewer/components/span-strategies.js +1 -1
  98. package/dist/components/trace-viewer/components/ui.js +1 -1
  99. package/dist/components/trace-viewer/components/zoom-button.js +1 -1
  100. package/dist/components/trace-viewer/components/zoom-icons.js +1 -1
  101. package/dist/components/trace-viewer/context.js +1 -1
  102. package/dist/components/trace-viewer/index.js +1 -1
  103. package/dist/components/trace-viewer/trace-viewer.js +1 -1
  104. package/dist/components/trace-viewer/types.js +1 -1
  105. package/dist/components/trace-viewer/util/constants.js +1 -1
  106. package/dist/components/trace-viewer/util/scrollbar-width.js +1 -1
  107. package/dist/components/trace-viewer/util/timing.d.ts +1 -1
  108. package/dist/components/trace-viewer/util/timing.d.ts.map +1 -1
  109. package/dist/components/trace-viewer/util/timing.js +6 -9
  110. package/dist/components/trace-viewer/util/tree.js +1 -1
  111. package/dist/components/trace-viewer/util/use-immediate-style.js +1 -1
  112. package/dist/components/trace-viewer/util/use-streaming-spans.js +1 -1
  113. package/dist/components/trace-viewer/util/use-trackpad-zoom.js +1 -1
  114. package/dist/components/trace-viewer/worker.js +1 -1
  115. package/dist/components/trace-viewer-new.d.ts +14 -0
  116. package/dist/components/trace-viewer-new.d.ts.map +1 -0
  117. package/dist/components/trace-viewer-new.js +22 -0
  118. package/dist/components/ui/alert.js +1 -1
  119. package/dist/components/ui/button.d.ts +10 -0
  120. package/dist/components/ui/button.d.ts.map +1 -0
  121. package/dist/components/ui/button.js +46 -0
  122. package/dist/components/ui/card.js +1 -1
  123. package/dist/components/ui/data-inspector.d.ts +39 -1
  124. package/dist/components/ui/data-inspector.d.ts.map +1 -1
  125. package/dist/components/ui/data-inspector.js +207 -22
  126. package/dist/components/ui/decrypt-button.js +1 -1
  127. package/dist/components/ui/error-card.js +1 -1
  128. package/dist/components/ui/error-stack-block.d.ts.map +1 -1
  129. package/dist/components/ui/error-stack-block.js +27 -19
  130. package/dist/components/ui/icon-button.d.ts +19 -0
  131. package/dist/components/ui/icon-button.d.ts.map +1 -0
  132. package/dist/components/ui/icon-button.js +29 -0
  133. package/dist/components/ui/inspector-theme.d.ts +9 -10
  134. package/dist/components/ui/inspector-theme.d.ts.map +1 -1
  135. package/dist/components/ui/inspector-theme.js +39 -72
  136. package/dist/components/ui/kbd.d.ts +6 -0
  137. package/dist/components/ui/kbd.d.ts.map +1 -0
  138. package/dist/components/ui/kbd.js +6 -0
  139. package/dist/components/ui/load-more-button.js +1 -1
  140. package/dist/components/ui/menu-dropdown.js +1 -1
  141. package/dist/components/ui/skeleton.js +1 -1
  142. package/dist/components/ui/spinner.js +1 -1
  143. package/dist/components/ui/timestamp-tooltip.js +1 -1
  144. package/dist/components/ui/tooltip.d.ts +10 -0
  145. package/dist/components/ui/tooltip.d.ts.map +1 -0
  146. package/dist/components/ui/tooltip.js +12 -0
  147. package/dist/components/workflow-trace-view.d.ts +3 -1
  148. package/dist/components/workflow-trace-view.d.ts.map +1 -1
  149. package/dist/components/workflow-trace-view.js +10 -5
  150. package/dist/components/workflow-traces/event-colors.js +1 -1
  151. package/dist/components/workflow-traces/trace-colors.js +1 -1
  152. package/dist/components/workflow-traces/trace-span-construction.d.ts +2 -2
  153. package/dist/components/workflow-traces/trace-span-construction.d.ts.map +1 -1
  154. package/dist/components/workflow-traces/trace-span-construction.js +19 -6
  155. package/dist/components/workflow-traces/trace-time-utils.js +1 -1
  156. package/dist/hooks/use-dark-mode.js +1 -1
  157. package/dist/hooks/use-intersection-observer.d.ts +17 -0
  158. package/dist/hooks/use-intersection-observer.d.ts.map +1 -0
  159. package/dist/hooks/use-intersection-observer.js +29 -0
  160. package/dist/hooks/use-load-more-on-scroll.d.ts +21 -0
  161. package/dist/hooks/use-load-more-on-scroll.d.ts.map +1 -0
  162. package/dist/hooks/use-load-more-on-scroll.js +28 -0
  163. package/dist/hooks/use-reduced-motion.d.ts +10 -0
  164. package/dist/hooks/use-reduced-motion.d.ts.map +1 -0
  165. package/dist/hooks/use-reduced-motion.js +29 -0
  166. package/dist/index.d.ts +3 -1
  167. package/dist/index.d.ts.map +1 -1
  168. package/dist/index.js +3 -2
  169. package/dist/lib/event-analysis.js +1 -1
  170. package/dist/lib/event-materialization.js +1 -1
  171. package/dist/lib/exact-event-search-id.d.ts +25 -0
  172. package/dist/lib/exact-event-search-id.d.ts.map +1 -0
  173. package/dist/lib/exact-event-search-id.js +39 -0
  174. package/dist/lib/hydration.d.ts +14 -1
  175. package/dist/lib/hydration.d.ts.map +1 -1
  176. package/dist/lib/hydration.js +157 -4
  177. package/dist/lib/stream-display.d.ts +18 -0
  178. package/dist/lib/stream-display.d.ts.map +1 -0
  179. package/dist/lib/stream-display.js +30 -0
  180. package/dist/lib/toast.js +1 -1
  181. package/dist/lib/trace-builder.d.ts.map +1 -1
  182. package/dist/lib/trace-builder.js +3 -2
  183. package/dist/lib/utils.d.ts +9 -9
  184. package/dist/lib/utils.d.ts.map +1 -1
  185. package/dist/lib/utils.js +27 -32
  186. package/dist/styles.css +475 -1
  187. package/package.json +6 -4
  188. package/src/components/event-list-view.tsx +421 -262
  189. package/src/components/index.ts +13 -1
  190. package/src/components/new-trace-viewer/components/copy-button.tsx +68 -0
  191. package/src/components/new-trace-viewer/components/event-list.tsx +135 -0
  192. package/src/components/new-trace-viewer/components/middle-truncate/copy-selection.ts +114 -0
  193. package/src/components/new-trace-viewer/components/middle-truncate/middle-truncate.tsx +157 -0
  194. package/src/components/new-trace-viewer/components/middle-truncate/truncate.ts +132 -0
  195. package/src/components/new-trace-viewer/components/middle-truncate/use-middle-truncate.ts +167 -0
  196. package/src/components/new-trace-viewer/components/split-pane.tsx +198 -0
  197. package/src/components/new-trace-viewer/components/timeline.tsx +560 -0
  198. package/src/components/new-trace-viewer/components/trace-viewer-skeleton.tsx +94 -0
  199. package/src/components/new-trace-viewer/components/use-row-window.ts +93 -0
  200. package/src/components/new-trace-viewer/context.tsx +90 -0
  201. package/src/components/new-trace-viewer/detail-panel.tsx +55 -0
  202. package/src/components/new-trace-viewer/icons.tsx +79 -0
  203. package/src/components/new-trace-viewer/search.ts +178 -0
  204. package/src/components/new-trace-viewer/trace-viewer.tsx +762 -0
  205. package/src/components/new-trace-viewer/types.ts +0 -0
  206. package/src/components/new-trace-viewer/util/constants.ts +0 -0
  207. package/src/components/new-trace-viewer/utils.ts +482 -0
  208. package/src/components/run-trace-view.tsx +3 -0
  209. package/src/components/sidebar/attribute-panel.tsx +240 -196
  210. package/src/components/sidebar/copyable-data-block.tsx +49 -27
  211. package/src/components/sidebar/detail-card.tsx +119 -59
  212. package/src/components/sidebar/entity-detail-panel.tsx +92 -148
  213. package/src/components/sidebar/events-list.tsx +51 -76
  214. package/src/components/sidebar/sidebar-data-context.tsx +62 -0
  215. package/src/components/stream-viewer.tsx +18 -40
  216. package/src/components/trace-viewer/util/timing.ts +5 -9
  217. package/src/components/trace-viewer-new.tsx +57 -0
  218. package/src/components/ui/button.tsx +68 -0
  219. package/src/components/ui/data-inspector.tsx +427 -31
  220. package/src/components/ui/error-stack-block.tsx +39 -30
  221. package/src/components/ui/icon-button.tsx +53 -0
  222. package/src/components/ui/inspector-theme.ts +39 -81
  223. package/src/components/ui/kbd.tsx +21 -0
  224. package/src/components/ui/tooltip.tsx +47 -0
  225. package/src/components/workflow-trace-view.tsx +12 -2
  226. package/src/components/workflow-traces/trace-span-construction.ts +24 -6
  227. package/src/hooks/use-intersection-observer.ts +57 -0
  228. package/src/hooks/use-load-more-on-scroll.ts +49 -0
  229. package/src/hooks/use-reduced-motion.ts +34 -0
  230. package/src/index.ts +9 -0
  231. package/src/lib/exact-event-search-id.ts +67 -0
  232. package/src/lib/hydration.ts +169 -1
  233. package/src/lib/stream-display.ts +48 -0
  234. package/src/lib/trace-builder.ts +2 -1
  235. package/src/lib/utils.ts +27 -32
  236. package/src/styles.css +475 -1
  237. package/dist/components/error-boundary.js.map +0 -1
  238. package/dist/components/event-list-view.js.map +0 -1
  239. package/dist/components/hook-actions.js.map +0 -1
  240. package/dist/components/index.js.map +0 -1
  241. package/dist/components/run-trace-view.js.map +0 -1
  242. package/dist/components/sidebar/attribute-panel.js.map +0 -1
  243. package/dist/components/sidebar/conversation-view.js.map +0 -1
  244. package/dist/components/sidebar/copyable-data-block.js.map +0 -1
  245. package/dist/components/sidebar/detail-card.js.map +0 -1
  246. package/dist/components/sidebar/entity-detail-panel.js.map +0 -1
  247. package/dist/components/sidebar/events-list.js.map +0 -1
  248. package/dist/components/sidebar/resolve-hook-modal.js.map +0 -1
  249. package/dist/components/stream-viewer.js.map +0 -1
  250. package/dist/components/trace-viewer/components/map.js.map +0 -1
  251. package/dist/components/trace-viewer/components/markers.js.map +0 -1
  252. package/dist/components/trace-viewer/components/node.js.map +0 -1
  253. package/dist/components/trace-viewer/components/search-input.js.map +0 -1
  254. package/dist/components/trace-viewer/components/search.js.map +0 -1
  255. package/dist/components/trace-viewer/components/span-content.js.map +0 -1
  256. package/dist/components/trace-viewer/components/span-detail-panel.js.map +0 -1
  257. package/dist/components/trace-viewer/components/span-segments.js.map +0 -1
  258. package/dist/components/trace-viewer/components/span-strategies.js.map +0 -1
  259. package/dist/components/trace-viewer/components/ui.js.map +0 -1
  260. package/dist/components/trace-viewer/components/zoom-button.js.map +0 -1
  261. package/dist/components/trace-viewer/components/zoom-icons.js.map +0 -1
  262. package/dist/components/trace-viewer/context.js.map +0 -1
  263. package/dist/components/trace-viewer/index.js.map +0 -1
  264. package/dist/components/trace-viewer/trace-viewer.js.map +0 -1
  265. package/dist/components/trace-viewer/types.js.map +0 -1
  266. package/dist/components/trace-viewer/util/constants.js.map +0 -1
  267. package/dist/components/trace-viewer/util/scrollbar-width.js.map +0 -1
  268. package/dist/components/trace-viewer/util/timing.js.map +0 -1
  269. package/dist/components/trace-viewer/util/tree.js.map +0 -1
  270. package/dist/components/trace-viewer/util/use-immediate-style.js.map +0 -1
  271. package/dist/components/trace-viewer/util/use-streaming-spans.js.map +0 -1
  272. package/dist/components/trace-viewer/util/use-trackpad-zoom.js.map +0 -1
  273. package/dist/components/trace-viewer/worker.js.map +0 -1
  274. package/dist/components/ui/alert.js.map +0 -1
  275. package/dist/components/ui/card.js.map +0 -1
  276. package/dist/components/ui/data-inspector.js.map +0 -1
  277. package/dist/components/ui/decrypt-button.js.map +0 -1
  278. package/dist/components/ui/error-card.js.map +0 -1
  279. package/dist/components/ui/error-stack-block.js.map +0 -1
  280. package/dist/components/ui/inspector-theme.js.map +0 -1
  281. package/dist/components/ui/load-more-button.js.map +0 -1
  282. package/dist/components/ui/menu-dropdown.js.map +0 -1
  283. package/dist/components/ui/skeleton.js.map +0 -1
  284. package/dist/components/ui/spinner.js.map +0 -1
  285. package/dist/components/ui/timestamp-tooltip.js.map +0 -1
  286. package/dist/components/workflow-trace-view.js.map +0 -1
  287. package/dist/components/workflow-traces/event-colors.js.map +0 -1
  288. package/dist/components/workflow-traces/trace-colors.js.map +0 -1
  289. package/dist/components/workflow-traces/trace-span-construction.js.map +0 -1
  290. package/dist/components/workflow-traces/trace-time-utils.js.map +0 -1
  291. package/dist/hooks/use-dark-mode.js.map +0 -1
  292. package/dist/index.js.map +0 -1
  293. package/dist/lib/event-analysis.js.map +0 -1
  294. package/dist/lib/event-materialization.js.map +0 -1
  295. package/dist/lib/hydration.js.map +0 -1
  296. package/dist/lib/toast.js.map +0 -1
  297. package/dist/lib/trace-builder.js.map +0 -1
  298. package/dist/lib/utils.js.map +0 -1
@@ -0,0 +1,114 @@
1
+ 'use client';
2
+ import { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState, } from 'react';
3
+ import { middleTruncate, toGraphemes } from './truncate';
4
+ const useIsomorphicLayoutEffect = typeof window === 'undefined' ? useEffect : useLayoutEffect;
5
+ function createFullState(value, graphemes) {
6
+ return {
7
+ displayText: value,
8
+ isTruncated: false,
9
+ prefixGraphemeCount: graphemes.length,
10
+ prefixText: value,
11
+ suffixGraphemeCount: 0,
12
+ suffixText: '',
13
+ };
14
+ }
15
+ /**
16
+ * Middle-truncation logic. Returns refs to attach to the container and measurement elements, plus the truncated display text. Recalculates on resize, font loading, and value changes.
17
+ * Powers the `<MiddleTruncate>` (`<span>`) component.
18
+ *
19
+ * Documentation: [Geist Middle Truncate](https://vercel.com/geist/middle-truncate)
20
+ *
21
+ * @param value - Full text string to truncate.
22
+ */
23
+ function useMiddleTruncate(value) {
24
+ const graphemes = useMemo(() => toGraphemes(value), [value]);
25
+ const fullState = useMemo(() => createFullState(value, graphemes), [graphemes, value]);
26
+ const ref = useRef(null);
27
+ const measureRef = useRef(null);
28
+ const [state, setState] = useState(() => fullState);
29
+ const rafRef = useRef(0);
30
+ const updateState = useCallback((nextState) => {
31
+ setState((currentState) => {
32
+ if (currentState.displayText === nextState.displayText &&
33
+ currentState.isTruncated === nextState.isTruncated &&
34
+ currentState.prefixText === nextState.prefixText &&
35
+ currentState.prefixGraphemeCount === nextState.prefixGraphemeCount &&
36
+ currentState.suffixText === nextState.suffixText &&
37
+ currentState.suffixGraphemeCount === nextState.suffixGraphemeCount) {
38
+ return currentState;
39
+ }
40
+ return nextState;
41
+ });
42
+ }, []);
43
+ const recalculate = useCallback(() => {
44
+ const el = ref.current;
45
+ const measureEl = measureRef.current;
46
+ if (!el || !measureEl)
47
+ return;
48
+ const available = el.clientWidth;
49
+ if (available <= 0) {
50
+ updateState(fullState);
51
+ return;
52
+ }
53
+ const measure = (text) => {
54
+ measureEl.textContent = text;
55
+ return measureEl.scrollWidth;
56
+ };
57
+ const fullWidth = measure(value);
58
+ if (fullWidth <= available) {
59
+ updateState(fullState);
60
+ return;
61
+ }
62
+ const result = middleTruncate(graphemes, available, measure, fullWidth);
63
+ updateState({
64
+ displayText: result.text,
65
+ isTruncated: result.truncated,
66
+ prefixGraphemeCount: result.prefixGraphemeCount,
67
+ prefixText: result.prefixText,
68
+ suffixGraphemeCount: result.suffixGraphemeCount,
69
+ suffixText: result.suffixText,
70
+ });
71
+ }, [fullState, graphemes, updateState, value]);
72
+ // Measure on mount and when value changes - before paint
73
+ useIsomorphicLayoutEffect(() => {
74
+ recalculate();
75
+ }, [recalculate]);
76
+ // ResizeObserver + font loading for ongoing responsiveness
77
+ useEffect(() => {
78
+ const el = ref.current;
79
+ if (!el)
80
+ return;
81
+ const debouncedRecalc = () => {
82
+ cancelAnimationFrame(rafRef.current);
83
+ rafRef.current = requestAnimationFrame(recalculate);
84
+ };
85
+ const ro = typeof ResizeObserver !== 'undefined'
86
+ ? new ResizeObserver(debouncedRecalc)
87
+ : null;
88
+ ro?.observe(el);
89
+ window.addEventListener('resize', debouncedRecalc);
90
+ const onFontsLoaded = () => {
91
+ debouncedRecalc();
92
+ };
93
+ const fontSet = 'fonts' in document ? document.fonts : null;
94
+ fontSet?.addEventListener?.('loadingdone', onFontsLoaded);
95
+ return () => {
96
+ ro?.disconnect();
97
+ window.removeEventListener('resize', debouncedRecalc);
98
+ cancelAnimationFrame(rafRef.current);
99
+ fontSet?.removeEventListener?.('loadingdone', onFontsLoaded);
100
+ };
101
+ }, [recalculate]);
102
+ return {
103
+ ref,
104
+ measureRef,
105
+ displayText: state.displayText,
106
+ isTruncated: state.isTruncated,
107
+ prefixGraphemeCount: state.prefixGraphemeCount,
108
+ prefixText: state.prefixText,
109
+ suffixGraphemeCount: state.suffixGraphemeCount,
110
+ suffixText: state.suffixText,
111
+ };
112
+ }
113
+ export { useMiddleTruncate };
114
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLW1pZGRsZS10cnVuY2F0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL25ldy10cmFjZS12aWV3ZXIvY29tcG9uZW50cy9taWRkbGUtdHJ1bmNhdGUvdXNlLW1pZGRsZS10cnVuY2F0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUM7QUFFYixPQUFPLEVBQ0wsV0FBVyxFQUNYLFNBQVMsRUFDVCxlQUFlLEVBQ2YsT0FBTyxFQUNQLE1BQU0sRUFDTixRQUFRLEdBQ1QsTUFBTSxPQUFPLENBQUM7QUFDZixPQUFPLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUV6RCxNQUFNLHlCQUF5QixHQUM3QixPQUFPLE1BQU0sS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDO0FBVzlELFNBQVMsZUFBZSxDQUN0QixLQUFhLEVBQ2IsU0FBbUI7SUFFbkIsT0FBTztRQUNMLFdBQVcsRUFBRSxLQUFLO1FBQ2xCLFdBQVcsRUFBRSxLQUFLO1FBQ2xCLG1CQUFtQixFQUFFLFNBQVMsQ0FBQyxNQUFNO1FBQ3JDLFVBQVUsRUFBRSxLQUFLO1FBQ2pCLG1CQUFtQixFQUFFLENBQUM7UUFDdEIsVUFBVSxFQUFFLEVBQUU7S0FDZixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxTQUFTLGlCQUFpQixDQUFDLEtBQWE7SUFVdEMsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDN0QsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUN2QixHQUFHLEVBQUUsQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxFQUN2QyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FDbkIs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QUFDLFdBQVc7UUFDOUIsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO1FBQzlCLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxtQkFBbUI7UUFDOUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVO1FBQzVCLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxtQkFBbUI7UUFDOUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVO0tBQzdCLENBQUM7QUFDSixDQUFDO0FBRUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB7XG4gIHVzZUNhbGxiYWNrLFxuICB1c2VFZmZlY3QsXG4gIHVzZUxheW91dEVmZmVjdCxcbiAgdXNlTWVtbyxcbiAgdXNlUmVmLFxuICB1c2VTdGF0ZSxcbn0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgbWlkZGxlVHJ1bmNhdGUsIHRvR3JhcGhlbWVzIH0gZnJvbSAnLi90cnVuY2F0ZSc7XG5cbmNvbnN0IHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QgPVxuICB0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyA/IHVzZUVmZmVjdCA6IHVzZUxheW91dEVmZmVjdDtcblxuaW50ZXJmYWNlIE1pZGRsZVRydW5jYXRlU3RhdGUge1xuICBkaXNwbGF5VGV4dDogc3RyaW5nO1xuICBpc1RydW5jYXRlZDogYm9vbGVhbjtcbiAgcHJlZml4R3JhcGhlbWVDb3VudDogbnVtYmVyO1xuICBwcmVmaXhUZXh0OiBzdHJpbmc7XG4gIHN1ZmZpeEdyYXBoZW1lQ291bnQ6IG51bWJlcjtcbiAgc3VmZml4VGV4dDogc3RyaW5nO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVGdWxsU3RhdGUoXG4gIHZhbHVlOiBzdHJpbmcsXG4gIGdyYXBoZW1lczogc3RyaW5nW11cbik6IE1pZGRsZVRydW5jYXRlU3RhdGUge1xuICByZXR1cm4ge1xuICAgIGRpc3BsYXlUZXh0OiB2YWx1ZSxcbiAgICBpc1RydW5jYXRlZDogZmFsc2UsXG4gICAgcHJlZml4R3JhcGhlbWVDb3VudDogZ3JhcGhlbWVzLmxlbmd0aCxcbiAgICBwcmVmaXhUZXh0OiB2YWx1ZSxcbiAgICBzdWZmaXhHcmFwaGVtZUNvdW50OiAwLFxuICAgIHN1ZmZpeFRleHQ6ICcnLFxuICB9O1xufVxuXG4vKipcbiAqIE1pZGRsZS10cnVuY2F0aW9uIGxvZ2ljLiBSZXR1cm5zIHJlZnMgdG8gYXR0YWNoIHRvIHRoZSBjb250YWluZXIgYW5kIG1lYXN1cmVtZW50IGVsZW1lbnRzLCBwbHVzIHRoZSB0cnVuY2F0ZWQgZGlzcGxheSB0ZXh0LiBSZWNhbGN1bGF0ZXMgb24gcmVzaXplLCBmb250IGxvYWRpbmcsIGFuZCB2YWx1ZSBjaGFuZ2VzLlxuICogUG93ZXJzIHRoZSBgPE1pZGRsZVRydW5jYXRlPmAgKGA8c3Bhbj5gKSBjb21wb25lbnQuXG4gKlxuICogRG9jdW1lbnRhdGlvbjogW0dlaXN0IE1pZGRsZSBUcnVuY2F0ZV0oaHR0cHM6Ly92ZXJjZWwuY29tL2dlaXN0L21pZGRsZS10cnVuY2F0ZSlcbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBGdWxsIHRleHQgc3RyaW5nIHRvIHRydW5jYXRlLlxuICovXG5mdW5jdGlvbiB1c2VNaWRkbGVUcnVuY2F0ZSh2YWx1ZTogc3RyaW5nKToge1xuICByZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MU3BhbkVsZW1lbnQgfCBudWxsPjtcbiAgbWVhc3VyZVJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxTcGFuRWxlbWVudCB8IG51bGw+O1xuICBkaXNwbGF5VGV4dDogc3RyaW5nO1xuICBpc1RydW5jYXRlZDogYm9vbGVhbjtcbiAgcHJlZml4R3JhcGhlbWVDb3VudDogbnVtYmVyO1xuICBwcmVmaXhUZXh0OiBzdHJpbmc7XG4gIHN1ZmZpeEdyYXBoZW1lQ291bnQ6IG51bWJlcjtcbiAgc3VmZml4VGV4dDogc3RyaW5nO1xufSB7XG4gIGNvbnN0IGdyYXBoZW1lcyA9IHVzZU1lbW8oKCkgPT4gdG9HcmFwaGVtZXModmFsdWUpLCBbdmFsdWVdKTtcbiAgY29uc3QgZnVsbFN0YXRlID0gdXNlTWVtbyhcbiAgICAoKSA9PiBjcmVhdGVGdWxsU3RhdGUodmFsdWUsIGdyYXBoZW1lcyksXG4gICAgW2dyYXBoZW1lcywgdmFsdWVdXG4gICk7XG4gIGNvbnN0IHJlZiA9IHVzZVJlZjxIVE1MU3BhbkVsZW1lbnQgfCBudWxsPihudWxsKTtcbiAgY29uc3QgbWVhc3VyZVJlZiA9IHVzZVJlZjxIVE1MU3BhbkVsZW1lbnQgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW3N0YXRlLCBzZXRTdGF0ZV0gPSB1c2VTdGF0ZTxNaWRkbGVUcnVuY2F0ZVN0YXRlPigoKSA9PiBmdWxsU3RhdGUpO1xuICBjb25zdCByYWZSZWYgPSB1c2VSZWY8bnVtYmVyPigwKTtcblxuICBjb25zdCB1cGRhdGVTdGF0ZSA9IHVzZUNhbGxiYWNrKChuZXh0U3RhdGU6IE1pZGRsZVRydW5jYXRlU3RhdGUpID0+IHtcbiAgICBzZXRTdGF0ZSgoY3VycmVudFN0YXRlKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIGN1cnJlbnRTdGF0ZS5kaXNwbGF5VGV4dCA9PT0gbmV4dFN0YXRlLmRpc3BsYXlUZXh0ICYmXG4gICAgICAgIGN1cnJlbnRTdGF0ZS5pc1RydW5jYXRlZCA9PT0gbmV4dFN0YXRlLmlzVHJ1bmNhdGVkICYmXG4gICAgICAgIGN1cnJlbnRTdGF0ZS5wcmVmaXhUZXh0ID09PSBuZXh0U3RhdGUucHJlZml4VGV4dCAmJlxuICAgICAgICBjdXJyZW50U3RhdGUucHJlZml4R3JhcGhlbWVDb3VudCA9PT0gbmV4dFN0YXRlLnByZWZpeEdyYXBoZW1lQ291bnQgJiZcbiAgICAgICAgY3VycmVudFN0YXRlLnN1ZmZpeFRleHQgPT09IG5leHRTdGF0ZS5zdWZmaXhUZXh0ICYmXG4gICAgICAgIGN1cnJlbnRTdGF0ZS5zdWZmaXhHcmFwaGVtZUNvdW50ID09PSBuZXh0U3RhdGUuc3VmZml4R3JhcGhlbWVDb3VudFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBjdXJyZW50U3RhdGU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXh0U3RhdGU7XG4gICAgfSk7XG4gIH0sIFtdKTtcblxuICBjb25zdCByZWNhbGN1bGF0ZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBlbCA9IHJlZi5jdXJyZW50O1xuICAgIGNvbnN0IG1lYXN1cmVFbCA9IG1lYXN1cmVSZWYuY3VycmVudDtcbiAgICBpZiAoIWVsIHx8ICFtZWFzdXJlRWwpIHJldHVybjtcblxuICAgIGNvbnN0IGF2YWlsYWJsZSA9IGVsLmNsaWVudFdpZHRoO1xuXG4gICAgaWYgKGF2YWlsYWJsZSA8PSAwKSB7XG4gICAgICB1cGRhdGVTdGF0ZShmdWxsU3RhdGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG1lYXN1cmUgPSAodGV4dDogc3RyaW5nKTogbnVtYmVyID0+IHtcbiAgICAgIG1lYXN1cmVFbC50ZXh0Q29udGVudCA9IHRleHQ7XG4gICAgICByZXR1cm4gbWVhc3VyZUVsLnNjcm9sbFdpZHRoO1xuICAgIH07XG5cbiAgICBjb25zdCBmdWxsV2lkdGggPSBtZWFzdXJlKHZhbHVlKTtcblxuICAgIGlmIChmdWxsV2lkdGggPD0gYXZhaWxhYmxlKSB7XG4gICAgICB1cGRhdGVTdGF0ZShmdWxsU3RhdGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IG1pZGRsZVRydW5jYXRlKGdyYXBoZW1lcywgYXZhaWxhYmxlLCBtZWFzdXJlLCBmdWxsV2lkdGgpO1xuICAgIHVwZGF0ZVN0YXRlKHtcbiAgICAgIGRpc3BsYXlUZXh0OiByZXN1bHQudGV4dCxcbiAgICAgIGlzVHJ1bmNhdGVkOiByZXN1bHQudHJ1bmNhdGVkLFxuICAgICAgcHJlZml4R3JhcGhlbWVDb3VudDogcmVzdWx0LnByZWZpeEdyYXBoZW1lQ291bnQsXG4gICAgICBwcmVmaXhUZXh0OiByZXN1bHQucHJlZml4VGV4dCxcbiAgICAgIHN1ZmZpeEdyYXBoZW1lQ291bnQ6IHJlc3VsdC5zdWZmaXhHcmFwaGVtZUNvdW50LFxuICAgICAgc3VmZml4VGV4dDogcmVzdWx0LnN1ZmZpeFRleHQsXG4gICAgfSk7XG4gIH0sIFtmdWxsU3RhdGUsIGdyYXBoZW1lcywgdXBkYXRlU3RhdGUsIHZhbHVlXSk7XG5cbiAgLy8gTWVhc3VyZSBvbiBtb3VudCBhbmQgd2hlbiB2YWx1ZSBjaGFuZ2VzIC0gYmVmb3JlIHBhaW50XG4gIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIHJlY2FsY3VsYXRlKCk7XG4gIH0sIFtyZWNhbGN1bGF0ZV0pO1xuXG4gIC8vIFJlc2l6ZU9ic2VydmVyICsgZm9udCBsb2FkaW5nIGZvciBvbmdvaW5nIHJlc3BvbnNpdmVuZXNzXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgZWwgPSByZWYuY3VycmVudDtcbiAgICBpZiAoIWVsKSByZXR1cm47XG5cbiAgICBjb25zdCBkZWJvdW5jZWRSZWNhbGMgPSAoKTogdm9pZCA9PiB7XG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShyYWZSZWYuY3VycmVudCk7XG4gICAgICByYWZSZWYuY3VycmVudCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShyZWNhbGN1bGF0ZSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJvID1cbiAgICAgIHR5cGVvZiBSZXNpemVPYnNlcnZlciAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgPyBuZXcgUmVzaXplT2JzZXJ2ZXIoZGVib3VuY2VkUmVjYWxjKVxuICAgICAgICA6IG51bGw7XG4gICAgcm8/Lm9ic2VydmUoZWwpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBkZWJvdW5jZWRSZWNhbGMpO1xuXG4gICAgY29uc3Qgb25Gb250c0xvYWRlZCA9ICgpOiB2b2lkID0+IHtcbiAgICAgIGRlYm91bmNlZFJlY2FsYygpO1xuICAgIH07XG4gICAgY29uc3QgZm9udFNldCA9ICdmb250cycgaW4gZG9jdW1lbnQgPyBkb2N1bWVudC5mb250cyA6IG51bGw7XG4gICAgZm9udFNldD8uYWRkRXZlbnRMaXN0ZW5lcj8uKCdsb2FkaW5nZG9uZScsIG9uRm9udHNMb2FkZWQpO1xuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHJvPy5kaXNjb25uZWN0KCk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgZGVib3VuY2VkUmVjYWxjKTtcbiAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZlJlZi5jdXJyZW50KTtcbiAgICAgIGZvbnRTZXQ/LnJlbW92ZUV2ZW50TGlzdGVuZXI/LignbG9hZGluZ2RvbmUnLCBvbkZvbnRzTG9hZGVkKTtcbiAgICB9O1xuICB9LCBbcmVjYWxjdWxhdGVdKTtcblxuICByZXR1cm4ge1xuICAgIHJlZixcbiAgICBtZWFzdXJlUmVmLFxuICAgIGRpc3BsYXlUZXh0OiBzdGF0ZS5kaXNwbGF5VGV4dCxcbiAgICBpc1RydW5jYXRlZDogc3RhdGUuaXNUcnVuY2F0ZWQsXG4gICAgcHJlZml4R3JhcGhlbWVDb3VudDogc3RhdGUucHJlZml4R3JhcGhlbWVDb3VudCxcbiAgICBwcmVmaXhUZXh0OiBzdGF0ZS5wcmVmaXhUZXh0LFxuICAgIHN1ZmZpeEdyYXBoZW1lQ291bnQ6IHN0YXRlLnN1ZmZpeEdyYXBoZW1lQ291bnQsXG4gICAgc3VmZml4VGV4dDogc3RhdGUuc3VmZml4VGV4dCxcbiAgfTtcbn1cblxuZXhwb3J0IHsgdXNlTWlkZGxlVHJ1bmNhdGUgfTtcbiJdfQ==
@@ -0,0 +1,15 @@
1
+ import { type ReactNode, type RefObject } from 'react';
2
+ export declare function Divider(): import("react/jsx-runtime").JSX.Element;
3
+ export interface SplitPaneProps {
4
+ children: ReactNode;
5
+ className?: string;
6
+ /** Fixed pixel width for the start (left) pane. Default 220. */
7
+ defaultStartWidth?: number;
8
+ /** Fixed (non-scrolling) header rendered above the start pane. */
9
+ startHeader?: ReactNode;
10
+ /** Fixed (non-scrolling) header rendered above the end pane. */
11
+ endHeader?: ReactNode;
12
+ scrollContainerRef?: RefObject<HTMLDivElement | null>;
13
+ }
14
+ export declare function SplitPane({ children, className, defaultStartWidth, startHeader, endHeader, scrollContainerRef, }: SplitPaneProps): import("react/jsx-runtime").JSX.Element;
15
+ //# sourceMappingURL=split-pane.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"split-pane.d.ts","sourceRoot":"","sources":["../../../../src/components/new-trace-viewer/components/split-pane.tsx"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,SAAS,EAEd,KAAK,SAAS,EAKf,MAAM,OAAO,CAAC;AAOf,wBAAgB,OAAO,4CAEtB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gEAAgE;IAChE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kEAAkE;IAClE,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,gEAAgE;IAChE,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,kBAAkB,CAAC,EAAE,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;CACvD;AAED,wBAAgB,SAAS,CAAC,EACxB,QAAQ,EACR,SAAS,EACT,iBAAoC,EACpC,WAAW,EACX,SAAS,EACT,kBAAkB,GACnB,EAAE,cAAc,2CA4JhB"}
@@ -0,0 +1,105 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Children, useCallback, useEffect, useRef, useState, } from 'react';
4
+ import { cn } from '../../../lib/utils';
5
+ const GUTTER_PX = 1;
6
+ const MIN_PX = 50;
7
+ const DEFAULT_START_PX = 340;
8
+ export function Divider() {
9
+ return _jsx("div", { "aria-hidden": true, className: "h-full w-px shrink-0 bg-gray-alpha-400" });
10
+ }
11
+ export function SplitPane({ children, className, defaultStartWidth = DEFAULT_START_PX, startHeader, endHeader, scrollContainerRef, }) {
12
+ const parts = Children.toArray(children);
13
+ if (parts.length !== 2) {
14
+ throw new Error('SplitPane expects exactly two children');
15
+ }
16
+ const [start, end] = parts;
17
+ const [startPx, setStartPx] = useState(defaultStartWidth);
18
+ const [isDragging, setIsDragging] = useState(false);
19
+ const containerRef = useRef(null);
20
+ const gutterRef = useRef(null);
21
+ const rafRef = useRef(null);
22
+ const pendingPx = useRef(defaultStartWidth);
23
+ const pointerIdRef = useRef(null);
24
+ useEffect(() => {
25
+ return () => {
26
+ if (rafRef.current)
27
+ cancelAnimationFrame(rafRef.current);
28
+ };
29
+ }, []);
30
+ const setContainerRef = useCallback((node) => {
31
+ containerRef.current = node;
32
+ if (scrollContainerRef) {
33
+ scrollContainerRef.current = node;
34
+ }
35
+ }, [scrollContainerRef]);
36
+ const clampPx = useCallback((px) => {
37
+ const el = containerRef.current;
38
+ if (!el)
39
+ return px;
40
+ const maxPx = el.getBoundingClientRect().width - MIN_PX - GUTTER_PX;
41
+ return Math.min(maxPx, Math.max(MIN_PX, px));
42
+ }, []);
43
+ useEffect(() => {
44
+ if (!isDragging)
45
+ return;
46
+ const onPointerMove = (e) => {
47
+ if (e.pointerId !== pointerIdRef.current)
48
+ return;
49
+ const container = containerRef.current;
50
+ if (!container)
51
+ return;
52
+ const rect = container.getBoundingClientRect();
53
+ pendingPx.current = clampPx(e.clientX - rect.left);
54
+ if (!rafRef.current) {
55
+ rafRef.current = requestAnimationFrame(() => {
56
+ rafRef.current = null;
57
+ setStartPx(pendingPx.current);
58
+ });
59
+ }
60
+ };
61
+ const onPointerUp = (e) => {
62
+ if (e.pointerId !== pointerIdRef.current)
63
+ return;
64
+ const gutter = gutterRef.current;
65
+ if (gutter?.hasPointerCapture(e.pointerId)) {
66
+ gutter.releasePointerCapture(e.pointerId);
67
+ }
68
+ if (rafRef.current) {
69
+ cancelAnimationFrame(rafRef.current);
70
+ rafRef.current = null;
71
+ }
72
+ pointerIdRef.current = null;
73
+ setIsDragging(false);
74
+ };
75
+ document.addEventListener('pointermove', onPointerMove);
76
+ document.addEventListener('pointerup', onPointerUp);
77
+ document.addEventListener('pointercancel', onPointerUp);
78
+ return () => {
79
+ document.removeEventListener('pointermove', onPointerMove);
80
+ document.removeEventListener('pointerup', onPointerUp);
81
+ document.removeEventListener('pointercancel', onPointerUp);
82
+ };
83
+ }, [isDragging, clampPx]);
84
+ const handlePointerDown = (e) => {
85
+ e.currentTarget.setPointerCapture(e.pointerId);
86
+ pointerIdRef.current = e.pointerId;
87
+ setIsDragging(true);
88
+ };
89
+ const handleLostPointerCapture = () => {
90
+ pointerIdRef.current = null;
91
+ setIsDragging(false);
92
+ if (rafRef.current) {
93
+ cancelAnimationFrame(rafRef.current);
94
+ rafRef.current = null;
95
+ }
96
+ };
97
+ const colTemplate = `${startPx}px ${GUTTER_PX}px minmax(${MIN_PX}px, 1fr)`;
98
+ const hasHeaders = startHeader != null || endHeader != null;
99
+ const gutter = (_jsx("div", { ref: gutterRef, className: "relative z-20 isolate flex shrink-0 cursor-col-resize justify-center", onPointerDown: handlePointerDown, onLostPointerCapture: handleLostPointerCapture, children: _jsx("span", { className: "pointer-events-none relative z-10 h-full w-px shrink-0 bg-gray-alpha-400", "aria-hidden": true }) }));
100
+ if (hasHeaders) {
101
+ return (_jsxs("div", { className: cn('flex flex-col h-full min-h-0', className), children: [_jsxs("div", { className: "shrink-0 grid", style: { gridTemplateColumns: colTemplate }, children: [_jsx("div", { children: startHeader }), _jsx("div", { className: "flex justify-center", children: _jsx("span", { className: "h-full w-px bg-gray-alpha-400", "aria-hidden": true }) }), _jsx("div", { children: endHeader })] }), _jsxs("div", { ref: setContainerRef, className: cn('grid flex-1 min-h-0 overflow-x-hidden overflow-y-auto', isDragging && 'select-none'), style: { gridTemplateColumns: colTemplate }, children: [start, gutter, end] })] }));
102
+ }
103
+ return (_jsxs("div", { ref: setContainerRef, className: cn('grid h-full min-h-0 content-start overflow-x-hidden overflow-y-auto', isDragging && 'select-none', className), style: { gridTemplateColumns: colTemplate, height: '100%' }, children: [start, gutter, end] }));
104
+ }
105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BsaXQtcGFuZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL25ldy10cmFjZS12aWV3ZXIvY29tcG9uZW50cy9zcGxpdC1wYW5lLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUM7O0FBRWIsT0FBTyxFQUNMLFFBQVEsRUFJUixXQUFXLEVBQ1gsU0FBUyxFQUNULE1BQU0sRUFDTixRQUFRLEdBQ1QsTUFBTSxPQUFPLENBQUM7QUFDZixPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFeEMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUNsQixNQUFNLGdCQUFnQixHQUFHLEdBQUcsQ0FBQztBQUU3QixNQUFNLFVBQVUsT0FBTztJQUNyQixPQUFPLG1DQUFpQixTQUFTLEVBQUMsd0NBQXdDLEdBQUcsQ0FBQztBQUNoRixDQUFDO0FBY0QsTUFBTSxVQUFVLFNBQVMsQ0FBQyxFQUN4QixRQUFRLEVBQ1IsU0FBUyxFQUNULGlCQUFpQixHQUFHLGdCQUFnQixFQUNwQyxXQUFXLEVBQ1gsU0FBUyxFQUNULGtCQUFrQixHQUNIO0lBQ2YsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN6QyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDdkIsTUFBTSxJQUFJLEtBQUssQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFDRCxNQUFNLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUUzQixNQUFNLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQzFELE1BQU0sQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BELE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBaUIsSUFBSSxDQUFDLENBQUM7SUFDbEQsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFpQixJQUFJLENBQUMsQ0FBQztJQUMvQyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQWdCLElBQUksQ0FBQyxDQUFDO0lBQzNDLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQzVDLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBZ0IsSUFBSSxDQUFDLENBQUM7SUFFakQsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUNiLE9BQU8sR0FBRyxFQUFFO1lBQ1YsSUFBSSxNQUFNLENBQUMsT0FBTztnQkFBRSxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0QsQ0FBQyxDQUFDO0lBQ0osQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRVAsTUFBTSxlQUFlLEdBQUcsV0FBVyxDQUNqQyxDQUFDLElBQTJCLEVBQUUsRUFBRTtRQUM5QixZQUFZLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUM1QixJQUFJLGtCQUFrQixFQUFFLENBQUM7WUFDdkIsa0JBQWtCLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQyxDQUFDO0lBQ0gsQ0FBQyxFQUNELENBQUMsa0JBQWtCLENBQUMsQ0FDckIsQ0FBQztJQUVGLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxDQUFDLEVBQVUsRUFBRSxFQUFFO1FBQ3pDLE1BQU0sRUFBRSxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUM7UUFDaEMsSUFBSSxDQUFDLEVBQUU7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUNuQixNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxLQUFLLEdBQUcsTUFBTSxHQUFHLFNBQVMsQ0FBQztRQUNwRSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDL0MsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRVAsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUNiLElBQUksQ0FBQyxVQUFVO1lBQUUsT0FBTztRQUV4QixNQUFNLGFBQWEsR0FBRyxDQUFDLENBQTBCLEVBQUUsRUFBRTtZQUNuRCxJQUFJLENBQUMsQ0FBQyxTQUFTLEtBQUssWUFBWSxDQUFDLE9BQU87Z0JBQUUsT0FBTztZQUNqRCxNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxTQUFTO2dCQUFFLE9BQU87WUFDdkIsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDL0MsU0FBUyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbkQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDcEIsTUFBTSxDQUFDLE9BQU8sR0FBRyxxQkFBcUIsQ0FBQyxHQUFHLEVBQUU7b0JBQzFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO29CQUN0QixVQUFVLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNoQyxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDLENBQUM7UUFFRixNQUFNLFdBQVcsR0FBRyxDQUFDLENBQTBCLEVBQUUsRUFBRTtZQUNqRCxJQUFJLENBQUMsQ0FBQyxTQUFTLEtBQUssWUFBWSxDQUFDLE9BQU87Z0JBQUUsT0FBTztZQUNqRCxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDO1lBQ2pDLElBQUksTUFBTSxFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO2dCQUMzQyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzVDLENBQUM7WUFDRCxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDbkIsb0JBQW9CLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNyQyxNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztZQUN4QixDQUFDO1lBQ0QsWUFBWSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFDNUIsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZCLENBQUMsQ0FBQztRQUVGLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDeEQsUUFBUSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNwRCxRQUFRLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBRXhELE9BQU8sR0FBRyxFQUFFO1lBQ1YsUUFBUSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsRUFBRSxhQUFhLENBQUMsQ0FBQztZQUMzRCxRQUFRLENBQUMsbUJBQW1CLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ3ZELFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDN0QsQ0FBQyxDQUFDO0lBQ0osQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFFMUIsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQW9DLEVBQUUsRUFBRTtRQUNqRSxDQUFDLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvQyxZQUFZLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDbkMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RCLENBQUMsQ0FBQztJQUVGLE1BQU0sd0JBQXdCLEdBQUcsR0FBRyxFQUFFO1FBQ3BDLFlBQVksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQzVCLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQixJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNuQixvQkFBb0IsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDckMsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDeEIsQ0FBQztJQUNILENBQUMsQ0FBQztJQUVGLE1BQU0sV0FBVyxHQUFHLEdBQUcsT0FBTyxNQUFNLFNBQVMsYUFBYSxNQUFNLFVBQVUsQ0FBQztJQUMzRSxNQUFNLFVBQVUsR0FBRyxXQUFXLElBQUksSUFBSSxJQUFJLFNBQVMsSUFBSSxJQUFJLENBQUM7SUFFNUQsTUFBTSxNQUFNLEdBQUcsQ0FDYixjQUNFLEdBQUcsRUFBRSxTQUFTLEVBQ2QsU0FBUyxFQUFDLHNFQUFzRSxFQUNoRixhQUFhLEVBQUUsaUJBQWlCLEVBQ2hDLG9CQUFvQixFQUFFLHdCQUF3QixZQUU5QyxlQUNFLFNBQVMsRUFBQywwRUFBMEUsd0JBRXBGLEdBQ0UsQ0FDUCxDQUFDO0lBRUYsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUNmLE9BQU8sQ0FDTCxlQUFLLFNBQVMsRUFBRSxFQUFFLENBQUMsOEJBQThCLEVBQUUsU0FBUyxDQUFDLGFBQzNELGVBQ0UsU0FBUyxFQUFDLGVBQWUsRUFDekIsS0FBSyxFQUFFLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLGFBRTNDLHdCQUFNLFdBQVcsR0FBTyxFQUN4QixjQUFLLFNBQVMsRUFBQyxxQkFBcUIsWUFDbEMsZUFBTSxTQUFTLEVBQUMsK0JBQStCLHdCQUFlLEdBQzFELEVBQ04sd0JBQU0sU0FBUyxHQUFPLElBQ2xCLEVBQ04sZUFDRSxHQUFHLEVBQUUsZUFBZSxFQUNwQixTQUFTLEVBQUUsRUFBRSxDQUNYLHVEQUF1RCxFQUN2RCxVQUFVLElBQUksYUFBYSxDQUM1QixFQUNELEtBQUssRUFBRSxFQUFFLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxhQUUxQyxLQUFLLEVBQ0wsTUFBTSxFQUNOLEdBQUcsSUFDQSxJQUNGLENBQ1AsQ0FBQztJQUNKLENBQUM7SUFFRCxPQUFPLENBQ0wsZUFDRSxHQUFHLEVBQUUsZUFBZSxFQUNwQixTQUFTLEVBQUUsRUFBRSxDQUNYLHFFQUFxRSxFQUNyRSxVQUFVLElBQUksYUFBYSxFQUMzQixTQUFTLENBQ1YsRUFDRCxLQUFLLEVBQUUsRUFBRSxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxhQUUxRCxLQUFLLEVBQ0wsTUFBTSxFQUNOLEdBQUcsSUFDQSxDQUNQLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQge1xuICBDaGlsZHJlbixcbiAgdHlwZSBSZWFjdE5vZGUsXG4gIHR5cGUgUG9pbnRlckV2ZW50IGFzIFJlYWN0UG9pbnRlckV2ZW50LFxuICB0eXBlIFJlZk9iamVjdCxcbiAgdXNlQ2FsbGJhY2ssXG4gIHVzZUVmZmVjdCxcbiAgdXNlUmVmLFxuICB1c2VTdGF0ZSxcbn0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY24gfSBmcm9tICcuLi8uLi8uLi9saWIvdXRpbHMnO1xuXG5jb25zdCBHVVRURVJfUFggPSAxO1xuY29uc3QgTUlOX1BYID0gNTA7XG5jb25zdCBERUZBVUxUX1NUQVJUX1BYID0gMzQwO1xuXG5leHBvcnQgZnVuY3Rpb24gRGl2aWRlcigpIHtcbiAgcmV0dXJuIDxkaXYgYXJpYS1oaWRkZW4gY2xhc3NOYW1lPVwiaC1mdWxsIHctcHggc2hyaW5rLTAgYmctZ3JheS1hbHBoYS00MDBcIiAvPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTcGxpdFBhbmVQcm9wcyB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgLyoqIEZpeGVkIHBpeGVsIHdpZHRoIGZvciB0aGUgc3RhcnQgKGxlZnQpIHBhbmUuIERlZmF1bHQgMjIwLiAqL1xuICBkZWZhdWx0U3RhcnRXaWR0aD86IG51bWJlcjtcbiAgLyoqIEZpeGVkIChub24tc2Nyb2xsaW5nKSBoZWFkZXIgcmVuZGVyZWQgYWJvdmUgdGhlIHN0YXJ0IHBhbmUuICovXG4gIHN0YXJ0SGVhZGVyPzogUmVhY3ROb2RlO1xuICAvKiogRml4ZWQgKG5vbi1zY3JvbGxpbmcpIGhlYWRlciByZW5kZXJlZCBhYm92ZSB0aGUgZW5kIHBhbmUuICovXG4gIGVuZEhlYWRlcj86IFJlYWN0Tm9kZTtcbiAgc2Nyb2xsQ29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50IHwgbnVsbD47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBTcGxpdFBhbmUoe1xuICBjaGlsZHJlbixcbiAgY2xhc3NOYW1lLFxuICBkZWZhdWx0U3RhcnRXaWR0aCA9IERFRkFVTFRfU1RBUlRfUFgsXG4gIHN0YXJ0SGVhZGVyLFxuICBlbmRIZWFkZXIsXG4gIHNjcm9sbENvbnRhaW5lclJlZixcbn06IFNwbGl0UGFuZVByb3BzKSB7XG4gIGNvbnN0IHBhcnRzID0gQ2hpbGRyZW4udG9BcnJheShjaGlsZHJlbik7XG4gIGlmIChwYXJ0cy5sZW5ndGggIT09IDIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1NwbGl0UGFuZSBleHBlY3RzIGV4YWN0bHkgdHdvIGNoaWxkcmVuJyk7XG4gIH1cbiAgY29uc3QgW3N0YXJ0LCBlbmRdID0gcGFydHM7XG5cbiAgY29uc3QgW3N0YXJ0UHgsIHNldFN0YXJ0UHhdID0gdXNlU3RhdGUoZGVmYXVsdFN0YXJ0V2lkdGgpO1xuICBjb25zdCBbaXNEcmFnZ2luZywgc2V0SXNEcmFnZ2luZ10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IGNvbnRhaW5lclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IGd1dHRlclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IHJhZlJlZiA9IHVzZVJlZjxudW1iZXIgfCBudWxsPihudWxsKTtcbiAgY29uc3QgcGVuZGluZ1B4ID0gdXNlUmVmKGRlZmF1bHRTdGFydFdpZHRoKTtcbiAgY29uc3QgcG9pbnRlcklkUmVmID0gdXNlUmVmPG51bWJlciB8IG51bGw+KG51bGwpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChyYWZSZWYuY3VycmVudCkgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmUmVmLmN1cnJlbnQpO1xuICAgIH07XG4gIH0sIFtdKTtcblxuICBjb25zdCBzZXRDb250YWluZXJSZWYgPSB1c2VDYWxsYmFjayhcbiAgICAobm9kZTogSFRNTERpdkVsZW1lbnQgfCBudWxsKSA9PiB7XG4gICAgICBjb250YWluZXJSZWYuY3VycmVudCA9IG5vZGU7XG4gICAgICBpZiAoc2Nyb2xsQ29udGFpbmVyUmVmKSB7XG4gICAgICAgIHNjcm9sbENvbnRhaW5lclJlZi5jdXJyZW50ID0gbm9kZTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtzY3JvbGxDb250YWluZXJSZWZdXG4gICk7XG5cbiAgY29uc3QgY2xhbXBQeCA9IHVzZUNhbGxiYWNrKChweDogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgZWwgPSBjb250YWluZXJSZWYuY3VycmVudDtcbiAgICBpZiAoIWVsKSByZXR1cm4gcHg7XG4gICAgY29uc3QgbWF4UHggPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCAtIE1JTl9QWCAtIEdVVFRFUl9QWDtcbiAgICByZXR1cm4gTWF0aC5taW4obWF4UHgsIE1hdGgubWF4KE1JTl9QWCwgcHgpKTtcbiAgfSwgW10pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc0RyYWdnaW5nKSByZXR1cm47XG5cbiAgICBjb25zdCBvblBvaW50ZXJNb3ZlID0gKGU6IGdsb2JhbFRoaXMuUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICBpZiAoZS5wb2ludGVySWQgIT09IHBvaW50ZXJJZFJlZi5jdXJyZW50KSByZXR1cm47XG4gICAgICBjb25zdCBjb250YWluZXIgPSBjb250YWluZXJSZWYuY3VycmVudDtcbiAgICAgIGlmICghY29udGFpbmVyKSByZXR1cm47XG4gICAgICBjb25zdCByZWN0ID0gY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgcGVuZGluZ1B4LmN1cnJlbnQgPSBjbGFtcFB4KGUuY2xpZW50WCAtIHJlY3QubGVmdCk7XG4gICAgICBpZiAoIXJhZlJlZi5jdXJyZW50KSB7XG4gICAgICAgIHJhZlJlZi5jdXJyZW50ID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICByYWZSZWYuY3VycmVudCA9IG51bGw7XG4gICAgICAgICAgc2V0U3RhcnRQeChwZW5kaW5nUHguY3VycmVudCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBvblBvaW50ZXJVcCA9IChlOiBnbG9iYWxUaGlzLlBvaW50ZXJFdmVudCkgPT4ge1xuICAgICAgaWYgKGUucG9pbnRlcklkICE9PSBwb2ludGVySWRSZWYuY3VycmVudCkgcmV0dXJuO1xuICAgICAgY29uc3QgZ3V0dGVyID0gZ3V0dGVyUmVmLmN1cnJlbnQ7XG4gICAgICBpZiAoZ3V0dGVyPy5oYXNQb2ludGVyQ2FwdHVyZShlLnBvaW50ZXJJZCkpIHtcbiAgICAgICAgZ3V0dGVyLnJlbGVhc2VQb2ludGVyQ2FwdHVyZShlLnBvaW50ZXJJZCk7XG4gICAgICB9XG4gICAgICBpZiAocmFmUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmUmVmLmN1cnJlbnQpO1xuICAgICAgICByYWZSZWYuY3VycmVudCA9IG51bGw7XG4gICAgICB9XG4gICAgICBwb2ludGVySWRSZWYuY3VycmVudCA9IG51bGw7XG4gICAgICBzZXRJc0RyYWdnaW5nKGZhbHNlKTtcbiAgICB9O1xuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcm1vdmUnLCBvblBvaW50ZXJNb3ZlKTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVydXAnLCBvblBvaW50ZXJVcCk7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcmNhbmNlbCcsIG9uUG9pbnRlclVwKTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdwb2ludGVybW92ZScsIG9uUG9pbnRlck1vdmUpO1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgb25Qb2ludGVyVXApO1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcmNhbmNlbCcsIG9uUG9pbnRlclVwKTtcbiAgICB9O1xuICB9LCBbaXNEcmFnZ2luZywgY2xhbXBQeF0pO1xuXG4gIGNvbnN0IGhhbmRsZVBvaW50ZXJEb3duID0gKGU6IFJlYWN0UG9pbnRlckV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgIGUuY3VycmVudFRhcmdldC5zZXRQb2ludGVyQ2FwdHVyZShlLnBvaW50ZXJJZCk7XG4gICAgcG9pbnRlcklkUmVmLmN1cnJlbnQgPSBlLnBvaW50ZXJJZDtcbiAgICBzZXRJc0RyYWdnaW5nKHRydWUpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUxvc3RQb2ludGVyQ2FwdHVyZSA9ICgpID0+IHtcbiAgICBwb2ludGVySWRSZWYuY3VycmVudCA9IG51bGw7XG4gICAgc2V0SXNEcmFnZ2luZyhmYWxzZSk7XG4gICAgaWYgKHJhZlJlZi5jdXJyZW50KSB7XG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShyYWZSZWYuY3VycmVudCk7XG4gICAgICByYWZSZWYuY3VycmVudCA9IG51bGw7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGNvbFRlbXBsYXRlID0gYCR7c3RhcnRQeH1weCAke0dVVFRFUl9QWH1weCBtaW5tYXgoJHtNSU5fUFh9cHgsIDFmcilgO1xuICBjb25zdCBoYXNIZWFkZXJzID0gc3RhcnRIZWFkZXIgIT0gbnVsbCB8fCBlbmRIZWFkZXIgIT0gbnVsbDtcblxuICBjb25zdCBndXR0ZXIgPSAoXG4gICAgPGRpdlxuICAgICAgcmVmPXtndXR0ZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9XCJyZWxhdGl2ZSB6LTIwIGlzb2xhdGUgZmxleCBzaHJpbmstMCBjdXJzb3ItY29sLXJlc2l6ZSBqdXN0aWZ5LWNlbnRlclwiXG4gICAgICBvblBvaW50ZXJEb3duPXtoYW5kbGVQb2ludGVyRG93bn1cbiAgICAgIG9uTG9zdFBvaW50ZXJDYXB0dXJlPXtoYW5kbGVMb3N0UG9pbnRlckNhcHR1cmV9XG4gICAgPlxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3NOYW1lPVwicG9pbnRlci1ldmVudHMtbm9uZSByZWxhdGl2ZSB6LTEwIGgtZnVsbCB3LXB4IHNocmluay0wIGJnLWdyYXktYWxwaGEtNDAwXCJcbiAgICAgICAgYXJpYS1oaWRkZW5cbiAgICAgIC8+XG4gICAgPC9kaXY+XG4gICk7XG5cbiAgaWYgKGhhc0hlYWRlcnMpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2NuKCdmbGV4IGZsZXgtY29sIGgtZnVsbCBtaW4taC0wJywgY2xhc3NOYW1lKX0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9XCJzaHJpbmstMCBncmlkXCJcbiAgICAgICAgICBzdHlsZT17eyBncmlkVGVtcGxhdGVDb2x1bW5zOiBjb2xUZW1wbGF0ZSB9fVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdj57c3RhcnRIZWFkZXJ9PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJoLWZ1bGwgdy1weCBiZy1ncmF5LWFscGhhLTQwMFwiIGFyaWEtaGlkZGVuIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdj57ZW5kSGVhZGVyfTwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIHJlZj17c2V0Q29udGFpbmVyUmVmfVxuICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAnZ3JpZCBmbGV4LTEgbWluLWgtMCBvdmVyZmxvdy14LWhpZGRlbiBvdmVyZmxvdy15LWF1dG8nLFxuICAgICAgICAgICAgaXNEcmFnZ2luZyAmJiAnc2VsZWN0LW5vbmUnXG4gICAgICAgICAgKX1cbiAgICAgICAgICBzdHlsZT17eyBncmlkVGVtcGxhdGVDb2x1bW5zOiBjb2xUZW1wbGF0ZSB9fVxuICAgICAgICA+XG4gICAgICAgICAge3N0YXJ0fVxuICAgICAgICAgIHtndXR0ZXJ9XG4gICAgICAgICAge2VuZH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICByZWY9e3NldENvbnRhaW5lclJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICdncmlkIGgtZnVsbCBtaW4taC0wIGNvbnRlbnQtc3RhcnQgb3ZlcmZsb3cteC1oaWRkZW4gb3ZlcmZsb3cteS1hdXRvJyxcbiAgICAgICAgaXNEcmFnZ2luZyAmJiAnc2VsZWN0LW5vbmUnLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICBzdHlsZT17eyBncmlkVGVtcGxhdGVDb2x1bW5zOiBjb2xUZW1wbGF0ZSwgaGVpZ2h0OiAnMTAwJScgfX1cbiAgICA+XG4gICAgICB7c3RhcnR9XG4gICAgICB7Z3V0dGVyfVxuICAgICAge2VuZH1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cbiJdfQ==
@@ -0,0 +1,34 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { Span } from '../../trace-viewer/types';
3
+ import { type SpanSearchResult } from '../search';
4
+ import type { TimeMarker } from '../utils';
5
+ export declare const TIMELINE_PADDING_PX = 16;
6
+ declare const TimelineBar: import("react").NamedExoticComponent<{
7
+ span: Span;
8
+ viewStart: number;
9
+ viewDuration: number;
10
+ containerWidth: number;
11
+ isSelected: boolean;
12
+ isDimmed?: boolean;
13
+ onSelect: (spanId: string) => void;
14
+ }>;
15
+ export { TimelineBar };
16
+ export declare function TimelineHeader({ markers, hoverInfo, }: {
17
+ markers: TimeMarker[];
18
+ hoverInfo?: {
19
+ fraction: number;
20
+ label: string;
21
+ } | null;
22
+ }): ReactNode;
23
+ export declare function Timeline({ spans, viewStart, viewEnd, markers, selectedId, searchResult, onSelect, hoverFraction, altHeld, }: {
24
+ spans: Span[];
25
+ viewStart: number;
26
+ viewEnd: number;
27
+ markers: TimeMarker[];
28
+ selectedId: string | null;
29
+ searchResult: SpanSearchResult;
30
+ onSelect: (spanId: string) => void;
31
+ hoverFraction?: number | null;
32
+ altHeld?: boolean;
33
+ }): ReactNode;
34
+ //# sourceMappingURL=timeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeline.d.ts","sourceRoot":"","sources":["../../../../src/components/new-trace-viewer/components/timeline.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAiB,SAAS,EAAE,MAAM,OAAO,CAAC;AAGtD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAErD,OAAO,EAAwB,KAAK,gBAAgB,EAAE,MAAM,WAAW,CAAC;AACxE,OAAO,KAAK,EAA0B,UAAU,EAAE,MAAM,UAAU,CAAC;AAenE,eAAO,MAAM,mBAAmB,KAAK,CAAC;AA8OtC,QAAA,MAAM,WAAW;UAST,IAAI;eACC,MAAM;kBACH,MAAM;oBACJ,MAAM;gBACV,OAAO;eACR,OAAO;cACR,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI;EAmFlC,CAAC;AAEH,OAAO,EAAE,WAAW,EAAE,CAAC;AAiDvB,wBAAgB,cAAc,CAAC,EAC7B,OAAO,EACP,SAAS,GACV,EAAE;IACD,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,SAAS,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CACxD,GAAG,SAAS,CAwBZ;AAMD,wBAAgB,QAAQ,CAAC,EACvB,KAAK,EACL,SAAS,EACT,OAAO,EACP,OAAO,EACP,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,aAAa,EACb,OAAe,GAChB,EAAE;IACD,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,YAAY,EAAE,gBAAgB,CAAC;IAC/B,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,GAAG,SAAS,CA4FZ"}