@workflow/web-shared 5.0.0-beta.26 → 5.0.0-beta.27

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 (74) hide show
  1. package/dist/components/new-trace-viewer/components/detail-panel-width.d.ts +34 -0
  2. package/dist/components/new-trace-viewer/components/detail-panel-width.d.ts.map +1 -0
  3. package/dist/components/new-trace-viewer/components/detail-panel-width.js +67 -0
  4. package/dist/components/new-trace-viewer/components/detail-panel.d.ts +14 -0
  5. package/dist/components/new-trace-viewer/components/detail-panel.d.ts.map +1 -0
  6. package/dist/components/new-trace-viewer/components/detail-panel.js +122 -0
  7. package/dist/components/new-trace-viewer/components/draggable-border.d.ts +31 -0
  8. package/dist/components/new-trace-viewer/components/draggable-border.d.ts.map +1 -0
  9. package/dist/components/new-trace-viewer/components/draggable-border.js +140 -0
  10. package/dist/components/new-trace-viewer/components/middle-truncate/truncate.d.ts +1 -1
  11. package/dist/components/new-trace-viewer/components/middle-truncate/truncate.d.ts.map +1 -1
  12. package/dist/components/new-trace-viewer/components/middle-truncate/truncate.js +2 -2
  13. package/dist/components/new-trace-viewer/components/pane-constants.d.ts +14 -0
  14. package/dist/components/new-trace-viewer/components/pane-constants.d.ts.map +1 -0
  15. package/dist/components/new-trace-viewer/components/pane-constants.js +16 -0
  16. package/dist/components/new-trace-viewer/components/split-pane.d.ts +1 -4
  17. package/dist/components/new-trace-viewer/components/split-pane.d.ts.map +1 -1
  18. package/dist/components/new-trace-viewer/components/split-pane.js +18 -16
  19. package/dist/components/new-trace-viewer/components/timeline.d.ts +2 -2
  20. package/dist/components/new-trace-viewer/components/timeline.d.ts.map +1 -1
  21. package/dist/components/new-trace-viewer/components/trace-viewer-skeleton.d.ts.map +1 -1
  22. package/dist/components/new-trace-viewer/components/trace-viewer-skeleton.js +5 -2
  23. package/dist/components/new-trace-viewer/components/use-element-width.d.ts +8 -0
  24. package/dist/components/new-trace-viewer/components/use-element-width.d.ts.map +1 -0
  25. package/dist/components/new-trace-viewer/components/use-element-width.js +25 -0
  26. package/dist/components/new-trace-viewer/context.d.ts +2 -0
  27. package/dist/components/new-trace-viewer/context.d.ts.map +1 -1
  28. package/dist/components/new-trace-viewer/context.js +3 -2
  29. package/dist/components/new-trace-viewer/trace-viewer.d.ts.map +1 -1
  30. package/dist/components/new-trace-viewer/trace-viewer.js +10 -90
  31. package/dist/components/sidebar/attribute-panel.d.ts.map +1 -1
  32. package/dist/components/sidebar/attribute-panel.js +38 -35
  33. package/dist/components/sidebar/attributes-block.d.ts +18 -7
  34. package/dist/components/sidebar/attributes-block.d.ts.map +1 -1
  35. package/dist/components/sidebar/attributes-block.js +76 -18
  36. package/dist/components/sidebar/events-list.d.ts +1 -1
  37. package/dist/components/sidebar/events-list.d.ts.map +1 -1
  38. package/dist/components/sidebar/events-list.js +9 -10
  39. package/dist/components/trace-viewer/components/map.d.ts +2 -2
  40. package/dist/components/trace-viewer/components/map.d.ts.map +1 -1
  41. package/dist/components/trace-viewer/components/node.d.ts +7 -7
  42. package/dist/components/trace-viewer/components/node.d.ts.map +1 -1
  43. package/dist/components/ui/collapsible.d.ts +46 -0
  44. package/dist/components/ui/collapsible.d.ts.map +1 -0
  45. package/dist/components/ui/collapsible.js +66 -0
  46. package/dist/components/ui/data-inspector.js +2 -7
  47. package/dist/index.d.ts +2 -2
  48. package/dist/index.d.ts.map +1 -1
  49. package/dist/index.js +3 -3
  50. package/dist/lib/hydration.d.ts +12 -2
  51. package/dist/lib/hydration.d.ts.map +1 -1
  52. package/dist/lib/hydration.js +41 -18
  53. package/package.json +6 -6
  54. package/src/components/new-trace-viewer/components/detail-panel-width.test.ts +123 -0
  55. package/src/components/new-trace-viewer/components/detail-panel-width.ts +76 -0
  56. package/src/components/new-trace-viewer/components/detail-panel.tsx +272 -0
  57. package/src/components/new-trace-viewer/components/draggable-border.tsx +216 -0
  58. package/src/components/new-trace-viewer/components/middle-truncate/truncate.ts +1 -1
  59. package/src/components/new-trace-viewer/components/pane-constants.ts +19 -0
  60. package/src/components/new-trace-viewer/components/split-pane.tsx +44 -55
  61. package/src/components/new-trace-viewer/components/trace-viewer-skeleton.tsx +4 -1
  62. package/src/components/new-trace-viewer/components/use-element-width.ts +29 -0
  63. package/src/components/new-trace-viewer/context.tsx +4 -1
  64. package/src/components/new-trace-viewer/trace-viewer.tsx +18 -199
  65. package/src/components/sidebar/attribute-panel.tsx +106 -105
  66. package/src/components/sidebar/attributes-block.tsx +170 -50
  67. package/src/components/sidebar/events-list.tsx +107 -92
  68. package/src/components/ui/collapsible.tsx +219 -0
  69. package/src/index.ts +8 -7
  70. package/src/lib/hydration.ts +48 -25
  71. package/dist/components/sidebar/detail-card.d.ts +0 -13
  72. package/dist/components/sidebar/detail-card.d.ts.map +0 -1
  73. package/dist/components/sidebar/detail-card.js +0 -36
  74. package/src/components/sidebar/detail-card.tsx +0 -143
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Width model for the span detail panel: the stored value is the user's
3
+ * preferred width (absolute px, persisted to localStorage on explicit
4
+ * interaction only), while the container-relative maximum is applied at
5
+ * render time — so a width preferred on a wide screen survives a narrower
6
+ * session and restores when the viewer grows again.
7
+ */
8
+ /** Floor for the detail panel — matches the previous `clamp(280px, …)` floor. */
9
+ export declare const PANEL_MIN_WIDTH = 280;
10
+ /**
11
+ * Absolute ceiling enforced at the storage layer so a corrupt or stale stored
12
+ * value can never wedge the layout open.
13
+ */
14
+ export declare const PANEL_HARD_MAX_WIDTH = 1300;
15
+ /** Default width — matches the previous fixed 360px column. */
16
+ export declare const PANEL_DEFAULT_WIDTH = 360;
17
+ /**
18
+ * Width the main (event list + timeline) area keeps while the panel is
19
+ * resized or the container shrinks. Below `PANEL_MIN_WIDTH + MAIN_MIN_WIDTH`
20
+ * of container the panel gives way first, compressing below its own floor —
21
+ * the list and timeline stay usable at the panel's expense.
22
+ */
23
+ export declare const MAIN_MIN_WIDTH = 400;
24
+ export declare const PANEL_WIDTH_STORAGE_KEY = "workflow-trace-detail-panel-width";
25
+ export declare function computeMaxPanelWidth(availableWidth: number): number;
26
+ /**
27
+ * Note: when the container is too small to honor both floors
28
+ * (`availableWidth < PANEL_MIN_WIDTH + MAIN_MIN_WIDTH`), the max wins and the
29
+ * panel compresses below `PANEL_MIN_WIDTH`.
30
+ */
31
+ export declare function clampPanelWidth(width: number, availableWidth: number): number;
32
+ export declare function readStoredPanelWidth(): number;
33
+ export declare function writeStoredPanelWidth(width: number): void;
34
+ //# sourceMappingURL=detail-panel-width.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detail-panel-width.d.ts","sourceRoot":"","sources":["../../../../src/components/new-trace-viewer/components/detail-panel-width.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,iFAAiF;AACjF,eAAO,MAAM,eAAe,MAAM,CAAC;AAEnC;;;GAGG;AACH,eAAO,MAAM,oBAAoB,OAAO,CAAC;AAEzC,+DAA+D;AAC/D,eAAO,MAAM,mBAAmB,MAAM,CAAC;AAEvC;;;;;GAKG;AACH,eAAO,MAAM,cAAc,MAAM,CAAC;AAElC,eAAO,MAAM,uBAAuB,sCAAsC,CAAC;AAM3E,wBAAgB,oBAAoB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAMnE;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,CAE7E;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAY7C;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAUzD"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Width model for the span detail panel: the stored value is the user's
3
+ * preferred width (absolute px, persisted to localStorage on explicit
4
+ * interaction only), while the container-relative maximum is applied at
5
+ * render time — so a width preferred on a wide screen survives a narrower
6
+ * session and restores when the viewer grows again.
7
+ */
8
+ /** Floor for the detail panel — matches the previous `clamp(280px, …)` floor. */
9
+ export const PANEL_MIN_WIDTH = 280;
10
+ /**
11
+ * Absolute ceiling enforced at the storage layer so a corrupt or stale stored
12
+ * value can never wedge the layout open.
13
+ */
14
+ export const PANEL_HARD_MAX_WIDTH = 1300;
15
+ /** Default width — matches the previous fixed 360px column. */
16
+ export const PANEL_DEFAULT_WIDTH = 360;
17
+ /**
18
+ * Width the main (event list + timeline) area keeps while the panel is
19
+ * resized or the container shrinks. Below `PANEL_MIN_WIDTH + MAIN_MIN_WIDTH`
20
+ * of container the panel gives way first, compressing below its own floor —
21
+ * the list and timeline stay usable at the panel's expense.
22
+ */
23
+ export const MAIN_MIN_WIDTH = 400;
24
+ export const PANEL_WIDTH_STORAGE_KEY = 'workflow-trace-detail-panel-width';
25
+ function clamp(value, min, max) {
26
+ return Math.min(Math.max(value, min), max);
27
+ }
28
+ export function computeMaxPanelWidth(availableWidth) {
29
+ if (availableWidth <= 0)
30
+ return PANEL_HARD_MAX_WIDTH;
31
+ return Math.min(Math.max(availableWidth - MAIN_MIN_WIDTH, 0), PANEL_HARD_MAX_WIDTH);
32
+ }
33
+ /**
34
+ * Note: when the container is too small to honor both floors
35
+ * (`availableWidth < PANEL_MIN_WIDTH + MAIN_MIN_WIDTH`), the max wins and the
36
+ * panel compresses below `PANEL_MIN_WIDTH`.
37
+ */
38
+ export function clampPanelWidth(width, availableWidth) {
39
+ return clamp(width, PANEL_MIN_WIDTH, computeMaxPanelWidth(availableWidth));
40
+ }
41
+ export function readStoredPanelWidth() {
42
+ if (typeof window === 'undefined')
43
+ return PANEL_DEFAULT_WIDTH;
44
+ try {
45
+ const raw = window.localStorage.getItem(PANEL_WIDTH_STORAGE_KEY);
46
+ const value = raw ? Number(raw) : Number.NaN;
47
+ if (!Number.isFinite(value))
48
+ return PANEL_DEFAULT_WIDTH;
49
+ // Only enforce absolute bounds at the storage layer; the container-relative
50
+ // max is applied at render time (see module docs).
51
+ return clamp(value, PANEL_MIN_WIDTH, PANEL_HARD_MAX_WIDTH);
52
+ }
53
+ catch {
54
+ return PANEL_DEFAULT_WIDTH;
55
+ }
56
+ }
57
+ export function writeStoredPanelWidth(width) {
58
+ if (typeof window === 'undefined')
59
+ return;
60
+ try {
61
+ window.localStorage.setItem(PANEL_WIDTH_STORAGE_KEY, String(Math.round(width)));
62
+ }
63
+ catch {
64
+ // Best-effort (private mode, quota).
65
+ }
66
+ }
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0YWlsLXBhbmVsLXdpZHRoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbmV3LXRyYWNlLXZpZXdlci9jb21wb25lbnRzL2RldGFpbC1wYW5lbC13aWR0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxpRkFBaUY7QUFDakYsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLEdBQUcsQ0FBQztBQUVuQzs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUM7QUFFekMsK0RBQStEO0FBQy9ELE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLEdBQUcsQ0FBQztBQUV2Qzs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxHQUFHLENBQUM7QUFFbEMsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsbUNBQW1DLENBQUM7QUFFM0UsU0FBUyxLQUFLLENBQUMsS0FBYSxFQUFFLEdBQVcsRUFBRSxHQUFXO0lBQ3BELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM3QyxDQUFDO0FBRUQsTUFBTSxVQUFVLG9CQUFvQixDQUFDLGNBQXNCO0lBQ3pELElBQUksY0FBYyxJQUFJLENBQUM7UUFBRSxPQUFPLG9CQUFvQixDQUFDO0lBQ3JELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FDYixJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsR0FBRyxjQUFjLEVBQUUsQ0FBQyxDQUFDLEVBQzVDLG9CQUFvQixDQUNyQixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUFDLEtBQWEsRUFBRSxjQUFzQjtJQUNuRSxPQUFPLEtBQUssQ0FBQyxLQUFLLEVBQUUsZUFBZSxFQUFFLG9CQUFvQixDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7QUFDN0UsQ0FBQztBQUVELE1BQU0sVUFBVSxvQkFBb0I7SUFDbEMsSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXO1FBQUUsT0FBTyxtQkFBbUIsQ0FBQztJQUM5RCxJQUFJLENBQUM7UUFDSCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDO1FBQzdDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztZQUFFLE9BQU8sbUJBQW1CLENBQUM7UUFDeEQsNEVBQTRFO1FBQzVFLG1EQUFtRDtRQUNuRCxPQUFPLEtBQUssQ0FBQyxLQUFLLEVBQUUsZUFBZSxFQUFFLG9CQUFvQixDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sbUJBQW1CLENBQUM7SUFDN0IsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUscUJBQXFCLENBQUMsS0FBYTtJQUNqRCxJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVc7UUFBRSxPQUFPO0lBQzFDLElBQUksQ0FBQztRQUNILE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUN6Qix1QkFBdUIsRUFDdkIsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDMUIsQ0FBQztJQUNKLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxxQ0FBcUM7SUFDdkMsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFdpZHRoIG1vZGVsIGZvciB0aGUgc3BhbiBkZXRhaWwgcGFuZWw6IHRoZSBzdG9yZWQgdmFsdWUgaXMgdGhlIHVzZXInc1xuICogcHJlZmVycmVkIHdpZHRoIChhYnNvbHV0ZSBweCwgcGVyc2lzdGVkIHRvIGxvY2FsU3RvcmFnZSBvbiBleHBsaWNpdFxuICogaW50ZXJhY3Rpb24gb25seSksIHdoaWxlIHRoZSBjb250YWluZXItcmVsYXRpdmUgbWF4aW11bSBpcyBhcHBsaWVkIGF0XG4gKiByZW5kZXIgdGltZSDigJQgc28gYSB3aWR0aCBwcmVmZXJyZWQgb24gYSB3aWRlIHNjcmVlbiBzdXJ2aXZlcyBhIG5hcnJvd2VyXG4gKiBzZXNzaW9uIGFuZCByZXN0b3JlcyB3aGVuIHRoZSB2aWV3ZXIgZ3Jvd3MgYWdhaW4uXG4gKi9cblxuLyoqIEZsb29yIGZvciB0aGUgZGV0YWlsIHBhbmVsIOKAlCBtYXRjaGVzIHRoZSBwcmV2aW91cyBgY2xhbXAoMjgwcHgsIOKApilgIGZsb29yLiAqL1xuZXhwb3J0IGNvbnN0IFBBTkVMX01JTl9XSURUSCA9IDI4MDtcblxuLyoqXG4gKiBBYnNvbHV0ZSBjZWlsaW5nIGVuZm9yY2VkIGF0IHRoZSBzdG9yYWdlIGxheWVyIHNvIGEgY29ycnVwdCBvciBzdGFsZSBzdG9yZWRcbiAqIHZhbHVlIGNhbiBuZXZlciB3ZWRnZSB0aGUgbGF5b3V0IG9wZW4uXG4gKi9cbmV4cG9ydCBjb25zdCBQQU5FTF9IQVJEX01BWF9XSURUSCA9IDEzMDA7XG5cbi8qKiBEZWZhdWx0IHdpZHRoIOKAlCBtYXRjaGVzIHRoZSBwcmV2aW91cyBmaXhlZCAzNjBweCBjb2x1bW4uICovXG5leHBvcnQgY29uc3QgUEFORUxfREVGQVVMVF9XSURUSCA9IDM2MDtcblxuLyoqXG4gKiBXaWR0aCB0aGUgbWFpbiAoZXZlbnQgbGlzdCArIHRpbWVsaW5lKSBhcmVhIGtlZXBzIHdoaWxlIHRoZSBwYW5lbCBpc1xuICogcmVzaXplZCBvciB0aGUgY29udGFpbmVyIHNocmlua3MuIEJlbG93IGBQQU5FTF9NSU5fV0lEVEggKyBNQUlOX01JTl9XSURUSGBcbiAqIG9mIGNvbnRhaW5lciB0aGUgcGFuZWwgZ2l2ZXMgd2F5IGZpcnN0LCBjb21wcmVzc2luZyBiZWxvdyBpdHMgb3duIGZsb29yIOKAlFxuICogdGhlIGxpc3QgYW5kIHRpbWVsaW5lIHN0YXkgdXNhYmxlIGF0IHRoZSBwYW5lbCdzIGV4cGVuc2UuXG4gKi9cbmV4cG9ydCBjb25zdCBNQUlOX01JTl9XSURUSCA9IDQwMDtcblxuZXhwb3J0IGNvbnN0IFBBTkVMX1dJRFRIX1NUT1JBR0VfS0VZID0gJ3dvcmtmbG93LXRyYWNlLWRldGFpbC1wYW5lbC13aWR0aCc7XG5cbmZ1bmN0aW9uIGNsYW1wKHZhbHVlOiBudW1iZXIsIG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBNYXRoLm1pbihNYXRoLm1heCh2YWx1ZSwgbWluKSwgbWF4KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVNYXhQYW5lbFdpZHRoKGF2YWlsYWJsZVdpZHRoOiBudW1iZXIpOiBudW1iZXIge1xuICBpZiAoYXZhaWxhYmxlV2lkdGggPD0gMCkgcmV0dXJuIFBBTkVMX0hBUkRfTUFYX1dJRFRIO1xuICByZXR1cm4gTWF0aC5taW4oXG4gICAgTWF0aC5tYXgoYXZhaWxhYmxlV2lkdGggLSBNQUlOX01JTl9XSURUSCwgMCksXG4gICAgUEFORUxfSEFSRF9NQVhfV0lEVEhcbiAgKTtcbn1cblxuLyoqXG4gKiBOb3RlOiB3aGVuIHRoZSBjb250YWluZXIgaXMgdG9vIHNtYWxsIHRvIGhvbm9yIGJvdGggZmxvb3JzXG4gKiAoYGF2YWlsYWJsZVdpZHRoIDwgUEFORUxfTUlOX1dJRFRIICsgTUFJTl9NSU5fV0lEVEhgKSwgdGhlIG1heCB3aW5zIGFuZCB0aGVcbiAqIHBhbmVsIGNvbXByZXNzZXMgYmVsb3cgYFBBTkVMX01JTl9XSURUSGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGFtcFBhbmVsV2lkdGgod2lkdGg6IG51bWJlciwgYXZhaWxhYmxlV2lkdGg6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBjbGFtcCh3aWR0aCwgUEFORUxfTUlOX1dJRFRILCBjb21wdXRlTWF4UGFuZWxXaWR0aChhdmFpbGFibGVXaWR0aCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZFN0b3JlZFBhbmVsV2lkdGgoKTogbnVtYmVyIHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSByZXR1cm4gUEFORUxfREVGQVVMVF9XSURUSDtcbiAgdHJ5IHtcbiAgICBjb25zdCByYXcgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oUEFORUxfV0lEVEhfU1RPUkFHRV9LRVkpO1xuICAgIGNvbnN0IHZhbHVlID0gcmF3ID8gTnVtYmVyKHJhdykgOiBOdW1iZXIuTmFOO1xuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHZhbHVlKSkgcmV0dXJuIFBBTkVMX0RFRkFVTFRfV0lEVEg7XG4gICAgLy8gT25seSBlbmZvcmNlIGFic29sdXRlIGJvdW5kcyBhdCB0aGUgc3RvcmFnZSBsYXllcjsgdGhlIGNvbnRhaW5lci1yZWxhdGl2ZVxuICAgIC8vIG1heCBpcyBhcHBsaWVkIGF0IHJlbmRlciB0aW1lIChzZWUgbW9kdWxlIGRvY3MpLlxuICAgIHJldHVybiBjbGFtcCh2YWx1ZSwgUEFORUxfTUlOX1dJRFRILCBQQU5FTF9IQVJEX01BWF9XSURUSCk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBQQU5FTF9ERUZBVUxUX1dJRFRIO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVN0b3JlZFBhbmVsV2lkdGgod2lkdGg6IG51bWJlcik6IHZvaWQge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybjtcbiAgdHJ5IHtcbiAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oXG4gICAgICBQQU5FTF9XSURUSF9TVE9SQUdFX0tFWSxcbiAgICAgIFN0cmluZyhNYXRoLnJvdW5kKHdpZHRoKSlcbiAgICApO1xuICB9IGNhdGNoIHtcbiAgICAvLyBCZXN0LWVmZm9ydCAocHJpdmF0ZSBtb2RlLCBxdW90YSkuXG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,14 @@
1
+ import { type ReactNode, type RefObject } from 'react';
2
+ /**
3
+ * The span detail aside: content, prev/next/close header, J/K navigation, and
4
+ * the resizable left border with its width model (see detail-panel-width.ts).
5
+ *
6
+ * Always mounted — it renders null without a selection — so the panel width
7
+ * survives closing and reopening within a session.
8
+ */
9
+ export declare function TraceDetailPanel({ containerRef, onNavigateToSpan, onClose, }: {
10
+ containerRef: RefObject<HTMLDivElement | null>;
11
+ onNavigateToSpan: (spanId: string) => void;
12
+ onClose: () => void;
13
+ }): ReactNode;
14
+ //# sourceMappingURL=detail-panel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detail-panel.d.ts","sourceRoot":"","sources":["../../../../src/components/new-trace-viewer/components/detail-panel.tsx"],"names":[],"mappings":"AAIA,OAAO,EACL,KAAK,SAAS,EACd,KAAK,SAAS,EAMf,MAAM,OAAO,CAAC;AAiDf;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,YAAY,EACZ,gBAAgB,EAChB,OAAO,GACR,EAAE;IACD,YAAY,EAAE,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAC/C,gBAAgB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,GAAG,SAAS,CAmMZ"}
@@ -0,0 +1,122 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { parseStepName, parseWorkflowName } from '@workflow/utils/parse-name';
4
+ import { ChevronDown, ChevronUp, X } from 'lucide-react';
5
+ import { useCallback, useEffect, useMemo, useRef, useState, } from 'react';
6
+ import { filterSpanRawEvents } from '../../../lib/trace-builder';
7
+ import { ErrorBoundary } from '../../error-boundary';
8
+ import { EntityDetailPanel, } from '../../sidebar/entity-detail-panel';
9
+ import { useSidebarData } from '../../sidebar/sidebar-data-context';
10
+ import { IconButton } from '../../ui/icon-button';
11
+ import { Kbd } from '../../ui/kbd';
12
+ import { Tooltip, TooltipContent, TooltipTrigger } from '../../ui/tooltip';
13
+ import { useActiveSpan } from '../context';
14
+ import { clampPanelWidth, computeMaxPanelWidth, PANEL_DEFAULT_WIDTH, PANEL_MIN_WIDTH, readStoredPanelWidth, writeStoredPanelWidth, } from './detail-panel-width';
15
+ import { DraggableBorder } from './draggable-border';
16
+ import { useElementWidth } from './use-element-width';
17
+ const DETAIL_PANEL_ID = 'trace-detail-panel';
18
+ /** Bridge ActiveSpanContext + SidebarDataContext → SelectedSpanInfo. */
19
+ function useSelectedSpanInfo() {
20
+ const { activeSpan } = useActiveSpan();
21
+ const sidebar = useSidebarData();
22
+ return useMemo(() => {
23
+ if (!activeSpan)
24
+ return null;
25
+ const resource = activeSpan.attributes?.resource;
26
+ const rawEvents = filterSpanRawEvents(sidebar.events, resource, activeSpan.spanId);
27
+ return {
28
+ data: activeSpan.attributes?.data,
29
+ resource,
30
+ spanId: activeSpan.spanId,
31
+ rawEvents,
32
+ };
33
+ }, [activeSpan, sidebar]);
34
+ }
35
+ /**
36
+ * The span detail aside: content, prev/next/close header, J/K navigation, and
37
+ * the resizable left border with its width model (see detail-panel-width.ts).
38
+ *
39
+ * Always mounted — it renders null without a selection — so the panel width
40
+ * survives closing and reopening within a session.
41
+ */
42
+ export function TraceDetailPanel({ containerRef, onNavigateToSpan, onClose, }) {
43
+ const { activeSpan, activeSpanId, spans } = useActiveSpan();
44
+ const sidebar = useSidebarData();
45
+ const selectedSpan = useSelectedSpanInfo();
46
+ const isOpen = Boolean(activeSpan);
47
+ const [storedWidth, setStoredWidth] = useState(() => readStoredPanelWidth());
48
+ const containerWidth = useElementWidth(containerRef, isOpen);
49
+ const asideRef = useRef(null);
50
+ const handleResize = useCallback((next) => {
51
+ const clamped = clampPanelWidth(next, containerWidth);
52
+ setStoredWidth(clamped);
53
+ writeStoredPanelWidth(clamped);
54
+ }, [containerWidth]);
55
+ const panelWidth = clampPanelWidth(storedWidth, containerWidth);
56
+ const panelMaxWidth = Math.max(PANEL_MIN_WIDTH, computeMaxPanelWidth(containerWidth));
57
+ const { prevSpanId, nextSpanId } = useMemo(() => {
58
+ if (!activeSpanId)
59
+ return { prevSpanId: null, nextSpanId: null };
60
+ const i = spans.findIndex((s) => s.spanId === activeSpanId);
61
+ if (i === -1)
62
+ return { prevSpanId: null, nextSpanId: null };
63
+ return {
64
+ prevSpanId: spans[i - 1]?.spanId ?? null,
65
+ nextSpanId: spans[i + 1]?.spanId ?? null,
66
+ };
67
+ }, [activeSpanId, spans]);
68
+ const handleSelectPrev = useCallback(() => {
69
+ if (prevSpanId)
70
+ onNavigateToSpan(prevSpanId);
71
+ }, [prevSpanId, onNavigateToSpan]);
72
+ const handleSelectNext = useCallback(() => {
73
+ if (nextSpanId)
74
+ onNavigateToSpan(nextSpanId);
75
+ }, [nextSpanId, onNavigateToSpan]);
76
+ useEffect(() => {
77
+ if (!isOpen)
78
+ return;
79
+ const onKeyDown = (e) => {
80
+ if (e.key !== 'j' &&
81
+ e.key !== 'k' &&
82
+ e.key !== 'ArrowDown' &&
83
+ e.key !== 'ArrowUp') {
84
+ return;
85
+ }
86
+ const target = e.target;
87
+ if (target instanceof HTMLInputElement ||
88
+ target instanceof HTMLTextAreaElement ||
89
+ target?.isContentEditable) {
90
+ return;
91
+ }
92
+ const targetId = e.key === 'k' || e.key === 'ArrowUp' ? prevSpanId : nextSpanId;
93
+ if (targetId) {
94
+ e.preventDefault();
95
+ onNavigateToSpan(targetId);
96
+ }
97
+ };
98
+ window.addEventListener('keydown', onKeyDown);
99
+ return () => window.removeEventListener('keydown', onKeyDown);
100
+ }, [isOpen, prevSpanId, nextSpanId, onNavigateToSpan]);
101
+ // Derive the selected span name for the panel header
102
+ const selectedSpanName = useMemo(() => {
103
+ if (!selectedSpan?.data)
104
+ return 'Details';
105
+ const data = selectedSpan.data;
106
+ if (selectedSpan.resource === 'hook') {
107
+ return data.token ?? data.hookId;
108
+ }
109
+ const stepName = data.stepName;
110
+ const workflowName = data.workflowName;
111
+ return ((stepName ? parseStepName(stepName)?.shortName : undefined) ??
112
+ (workflowName ? parseWorkflowName(workflowName)?.shortName : undefined) ??
113
+ stepName ??
114
+ workflowName ??
115
+ data.hookId ??
116
+ 'Details');
117
+ }, [selectedSpan?.data, selectedSpan?.resource]);
118
+ if (!activeSpan)
119
+ return null;
120
+ return (_jsxs("aside", { ref: asideRef, id: DETAIL_PANEL_ID, className: "relative flex flex-col h-full max-h-full shrink-0 bg-background-100 border-l border-gray-alpha-400", style: { width: panelWidth }, children: [_jsx(DraggableBorder, { element: asideRef, position: "left", onWidthChange: handleResize, onReset: () => handleResize(PANEL_DEFAULT_WIDTH), "aria-label": "Resize span details panel", "aria-controls": DETAIL_PANEL_ID, "aria-valuemin": PANEL_MIN_WIDTH, "aria-valuemax": panelMaxWidth, "aria-valuenow": Math.min(Math.max(Math.round(panelWidth), PANEL_MIN_WIDTH), panelMaxWidth) }), _jsxs("div", { className: "flex items-center justify-between gap-2 shrink-0 px-4 py-[7.5px]", children: [_jsx("span", { className: "text-label-14 font-medium text-gray-1000 truncate block", children: selectedSpanName }), _jsxs("div", { className: "flex items-center gap-0.5 shrink-0", children: [_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx(IconButton, { "aria-label": "Navigate up", "aria-keyshortcuts": "K", onClick: handleSelectPrev, disabled: !prevSpanId, children: _jsx(ChevronUp, { className: "w-4 h-4" }) }) }), prevSpanId ? (_jsxs(TooltipContent, { children: ["Navigate up", _jsx(Kbd, { children: "K" })] })) : null] }), _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx(IconButton, { "aria-label": "Navigate down", "aria-keyshortcuts": "J", onClick: handleSelectNext, disabled: !nextSpanId, children: _jsx(ChevronDown, { className: "w-4 h-4" }) }) }), nextSpanId ? (_jsxs(TooltipContent, { children: ["Navigate down", _jsx(Kbd, { children: "J" })] })) : null] }), _jsx("div", { "aria-hidden": true, className: "w-px h-4 bg-gray-alpha-400 mx-1" }), _jsx(IconButton, { "aria-label": "Close span details", "aria-keyshortcuts": "Escape", onClick: onClose, children: _jsx(X, { className: "w-4 h-4" }) })] })] }), _jsx("div", { className: "flex-1 overflow-y-auto", children: _jsx(ErrorBoundary, { children: _jsx(EntityDetailPanel, { run: sidebar.run, onStreamClick: sidebar.onStreamClick, onRunClick: sidebar.onRunClick, fetchSpanDetail: sidebar.fetchSpanDetail, onWakeUpSleep: sidebar.onWakeUpSleep, onLoadEventData: sidebar.onLoadEventData, onResolveHook: sidebar.onResolveHook, encryptionKey: sidebar.encryptionKey, onDecrypt: sidebar.onDecrypt, isDecrypting: sidebar.isDecrypting, selectedSpan: selectedSpan, showSeparateEventOccurrenceTimestamps: sidebar.showSeparateEventOccurrenceTimestamps }) }) })] }));
121
+ }
122
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0YWlsLXBhbmVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbmV3LXRyYWNlLXZpZXdlci9jb21wb25lbnRzL2RldGFpbC1wYW5lbC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOztBQUViLE9BQU8sRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RSxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekQsT0FBTyxFQUdMLFdBQVcsRUFDWCxTQUFTLEVBQ1QsT0FBTyxFQUNQLE1BQU0sRUFDTixRQUFRLEdBQ1QsTUFBTSxPQUFPLENBQUM7QUFDZixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDckQsT0FBTyxFQUNMLGlCQUFpQixHQUVsQixNQUFNLG1DQUFtQyxDQUFDO0FBQzNDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNuQyxPQUFPLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMzRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzNDLE9BQU8sRUFDTCxlQUFlLEVBQ2Ysb0JBQW9CLEVBQ3BCLG1CQUFtQixFQUNuQixlQUFlLEVBQ2Ysb0JBQW9CLEVBQ3BCLHFCQUFxQixHQUN0QixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxPQUFPLEVB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WSxHQUNaLElBQ0EsQ0FDVCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0IHsgcGFyc2VTdGVwTmFtZSwgcGFyc2VXb3JrZmxvd05hbWUgfSBmcm9tICdAd29ya2Zsb3cvdXRpbHMvcGFyc2UtbmFtZSc7XG5pbXBvcnQgeyBDaGV2cm9uRG93biwgQ2hldnJvblVwLCBYIH0gZnJvbSAnbHVjaWRlLXJlYWN0JztcbmltcG9ydCB7XG4gIHR5cGUgUmVhY3ROb2RlLFxuICB0eXBlIFJlZk9iamVjdCxcbiAgdXNlQ2FsbGJhY2ssXG4gIHVzZUVmZmVjdCxcbiAgdXNlTWVtbyxcbiAgdXNlUmVmLFxuICB1c2VTdGF0ZSxcbn0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgZmlsdGVyU3BhblJhd0V2ZW50cyB9IGZyb20gJy4uLy4uLy4uL2xpYi90cmFjZS1idWlsZGVyJztcbmltcG9ydCB7IEVycm9yQm91bmRhcnkgfSBmcm9tICcuLi8uLi9lcnJvci1ib3VuZGFyeSc7XG5pbXBvcnQge1xuICBFbnRpdHlEZXRhaWxQYW5lbCxcbiAgdHlwZSBTZWxlY3RlZFNwYW5JbmZvLFxufSBmcm9tICcuLi8uLi9zaWRlYmFyL2VudGl0eS1kZXRhaWwtcGFuZWwnO1xuaW1wb3J0IHsgdXNlU2lkZWJhckRhdGEgfSBmcm9tICcuLi8uLi9zaWRlYmFyL3NpZGViYXItZGF0YS1jb250ZXh0JztcbmltcG9ydCB7IEljb25CdXR0b24gfSBmcm9tICcuLi8uLi91aS9pY29uLWJ1dHRvbic7XG5pbXBvcnQgeyBLYmQgfSBmcm9tICcuLi8uLi91aS9rYmQnO1xuaW1wb3J0IHsgVG9vbHRpcCwgVG9vbHRpcENvbnRlbnQsIFRvb2x0aXBUcmlnZ2VyIH0gZnJvbSAnLi4vLi4vdWkvdG9vbHRpcCc7XG5pbXBvcnQgeyB1c2VBY3RpdmVTcGFuIH0gZnJvbSAnLi4vY29udGV4dCc7XG5pbXBvcnQge1xuICBjbGFtcFBhbmVsV2lkdGgsXG4gIGNvbXB1dGVNYXhQYW5lbFdpZHRoLFxuICBQQU5FTF9ERUZBVUxUX1dJRFRILFxuICBQQU5FTF9NSU5fV0lEVEgsXG4gIHJlYWRTdG9yZWRQYW5lbFdpZHRoLFxuICB3cml0ZVN0b3JlZFBhbmVsV2lkdGgsXG59IGZyb20gJy4vZGV0YWlsLXBhbmVsLXdpZHRoJztcbmltcG9ydCB7IERyYWdnYWJsZUJvcmRlciB9IGZyb20gJy4vZHJhZ2dhYmxlLWJvcmRlcic7XG5pbXBvcnQgeyB1c2VFbGVtZW50V2lkdGggfSBmcm9tICcuL3VzZS1lbGVtZW50LXdpZHRoJztcblxuY29uc3QgREVUQUlMX1BBTkVMX0lEID0gJ3RyYWNlLWRldGFpbC1wYW5lbCc7XG5cbi8qKiBCcmlkZ2UgQWN0aXZlU3BhbkNvbnRleHQgKyBTaWRlYmFyRGF0YUNvbnRleHQg4oaSIFNlbGVjdGVkU3BhbkluZm8uICovXG5mdW5jdGlvbiB1c2VTZWxlY3RlZFNwYW5JbmZvKCk6IFNlbGVjdGVkU3BhbkluZm8gfCBudWxsIHtcbiAgY29uc3QgeyBhY3RpdmVTcGFuIH0gPSB1c2VBY3RpdmVTcGFuKCk7XG4gIGNvbnN0IHNpZGViYXIgPSB1c2VTaWRlYmFyRGF0YSgpO1xuXG4gIHJldHVybiB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoIWFjdGl2ZVNwYW4pIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgcmVzb3VyY2UgPSBhY3RpdmVTcGFuLmF0dHJpYnV0ZXM/LnJlc291cmNlIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCByYXdFdmVudHMgPSBmaWx0ZXJTcGFuUmF3RXZlbnRzKFxuICAgICAgc2lkZWJhci5ldmVudHMsXG4gICAgICByZXNvdXJjZSxcbiAgICAgIGFjdGl2ZVNwYW4uc3BhbklkXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICBkYXRhOiBhY3RpdmVTcGFuLmF0dHJpYnV0ZXM/LmRhdGEsXG4gICAgICByZXNvdXJjZSxcbiAgICAgIHNwYW5JZDogYWN0aXZlU3Bhbi5zcGFuSWQsXG4gICAgICByYXdFdmVudHMsXG4gICAgfTtcbiAgfSwgW2FjdGl2ZVNwYW4sIHNpZGViYXJdKTtcbn1cblxuLyoqXG4gKiBUaGUgc3BhbiBkZXRhaWwgYXNpZGU6IGNvbnRlbnQsIHByZXYvbmV4dC9jbG9zZSBoZWFkZXIsIEovSyBuYXZpZ2F0aW9uLCBhbmRcbiAqIHRoZSByZXNpemFibGUgbGVmdCBib3JkZXIgd2l0aCBpdHMgd2lkdGggbW9kZWwgKHNlZSBkZXRhaWwtcGFuZWwtd2lkdGgudHMpLlxuICpcbiAqIEFsd2F5cyBtb3VudGVkIOKAlCBpdCByZW5kZXJzIG51bGwgd2l0aG91dCBhIHNlbGVjdGlvbiDigJQgc28gdGhlIHBhbmVsIHdpZHRoXG4gKiBzdXJ2aXZlcyBjbG9zaW5nIGFuZCByZW9wZW5pbmcgd2l0aGluIGEgc2Vzc2lvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFRyYWNlRGV0YWlsUGFuZWwoe1xuICBjb250YWluZXJSZWYsXG4gIG9uTmF2aWdhdGVUb1NwYW4sXG4gIG9uQ2xvc2UsXG59OiB7XG4gIGNvbnRhaW5lclJlZjogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50IHwgbnVsbD47XG4gIG9uTmF2aWdhdGVUb1NwYW46IChzcGFuSWQ6IHN0cmluZykgPT4gdm9pZDtcbiAgb25DbG9zZTogKCkgPT4gdm9pZDtcbn0pOiBSZWFjdE5vZGUge1xuICBjb25zdCB7IGFjdGl2ZVNwYW4sIGFjdGl2ZVNwYW5JZCwgc3BhbnMgfSA9IHVzZUFjdGl2ZVNwYW4oKTtcbiAgY29uc3Qgc2lkZWJhciA9IHVzZVNpZGViYXJEYXRhKCk7XG4gIGNvbnN0IHNlbGVjdGVkU3BhbiA9IHVzZVNlbGVjdGVkU3BhbkluZm8oKTtcbiAgY29uc3QgaXNPcGVuID0gQm9vbGVhbihhY3RpdmVTcGFuKTtcblxuICBjb25zdCBbc3RvcmVkV2lkdGgsIHNldFN0b3JlZFdpZHRoXSA9IHVzZVN0YXRlPG51bWJlcj4oKCkgPT5cbiAgICByZWFkU3RvcmVkUGFuZWxXaWR0aCgpXG4gICk7XG4gIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gdXNlRWxlbWVudFdpZHRoKGNvbnRhaW5lclJlZiwgaXNPcGVuKTtcbiAgY29uc3QgYXNpZGVSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQgfCBudWxsPihudWxsKTtcblxuICBjb25zdCBoYW5kbGVSZXNpemUgPSB1c2VDYWxsYmFjayhcbiAgICAobmV4dDogbnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCBjbGFtcGVkID0gY2xhbXBQYW5lbFdpZHRoKG5leHQsIGNvbnRhaW5lcldpZHRoKTtcbiAgICAgIHNldFN0b3JlZFdpZHRoKGNsYW1wZWQpO1xuICAgICAgd3JpdGVTdG9yZWRQYW5lbFdpZHRoKGNsYW1wZWQpO1xuICAgIH0sXG4gICAgW2NvbnRhaW5lcldpZHRoXVxuICApO1xuXG4gIGNvbnN0IHBhbmVsV2lkdGggPSBjbGFtcFBhbmVsV2lkdGgoc3RvcmVkV2lkdGgsIGNvbnRhaW5lcldpZHRoKTtcbiAgY29uc3QgcGFuZWxNYXhXaWR0aCA9IE1hdGgubWF4KFxuICAgIFBBTkVMX01JTl9XSURUSCxcbiAgICBjb21wdXRlTWF4UGFuZWxXaWR0aChjb250YWluZXJXaWR0aClcbiAgKTtcblxuICBjb25zdCB7IHByZXZTcGFuSWQsIG5leHRTcGFuSWQgfSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghYWN0aXZlU3BhbklkKSByZXR1cm4geyBwcmV2U3BhbklkOiBudWxsLCBuZXh0U3BhbklkOiBudWxsIH07XG4gICAgY29uc3QgaSA9IHNwYW5zLmZpbmRJbmRleCgocykgPT4gcy5zcGFuSWQgPT09IGFjdGl2ZVNwYW5JZCk7XG4gICAgaWYgKGkgPT09IC0xKSByZXR1cm4geyBwcmV2U3BhbklkOiBudWxsLCBuZXh0U3BhbklkOiBudWxsIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByZXZTcGFuSWQ6IHNwYW5zW2kgLSAxXT8uc3BhbklkID8/IG51bGwsXG4gICAgICBuZXh0U3BhbklkOiBzcGFuc1tpICsgMV0/LnNwYW5JZCA/PyBudWxsLFxuICAgIH07XG4gIH0sIFthY3RpdmVTcGFuSWQsIHNwYW5zXSk7XG5cbiAgY29uc3QgaGFuZGxlU2VsZWN0UHJldiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAocHJldlNwYW5JZCkgb25OYXZpZ2F0ZVRvU3BhbihwcmV2U3BhbklkKTtcbiAgfSwgW3ByZXZTcGFuSWQsIG9uTmF2aWdhdGVUb1NwYW5dKTtcblxuICBjb25zdCBoYW5kbGVTZWxlY3ROZXh0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChuZXh0U3BhbklkKSBvbk5hdmlnYXRlVG9TcGFuKG5leHRTcGFuSWQpO1xuICB9LCBbbmV4dFNwYW5JZCwgb25OYXZpZ2F0ZVRvU3Bhbl0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc09wZW4pIHJldHVybjtcblxuICAgIGNvbnN0IG9uS2V5RG93biA9IChlOiBLZXlib2FyZEV2ZW50KTogdm9pZCA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIGUua2V5ICE9PSAnaicgJiZcbiAgICAgICAgZS5rZXkgIT09ICdrJyAmJlxuICAgICAgICBlLmtleSAhPT0gJ0Fycm93RG93bicgJiZcbiAgICAgICAgZS5rZXkgIT09ICdBcnJvd1VwJ1xuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHRhcmdldCA9IGUudGFyZ2V0IGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcbiAgICAgIGlmIChcbiAgICAgICAgdGFyZ2V0IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCB8fFxuICAgICAgICB0YXJnZXQgaW5zdGFuY2VvZiBIVE1MVGV4dEFyZWFFbGVtZW50IHx8XG4gICAgICAgIHRhcmdldD8uaXNDb250ZW50RWRpdGFibGVcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCB0YXJnZXRJZCA9XG4gICAgICAgIGUua2V5ID09PSAnaycgfHwgZS5rZXkgPT09ICdBcnJvd1VwJyA/IHByZXZTcGFuSWQgOiBuZXh0U3BhbklkO1xuICAgICAgaWYgKHRhcmdldElkKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgb25OYXZpZ2F0ZVRvU3Bhbih0YXJnZXRJZCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgb25LZXlEb3duKTtcbiAgICByZXR1cm4gKCkgPT4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBvbktleURvd24pO1xuICB9LCBbaXNPcGVuLCBwcmV2U3BhbklkLCBuZXh0U3BhbklkLCBvbk5hdmlnYXRlVG9TcGFuXSk7XG5cbiAgLy8gRGVyaXZlIHRoZSBzZWxlY3RlZCBzcGFuIG5hbWUgZm9yIHRoZSBwYW5lbCBoZWFkZXJcbiAgY29uc3Qgc2VsZWN0ZWRTcGFuTmFtZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghc2VsZWN0ZWRTcGFuPy5kYXRhKSByZXR1cm4gJ0RldGFpbHMnO1xuICAgIGNvbnN0IGRhdGEgPSBzZWxlY3RlZFNwYW4uZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBpZiAoc2VsZWN0ZWRTcGFuLnJlc291cmNlID09PSAnaG9vaycpIHtcbiAgICAgIHJldHVybiAoZGF0YS50b2tlbiBhcyBzdHJpbmcgfCB1bmRlZmluZWQpID8/IChkYXRhLmhvb2tJZCBhcyBzdHJpbmcpO1xuICAgIH1cblxuICAgIGNvbnN0IHN0ZXBOYW1lID0gZGF0YS5zdGVwTmFtZSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgY29uc3Qgd29ya2Zsb3dOYW1lID0gZGF0YS53b3JrZmxvd05hbWUgYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHJldHVybiAoXG4gICAgICAoc3RlcE5hbWUgPyBwYXJzZVN0ZXBOYW1lKHN0ZXBOYW1lKT8uc2hvcnROYW1lIDogdW5kZWZpbmVkKSA/P1xuICAgICAgKHdvcmtmbG93TmFtZSA/IHBhcnNlV29ya2Zsb3dOYW1lKHdvcmtmbG93TmFtZSk/LnNob3J0TmFtZSA6IHVuZGVmaW5lZCkgPz9cbiAgICAgIHN0ZXBOYW1lID8/XG4gICAgICB3b3JrZmxvd05hbWUgPz9cbiAgICAgIChkYXRhLmhvb2tJZCBhcyBzdHJpbmcpID8/XG4gICAgICAnRGV0YWlscydcbiAgICApO1xuICB9LCBbc2VsZWN0ZWRTcGFuPy5kYXRhLCBzZWxlY3RlZFNwYW4/LnJlc291cmNlXSk7XG5cbiAgaWYgKCFhY3RpdmVTcGFuKSByZXR1cm4gbnVsbDtcblxuICByZXR1cm4gKFxuICAgIDxhc2lkZVxuICAgICAgcmVmPXthc2lkZVJlZn1cbiAgICAgIGlkPXtERVRBSUxfUEFORUxfSUR9XG4gICAgICBjbGFzc05hbWU9XCJyZWxhdGl2ZSBmbGV4IGZsZXgtY29sIGgtZnVsbCBtYXgtaC1mdWxsIHNocmluay0wIGJnLWJhY2tncm91bmQtMTAwIGJvcmRlci1sIGJvcmRlci1ncmF5LWFscGhhLTQwMFwiXG4gICAgICBzdHlsZT17eyB3aWR0aDogcGFuZWxXaWR0aCB9fVxuICAgID5cbiAgICAgIDxEcmFnZ2FibGVCb3JkZXJcbiAgICAgICAgZWxlbWVudD17YXNpZGVSZWZ9XG4gICAgICAgIHBvc2l0aW9uPVwibGVmdFwiXG4gICAgICAgIG9uV2lkdGhDaGFuZ2U9e2hhbmRsZVJlc2l6ZX1cbiAgICAgICAgb25SZXNldD17KCkgPT4gaGFuZGxlUmVzaXplKFBBTkVMX0RFRkFVTFRfV0lEVEgpfVxuICAgICAgICBhcmlhLWxhYmVsPVwiUmVzaXplIHNwYW4gZGV0YWlscyBwYW5lbFwiXG4gICAgICAgIGFyaWEtY29udHJvbHM9e0RFVEFJTF9QQU5FTF9JRH1cbiAgICAgICAgYXJpYS12YWx1ZW1pbj17UEFORUxfTUlOX1dJRFRIfVxuICAgICAgICBhcmlhLXZhbHVlbWF4PXtwYW5lbE1heFdpZHRofVxuICAgICAgICBhcmlhLXZhbHVlbm93PXtNYXRoLm1pbihcbiAgICAgICAgICBNYXRoLm1heChNYXRoLnJvdW5kKHBhbmVsV2lkdGgpLCBQQU5FTF9NSU5fV0lEVEgpLFxuICAgICAgICAgIHBhbmVsTWF4V2lkdGhcbiAgICAgICAgKX1cbiAgICAgIC8+XG4gICAgICB7LyogUGFuZWwgaGVhZGVyICovfVxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIgc2hyaW5rLTAgcHgtNCBweS1bNy41cHhdXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtbGFiZWwtMTQgZm9udC1tZWRpdW0gdGV4dC1ncmF5LTEwMDAgdHJ1bmNhdGUgYmxvY2tcIj5cbiAgICAgICAgICB7c2VsZWN0ZWRTcGFuTmFtZX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0wLjUgc2hyaW5rLTBcIj5cbiAgICAgICAgICA8VG9vbHRpcD5cbiAgICAgICAgICAgIDxUb29sdGlwVHJpZ2dlciBhc0NoaWxkPlxuICAgICAgICAgICAgICA8SWNvbkJ1dHRvblxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJOYXZpZ2F0ZSB1cFwiXG4gICAgICAgICAgICAgICAgYXJpYS1rZXlzaG9ydGN1dHM9XCJLXCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVTZWxlY3RQcmV2fVxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXshcHJldlNwYW5JZH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxDaGV2cm9uVXAgY2xhc3NOYW1lPVwidy00IGgtNFwiIC8+XG4gICAgICAgICAgICAgIDwvSWNvbkJ1dHRvbj5cbiAgICAgICAgICAgIDwvVG9vbHRpcFRyaWdnZXI+XG4gICAgICAgICAgICB7cHJldlNwYW5JZCA/IChcbiAgICAgICAgICAgICAgPFRvb2x0aXBDb250ZW50PlxuICAgICAgICAgICAgICAgIE5hdmlnYXRlIHVwXG4gICAgICAgICAgICAgICAgPEtiZD5LPC9LYmQ+XG4gICAgICAgICAgICAgIDwvVG9vbHRpcENvbnRlbnQ+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgPFRvb2x0aXA+XG4gICAgICAgICAgICA8VG9vbHRpcFRyaWdnZXIgYXNDaGlsZD5cbiAgICAgICAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiTmF2aWdhdGUgZG93blwiXG4gICAgICAgICAgICAgICAgYXJpYS1rZXlzaG9ydGN1dHM9XCJKXCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVTZWxlY3ROZXh0fVxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXshbmV4dFNwYW5JZH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxDaGV2cm9uRG93biBjbGFzc05hbWU9XCJ3LTQgaC00XCIgLz5cbiAgICAgICAgICAgICAgPC9JY29uQnV0dG9uPlxuICAgICAgICAgICAgPC9Ub29sdGlwVHJpZ2dlcj5cbiAgICAgICAgICAgIHtuZXh0U3BhbklkID8gKFxuICAgICAgICAgICAgICA8VG9vbHRpcENvbnRlbnQ+XG4gICAgICAgICAgICAgICAgTmF2aWdhdGUgZG93blxuICAgICAgICAgICAgICAgIDxLYmQ+SjwvS2JkPlxuICAgICAgICAgICAgICA8L1Rvb2x0aXBDb250ZW50PlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgIDxkaXYgYXJpYS1oaWRkZW4gY2xhc3NOYW1lPVwidy1weCBoLTQgYmctZ3JheS1hbHBoYS00MDAgbXgtMVwiIC8+XG4gICAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJDbG9zZSBzcGFuIGRldGFpbHNcIlxuICAgICAgICAgICAgYXJpYS1rZXlzaG9ydGN1dHM9XCJFc2NhcGVcIlxuICAgICAgICAgICAgb25DbGljaz17b25DbG9zZX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8WCBjbGFzc05hbWU9XCJ3LTQgaC00XCIgLz5cbiAgICAgICAgICA8L0ljb25CdXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICB7LyogUGFuZWwgYm9keSAqL31cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIG92ZXJmbG93LXktYXV0b1wiPlxuICAgICAgICA8RXJyb3JCb3VuZGFyeT5cbiAgICAgICAgICA8RW50aXR5RGV0YWlsUGFuZWxcbiAgICAgICAgICAgIHJ1bj17c2lkZWJhci5ydW59XG4gICAgICAgICAgICBvblN0cmVhbUNsaWNrPXtzaWRlYmFyLm9uU3RyZWFtQ2xpY2t9XG4gICAgICAgICAgICBvblJ1bkNsaWNrPXtzaWRlYmFyLm9uUnVuQ2xpY2t9XG4gICAgICAgICAgICBmZXRjaFNwYW5EZXRhaWw9e3NpZGViYXIuZmV0Y2hTcGFuRGV0YWlsfVxuICAgICAgICAgICAgb25XYWtlVXBTbGVlcD17c2lkZWJhci5vbldha2VVcFNsZWVwfVxuICAgICAgICAgICAgb25Mb2FkRXZlbnREYXRhPXtzaWRlYmFyLm9uTG9hZEV2ZW50RGF0YX1cbiAgICAgICAgICAgIG9uUmVzb2x2ZUhvb2s9e3NpZGViYXIub25SZXNvbHZlSG9va31cbiAgICAgICAgICAgIGVuY3J5cHRpb25LZXk9e3NpZGViYXIuZW5jcnlwdGlvbktleX1cbiAgICAgICAgICAgIG9uRGVjcnlwdD17c2lkZWJhci5vbkRlY3J5cHR9XG4gICAgICAgICAgICBpc0RlY3J5cHRpbmc9e3NpZGViYXIuaXNEZWNyeXB0aW5nfVxuICAgICAgICAgICAgc2VsZWN0ZWRTcGFuPXtzZWxlY3RlZFNwYW59XG4gICAgICAgICAgICBzaG93U2VwYXJhdGVFdmVudE9jY3VycmVuY2VUaW1lc3RhbXBzPXtcbiAgICAgICAgICAgICAgc2lkZWJhci5zaG93U2VwYXJhdGVFdmVudE9jY3VycmVuY2VUaW1lc3RhbXBzXG4gICAgICAgICAgICB9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9FcnJvckJvdW5kYXJ5PlxuICAgICAgPC9kaXY+XG4gICAgPC9hc2lkZT5cbiAgKTtcbn1cbiJdfQ==
@@ -0,0 +1,31 @@
1
+ import { type RefObject } from 'react';
2
+ interface DraggableBorderProps {
3
+ /** The panel whose width this border adjusts (measured on interaction). */
4
+ element: RefObject<HTMLElement | null>;
5
+ /** Which edge of the panel the border sits on. */
6
+ position: 'left' | 'right';
7
+ /**
8
+ * Called with the next width (px) while dragging or keyboard-resizing.
9
+ * The owner is responsible for clamping.
10
+ */
11
+ onWidthChange: (width: number) => void;
12
+ /** Double-click reset. */
13
+ onReset?: () => void;
14
+ 'aria-label': string;
15
+ 'aria-controls'?: string;
16
+ 'aria-valuemin'?: number;
17
+ 'aria-valuemax'?: number;
18
+ 'aria-valuenow'?: number;
19
+ }
20
+ /**
21
+ * Overlay drag handle straddling a panel edge: an invisible strip over the
22
+ * panel's border whose center line highlights on hover/drag, with
23
+ * double-click reset, pointer-capture dragging (works with touch/pen, no
24
+ * ghost image), and keyboard/ARIA window-splitter support.
25
+ *
26
+ * The panel's positioning ancestor must not clip overflow — the strip hangs
27
+ * ~8px past the panel edge.
28
+ */
29
+ export declare function DraggableBorder({ element, position, onWidthChange, onReset, 'aria-label': ariaLabel, 'aria-controls': ariaControls, 'aria-valuemin': ariaValueMin, 'aria-valuemax': ariaValueMax, 'aria-valuenow': ariaValueNow, }: DraggableBorderProps): import("react/jsx-runtime").JSX.Element;
30
+ export {};
31
+ //# sourceMappingURL=draggable-border.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"draggable-border.d.ts","sourceRoot":"","sources":["../../../../src/components/new-trace-viewer/components/draggable-border.tsx"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,SAAS,EAIf,MAAM,OAAO,CAAC;AAGf,UAAU,oBAAoB;IAC5B,2EAA2E;IAC3E,OAAO,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IACvC,kDAAkD;IAClD,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3B;;;OAGG;IACH,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,0BAA0B;IAC1B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,EAC9B,OAAO,EACP,QAAQ,EACR,aAAa,EACb,OAAO,EACP,YAAY,EAAE,SAAS,EACvB,eAAe,EAAE,YAAY,EAC7B,eAAe,EAAE,YAAY,EAC7B,eAAe,EAAE,YAAY,EAC7B,eAAe,EAAE,YAAY,GAC9B,EAAE,oBAAoB,2CAqKtB"}
@@ -0,0 +1,140 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { useEffect, useRef, useState, } from 'react';
4
+ import { cn } from '../../../lib/cn';
5
+ /**
6
+ * Overlay drag handle straddling a panel edge: an invisible strip over the
7
+ * panel's border whose center line highlights on hover/drag, with
8
+ * double-click reset, pointer-capture dragging (works with touch/pen, no
9
+ * ghost image), and keyboard/ARIA window-splitter support.
10
+ *
11
+ * The panel's positioning ancestor must not clip overflow — the strip hangs
12
+ * ~8px past the panel edge.
13
+ */
14
+ export function DraggableBorder({ element, position, onWidthChange, onReset, 'aria-label': ariaLabel, 'aria-controls': ariaControls, 'aria-valuemin': ariaValueMin, 'aria-valuemax': ariaValueMax, 'aria-valuenow': ariaValueNow, }) {
15
+ const [isDragging, setIsDragging] = useState(false);
16
+ const pointerIdRef = useRef(null);
17
+ const startXRef = useRef(0);
18
+ const startWidthRef = useRef(0);
19
+ const pendingWidthRef = useRef(0);
20
+ const rafRef = useRef(null);
21
+ const movedRef = useRef(false);
22
+ const lastDragEndAtRef = useRef(0);
23
+ useEffect(() => {
24
+ return () => {
25
+ if (rafRef.current)
26
+ cancelAnimationFrame(rafRef.current);
27
+ };
28
+ }, []);
29
+ // Suppress text selection for the duration of a drag. Effect cleanup also
30
+ // covers the handle unmounting mid-drag (e.g. Escape closing the panel).
31
+ useEffect(() => {
32
+ if (!isDragging)
33
+ return;
34
+ const previous = document.body.style.userSelect;
35
+ document.body.style.userSelect = 'none';
36
+ return () => {
37
+ document.body.style.userSelect = previous;
38
+ };
39
+ }, [isDragging]);
40
+ const stopDrag = () => {
41
+ pointerIdRef.current = null;
42
+ setIsDragging(false);
43
+ if (rafRef.current) {
44
+ cancelAnimationFrame(rafRef.current);
45
+ rafRef.current = null;
46
+ // Flush the final position that was still waiting on the next frame.
47
+ if (movedRef.current)
48
+ onWidthChange(pendingWidthRef.current);
49
+ }
50
+ if (movedRef.current) {
51
+ movedRef.current = false;
52
+ lastDragEndAtRef.current = performance.now();
53
+ }
54
+ };
55
+ const handlePointerDown = (e) => {
56
+ // Ignore secondary pointers (e.g. a second finger) while a drag is active
57
+ // so they can't re-baseline the gesture.
58
+ if (pointerIdRef.current !== null)
59
+ return;
60
+ const el = element.current;
61
+ if (!el)
62
+ return;
63
+ if (e.pointerType === 'mouse' && e.button !== 0)
64
+ return;
65
+ e.currentTarget.setPointerCapture(e.pointerId);
66
+ pointerIdRef.current = e.pointerId;
67
+ startXRef.current = e.clientX;
68
+ startWidthRef.current = el.offsetWidth;
69
+ movedRef.current = false;
70
+ setIsDragging(true);
71
+ };
72
+ // Pointer capture routes move/up events to the strip itself, so no
73
+ // document-level listeners are needed.
74
+ const handlePointerMove = (e) => {
75
+ if (pointerIdRef.current !== e.pointerId)
76
+ return;
77
+ if (Math.abs(e.clientX - startXRef.current) > 4) {
78
+ movedRef.current = true;
79
+ }
80
+ const delta = position === 'left'
81
+ ? startXRef.current - e.clientX
82
+ : e.clientX - startXRef.current;
83
+ pendingWidthRef.current = startWidthRef.current + delta;
84
+ if (!rafRef.current) {
85
+ rafRef.current = requestAnimationFrame(() => {
86
+ rafRef.current = null;
87
+ onWidthChange(pendingWidthRef.current);
88
+ });
89
+ }
90
+ };
91
+ const handlePointerEnd = (e) => {
92
+ if (pointerIdRef.current !== e.pointerId)
93
+ return;
94
+ stopDrag();
95
+ };
96
+ const handleLostPointerCapture = (e) => {
97
+ if (pointerIdRef.current !== null && e.pointerId !== pointerIdRef.current) {
98
+ return;
99
+ }
100
+ stopDrag();
101
+ };
102
+ const handleDoubleClick = () => {
103
+ // Pointer-capture drags still emit click/dblclick (unlike HTML5 drag), so
104
+ // a dblclick during or right after a real drag is two resize nudges, not
105
+ // a reset request.
106
+ if (movedRef.current ||
107
+ performance.now() - lastDragEndAtRef.current < 500) {
108
+ return;
109
+ }
110
+ onReset?.();
111
+ };
112
+ const handleKeyDown = (e) => {
113
+ const el = element.current;
114
+ if (!el)
115
+ return;
116
+ const step = e.shiftKey ? 64 : 16;
117
+ // Arrows move the border in screen direction: for a left-edge border,
118
+ // ArrowLeft grows the panel.
119
+ const grow = position === 'left' ? 1 : -1;
120
+ let next = null;
121
+ if (e.key === 'ArrowLeft') {
122
+ next = el.offsetWidth + grow * step;
123
+ }
124
+ else if (e.key === 'ArrowRight') {
125
+ next = el.offsetWidth - grow * step;
126
+ }
127
+ else if (e.key === 'Home' && ariaValueMin !== undefined) {
128
+ next = ariaValueMin;
129
+ }
130
+ else if (e.key === 'End' && ariaValueMax !== undefined) {
131
+ next = ariaValueMax;
132
+ }
133
+ if (next === null)
134
+ return;
135
+ e.preventDefault();
136
+ onWidthChange(next);
137
+ };
138
+ return (_jsx("div", { role: "separator", "aria-orientation": "vertical", "aria-label": ariaLabel, "aria-controls": ariaControls, "aria-valuemin": ariaValueMin, "aria-valuemax": ariaValueMax, "aria-valuenow": ariaValueNow, tabIndex: 0, className: cn('group absolute inset-y-0 z-10 w-[17px] cursor-col-resize touch-none outline-none', position === 'left' ? '-left-2' : '-right-2'), onPointerDown: handlePointerDown, onPointerMove: handlePointerMove, onPointerUp: handlePointerEnd, onPointerCancel: handlePointerEnd, onLostPointerCapture: handleLostPointerCapture, onDoubleClick: handleDoubleClick, onKeyDown: handleKeyDown, children: _jsx("span", { "aria-hidden": true, className: cn('pointer-events-none absolute inset-y-0 left-1/2 w-px -translate-x-1/2 bg-transparent transition-colors delay-75 duration-100', 'group-hover:bg-gray-500 group-focus-visible:bg-[var(--ds-focus-color)]', isDragging && 'bg-gray-500') }) }));
139
+ }
140
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZ2dhYmxlLWJvcmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL25ldy10cmFjZS12aWV3ZXIvY29tcG9uZW50cy9kcmFnZ2FibGUtYm9yZGVyLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUM7O0FBRWIsT0FBTyxFQUlMLFNBQVMsRUFDVCxNQUFNLEVBQ04sUUFBUSxHQUNULE1BQU0sT0FBTyxDQUFDO0FBQ2YsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBcUJyQzs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQUMsRUFDOUIsT0FBTyxFQUNQLFFBQVEsRUFDUixhQUFhLEVBQ2IsT0FBTyxFQUNQLFlBQVksRUFBRSxTQUFTLEVBQ3ZCLGVBQWUsRUFBRSxZQUFZLEVBQzdCLGVBQWUsRUFBRSxZQUFZLEVBQzdCLGVBQWUsRUFBRSxZQUFZLEVBQzdCLGVBQWUsRUFBRSxZQUFZLEdBQ1I7SUFDckIsTUFBTSxDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEQsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFnQixJQUFJLENBQUMsQ0FBQztJQUNqRCxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUIsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQWdCLElBQUksQ0FBQyxDQUFDO0lBQzNDLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQixNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVuQyxTQUFTLENBQUMsR0FBRyxFQUFFO1FBQ2IsT0FBTyxHQUFHLEVBQUU7WUFDVixJQUFJLE1BQU0sQ0FBQyxPQUFPO2dCQUFFLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzRCxDQUFDLENBQUM7SUFDSixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFUCwwRUFBMEU7SUFDMUUseUVBQXlFO0lBQ3pFLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDYixJQUFJLENBQUMsVUFBVTtZQUFFLE9BQU87UUFDeEIsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO1FBQ2hELFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7UUFDeEMsT0FBTyxHQUFHLEVBQUU7WUFDVixRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDO1FBQzVDLENBQUMsQ0FBQztJQUNKLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFFakIsTUFBTSxRQUFRLEdBQUcsR0FBRyxFQUFFO1FBQ3BCLFlBQVksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQzVCLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQixJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNuQixvQkFBb0IsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDckMsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFDdEIscUVBQXFFO1lBQ3JFLElBQUksUUFBUSxDQUFDLE9BQU87Z0JBQUUsYUFBYSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMvRCxDQUFDO1FBQ0QsSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDckIsUUFBUSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDekIsZ0JBQWdCLENBQUMsT0FBTyxHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUMvQyxDQUFDO0lBQ0gsQ0FBQyxDQUFDO0lBRUYsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQW9DLEVBQUUsRUFBRTtRQUNqRSwwRUFBMEU7UUFDMUUseUNBQXlDO1FBQ3pDLElBQUksWUFBWSxDQUFDLE9BQU8sS0FBSyxJQUFJO1lBQUUsT0FBTztRQUMxQyxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQzNCLElBQUksQ0FBQyxFQUFFO1lBQUUsT0FBTztRQUNoQixJQUFJLENBQUMsQ0FBQyxXQUFXLEtBQUssT0FBTyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU87UUFDeEQsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDL0MsWUFBWSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ25DLFNBQVMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUM5QixhQUFhLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUM7UUFDdkMsUUFBUSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDekIsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RCLENBQUMsQ0FBQztJQUVGLG1FQUFtRTtJQUNuRSx1Q0FBdUM7SUFDdkMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQW9DLEVBQUUsRUFBRTtRQUNqRSxJQUFJLFlBQVksQ0FBQyxPQUFPLEtBQUssQ0FBQyxDQUFDLFNBQVM7WUFBRSxPQUFPO1FBQ2pELElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNoRCxRQUFRLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUMxQixDQUFDO1FBQ0QsTUFBTSxLQUFLLEdBQ1QsUUFBUSxLQUFLLE1BQU07WUFDakIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLE9BQU87WUFDL0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQztRQUNwQyxlQUFlLENBQUMsT0FBTyxHQUFHLGFBQWEsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3hELElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDcEIsTUFBTSxDQUFDLE9BQU8sR0FBRyxxQkFBcUIsQ0FBQyxHQUFHLEVBQUU7Z0JBQzFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO2dCQUN0QixhQUFhLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3pDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUMsQ0FBQztJQUVGLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxDQUFvQyxFQUFFLEVBQUU7UUFDaEUsSUFBSSxZQUFZLENBQUMsT0FBTyxLQUFLLENBQUMsQ0FBQyxTQUFTO1lBQUUsT0FBTztRQUNqRCxRQUFRLEVBQUUsQ0FBQztJQUNiLENBQUMsQ0FBQztJQUVGLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxDQUFvQyxFQUFFLEVBQUU7UUFDeEUsSUFBSSxZQUFZLENBQUMsT0FBTyxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsU0FBUyxLQUFLLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMxRSxPQUFPO1FBQ1QsQ0FBQztRQUNELFFBQVEsRUFBRSxDQUFDO0lBQ2IsQ0FBQyxDQUFDO0lBRUYsTUFBTSxpQkFBaUIsR0FBRyxHQUFHLEVBQUU7UUFDN0IsMEVBQTBFO1FBQzFFLHlFQUF5RTtRQUN6RSxtQkFBbUI7UUFDbkIsSUFDRSxRQUFRLENBQUMsT0FBTztZQUNoQixXQUFXLENBQUMsR0FBRyxFQUFFLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxHQUFHLEdBQUcsRUFDbEQsQ0FBQztZQUNELE9BQU87UUFDVCxDQUFDO1FBQ0QsT0FBTyxFQUFFLEVBQUUsQ0FBQztJQUNkLENBQUMsQ0FBQztJQUVGLE1BQU0sYUFBYSxHQUFHLENBQUMsQ0FBcUMsRUFBRSxFQUFFO1FBQzlELE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7UUFDM0IsSUFBSSxDQUFDLEVBQUU7WUFBRSxPQUFPO1FBQ2hCLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2xDLHNFQUFzRTtRQUN0RSw2QkFBNkI7UUFDN0IsTUFBTSxJQUFJLEdBQUcsUUFBUSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQyxJQUFJLElBQUksR0FBa0IsSUFBSSxDQUFDO1FBQy9CLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxXQUFXLEVBQUUsQ0FBQztZQUMxQixJQUFJLEdBQUcsRUFBRSxDQUFDLFdBQVcsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ3RDLENBQUM7YUFBTSxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssWUFBWSxFQUFFLENBQUM7WUFDbEMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxXQUFXLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztRQUN0QyxDQUFDO2FBQU0sSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLE1BQU0sSUFBSSxZQUFZLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDMUQsSUFBSSxHQUFHLFlBQVksQ0FBQztRQUN0QixDQUFDO2FBQU0sSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLEtBQUssSUFBSSxZQUFZLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDekQsSUFBSSxHQUFHLFlBQVksQ0FBQztRQUN0QixDQUFDO1FBQ0QsSUFBSSxJQUFJLEtBQUssSUFBSTtZQUFFLE9BQU87UUFDMUIsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ25CLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0QixDQUFDLENBQUM7SUFFRixPQUFPLENBRUwsY0FDRSxJQUFJLEVBQUMsV0FBVyxzQkFDQyxVQUFVLGdCQUNmLFNBQVMsbUJBQ04sWUFBWSxtQkFDWixZQUFZLG1CQUNaLFlBQVksbUJBQ1osWUFBWSxFQUMzQixRQUFRLEVBQUUsQ0FBQyxFQUNYLFNBQVMsRUFBRSxFQUFFLENBQ1gsa0ZBQWtGLEVBQ2xGLFFBQVEsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUM3QyxFQUNELGFBQWEsRUFBRSxpQkFBaUIsRUFDaEMsYUFBYSxFQUFFLGlCQUFpQixFQUNoQyxXQUFXLEVBQUUsZ0JBQWdCLEVBQzdCLGVBQWUsRUFBRSxnQkFBZ0IsRUFDakMsb0JBQW9CLEVBQUUsd0JBQXdCLEVBQzlDLGFBQWEsRUFBRSxpQkFBaUIsRUFDaEMsU0FBUyxFQUFFLGFBQWEsWUFVeEIsb0NBRUUsU0FBUyxFQUFFLEVBQUUsQ0FDWCw4SEFBOEgsRUFDOUgsd0VBQXdFLEVBQ3hFLFVBQVUsSUFBSSxhQUFhLENBQzVCLEdBQ0QsR0FDRSxDQUNQLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQge1xuICB0eXBlIEtleWJvYXJkRXZlbnQgYXMgUmVhY3RLZXlib2FyZEV2ZW50LFxuICB0eXBlIFBvaW50ZXJFdmVudCBhcyBSZWFjdFBvaW50ZXJFdmVudCxcbiAgdHlwZSBSZWZPYmplY3QsXG4gIHVzZUVmZmVjdCxcbiAgdXNlUmVmLFxuICB1c2VTdGF0ZSxcbn0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY24gfSBmcm9tICcuLi8uLi8uLi9saWIvY24nO1xuXG5pbnRlcmZhY2UgRHJhZ2dhYmxlQm9yZGVyUHJvcHMge1xuICAvKiogVGhlIHBhbmVsIHdob3NlIHdpZHRoIHRoaXMgYm9yZGVyIGFkanVzdHMgKG1lYXN1cmVkIG9uIGludGVyYWN0aW9uKS4gKi9cbiAgZWxlbWVudDogUmVmT2JqZWN0PEhUTUxFbGVtZW50IHwgbnVsbD47XG4gIC8qKiBXaGljaCBlZGdlIG9mIHRoZSBwYW5lbCB0aGUgYm9yZGVyIHNpdHMgb24uICovXG4gIHBvc2l0aW9uOiAnbGVmdCcgfCAncmlnaHQnO1xuICAvKipcbiAgICogQ2FsbGVkIHdpdGggdGhlIG5leHQgd2lkdGggKHB4KSB3aGlsZSBkcmFnZ2luZyBvciBrZXlib2FyZC1yZXNpemluZy5cbiAgICogVGhlIG93bmVyIGlzIHJlc3BvbnNpYmxlIGZvciBjbGFtcGluZy5cbiAgICovXG4gIG9uV2lkdGhDaGFuZ2U6ICh3aWR0aDogbnVtYmVyKSA9PiB2b2lkO1xuICAvKiogRG91YmxlLWNsaWNrIHJlc2V0LiAqL1xuICBvblJlc2V0PzogKCkgPT4gdm9pZDtcbiAgJ2FyaWEtbGFiZWwnOiBzdHJpbmc7XG4gICdhcmlhLWNvbnRyb2xzJz86IHN0cmluZztcbiAgJ2FyaWEtdmFsdWVtaW4nPzogbnVtYmVyO1xuICAnYXJpYS12YWx1ZW1heCc/OiBudW1iZXI7XG4gICdhcmlhLXZhbHVlbm93Jz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBPdmVybGF5IGRyYWcgaGFuZGxlIHN0cmFkZGxpbmcgYSBwYW5lbCBlZGdlOiBhbiBpbnZpc2libGUgc3RyaXAgb3ZlciB0aGVcbiAqIHBhbmVsJ3MgYm9yZGVyIHdob3NlIGNlbnRlciBsaW5lIGhpZ2hsaWdodHMgb24gaG92ZXIvZHJhZywgd2l0aFxuICogZG91YmxlLWNsaWNrIHJlc2V0LCBwb2ludGVyLWNhcHR1cmUgZHJhZ2dpbmcgKHdvcmtzIHdpdGggdG91Y2gvcGVuLCBub1xuICogZ2hvc3QgaW1hZ2UpLCBhbmQga2V5Ym9hcmQvQVJJQSB3aW5kb3ctc3BsaXR0ZXIgc3VwcG9ydC5cbiAqXG4gKiBUaGUgcGFuZWwncyBwb3NpdGlvbmluZyBhbmNlc3RvciBtdXN0IG5vdCBjbGlwIG92ZXJmbG93IOKAlCB0aGUgc3RyaXAgaGFuZ3NcbiAqIH44cHggcGFzdCB0aGUgcGFuZWwgZWRnZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIERyYWdnYWJsZUJvcmRlcih7XG4gIGVsZW1lbnQsXG4gIHBvc2l0aW9uLFxuICBvbldpZHRoQ2hhbmdlLFxuICBvblJlc2V0LFxuICAnYXJpYS1sYWJlbCc6IGFyaWFMYWJlbCxcbiAgJ2FyaWEtY29udHJvbHMnOiBhcmlhQ29udHJvbHMsXG4gICdhcmlhLXZhbHVlbWluJzogYXJpYVZhbHVlTWluLFxuICAnYXJpYS12YWx1ZW1heCc6IGFyaWFWYWx1ZU1heCxcbiAgJ2FyaWEtdmFsdWVub3cnOiBhcmlhVmFsdWVOb3csXG59OiBEcmFnZ2FibGVCb3JkZXJQcm9wcykge1xuICBjb25zdCBbaXNEcmFnZ2luZywgc2V0SXNEcmFnZ2luZ10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IHBvaW50ZXJJZFJlZiA9IHVzZVJlZjxudW1iZXIgfCBudWxsPihudWxsKTtcbiAgY29uc3Qgc3RhcnRYUmVmID0gdXNlUmVmKDApO1xuICBjb25zdCBzdGFydFdpZHRoUmVmID0gdXNlUmVmKDApO1xuICBjb25zdCBwZW5kaW5nV2lkdGhSZWYgPSB1c2VSZWYoMCk7XG4gIGNvbnN0IHJhZlJlZiA9IHVzZVJlZjxudW1iZXIgfCBudWxsPihudWxsKTtcbiAgY29uc3QgbW92ZWRSZWYgPSB1c2VSZWYoZmFsc2UpO1xuICBjb25zdCBsYXN0RHJhZ0VuZEF0UmVmID0gdXNlUmVmKDApO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChyYWZSZWYuY3VycmVudCkgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmUmVmLmN1cnJlbnQpO1xuICAgIH07XG4gIH0sIFtdKTtcblxuICAvLyBTdXBwcmVzcyB0ZXh0IHNlbGVjdGlvbiBmb3IgdGhlIGR1cmF0aW9uIG9mIGEgZHJhZy4gRWZmZWN0IGNsZWFudXAgYWxzb1xuICAvLyBjb3ZlcnMgdGhlIGhhbmRsZSB1bm1vdW50aW5nIG1pZC1kcmFnIChlLmcuIEVzY2FwZSBjbG9zaW5nIHRoZSBwYW5lbCkuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc0RyYWdnaW5nKSByZXR1cm47XG4gICAgY29uc3QgcHJldmlvdXMgPSBkb2N1bWVudC5ib2R5LnN0eWxlLnVzZXJTZWxlY3Q7XG4gICAgZG9jdW1lbnQuYm9keS5zdHlsZS51c2VyU2VsZWN0ID0gJ25vbmUnO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLnVzZXJTZWxlY3QgPSBwcmV2aW91cztcbiAgICB9O1xuICB9LCBbaXNEcmFnZ2luZ10pO1xuXG4gIGNvbnN0IHN0b3BEcmFnID0gKCkgPT4ge1xuICAgIHBvaW50ZXJJZFJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICBzZXRJc0RyYWdnaW5nKGZhbHNlKTtcbiAgICBpZiAocmFmUmVmLmN1cnJlbnQpIHtcbiAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZlJlZi5jdXJyZW50KTtcbiAgICAgIHJhZlJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICAgIC8vIEZsdXNoIHRoZSBmaW5hbCBwb3NpdGlvbiB0aGF0IHdhcyBzdGlsbCB3YWl0aW5nIG9uIHRoZSBuZXh0IGZyYW1lLlxuICAgICAgaWYgKG1vdmVkUmVmLmN1cnJlbnQpIG9uV2lkdGhDaGFuZ2UocGVuZGluZ1dpZHRoUmVmLmN1cnJlbnQpO1xuICAgIH1cbiAgICBpZiAobW92ZWRSZWYuY3VycmVudCkge1xuICAgICAgbW92ZWRSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgICAgbGFzdERyYWdFbmRBdFJlZi5jdXJyZW50ID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVBvaW50ZXJEb3duID0gKGU6IFJlYWN0UG9pbnRlckV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgIC8vIElnbm9yZSBzZWNvbmRhcnkgcG9pbnRlcnMgKGUuZy4gYSBzZWNvbmQgZmluZ2VyKSB3aGlsZSBhIGRyYWcgaXMgYWN0aXZlXG4gICAgLy8gc28gdGhleSBjYW4ndCByZS1iYXNlbGluZSB0aGUgZ2VzdHVyZS5cbiAgICBpZiAocG9pbnRlcklkUmVmLmN1cnJlbnQgIT09IG51bGwpIHJldHVybjtcbiAgICBjb25zdCBlbCA9IGVsZW1lbnQuY3VycmVudDtcbiAgICBpZiAoIWVsKSByZXR1cm47XG4gICAgaWYgKGUucG9pbnRlclR5cGUgPT09ICdtb3VzZScgJiYgZS5idXR0b24gIT09IDApIHJldHVybjtcbiAgICBlLmN1cnJlbnRUYXJnZXQuc2V0UG9pbnRlckNhcHR1cmUoZS5wb2ludGVySWQpO1xuICAgIHBvaW50ZXJJZFJlZi5jdXJyZW50ID0gZS5wb2ludGVySWQ7XG4gICAgc3RhcnRYUmVmLmN1cnJlbnQgPSBlLmNsaWVudFg7XG4gICAgc3RhcnRXaWR0aFJlZi5jdXJyZW50ID0gZWwub2Zmc2V0V2lkdGg7XG4gICAgbW92ZWRSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgIHNldElzRHJhZ2dpbmcodHJ1ZSk7XG4gIH07XG5cbiAgLy8gUG9pbnRlciBjYXB0dXJlIHJvdXRlcyBtb3ZlL3VwIGV2ZW50cyB0byB0aGUgc3RyaXAgaXRzZWxmLCBzbyBub1xuICAvLyBkb2N1bWVudC1sZXZlbCBsaXN0ZW5lcnMgYXJlIG5lZWRlZC5cbiAgY29uc3QgaGFuZGxlUG9pbnRlck1vdmUgPSAoZTogUmVhY3RQb2ludGVyRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgaWYgKHBvaW50ZXJJZFJlZi5jdXJyZW50ICE9PSBlLnBvaW50ZXJJZCkgcmV0dXJuO1xuICAgIGlmIChNYXRoLmFicyhlLmNsaWVudFggLSBzdGFydFhSZWYuY3VycmVudCkgPiA0KSB7XG4gICAgICBtb3ZlZFJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgZGVsdGEgPVxuICAgICAgcG9zaXRpb24gPT09ICdsZWZ0J1xuICAgICAgICA/IHN0YXJ0WFJlZi5jdXJyZW50IC0gZS5jbGllbnRYXG4gICAgICAgIDogZS5jbGllbnRYIC0gc3RhcnRYUmVmLmN1cnJlbnQ7XG4gICAgcGVuZGluZ1dpZHRoUmVmLmN1cnJlbnQgPSBzdGFydFdpZHRoUmVmLmN1cnJlbnQgKyBkZWx0YTtcbiAgICBpZiAoIXJhZlJlZi5jdXJyZW50KSB7XG4gICAgICByYWZSZWYuY3VycmVudCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIHJhZlJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICAgICAgb25XaWR0aENoYW5nZShwZW5kaW5nV2lkdGhSZWYuY3VycmVudCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlUG9pbnRlckVuZCA9IChlOiBSZWFjdFBvaW50ZXJFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICBpZiAocG9pbnRlcklkUmVmLmN1cnJlbnQgIT09IGUucG9pbnRlcklkKSByZXR1cm47XG4gICAgc3RvcERyYWcoKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVMb3N0UG9pbnRlckNhcHR1cmUgPSAoZTogUmVhY3RQb2ludGVyRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgaWYgKHBvaW50ZXJJZFJlZi5jdXJyZW50ICE9PSBudWxsICYmIGUucG9pbnRlcklkICE9PSBwb2ludGVySWRSZWYuY3VycmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzdG9wRHJhZygpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZURvdWJsZUNsaWNrID0gKCkgPT4ge1xuICAgIC8vIFBvaW50ZXItY2FwdHVyZSBkcmFncyBzdGlsbCBlbWl0IGNsaWNrL2RibGNsaWNrICh1bmxpa2UgSFRNTDUgZHJhZyksIHNvXG4gICAgLy8gYSBkYmxjbGljayBkdXJpbmcgb3IgcmlnaHQgYWZ0ZXIgYSByZWFsIGRyYWcgaXMgdHdvIHJlc2l6ZSBudWRnZXMsIG5vdFxuICAgIC8vIGEgcmVzZXQgcmVxdWVzdC5cbiAgICBpZiAoXG4gICAgICBtb3ZlZFJlZi5jdXJyZW50IHx8XG4gICAgICBwZXJmb3JtYW5jZS5ub3coKSAtIGxhc3REcmFnRW5kQXRSZWYuY3VycmVudCA8IDUwMFxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBvblJlc2V0Py4oKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVLZXlEb3duID0gKGU6IFJlYWN0S2V5Ym9hcmRFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICBjb25zdCBlbCA9IGVsZW1lbnQuY3VycmVudDtcbiAgICBpZiAoIWVsKSByZXR1cm47XG4gICAgY29uc3Qgc3RlcCA9IGUuc2hpZnRLZXkgPyA2NCA6IDE2O1xuICAgIC8vIEFycm93cyBtb3ZlIHRoZSBib3JkZXIgaW4gc2NyZWVuIGRpcmVjdGlvbjogZm9yIGEgbGVmdC1lZGdlIGJvcmRlcixcbiAgICAvLyBBcnJvd0xlZnQgZ3Jvd3MgdGhlIHBhbmVsLlxuICAgIGNvbnN0IGdyb3cgPSBwb3NpdGlvbiA9PT0gJ2xlZnQnID8gMSA6IC0xO1xuICAgIGxldCBuZXh0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgICBpZiAoZS5rZXkgPT09ICdBcnJvd0xlZnQnKSB7XG4gICAgICBuZXh0ID0gZWwub2Zmc2V0V2lkdGggKyBncm93ICogc3RlcDtcbiAgICB9IGVsc2UgaWYgKGUua2V5ID09PSAnQXJyb3dSaWdodCcpIHtcbiAgICAgIG5leHQgPSBlbC5vZmZzZXRXaWR0aCAtIGdyb3cgKiBzdGVwO1xuICAgIH0gZWxzZSBpZiAoZS5rZXkgPT09ICdIb21lJyAmJiBhcmlhVmFsdWVNaW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgbmV4dCA9IGFyaWFWYWx1ZU1pbjtcbiAgICB9IGVsc2UgaWYgKGUua2V5ID09PSAnRW5kJyAmJiBhcmlhVmFsdWVNYXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgbmV4dCA9IGFyaWFWYWx1ZU1heDtcbiAgICB9XG4gICAgaWYgKG5leHQgPT09IG51bGwpIHJldHVybjtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgb25XaWR0aENoYW5nZShuZXh0KTtcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L2ExMXkvdXNlU2VtYW50aWNFbGVtZW50czogdGhlIFdBSS1BUklBIHdpbmRvdy1zcGxpdHRlciBwYXR0ZXJuIHJlcXVpcmVzIGEgZm9jdXNhYmxlIGRpdiB3aXRoIHJvbGU9c2VwYXJhdG9yOyA8aHI+IGNhbm5vdCByZWNlaXZlIGZvY3VzIG9yIGRyYWcgaW50ZXJhY3Rpb25zXG4gICAgPGRpdlxuICAgICAgcm9sZT1cInNlcGFyYXRvclwiXG4gICAgICBhcmlhLW9yaWVudGF0aW9uPVwidmVydGljYWxcIlxuICAgICAgYXJpYS1sYWJlbD17YXJpYUxhYmVsfVxuICAgICAgYXJpYS1jb250cm9scz17YXJpYUNvbnRyb2xzfVxuICAgICAgYXJpYS12YWx1ZW1pbj17YXJpYVZhbHVlTWlufVxuICAgICAgYXJpYS12YWx1ZW1heD17YXJpYVZhbHVlTWF4fVxuICAgICAgYXJpYS12YWx1ZW5vdz17YXJpYVZhbHVlTm93fVxuICAgICAgdGFiSW5kZXg9ezB9XG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAnZ3JvdXAgYWJzb2x1dGUgaW5zZXQteS0wIHotMTAgdy1bMTdweF0gY3Vyc29yLWNvbC1yZXNpemUgdG91Y2gtbm9uZSBvdXRsaW5lLW5vbmUnLFxuICAgICAgICBwb3NpdGlvbiA9PT0gJ2xlZnQnID8gJy1sZWZ0LTInIDogJy1yaWdodC0yJ1xuICAgICAgKX1cbiAgICAgIG9uUG9pbnRlckRvd249e2hhbmRsZVBvaW50ZXJEb3dufVxuICAgICAgb25Qb2ludGVyTW92ZT17aGFuZGxlUG9pbnRlck1vdmV9XG4gICAgICBvblBvaW50ZXJVcD17aGFuZGxlUG9pbnRlckVuZH1cbiAgICAgIG9uUG9pbnRlckNhbmNlbD17aGFuZGxlUG9pbnRlckVuZH1cbiAgICAgIG9uTG9zdFBvaW50ZXJDYXB0dXJlPXtoYW5kbGVMb3N0UG9pbnRlckNhcHR1cmV9XG4gICAgICBvbkRvdWJsZUNsaWNrPXtoYW5kbGVEb3VibGVDbGlja31cbiAgICAgIG9uS2V5RG93bj17aGFuZGxlS2V5RG93bn1cbiAgICA+XG4gICAgICB7LyogQ2VudGVyIGxpbmU6IHNpdHMgZXhhY3RseSBvdmVyIHRoZSBwYW5lbCdzIDFweCBib3JkZXIgYW5kIGhpZ2hsaWdodHNcbiAgICAgICAgICBvbiBob3Zlci9kcmFnL2ZvY3VzIChkZWxheWVkIHNvIGluY2lkZW50YWwgbW91c2Utb3ZlcnMgZG9uJ3QgZmxhc2gpLlxuICAgICAgICAgIHBvaW50ZXItZXZlbnRzLW5vbmUgaXMgbG9hZC1iZWFyaW5nOiB3aXRob3V0IGl0IHRoaXMgMXB4IGxpbmUgaXMgYVxuICAgICAgICAgIGhpdCB0YXJnZXQsIHNvIGEgZG91YmxlLWNsaWNrIGFpbWVkIGF0IHRoZSBsaW5lIGxhbmRzIG9uZSBjbGljayBvblxuICAgICAgICAgIHRoZSBsaW5lIGFuZCAoYWZ0ZXIgc3ViLXBpeGVsIGppdHRlcikgdGhlIG90aGVyIG9uIHRoZSBzdHJpcC4gQVxuICAgICAgICAgIG5hdGl2ZSBkYmxjbGljayBvbmx5IGZpcmVzIHdoZW4gYm90aCBjbGlja3Mgc2hhcmUgYSB0YXJnZXQsIHNvIHRoZVxuICAgICAgICAgIHJlc2V0IHNpbGVudGx5IGZhaWxzIG9uIHRoZSBsaW5lIGJ1dCB3b3JrcyBqdXN0IGJlc2lkZSBpdC4gS2VlcGluZ1xuICAgICAgICAgIHRoZSBsaW5lIGluZXJ0IG1ha2VzIHRoZSBzZXBhcmF0b3IgZGl2IHRoZSBzb2xlIHRhcmdldCBldmVyeXdoZXJlLiAqL31cbiAgICAgIDxzcGFuXG4gICAgICAgIGFyaWEtaGlkZGVuXG4gICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgJ3BvaW50ZXItZXZlbnRzLW5vbmUgYWJzb2x1dGUgaW5zZXQteS0wIGxlZnQtMS8yIHctcHggLXRyYW5zbGF0ZS14LTEvMiBiZy10cmFuc3BhcmVudCB0cmFuc2l0aW9uLWNvbG9ycyBkZWxheS03NSBkdXJhdGlvbi0xMDAnLFxuICAgICAgICAgICdncm91cC1ob3ZlcjpiZy1ncmF5LTUwMCBncm91cC1mb2N1cy12aXNpYmxlOmJnLVt2YXIoLS1kcy1mb2N1cy1jb2xvcildJyxcbiAgICAgICAgICBpc0RyYWdnaW5nICYmICdiZy1ncmF5LTUwMCdcbiAgICAgICAgKX1cbiAgICAgIC8+XG4gICAgPC9kaXY+XG4gICk7XG59XG4iXX0=
@@ -1,4 +1,4 @@
1
- declare const ELLIPSIS = "...";
1
+ declare const ELLIPSIS = "\u2026";
2
2
  declare const MIN_START = 3;
