@workflow/web-shared 5.0.0-beta.38 → 5.0.0-beta.39
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/dist/components/event-list-view.d.ts.map +1 -1
- package/dist/components/event-list-view.js +10 -10
- package/dist/components/index.d.ts +3 -5
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +3 -5
- package/dist/components/sidebar/attribute-panel.d.ts.map +1 -1
- package/dist/components/sidebar/attribute-panel.js +32 -8
- package/dist/components/sidebar/attributes-block.js +3 -3
- package/dist/components/sidebar/copyable-data-block.js +2 -2
- package/dist/components/sidebar/entity-detail-panel.js +3 -3
- package/dist/components/sidebar/events-list.js +2 -2
- package/dist/components/stream-viewer.js +2 -2
- package/dist/components/trace-viewer/components/copy-button.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/copy-button.js +27 -0
- package/dist/components/trace-viewer/components/detail-panel-width.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/detail-panel-width.js +67 -0
- package/dist/components/trace-viewer/components/detail-panel.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/detail-panel.js +122 -0
- package/dist/components/trace-viewer/components/draggable-border.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/draggable-border.js +140 -0
- package/dist/components/trace-viewer/components/event-list.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/event-list.js +47 -0
- package/dist/components/trace-viewer/components/middle-truncate/copy-selection.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/middle-truncate/copy-selection.js +54 -0
- package/dist/components/trace-viewer/components/middle-truncate/middle-truncate.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/middle-truncate/middle-truncate.js +81 -0
- package/dist/components/trace-viewer/components/middle-truncate/truncate.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/middle-truncate/truncate.js +101 -0
- package/dist/components/trace-viewer/components/middle-truncate/use-middle-truncate.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/middle-truncate/use-middle-truncate.js +114 -0
- package/dist/components/trace-viewer/components/minimap.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/minimap.js +337 -0
- package/dist/components/trace-viewer/components/pane-constants.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/pane-constants.js +16 -0
- package/dist/components/trace-viewer/components/span-markers.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/span-markers.js +85 -0
- package/dist/components/trace-viewer/components/split-pane.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/split-pane.js +41 -0
- package/dist/components/trace-viewer/components/timeline.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/timeline.js +321 -0
- package/dist/components/trace-viewer/components/trace-shortcut-helper.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/trace-shortcut-helper.js +55 -0
- package/dist/components/trace-viewer/components/trace-viewer-skeleton.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/trace-viewer-skeleton.js +26 -0
- package/dist/components/trace-viewer/components/use-element-width.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/use-element-width.js +25 -0
- package/dist/components/trace-viewer/components/use-row-window.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/use-row-window.js +107 -0
- package/dist/components/trace-viewer/context.d.ts +14 -182
- package/dist/components/trace-viewer/context.d.ts.map +1 -1
- package/dist/components/trace-viewer/context.js +44 -351
- package/dist/components/trace-viewer/icons.d.ts.map +1 -0
- package/dist/components/trace-viewer/icons.js +15 -0
- package/dist/components/trace-viewer/search.d.ts.map +1 -0
- package/dist/components/trace-viewer/search.js +134 -0
- package/dist/components/trace-viewer/trace-viewer.d.ts +7 -28
- package/dist/components/trace-viewer/trace-viewer.d.ts.map +1 -1
- package/dist/components/trace-viewer/trace-viewer.js +306 -356
- package/dist/components/trace-viewer/types.d.ts +2 -211
- package/dist/components/trace-viewer/types.d.ts.map +1 -1
- package/dist/components/trace-viewer/types.js +1 -1
- package/dist/components/trace-viewer/utils.d.ts.map +1 -0
- package/dist/components/trace-viewer/utils.js +430 -0
- package/dist/components/{trace-viewer-new.d.ts → trace-viewer.d.ts} +3 -3
- package/dist/components/trace-viewer.d.ts.map +1 -0
- package/dist/components/trace-viewer.js +21 -0
- package/dist/components/ui/alert.js +2 -2
- package/dist/components/ui/button.d.ts +1 -1
- package/dist/components/ui/button.d.ts.map +1 -1
- package/dist/components/ui/button.js +3 -3
- package/dist/components/ui/card.d.ts.map +1 -1
- package/dist/components/ui/card.js +3 -3
- package/dist/components/ui/error-card.js +2 -2
- package/dist/components/ui/error-stack-block.js +4 -4
- package/dist/components/ui/kbd.js +3 -3
- package/dist/components/ui/timestamp-tooltip.js +3 -3
- package/dist/components/workflow-traces/trace-span-construction.d.ts +1 -1
- package/dist/components/workflow-traces/trace-span-construction.js +1 -1
- package/dist/lib/trace-builder.d.ts +1 -1
- package/dist/lib/trace-builder.d.ts.map +1 -1
- package/dist/lib/trace-builder.js +1 -1
- package/dist/lib/trace-types.d.ts +54 -0
- package/dist/lib/trace-types.d.ts.map +1 -0
- package/dist/lib/trace-types.js +2 -0
- package/package.json +5 -5
- package/src/components/event-list-view.tsx +12 -9
- package/src/components/index.ts +3 -5
- package/src/components/sidebar/attribute-panel.tsx +46 -8
- package/src/components/sidebar/attributes-block.tsx +2 -2
- package/src/components/sidebar/copyable-data-block.tsx +1 -1
- package/src/components/sidebar/entity-detail-panel.tsx +3 -3
- package/src/components/sidebar/events-list.tsx +1 -1
- package/src/components/stream-viewer.tsx +1 -1
- package/src/components/{new-trace-viewer → trace-viewer}/components/event-list.tsx +1 -1
- package/src/components/{new-trace-viewer → trace-viewer}/components/minimap.tsx +1 -4
- package/src/components/{new-trace-viewer → trace-viewer}/components/timeline.tsx +2 -5
- package/src/components/{new-trace-viewer → trace-viewer}/components/trace-shortcut-helper.tsx +1 -1
- package/src/components/trace-viewer/context.tsx +63 -656
- package/src/components/trace-viewer/trace-viewer.tsx +563 -531
- package/src/components/trace-viewer/types.ts +2 -234
- package/src/components/{new-trace-viewer → trace-viewer}/utils.ts +2 -2
- package/src/components/{trace-viewer-new.tsx → trace-viewer.tsx} +5 -5
- package/src/components/ui/alert.tsx +1 -1
- package/src/components/ui/button.tsx +3 -3
- package/src/components/ui/card.tsx +2 -9
- package/src/components/ui/error-card.tsx +3 -3
- package/src/components/ui/error-stack-block.tsx +3 -3
- package/src/components/ui/kbd.tsx +2 -2
- package/src/components/ui/timestamp-tooltip.tsx +4 -4
- package/src/components/workflow-traces/trace-span-construction.ts +1 -1
- package/src/lib/trace-builder.ts +1 -1
- package/src/lib/trace-types.ts +56 -0
- package/dist/components/new-trace-viewer/components/copy-button.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/components/copy-button.js +0 -27
- package/dist/components/new-trace-viewer/components/detail-panel-width.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/components/detail-panel-width.js +0 -67
- package/dist/components/new-trace-viewer/components/detail-panel.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/components/detail-panel.js +0 -122
- package/dist/components/new-trace-viewer/components/draggable-border.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/components/draggable-border.js +0 -140
- package/dist/components/new-trace-viewer/components/event-list.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/components/event-list.js +0 -47
- package/dist/components/new-trace-viewer/components/middle-truncate/copy-selection.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/components/middle-truncate/copy-selection.js +0 -54
- package/dist/components/new-trace-viewer/components/middle-truncate/middle-truncate.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/components/middle-truncate/middle-truncate.js +0 -81
- package/dist/components/new-trace-viewer/components/middle-truncate/truncate.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/components/middle-truncate/truncate.js +0 -101
- package/dist/components/new-trace-viewer/components/middle-truncate/use-middle-truncate.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/components/middle-truncate/use-middle-truncate.js +0 -114
- package/dist/components/new-trace-viewer/components/minimap.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/components/minimap.js +0 -337
- package/dist/components/new-trace-viewer/components/pane-constants.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/components/pane-constants.js +0 -16
- package/dist/components/new-trace-viewer/components/span-markers.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/components/span-markers.js +0 -85
- package/dist/components/new-trace-viewer/components/split-pane.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/components/split-pane.js +0 -41
- package/dist/components/new-trace-viewer/components/timeline.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/components/timeline.js +0 -321
- package/dist/components/new-trace-viewer/components/trace-shortcut-helper.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/components/trace-shortcut-helper.js +0 -55
- package/dist/components/new-trace-viewer/components/trace-viewer-skeleton.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/components/trace-viewer-skeleton.js +0 -26
- package/dist/components/new-trace-viewer/components/use-element-width.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/components/use-element-width.js +0 -25
- package/dist/components/new-trace-viewer/components/use-row-window.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/components/use-row-window.js +0 -107
- package/dist/components/new-trace-viewer/context.d.ts +0 -17
- package/dist/components/new-trace-viewer/context.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/context.js +0 -48
- package/dist/components/new-trace-viewer/icons.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/icons.js +0 -15
- package/dist/components/new-trace-viewer/search.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/search.js +0 -134
- package/dist/components/new-trace-viewer/trace-viewer.d.ts +0 -11
- package/dist/components/new-trace-viewer/trace-viewer.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/trace-viewer.js +0 -336
- package/dist/components/new-trace-viewer/types.d.ts +0 -3
- package/dist/components/new-trace-viewer/types.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/types.js +0 -2
- package/dist/components/new-trace-viewer/utils.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/utils.js +0 -430
- package/dist/components/run-trace-view.d.ts +0 -23
- package/dist/components/run-trace-view.d.ts.map +0 -1
- package/dist/components/run-trace-view.js +0 -11
- package/dist/components/trace-viewer/components/map.d.ts +0 -8
- package/dist/components/trace-viewer/components/map.d.ts.map +0 -1
- package/dist/components/trace-viewer/components/map.js +0 -162
- package/dist/components/trace-viewer/components/markers.d.ts +0 -23
- package/dist/components/trace-viewer/components/markers.d.ts.map +0 -1
- package/dist/components/trace-viewer/components/markers.js +0 -416
- package/dist/components/trace-viewer/components/node.d.ts +0 -35
- package/dist/components/trace-viewer/components/node.d.ts.map +0 -1
- package/dist/components/trace-viewer/components/node.js +0 -286
- package/dist/components/trace-viewer/components/search-input.d.ts +0 -9
- package/dist/components/trace-viewer/components/search-input.d.ts.map +0 -1
- package/dist/components/trace-viewer/components/search-input.js +0 -9
- package/dist/components/trace-viewer/components/search.d.ts +0 -3
- package/dist/components/trace-viewer/components/search.d.ts.map +0 -1
- package/dist/components/trace-viewer/components/search.js +0 -25
- package/dist/components/trace-viewer/components/span-content.d.ts +0 -19
- package/dist/components/trace-viewer/components/span-content.d.ts.map +0 -1
- package/dist/components/trace-viewer/components/span-content.js +0 -137
- package/dist/components/trace-viewer/components/span-detail-panel.d.ts +0 -10
- package/dist/components/trace-viewer/components/span-detail-panel.d.ts.map +0 -1
- package/dist/components/trace-viewer/components/span-detail-panel.js +0 -285
- package/dist/components/trace-viewer/components/span-segments.d.ts +0 -50
- package/dist/components/trace-viewer/components/span-segments.d.ts.map +0 -1
- package/dist/components/trace-viewer/components/span-segments.js +0 -445
- package/dist/components/trace-viewer/components/span-strategies.d.ts +0 -46
- package/dist/components/trace-viewer/components/span-strategies.d.ts.map +0 -1
- package/dist/components/trace-viewer/components/span-strategies.js +0 -108
- package/dist/components/trace-viewer/components/ui.d.ts +0 -28
- package/dist/components/trace-viewer/components/ui.d.ts.map +0 -1
- package/dist/components/trace-viewer/components/ui.js +0 -39
- package/dist/components/trace-viewer/components/zoom-button.d.ts +0 -3
- package/dist/components/trace-viewer/components/zoom-button.d.ts.map +0 -1
- package/dist/components/trace-viewer/components/zoom-button.js +0 -29
- package/dist/components/trace-viewer/components/zoom-icons.d.ts +0 -11
- package/dist/components/trace-viewer/components/zoom-icons.d.ts.map +0 -1
- package/dist/components/trace-viewer/components/zoom-icons.js +0 -11
- package/dist/components/trace-viewer/index.d.ts +0 -5
- package/dist/components/trace-viewer/index.d.ts.map +0 -1
- package/dist/components/trace-viewer/index.js +0 -4
- package/dist/components/trace-viewer/trace-viewer.module.css +0 -1465
- package/dist/components/trace-viewer/util/constants.d.ts +0 -9
- package/dist/components/trace-viewer/util/constants.d.ts.map +0 -1
- package/dist/components/trace-viewer/util/constants.js +0 -9
- package/dist/components/trace-viewer/util/scrollbar-width.d.ts +0 -2
- package/dist/components/trace-viewer/util/scrollbar-width.d.ts.map +0 -1
- package/dist/components/trace-viewer/util/scrollbar-width.js +0 -14
- package/dist/components/trace-viewer/util/tree.d.ts +0 -13
- package/dist/components/trace-viewer/util/tree.d.ts.map +0 -1
- package/dist/components/trace-viewer/util/tree.js +0 -227
- package/dist/components/trace-viewer/util/use-immediate-style.d.ts +0 -15
- package/dist/components/trace-viewer/util/use-immediate-style.d.ts.map +0 -1
- package/dist/components/trace-viewer/util/use-immediate-style.js +0 -23
- package/dist/components/trace-viewer/util/use-streaming-spans.d.ts +0 -8
- package/dist/components/trace-viewer/util/use-streaming-spans.d.ts.map +0 -1
- package/dist/components/trace-viewer/util/use-streaming-spans.js +0 -345
- package/dist/components/trace-viewer/util/use-trackpad-zoom.d.ts +0 -6
- package/dist/components/trace-viewer/util/use-trackpad-zoom.d.ts.map +0 -1
- package/dist/components/trace-viewer/util/use-trackpad-zoom.js +0 -39
- package/dist/components/trace-viewer/worker.d.ts +0 -2
- package/dist/components/trace-viewer/worker.d.ts.map +0 -1
- package/dist/components/trace-viewer/worker.js +0 -109
- package/dist/components/trace-viewer-new.d.ts.map +0 -1
- package/dist/components/trace-viewer-new.js +0 -21
- package/dist/components/workflow-trace-view.d.ts +0 -39
- package/dist/components/workflow-trace-view.d.ts.map +0 -1
- package/dist/components/workflow-trace-view.js +0 -690
- package/dist/components/workflow-traces/trace-colors.d.ts +0 -15
- package/dist/components/workflow-traces/trace-colors.d.ts.map +0 -1
- package/dist/components/workflow-traces/trace-colors.js +0 -86
- package/src/components/new-trace-viewer/context.tsx +0 -93
- package/src/components/new-trace-viewer/trace-viewer.tsx +0 -632
- package/src/components/new-trace-viewer/types.ts +0 -2
- package/src/components/run-trace-view.tsx +0 -80
- package/src/components/trace-viewer/components/map.tsx +0 -226
- package/src/components/trace-viewer/components/markers.tsx +0 -612
- package/src/components/trace-viewer/components/node.tsx +0 -506
- package/src/components/trace-viewer/components/search-input.tsx +0 -52
- package/src/components/trace-viewer/components/search.tsx +0 -47
- package/src/components/trace-viewer/components/span-content.tsx +0 -247
- package/src/components/trace-viewer/components/span-detail-panel.tsx +0 -655
- package/src/components/trace-viewer/components/span-segments.ts +0 -585
- package/src/components/trace-viewer/components/span-strategies.ts +0 -205
- package/src/components/trace-viewer/components/ui.tsx +0 -156
- package/src/components/trace-viewer/components/zoom-button.tsx +0 -61
- package/src/components/trace-viewer/components/zoom-icons.tsx +0 -65
- package/src/components/trace-viewer/index.tsx +0 -4
- package/src/components/trace-viewer/trace-viewer.module.css +0 -1465
- package/src/components/trace-viewer/util/constants.ts +0 -8
- package/src/components/trace-viewer/util/scrollbar-width.ts +0 -13
- package/src/components/trace-viewer/util/tree.ts +0 -277
- package/src/components/trace-viewer/util/use-immediate-style.ts +0 -38
- package/src/components/trace-viewer/util/use-streaming-spans.ts +0 -426
- package/src/components/trace-viewer/util/use-trackpad-zoom.tsx +0 -51
- package/src/components/trace-viewer/worker.ts +0 -131
- package/src/components/workflow-trace-view.tsx +0 -1166
- package/src/components/workflow-traces/trace-colors.ts +0 -112
- package/dist/components/{new-trace-viewer → trace-viewer}/components/copy-button.d.ts +0 -0
- package/dist/components/{new-trace-viewer → trace-viewer}/components/detail-panel-width.d.ts +0 -0
- package/dist/components/{new-trace-viewer → trace-viewer}/components/detail-panel.d.ts +0 -0
- package/dist/components/{new-trace-viewer → trace-viewer}/components/draggable-border.d.ts +0 -0
- package/dist/components/{new-trace-viewer → trace-viewer}/components/event-list.d.ts +0 -0
- package/dist/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/copy-selection.d.ts +0 -0
- package/dist/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/middle-truncate.d.ts +0 -0
- package/dist/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/truncate.d.ts +0 -0
- package/dist/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/use-middle-truncate.d.ts +0 -0
- package/dist/components/{new-trace-viewer → trace-viewer}/components/minimap.d.ts +0 -0
- package/dist/components/{new-trace-viewer → trace-viewer}/components/pane-constants.d.ts +0 -0
- package/dist/components/{new-trace-viewer → trace-viewer}/components/span-markers.d.ts +0 -0
- package/dist/components/{new-trace-viewer → trace-viewer}/components/split-pane.d.ts +0 -0
- package/dist/components/{new-trace-viewer → trace-viewer}/components/timeline.d.ts +0 -0
- package/dist/components/{new-trace-viewer → trace-viewer}/components/timeline.module.css +0 -0
- package/dist/components/{new-trace-viewer → trace-viewer}/components/trace-shortcut-helper.d.ts +0 -0
- package/dist/components/{new-trace-viewer → trace-viewer}/components/trace-shortcut-helper.module.css +0 -0
- package/dist/components/{new-trace-viewer → trace-viewer}/components/trace-viewer-skeleton.d.ts +0 -0
- package/dist/components/{new-trace-viewer → trace-viewer}/components/use-element-width.d.ts +0 -0
- package/dist/components/{new-trace-viewer → trace-viewer}/components/use-row-window.d.ts +0 -0
- package/dist/components/{new-trace-viewer → trace-viewer}/icons.d.ts +0 -0
- package/dist/components/{new-trace-viewer → trace-viewer}/search.d.ts +0 -0
- package/dist/components/{new-trace-viewer → trace-viewer}/utils.d.ts +0 -0
- package/src/components/{new-trace-viewer → trace-viewer}/components/copy-button.tsx +0 -0
- package/src/components/{new-trace-viewer → trace-viewer}/components/detail-panel-width.test.ts +0 -0
- package/src/components/{new-trace-viewer → trace-viewer}/components/detail-panel-width.ts +0 -0
- package/src/components/{new-trace-viewer → trace-viewer}/components/detail-panel.tsx +0 -0
- package/src/components/{new-trace-viewer → trace-viewer}/components/draggable-border.tsx +0 -0
- package/src/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/copy-selection.ts +0 -0
- package/src/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/middle-truncate.tsx +1 -1
- /package/src/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/truncate.ts +0 -0
- /package/src/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/use-middle-truncate.ts +0 -0
- /package/src/components/{new-trace-viewer → trace-viewer}/components/pane-constants.ts +0 -0
- /package/src/components/{new-trace-viewer → trace-viewer}/components/span-markers.tsx +0 -0
- /package/src/components/{new-trace-viewer → trace-viewer}/components/split-pane.tsx +0 -0
- /package/src/components/{new-trace-viewer → trace-viewer}/components/timeline.module.css +0 -0
- /package/src/components/{new-trace-viewer → trace-viewer}/components/trace-shortcut-helper.module.css +0 -0
- /package/src/components/{new-trace-viewer → trace-viewer}/components/trace-viewer-skeleton.tsx +0 -0
- /package/src/components/{new-trace-viewer → trace-viewer}/components/use-element-width.ts +0 -0
- /package/src/components/{new-trace-viewer → trace-viewer}/components/use-row-window.ts +0 -0
- /package/src/components/{new-trace-viewer → trace-viewer}/icons.tsx +0 -0
- /package/src/components/{new-trace-viewer → trace-viewer}/search.ts +0 -0
- /package/src/components/{new-trace-viewer → trace-viewer}/utils.test.ts +0 -0
- /package/src/{components/trace-viewer/modules.d.ts → modules.d.ts} +0 -0
|
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0YWlsLXBhbmVsLXdpZHRoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdHJhY2Utdmlld2VyL2NvbXBvbmVudHMvZGV0YWlsLXBhbmVsLXdpZHRoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILGlGQUFpRjtBQUNqRixNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsR0FBRyxDQUFDO0FBRW5DOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQztBQUV6QywrREFBK0Q7QUFDL0QsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsR0FBRyxDQUFDO0FBRXZDOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLEdBQUcsQ0FBQztBQUVsQyxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxtQ0FBbUMsQ0FBQztBQUUzRSxTQUFTLEtBQUssQ0FBQyxLQUFhLEVBQUUsR0FBVyxFQUFFLEdBQVc7SUFDcEQsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzdDLENBQUM7QUFFRCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsY0FBc0I7SUFDekQsSUFBSSxjQUFjLElBQUksQ0FBQztRQUFFLE9BQU8sb0JBQW9CLENBQUM7SUFDckQsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUNiLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxHQUFHLGNBQWMsRUFBRSxDQUFDLENBQUMsRUFDNUMsb0JBQW9CLENBQ3JCLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQUMsS0FBYSxFQUFFLGNBQXNCO0lBQ25FLE9BQU8sS0FBSyxDQUFDLEtBQUssRUFBRSxlQUFlLEVBQUUsb0JBQW9CLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztBQUM3RSxDQUFDO0FBRUQsTUFBTSxVQUFVLG9CQUFvQjtJQUNsQyxJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVc7UUFBRSxPQUFPLG1CQUFtQixDQUFDO0lBQzlELElBQUksQ0FBQztRQUNILE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDakUsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7UUFDN0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1lBQUUsT0FBTyxtQkFBbUIsQ0FBQztRQUN4RCw0RUFBNEU7UUFDNUUsbURBQW1EO1FBQ25ELE9BQU8sS0FBSyxDQUFDLEtBQUssRUFBRSxlQUFlLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxtQkFBbUIsQ0FBQztJQUM3QixDQUFDO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxLQUFhO0lBQ2pELElBQUksT0FBTyxNQUFNLEtBQUssV0FBVztRQUFFLE9BQU87SUFDMUMsSUFBSSxDQUFDO1FBQ0gsTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQ3pCLHVCQUF1QixFQUN2QixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUMxQixDQUFDO0lBQ0osQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLHFDQUFxQztJQUN2QyxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogV2lkdGggbW9kZWwgZm9yIHRoZSBzcGFuIGRldGFpbCBwYW5lbDogdGhlIHN0b3JlZCB2YWx1ZSBpcyB0aGUgdXNlcidzXG4gKiBwcmVmZXJyZWQgd2lkdGggKGFic29sdXRlIHB4LCBwZXJzaXN0ZWQgdG8gbG9jYWxTdG9yYWdlIG9uIGV4cGxpY2l0XG4gKiBpbnRlcmFjdGlvbiBvbmx5KSwgd2hpbGUgdGhlIGNvbnRhaW5lci1yZWxhdGl2ZSBtYXhpbXVtIGlzIGFwcGxpZWQgYXRcbiAqIHJlbmRlciB0aW1lIOKAlCBzbyBhIHdpZHRoIHByZWZlcnJlZCBvbiBhIHdpZGUgc2NyZWVuIHN1cnZpdmVzIGEgbmFycm93ZXJcbiAqIHNlc3Npb24gYW5kIHJlc3RvcmVzIHdoZW4gdGhlIHZpZXdlciBncm93cyBhZ2Fpbi5cbiAqL1xuXG4vKiogRmxvb3IgZm9yIHRoZSBkZXRhaWwgcGFuZWwg4oCUIG1hdGNoZXMgdGhlIHByZXZpb3VzIGBjbGFtcCgyODBweCwg4oCmKWAgZmxvb3IuICovXG5leHBvcnQgY29uc3QgUEFORUxfTUlOX1dJRFRIID0gMjgwO1xuXG4vKipcbiAqIEFic29sdXRlIGNlaWxpbmcgZW5mb3JjZWQgYXQgdGhlIHN0b3JhZ2UgbGF5ZXIgc28gYSBjb3JydXB0IG9yIHN0YWxlIHN0b3JlZFxuICogdmFsdWUgY2FuIG5ldmVyIHdlZGdlIHRoZSBsYXlvdXQgb3Blbi5cbiAqL1xuZXhwb3J0IGNvbnN0IFBBTkVMX0hBUkRfTUFYX1dJRFRIID0gMTMwMDtcblxuLyoqIERlZmF1bHQgd2lkdGgg4oCUIG1hdGNoZXMgdGhlIHByZXZpb3VzIGZpeGVkIDM2MHB4IGNvbHVtbi4gKi9cbmV4cG9ydCBjb25zdCBQQU5FTF9ERUZBVUxUX1dJRFRIID0gMzYwO1xuXG4vKipcbiAqIFdpZHRoIHRoZSBtYWluIChldmVudCBsaXN0ICsgdGltZWxpbmUpIGFyZWEga2VlcHMgd2hpbGUgdGhlIHBhbmVsIGlzXG4gKiByZXNpemVkIG9yIHRoZSBjb250YWluZXIgc2hyaW5rcy4gQmVsb3cgYFBBTkVMX01JTl9XSURUSCArIE1BSU5fTUlOX1dJRFRIYFxuICogb2YgY29udGFpbmVyIHRoZSBwYW5lbCBnaXZlcyB3YXkgZmlyc3QsIGNvbXByZXNzaW5nIGJlbG93IGl0cyBvd24gZmxvb3Ig4oCUXG4gKiB0aGUgbGlzdCBhbmQgdGltZWxpbmUgc3RheSB1c2FibGUgYXQgdGhlIHBhbmVsJ3MgZXhwZW5zZS5cbiAqL1xuZXhwb3J0IGNvbnN0IE1BSU5fTUlOX1dJRFRIID0gNDAwO1xuXG5leHBvcnQgY29uc3QgUEFORUxfV0lEVEhfU1RPUkFHRV9LRVkgPSAnd29ya2Zsb3ctdHJhY2UtZGV0YWlsLXBhbmVsLXdpZHRoJztcblxuZnVuY3Rpb24gY2xhbXAodmFsdWU6IG51bWJlciwgbWluOiBudW1iZXIsIG1heDogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIE1hdGgubWluKE1hdGgubWF4KHZhbHVlLCBtaW4pLCBtYXgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZU1heFBhbmVsV2lkdGgoYXZhaWxhYmxlV2lkdGg6IG51bWJlcik6IG51bWJlciB7XG4gIGlmIChhdmFpbGFibGVXaWR0aCA8PSAwKSByZXR1cm4gUEFORUxfSEFSRF9NQVhfV0lEVEg7XG4gIHJldHVybiBNYXRoLm1pbihcbiAgICBNYXRoLm1heChhdmFpbGFibGVXaWR0aCAtIE1BSU5fTUlOX1dJRFRILCAwKSxcbiAgICBQQU5FTF9IQVJEX01BWF9XSURUSFxuICApO1xufVxuXG4vKipcbiAqIE5vdGU6IHdoZW4gdGhlIGNvbnRhaW5lciBpcyB0b28gc21hbGwgdG8gaG9ub3IgYm90aCBmbG9vcnNcbiAqIChgYXZhaWxhYmxlV2lkdGggPCBQQU5FTF9NSU5fV0lEVEggKyBNQUlOX01JTl9XSURUSGApLCB0aGUgbWF4IHdpbnMgYW5kIHRoZVxuICogcGFuZWwgY29tcHJlc3NlcyBiZWxvdyBgUEFORUxfTUlOX1dJRFRIYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsYW1wUGFuZWxXaWR0aCh3aWR0aDogbnVtYmVyLCBhdmFpbGFibGVXaWR0aDogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIGNsYW1wKHdpZHRoLCBQQU5FTF9NSU5fV0lEVEgsIGNvbXB1dGVNYXhQYW5lbFdpZHRoKGF2YWlsYWJsZVdpZHRoKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkU3RvcmVkUGFuZWxXaWR0aCgpOiBudW1iZXIge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiBQQU5FTF9ERUZBVUxUX1dJRFRIO1xuICB0cnkge1xuICAgIGNvbnN0IHJhdyA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShQQU5FTF9XSURUSF9TVE9SQUdFX0tFWSk7XG4gICAgY29uc3QgdmFsdWUgPSByYXcgPyBOdW1iZXIocmF3KSA6IE51bWJlci5OYU47XG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUodmFsdWUpKSByZXR1cm4gUEFORUxfREVGQVVMVF9XSURUSDtcbiAgICAvLyBPbmx5IGVuZm9yY2UgYWJzb2x1dGUgYm91bmRzIGF0IHRoZSBzdG9yYWdlIGxheWVyOyB0aGUgY29udGFpbmVyLXJlbGF0aXZlXG4gICAgLy8gbWF4IGlzIGFwcGxpZWQgYXQgcmVuZGVyIHRpbWUgKHNlZSBtb2R1bGUgZG9jcykuXG4gICAgcmV0dXJuIGNsYW1wKHZhbHVlLCBQQU5FTF9NSU5fV0lEVEgsIFBBTkVMX0hBUkRfTUFYX1dJRFRIKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIFBBTkVMX0RFRkFVTFRfV0lEVEg7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlU3RvcmVkUGFuZWxXaWR0aCh3aWR0aDogbnVtYmVyKTogdm9pZCB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgcmV0dXJuO1xuICB0cnkge1xuICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShcbiAgICAgIFBBTkVMX1dJRFRIX1NUT1JBR0VfS0VZLFxuICAgICAgU3RyaW5nKE1hdGgucm91bmQod2lkdGgpKVxuICAgICk7XG4gIH0gY2F0Y2gge1xuICAgIC8vIEJlc3QtZWZmb3J0IChwcml2YXRlIG1vZGUsIHF1b3RhKS5cbiAgfVxufVxuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detail-panel.d.ts","sourceRoot":"","sources":["../../../../src/components/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,CAoMZ"}
|
|
@@ -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, getModuleSourceUrl: sidebar.getModuleSourceUrl }) }) })] }));
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0YWlsLXBhbmVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdHJhY2Utdmlld2VyL2NvbXBvbmVudHMvZGV0YWlsLXBhbmVsLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUM7O0FBRWIsT0FBTyxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzlFLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN6RCxPQUFPLEVBR0wsV0FBVyxFQUNYLFNBQVMsRUFDVCxPQUFPLEVBQ1AsTUFBTSxFQUNOLFFBQVEsR0FDVCxNQUFNLE9BQU8sQ0FBQztBQUNmLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQ0wsaUJBQWlCLEdBRWxCLE1BQU0sbUNBQW1DLENBQUM7QUFDM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ25DLE9BQU8sRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDM0MsT0FBTyxFQUNMLGVBQWUsRUFDZixvQkFBb0IsRUFDcEIsbUJBQW1CLEVBQ25CLGVBQWUsRUFDZixvQkFBb0IsRUFDcEIscUJBQXFCLEdBQ3RCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxl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RUFBRSxPQUFPLENBQUMsa0JBQWtCLEdBQzlDLEdBQ1ksR0FDWixJQUNBLENBQ1QsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB7IHBhcnNlU3RlcE5hbWUsIHBhcnNlV29ya2Zsb3dOYW1lIH0gZnJvbSAnQHdvcmtmbG93L3V0aWxzL3BhcnNlLW5hbWUnO1xuaW1wb3J0IHsgQ2hldnJvbkRvd24sIENoZXZyb25VcCwgWCB9IGZyb20gJ2x1Y2lkZS1yZWFjdCc7XG5pbXBvcnQge1xuICB0eXBlIFJlYWN0Tm9kZSxcbiAgdHlwZSBSZWZPYmplY3QsXG4gIHVzZUNhbGxiYWNrLFxuICB1c2VFZmZlY3QsXG4gIHVzZU1lbW8sXG4gIHVzZVJlZixcbiAgdXNlU3RhdGUsXG59IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGZpbHRlclNwYW5SYXdFdmVudHMgfSBmcm9tICcuLi8uLi8uLi9saWIvdHJhY2UtYnVpbGRlcic7XG5pbXBvcnQgeyBFcnJvckJvdW5kYXJ5IH0gZnJvbSAnLi4vLi4vZXJyb3ItYm91bmRhcnknO1xuaW1wb3J0IHtcbiAgRW50aXR5RGV0YWlsUGFuZWwsXG4gIHR5cGUgU2VsZWN0ZWRTcGFuSW5mbyxcbn0gZnJvbSAnLi4vLi4vc2lkZWJhci9lbnRpdHktZGV0YWlsLXBhbmVsJztcbmltcG9ydCB7IHVzZVNpZGViYXJEYXRhIH0gZnJvbSAnLi4vLi4vc2lkZWJhci9zaWRlYmFyLWRhdGEtY29udGV4dCc7XG5pbXBvcnQgeyBJY29uQnV0dG9uIH0gZnJvbSAnLi4vLi4vdWkvaWNvbi1idXR0b24nO1xuaW1wb3J0IHsgS2JkIH0gZnJvbSAnLi4vLi4vdWkva2JkJztcbmltcG9ydCB7IFRvb2x0aXAsIFRvb2x0aXBDb250ZW50LCBUb29sdGlwVHJpZ2dlciB9IGZyb20gJy4uLy4uL3VpL3Rvb2x0aXAnO1xuaW1wb3J0IHsgdXNlQWN0aXZlU3BhbiB9IGZyb20gJy4uL2NvbnRleHQnO1xuaW1wb3J0IHtcbiAgY2xhbXBQYW5lbFdpZHRoLFxuICBjb21wdXRlTWF4UGFuZWxXaWR0aCxcbiAgUEFORUxfREVGQVVMVF9XSURUSCxcbiAgUEFORUxfTUlOX1dJRFRILFxuICByZWFkU3RvcmVkUGFuZWxXaWR0aCxcbiAgd3JpdGVTdG9yZWRQYW5lbFdpZHRoLFxufSBmcm9tICcuL2RldGFpbC1wYW5lbC13aWR0aCc7XG5pbXBvcnQgeyBEcmFnZ2FibGVCb3JkZXIgfSBmcm9tICcuL2RyYWdnYWJsZS1ib3JkZXInO1xuaW1wb3J0IHsgdXNlRWxlbWVudFdpZHRoIH0gZnJvbSAnLi91c2UtZWxlbWVudC13aWR0aCc7XG5cbmNvbnN0IERFVEFJTF9QQU5FTF9JRCA9ICd0cmFjZS1kZXRhaWwtcGFuZWwnO1xuXG4vKiogQnJpZGdlIEFjdGl2ZVNwYW5Db250ZXh0ICsgU2lkZWJhckRhdGFDb250ZXh0IOKGkiBTZWxlY3RlZFNwYW5JbmZvLiAqL1xuZnVuY3Rpb24gdXNlU2VsZWN0ZWRTcGFuSW5mbygpOiBTZWxlY3RlZFNwYW5JbmZvIHwgbnVsbCB7XG4gIGNvbnN0IHsgYWN0aXZlU3BhbiB9ID0gdXNlQWN0aXZlU3BhbigpO1xuICBjb25zdCBzaWRlYmFyID0gdXNlU2lkZWJhckRhdGEoKTtcblxuICByZXR1cm4gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFhY3RpdmVTcGFuKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IHJlc291cmNlID0gYWN0aXZlU3Bhbi5hdHRyaWJ1dGVzPy5yZXNvdXJjZSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgcmF3RXZlbnRzID0gZmlsdGVyU3BhblJhd0V2ZW50cyhcbiAgICAgIHNpZGViYXIuZXZlbnRzLFxuICAgICAgcmVzb3VyY2UsXG4gICAgICBhY3RpdmVTcGFuLnNwYW5JZFxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGF0YTogYWN0aXZlU3Bhbi5hdHRyaWJ1dGVzPy5kYXRhLFxuICAgICAgcmVzb3VyY2UsXG4gICAgICBzcGFuSWQ6IGFjdGl2ZVNwYW4uc3BhbklkLFxuICAgICAgcmF3RXZlbnRzLFxuICAgIH07XG4gIH0sIFthY3RpdmVTcGFuLCBzaWRlYmFyXSk7XG59XG5cbi8qKlxuICogVGhlIHNwYW4gZGV0YWlsIGFzaWRlOiBjb250ZW50LCBwcmV2L25leHQvY2xvc2UgaGVhZGVyLCBKL0sgbmF2aWdhdGlvbiwgYW5kXG4gKiB0aGUgcmVzaXphYmxlIGxlZnQgYm9yZGVyIHdpdGggaXRzIHdpZHRoIG1vZGVsIChzZWUgZGV0YWlsLXBhbmVsLXdpZHRoLnRzKS5cbiAqXG4gKiBBbHdheXMgbW91bnRlZCDigJQgaXQgcmVuZGVycyBudWxsIHdpdGhvdXQgYSBzZWxlY3Rpb24g4oCUIHNvIHRoZSBwYW5lbCB3aWR0aFxuICogc3Vydml2ZXMgY2xvc2luZyBhbmQgcmVvcGVuaW5nIHdpdGhpbiBhIHNlc3Npb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBUcmFjZURldGFpbFBhbmVsKHtcbiAgY29udGFpbmVyUmVmLFxuICBvbk5hdmlnYXRlVG9TcGFuLFxuICBvbkNsb3NlLFxufToge1xuICBjb250YWluZXJSZWY6IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudCB8IG51bGw+O1xuICBvbk5hdmlnYXRlVG9TcGFuOiAoc3BhbklkOiBzdHJpbmcpID0+IHZvaWQ7XG4gIG9uQ2xvc2U6ICgpID0+IHZvaWQ7XG59KTogUmVhY3ROb2RlIHtcbiAgY29uc3QgeyBhY3RpdmVTcGFuLCBhY3RpdmVTcGFuSWQsIHNwYW5zIH0gPSB1c2VBY3RpdmVTcGFuKCk7XG4gIGNvbnN0IHNpZGViYXIgPSB1c2VTaWRlYmFyRGF0YSgpO1xuICBjb25zdCBzZWxlY3RlZFNwYW4gPSB1c2VTZWxlY3RlZFNwYW5JbmZvKCk7XG4gIGNvbnN0IGlzT3BlbiA9IEJvb2xlYW4oYWN0aXZlU3Bhbik7XG5cbiAgY29uc3QgW3N0b3JlZFdpZHRoLCBzZXRTdG9yZWRXaWR0aF0gPSB1c2VTdGF0ZTxudW1iZXI+KCgpID0+XG4gICAgcmVhZFN0b3JlZFBhbmVsV2lkdGgoKVxuICApO1xuICBjb25zdCBjb250YWluZXJXaWR0aCA9IHVzZUVsZW1lbnRXaWR0aChjb250YWluZXJSZWYsIGlzT3Blbik7XG4gIGNvbnN0IGFzaWRlUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50IHwgbnVsbD4obnVsbCk7XG5cbiAgY29uc3QgaGFuZGxlUmVzaXplID0gdXNlQ2FsbGJhY2soXG4gICAgKG5leHQ6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3QgY2xhbXBlZCA9IGNsYW1wUGFuZWxXaWR0aChuZXh0LCBjb250YWluZXJXaWR0aCk7XG4gICAgICBzZXRTdG9yZWRXaWR0aChjbGFtcGVkKTtcbiAgICAgIHdyaXRlU3RvcmVkUGFuZWxXaWR0aChjbGFtcGVkKTtcbiAgICB9LFxuICAgIFtjb250YWluZXJXaWR0aF1cbiAgKTtcblxuICBjb25zdCBwYW5lbFdpZHRoID0gY2xhbXBQYW5lbFdpZHRoKHN0b3JlZFdpZHRoLCBjb250YWluZXJXaWR0aCk7XG4gIGNvbnN0IHBhbmVsTWF4V2lkdGggPSBNYXRoLm1heChcbiAgICBQQU5FTF9NSU5fV0lEVEgsXG4gICAgY29tcHV0ZU1heFBhbmVsV2lkdGgoY29udGFpbmVyV2lkdGgpXG4gICk7XG5cbiAgY29uc3QgeyBwcmV2U3BhbklkLCBuZXh0U3BhbklkIH0gPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoIWFjdGl2ZVNwYW5JZCkgcmV0dXJuIHsgcHJldlNwYW5JZDogbnVsbCwgbmV4dFNwYW5JZDogbnVsbCB9O1xuICAgIGNvbnN0IGkgPSBzcGFucy5maW5kSW5kZXgoKHMpID0+IHMuc3BhbklkID09PSBhY3RpdmVTcGFuSWQpO1xuICAgIGlmIChpID09PSAtMSkgcmV0dXJuIHsgcHJldlNwYW5JZDogbnVsbCwgbmV4dFNwYW5JZDogbnVsbCB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcmV2U3BhbklkOiBzcGFuc1tpIC0gMV0/LnNwYW5JZCA/PyBudWxsLFxuICAgICAgbmV4dFNwYW5JZDogc3BhbnNbaSArIDFdPy5zcGFuSWQgPz8gbnVsbCxcbiAgICB9O1xuICB9LCBbYWN0aXZlU3BhbklkLCBzcGFuc10pO1xuXG4gIGNvbnN0IGhhbmRsZVNlbGVjdFByZXYgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKHByZXZTcGFuSWQpIG9uTmF2aWdhdGVUb1NwYW4ocHJldlNwYW5JZCk7XG4gIH0sIFtwcmV2U3BhbklkLCBvbk5hdmlnYXRlVG9TcGFuXSk7XG5cbiAgY29uc3QgaGFuZGxlU2VsZWN0TmV4dCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAobmV4dFNwYW5JZCkgb25OYXZpZ2F0ZVRvU3BhbihuZXh0U3BhbklkKTtcbiAgfSwgW25leHRTcGFuSWQsIG9uTmF2aWdhdGVUb1NwYW5dKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaXNPcGVuKSByZXR1cm47XG5cbiAgICBjb25zdCBvbktleURvd24gPSAoZTogS2V5Ym9hcmRFdmVudCk6IHZvaWQgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBlLmtleSAhPT0gJ2onICYmXG4gICAgICAgIGUua2V5ICE9PSAnaycgJiZcbiAgICAgICAgZS5rZXkgIT09ICdBcnJvd0Rvd24nICYmXG4gICAgICAgIGUua2V5ICE9PSAnQXJyb3dVcCdcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldCBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG4gICAgICBpZiAoXG4gICAgICAgIHRhcmdldCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQgfHxcbiAgICAgICAgdGFyZ2V0IGluc3RhbmNlb2YgSFRNTFRleHRBcmVhRWxlbWVudCB8fFxuICAgICAgICB0YXJnZXQ/LmlzQ29udGVudEVkaXRhYmxlXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgdGFyZ2V0SWQgPVxuICAgICAgICBlLmtleSA9PT0gJ2snIHx8IGUua2V5ID09PSAnQXJyb3dVcCcgPyBwcmV2U3BhbklkIDogbmV4dFNwYW5JZDtcbiAgICAgIGlmICh0YXJnZXRJZCkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIG9uTmF2aWdhdGVUb1NwYW4odGFyZ2V0SWQpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIG9uS2V5RG93bik7XG4gICAgcmV0dXJuICgpID0+IHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgb25LZXlEb3duKTtcbiAgfSwgW2lzT3BlbiwgcHJldlNwYW5JZCwgbmV4dFNwYW5JZCwgb25OYXZpZ2F0ZVRvU3Bhbl0pO1xuXG4gIC8vIERlcml2ZSB0aGUgc2VsZWN0ZWQgc3BhbiBuYW1lIGZvciB0aGUgcGFuZWwgaGVhZGVyXG4gIGNvbnN0IHNlbGVjdGVkU3Bhbk5hbWUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoIXNlbGVjdGVkU3Bhbj8uZGF0YSkgcmV0dXJuICdEZXRhaWxzJztcbiAgICBjb25zdCBkYXRhID0gc2VsZWN0ZWRTcGFuLmRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgaWYgKHNlbGVjdGVkU3Bhbi5yZXNvdXJjZSA9PT0gJ2hvb2snKSB7XG4gICAgICByZXR1cm4gKGRhdGEudG9rZW4gYXMgc3RyaW5nIHwgdW5kZWZpbmVkKSA/PyAoZGF0YS5ob29rSWQgYXMgc3RyaW5nKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGVwTmFtZSA9IGRhdGEuc3RlcE5hbWUgYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IHdvcmtmbG93TmFtZSA9IGRhdGEud29ya2Zsb3dOYW1lIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gKFxuICAgICAgKHN0ZXBOYW1lID8gcGFyc2VTdGVwTmFtZShzdGVwTmFtZSk/LnNob3J0TmFtZSA6IHVuZGVmaW5lZCkgPz9cbiAgICAgICh3b3JrZmxvd05hbWUgPyBwYXJzZVdvcmtmbG93TmFtZSh3b3JrZmxvd05hbWUpPy5zaG9ydE5hbWUgOiB1bmRlZmluZWQpID8/XG4gICAgICBzdGVwTmFtZSA/P1xuICAgICAgd29ya2Zsb3dOYW1lID8/XG4gICAgICAoZGF0YS5ob29rSWQgYXMgc3RyaW5nKSA/P1xuICAgICAgJ0RldGFpbHMnXG4gICAgKTtcbiAgfSwgW3NlbGVjdGVkU3Bhbj8uZGF0YSwgc2VsZWN0ZWRTcGFuPy5yZXNvdXJjZV0pO1xuXG4gIGlmICghYWN0aXZlU3BhbikgcmV0dXJuIG51bGw7XG5cbiAgcmV0dXJuIChcbiAgICA8YXNpZGVcbiAgICAgIHJlZj17YXNpZGVSZWZ9XG4gICAgICBpZD17REVUQUlMX1BBTkVMX0lEfVxuICAgICAgY2xhc3NOYW1lPVwicmVsYXRpdmUgZmxleCBmbGV4LWNvbCBoLWZ1bGwgbWF4LWgtZnVsbCBzaHJpbmstMCBiZy1iYWNrZ3JvdW5kLTEwMCBib3JkZXItbCBib3JkZXItZ3JheS1hbHBoYS00MDBcIlxuICAgICAgc3R5bGU9e3sgd2lkdGg6IHBhbmVsV2lkdGggfX1cbiAgICA+XG4gICAgICA8RHJhZ2dhYmxlQm9yZGVyXG4gICAgICAgIGVsZW1lbnQ9e2FzaWRlUmVmfVxuICAgICAgICBwb3NpdGlvbj1cImxlZnRcIlxuICAgICAgICBvbldpZHRoQ2hhbmdlPXtoYW5kbGVSZXNpemV9XG4gICAgICAgIG9uUmVzZXQ9eygpID0+IGhhbmRsZVJlc2l6ZShQQU5FTF9ERUZBVUxUX1dJRFRIKX1cbiAgICAgICAgYXJpYS1sYWJlbD1cIlJlc2l6ZSBzcGFuIGRldGFpbHMgcGFuZWxcIlxuICAgICAgICBhcmlhLWNvbnRyb2xzPXtERVRBSUxfUEFORUxfSUR9XG4gICAgICAgIGFyaWEtdmFsdWVtaW49e1BBTkVMX01JTl9XSURUSH1cbiAgICAgICAgYXJpYS12YWx1ZW1heD17cGFuZWxNYXhXaWR0aH1cbiAgICAgICAgYXJpYS12YWx1ZW5vdz17TWF0aC5taW4oXG4gICAgICAgICAgTWF0aC5tYXgoTWF0aC5yb3VuZChwYW5lbFdpZHRoKSwgUEFORUxfTUlOX1dJRFRIKSxcbiAgICAgICAgICBwYW5lbE1heFdpZHRoXG4gICAgICAgICl9XG4gICAgICAvPlxuICAgICAgey8qIFBhbmVsIGhlYWRlciAqL31cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIHNocmluay0wIHB4LTQgcHktWzcuNXB4XVwiPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWxhYmVsLTE0IGZvbnQtbWVkaXVtIHRleHQtZ3JheS0xMDAwIHRydW5jYXRlIGJsb2NrXCI+XG4gICAgICAgICAge3NlbGVjdGVkU3Bhbk5hbWV9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMC41IHNocmluay0wXCI+XG4gICAgICAgICAgPFRvb2x0aXA+XG4gICAgICAgICAgICA8VG9vbHRpcFRyaWdnZXIgYXNDaGlsZD5cbiAgICAgICAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiTmF2aWdhdGUgdXBcIlxuICAgICAgICAgICAgICAgIGFyaWEta2V5c2hvcnRjdXRzPVwiS1wiXG4gICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlU2VsZWN0UHJldn1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17IXByZXZTcGFuSWR9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8Q2hldnJvblVwIGNsYXNzTmFtZT1cInctNCBoLTRcIiAvPlxuICAgICAgICAgICAgICA8L0ljb25CdXR0b24+XG4gICAgICAgICAgICA8L1Rvb2x0aXBUcmlnZ2VyPlxuICAgICAgICAgICAge3ByZXZTcGFuSWQgPyAoXG4gICAgICAgICAgICAgIDxUb29sdGlwQ29udGVudD5cbiAgICAgICAgICAgICAgICBOYXZpZ2F0ZSB1cFxuICAgICAgICAgICAgICAgIDxLYmQ+SzwvS2JkPlxuICAgICAgICAgICAgICA8L1Rvb2x0aXBDb250ZW50PlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgIDxUb29sdGlwPlxuICAgICAgICAgICAgPFRvb2x0aXBUcmlnZ2VyIGFzQ2hpbGQ+XG4gICAgICAgICAgICAgIDxJY29uQnV0dG9uXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIk5hdmlnYXRlIGRvd25cIlxuICAgICAgICAgICAgICAgIGFyaWEta2V5c2hvcnRjdXRzPVwiSlwiXG4gICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlU2VsZWN0TmV4dH1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17IW5leHRTcGFuSWR9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8Q2hldnJvbkRvd24gY2xhc3NOYW1lPVwidy00IGgtNFwiIC8+XG4gICAgICAgICAgICAgIDwvSWNvbkJ1dHRvbj5cbiAgICAgICAgICAgIDwvVG9vbHRpcFRyaWdnZXI+XG4gICAgICAgICAgICB7bmV4dFNwYW5JZCA/IChcbiAgICAgICAgICAgICAgPFRvb2x0aXBDb250ZW50PlxuICAgICAgICAgICAgICAgIE5hdmlnYXRlIGRvd25cbiAgICAgICAgICAgICAgICA8S2JkPko8L0tiZD5cbiAgICAgICAgICAgICAgPC9Ub29sdGlwQ29udGVudD5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgICA8ZGl2IGFyaWEtaGlkZGVuIGNsYXNzTmFtZT1cInctcHggaC00IGJnLWdyYXktYWxwaGEtNDAwIG14LTFcIiAvPlxuICAgICAgICAgIDxJY29uQnV0dG9uXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiQ2xvc2Ugc3BhbiBkZXRhaWxzXCJcbiAgICAgICAgICAgIGFyaWEta2V5c2hvcnRjdXRzPVwiRXNjYXBlXCJcbiAgICAgICAgICAgIG9uQ2xpY2s9e29uQ2xvc2V9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFggY2xhc3NOYW1lPVwidy00IGgtNFwiIC8+XG4gICAgICAgICAgPC9JY29uQnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgey8qIFBhbmVsIGJvZHkgKi99XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBvdmVyZmxvdy15LWF1dG9cIj5cbiAgICAgICAgPEVycm9yQm91bmRhcnk+XG4gICAgICAgICAgPEVudGl0eURldGFpbFBhbmVsXG4gICAgICAgICAgICBydW49e3NpZGViYXIucnVufVxuICAgICAgICAgICAgb25TdHJlYW1DbGljaz17c2lkZWJhci5vblN0cmVhbUNsaWNrfVxuICAgICAgICAgICAgb25SdW5DbGljaz17c2lkZWJhci5vblJ1bkNsaWNrfVxuICAgICAgICAgICAgZmV0Y2hTcGFuRGV0YWlsPXtzaWRlYmFyLmZldGNoU3BhbkRldGFpbH1cbiAgICAgICAgICAgIG9uV2FrZVVwU2xlZXA9e3NpZGViYXIub25XYWtlVXBTbGVlcH1cbiAgICAgICAgICAgIG9uTG9hZEV2ZW50RGF0YT17c2lkZWJhci5vbkxvYWRFdmVudERhdGF9XG4gICAgICAgICAgICBvblJlc29sdmVIb29rPXtzaWRlYmFyLm9uUmVzb2x2ZUhvb2t9XG4gICAgICAgICAgICBlbmNyeXB0aW9uS2V5PXtzaWRlYmFyLmVuY3J5cHRpb25LZXl9XG4gICAgICAgICAgICBvbkRlY3J5cHQ9e3NpZGViYXIub25EZWNyeXB0fVxuICAgICAgICAgICAgaXNEZWNyeXB0aW5nPXtzaWRlYmFyLmlzRGVjcnlwdGluZ31cbiAgICAgICAgICAgIHNlbGVjdGVkU3Bhbj17c2VsZWN0ZWRTcGFufVxuICAgICAgICAgICAgc2hvd1NlcGFyYXRlRXZlbnRPY2N1cnJlbmNlVGltZXN0YW1wcz17XG4gICAgICAgICAgICAgIHNpZGViYXIuc2hvd1NlcGFyYXRlRXZlbnRPY2N1cnJlbmNlVGltZXN0YW1wc1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ2V0TW9kdWxlU291cmNlVXJsPXtzaWRlYmFyLmdldE1vZHVsZVNvdXJjZVVybH1cbiAgICAgICAgICAvPlxuICAgICAgICA8L0Vycm9yQm91bmRhcnk+XG4gICAgICA8L2Rpdj5cbiAgICA8L2FzaWRlPlxuICApO1xufVxuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"draggable-border.d.ts","sourceRoot":"","sources":["../../../../src/components/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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZ2dhYmxlLWJvcmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3RyYWNlLXZpZXdlci9jb21wb25lbnRzL2RyYWdnYWJsZS1ib3JkZXIudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7QUFFYixPQUFPLEVBSUwsU0FBUyxFQUNULE1BQU0sRUFDTixRQUFRLEdBQ1QsTUFBTSxPQUFPLENBQUM7QUFDZixPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFxQnJDOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FBQyxFQUM5QixPQUFPLEVBQ1AsUUFBUSxFQUNSLGFBQWEsRUFDYixPQUFPLEVBQ1AsWUFBWSxFQUFFLFNBQVMsRUFDdkIsZUFBZSxFQUFFLFlBQVksRUFDN0IsZUFBZSxFQUFFLFlBQVksRUFDN0IsZUFBZSxFQUFFLFlBQVksRUFDN0IsZUFBZSxFQUFFLFlBQVksR0FDUjtJQUNyQixNQUFNLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwRCxNQUFNLFlBQVksR0FBRyxNQUFNLENBQWdCLElBQUksQ0FBQyxDQUFDO0lBQ2pELE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1QixNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEMsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBZ0IsSUFBSSxDQUFDLENBQUM7SUFDM0MsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9CLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRW5DLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFD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QUNDLFVBQVUsZ0JBQ2YsU0FBUyxtQkFDTixZQUFZLG1CQUNaLFlBQVksbUJBQ1osWUFBWSxtQkFDWixZQUFZLEVBQzNCLFFBQVEsRUFBRSxDQUFDLEVBQ1gsU0FBUyxFQUFFLEVBQUUsQ0FDWCxrRkFBa0YsRUFDbEYsUUFBUSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQzdDLEVBQ0QsYUFBYSxFQUFFLGlCQUFpQixFQUNoQyxhQUFhLEVBQUUsaUJBQWlCLEVBQ2hDLFdBQVcsRUFBRSxnQkFBZ0IsRUFDN0IsZUFBZSxFQUFFLGdCQUFnQixFQUNqQyxvQkFBb0IsRUFBRSx3QkFBd0IsRUFDOUMsYUFBYSxFQUFFLGlCQUFpQixFQUNoQyxTQUFTLEVBQUUsYUFBYSxZQVV4QixvQ0FFRSxTQUFTLEVBQUUsRUFBRSxDQUNYLDhIQUE4SCxFQUM5SCx3RUFBd0UsRUFDeEUsVUFBVSxJQUFJLGFBQWEsQ0FDNUIsR0FDRCxHQUNFLENBQ1AsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB7XG4gIHR5cGUgS2V5Ym9hcmRFdmVudCBhcyBSZWFjdEtleWJvYXJkRXZlbnQsXG4gIHR5cGUgUG9pbnRlckV2ZW50IGFzIFJlYWN0UG9pbnRlckV2ZW50LFxuICB0eXBlIFJlZk9iamVjdCxcbiAgdXNlRWZmZWN0LFxuICB1c2VSZWYsXG4gIHVzZVN0YXRlLFxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjbiB9IGZyb20gJy4uLy4uLy4uL2xpYi9jbic7XG5cbmludGVyZmFjZSBEcmFnZ2FibGVCb3JkZXJQcm9wcyB7XG4gIC8qKiBUaGUgcGFuZWwgd2hvc2Ugd2lkdGggdGhpcyBib3JkZXIgYWRqdXN0cyAobWVhc3VyZWQgb24gaW50ZXJhY3Rpb24pLiAqL1xuICBlbGVtZW50OiBSZWZPYmplY3Q8SFRNTEVsZW1lbnQgfCBudWxsPjtcbiAgLyoqIFdoaWNoIGVkZ2Ugb2YgdGhlIHBhbmVsIHRoZSBib3JkZXIgc2l0cyBvbi4gKi9cbiAgcG9zaXRpb246ICdsZWZ0JyB8ICdyaWdodCc7XG4gIC8qKlxuICAgKiBDYWxsZWQgd2l0aCB0aGUgbmV4dCB3aWR0aCAocHgpIHdoaWxlIGRyYWdnaW5nIG9yIGtleWJvYXJkLXJlc2l6aW5nLlxuICAgKiBUaGUgb3duZXIgaXMgcmVzcG9uc2libGUgZm9yIGNsYW1waW5nLlxuICAgKi9cbiAgb25XaWR0aENoYW5nZTogKHdpZHRoOiBudW1iZXIpID0+IHZvaWQ7XG4gIC8qKiBEb3VibGUtY2xpY2sgcmVzZXQuICovXG4gIG9uUmVzZXQ/OiAoKSA9PiB2b2lkO1xuICAnYXJpYS1sYWJlbCc6IHN0cmluZztcbiAgJ2FyaWEtY29udHJvbHMnPzogc3RyaW5nO1xuICAnYXJpYS12YWx1ZW1pbic/OiBudW1iZXI7XG4gICdhcmlhLXZhbHVlbWF4Jz86IG51bWJlcjtcbiAgJ2FyaWEtdmFsdWVub3cnPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIE92ZXJsYXkgZHJhZyBoYW5kbGUgc3RyYWRkbGluZyBhIHBhbmVsIGVkZ2U6IGFuIGludmlzaWJsZSBzdHJpcCBvdmVyIHRoZVxuICogcGFuZWwncyBib3JkZXIgd2hvc2UgY2VudGVyIGxpbmUgaGlnaGxpZ2h0cyBvbiBob3Zlci9kcmFnLCB3aXRoXG4gKiBkb3VibGUtY2xpY2sgcmVzZXQsIHBvaW50ZXItY2FwdHVyZSBkcmFnZ2luZyAod29ya3Mgd2l0aCB0b3VjaC9wZW4sIG5vXG4gKiBnaG9zdCBpbWFnZSksIGFuZCBrZXlib2FyZC9BUklBIHdpbmRvdy1zcGxpdHRlciBzdXBwb3J0LlxuICpcbiAqIFRoZSBwYW5lbCdzIHBvc2l0aW9uaW5nIGFuY2VzdG9yIG11c3Qgbm90IGNsaXAgb3ZlcmZsb3cg4oCUIHRoZSBzdHJpcCBoYW5nc1xuICogfjhweCBwYXN0IHRoZSBwYW5lbCBlZGdlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gRHJhZ2dhYmxlQm9yZGVyKHtcbiAgZWxlbWVudCxcbiAgcG9zaXRpb24sXG4gIG9uV2lkdGhDaGFuZ2UsXG4gIG9uUmVzZXQsXG4gICdhcmlhLWxhYmVsJzogYXJpYUxhYmVsLFxuICAnYXJpYS1jb250cm9scyc6IGFyaWFDb250cm9scyxcbiAgJ2FyaWEtdmFsdWVtaW4nOiBhcmlhVmFsdWVNaW4sXG4gICdhcmlhLXZhbHVlbWF4JzogYXJpYVZhbHVlTWF4LFxuICAnYXJpYS12YWx1ZW5vdyc6IGFyaWFWYWx1ZU5vdyxcbn06IERyYWdnYWJsZUJvcmRlclByb3BzKSB7XG4gIGNvbnN0IFtpc0RyYWdnaW5nLCBzZXRJc0RyYWdnaW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgcG9pbnRlcklkUmVmID0gdXNlUmVmPG51bWJlciB8IG51bGw+KG51bGwpO1xuICBjb25zdCBzdGFydFhSZWYgPSB1c2VSZWYoMCk7XG4gIGNvbnN0IHN0YXJ0V2lkdGhSZWYgPSB1c2VSZWYoMCk7XG4gIGNvbnN0IHBlbmRpbmdXaWR0aFJlZiA9IHVzZVJlZigwKTtcbiAgY29uc3QgcmFmUmVmID0gdXNlUmVmPG51bWJlciB8IG51bGw+KG51bGwpO1xuICBjb25zdCBtb3ZlZFJlZiA9IHVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IGxhc3REcmFnRW5kQXRSZWYgPSB1c2VSZWYoMCk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKHJhZlJlZi5jdXJyZW50KSBjYW5jZWxBbmltYXRpb25GcmFtZShyYWZSZWYuY3VycmVudCk7XG4gICAgfTtcbiAgfSwgW10pO1xuXG4gIC8vIFN1cHByZXNzIHRleHQgc2VsZWN0aW9uIGZvciB0aGUgZHVyYXRpb24gb2YgYSBkcmFnLiBFZmZlY3QgY2xlYW51cCBhbHNvXG4gIC8vIGNvdmVycyB0aGUgaGFuZGxlIHVubW91bnRpbmcgbWlkLWRyYWcgKGUuZy4gRXNjYXBlIGNsb3NpbmcgdGhlIHBhbmVsKS5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzRHJhZ2dpbmcpIHJldHVybjtcbiAgICBjb25zdCBwcmV2aW91cyA9IGRvY3VtZW50LmJvZHkuc3R5bGUudXNlclNlbGVjdDtcbiAgICBkb2N1bWVudC5ib2R5LnN0eWxlLnVzZXJTZWxlY3QgPSAnbm9uZSc7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUudXNlclNlbGVjdCA9IHByZXZpb3VzO1xuICAgIH07XG4gIH0sIFtpc0RyYWdnaW5nXSk7XG5cbiAgY29uc3Qgc3RvcERyYWcgPSAoKSA9PiB7XG4gICAgcG9pbnRlcklkUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgIHNldElzRHJhZ2dpbmcoZmFsc2UpO1xuICAgIGlmIChyYWZSZWYuY3VycmVudCkge1xuICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmUmVmLmN1cnJlbnQpO1xuICAgICAgcmFmUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgICAgLy8gRmx1c2ggdGhlIGZpbmFsIHBvc2l0aW9uIHRoYXQgd2FzIHN0aWxsIHdhaXRpbmcgb24gdGhlIG5leHQgZnJhbWUuXG4gICAgICBpZiAobW92ZWRSZWYuY3VycmVudCkgb25XaWR0aENoYW5nZShwZW5kaW5nV2lkdGhSZWYuY3VycmVudCk7XG4gICAgfVxuICAgIGlmIChtb3ZlZFJlZi5jdXJyZW50KSB7XG4gICAgICBtb3ZlZFJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICBsYXN0RHJhZ0VuZEF0UmVmLmN1cnJlbnQgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlUG9pbnRlckRvd24gPSAoZTogUmVhY3RQb2ludGVyRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgLy8gSWdub3JlIHNlY29uZGFyeSBwb2ludGVycyAoZS5nLiBhIHNlY29uZCBmaW5nZXIpIHdoaWxlIGEgZHJhZyBpcyBhY3RpdmVcbiAgICAvLyBzbyB0aGV5IGNhbid0IHJlLWJhc2VsaW5lIHRoZSBnZXN0dXJlLlxuICAgIGlmIChwb2ludGVySWRSZWYuY3VycmVudCAhPT0gbnVsbCkgcmV0dXJuO1xuICAgIGNvbnN0IGVsID0gZWxlbWVudC5jdXJyZW50O1xuICAgIGlmICghZWwpIHJldHVybjtcbiAgICBpZiAoZS5wb2ludGVyVHlwZSA9PT0gJ21vdXNlJyAmJiBlLmJ1dHRvbiAhPT0gMCkgcmV0dXJuO1xuICAgIGUuY3VycmVudFRhcmdldC5zZXRQb2ludGVyQ2FwdHVyZShlLnBvaW50ZXJJZCk7XG4gICAgcG9pbnRlcklkUmVmLmN1cnJlbnQgPSBlLnBvaW50ZXJJZDtcbiAgICBzdGFydFhSZWYuY3VycmVudCA9IGUuY2xpZW50WDtcbiAgICBzdGFydFdpZHRoUmVmLmN1cnJlbnQgPSBlbC5vZmZzZXRXaWR0aDtcbiAgICBtb3ZlZFJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgc2V0SXNEcmFnZ2luZyh0cnVlKTtcbiAgfTtcblxuICAvLyBQb2ludGVyIGNhcHR1cmUgcm91dGVzIG1vdmUvdXAgZXZlbnRzIHRvIHRoZSBzdHJpcCBpdHNlbGYsIHNvIG5vXG4gIC8vIGRvY3VtZW50LWxldmVsIGxpc3RlbmVycyBhcmUgbmVlZGVkLlxuICBjb25zdCBoYW5kbGVQb2ludGVyTW92ZSA9IChlOiBSZWFjdFBvaW50ZXJFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICBpZiAocG9pbnRlcklkUmVmLmN1cnJlbnQgIT09IGUucG9pbnRlcklkKSByZXR1cm47XG4gICAgaWYgKE1hdGguYWJzKGUuY2xpZW50WCAtIHN0YXJ0WFJlZi5jdXJyZW50KSA+IDQpIHtcbiAgICAgIG1vdmVkUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgIH1cbiAgICBjb25zdCBkZWx0YSA9XG4gICAgICBwb3NpdGlvbiA9PT0gJ2xlZnQnXG4gICAgICAgID8gc3RhcnRYUmVmLmN1cnJlbnQgLSBlLmNsaWVudFhcbiAgICAgICAgOiBlLmNsaWVudFggLSBzdGFydFhSZWYuY3VycmVudDtcbiAgICBwZW5kaW5nV2lkdGhSZWYuY3VycmVudCA9IHN0YXJ0V2lkdGhSZWYuY3VycmVudCArIGRlbHRhO1xuICAgIGlmICghcmFmUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJhZlJlZi5jdXJyZW50ID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgcmFmUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgICAgICBvbldpZHRoQ2hhbmdlKHBlbmRpbmdXaWR0aFJlZi5jdXJyZW50KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVQb2ludGVyRW5kID0gKGU6IFJlYWN0UG9pbnRlckV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgIGlmIChwb2ludGVySWRSZWYuY3VycmVudCAhPT0gZS5wb2ludGVySWQpIHJldHVybjtcbiAgICBzdG9wRHJhZygpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUxvc3RQb2ludGVyQ2FwdHVyZSA9IChlOiBSZWFjdFBvaW50ZXJFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICBpZiAocG9pbnRlcklkUmVmLmN1cnJlbnQgIT09IG51bGwgJiYgZS5wb2ludGVySWQgIT09IHBvaW50ZXJJZFJlZi5jdXJyZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHN0b3BEcmFnKCk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlRG91YmxlQ2xpY2sgPSAoKSA9PiB7XG4gICAgLy8gUG9pbnRlci1jYXB0dXJlIGRyYWdzIHN0aWxsIGVtaXQgY2xpY2svZGJsY2xpY2sgKHVubGlrZSBIVE1MNSBkcmFnKSwgc29cbiAgICAvLyBhIGRibGNsaWNrIGR1cmluZyBvciByaWdodCBhZnRlciBhIHJlYWwgZHJhZyBpcyB0d28gcmVzaXplIG51ZGdlcywgbm90XG4gICAgLy8gYSByZXNldCByZXF1ZXN0LlxuICAgIGlmIChcbiAgICAgIG1vdmVkUmVmLmN1cnJlbnQgfHxcbiAgICAgIHBlcmZvcm1hbmNlLm5vdygpIC0gbGFzdERyYWdFbmRBdFJlZi5jdXJyZW50IDwgNTAwXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIG9uUmVzZXQ/LigpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUtleURvd24gPSAoZTogUmVhY3RLZXlib2FyZEV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgIGNvbnN0IGVsID0gZWxlbWVudC5jdXJyZW50O1xuICAgIGlmICghZWwpIHJldHVybjtcbiAgICBjb25zdCBzdGVwID0gZS5zaGlmdEtleSA/IDY0IDogMTY7XG4gICAgLy8gQXJyb3dzIG1vdmUgdGhlIGJvcmRlciBpbiBzY3JlZW4gZGlyZWN0aW9uOiBmb3IgYSBsZWZ0LWVkZ2UgYm9yZGVyLFxuICAgIC8vIEFycm93TGVmdCBncm93cyB0aGUgcGFuZWwuXG4gICAgY29uc3QgZ3JvdyA9IHBvc2l0aW9uID09PSAnbGVmdCcgPyAxIDogLTE7XG4gICAgbGV0IG5leHQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgIGlmIChlLmtleSA9PT0gJ0Fycm93TGVmdCcpIHtcbiAgICAgIG5leHQgPSBlbC5vZmZzZXRXaWR0aCArIGdyb3cgKiBzdGVwO1xuICAgIH0gZWxzZSBpZiAoZS5rZXkgPT09ICdBcnJvd1JpZ2h0Jykge1xuICAgICAgbmV4dCA9IGVsLm9mZnNldFdpZHRoIC0gZ3JvdyAqIHN0ZXA7XG4gICAgfSBlbHNlIGlmIChlLmtleSA9PT0gJ0hvbWUnICYmIGFyaWFWYWx1ZU1pbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBuZXh0ID0gYXJpYVZhbHVlTWluO1xuICAgIH0gZWxzZSBpZiAoZS5rZXkgPT09ICdFbmQnICYmIGFyaWFWYWx1ZU1heCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBuZXh0ID0gYXJpYVZhbHVlTWF4O1xuICAgIH1cbiAgICBpZiAobmV4dCA9PT0gbnVsbCkgcmV0dXJuO1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBvbldpZHRoQ2hhbmdlKG5leHQpO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvYTExeS91c2VTZW1hbnRpY0VsZW1lbnRzOiB0aGUgV0FJLUFSSUEgd2luZG93LXNwbGl0dGVyIHBhdHRlcm4gcmVxdWlyZXMgYSBmb2N1c2FibGUgZGl2IHdpdGggcm9sZT1zZXBhcmF0b3I7IDxocj4gY2Fubm90IHJlY2VpdmUgZm9jdXMgb3IgZHJhZyBpbnRlcmFjdGlvbnNcbiAgICA8ZGl2XG4gICAgICByb2xlPVwic2VwYXJhdG9yXCJcbiAgICAgIGFyaWEtb3JpZW50YXRpb249XCJ2ZXJ0aWNhbFwiXG4gICAgICBhcmlhLWxhYmVsPXthcmlhTGFiZWx9XG4gICAgICBhcmlhLWNvbnRyb2xzPXthcmlhQ29udHJvbHN9XG4gICAgICBhcmlhLXZhbHVlbWluPXthcmlhVmFsdWVNaW59XG4gICAgICBhcmlhLXZhbHVlbWF4PXthcmlhVmFsdWVNYXh9XG4gICAgICBhcmlhLXZhbHVlbm93PXthcmlhVmFsdWVOb3d9XG4gICAgICB0YWJJbmRleD17MH1cbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICdncm91cCBhYnNvbHV0ZSBpbnNldC15LTAgei0xMCB3LVsxN3B4XSBjdXJzb3ItY29sLXJlc2l6ZSB0b3VjaC1ub25lIG91dGxpbmUtbm9uZScsXG4gICAgICAgIHBvc2l0aW9uID09PSAnbGVmdCcgPyAnLWxlZnQtMicgOiAnLXJpZ2h0LTInXG4gICAgICApfVxuICAgICAgb25Qb2ludGVyRG93bj17aGFuZGxlUG9pbnRlckRvd259XG4gICAgICBvblBvaW50ZXJNb3ZlPXtoYW5kbGVQb2ludGVyTW92ZX1cbiAgICAgIG9uUG9pbnRlclVwPXtoYW5kbGVQb2ludGVyRW5kfVxuICAgICAgb25Qb2ludGVyQ2FuY2VsPXtoYW5kbGVQb2ludGVyRW5kfVxuICAgICAgb25Mb3N0UG9pbnRlckNhcHR1cmU9e2hhbmRsZUxvc3RQb2ludGVyQ2FwdHVyZX1cbiAgICAgIG9uRG91YmxlQ2xpY2s9e2hhbmRsZURvdWJsZUNsaWNrfVxuICAgICAgb25LZXlEb3duPXtoYW5kbGVLZXlEb3dufVxuICAgID5cbiAgICAgIHsvKiBDZW50ZXIgbGluZTogc2l0cyBleGFjdGx5IG92ZXIgdGhlIHBhbmVsJ3MgMXB4IGJvcmRlciBhbmQgaGlnaGxpZ2h0c1xuICAgICAgICAgIG9uIGhvdmVyL2RyYWcvZm9jdXMgKGRlbGF5ZWQgc28gaW5jaWRlbnRhbCBtb3VzZS1vdmVycyBkb24ndCBmbGFzaCkuXG4gICAgICAgICAgcG9pbnRlci1ldmVudHMtbm9uZSBpcyBsb2FkLWJlYXJpbmc6IHdpdGhvdXQgaXQgdGhpcyAxcHggbGluZSBpcyBhXG4gICAgICAgICAgaGl0IHRhcmdldCwgc28gYSBkb3VibGUtY2xpY2sgYWltZWQgYXQgdGhlIGxpbmUgbGFuZHMgb25lIGNsaWNrIG9uXG4gICAgICAgICAgdGhlIGxpbmUgYW5kIChhZnRlciBzdWItcGl4ZWwgaml0dGVyKSB0aGUgb3RoZXIgb24gdGhlIHN0cmlwLiBBXG4gICAgICAgICAgbmF0aXZlIGRibGNsaWNrIG9ubHkgZmlyZXMgd2hlbiBib3RoIGNsaWNrcyBzaGFyZSBhIHRhcmdldCwgc28gdGhlXG4gICAgICAgICAgcmVzZXQgc2lsZW50bHkgZmFpbHMgb24gdGhlIGxpbmUgYnV0IHdvcmtzIGp1c3QgYmVzaWRlIGl0LiBLZWVwaW5nXG4gICAgICAgICAgdGhlIGxpbmUgaW5lcnQgbWFrZXMgdGhlIHNlcGFyYXRvciBkaXYgdGhlIHNvbGUgdGFyZ2V0IGV2ZXJ5d2hlcmUuICovfVxuICAgICAgPHNwYW5cbiAgICAgICAgYXJpYS1oaWRkZW5cbiAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAncG9pbnRlci1ldmVudHMtbm9uZSBhYnNvbHV0ZSBpbnNldC15LTAgbGVmdC0xLzIgdy1weCAtdHJhbnNsYXRlLXgtMS8yIGJnLXRyYW5zcGFyZW50IHRyYW5zaXRpb24tY29sb3JzIGRlbGF5LTc1IGR1cmF0aW9uLTEwMCcsXG4gICAgICAgICAgJ2dyb3VwLWhvdmVyOmJnLWdyYXktNTAwIGdyb3VwLWZvY3VzLXZpc2libGU6YmctW3ZhcigtLWRzLWZvY3VzLWNvbG9yKV0nLFxuICAgICAgICAgIGlzRHJhZ2dpbmcgJiYgJ2JnLWdyYXktNTAwJ1xuICAgICAgICApfVxuICAgICAgLz5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-list.d.ts","sourceRoot":"","sources":["../../../../src/components/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;AA8FrC,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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Circle } from 'lucide-react';
|
|
3
|
+
import { useRef } from 'react';
|
|
4
|
+
import { cn } from '../../../lib/cn';
|
|
5
|
+
import { Tooltip, TooltipContent, TooltipTrigger } from '../../ui/tooltip';
|
|
6
|
+
import { SleepIcon, StepForwardIcon, WebhookIcon, WorkflowIcon, } from '../icons';
|
|
7
|
+
import { isSpanDimmedBySearch } from '../search';
|
|
8
|
+
import { formatDurationPrecise } from '../util/timing';
|
|
9
|
+
import { getSpanDurationMs, isSpanErrored } from '../utils';
|
|
10
|
+
import { MiddleTruncate } from './middle-truncate/middle-truncate';
|
|
11
|
+
import { ROW_HEIGHT_PX, useRowWindow } from './use-row-window';
|
|
12
|
+
const eventStyles = {
|
|
13
|
+
run: { icon: WorkflowIcon, className: 'text-blue-900', label: 'Workflow' },
|
|
14
|
+
step: { icon: StepForwardIcon, className: 'text-green-900', label: 'Step' },
|
|
15
|
+
hook: { icon: WebhookIcon, className: 'text-gray-900', label: 'Hook' },
|
|
16
|
+
sleep: { icon: SleepIcon, className: 'text-gray-900', label: 'Sleep' },
|
|
17
|
+
};
|
|
18
|
+
const defaultStyle = {
|
|
19
|
+
icon: Circle,
|
|
20
|
+
className: 'text-gray-900',
|
|
21
|
+
label: 'Event',
|
|
22
|
+
};
|
|
23
|
+
const ROW_HEIGHT_CLASS = 'h-10';
|
|
24
|
+
function getEventStyle(resource, isErrored) {
|
|
25
|
+
const style = eventStyles[resource] ?? defaultStyle;
|
|
26
|
+
return {
|
|
27
|
+
icon: style.icon,
|
|
28
|
+
className: cn(isErrored ? 'text-red-900' : style.className),
|
|
29
|
+
label: style.label,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
const EventRow = ({ span, isSelected, isDimmed, onSelectSpan, }) => {
|
|
33
|
+
const durationMs = getSpanDurationMs(span);
|
|
34
|
+
const isErrored = isSpanErrored(span);
|
|
35
|
+
const { icon: Icon, className: tagClassName, label: iconLabel, } = getEventStyle(span.resource, isErrored);
|
|
36
|
+
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: [_jsxs(Tooltip, { delayDuration: 500, children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("span", { className: cn('shrink-0', tagClassName), children: _jsx(Icon, { className: "w-4 h-4" }) }) }), _jsx(TooltipContent, { side: "top", children: iconLabel })] }), _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) }) })] }) }) }));
|
|
37
|
+
};
|
|
38
|
+
const EventList = ({ spans, activeSpanId, searchResult, onSelectSpan, }) => {
|
|
39
|
+
const listRef = useRef(null);
|
|
40
|
+
const { start, end } = useRowWindow(listRef, spans.length, ROW_HEIGHT_PX);
|
|
41
|
+
return (_jsx("ul", { ref: listRef, id: "event-list", role: "tree", className: "block min-h-0 overflow-visible divide-y divide-gray-400 border-b border-gray-400", style: {
|
|
42
|
+
paddingTop: start * ROW_HEIGHT_PX,
|
|
43
|
+
paddingBottom: (spans.length - end) * ROW_HEIGHT_PX,
|
|
44
|
+
}, children: spans.slice(start, end).map((span) => (_jsx(EventRow, { span: span, isSelected: span.spanId === activeSpanId, isDimmed: isSpanDimmedBySearch(span.spanId, searchResult), onSelectSpan: onSelectSpan }, span.spanId))) }));
|
|
45
|
+
};
|
|
46
|
+
export default EventList;
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtbGlzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3RyYWNlLXZpZXdlci9jb21wb25lbnRzL2V2ZW50LWxpc3QudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDL0IsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzNFLE9BQU8sRUFDTCxTQUFTLEVBQ1QsZUFBZSxFQUNmLFdBQVcsRUFDWCxZQUFZLEdBQ2IsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFFLG9CQUFvQixFQUF5QixNQUFNLFdBQVcsQ0FBQztBQUV4RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzVELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBUS9ELE1BQU0sV0FBVyxHQUErQjtJQUM5QyxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRTtJQUMxRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO0lBQzNFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxL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QUNaLEVBQUUsRUFBQyxZQUFZLEVBQ2YsSUFBSSxFQUFDLE1BQU0sRUFDWCxTQUFTLEVBQUMsa0ZBQWtGLEVBQzVGLEtBQUssRUFBRTtZQUNMLFVBQVUsRUFBRSxLQUFLLEdBQUcsYUFBYTtZQUNqQyxhQUFhLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLGFBQWE7U0FDcEQsWUFFQSxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQ3JDLEtBQUMsUUFBUSxJQUVQLElBQUksRUFBRSxJQUFJLEVBQ1YsVUFBVSxFQUFFLElBQUksQ0FBQyxNQUFNLEtBQUssWUFBWSxFQUN4QyxRQUFRLEVBQUUsb0JBQW9CLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsRUFDekQsWUFBWSxFQUFFLFlBQVksSUFKckIsSUFBSSxDQUFDLE1BQU0sQ0FLaEIsQ0FDSCxDQUFDLEdBQ0MsQ0FDTixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsZUFBZSxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaXJjbGUgfSBmcm9tICdsdWNpZGUtcmVhY3QnO1xuaW1wb3J0IHsgdXNlUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY24gfSBmcm9tICcuLi8uLi8uLi9saWIvY24nO1xuaW1wb3J0IHsgVG9vbHRpcCwgVG9vbHRpcENvbnRlbnQsIFRvb2x0aXBUcmlnZ2VyIH0gZnJvbSAnLi4vLi4vdWkvdG9vbHRpcCc7XG5pbXBvcnQge1xuICBTbGVlcEljb24sXG4gIFN0ZXBGb3J3YXJkSWNvbixcbiAgV2ViaG9va0ljb24sXG4gIFdvcmtmbG93SWNvbixcbn0gZnJvbSAnLi4vaWNvbnMnO1xuaW1wb3J0IHsgaXNTcGFuRGltbWVkQnlTZWFyY2gsIHR5cGUgU3BhblNlYXJjaFJlc3VsdCB9IGZyb20gJy4uL3NlYXJjaCc7XG5pbXBvcnQgdHlwZSB7IFNwYW4gfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBmb3JtYXREdXJhdGlvblByZWNpc2UgfSBmcm9tICcuLi91dGlsL3RpbWluZyc7XG5pbXBvcnQgeyBnZXRTcGFuRHVyYXRpb25NcywgaXNTcGFuRXJyb3JlZCB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IE1pZGRsZVRydW5jYXRlIH0gZnJvbSAnLi9taWRkbGUtdHJ1bmNhdGUvbWlkZGxlLXRydW5jYXRlJztcbmltcG9ydCB7IFJPV19IRUlHSFRfUFgsIHVzZVJvd1dpbmRvdyB9IGZyb20gJy4vdXNlLXJvdy13aW5kb3cnO1xuXG5pbnRlcmZhY2UgRXZlbnRTdHlsZSB7XG4gIGljb246IFJlYWN0LkNvbXBvbmVudFR5cGU8eyBjbGFzc05hbWU/OiBzdHJpbmcgfT47XG4gIGNsYXNzTmFtZTogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xufVxuXG5jb25zdCBldmVudFN0eWxlczogUmVjb3JkPHN0cmluZywgRXZlbnRTdHlsZT4gPSB7XG4gIHJ1bjogeyBpY29uOiBXb3JrZmxvd0ljb24sIGNsYXNzTmFtZTogJ3RleHQtYmx1ZS05MDAnLCBsYWJlbDogJ1dvcmtmbG93JyB9LFxuICBzdGVwOiB7IGljb246IFN0ZXBGb3J3YXJkSWNvbiwgY2xhc3NOYW1lOiAndGV4dC1ncmVlbi05MDAnLCBsYWJlbDogJ1N0ZXAnIH0sXG4gIGhvb2s6IHsgaWNvbjogV2ViaG9va0ljb24sIGNsYXNzTmFtZTogJ3RleHQtZ3JheS05MDAnLCBsYWJlbDogJ0hvb2snIH0sXG4gIHNsZWVwOiB7IGljb246IFNsZWVwSWNvbiwgY2xhc3NOYW1lOiAndGV4dC1ncmF5LTkwMCcsIGxhYmVsOiAnU2xlZXAnIH0sXG59O1xuXG5jb25zdCBkZWZhdWx0U3R5bGU6IEV2ZW50U3R5bGUgPSB7XG4gIGljb246IENpcmNsZSxcbiAgY2xhc3NOYW1lOiAndGV4dC1ncmF5LTkwMCcsXG4gIGxhYmVsOiAnRXZlbnQnLFxufTtcblxuY29uc3QgUk9XX0hFSUdIVF9DTEFTUyA9ICdoLTEwJztcblxuZnVuY3Rpb24gZ2V0RXZlbnRTdHlsZShyZXNvdXJjZTogc3RyaW5nLCBpc0Vycm9yZWQ6IGJvb2xlYW4pOiBFdmVudFN0eWxlIHtcbiAgY29uc3Qgc3R5bGUgPSBldmVudFN0eWxlc1tyZXNvdXJjZV0gPz8gZGVmYXVsdFN0eWxlO1xuICByZXR1cm4ge1xuICAgIGljb246IHN0eWxlLmljb24sXG4gICAgY2xhc3NOYW1lOiBjbihpc0Vycm9yZWQgPyAndGV4dC1yZWQtOTAwJyA6IHN0eWxlLmNsYXNzTmFtZSksXG4gICAgbGFiZWw6IHN0eWxlLmxhYmVsLFxuICB9O1xufVxuXG5jb25zdCBFdmVudFJvdyA9ICh7XG4gIHNwYW4sXG4gIGlzU2VsZWN0ZWQsXG4gIGlzRGltbWVkLFxuICBvblNlbGVjdFNwYW4sXG59OiB7XG4gIHNwYW46IFNwYW47XG4gIGlzU2VsZWN0ZWQ6IGJvb2xlYW47XG4gIGlzRGltbWVkPzogYm9vbGVhbjtcbiAgb25TZWxlY3RTcGFuOiAoc3BhbklkOiBzdHJpbmcpID0+IHZvaWQ7XG59KSA9PiB7XG4gIGNvbnN0IGR1cmF0aW9uTXMgPSBnZXRTcGFuRHVyYXRpb25NcyhzcGFuKTtcbiAgY29uc3QgaXNFcnJvcmVkID0gaXNTcGFuRXJyb3JlZChzcGFuKTtcbiAgY29uc3Qge1xuICAgIGljb246IEljb24sXG4gICAgY2xhc3NOYW1lOiB0YWdDbGFzc05hbWUsXG4gICAgbGFiZWw6IGljb25MYWJlbCxcbiAgfSA9IGdldEV2ZW50U3R5bGUoc3Bhbi5yZXNvdXJjZSwgaXNFcnJvcmVkKTtcblxuICByZXR1cm4gKFxuICAgIDxsaVxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ3JlbGF0aXZlIG92ZXJmbG93LWNsaXAgZ3JvdXAgdHJhbnNpdGlvbi1vcGFjaXR5JyxcbiAgICAgICAgUk9XX0hFSUdIVF9DTEFTUyxcbiAgICAgICAgaXNEaW1tZWQgJiYgJ29wYWNpdHktMzUnXG4gICAgICApfVxuICAgICAgcm9sZT1cInRyZWVpdGVtXCJcbiAgICAgIGFyaWEtc2VsZWN0ZWQ9e2lzU2VsZWN0ZWR9XG4gICAgICBhcmlhLWV4cGFuZGVkPXtpc1NlbGVjdGVkfVxuICAgICAgYXJpYS1sZXZlbD17MX1cbiAgICAgIG9uQ2xpY2s9eygpID0+IG9uU2VsZWN0U3BhbihzcGFuLnNwYW5JZCl9XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJoLWZ1bGwgaG92ZXI6YmctZ3JheS0xMDAgZ3JvdXAtYXJpYS1zZWxlY3RlZDpiZy1ncmF5LTEwMCBncm91cC1hcmlhLXNlbGVjdGVkOmhvdmVyOmJnLWdyYXktMjAwXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBoLWZ1bGwgbWluLXctMCBpdGVtcy1jZW50ZXIgcGwtNCBwci0yXCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IG1pbi13LTAgZmxleC0xIGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgPFRvb2x0aXAgZGVsYXlEdXJhdGlvbj17NTAwfT5cbiAgICAgICAgICAgICAgPFRvb2x0aXBUcmlnZ2VyIGFzQ2hpbGQ+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtjbignc2hyaW5rLTAnLCB0YWdDbGFzc05hbWUpfT5cbiAgICAgICAgICAgICAgICAgIDxJY29uIGNsYXNzTmFtZT1cInctNCBoLTRcIiAvPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9Ub29sdGlwVHJpZ2dlcj5cbiAgICAgICAgICAgICAgPFRvb2x0aXBDb250ZW50IHNpZGU9XCJ0b3BcIj57aWNvbkxhYmVsfTwvVG9vbHRpcENvbnRlbnQ+XG4gICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJtaW4tdy0wIHRleHQtbGFiZWwtMTRcIj5cbiAgICAgICAgICAgICAgPE1pZGRsZVRydW5jYXRlIHZhbHVlPXtzcGFuLm5hbWV9IC8+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtbC0yIHNocmluay0wXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWxhYmVsLTE0IHRleHQtZ3JheS05MDAgdGFidWxhci1udW1zXCI+XG4gICAgICAgICAgICAgIHtmb3JtYXREdXJhdGlvblByZWNpc2UoZHVyYXRpb25Ncyl9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9saT5cbiAgKTtcbn07XG5cbmNvbnN0IEV2ZW50TGlzdCA9ICh7XG4gIHNwYW5zLFxuICBhY3RpdmVTcGFuSWQsXG4gIHNlYXJjaFJlc3VsdCxcbiAgb25TZWxlY3RTcGFuLFxufToge1xuICBzcGFuczogU3BhbltdO1xuICBhY3RpdmVTcGFuSWQ6IHN0cmluZyB8IG51bGw7XG4gIHNlYXJjaFJlc3VsdDogU3BhblNlYXJjaFJlc3VsdDtcbiAgb25TZWxlY3RTcGFuOiAoc3BhbklkOiBzdHJpbmcpID0+IHZvaWQ7XG59KSA9PiB7XG4gIGNvbnN0IGxpc3RSZWYgPSB1c2VSZWY8SFRNTFVMaXN0RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IHsgc3RhcnQsIGVuZCB9ID0gdXNlUm93V2luZG93KGxpc3RSZWYsIHNwYW5zLmxlbmd0aCwgUk9XX0hFSUdIVF9QWCk7XG5cbiAgcmV0dXJuIChcbiAgICA8dWxcbiAgICAgIHJlZj17bGlzdFJlZn1cbiAgICAgIGlkPVwiZXZlbnQtbGlzdFwiXG4gICAgICByb2xlPVwidHJlZVwiXG4gICAgICBjbGFzc05hbWU9XCJibG9jayBtaW4taC0wIG92ZXJmbG93LXZpc2libGUgZGl2aWRlLXkgZGl2aWRlLWdyYXktNDAwIGJvcmRlci1iIGJvcmRlci1ncmF5LTQwMFwiXG4gICAgICBzdHlsZT17e1xuICAgICAgICBwYWRkaW5nVG9wOiBzdGFydCAqIFJPV19IRUlHSFRfUFgsXG4gICAgICAgIHBhZGRpbmdCb3R0b206IChzcGFucy5sZW5ndGggLSBlbmQpICogUk9XX0hFSUdIVF9QWCxcbiAgICAgIH19XG4gICAgPlxuICAgICAge3NwYW5zLnNsaWNlKHN0YXJ0LCBlbmQpLm1hcCgoc3BhbikgPT4gKFxuICAgICAgICA8RXZlbnRSb3dcbiAgICAgICAgICBrZXk9e3NwYW4uc3BhbklkfVxuICAgICAgICAgIHNwYW49e3NwYW59XG4gICAgICAgICAgaXNTZWxlY3RlZD17c3Bhbi5zcGFuSWQgPT09IGFjdGl2ZVNwYW5JZH1cbiAgICAgICAgICBpc0RpbW1lZD17aXNTcGFuRGltbWVkQnlTZWFyY2goc3Bhbi5zcGFuSWQsIHNlYXJjaFJlc3VsdCl9XG4gICAgICAgICAgb25TZWxlY3RTcGFuPXtvblNlbGVjdFNwYW59XG4gICAgICAgIC8+XG4gICAgICApKX1cbiAgICA8L3VsPlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgRXZlbnRMaXN0O1xuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copy-selection.d.ts","sourceRoot":"","sources":["../../../../../src/components/trace-viewer/components/middle-truncate/copy-selection.ts"],"names":[],"mappings":"AAEA,UAAU,gCAAgC;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,iDAAiD;IACzD,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,iBAAS,yBAAyB,CAAC,EACjC,UAAU,EACV,YAAY,EACZ,cAAc,EACd,UAAU,EACV,KAAK,GACN,EAAE,gCAAgC,GAAG,MAAM,GAAG,IAAI,CAqClD;AAED,iBAAS,0CAA0C,CAAC,EAClD,UAAU,EACV,aAAa,EACb,UAAU,EACV,KAAK,GACN,EAAE,iDAAiD,GAAG,MAAM,GAAG,IAAI,CAqCnE;AAED,OAAO,EACL,yBAAyB,EACzB,0CAA0C,GAC3C,CAAC;AACF,YAAY,EACV,iDAAiD,EACjD,gCAAgC,GACjC,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { ELLIPSIS, toGraphemes } from './truncate';
|
|
2
|
+
function getMiddleTruncateCopyText({ prefixText, selectionEnd, selectionStart, suffixText, value, }) {
|
|
3
|
+
const visibleText = prefixText + ELLIPSIS + suffixText;
|
|
4
|
+
if (selectionStart < 0 ||
|
|
5
|
+
selectionEnd > visibleText.length ||
|
|
6
|
+
selectionStart >= selectionEnd) {
|
|
7
|
+
return null;
|
|
8
|
+
}
|
|
9
|
+
if (selectionStart === 0 && selectionEnd === visibleText.length) {
|
|
10
|
+
return value;
|
|
11
|
+
}
|
|
12
|
+
const ellipsisStart = prefixText.length;
|
|
13
|
+
const ellipsisEnd = ellipsisStart + ELLIPSIS.length;
|
|
14
|
+
if (selectionStart > ellipsisStart || selectionEnd < ellipsisEnd) {
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
const originalGraphemes = toGraphemes(value);
|
|
18
|
+
const selectedPrefixGraphemeCount = toGraphemes(visibleText.slice(0, selectionStart)).length;
|
|
19
|
+
const selectedSuffixGraphemeCount = toGraphemes(visibleText.slice(ellipsisEnd, selectionEnd)).length;
|
|
20
|
+
const suffixStart = originalGraphemes.length - toGraphemes(suffixText).length;
|
|
21
|
+
return originalGraphemes
|
|
22
|
+
.slice(selectedPrefixGraphemeCount, suffixStart + selectedSuffixGraphemeCount)
|
|
23
|
+
.join('');
|
|
24
|
+
}
|
|
25
|
+
function getMiddleTruncateCopyTextFromSelectionText({ prefixText, selectionText, suffixText, value, }) {
|
|
26
|
+
const visibleText = prefixText + ELLIPSIS + suffixText;
|
|
27
|
+
const trimmedSelectionText = selectionText.trim();
|
|
28
|
+
if (!trimmedSelectionText) {
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
const leading = selectionText.slice(0, selectionText.length - selectionText.trimStart().length);
|
|
32
|
+
const trailing = selectionText.slice(selectionText.trimEnd().length);
|
|
33
|
+
if (trimmedSelectionText === visibleText) {
|
|
34
|
+
return leading + value + trailing;
|
|
35
|
+
}
|
|
36
|
+
if (!trimmedSelectionText.includes(ELLIPSIS)) {
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
const selectionStart = visibleText.indexOf(trimmedSelectionText);
|
|
40
|
+
if (selectionStart === -1) {
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
const selectionEnd = selectionStart + trimmedSelectionText.length;
|
|
44
|
+
const mappedText = getMiddleTruncateCopyText({
|
|
45
|
+
prefixText,
|
|
46
|
+
selectionEnd,
|
|
47
|
+
selectionStart,
|
|
48
|
+
suffixText,
|
|
49
|
+
value,
|
|
50
|
+
});
|
|
51
|
+
return mappedText === null ? null : leading + mappedText + trailing;
|
|
52
|
+
}
|
|
53
|
+
export { getMiddleTruncateCopyText, getMiddleTruncateCopyTextFromSelectionText, };
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29weS1zZWxlY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy90cmFjZS12aWV3ZXIvY29tcG9uZW50cy9taWRkbGUtdHJ1bmNhdGUvY29weS1zZWxlY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFpQm5ELFNBQVMseUJBQXlCLENBQUMsRUFDakMsVUFBVSxFQUNWLFlBQVksRUFDWixjQUFjLEVBQ2QsVUFBVSxFQUNWLEtBQUssR0FDNEI7SUFDakMsTUFBTSxXQUFXLEdBQUcsVUFBVSxHQUFHLFFBQVEsR0FBRyxVQUFVLENBQUM7SUFFdkQsSUFDRSxjQUFjLEdBQUcsQ0FBQztRQUNsQixZQUFZLEdBQUcsV0FBVyxDQUFDLE1BQU07UUFDakMsY0FBYyxJQUFJLFlBQVksRUFDOUIsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELElBQUksY0FBYyxLQUFLLENBQUMsSUFBSSxZQUFZLEtBQUssV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2hFLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELE1BQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7SUFDeEMsTUFBTSxXQUFXLEdBQUcsYUFBYSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7SUFFcEQsSUFBSSxjQUFjLEdBQUcsYUFBYSxJQUFJLFlBQVksR0FBRyxXQUFXLEVBQUUsQ0FBQztRQUNqRSxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxNQUFNLGlCQUFpQixHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3QyxNQUFNLDJCQUEyQixHQUFHLFdBQVcsQ0FDN0MsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsY0FBYyxDQUFDLENBQ3JDLENBQUMsTUFBTSxDQUFDO0lBQ1QsTUFBTSwyQkFBMkIsR0FBRyxXQUFXLENBQzdDLFdBQVcsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxDQUM3QyxDQUFDLE1BQU0sQ0FBQztJQUNULE1BQU0sV0FBVyxHQUFHLGlCQUFpQixDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDO0lBRTlFLE9BQU8saUJBQWlCO1NBQ3JCLEtBQUssQ0FDSiwyQkFBMkIsRUFDM0IsV0FBVyxHQUFHLDJCQUEyQixDQUMxQztTQUNBLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNkLENBQUM7QUFFRCxTQUFTLDBDQUEwQyxDQUFDLEVBQ2xELFVBQVUsRUFDVixhQUFhLEVBQ2IsVUFBVSxFQUNWLEtBQUssR0FDNkM7SUFDbEQsTUFBTSxXQUFXLEdBQUcsVUFBVSxHQUFHLFFBQVEsR0FBRyxVQUFVLENBQUM7SUFDdkQsTUFBTSxvQkFBb0IsR0FBRyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7SUFFbEQsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDMUIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FDakMsQ0FBQyxFQUNELGFBQWEsQ0FBQyxNQUFNLEdBQUcsYUFBYSxDQUFDLFNBQVMsRUFBRSxDQUFDLE1BQU0sQ0FDeEQsQ0FBQztJQUNGLE1BQU0sUUFBUSxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRXJFLElBQUksb0JBQW9CLEtBQUssV0FBVyxFQUFFLENBQUM7UUFDekMsT0FBTyxPQUFPLEdBQUcsS0FBSyxHQUFHLFFBQVEsQ0FBQztJQUNwQyxDQUFDO0lBRUQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQzdDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE1BQU0sY0FBYyxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUNqRSxJQUFJLGNBQWMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzFCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE1BQU0sWUFBWSxHQUFHLGNBQWMsR0FBRyxvQkFBb0IsQ0FBQyxNQUFNLENBQUM7SUFDbEUsTUFBTSxVQUFVLEdBQUcseUJBQXlCLENBQUM7UUFDM0MsVUFBVTtRQUNWLFlBQVk7UUFDWixjQUFjO1FBQ2QsVUFBVTtRQUNWLEtBQUs7S0FDTixDQUFDLENBQUM7SUFFSCxPQUFPLFVBQVUsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLFVBQVUsR0FBRyxRQUFRLENBQUM7QUFDdEUsQ0FBQztBQUVELE9BQU8sRUFDTCx5QkFBeUIsRUFDekIsMENBQTBDLEdBQzNDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFTExJUFNJUywgdG9HcmFwaGVtZXMgfSBmcm9tICcuL3RydW5jYXRlJztcblxuaW50ZXJmYWNlIEdldE1pZGRsZVRydW5jYXRlQ29weVRleHRPcHRpb25zIHtcbiAgcHJlZml4VGV4dDogc3RyaW5nO1xuICBzZWxlY3Rpb25FbmQ6IG51bWJlcjtcbiAgc2VsZWN0aW9uU3RhcnQ6IG51bWJlcjtcbiAgc3VmZml4VGV4dDogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgR2V0TWlkZGxlVHJ1bmNhdGVDb3B5VGV4dEZyb21TZWxlY3Rpb25UZXh0T3B0aW9ucyB7XG4gIHByZWZpeFRleHQ6IHN0cmluZztcbiAgc2VsZWN0aW9uVGV4dDogc3RyaW5nO1xuICBzdWZmaXhUZXh0OiBzdHJpbmc7XG4gIHZhbHVlOiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIGdldE1pZGRsZVRydW5jYXRlQ29weVRleHQoe1xuICBwcmVmaXhUZXh0LFxuICBzZWxlY3Rpb25FbmQsXG4gIHNlbGVjdGlvblN0YXJ0LFxuICBzdWZmaXhUZXh0LFxuICB2YWx1ZSxcbn06IEdldE1pZGRsZVRydW5jYXRlQ29weVRleHRPcHRpb25zKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IHZpc2libGVUZXh0ID0gcHJlZml4VGV4dCArIEVMTElQU0lTICsgc3VmZml4VGV4dDtcblxuICBpZiAoXG4gICAgc2VsZWN0aW9uU3RhcnQgPCAwIHx8XG4gICAgc2VsZWN0aW9uRW5kID4gdmlzaWJsZVRleHQubGVuZ3RoIHx8XG4gICAgc2VsZWN0aW9uU3RhcnQgPj0gc2VsZWN0aW9uRW5kXG4gICkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHNlbGVjdGlvblN0YXJ0ID09PSAwICYmIHNlbGVjdGlvbkVuZCA9PT0gdmlzaWJsZVRleHQubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgY29uc3QgZWxsaXBzaXNTdGFydCA9IHByZWZpeFRleHQubGVuZ3RoO1xuICBjb25zdCBlbGxpcHNpc0VuZCA9IGVsbGlwc2lzU3RhcnQgKyBFTExJUFNJUy5sZW5ndGg7XG5cbiAgaWYgKHNlbGVjdGlvblN0YXJ0ID4gZWxsaXBzaXNTdGFydCB8fCBzZWxlY3Rpb25FbmQgPCBlbGxpcHNpc0VuZCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3Qgb3JpZ2luYWxHcmFwaGVtZXMgPSB0b0dyYXBoZW1lcyh2YWx1ZSk7XG4gIGNvbnN0IHNlbGVjdGVkUHJlZml4R3JhcGhlbWVDb3VudCA9IHRvR3JhcGhlbWVzKFxuICAgIHZpc2libGVUZXh0LnNsaWNlKDAsIHNlbGVjdGlvblN0YXJ0KVxuICApLmxlbmd0aDtcbiAgY29uc3Qgc2VsZWN0ZWRTdWZmaXhHcmFwaGVtZUNvdW50ID0gdG9HcmFwaGVtZXMoXG4gICAgdmlzaWJsZVRleHQuc2xpY2UoZWxsaXBzaXNFbmQsIHNlbGVjdGlvbkVuZClcbiAgKS5sZW5ndGg7XG4gIGNvbnN0IHN1ZmZpeFN0YXJ0ID0gb3JpZ2luYWxHcmFwaGVtZXMubGVuZ3RoIC0gdG9HcmFwaGVtZXMoc3VmZml4VGV4dCkubGVuZ3RoO1xuXG4gIHJldHVybiBvcmlnaW5hbEdyYXBoZW1lc1xuICAgIC5zbGljZShcbiAgICAgIHNlbGVjdGVkUHJlZml4R3JhcGhlbWVDb3VudCxcbiAgICAgIHN1ZmZpeFN0YXJ0ICsgc2VsZWN0ZWRTdWZmaXhHcmFwaGVtZUNvdW50XG4gICAgKVxuICAgIC5qb2luKCcnKTtcbn1cblxuZnVuY3Rpb24gZ2V0TWlkZGxlVHJ1bmNhdGVDb3B5VGV4dEZyb21TZWxlY3Rpb25UZXh0KHtcbiAgcHJlZml4VGV4dCxcbiAgc2VsZWN0aW9uVGV4dCxcbiAgc3VmZml4VGV4dCxcbiAgdmFsdWUsXG59OiBHZXRNaWRkbGVUcnVuY2F0ZUNvcHlUZXh0RnJvbVNlbGVjdGlvblRleHRPcHRpb25zKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IHZpc2libGVUZXh0ID0gcHJlZml4VGV4dCArIEVMTElQU0lTICsgc3VmZml4VGV4dDtcbiAgY29uc3QgdHJpbW1lZFNlbGVjdGlvblRleHQgPSBzZWxlY3Rpb25UZXh0LnRyaW0oKTtcblxuICBpZiAoIXRyaW1tZWRTZWxlY3Rpb25UZXh0KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBsZWFkaW5nID0gc2VsZWN0aW9uVGV4dC5zbGljZShcbiAgICAwLFxuICAgIHNlbGVjdGlvblRleHQubGVuZ3RoIC0gc2VsZWN0aW9uVGV4dC50cmltU3RhcnQoKS5sZW5ndGhcbiAgKTtcbiAgY29uc3QgdHJhaWxpbmcgPSBzZWxlY3Rpb25UZXh0LnNsaWNlKHNlbGVjdGlvblRleHQudHJpbUVuZCgpLmxlbmd0aCk7XG5cbiAgaWYgKHRyaW1tZWRTZWxlY3Rpb25UZXh0ID09PSB2aXNpYmxlVGV4dCkge1xuICAgIHJldHVybiBsZWFkaW5nICsgdmFsdWUgKyB0cmFpbGluZztcbiAgfVxuXG4gIGlmICghdHJpbW1lZFNlbGVjdGlvblRleHQuaW5jbHVkZXMoRUxMSVBTSVMpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBzZWxlY3Rpb25TdGFydCA9IHZpc2libGVUZXh0LmluZGV4T2YodHJpbW1lZFNlbGVjdGlvblRleHQpO1xuICBpZiAoc2VsZWN0aW9uU3RhcnQgPT09IC0xKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBzZWxlY3Rpb25FbmQgPSBzZWxlY3Rpb25TdGFydCArIHRyaW1tZWRTZWxlY3Rpb25UZXh0Lmxlbmd0aDtcbiAgY29uc3QgbWFwcGVkVGV4dCA9IGdldE1pZGRsZVRydW5jYXRlQ29weVRleHQoe1xuICAgIHByZWZpeFRleHQsXG4gICAgc2VsZWN0aW9uRW5kLFxuICAgIHNlbGVjdGlvblN0YXJ0LFxuICAgIHN1ZmZpeFRleHQsXG4gICAgdmFsdWUsXG4gIH0pO1xuXG4gIHJldHVybiBtYXBwZWRUZXh0ID09PSBudWxsID8gbnVsbCA6IGxlYWRpbmcgKyBtYXBwZWRUZXh0ICsgdHJhaWxpbmc7XG59XG5cbmV4cG9ydCB7XG4gIGdldE1pZGRsZVRydW5jYXRlQ29weVRleHQsXG4gIGdldE1pZGRsZVRydW5jYXRlQ29weVRleHRGcm9tU2VsZWN0aW9uVGV4dCxcbn07XG5leHBvcnQgdHlwZSB7XG4gIEdldE1pZGRsZVRydW5jYXRlQ29weVRleHRGcm9tU2VsZWN0aW9uVGV4dE9wdGlvbnMsXG4gIEdldE1pZGRsZVRydW5jYXRlQ29weVRleHRPcHRpb25zLFxufTtcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middle-truncate.d.ts","sourceRoot":"","sources":["../../../../../src/components/trace-viewer/components/middle-truncate/middle-truncate.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAkB,wBAAwB,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAU3E,sDAAsD;AACtD,UAAU,mBACR,SAAQ,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC;IAC1D,oFAAoF;IACpF,KAAK,EAAE,MAAM,CAAC;CACf;AA2BD;;;;;;;;;GASG;AACH,iBAAS,cAAc,CAAC,EACtB,KAAK,EACL,SAAS,EACT,MAAM,EAAE,UAAU,EAClB,GAAG,KAAK,EACT,EAAE,mBAAmB,GAAG,GAAG,CAAC,OAAO,CA8FnC;AAED,OAAO,EAAE,cAAc,EAAE,CAAC;AAC1B,YAAY,EAAE,mBAAmB,EAAE,CAAC"}
|