@workflow/web-shared 5.0.0-beta.26 → 5.0.0-beta.28
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.
- package/dist/components/new-trace-viewer/components/detail-panel-width.d.ts +34 -0
- package/dist/components/new-trace-viewer/components/detail-panel-width.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/components/detail-panel-width.js +67 -0
- package/dist/components/new-trace-viewer/components/detail-panel.d.ts +14 -0
- package/dist/components/new-trace-viewer/components/detail-panel.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/components/detail-panel.js +122 -0
- package/dist/components/new-trace-viewer/components/draggable-border.d.ts +31 -0
- package/dist/components/new-trace-viewer/components/draggable-border.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/components/draggable-border.js +140 -0
- package/dist/components/new-trace-viewer/components/event-list.d.ts +1 -1
- package/dist/components/new-trace-viewer/components/event-list.d.ts.map +1 -1
- package/dist/components/new-trace-viewer/components/event-list.js +3 -5
- package/dist/components/new-trace-viewer/components/middle-truncate/truncate.d.ts +1 -1
- package/dist/components/new-trace-viewer/components/middle-truncate/truncate.d.ts.map +1 -1
- package/dist/components/new-trace-viewer/components/middle-truncate/truncate.js +2 -2
- package/dist/components/new-trace-viewer/components/minimap.d.ts +14 -0
- package/dist/components/new-trace-viewer/components/minimap.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/components/minimap.js +337 -0
- package/dist/components/new-trace-viewer/components/pane-constants.d.ts +14 -0
- package/dist/components/new-trace-viewer/components/pane-constants.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/components/pane-constants.js +16 -0
- package/dist/components/new-trace-viewer/components/split-pane.d.ts +1 -4
- package/dist/components/new-trace-viewer/components/split-pane.d.ts.map +1 -1
- package/dist/components/new-trace-viewer/components/split-pane.js +18 -16
- package/dist/components/new-trace-viewer/components/timeline.d.ts +2 -2
- package/dist/components/new-trace-viewer/components/timeline.d.ts.map +1 -1
- package/dist/components/new-trace-viewer/components/timeline.js +5 -7
- package/dist/components/new-trace-viewer/components/trace-viewer-skeleton.d.ts.map +1 -1
- package/dist/components/new-trace-viewer/components/trace-viewer-skeleton.js +10 -3
- package/dist/components/new-trace-viewer/components/use-element-width.d.ts +8 -0
- package/dist/components/new-trace-viewer/components/use-element-width.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/components/use-element-width.js +25 -0
- package/dist/components/new-trace-viewer/context.d.ts +2 -0
- package/dist/components/new-trace-viewer/context.d.ts.map +1 -1
- package/dist/components/new-trace-viewer/context.js +3 -2
- package/dist/components/new-trace-viewer/trace-viewer.d.ts.map +1 -1
- package/dist/components/new-trace-viewer/trace-viewer.js +53 -181
- package/dist/components/new-trace-viewer/utils.d.ts +21 -0
- package/dist/components/new-trace-viewer/utils.d.ts.map +1 -1
- package/dist/components/new-trace-viewer/utils.js +44 -3
- package/dist/components/sidebar/attribute-panel.d.ts.map +1 -1
- package/dist/components/sidebar/attribute-panel.js +38 -35
- package/dist/components/sidebar/attributes-block.d.ts +18 -7
- package/dist/components/sidebar/attributes-block.d.ts.map +1 -1
- package/dist/components/sidebar/attributes-block.js +76 -18
- package/dist/components/sidebar/events-list.d.ts +1 -1
- package/dist/components/sidebar/events-list.d.ts.map +1 -1
- package/dist/components/sidebar/events-list.js +9 -10
- package/dist/components/trace-viewer/components/map.d.ts +2 -2
- package/dist/components/trace-viewer/components/map.d.ts.map +1 -1
- package/dist/components/trace-viewer/components/node.d.ts +7 -7
- package/dist/components/trace-viewer/components/node.d.ts.map +1 -1
- package/dist/components/ui/collapsible.d.ts +46 -0
- package/dist/components/ui/collapsible.d.ts.map +1 -0
- package/dist/components/ui/collapsible.js +66 -0
- package/dist/components/ui/data-inspector.js +2 -7
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/lib/hydration.d.ts +12 -2
- package/dist/lib/hydration.d.ts.map +1 -1
- package/dist/lib/hydration.js +41 -18
- package/dist/lib/utils.d.ts +8 -5
- package/dist/lib/utils.d.ts.map +1 -1
- package/dist/lib/utils.js +13 -16
- package/package.json +6 -6
- package/src/components/new-trace-viewer/components/detail-panel-width.test.ts +123 -0
- package/src/components/new-trace-viewer/components/detail-panel-width.ts +76 -0
- package/src/components/new-trace-viewer/components/detail-panel.tsx +272 -0
- package/src/components/new-trace-viewer/components/draggable-border.tsx +216 -0
- package/src/components/new-trace-viewer/components/event-list.tsx +3 -5
- package/src/components/new-trace-viewer/components/middle-truncate/truncate.ts +1 -1
- package/src/components/new-trace-viewer/components/minimap.tsx +559 -0
- package/src/components/new-trace-viewer/components/pane-constants.ts +19 -0
- package/src/components/new-trace-viewer/components/split-pane.tsx +44 -55
- package/src/components/new-trace-viewer/components/timeline.tsx +3 -5
- package/src/components/new-trace-viewer/components/trace-viewer-skeleton.tsx +21 -1
- package/src/components/new-trace-viewer/components/use-element-width.ts +29 -0
- package/src/components/new-trace-viewer/context.tsx +4 -1
- package/src/components/new-trace-viewer/trace-viewer.tsx +93 -312
- package/src/components/new-trace-viewer/utils.test.ts +65 -0
- package/src/components/new-trace-viewer/utils.ts +76 -2
- package/src/components/sidebar/attribute-panel.tsx +106 -105
- package/src/components/sidebar/attributes-block.tsx +170 -50
- package/src/components/sidebar/events-list.tsx +107 -92
- package/src/components/ui/collapsible.tsx +219 -0
- package/src/index.ts +8 -7
- package/src/lib/hydration.ts +48 -25
- package/src/lib/utils.test.ts +33 -0
- package/src/lib/utils.ts +12 -16
- package/dist/components/sidebar/detail-card.d.ts +0 -13
- package/dist/components/sidebar/detail-card.d.ts.map +0 -1
- package/dist/components/sidebar/detail-card.js +0 -36
- 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZ2dhYmxlLWJvcmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL25ldy10cmFjZS12aWV3ZXIvY29tcG9uZW50cy9kcmFnZ2FibGUtYm9yZGVyLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUM7O0FBRWIsT0FBTyxFQUlMLFNBQVMsRUFDVCxNQUFNLEVBQ04sUUFBUSxHQUNULE1BQU0sT0FBTyxDQUFDO0FBQ2YsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBcUJyQzs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQUMsRUFDOUIsT0FBTyxFQUNQLFFBQVEsRUFDUixhQUFhLEVBQ2IsT0FBTyxFQUNQLFlBQVksRUFBRSxTQUFTLEVBQ3ZCLGVBQWUsRUFBRSxZQUFZLEVBQzdCLGVBQWUsRUFBRSxZQUFZLEVBQzdCLGVBQWUsRUFBRSxZQUFZLEVBQzdCLGVBQWUsRUFBRSxZQUFZLEdBQ1I7SUFDckIsTUFBTSxDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEQsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFnQixJQUFJLENBQUMsQ0FBQztJQUNqRCxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUIsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQWdCLElBQUksQ0FBQyxDQUFDO0lBQzNDLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQixNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVuQyxTQUFTLENBQUMsR0FBRyxFQUFF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VyxzQkFDQyxVQUFVLGdCQUNmLFNBQVMsbUJBQ04sWUFBWSxtQkFDWixZQUFZLG1CQUNaLFlBQVksbUJBQ1osWUFBWSxFQUMzQixRQUFRLEVBQUUsQ0FBQyxFQUNYLFNBQVMsRUFBRSxFQUFFLENBQ1gsa0ZBQWtGLEVBQ2xGLFFBQVEsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUM3QyxFQUNELGFBQWEsRUFBRSxpQkFBaUIsRUFDaEMsYUFBYSxFQUFFLGlCQUFpQixFQUNoQyxXQUFXLEVBQUUsZ0JBQWdCLEVBQzdCLGVBQWUsRUFBRSxnQkFBZ0IsRUFDakMsb0JBQW9CLEVBQUUsd0JBQXdCLEVBQzlDLGFBQWEsRUFBRSxpQkFBaUIsRUFDaEMsU0FBUyxFQUFFLGFBQWEsWUFVeEIsb0NBRUUsU0FBUyxFQUFFLEVBQUUsQ0FDWCw4SEFBOEgsRUFDOUgsd0VBQXdFLEVBQ3hFLFVBQVUsSUFBSSxhQUFhLENBQzVCLEdBQ0QsR0FDRSxDQUNQLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQge1xuICB0eXBlIEtleWJvYXJkRXZlbnQgYXMgUmVhY3RLZXlib2FyZEV2ZW50LFxuICB0eXBlIFBvaW50ZXJFdmVudCBhcyBSZWFjdFBvaW50ZXJFdmVudCxcbiAgdHlwZSBSZWZPYmplY3QsXG4gIHVzZUVmZmVjdCxcbiAgdXNlUmVmLFxuICB1c2VTdGF0ZSxcbn0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY24gfSBmcm9tICcuLi8uLi8uLi9saWIvY24nO1xuXG5pbnRlcmZhY2UgRHJhZ2dhYmxlQm9yZGVyUHJvcHMge1xuICAvKiogVGhlIHBhbmVsIHdob3NlIHdpZHRoIHRoaXMgYm9yZGVyIGFkanVzdHMgKG1lYXN1cmVkIG9uIGludGVyYWN0aW9uKS4gKi9cbiAgZWxlbWVudDogUmVmT2JqZWN0PEhUTUxFbGVtZW50IHwgbnVsbD47XG4gIC8qKiBXaGljaCBlZGdlIG9mIHRoZSBwYW5lbCB0aGUgYm9yZGVyIHNpdHMgb24uICovXG4gIHBvc2l0aW9uOiAnbGVmdCcgfCAncmlnaHQnO1xuICAvKipcbiAgICogQ2FsbGVkIHdpdGggdGhlIG5leHQgd2lkdGggKHB4KSB3aGlsZSBkcmFnZ2luZyBvciBrZXlib2FyZC1yZXNpemluZy5cbiAgICogVGhlIG93bmVyIGlzIHJlc3BvbnNpYmxlIGZvciBjbGFtcGluZy5cbiAgICovXG4gIG9uV2lkdGhDaGFuZ2U6ICh3aWR0aDogbnVtYmVyKSA9PiB2b2lkO1xuICAvKiogRG91YmxlLWNsaWNrIHJlc2V0LiAqL1xuICBvblJlc2V0PzogKCkgPT4gdm9pZDtcbiAgJ2FyaWEtbGFiZWwnOiBzdHJpbmc7XG4gICdhcmlhLWNvbnRyb2xzJz86IHN0cmluZztcbiAgJ2FyaWEtdmFsdWVtaW4nPzogbnVtYmVyO1xuICAnYXJpYS12YWx1ZW1heCc/OiBudW1iZXI7XG4gICdhcmlhLXZhbHVlbm93Jz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBPdmVybGF5IGRyYWcgaGFuZGxlIHN0cmFkZGxpbmcgYSBwYW5lbCBlZGdlOiBhbiBpbnZpc2libGUgc3RyaXAgb3ZlciB0aGVcbiAqIHBhbmVsJ3MgYm9yZGVyIHdob3NlIGNlbnRlciBsaW5lIGhpZ2hsaWdodHMgb24gaG92ZXIvZHJhZywgd2l0aFxuICogZG91YmxlLWNsaWNrIHJlc2V0LCBwb2ludGVyLWNhcHR1cmUgZHJhZ2dpbmcgKHdvcmtzIHdpdGggdG91Y2gvcGVuLCBub1xuICogZ2hvc3QgaW1hZ2UpLCBhbmQga2V5Ym9hcmQvQVJJQSB3aW5kb3ctc3BsaXR0ZXIgc3VwcG9ydC5cbiAqXG4gKiBUaGUgcGFuZWwncyBwb3NpdGlvbmluZyBhbmNlc3RvciBtdXN0IG5vdCBjbGlwIG92ZXJmbG93IOKAlCB0aGUgc3RyaXAgaGFuZ3NcbiAqIH44cHggcGFzdCB0aGUgcGFuZWwgZWRnZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIERyYWdnYWJsZUJvcmRlcih7XG4gIGVsZW1lbnQsXG4gIHBvc2l0aW9uLFxuICBvbldpZHRoQ2hhbmdlLFxuICBvblJlc2V0LFxuICAnYXJpYS1sYWJlbCc6IGFyaWFMYWJlbCxcbiAgJ2FyaWEtY29udHJvbHMnOiBhcmlhQ29udHJvbHMsXG4gICdhcmlhLXZhbHVlbWluJzogYXJpYVZhbHVlTWluLFxuICAnYXJpYS12YWx1ZW1heCc6IGFyaWFWYWx1ZU1heCxcbiAgJ2FyaWEtdmFsdWVub3cnOiBhcmlhVmFsdWVOb3csXG59OiBEcmFnZ2FibGVCb3JkZXJQcm9wcykge1xuICBjb25zdCBbaXNEcmFnZ2luZywgc2V0SXNEcmFnZ2luZ10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IHBvaW50ZXJJZFJlZiA9IHVzZVJlZjxudW1iZXIgfCBudWxsPihudWxsKTtcbiAgY29uc3Qgc3RhcnRYUmVmID0gdXNlUmVmKDApO1xuICBjb25zdCBzdGFydFdpZHRoUmVmID0gdXNlUmVmKDApO1xuICBjb25zdCBwZW5kaW5nV2lkdGhSZWYgPSB1c2VSZWYoMCk7XG4gIGNvbnN0IHJhZlJlZiA9IHVzZVJlZjxudW1iZXIgfCBudWxsPihudWxsKTtcbiAgY29uc3QgbW92ZWRSZWYgPSB1c2VSZWYoZmFsc2UpO1xuICBjb25zdCBsYXN0RHJhZ0VuZEF0UmVmID0gdXNlUmVmKDApO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChyYWZSZWYuY3VycmVudCkgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmUmVmLmN1cnJlbnQpO1xuICAgIH07XG4gIH0sIFtdKTtcblxuICAvLyBTdXBwcmVzcyB0ZXh0IHNlbGVjdGlvbiBmb3IgdGhlIGR1cmF0aW9uIG9mIGEgZHJhZy4gRWZmZWN0IGNsZWFudXAgYWxzb1xuICAvLyBjb3ZlcnMgdGhlIGhhbmRsZSB1bm1vdW50aW5nIG1pZC1kcmFnIChlLmcuIEVzY2FwZSBjbG9zaW5nIHRoZSBwYW5lbCkuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc0RyYWdnaW5nKSByZXR1cm47XG4gICAgY29uc3QgcHJldmlvdXMgPSBkb2N1bWVudC5ib2R5LnN0eWxlLnVzZXJTZWxlY3Q7XG4gICAgZG9jdW1lbnQuYm9keS5zdHlsZS51c2VyU2VsZWN0ID0gJ25vbmUnO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLnVzZXJTZWxlY3QgPSBwcmV2aW91cztcbiAgICB9O1xuICB9LCBbaXNEcmFnZ2luZ10pO1xuXG4gIGNvbnN0IHN0b3BEcmFnID0gKCkgPT4ge1xuICAgIHBvaW50ZXJJZFJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICBzZXRJc0RyYWdnaW5nKGZhbHNlKTtcbiAgICBpZiAocmFmUmVmLmN1cnJlbnQpIHtcbiAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZlJlZi5jdXJyZW50KTtcbiAgICAgIHJhZlJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICAgIC8vIEZsdXNoIHRoZSBmaW5hbCBwb3NpdGlvbiB0aGF0IHdhcyBzdGlsbCB3YWl0aW5nIG9uIHRoZSBuZXh0IGZyYW1lLlxuICAgICAgaWYgKG1vdmVkUmVmLmN1cnJlbnQpIG9uV2lkdGhDaGFuZ2UocGVuZGluZ1dpZHRoUmVmLmN1cnJlbnQpO1xuICAgIH1cbiAgICBpZiAobW92ZWRSZWYuY3VycmVudCkge1xuICAgICAgbW92ZWRSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgICAgbGFzdERyYWdFbmRBdFJlZi5jdXJyZW50ID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVBvaW50ZXJEb3duID0gKGU6IFJlYWN0UG9pbnRlckV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgIC8vIElnbm9yZSBzZWNvbmRhcnkgcG9pbnRlcnMgKGUuZy4gYSBzZWNvbmQgZmluZ2VyKSB3aGlsZSBhIGRyYWcgaXMgYWN0aXZlXG4gICAgLy8gc28gdGhleSBjYW4ndCByZS1iYXNlbGluZSB0aGUgZ2VzdHVyZS5cbiAgICBpZiAocG9pbnRlcklkUmVmLmN1cnJlbnQgIT09IG51bGwpIHJldHVybjtcbiAgICBjb25zdCBlbCA9IGVsZW1lbnQuY3VycmVudDtcbiAgICBpZiAoIWVsKSByZXR1cm47XG4gICAgaWYgKGUucG9pbnRlclR5cGUgPT09ICdtb3VzZScgJiYgZS5idXR0b24gIT09IDApIHJldHVybjtcbiAgICBlLmN1cnJlbnRUYXJnZXQuc2V0UG9pbnRlckNhcHR1cmUoZS5wb2ludGVySWQpO1xuICAgIHBvaW50ZXJJZFJlZi5jdXJyZW50ID0gZS5wb2ludGVySWQ7XG4gICAgc3RhcnRYUmVmLmN1cnJlbnQgPSBlLmNsaWVudFg7XG4gICAgc3RhcnRXaWR0aFJlZi5jdXJyZW50ID0gZWwub2Zmc2V0V2lkdGg7XG4gICAgbW92ZWRSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgIHNldElzRHJhZ2dpbmcodHJ1ZSk7XG4gIH07XG5cbiAgLy8gUG9pbnRlciBjYXB0dXJlIHJvdXRlcyBtb3ZlL3VwIGV2ZW50cyB0byB0aGUgc3RyaXAgaXRzZWxmLCBzbyBub1xuICAvLyBkb2N1bWVudC1sZXZlbCBsaXN0ZW5lcnMgYXJlIG5lZWRlZC5cbiAgY29uc3QgaGFuZGxlUG9pbnRlck1vdmUgPSAoZTogUmVhY3RQb2ludGVyRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgaWYgKHBvaW50ZXJJZFJlZi5jdXJyZW50ICE9PSBlLnBvaW50ZXJJZCkgcmV0dXJuO1xuICAgIGlmIChNYXRoLmFicyhlLmNsaWVudFggLSBzdGFydFhSZWYuY3VycmVudCkgPiA0KSB7XG4gICAgICBtb3ZlZFJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgZGVsdGEgPVxuICAgICAgcG9zaXRpb24gPT09ICdsZWZ0J1xuICAgICAgICA/IHN0YXJ0WFJlZi5jdXJyZW50IC0gZS5jbGllbnRYXG4gICAgICAgIDogZS5jbGllbnRYIC0gc3RhcnRYUmVmLmN1cnJlbnQ7XG4gICAgcGVuZGluZ1dpZHRoUmVmLmN1cnJlbnQgPSBzdGFydFdpZHRoUmVmLmN1cnJlbnQgKyBkZWx0YTtcbiAgICBpZiAoIXJhZlJlZi5jdXJyZW50KSB7XG4gICAgICByYWZSZWYuY3VycmVudCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIHJhZlJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICAgICAgb25XaWR0aENoYW5nZShwZW5kaW5nV2lkdGhSZWYuY3VycmVudCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlUG9pbnRlckVuZCA9IChlOiBSZWFjdFBvaW50ZXJFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICBpZiAocG9pbnRlcklkUmVmLmN1cnJlbnQgIT09IGUucG9pbnRlcklkKSByZXR1cm47XG4gICAgc3RvcERyYWcoKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVMb3N0UG9pbnRlckNhcHR1cmUgPSAoZTogUmVhY3RQb2ludGVyRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgaWYgKHBvaW50ZXJJZFJlZi5jdXJyZW50ICE9PSBudWxsICYmIGUucG9pbnRlcklkICE9PSBwb2ludGVySWRSZWYuY3VycmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzdG9wRHJhZygpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZURvdWJsZUNsaWNrID0gKCkgPT4ge1xuICAgIC8vIFBvaW50ZXItY2FwdHVyZSBkcmFncyBzdGlsbCBlbWl0IGNsaWNrL2RibGNsaWNrICh1bmxpa2UgSFRNTDUgZHJhZyksIHNvXG4gICAgLy8gYSBkYmxjbGljayBkdXJpbmcgb3IgcmlnaHQgYWZ0ZXIgYSByZWFsIGRyYWcgaXMgdHdvIHJlc2l6ZSBudWRnZXMsIG5vdFxuICAgIC8vIGEgcmVzZXQgcmVxdWVzdC5cbiAgICBpZiAoXG4gICAgICBtb3ZlZFJlZi5jdXJyZW50IHx8XG4gICAgICBwZXJmb3JtYW5jZS5ub3coKSAtIGxhc3REcmFnRW5kQXRSZWYuY3VycmVudCA8IDUwMFxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBvblJlc2V0Py4oKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVLZXlEb3duID0gKGU6IFJlYWN0S2V5Ym9hcmRFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICBjb25zdCBlbCA9IGVsZW1lbnQuY3VycmVudDtcbiAgICBpZiAoIWVsKSByZXR1cm47XG4gICAgY29uc3Qgc3RlcCA9IGUuc2hpZnRLZXkgPyA2NCA6IDE2O1xuICAgIC8vIEFycm93cyBtb3ZlIHRoZSBib3JkZXIgaW4gc2NyZWVuIGRpcmVjdGlvbjogZm9yIGEgbGVmdC1lZGdlIGJvcmRlcixcbiAgICAvLyBBcnJvd0xlZnQgZ3Jvd3MgdGhlIHBhbmVsLlxuICAgIGNvbnN0IGdyb3cgPSBwb3NpdGlvbiA9PT0gJ2xlZnQnID8gMSA6IC0xO1xuICAgIGxldCBuZXh0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgICBpZiAoZS5rZXkgPT09ICdBcnJvd0xlZnQnKSB7XG4gICAgICBuZXh0ID0gZWwub2Zmc2V0V2lkdGggKyBncm93ICogc3RlcDtcbiAgICB9IGVsc2UgaWYgKGUua2V5ID09PSAnQXJyb3dSaWdodCcpIHtcbiAgICAgIG5leHQgPSBlbC5vZmZzZXRXaWR0aCAtIGdyb3cgKiBzdGVwO1xuICAgIH0gZWxzZSBpZiAoZS5rZXkgPT09ICdIb21lJyAmJiBhcmlhVmFsdWVNaW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgbmV4dCA9IGFyaWFWYWx1ZU1pbjtcbiAgICB9IGVsc2UgaWYgKGUua2V5ID09PSAnRW5kJyAmJiBhcmlhVmFsdWVNYXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgbmV4dCA9IGFyaWFWYWx1ZU1heDtcbiAgICB9XG4gICAgaWYgKG5leHQgPT09IG51bGwpIHJldHVybjtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgb25XaWR0aENoYW5nZShuZXh0KTtcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L2ExMXkvdXNlU2VtYW50aWNFbGVtZW50czogdGhlIFdBSS1BUklBIHdpbmRvdy1zcGxpdHRlciBwYXR0ZXJuIHJlcXVpcmVzIGEgZm9jdXNhYmxlIGRpdiB3aXRoIHJvbGU9c2VwYXJhdG9yOyA8aHI+IGNhbm5vdCByZWNlaXZlIGZvY3VzIG9yIGRyYWcgaW50ZXJhY3Rpb25zXG4gICAgPGRpdlxuICAgICAgcm9sZT1cInNlcGFyYXRvclwiXG4gICAgICBhcmlhLW9yaWVudGF0aW9uPVwidmVydGljYWxcIlxuICAgICAgYXJpYS1sYWJlbD17YXJpYUxhYmVsfVxuICAgICAgYXJpYS1jb250cm9scz17YXJpYUNvbnRyb2xzfVxuICAgICAgYXJpYS12YWx1ZW1pbj17YXJpYVZhbHVlTWlufVxuICAgICAgYXJpYS12YWx1ZW1heD17YXJpYVZhbHVlTWF4fVxuICAgICAgYXJpYS12YWx1ZW5vdz17YXJpYVZhbHVlTm93fVxuICAgICAgdGFiSW5kZXg9ezB9XG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAnZ3JvdXAgYWJzb2x1dGUgaW5zZXQteS0wIHotMTAgdy1bMTdweF0gY3Vyc29yLWNvbC1yZXNpemUgdG91Y2gtbm9uZSBvdXRsaW5lLW5vbmUnLFxuICAgICAgICBwb3NpdGlvbiA9PT0gJ2xlZnQnID8gJy1sZWZ0LTInIDogJy1yaWdodC0yJ1xuICAgICAgKX1cbiAgICAgIG9uUG9pbnRlckRvd249e2hhbmRsZVBvaW50ZXJEb3dufVxuICAgICAgb25Qb2ludGVyTW92ZT17aGFuZGxlUG9pbnRlck1vdmV9XG4gICAgICBvblBvaW50ZXJVcD17aGFuZGxlUG9pbnRlckVuZH1cbiAgICAgIG9uUG9pbnRlckNhbmNlbD17aGFuZGxlUG9pbnRlckVuZH1cbiAgICAgIG9uTG9zdFBvaW50ZXJDYXB0dXJlPXtoYW5kbGVMb3N0UG9pbnRlckNhcHR1cmV9XG4gICAgICBvbkRvdWJsZUNsaWNrPXtoYW5kbGVEb3VibGVDbGlja31cbiAgICAgIG9uS2V5RG93bj17aGFuZGxlS2V5RG93bn1cbiAgICA+XG4gICAgICB7LyogQ2VudGVyIGxpbmU6IHNpdHMgZXhhY3RseSBvdmVyIHRoZSBwYW5lbCdzIDFweCBib3JkZXIgYW5kIGhpZ2hsaWdodHNcbiAgICAgICAgICBvbiBob3Zlci9kcmFnL2ZvY3VzIChkZWxheWVkIHNvIGluY2lkZW50YWwgbW91c2Utb3ZlcnMgZG9uJ3QgZmxhc2gpLlxuICAgICAgICAgIHBvaW50ZXItZXZlbnRzLW5vbmUgaXMgbG9hZC1iZWFyaW5nOiB3aXRob3V0IGl0IHRoaXMgMXB4IGxpbmUgaXMgYVxuICAgICAgICAgIGhpdCB0YXJnZXQsIHNvIGEgZG91YmxlLWNsaWNrIGFpbWVkIGF0IHRoZSBsaW5lIGxhbmRzIG9uZSBjbGljayBvblxuICAgICAgICAgIHRoZSBsaW5lIGFuZCAoYWZ0ZXIgc3ViLXBpeGVsIGppdHRlcikgdGhlIG90aGVyIG9uIHRoZSBzdHJpcC4gQVxuICAgICAgICAgIG5hdGl2ZSBkYmxjbGljayBvbmx5IGZpcmVzIHdoZW4gYm90aCBjbGlja3Mgc2hhcmUgYSB0YXJnZXQsIHNvIHRoZVxuICAgICAgICAgIHJlc2V0IHNpbGVudGx5IGZhaWxzIG9uIHRoZSBsaW5lIGJ1dCB3b3JrcyBqdXN0IGJlc2lkZSBpdC4gS2VlcGluZ1xuICAgICAgICAgIHRoZSBsaW5lIGluZXJ0IG1ha2VzIHRoZSBzZXBhcmF0b3IgZGl2IHRoZSBzb2xlIHRhcmdldCBldmVyeXdoZXJlLiAqL31cbiAgICAgIDxzcGFuXG4gICAgICAgIGFyaWEtaGlkZGVuXG4gICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgJ3BvaW50ZXItZXZlbnRzLW5vbmUgYWJzb2x1dGUgaW5zZXQteS0wIGxlZnQtMS8yIHctcHggLXRyYW5zbGF0ZS14LTEvMiBiZy10cmFuc3BhcmVudCB0cmFuc2l0aW9uLWNvbG9ycyBkZWxheS03NSBkdXJhdGlvbi0xMDAnLFxuICAgICAgICAgICdncm91cC1ob3ZlcjpiZy1ncmF5LTUwMCBncm91cC1mb2N1cy12aXNpYmxlOmJnLVt2YXIoLS1kcy1mb2N1cy1jb2xvcildJyxcbiAgICAgICAgICBpc0RyYWdnaW5nICYmICdiZy1ncmF5LTUwMCdcbiAgICAgICAgKX1cbiAgICAgIC8+XG4gICAgPC9kaXY+XG4gICk7XG59XG4iXX0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-list.d.ts","sourceRoot":"","sources":["../../../../src/components/new-trace-viewer/components/event-list.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"event-list.d.ts","sourceRoot":"","sources":["../../../../src/components/new-trace-viewer/components/event-list.tsx"],"names":[],"mappings":"AAUA,OAAO,EAAwB,KAAK,gBAAgB,EAAE,MAAM,WAAW,CAAC;AACxE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAoFrC,QAAA,MAAM,SAAS,GAAI,sDAKhB;IACD,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,EAAE,gBAAgB,CAAC;IAC/B,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC,4CA0BA,CAAC;AAEF,eAAe,SAAS,CAAC"}
|
|
@@ -5,7 +5,7 @@ import { cn } from '../../../lib/cn';
|
|
|
5
5
|
import { formatDurationPrecise } from '../../trace-viewer/util/timing';
|
|
6
6
|
import { SleepIcon, StepForwardIcon, WebhookIcon, WorkflowIcon, } from '../icons';
|
|
7
7
|
import { isSpanDimmedBySearch } from '../search';
|
|
8
|
-
import { getSpanDurationMs } from '../utils';
|
|
8
|
+
import { getSpanDurationMs, isSpanErrored } from '../utils';
|
|
9
9
|
import { MiddleTruncate } from './middle-truncate/middle-truncate';
|
|
10
10
|
import { ROW_HEIGHT_PX, useRowWindow } from './use-row-window';
|
|
11
11
|
const eventStyles = {
|
|
@@ -28,9 +28,7 @@ function getEventStyle(resource, isErrored) {
|
|
|
28
28
|
}
|
|
29
29
|
const EventRow = ({ span, isSelected, isDimmed, onSelectSpan, }) => {
|
|
30
30
|
const durationMs = getSpanDurationMs(span);
|
|
31
|
-
const
|
|
32
|
-
?.status;
|
|
33
|
-
const isErrored = span.status.code === 2 || workflowStatus === 'failed';
|
|
31
|
+
const isErrored = isSpanErrored(span);
|
|
34
32
|
const { icon: Icon, className: tagClassName } = getEventStyle(span.resource, isErrored);
|
|
35
33
|
return (_jsx("li", { className: cn('relative overflow-clip group transition-opacity', ROW_HEIGHT_CLASS, isDimmed && 'opacity-35'), role: "treeitem", "aria-selected": isSelected, "aria-expanded": isSelected, "aria-level": 1, onClick: () => onSelectSpan(span.spanId), children: _jsx("div", { className: "h-full hover:bg-gray-100 group-aria-selected:bg-gray-100 group-aria-selected:hover:bg-gray-200", children: _jsxs("div", { className: "flex h-full min-w-0 items-center pl-4 pr-2", children: [_jsxs("div", { className: "flex min-w-0 flex-1 items-center gap-2", children: [_jsx("span", { className: cn('shrink-0', tagClassName), children: _jsx(Icon, { className: "w-4 h-4" }) }), _jsx("span", { className: "min-w-0 text-label-14", children: _jsx(MiddleTruncate, { value: span.name }) })] }), _jsx("div", { className: "ml-2 shrink-0", children: _jsx("span", { className: "text-label-14 text-gray-900 tabular-nums", children: formatDurationPrecise(durationMs) }) })] }) }) }));
|
|
36
34
|
};
|
|
@@ -43,4 +41,4 @@ const EventList = ({ spans, activeSpanId, searchResult, onSelectSpan, }) => {
|
|
|
43
41
|
}, children: spans.slice(start, end).map((span) => (_jsx(EventRow, { span: span, isSelected: span.spanId === activeSpanId, isDimmed: isSpanDimmedBySearch(span.spanId, searchResult), onSelectSpan: onSelectSpan }, span.spanId))) }));
|
|
44
42
|
};
|
|
45
43
|
export default EventList;
|
|
46
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtbGlzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL25ldy10cmFjZS12aWV3ZXIvY29tcG9uZW50cy9ldmVudC1saXN0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN0QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQy9CLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNyQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN2RSxPQUFPLEVBQ0wsU0FBUyxFQUNULGVBQWUsRUFDZixXQUFXLEVBQ1gsWUFBWSxHQUNiLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBRSxvQkFBb0IsRUFBeUIsTUFBTSxXQUFXLENBQUM7QUFFeEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGFBQWEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUM1RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQU8vRCxNQUFNLFdBQVcsR0FBK0I7SUFDOUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFO0lBQ3ZELElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO0lBQzVELElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRTtJQUN2RCxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUU7Q0FDdkQsQ0FBQztBQUVGLE1BQU0sWUFBWSxHQUFlO0lBQy9CLElB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eEMsUUFBUSxFQUFFLG9CQUFvQixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLEVBQ3pELFlBQVksRUFBRSxZQUFZLElBSnJCLElBQUksQ0FBQyxNQUFNLENBS2hCLENBQ0gsQ0FBQyxHQUNDLENBQ04sQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLGVBQWUsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2lyY2xlIH0gZnJvbSAnbHVjaWRlLXJlYWN0JztcbmltcG9ydCB7IHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNuIH0gZnJvbSAnLi4vLi4vLi4vbGliL2NuJztcbmltcG9ydCB7IGZvcm1hdER1cmF0aW9uUHJlY2lzZSB9IGZyb20gJy4uLy4uL3RyYWNlLXZpZXdlci91dGlsL3RpbWluZyc7XG5pbXBvcnQge1xuICBTbGVlcEljb24sXG4gIFN0ZXBGb3J3YXJkSWNvbixcbiAgV2ViaG9va0ljb24sXG4gIFdvcmtmbG93SWNvbixcbn0gZnJvbSAnLi4vaWNvbnMnO1xuaW1wb3J0IHsgaXNTcGFuRGltbWVkQnlTZWFyY2gsIHR5cGUgU3BhblNlYXJjaFJlc3VsdCB9IGZyb20gJy4uL3NlYXJjaCc7XG5pbXBvcnQgdHlwZSB7IFNwYW4gfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBnZXRTcGFuRHVyYXRpb25NcywgaXNTcGFuRXJyb3JlZCB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IE1pZGRsZVRydW5jYXRlIH0gZnJvbSAnLi9taWRkbGUtdHJ1bmNhdGUvbWlkZGxlLXRydW5jYXRlJztcbmltcG9ydCB7IFJPV19IRUlHSFRfUFgsIHVzZVJvd1dpbmRvdyB9IGZyb20gJy4vdXNlLXJvdy13aW5kb3cnO1xuXG5pbnRlcmZhY2UgRXZlbnRTdHlsZSB7XG4gIGljb246IFJlYWN0LkNvbXBvbmVudFR5cGU8eyBjbGFzc05hbWU/OiBzdHJpbmcgfT47XG4gIGNsYXNzTmFtZTogc3RyaW5nO1xufVxuXG5jb25zdCBldmVudFN0eWxlczogUmVjb3JkPHN0cmluZywgRXZlbnRTdHlsZT4gPSB7XG4gIHJ1bjogeyBpY29uOiBXb3JrZmxvd0ljb24sIGNsYXNzTmFtZTogJ3RleHQtYmx1ZS05MDAnIH0sXG4gIHN0ZXA6IHsgaWNvbjogU3RlcEZvcndhcmRJY29uLCBjbGFzc05hbWU6ICd0ZXh0LWdyZWVuLTkwMCcgfSxcbiAgaG9vazogeyBpY29uOiBXZWJob29rSWNvbiwgY2xhc3NOYW1lOiAndGV4dC1ncmF5LTkwMCcgfSxcbiAgc2xlZXA6IHsgaWNvbjogU2xlZXBJY29uLCBjbGFzc05hbWU6ICd0ZXh0LWdyYXktOTAwJyB9LFxufTtcblxuY29uc3QgZGVmYXVsdFN0eWxlOiBFdmVudFN0eWxlID0ge1xuICBpY29uOiBDaXJjbGUsXG4gIGNsYXNzTmFtZTogJ3RleHQtZ3JheS05MDAnLFxufTtcblxuY29uc3QgUk9XX0hFSUdIVF9DTEFTUyA9ICdoLTEwJztcblxuZnVuY3Rpb24gZ2V0RXZlbnRTdHlsZShyZXNvdXJjZTogc3RyaW5nLCBpc0Vycm9yZWQ6IGJvb2xlYW4pOiBFdmVudFN0eWxlIHtcbiAgY29uc3Qgc3R5bGUgPSBldmVudFN0eWxlc1tyZXNvdXJjZV0gPz8gZGVmYXVsdFN0eWxlO1xuICByZXR1cm4ge1xuICAgIGljb246IHN0eWxlLmljb24sXG4gICAgY2xhc3NOYW1lOiBjbihpc0Vycm9yZWQgPyAndGV4dC1yZWQtOTAwJyA6IHN0eWxlLmNsYXNzTmFtZSksXG4gIH07XG59XG5cbmNvbnN0IEV2ZW50Um93ID0gKHtcbiAgc3BhbixcbiAgaXNTZWxlY3RlZCxcbiAgaXNEaW1tZWQsXG4gIG9uU2VsZWN0U3Bhbixcbn06IHtcbiAgc3BhbjogU3BhbjtcbiAgaXNTZWxlY3RlZDogYm9vbGVhbjtcbiAgaXNEaW1tZWQ/OiBib29sZWFuO1xuICBvblNlbGVjdFNwYW46IChzcGFuSWQ6IHN0cmluZykgPT4gdm9pZDtcbn0pID0+IHtcbiAgY29uc3QgZHVyYXRpb25NcyA9IGdldFNwYW5EdXJhdGlvbk1zKHNwYW4pO1xuICBjb25zdCBpc0Vycm9yZWQgPSBpc1NwYW5FcnJvcmVkKHNwYW4pO1xuICBjb25zdCB7IGljb246IEljb24sIGNsYXNzTmFtZTogdGFnQ2xhc3NOYW1lIH0gPSBnZXRFdmVudFN0eWxlKFxuICAgIHNwYW4ucmVzb3VyY2UsXG4gICAgaXNFcnJvcmVkXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8bGlcbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICdyZWxhdGl2ZSBvdmVyZmxvdy1jbGlwIGdyb3VwIHRyYW5zaXRpb24tb3BhY2l0eScsXG4gICAgICAgIFJPV19IRUlHSFRfQ0xBU1MsXG4gICAgICAgIGlzRGltbWVkICYmICdvcGFjaXR5LTM1J1xuICAgICAgKX1cbiAgICAgIHJvbGU9XCJ0cmVlaXRlbVwiXG4gICAgICBhcmlhLXNlbGVjdGVkPXtpc1NlbGVjdGVkfVxuICAgICAgYXJpYS1leHBhbmRlZD17aXNTZWxlY3RlZH1cbiAgICAgIGFyaWEtbGV2ZWw9ezF9XG4gICAgICBvbkNsaWNrPXsoKSA9PiBvblNlbGVjdFNwYW4oc3Bhbi5zcGFuSWQpfVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaC1mdWxsIGhvdmVyOmJnLWdyYXktMTAwIGdyb3VwLWFyaWEtc2VsZWN0ZWQ6YmctZ3JheS0xMDAgZ3JvdXAtYXJpYS1zZWxlY3RlZDpob3ZlcjpiZy1ncmF5LTIwMFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaC1mdWxsIG1pbi13LTAgaXRlbXMtY2VudGVyIHBsLTQgcHItMlwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBtaW4tdy0wIGZsZXgtMSBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Y24oJ3Nocmluay0wJywgdGFnQ2xhc3NOYW1lKX0+XG4gICAgICAgICAgICAgIDxJY29uIGNsYXNzTmFtZT1cInctNCBoLTRcIiAvPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibWluLXctMCB0ZXh0LWxhYmVsLTE0XCI+XG4gICAgICAgICAgICAgIDxNaWRkbGVUcnVuY2F0ZSB2YWx1ZT17c3Bhbi5uYW1lfSAvPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWwtMiBzaHJpbmstMFwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1sYWJlbC0xNCB0ZXh0LWdyYXktOTAwIHRhYnVsYXItbnVtc1wiPlxuICAgICAgICAgICAgICB7Zm9ybWF0RHVyYXRpb25QcmVjaXNlKGR1cmF0aW9uTXMpfVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbGk+XG4gICk7XG59O1xuXG5jb25zdCBFdmVudExpc3QgPSAoe1xuICBzcGFucyxcbiAgYWN0aXZlU3BhbklkLFxuICBzZWFyY2hSZXN1bHQsXG4gIG9uU2VsZWN0U3Bhbixcbn06IHtcbiAgc3BhbnM6IFNwYW5bXTtcbiAgYWN0aXZlU3BhbklkOiBzdHJpbmcgfCBudWxsO1xuICBzZWFyY2hSZXN1bHQ6IFNwYW5TZWFyY2hSZXN1bHQ7XG4gIG9uU2VsZWN0U3BhbjogKHNwYW5JZDogc3RyaW5nKSA9PiB2b2lkO1xufSkgPT4ge1xuICBjb25zdCBsaXN0UmVmID0gdXNlUmVmPEhUTUxVTGlzdEVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCB7IHN0YXJ0LCBlbmQgfSA9IHVzZVJvd1dpbmRvdyhsaXN0UmVmLCBzcGFucy5sZW5ndGgsIFJPV19IRUlHSFRfUFgpO1xuXG4gIHJldHVybiAoXG4gICAgPHVsXG4gICAgICByZWY9e2xpc3RSZWZ9XG4gICAgICBpZD1cImV2ZW50LWxpc3RcIlxuICAgICAgcm9sZT1cInRyZWVcIlxuICAgICAgY2xhc3NOYW1lPVwiYmxvY2sgbWluLWgtMCBvdmVyZmxvdy12aXNpYmxlIGRpdmlkZS15IGRpdmlkZS1ncmF5LWFscGhhLTQwMCBib3JkZXItYiBib3JkZXItZ3JheS1hbHBoYS00MDBcIlxuICAgICAgc3R5bGU9e3tcbiAgICAgICAgcGFkZGluZ1RvcDogc3RhcnQgKiBST1dfSEVJR0hUX1BYLFxuICAgICAgICBwYWRkaW5nQm90dG9tOiAoc3BhbnMubGVuZ3RoIC0gZW5kKSAqIFJPV19IRUlHSFRfUFgsXG4gICAgICB9fVxuICAgID5cbiAgICAgIHtzcGFucy5zbGljZShzdGFydCwgZW5kKS5tYXAoKHNwYW4pID0+IChcbiAgICAgICAgPEV2ZW50Um93XG4gICAgICAgICAga2V5PXtzcGFuLnNwYW5JZH1cbiAgICAgICAgICBzcGFuPXtzcGFufVxuICAgICAgICAgIGlzU2VsZWN0ZWQ9e3NwYW4uc3BhbklkID09PSBhY3RpdmVTcGFuSWR9XG4gICAgICAgICAgaXNEaW1tZWQ9e2lzU3BhbkRpbW1lZEJ5U2VhcmNoKHNwYW4uc3BhbklkLCBzZWFyY2hSZXN1bHQpfVxuICAgICAgICAgIG9uU2VsZWN0U3Bhbj17b25TZWxlY3RTcGFufVxuICAgICAgICAvPlxuICAgICAgKSl9XG4gICAgPC91bD5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEV2ZW50TGlzdDtcbiJdfQ==
|
|
@@ -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,
|
|
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"}
|