3
3
  declare const MIN_END = 3;
4
4
  type MeasureFn = (text: string) => number;
@@ -1 +1 @@
1
- {"version":3,"file":"truncate.d.ts","sourceRoot":"","sources":["../../../../../src/components/new-trace-viewer/components/middle-truncate/truncate.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,QAAQ,QAAQ,CAAC;AACvB,QAAA,MAAM,SAAS,IAAI,CAAC;AACpB,QAAA,MAAM,OAAO,IAAI,CAAC;AAOlB,KAAK,SAAS,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;AAE1C;;;GAGG;AACH,iBAAS,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAK3C;AAED,UAAU,cAAc;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;CACpB;AAmCD;;;GAGG;AACH,iBAAS,cAAc,CACrB,SAAS,EAAE,MAAM,EAAE,EACnB,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,SAAS,EAClB,SAAS,CAAC,EAAE,MAAM,GACjB,cAAc,CAuDhB;AAED,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;AACrE,YAAY,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC"}
1
+ {"version":3,"file":"truncate.d.ts","sourceRoot":"","sources":["../../../../../src/components/new-trace-viewer/components/middle-truncate/truncate.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,QAAQ,WAAM,CAAC;AACrB,QAAA,MAAM,SAAS,IAAI,CAAC;AACpB,QAAA,MAAM,OAAO,IAAI,CAAC;AAOlB,KAAK,SAAS,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;AAE1C;;;GAGG;AACH,iBAAS,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAK3C;AAED,UAAU,cAAc;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;CACpB;AAmCD;;;GAGG;AACH,iBAAS,cAAc,CACrB,SAAS,EAAE,MAAM,EAAE,EACnB,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,SAAS,EAClB,SAAS,CAAC,EAAE,MAAM,GACjB,cAAc,CAuDhB;AAED,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;AACrE,YAAY,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC"}
@@ -1,4 +1,4 @@
1
- const ELLIPSIS = '...';
1
+ const ELLIPSIS = '';
2
2
  const MIN_START = 3;
3
3
  const MIN_END = 3;
4
4
  const MIN_KEPT = MIN_START + MIN_END;
@@ -98,4 +98,4 @@ function middleTruncate(graphemes, availableWidth, measure, fullWidth) {
98
98
  return buildCandidate(graphemes, best);
99
99
  }
100
100
  export { middleTruncate, toGraphemes, ELLIPSIS, MIN_START, MIN_END };
101
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1bmNhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9uZXctdHJhY2Utdmlld2VyL2NvbXBvbmVudHMvbWlkZGxlLXRydW5jYXRlL3RydW5jYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQztBQUN2QixNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUM7QUFDcEIsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCLE1BQU0sUUFBUSxHQUFHLFNBQVMsR0FBRyxPQUFPLENBQUM7QUFDckMsTUFBTSxpQkFBaUIsR0FDckIsT0FBTyxJQUFJLEtBQUssV0FBVyxJQUFJLFdBQVcsSUFBSSxJQUFJO0lBQ2hELENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxDQUFDO0lBQzVELENBQUMsQ0FBQyxJQUFJLENBQUM7QUFJWDs7O0dBR0c7QUFDSCxTQUFTLFdBQVcsQ0FBQyxJQUFZO0lBQy9CLElBQUksaUJBQWlCLEVBQUUsQ0FBQztRQUN0QixPQUFPLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzFCLENBQUM7QUFXRCxTQUFTLGNBQWMsQ0FBQyxTQUFtQixFQUFFLElBQVk7SUFDdkQsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDZCxPQUFPO1lBQ0wsVUFBVSxFQUFFLEVBQUU7WUFDZCxtQkFBbUIsRUFBRSxDQUFDO1lBQ3RCLFVBQVUsRUFBRSxFQUFFO1lBQ2QsbUJBQW1CLEVBQUUsQ0FBQztZ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LENBQUMsRUFBRSxDQUFDO1FBQ2hCLE9BQU87WUFDTCxVQUFVLEVBQUUsRUFBRTtZQUNkLG1CQUFtQixFQUFFLENBQUM7WUFDdEIsVUFBVSxFQUFFLEVBQUU7WUFDZCxtQkFBbUIsRUFBRSxDQUFDO1lBQ3RCLElBQUksRUFBRSxFQUFFO1lBQ1IsU0FBUyxFQUFFLElBQUk7U0FDaEIsQ0FBQztJQUNKLENBQUM7SUFFRCxPQUFPLGNBQWMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDekMsQ0FBQztBQUVELE9BQU8sRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBFTExJUFNJUyA9ICcuLi4nO1xuY29uc3QgTUlOX1NUQVJUID0gMztcbmNvbnN0IE1JTl9FTkQgPSAzO1xuY29uc3QgTUlOX0tFUFQgPSBNSU5fU1RBUlQgKyBNSU5fRU5EO1xuY29uc3QgZ3JhcGhlbWVTZWdtZW50ZXIgPVxuICB0eXBlb2YgSW50bCAhPT0gJ3VuZGVmaW5lZCcgJiYgJ1NlZ21lbnRlcicgaW4gSW50bFxuICAgID8gbmV3IEludGwuU2VnbWVudGVyKHVuZGVmaW5lZCwgeyBncmFudWxhcml0eTogJ2dyYXBoZW1lJyB9KVxuICAgIDogbnVsbDtcblxudHlwZSBNZWFzdXJlRm4gPSAodGV4dDogc3RyaW5nKSA9PiBudW1iZXI7XG5cbi8qKlxuICogU3BsaXRzIGEgc3RyaW5nIGludG8gZ3JhcGhlbWUgY2x1c3RlcnMgdXNpbmcgSW50bC5TZWdtZW50ZXIuXG4gKiBGYWxscyBiYWNrIHRvIEFycmF5LmZyb20gZm9yIGVudmlyb25tZW50cyB3aXRob3V0IEludGwuU2VnbWVudGVyLlxuICovXG5mdW5jdGlvbiB0b0dyYXBoZW1lcyh0ZXh0OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIGlmIChncmFwaGVtZVNlZ21lbnRlcikge1xuICAgIHJldHVybiBbLi4uZ3JhcGhlbWVTZWdtZW50ZXIuc2VnbWVudCh0ZXh0KV0ubWFwKChzKSA9PiBzLnNlZ21lbnQpO1xuICB9XG4gIHJldHVybiBBcnJheS5mcm9tKHRleHQpO1xufVxuXG5pbnRlcmZhY2UgVHJ1bmNhdGVSZXN1bHQge1xuICBwcmVmaXhUZXh0OiBzdHJpbmc7XG4gIHByZWZpeEdyYXBoZW1lQ291bnQ6IG51bWJlcjtcbiAgc3VmZml4VGV4dDogc3RyaW5nO1xuICBzdWZmaXhHcmFwaGVtZUNvdW50OiBudW1iZXI7XG4gIHRleHQ6IHN0cmluZztcbiAgdHJ1bmNhdGVkOiBib29sZWFuO1xufVxuXG5mdW5jdGlvbiBidWlsZENhbmRpZGF0ZShncmFwaGVtZXM6IHN0cmluZ1tdLCBrZXB0OiBudW1iZXIpOiBUcnVuY2F0ZVJlc3VsdCB7XG4gIGlmIChrZXB0IDw9IDApIHtcbiAgICByZXR1cm4ge1xuICAgICAgcHJlZml4VGV4dDogJycsXG4gICAgICBwcmVmaXhHcmFwaGVtZUNvdW50OiAwLFxuICAgICAgc3VmZml4VGV4dDogJycsXG4gICAgICBzdWZmaXhHcmFwaGVtZUNvdW50OiAwLFxuICAgICAgdGV4dDogRUxMSVBTSVMsXG4gICAgICB0cnVuY2F0ZWQ6IHRydWUsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHN1ZmZpeEdyYXBoZW1lQ291bnQgPVxuICAgIGtlcHQgPj0gTUlOX0tFUFRcbiAgICAgID8gTWF0aC5tYXgoTUlOX0VORCwgTWF0aC5mbG9vcihrZXB0IC8gMikpXG4gICAgICA6IE1hdGguZmxvb3Ioa2VwdCAvIDIpO1xuICBjb25zdCBwcmVmaXhHcmFwaGVtZUNvdW50ID0ga2VwdCAtIHN1ZmZpeEdyYXBoZW1lQ291bnQ7XG4gIGNvbnN0IHByZWZpeFRleHQgPSBncmFwaGVtZXMuc2xpY2UoMCwgcHJlZml4R3JhcGhlbWVDb3VudCkuam9pbignJyk7XG4gIGNvbnN0IHN1ZmZpeFRleHQgPVxuICAgIHN1ZmZpeEdyYXBoZW1lQ291bnQgPiAwXG4gICAgICA/IGdyYXBoZW1lcy5zbGljZSgtc3VmZml4R3JhcGhlbWVDb3VudCkuam9pbignJylcbiAgICAgIDogJyc7XG5cbiAgcmV0dXJuIHtcbiAgICBwcmVmaXhUZXh0LFxuICAgIHByZWZpeEdyYXBoZW1lQ291bnQsXG4gICAgc3VmZml4VGV4dCxcbiAgICBzdWZmaXhHcmFwaGVtZUNvdW50LFxuICAgIHRleHQ6IHByZWZpeFRleHQgKyBFTExJUFNJUyArIHN1ZmZpeFRleHQsXG4gICAgdHJ1bmNhdGVkOiB0cnVlLFxuICB9O1xufVxuXG4vKipcbiAqIE1pZGRsZS10cnVuY2F0ZXMgYSBzdHJpbmcgc28gYHByZWZpeC4uLnN1ZmZpeGAgZml0cyB3aXRoaW4gYGF2YWlsYWJsZVdpZHRoYC5cbiAqIFVzZXMgYmluYXJ5IHNlYXJjaCBvdmVyIGdyYXBoZW1lIGNsdXN0ZXJzIHdpdGggYW4gaW5qZWN0YWJsZSBtZWFzdXJlIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBtaWRkbGVUcnVuY2F0ZShcbiAgZ3JhcGhlbWVzOiBzdHJpbmdbXSxcbiAgYXZhaWxhYmxlV2lkdGg6IG51bWJlcixcbiAgbWVhc3VyZTogTWVhc3VyZUZuLFxuICBmdWxsV2lkdGg/OiBudW1iZXJcbik6IFRydW5jYXRlUmVzdWx0IHtcbiAgY29uc3QgZnVsbFRleHQgPSBncmFwaGVtZXMuam9pbignJyk7XG4gIGNvbnN0IHJlc29sdmVkRnVsbFdpZHRoID0gZnVsbFdpZHRoID8/IG1lYXN1cmUoZnVsbFRleHQpO1xuXG4gIGlmIChhdmFpbGFibGVXaWR0aCA8PSAwIHx8IGdyYXBoZW1lcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4ge1xuICAgICAgcHJlZml4VGV4dDogZnVsbFRleHQsXG4gICAgICBwcmVmaXhHcmFwaGVtZUNvdW50OiBncmFwaGVtZXMubGVuZ3RoLFxuICAgICAgc3VmZml4VGV4dDogJycsXG4gICAgICBzdWZmaXhHcmFwaGVtZUNvdW50OiAwLFxuICAgICAgdGV4dDogZnVsbFRleHQsXG4gICAgICB0cnVuY2F0ZWQ6IGZhbHNlLFxuICAgIH07XG4gIH1cblxuICBpZiAocmVzb2x2ZWRGdWxsV2lkdGggPD0gYXZhaWxhYmxlV2lkdGgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcHJlZml4VGV4dDogZnVsbFRleHQsXG4gICAgICBwcmVmaXhHcmFwaGVtZUNvdW50OiBncmFwaGVtZXMubGVuZ3RoLFxuICAgICAgc3VmZml4VGV4dDogJycsXG4gICAgICBzdWZmaXhHcmFwaGVtZUNvdW50OiAwLFxuICAgICAgdGV4dDogZnVsbFRleHQsXG4gICAgICB0cnVuY2F0ZWQ6IGZhbHNlLFxuICAgIH07XG4gIH1cblxuICAvLyBCaW5hcnkgc2VhcmNoIGZvciB0aGUgbWF4aW11bSBudW1iZXIgb2Yga2VwdCBncmFwaGVtZXNcbiAgbGV0IGxvID0gMDtcbiAgbGV0IGhpID0gZ3JhcGhlbWVzLmxlbmd0aCAtIDE7XG4gIGxldCBiZXN0ID0gLTE7XG5cbiAgd2hpbGUgKGxvIDw9IGhpKSB7XG4gICAgY29uc3QgbWlkID0gKGxvICsgaGkpID4+PiAxO1xuICAgIGNvbnN0IGNhbmRpZGF0ZSA9IGJ1aWxkQ2FuZGlkYXRlKGdyYXBoZW1lcywgbWlkKTtcblxuICAgIGlmIChtZWFzdXJlKGNhbmRpZGF0ZS50ZXh0KSA8PSBhdmFpbGFibGVXaWR0aCkge1xuICAgICAgYmVzdCA9IG1pZDtcbiAgICAgIGxvID0gbWlkICsgMTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGkgPSBtaWQgLSAxO1xuICAgIH1cbiAgfVxuXG4gIGlmIChiZXN0ID09PSAtMSkge1xuICAgIHJldHVybiB7XG4gICAgICBwcmVmaXhUZXh0OiAnJyxcbiAgICAgIHByZWZpeEdyYXBoZW1lQ291bnQ6IDAsXG4gICAgICBzdWZmaXhUZXh0OiAnJyxcbiAgICAgIHN1ZmZpeEdyYXBoZW1lQ291bnQ6IDAsXG4gICAgICB0ZXh0OiAnJyxcbiAgICAgIHRydW5jYXRlZDogdHJ1ZSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGJ1aWxkQ2FuZGlkYXRlKGdyYXBoZW1lcywgYmVzdCk7XG59XG5cbmV4cG9ydCB7IG1pZGRsZVRydW5jYXRlLCB0b0dyYXBoZW1lcywgRUxMSVBTSVMsIE1JTl9TVEFSVCwgTUlOX0VORCB9O1xuZXhwb3J0IHR5cGUgeyBNZWFzdXJlRm4sIFRydW5jYXRlUmVzdWx0IH07XG4iXX0=
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1bmNhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9uZXctdHJhY2Utdmlld2VyL2NvbXBvbmVudHMvbWlkZGxlLXRydW5jYXRlL3RydW5jYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQztBQUNyQixNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUM7QUFDcEIsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCLE1BQU0sUUFBUSxHQUFHLFNBQVMsR0FBRyxPQUFPLENBQUM7QUFDckMsTUFBTSxpQkFBaUIsR0FDckIsT0FBTyxJQUFJLEtBQUssV0FBVyxJQUFJLFdBQVcsSUFBSSxJQUFJO0lBQ2hELENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxDQUFDO0lBQzVELENBQUMsQ0FBQyxJQUFJLENBQUM7QUFJWDs7O0dBR0c7QUFDSCxTQUFTLFdBQVcsQ0FBQyxJQUFZO0lBQy9CLElBQUksaUJBQWlCLEVBQUUsQ0FBQztRQUN0QixPQUFPLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzFCLENBQUM7QUFXRCxTQUFTLGNBQWMsQ0FBQyxTQUFtQixFQUFFLElBQVk7SUFDdkQsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDZCxPQUFPO1lBQ0wsVUFBVSxFQUFFLEVBQUU7WUFDZCxtQkFBbUIsRUFBRSxDQUFDO1lBQ3RCLFVBQVUsRUFBRSxFQUFFO1lBQ2QsbUJBQW1CLEVBQUUsQ0FBQztZ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LENBQUMsRUFBRSxDQUFDO1FBQ2hCLE9BQU87WUFDTCxVQUFVLEVBQUUsRUFBRTtZQUNkLG1CQUFtQixFQUFFLENBQUM7WUFDdEIsVUFBVSxFQUFFLEVBQUU7WUFDZCxtQkFBbUIsRUFBRSxDQUFDO1lBQ3RCLElBQUksRUFBRSxFQUFFO1lBQ1IsU0FBUyxFQUFFLElBQUk7U0FDaEIsQ0FBQztJQUNKLENBQUM7SUFFRCxPQUFPLGNBQWMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDekMsQ0FBQztBQUVELE9BQU8sRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBFTExJUFNJUyA9ICfigKYnO1xuY29uc3QgTUlOX1NUQVJUID0gMztcbmNvbnN0IE1JTl9FTkQgPSAzO1xuY29uc3QgTUlOX0tFUFQgPSBNSU5fU1RBUlQgKyBNSU5fRU5EO1xuY29uc3QgZ3JhcGhlbWVTZWdtZW50ZXIgPVxuICB0eXBlb2YgSW50bCAhPT0gJ3VuZGVmaW5lZCcgJiYgJ1NlZ21lbnRlcicgaW4gSW50bFxuICAgID8gbmV3IEludGwuU2VnbWVudGVyKHVuZGVmaW5lZCwgeyBncmFudWxhcml0eTogJ2dyYXBoZW1lJyB9KVxuICAgIDogbnVsbDtcblxudHlwZSBNZWFzdXJlRm4gPSAodGV4dDogc3RyaW5nKSA9PiBudW1iZXI7XG5cbi8qKlxuICogU3BsaXRzIGEgc3RyaW5nIGludG8gZ3JhcGhlbWUgY2x1c3RlcnMgdXNpbmcgSW50bC5TZWdtZW50ZXIuXG4gKiBGYWxscyBiYWNrIHRvIEFycmF5LmZyb20gZm9yIGVudmlyb25tZW50cyB3aXRob3V0IEludGwuU2VnbWVudGVyLlxuICovXG5mdW5jdGlvbiB0b0dyYXBoZW1lcyh0ZXh0OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIGlmIChncmFwaGVtZVNlZ21lbnRlcikge1xuICAgIHJldHVybiBbLi4uZ3JhcGhlbWVTZWdtZW50ZXIuc2VnbWVudCh0ZXh0KV0ubWFwKChzKSA9PiBzLnNlZ21lbnQpO1xuICB9XG4gIHJldHVybiBBcnJheS5mcm9tKHRleHQpO1xufVxuXG5pbnRlcmZhY2UgVHJ1bmNhdGVSZXN1bHQge1xuICBwcmVmaXhUZXh0OiBzdHJpbmc7XG4gIHByZWZpeEdyYXBoZW1lQ291bnQ6IG51bWJlcjtcbiAgc3VmZml4VGV4dDogc3RyaW5nO1xuICBzdWZmaXhHcmFwaGVtZUNvdW50OiBudW1iZXI7XG4gIHRleHQ6IHN0cmluZztcbiAgdHJ1bmNhdGVkOiBib29sZWFuO1xufVxuXG5mdW5jdGlvbiBidWlsZENhbmRpZGF0ZShncmFwaGVtZXM6IHN0cmluZ1tdLCBrZXB0OiBudW1iZXIpOiBUcnVuY2F0ZVJlc3VsdCB7XG4gIGlmIChrZXB0IDw9IDApIHtcbiAgICByZXR1cm4ge1xuICAgICAgcHJlZml4VGV4dDogJycsXG4gICAgICBwcmVmaXhHcmFwaGVtZUNvdW50OiAwLFxuICAgICAgc3VmZml4VGV4dDogJycsXG4gICAgICBzdWZmaXhHcmFwaGVtZUNvdW50OiAwLFxuICAgICAgdGV4dDogRUxMSVBTSVMsXG4gICAgICB0cnVuY2F0ZWQ6IHRydWUsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHN1ZmZpeEdyYXBoZW1lQ291bnQgPVxuICAgIGtlcHQgPj0gTUlOX0tFUFRcbiAgICAgID8gTWF0aC5tYXgoTUlOX0VORCwgTWF0aC5mbG9vcihrZXB0IC8gMikpXG4gICAgICA6IE1hdGguZmxvb3Ioa2VwdCAvIDIpO1xuICBjb25zdCBwcmVmaXhHcmFwaGVtZUNvdW50ID0ga2VwdCAtIHN1ZmZpeEdyYXBoZW1lQ291bnQ7XG4gIGNvbnN0IHByZWZpeFRleHQgPSBncmFwaGVtZXMuc2xpY2UoMCwgcHJlZml4R3JhcGhlbWVDb3VudCkuam9pbignJyk7XG4gIGNvbnN0IHN1ZmZpeFRleHQgPVxuICAgIHN1ZmZpeEdyYXBoZW1lQ291bnQgPiAwXG4gICAgICA/IGdyYXBoZW1lcy5zbGljZSgtc3VmZml4R3JhcGhlbWVDb3VudCkuam9pbignJylcbiAgICAgIDogJyc7XG5cbiAgcmV0dXJuIHtcbiAgICBwcmVmaXhUZXh0LFxuICAgIHByZWZpeEdyYXBoZW1lQ291bnQsXG4gICAgc3VmZml4VGV4dCxcbiAgICBzdWZmaXhHcmFwaGVtZUNvdW50LFxuICAgIHRleHQ6IHByZWZpeFRleHQgKyBFTExJUFNJUyArIHN1ZmZpeFRleHQsXG4gICAgdHJ1bmNhdGVkOiB0cnVlLFxuICB9O1xufVxuXG4vKipcbiAqIE1pZGRsZS10cnVuY2F0ZXMgYSBzdHJpbmcgc28gYHByZWZpeC4uLnN1ZmZpeGAgZml0cyB3aXRoaW4gYGF2YWlsYWJsZVdpZHRoYC5cbiAqIFVzZXMgYmluYXJ5IHNlYXJjaCBvdmVyIGdyYXBoZW1lIGNsdXN0ZXJzIHdpdGggYW4gaW5qZWN0YWJsZSBtZWFzdXJlIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBtaWRkbGVUcnVuY2F0ZShcbiAgZ3JhcGhlbWVzOiBzdHJpbmdbXSxcbiAgYXZhaWxhYmxlV2lkdGg6IG51bWJlcixcbiAgbWVhc3VyZTogTWVhc3VyZUZuLFxuICBmdWxsV2lkdGg/OiBudW1iZXJcbik6IFRydW5jYXRlUmVzdWx0IHtcbiAgY29uc3QgZnVsbFRleHQgPSBncmFwaGVtZXMuam9pbignJyk7XG4gIGNvbnN0IHJlc29sdmVkRnVsbFdpZHRoID0gZnVsbFdpZHRoID8/IG1lYXN1cmUoZnVsbFRleHQpO1xuXG4gIGlmIChhdmFpbGFibGVXaWR0aCA8PSAwIHx8IGdyYXBoZW1lcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4ge1xuICAgICAgcHJlZml4VGV4dDogZnVsbFRleHQsXG4gICAgICBwcmVmaXhHcmFwaGVtZUNvdW50OiBncmFwaGVtZXMubGVuZ3RoLFxuICAgICAgc3VmZml4VGV4dDogJycsXG4gICAgICBzdWZmaXhHcmFwaGVtZUNvdW50OiAwLFxuICAgICAgdGV4dDogZnVsbFRleHQsXG4gICAgICB0cnVuY2F0ZWQ6IGZhbHNlLFxuICAgIH07XG4gIH1cblxuICBpZiAocmVzb2x2ZWRGdWxsV2lkdGggPD0gYXZhaWxhYmxlV2lkdGgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcHJlZml4VGV4dDogZnVsbFRleHQsXG4gICAgICBwcmVmaXhHcmFwaGVtZUNvdW50OiBncmFwaGVtZXMubGVuZ3RoLFxuICAgICAgc3VmZml4VGV4dDogJycsXG4gICAgICBzdWZmaXhHcmFwaGVtZUNvdW50OiAwLFxuICAgICAgdGV4dDogZnVsbFRleHQsXG4gICAgICB0cnVuY2F0ZWQ6IGZhbHNlLFxuICAgIH07XG4gIH1cblxuICAvLyBCaW5hcnkgc2VhcmNoIGZvciB0aGUgbWF4aW11bSBudW1iZXIgb2Yga2VwdCBncmFwaGVtZXNcbiAgbGV0IGxvID0gMDtcbiAgbGV0IGhpID0gZ3JhcGhlbWVzLmxlbmd0aCAtIDE7XG4gIGxldCBiZXN0ID0gLTE7XG5cbiAgd2hpbGUgKGxvIDw9IGhpKSB7XG4gICAgY29uc3QgbWlkID0gKGxvICsgaGkpID4+PiAxO1xuICAgIGNvbnN0IGNhbmRpZGF0ZSA9IGJ1aWxkQ2FuZGlkYXRlKGdyYXBoZW1lcywgbWlkKTtcblxuICAgIGlmIChtZWFzdXJlKGNhbmRpZGF0ZS50ZXh0KSA8PSBhdmFpbGFibGVXaWR0aCkge1xuICAgICAgYmVzdCA9IG1pZDtcbiAgICAgIGxvID0gbWlkICsgMTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGkgPSBtaWQgLSAxO1xuICAgIH1cbiAgfVxuXG4gIGlmIChiZXN0ID09PSAtMSkge1xuICAgIHJldHVybiB7XG4gICAgICBwcmVmaXhUZXh0OiAnJyxcbiAgICAgIHByZWZpeEdyYXBoZW1lQ291bnQ6IDAsXG4gICAgICBzdWZmaXhUZXh0OiAnJyxcbiAgICAgIHN1ZmZpeEdyYXBoZW1lQ291bnQ6IDAsXG4gICAgICB0ZXh0OiAnJyxcbiAgICAgIHRydW5jYXRlZDogdHJ1ZSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGJ1aWxkQ2FuZGlkYXRlKGdyYXBoZW1lcywgYmVzdCk7XG59XG5cbmV4cG9ydCB7IG1pZGRsZVRydW5jYXRlLCB0b0dyYXBoZW1lcywgRUxMSVBTSVMsIE1JTl9TVEFSVCwgTUlOX0VORCB9O1xuZXhwb3J0IHR5cGUgeyBNZWFzdXJlRm4sIFRydW5jYXRlUmVzdWx0IH07XG4iXX0=
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Layout constants shared by SplitPane and TraceViewerSkeleton. Kept in a
3
+ * module without 'use client' so the skeleton's import chain stays
4
+ * server-component-safe for external consumers.
5
+ */
6
+ /** Width (px) of the draggable gutter column between the list and timeline. */
7
+ export declare const GUTTER_PX = 1;
8
+ /** Minimum width (px) of either SplitPane pane. */
9
+ export declare const MIN_PX = 50;
10
+ /** Default width (px) of the start (event list) pane. */
11
+ export declare const DEFAULT_START_PX = 340;
12
+ /** Grid column template for the [list | gutter | timeline] split. */
13
+ export declare function paneColTemplate(startPx: number): string;
14
+ //# sourceMappingURL=pane-constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pane-constants.d.ts","sourceRoot":"","sources":["../../../../src/components/new-trace-viewer/components/pane-constants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,+EAA+E;AAC/E,eAAO,MAAM,SAAS,IAAI,CAAC;AAE3B,mDAAmD;AACnD,eAAO,MAAM,MAAM,KAAK,CAAC;AAEzB,yDAAyD;AACzD,eAAO,MAAM,gBAAgB,MAAM,CAAC;AAEpC,qEAAqE;AACrE,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEvD"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Layout constants shared by SplitPane and TraceViewerSkeleton. Kept in a
3
+ * module without 'use client' so the skeleton's import chain stays
4
+ * server-component-safe for external consumers.
5
+ */
6
+ /** Width (px) of the draggable gutter column between the list and timeline. */
7
+ export const GUTTER_PX = 1;
8
+ /** Minimum width (px) of either SplitPane pane. */
9
+ export const MIN_PX = 50;
10
+ /** Default width (px) of the start (event list) pane. */
11
+ export const DEFAULT_START_PX = 340;
12
+ /** Grid column template for the [list | gutter | timeline] split. */
13
+ export function paneColTemplate(startPx) {
14
+ return `${startPx}px ${GUTTER_PX}px minmax(${MIN_PX}px, 1fr)`;
15
+ }
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFuZS1jb25zdGFudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9uZXctdHJhY2Utdmlld2VyL2NvbXBvbmVudHMvcGFuZS1jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVILCtFQUErRTtBQUMvRSxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUFDO0FBRTNCLG1EQUFtRDtBQUNuRCxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBRXpCLHlEQUF5RDtBQUN6RCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLENBQUM7QUFFcEMscUVBQXFFO0FBQ3JFLE1BQU0sVUFBVSxlQUFlLENBQUMsT0FBZTtJQUM3QyxPQUFPLEdBQUcsT0FBTyxNQUFNLFNBQVMsYUFBYSxNQUFNLFVBQVUsQ0FBQztBQUNoRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBMYXlvdXQgY29uc3RhbnRzIHNoYXJlZCBieSBTcGxpdFBhbmUgYW5kIFRyYWNlVmlld2VyU2tlbGV0b24uIEtlcHQgaW4gYVxuICogbW9kdWxlIHdpdGhvdXQgJ3VzZSBjbGllbnQnIHNvIHRoZSBza2VsZXRvbidzIGltcG9ydCBjaGFpbiBzdGF5c1xuICogc2VydmVyLWNvbXBvbmVudC1zYWZlIGZvciBleHRlcm5hbCBjb25zdW1lcnMuXG4gKi9cblxuLyoqIFdpZHRoIChweCkgb2YgdGhlIGRyYWdnYWJsZSBndXR0ZXIgY29sdW1uIGJldHdlZW4gdGhlIGxpc3QgYW5kIHRpbWVsaW5lLiAqL1xuZXhwb3J0IGNvbnN0IEdVVFRFUl9QWCA9IDE7XG5cbi8qKiBNaW5pbXVtIHdpZHRoIChweCkgb2YgZWl0aGVyIFNwbGl0UGFuZSBwYW5lLiAqL1xuZXhwb3J0IGNvbnN0IE1JTl9QWCA9IDUwO1xuXG4vKiogRGVmYXVsdCB3aWR0aCAocHgpIG9mIHRoZSBzdGFydCAoZXZlbnQgbGlzdCkgcGFuZS4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX1NUQVJUX1BYID0gMzQwO1xuXG4vKiogR3JpZCBjb2x1bW4gdGVtcGxhdGUgZm9yIHRoZSBbbGlzdCB8IGd1dHRlciB8IHRpbWVsaW5lXSBzcGxpdC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYW5lQ29sVGVtcGxhdGUoc3RhcnRQeDogbnVtYmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke3N0YXJ0UHh9cHggJHtHVVRURVJfUFh9cHggbWlubWF4KCR7TUlOX1BYfXB4LCAxZnIpYDtcbn1cbiJdfQ==