@workflow/web-shared 5.0.0-beta.37 → 5.0.0-beta.39
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +4 -5
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +4 -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-skeleton.d.ts +2 -0
- package/dist/components/stream-viewer-skeleton.d.ts.map +1 -0
- package/dist/components/stream-viewer-skeleton.js +12 -0
- package/dist/components/stream-viewer.d.ts +1 -1
- package/dist/components/stream-viewer.d.ts.map +1 -1
- package/dist/components/stream-viewer.js +9 -26
- 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 +6 -6
- package/src/components/event-list-view.tsx +12 -9
- package/src/components/index.ts +4 -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-skeleton.tsx +34 -0
- package/src/components/stream-viewer.tsx +34 -106
- 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
|
@@ -1,25 +1,18 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import { jsxs as _jsxs,
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
3
|
import React, { useEffect, useRef } from 'react';
|
|
4
4
|
import { Virtuoso } from 'react-virtuoso';
|
|
5
|
+
import { serializeForClipboard } from './sidebar/copyable-data-block';
|
|
6
|
+
import { StreamViewerSkeleton } from './stream-viewer-skeleton';
|
|
7
|
+
import { CopyButton } from './trace-viewer/components/copy-button';
|
|
5
8
|
import { DataInspector } from './ui/data-inspector';
|
|
6
|
-
import { Skeleton } from './ui/skeleton';
|
|
7
9
|
// ──────────────────────────────────────────────────────────────────────────
|
|
8
10
|
// Chunk row — memoized to prevent remounts during polling
|
|
9
11
|
// ──────────────────────────────────────────────────────────────────────────
|
|
10
|
-
const ChunkRow = React.memo(function ChunkRow({ chunk
|
|
11
|
-
return (
|
|
12
|
-
borderColor: 'var(--ds-gray-300)',
|
|
13
|
-
backgroundColor: 'var(--ds-gray-100)',
|
|
14
|
-
}, children: _jsxs("div", { className: "flex items-start gap-2", children: [_jsxs("span", { className: "select-none pt-px", style: { color: 'var(--ds-gray-500)' }, children: ["[", index, "]"] }), _jsx("div", { className: "min-w-0 flex-1", children: typeof chunk.value === 'string' ? (_jsx("span", { className: "whitespace-pre-wrap break-words", style: { color: 'var(--ds-gray-1000)' }, children: chunk.value })) : (_jsx(DataInspector, { data: chunk.value, expandLevel: 1 })) })] }) }));
|
|
12
|
+
const ChunkRow = React.memo(function ChunkRow({ chunk }) {
|
|
13
|
+
return (_jsxs("div", { className: "flex w-full items-start gap-1 border-b border-gray-alpha-400 px-3 py-2", children: [_jsx("div", { className: "min-w-0 flex-1", children: typeof chunk.value === 'string' ? (_jsx("span", { className: "whitespace-pre-wrap break-words text-label-12 font-mono text-gray-1000", children: chunk.value })) : (_jsx(DataInspector, { data: chunk.value, expandLevel: 1 })) }), _jsx(CopyButton, { copyText: serializeForClipboard(chunk.value), ariaLabel: "Copy chunk", className: "shrink-0 -mr-1 [&>div]:h-4 [&>div]:w-4 [&_svg]:h-4 [&_svg]:w-4" })] }));
|
|
15
14
|
});
|
|
16
15
|
// ──────────────────────────────────────────────────────────────────────────
|
|
17
|
-
// Skeleton loading
|
|
18
|
-
// ──────────────────────────────────────────────────────────────────────────
|
|
19
|
-
function StreamSkeleton() {
|
|
20
|
-
return (_jsxs("div", { className: "flex flex-col gap-3 animate-in fade-in", children: [_jsx(Skeleton, { style: { width: 120, height: 16, borderRadius: 4 } }), [1, 2, 3, 4].map((i) => (_jsx(Skeleton, { style: { height: 56, borderRadius: 6 } }, i)))] }));
|
|
21
|
-
}
|
|
22
|
-
// ──────────────────────────────────────────────────────────────────────────
|
|
23
16
|
// Main component
|
|
24
17
|
// ──────────────────────────────────────────────────────────────────────────
|
|
25
18
|
/**
|
|
@@ -30,7 +23,6 @@ function StreamSkeleton() {
|
|
|
30
23
|
export function StreamViewer({ streamId: _streamId, chunks, isLive, error, isLoading, onScrollEnd, }) {
|
|
31
24
|
const virtuosoRef = useRef(null);
|
|
32
25
|
const prevChunkCountRef = useRef(0);
|
|
33
|
-
// Auto-scroll to bottom when new chunks arrive (live streaming)
|
|
34
26
|
useEffect(() => {
|
|
35
27
|
if (chunks.length > prevChunkCountRef.current && chunks.length > 0) {
|
|
36
28
|
virtuosoRef.current?.scrollToIndex({
|
|
@@ -40,18 +32,9 @@ export function StreamViewer({ streamId: _streamId, chunks, isLive, error, isLoa
|
|
|
40
32
|
}
|
|
41
33
|
prevChunkCountRef.current = chunks.length;
|
|
42
34
|
}, [chunks.length]);
|
|
43
|
-
// Show skeleton when loading and no chunks have arrived yet
|
|
44
35
|
if (isLoading && chunks.length === 0) {
|
|
45
|
-
return
|
|
36
|
+
return _jsx(StreamViewerSkeleton, {});
|
|
46
37
|
}
|
|
47
|
-
return (_jsxs("div", { className: "flex flex-col
|
|
48
|
-
borderColor: 'var(--ds-red-300)',
|
|
49
|
-
backgroundColor: 'var(--ds-red-100)',
|
|
50
|
-
color: 'var(--ds-red-700)',
|
|
51
|
-
}, children: [_jsx("div", { children: "Error reading stream:" }), _jsx("div", { children: error })] })) : chunks.length === 0 ? (_jsx("div", { className: "text-[11px] rounded-md border p-3", style: {
|
|
52
|
-
borderColor: 'var(--ds-gray-300)',
|
|
53
|
-
backgroundColor: 'var(--ds-gray-100)',
|
|
54
|
-
color: 'var(--ds-gray-600)',
|
|
55
|
-
}, children: isLive ? 'Waiting for stream data...' : 'Stream is empty' })) : (_jsx(Virtuoso, { ref: virtuosoRef, totalCount: chunks.length, overscan: 10, endReached: () => onScrollEnd?.(), itemContent: (index) => (_jsx("div", { style: { paddingBottom: 8 }, children: _jsx(ChunkRow, { chunk: chunks[index], index: index }) })), style: { flex: 1, minHeight: 0 } })) })] }));
|
|
38
|
+
return (_jsxs("div", { className: "flex h-full w-full flex-col overflow-hidden bg-background-100", children: [_jsx("div", { className: "flex h-10 min-h-10 items-center gap-1.5 border-b border-gray-alpha-400 px-3", children: isLive && (_jsxs(_Fragment, { children: [_jsx("span", { className: "inline-block h-2 w-2 rounded-full bg-green-600" }), _jsx("span", { className: "text-label-12 text-green-700", children: "Live" })] })) }), _jsx("div", { className: "flex-1 min-h-0", children: error ? (_jsxs("div", { className: "border-b border-red-400 bg-red-100 px-3 py-2 text-label-12 text-red-900", children: [_jsx("div", { children: "Error reading stream:" }), _jsx("div", { children: error })] })) : chunks.length === 0 ? (_jsx("div", { className: "flex h-10 items-center border-b border-gray-alpha-400 bg-background-200 px-3 text-label-12 text-gray-900", children: isLive ? 'Waiting for stream data...' : 'Stream is empty' })) : (_jsx(Virtuoso, { ref: virtuosoRef, totalCount: chunks.length, overscan: 10, endReached: () => onScrollEnd?.(), itemContent: (index) => (_jsx("div", { className: "w-full", children: _jsx(ChunkRow, { chunk: chunks[index] }) })), style: { flex: 1, minHeight: 0 } })) })] }));
|
|
56
39
|
}
|
|
57
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyZWFtLXZpZXdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL3N0cmVhbS12aWV3ZXIudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7QUFFYixPQUFPLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDakQsT0FBTyxFQUFFLFFBQVEsRUFBdUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQXdCekMsNkVBQTZFO0FBQzdFLDBEQUEwRDtBQUMxRCw2RUFBNkU7QUFFN0UsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLFFBQVEsQ0FBQyxFQUM1QyxLQUFLLEVBQ0wsS0FBSyxHQUlOO0lBQ0MsT0FBTyxDQUNMLGNBQ0UsU0FBUyxFQUFDLG1DQUFtQyxFQUM3QyxLQUFLLEVBQUU7WUFDTCxXQUFXLEVBQUUsb0JBQW9CO1lBQ2pDLGVBQWUsRUFBRSxvQkFBb0I7U0FDdEMsWUFFRCxlQUFLLFNBQVMsRUFBQyx3QkFBd0IsYUFDckMsZ0JBQ0UsU0FBUyxFQUFDLG1CQUFtQixFQUM3QixLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsa0JBRXBDLEtBQUssU0FDRixFQUNQLGNBQUssU0FBUyxFQUFDLGdCQUFnQixZQUM1QixPQUFPLEtBQUssQ0FBQyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUNqQyxlQUNFLFNBQVMsRUFBQyxpQ0FBaUMsRUFDM0MsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLHFCQUFxQixFQUFFLFlBRXRDLEtBQUssQ0FBQyxLQUFLLEdBQ1AsQ0FDUixDQUFDLENBQUMsQ0FBQyxDQUNGLEtBQUMsYUFBYSxJQUFDLElBQUksRUFB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fSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBWaXJ0dW9zbywgdHlwZSBWaXJ0dW9zb0hhbmRsZSB9IGZyb20gJ3JlYWN0LXZpcnR1b3NvJztcbmltcG9ydCB7IERhdGFJbnNwZWN0b3IgfSBmcm9tICcuL3VpL2RhdGEtaW5zcGVjdG9yJztcbmltcG9ydCB7IFNrZWxldG9uIH0gZnJvbSAnLi91aS9za2VsZXRvbic7XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gVHlwZXNcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgaW50ZXJmYWNlIFN0cmVhbUNodW5rIHtcbiAgaWQ6IG51bWJlcjtcbiAgdmFsdWU6IHVua25vd247XG59XG5cbnR5cGUgQ2h1bmsgPSBTdHJlYW1DaHVuaztcblxuaW50ZXJmYWNlIFN0cmVhbVZpZXdlclByb3BzIHtcbiAgc3RyZWFtSWQ6IHN0cmluZztcbiAgY2h1bmtzOiBDaHVua1tdO1xuICBpc0xpdmU6IGJvb2xlYW47XG4gIGVycm9yPzogc3RyaW5nIHwgbnVsbDtcbiAgLyoqIFRydWUgd2hpbGUgdGhlIGluaXRpYWwgc3RyZWFtIGNvbm5lY3Rpb24gaXMgYmVpbmcgZXN0YWJsaXNoZWQgKi9cbiAgaXNMb2FkaW5nPzogYm9vbGVhbjtcbiAgLyoqIENhbGxlZCB3aGVuIHRoZSB1c2VyIHNjcm9sbHMgbmVhciB0aGUgYm90dG9tLCBmb3IgdHJpZ2dlcmluZyBwYWdpbmF0aW9uICovXG4gIG9uU2Nyb2xsRW5kPzogKCkgPT4gdm9pZDtcbn1cblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBDaHVuayByb3cg4oCUIG1lbW9pemVkIHRvIHByZXZlbnQgcmVtb3VudHMgZHVyaW5nIHBvbGxpbmdcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5jb25zdCBDaHVua1JvdyA9IFJlYWN0Lm1lbW8oZnVuY3Rpb24gQ2h1bmtSb3coe1xuICBjaHVuayxcbiAgaW5kZXgsXG59OiB7XG4gIGNodW5rOiBDaHVuaztcbiAgaW5kZXg6IG51bWJlcjtcbn0pIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9XCJ0ZXh0LVsxMXB4XSByb3VuZGVkLW1kIGJvcmRlciBwLTNcIlxuICAgICAgc3R5bGU9e3tcbiAgICAgICAgYm9yZGVyQ29sb3I6ICd2YXIoLS1kcy1ncmF5LTMwMCknLFxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd2YXIoLS1kcy1ncmF5LTEwMCknLFxuICAgICAgfX1cbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtc3RhcnQgZ2FwLTJcIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzc05hbWU9XCJzZWxlY3Qtbm9uZSBwdC1weFwiXG4gICAgICAgICAgc3R5bGU9e3sgY29sb3I6ICd2YXIoLS1kcy1ncmF5LTUwMCknIH19XG4gICAgICAgID5cbiAgICAgICAgICBbe2luZGV4fV1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1pbi13LTAgZmxleC0xXCI+XG4gICAgICAgICAge3R5cGVvZiBjaHVuay52YWx1ZSA9PT0gJ3N0cmluZycgPyAoXG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3aGl0ZXNwYWNlLXByZS13cmFwIGJyZWFrLXdvcmRzXCJcbiAgICAgICAgICAgICAgc3R5bGU9e3sgY29sb3I6ICd2YXIoLS1kcy1ncmF5LTEwMDApJyB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7Y2h1bmsudmFsdWV9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxEYXRhSW5zcGVjdG9yIGRhdGE9e2NodW5rLnZhbHVlfSBleHBhbmRMZXZlbD17MX0gLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufSk7XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gU2tlbGV0b24gbG9hZGluZ1xuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmZ1bmN0aW9uIFN0cmVhbVNrZWxldG9uKCkge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBnYXAtMyBhbmltYXRlLWluIGZhZGUtaW5cIj5cbiAgICAgIDxTa2VsZXRvbiBzdHlsZT17eyB3aWR0aDogMTIwLCBoZWlnaHQ6IDE2LCBib3JkZXJSYWRpdXM6IDQgfX0gLz5cbiAgICAgIHtbMSwgMiwgMywgNF0ubWFwKChpKSA9PiAoXG4gICAgICAgIDxTa2VsZXRvbiBrZXk9e2l9IHN0eWxlPXt7IGhlaWdodDogNTYsIGJvcmRlclJhZGl1czogNiB9fSAvPlxuICAgICAgKSl9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gTWFpbiBjb21wb25lbnRcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIFN0cmVhbVZpZXdlciBjb21wb25lbnQgdGhhdCBkaXNwbGF5cyByZWFsLXRpbWUgc3RyZWFtIGRhdGEuXG4gKiBFYWNoIGNodW5rIGlzIHJlbmRlcmVkIHdpdGggRGF0YUluc3BlY3RvciBmb3IgcHJvcGVyIGRpc3BsYXlcbiAqIG9mIGNvbXBsZXggdHlwZXMgKE1hcCwgU2V0LCBEYXRlLCBjdXN0b20gY2xhc3NlcywgZXRjLikuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBTdHJlYW1WaWV3ZXIoe1xuICBzdHJlYW1JZDogX3N0cmVhbUlkLFxuICBjaHVua3MsXG4gIGlzTGl2ZSxcbiAgZXJyb3IsXG4gIGlzTG9hZGluZyxcbiAgb25TY3JvbGxFbmQsXG59OiBTdHJlYW1WaWV3ZXJQcm9wcykge1xuICBjb25zdCB2aXJ0dW9zb1JlZiA9IHVzZVJlZjxWaXJ0dW9zb0hhbmRsZT4obnVsbCk7XG4gIGNvbnN0IHByZXZDaHVua0NvdW50UmVmID0gdXNlUmVmKDApO1xuXG4gIC8vIEF1dG8tc2Nyb2xsIHRvIGJvdHRvbSB3aGVuIG5ldyBjaHVua3MgYXJyaXZlIChsaXZlIHN0cmVhbWluZylcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoY2h1bmtzLmxlbmd0aCA+IHByZXZDaHVua0NvdW50UmVmLmN1cnJlbnQgJiYgY2h1bmtzLmxlbmd0aCA+IDApIHtcbiAgICAgIHZpcnR1b3NvUmVmLmN1cnJlbnQ/LnNjcm9sbFRvSW5kZXgoe1xuICAgICAgICBpbmRleDogY2h1bmtzLmxlbmd0aCAtIDEsXG4gICAgICAgIGFsaWduOiAnZW5kJyxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBwcmV2Q2h1bmtDb3VudFJlZi5jdXJyZW50ID0gY2h1bmtzLmxlbmd0aDtcbiAgfSwgW2NodW5rcy5sZW5ndGhdKTtcblxuICAvLyBTaG93IHNrZWxldG9uIHdoZW4gbG9hZGluZyBhbmQgbm8gY2h1bmtzIGhhdmUgYXJyaXZlZCB5ZXRcbiAgaWYgKGlzTG9hZGluZyAmJiBjaHVua3MubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBoLWZ1bGxcIj5cbiAgICAgICAgPFN0cmVhbVNrZWxldG9uIC8+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgaC1mdWxsXCI+XG4gICAgICB7LyogTGl2ZSBpbmRpY2F0b3IgKi99XG4gICAgICB7aXNMaXZlICYmIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMS41IG1iLTIgcHgtMVwiPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJpbmxpbmUtYmxvY2sgdy0yIGgtMiByb3VuZGVkLWZ1bGxcIlxuICAgICAgICAgICAgc3R5bGU9e3sgYmFja2dyb3VuZENvbG9yOiAndmFyKC0tZHMtZ3JlZW4tNjAwKScgfX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQteHNcIiBzdHlsZT17eyBjb2xvcjogJ3ZhcigtLWRzLWdyZWVuLTcwMCknIH19PlxuICAgICAgICAgICAgTGl2ZVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuXG4gICAgICB7LyogSGVhZGVyICovfVxuICAgICAge2NodW5rcy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBtYi0yIHB4LTFcIj5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1bMTNweF0gZm9udC1tZWRpdW1cIlxuICAgICAgICAgICAgc3R5bGU9e3sgY29sb3I6ICd2YXIoLS1kcy1ncmF5LTkwMCknIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgU3RyZWFtIENodW5rc1xuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC14cyB0YWJ1bGFyLW51bXNcIlxuICAgICAgICAgICAgc3R5bGU9e3sgY29sb3I6ICd2YXIoLS1kcy1ncmF5LTYwMCknIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgKHtjaHVua3MubGVuZ3RofSlcbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cblxuICAgICAgey8qIENvbnRlbnQgKi99XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBtaW4taC0wXCI+XG4gICAgICAgIHtlcnJvciA/IChcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LVsxMXB4XSByb3VuZGVkLW1kIGJvcmRlciBwLTNcIlxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6ICd2YXIoLS1kcy1yZWQtMzAwKScsXG4gICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3ZhcigtLWRzLXJlZC0xMDApJyxcbiAgICAgICAgICAgICAgY29sb3I6ICd2YXIoLS1kcy1yZWQtNzAwKScsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXY+RXJyb3IgcmVhZGluZyBzdHJlYW06PC9kaXY+XG4gICAgICAgICAgICA8ZGl2PntlcnJvcn08L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKSA6IGNodW5rcy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1bMTFweF0gcm91bmRlZC1tZCBib3JkZXIgcC0zXCJcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIGJvcmRlckNvbG9yOiAndmFyKC0tZHMtZ3JheS0zMDApJyxcbiAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAndmFyKC0tZHMtZ3JheS0xMDApJyxcbiAgICAgICAgICAgICAgY29sb3I6ICd2YXIoLS1kcy1ncmF5LTYwMCknLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7aXNMaXZlID8gJ1dhaXRpbmcgZm9yIHN0cmVhbSBkYXRhLi4uJyA6ICdTdHJlYW0gaXMgZW1wdHknfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxWaXJ0dW9zb1xuICAgICAgICAgICAgcmVmPXt2aXJ0dW9zb1JlZn1cbiAgICAgICAgICAgIHRvdGFsQ291bnQ9e2NodW5rcy5sZW5ndGh9XG4gICAgICAgICAgICBvdmVyc2Nhbj17MTB9XG4gICAgICAgICAgICBlbmRSZWFjaGVkPXsoKSA9PiBvblNjcm9sbEVuZD8uKCl9XG4gICAgICAgICAgICBpdGVtQ29udGVudD17KGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgcGFkZGluZ0JvdHRvbTogOCB9fT5cbiAgICAgICAgICAgICAgICA8Q2h1bmtSb3cgY2h1bms9e2NodW5rc1tpbmRleF19IGluZGV4PXtpbmRleH0gLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgc3R5bGU9e3sgZmxleDogMSwgbWluSGVpZ2h0OiAwIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufVxuIl19
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyZWFtLXZpZXdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL3N0cmVhbS12aWV3ZXIudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7QUFFYixPQUFPLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDakQsT0FBTyxFQUFFLFFBQVEsRUFBdUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN0RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBd0JwRCw2RUFBNkU7QUFDN0UsMERBQTBEO0FBQzFELDZFQUE2RTtBQUU3RSxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsUUFBUSxDQUFDLEVBQUUsS0FBSyxFQUFvQjtJQUN2RSxPQUFPLENBQ0wsZUFBSyxTQUFTLEVBQUMsd0VBQXdFLGFBQ3JGLGNBQUssU0FBUyxFQUFDLGdCQUFnQixZQUM1QixPQUFPLEtBQUssQ0FBQyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUNqQyxlQUFNLFNBQVMsRUFBQyx3RUFBd0UsWUFDckYsS0FBSyxDQUFDLEtBQUssR0FDUCxDQUNSLENBQUMsQ0FBQyxDQUFDLENBQ0YsS0FBQyxhQUFhLElBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBSSxDQUNyRCxHQUNHLEVBQ04sS0FBQyxVQUFVLElBQ1QsUUFBUSxFQUFFLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFDNUMsU0FBUyxFQUFDLFlBQVksRUFDdEIsU0FBUyxFQUFDLGdFQUFnRSxHQUMxRSxJQUNFLENBQ1AsQ0FBQztBQUNKLENBQUMsQ0FBQyxDQUFDO0FBRUgsNkVBQTZFO0FBQzdFLGlCQUFpQjtBQUNqQiw2RUFBNkU7QUFFN0U7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUMsRUFDM0IsUUFBUSxFQUFFLFNBQVMsRUFDbkIsTUFBTSxFQUNOLE1BQU0sRUFDTixLQUFLLEVBQ0wsU0FBUyxFQUNULFdBQVcsR0FDTztJQUNsQixNQUFNLFdBQVcsR0FBRyxNQUFNLENBQWlCLElBQUksQ0FBQyxDQUFDO0lBQ2pELE1BQU0saUJBQWlCLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXBDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDYixJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsaUJBQWlCLENBQUMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDbkUsV0FBVyxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUM7Z0JBQ2pDLEtBQUssRUFBRSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUM7Z0JBQ3hCLEtBQUssRUFBRSxLQUFLO2FBQ2IsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELGlCQUFpQixDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQzVDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBRXBCLElBQUksU0FBUyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDckMsT0FBTyxLQUFDLG9CQUFvQixLQUFHLENBQUM7SUFDbEMsQ0FBQztJQUVELE9BQU8sQ0FDTCxlQUFLLFNBQVMsRUFBQywrREFBK0QsYUFFNUUsY0FBSyxTQUFTLEVBQUMsNkVBQTZFLFlBQ3pGLE1BQU0sSUFBSSxDQUNULDhCQUNFLGVBQU0sU0FBUyxFQUFDLGdEQUFnRCxHQUFHLEVBQ25FLGVBQU0sU0FBUyxFQUFDLDhCQUE4QixxQkFBWSxJQUN6RCxDQUNKLEdBQ0csRUFHTixjQUFLLFNBQVMsRUFBQyxnQkFBZ0IsWUFDNUIsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUNQLGVBQUssU0FBUyxFQUFDLHlFQUF5RSxhQUN0RixrREFBZ0MsRUFDaEMsd0JBQU0sS0FBSyxHQUFPLElBQ2QsQ0FDUCxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDeEIsY0FBSyxTQUFTLEVBQUMsMEdBQTBHLFlBQ3RILE1BQU0sQ0FBQyxDQUFDLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixHQUN0RCxDQUNQLENBQUMsQ0FBQyxDQUFDLENBQ0YsS0FBQyxRQUFRLElBQ1AsR0FBRyxFQUFFLFdBQVcsRUFDaEIsVUFBVSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQ3pCLFFBQVEsRUFBRSxFQUFFLEVBQ1osVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFLEVBQ2pDLFdBQVcsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FDdEIsY0FBSyxTQUFTLEVBQUMsUUFBUSxZQUNyQixLQUFDLFFBQVEsSUFBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFJLEdBQzlCLENBQ1AsRUFDRCxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsR0FDaEMsQ0FDSCxHQUNHLElBQ0YsQ0FDUCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgVmlydHVvc28sIHR5cGUgVmlydHVvc29IYW5kbGUgfSBmcm9tICdyZWFjdC12aXJ0dW9zbyc7XG5pbXBvcnQgeyBzZXJpYWxpemVGb3JDbGlwYm9hcmQgfSBmcm9tICcuL3NpZGViYXIvY29weWFibGUtZGF0YS1ibG9jayc7XG5pbXBvcnQgeyBTdHJlYW1WaWV3ZXJTa2VsZXRvbiB9IGZyb20gJy4vc3RyZWFtLXZpZXdlci1za2VsZXRvbic7XG5pbXBvcnQgeyBDb3B5QnV0dG9uIH0gZnJvbSAnLi90cmFjZS12aWV3ZXIvY29tcG9uZW50cy9jb3B5LWJ1dHRvbic7XG5pbXBvcnQgeyBEYXRhSW5zcGVjdG9yIH0gZnJvbSAnLi91aS9kYXRhLWluc3BlY3Rvcic7XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gVHlwZXNcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgaW50ZXJmYWNlIFN0cmVhbUNodW5rIHtcbiAgaWQ6IG51bWJlcjtcbiAgdmFsdWU6IHVua25vd247XG59XG5cbnR5cGUgQ2h1bmsgPSBTdHJlYW1DaHVuaztcblxuaW50ZXJmYWNlIFN0cmVhbVZpZXdlclByb3BzIHtcbiAgc3RyZWFtSWQ6IHN0cmluZztcbiAgY2h1bmtzOiBDaHVua1tdO1xuICBpc0xpdmU6IGJvb2xlYW47XG4gIGVycm9yPzogc3RyaW5nIHwgbnVsbDtcbiAgLyoqIFRydWUgd2hpbGUgdGhlIGluaXRpYWwgc3RyZWFtIGNvbm5lY3Rpb24gaXMgYmVpbmcgZXN0YWJsaXNoZWQgKi9cbiAgaXNMb2FkaW5nPzogYm9vbGVhbjtcbiAgLyoqIENhbGxlZCB3aGVuIHRoZSB1c2VyIHNjcm9sbHMgbmVhciB0aGUgcmVuZGVyZWQgZW5kLiAqL1xuICBvblNjcm9sbEVuZD86ICgpID0+IHZvaWQ7XG59XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gQ2h1bmsgcm93IOKAlCBtZW1vaXplZCB0byBwcmV2ZW50IHJlbW91bnRzIGR1cmluZyBwb2xsaW5nXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuY29uc3QgQ2h1bmtSb3cgPSBSZWFjdC5tZW1vKGZ1bmN0aW9uIENodW5rUm93KHsgY2h1bmsgfTogeyBjaHVuazogQ2h1bmsgfSkge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGwgaXRlbXMtc3RhcnQgZ2FwLTEgYm9yZGVyLWIgYm9yZGVyLWdyYXktYWxwaGEtNDAwIHB4LTMgcHktMlwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJtaW4tdy0wIGZsZXgtMVwiPlxuICAgICAgICB7dHlwZW9mIGNodW5rLnZhbHVlID09PSAnc3RyaW5nJyA/IChcbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ3aGl0ZXNwYWNlLXByZS13cmFwIGJyZWFrLXdvcmRzIHRleHQtbGFiZWwtMTIgZm9udC1tb25vIHRleHQtZ3JheS0xMDAwXCI+XG4gICAgICAgICAgICB7Y2h1bmsudmFsdWV9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxEYXRhSW5zcGVjdG9yIGRhdGE9e2NodW5rLnZhbHVlfSBleHBhbmRMZXZlbD17MX0gLz5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgICAgPENvcHlCdXR0b25cbiAgICAgICAgY29weVRleHQ9e3NlcmlhbGl6ZUZvckNsaXBib2FyZChjaHVuay52YWx1ZSl9XG4gICAgICAgIGFyaWFMYWJlbD1cIkNvcHkgY2h1bmtcIlxuICAgICAgICBjbGFzc05hbWU9XCJzaHJpbmstMCAtbXItMSBbJj5kaXZdOmgtNCBbJj5kaXZdOnctNCBbJl9zdmddOmgtNCBbJl9zdmddOnctNFwiXG4gICAgICAvPlxuICAgIDwvZGl2PlxuICApO1xufSk7XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gTWFpbiBjb21wb25lbnRcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIFN0cmVhbVZpZXdlciBjb21wb25lbnQgdGhhdCBkaXNwbGF5cyByZWFsLXRpbWUgc3RyZWFtIGRhdGEuXG4gKiBFYWNoIGNodW5rIGlzIHJlbmRlcmVkIHdpdGggRGF0YUluc3BlY3RvciBmb3IgcHJvcGVyIGRpc3BsYXlcbiAqIG9mIGNvbXBsZXggdHlwZXMgKE1hcCwgU2V0LCBEYXRlLCBjdXN0b20gY2xhc3NlcywgZXRjLikuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBTdHJlYW1WaWV3ZXIoe1xuICBzdHJlYW1JZDogX3N0cmVhbUlkLFxuICBjaHVua3MsXG4gIGlzTGl2ZSxcbiAgZXJyb3IsXG4gIGlzTG9hZGluZyxcbiAgb25TY3JvbGxFbmQsXG59OiBTdHJlYW1WaWV3ZXJQcm9wcykge1xuICBjb25zdCB2aXJ0dW9zb1JlZiA9IHVzZVJlZjxWaXJ0dW9zb0hhbmRsZT4obnVsbCk7XG4gIGNvbnN0IHByZXZDaHVua0NvdW50UmVmID0gdXNlUmVmKDApO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGNodW5rcy5sZW5ndGggPiBwcmV2Q2h1bmtDb3VudFJlZi5jdXJyZW50ICYmIGNodW5rcy5sZW5ndGggPiAwKSB7XG4gICAgICB2aXJ0dW9zb1JlZi5jdXJyZW50Py5zY3JvbGxUb0luZGV4KHtcbiAgICAgICAgaW5kZXg6IGNodW5rcy5sZW5ndGggLSAxLFxuICAgICAgICBhbGlnbjogJ2VuZCcsXG4gICAgICB9KTtcbiAgICB9XG4gICAgcHJldkNodW5rQ291bnRSZWYuY3VycmVudCA9IGNodW5rcy5sZW5ndGg7XG4gIH0sIFtjaHVua3MubGVuZ3RoXSk7XG5cbiAgaWYgKGlzTG9hZGluZyAmJiBjaHVua3MubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIDxTdHJlYW1WaWV3ZXJTa2VsZXRvbiAvPjtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGgtZnVsbCB3LWZ1bGwgZmxleC1jb2wgb3ZlcmZsb3ctaGlkZGVuIGJnLWJhY2tncm91bmQtMTAwXCI+XG4gICAgICB7LyogU3RhdHVzIGhlYWRlciAqL31cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBoLTEwIG1pbi1oLTEwIGl0ZW1zLWNlbnRlciBnYXAtMS41IGJvcmRlci1iIGJvcmRlci1ncmF5LWFscGhhLTQwMCBweC0zXCI+XG4gICAgICAgIHtpc0xpdmUgJiYgKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJpbmxpbmUtYmxvY2sgaC0yIHctMiByb3VuZGVkLWZ1bGwgYmctZ3JlZW4tNjAwXCIgLz5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtbGFiZWwtMTIgdGV4dC1ncmVlbi03MDBcIj5MaXZlPC9zcGFuPlxuICAgICAgICAgIDwvPlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIHsvKiBDb250ZW50ICovfVxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgbWluLWgtMFwiPlxuICAgICAgICB7ZXJyb3IgPyAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJib3JkZXItYiBib3JkZXItcmVkLTQwMCBiZy1yZWQtMTAwIHB4LTMgcHktMiB0ZXh0LWxhYmVsLTEyIHRleHQtcmVkLTkwMFwiPlxuICAgICAgICAgICAgPGRpdj5FcnJvciByZWFkaW5nIHN0cmVhbTo8L2Rpdj5cbiAgICAgICAgICAgIDxkaXY+e2Vycm9yfTwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApIDogY2h1bmtzLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaC0xMCBpdGVtcy1jZW50ZXIgYm9yZGVyLWIgYm9yZGVyLWdyYXktYWxwaGEtNDAwIGJnLWJhY2tncm91bmQtMjAwIHB4LTMgdGV4dC1sYWJlbC0xMiB0ZXh0LWdyYXktOTAwXCI+XG4gICAgICAgICAgICB7aXNMaXZlID8gJ1dhaXRpbmcgZm9yIHN0cmVhbSBkYXRhLi4uJyA6ICdTdHJlYW0gaXMgZW1wdHknfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxWaXJ0dW9zb1xuICAgICAgICAgICAgcmVmPXt2aXJ0dW9zb1JlZn1cbiAgICAgICAgICAgIHRvdGFsQ291bnQ9e2NodW5rcy5sZW5ndGh9XG4gICAgICAgICAgICBvdmVyc2Nhbj17MTB9XG4gICAgICAgICAgICBlbmRSZWFjaGVkPXsoKSA9PiBvblNjcm9sbEVuZD8uKCl9XG4gICAgICAgICAgICBpdGVtQ29udGVudD17KGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgPENodW5rUm93IGNodW5rPXtjaHVua3NbaW5kZXhdfSAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICBzdHlsZT17eyBmbGV4OiAxLCBtaW5IZWlnaHQ6IDAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG59XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copy-button.d.ts","sourceRoot":"","sources":["../../../../src/components/trace-viewer/components/copy-button.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,GAAG,EAA+B,MAAM,OAAO,CAAC;AAG9D,UAAU,eAAe;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,UAAU,CAAC,EACzB,QAAQ,EACR,SAAS,EACT,SAAS,GACV,EAAE,eAAe,GAAG,GAAG,CAAC,OAAO,CAmD/B"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Check, Copy } from 'lucide-react';
|
|
4
|
+
import { useEffect, useRef, useState } from 'react';
|
|
5
|
+
import { cn } from '../../../lib/cn';
|
|
6
|
+
export function CopyButton({ copyText, ariaLabel, className, }) {
|
|
7
|
+
const [copied, setCopied] = useState(false);
|
|
8
|
+
const timeoutRef = useRef(null);
|
|
9
|
+
useEffect(() => {
|
|
10
|
+
return () => {
|
|
11
|
+
if (timeoutRef.current) {
|
|
12
|
+
clearTimeout(timeoutRef.current);
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
}, []);
|
|
16
|
+
return (_jsx("button", { type: "button", "aria-label": ariaLabel, className: cn('cursor-pointer text-gray-800 hover:text-gray-1000 bg-transparent border-0 p-1 m-0', className), onClick: (e) => {
|
|
17
|
+
e.stopPropagation();
|
|
18
|
+
if (timeoutRef.current) {
|
|
19
|
+
clearTimeout(timeoutRef.current);
|
|
20
|
+
}
|
|
21
|
+
void navigator.clipboard.writeText(copyText).then(() => {
|
|
22
|
+
setCopied(true);
|
|
23
|
+
timeoutRef.current = setTimeout(() => setCopied(false), 1000);
|
|
24
|
+
});
|
|
25
|
+
}, children: _jsxs("div", { className: "relative w-3 h-3", children: [_jsx("div", { className: cn('absolute inset-0 flex items-center justify-center transition-all duration-150 ease-out', copied ? 'scale-100 opacity-100' : 'scale-0 opacity-0'), children: _jsx(Check, { className: "w-3 h-3" }) }), _jsx("div", { className: cn('absolute inset-0 flex items-center justify-center transition-all duration-150 ease-out', copied ? 'scale-0 opacity-0' : 'scale-100 opacity-100'), children: _jsx(Copy, { className: "w-3 h-3" }) })] }) }));
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29weS1idXR0b24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy90cmFjZS12aWV3ZXIvY29tcG9uZW50cy9jb3B5LWJ1dHRvbi50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOztBQUViLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzNDLE9BQU8sRUFBWSxTQUFTLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUM5RCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFRckMsTUFBTSxVQUFVLFVBQVUsQ0FBQyxFQUN6QixRQUFRLEVBQ1IsU0FBUyxFQUNULFNBQVMsR0FDTztJQUNoQixNQUFNLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQXVDLElBQUksQ0FBQyxDQUFDO0lBRXRFLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDYixPQUFPLEdBQUcsRUFBRTtZQUNWLElBQUksVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUN2QixZQUFZLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ25DLENBQUM7UUFDSCxDQUFDLENBQUM7SUFDSixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFUCxPQUFPLENBQ0wsaUJBQ0UsSUFBSSxFQUFDLFFBQVEsZ0JBQ0QsU0FBUyxFQUNyQixTQUFTLEVBQUUsRUFBRSxDQUNYLG1GQUFtRixFQUNuRixTQUFTLENBQ1YsRUFDRCxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNiLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNwQixJQUFJLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDdkIsWUFBWSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNuQyxDQUFDO1lBQ0QsS0FBSyxTQUFTLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUNyRCxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2hCLFVBQVUsQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNoRSxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsWUFFRCxlQUFLLFNBQVMsRUFBQyxrQkFBa0IsYUFDL0IsY0FDRSxTQUFTLEVBQUUsRUFBRSxDQUNYLHdGQUF3RixFQUN4RixNQUFNLENBQUMsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FDdkQsWUFFRCxLQUFDLEtBQUssSUFBQyxTQUFTLEVBQUMsU0FBUyxHQUFHLEdBQ3pCLEVBQ04sY0FDRSxTQUFTLEVBQUUsRUFBRSxDQUNYLHdGQUF3RixFQUN4RixNQUFNLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyx1QkFBdUIsQ0FDdkQsWUFFRCxLQUFDLElBQUksSUFBQyxTQUFTLEVBQUMsU0FBUyxHQUFHLEdBQ3hCLElBQ0YsR0FDQyxDQUNWLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgeyBDaGVjaywgQ29weSB9IGZyb20gJ2x1Y2lkZS1yZWFjdCc7XG5pbXBvcnQgeyB0eXBlIEpTWCwgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY24gfSBmcm9tICcuLi8uLi8uLi9saWIvY24nO1xuXG5pbnRlcmZhY2UgQ29weUJ1dHRvblByb3BzIHtcbiAgY29weVRleHQ6IHN0cmluZztcbiAgYXJpYUxhYmVsOiBzdHJpbmc7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENvcHlCdXR0b24oe1xuICBjb3B5VGV4dCxcbiAgYXJpYUxhYmVsLFxuICBjbGFzc05hbWUsXG59OiBDb3B5QnV0dG9uUHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IFtjb3BpZWQsIHNldENvcGllZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IHRpbWVvdXRSZWYgPSB1c2VSZWY8UmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCBudWxsPihudWxsKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAodGltZW91dFJlZi5jdXJyZW50KSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0UmVmLmN1cnJlbnQpO1xuICAgICAgfVxuICAgIH07XG4gIH0sIFtdKTtcblxuICByZXR1cm4gKFxuICAgIDxidXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgYXJpYS1sYWJlbD17YXJpYUxhYmVsfVxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2N1cnNvci1wb2ludGVyIHRleHQtZ3JheS04MDAgaG92ZXI6dGV4dC1ncmF5LTEwMDAgYmctdHJhbnNwYXJlbnQgYm9yZGVyLTAgcC0xIG0tMCcsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGlmICh0aW1lb3V0UmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dFJlZi5jdXJyZW50KTtcbiAgICAgICAgfVxuICAgICAgICB2b2lkIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGNvcHlUZXh0KS50aGVuKCgpID0+IHtcbiAgICAgICAgICBzZXRDb3BpZWQodHJ1ZSk7XG4gICAgICAgICAgdGltZW91dFJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiBzZXRDb3BpZWQoZmFsc2UpLCAxMDAwKTtcbiAgICAgICAgfSk7XG4gICAgICB9fVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmUgdy0zIGgtM1wiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICdhYnNvbHV0ZSBpbnNldC0wIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTE1MCBlYXNlLW91dCcsXG4gICAgICAgICAgICBjb3BpZWQgPyAnc2NhbGUtMTAwIG9wYWNpdHktMTAwJyA6ICdzY2FsZS0wIG9wYWNpdHktMCdcbiAgICAgICAgICApfVxuICAgICAgICA+XG4gICAgICAgICAgPENoZWNrIGNsYXNzTmFtZT1cInctMyBoLTNcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAnYWJzb2x1dGUgaW5zZXQtMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0xNTAgZWFzZS1vdXQnLFxuICAgICAgICAgICAgY29waWVkID8gJ3NjYWxlLTAgb3BhY2l0eS0wJyA6ICdzY2FsZS0xMDAgb3BhY2l0eS0xMDAnXG4gICAgICAgICAgKX1cbiAgICAgICAgPlxuICAgICAgICAgIDxDb3B5IGNsYXNzTmFtZT1cInctMyBoLTNcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvYnV0dG9uPlxuICApO1xufVxuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detail-panel-width.d.ts","sourceRoot":"","sources":["../../../../src/components/trace-viewer/components/detail-panel-width.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,iFAAiF;AACjF,eAAO,MAAM,eAAe,MAAM,CAAC;AAEnC;;;GAGG;AACH,eAAO,MAAM,oBAAoB,OAAO,CAAC;AAEzC,+DAA+D;AAC/D,eAAO,MAAM,mBAAmB,MAAM,CAAC;AAEvC;;;;;GAKG;AACH,eAAO,MAAM,cAAc,MAAM,CAAC;AAElC,eAAO,MAAM,uBAAuB,sCAAsC,CAAC;AAM3E,wBAAgB,oBAAoB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAMnE;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,CAE7E;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAY7C;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAUzD"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Width model for the span detail panel: the stored value is the user's
|
|
3
|
+
* preferred width (absolute px, persisted to localStorage on explicit
|
|
4
|
+
* interaction only), while the container-relative maximum is applied at
|
|
5
|
+
* render time — so a width preferred on a wide screen survives a narrower
|
|
6
|
+
* session and restores when the viewer grows again.
|
|
7
|
+
*/
|
|
8
|
+
/** Floor for the detail panel — matches the previous `clamp(280px, …)` floor. */
|
|
9
|
+
export const PANEL_MIN_WIDTH = 280;
|
|
10
|
+
/**
|
|
11
|
+
* Absolute ceiling enforced at the storage layer so a corrupt or stale stored
|
|
12
|
+
* value can never wedge the layout open.
|
|
13
|
+
*/
|
|
14
|
+
export const PANEL_HARD_MAX_WIDTH = 1300;
|
|
15
|
+
/** Default width — matches the previous fixed 360px column. */
|
|
16
|
+
export const PANEL_DEFAULT_WIDTH = 360;
|
|
17
|
+
/**
|
|
18
|
+
* Width the main (event list + timeline) area keeps while the panel is
|
|
19
|
+
* resized or the container shrinks. Below `PANEL_MIN_WIDTH + MAIN_MIN_WIDTH`
|
|
20
|
+
* of container the panel gives way first, compressing below its own floor —
|
|
21
|
+
* the list and timeline stay usable at the panel's expense.
|
|
22
|
+
*/
|
|
23
|
+
export const MAIN_MIN_WIDTH = 400;
|
|
24
|
+
export const PANEL_WIDTH_STORAGE_KEY = 'workflow-trace-detail-panel-width';
|
|
25
|
+
function clamp(value, min, max) {
|
|
26
|
+
return Math.min(Math.max(value, min), max);
|
|
27
|
+
}
|
|
28
|
+
export function computeMaxPanelWidth(availableWidth) {
|
|
29
|
+
if (availableWidth <= 0)
|
|
30
|
+
return PANEL_HARD_MAX_WIDTH;
|
|
31
|
+
return Math.min(Math.max(availableWidth - MAIN_MIN_WIDTH, 0), PANEL_HARD_MAX_WIDTH);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Note: when the container is too small to honor both floors
|
|
35
|
+
* (`availableWidth < PANEL_MIN_WIDTH + MAIN_MIN_WIDTH`), the max wins and the
|
|
36
|
+
* panel compresses below `PANEL_MIN_WIDTH`.
|
|
37
|
+
*/
|
|
38
|
+
export function clampPanelWidth(width, availableWidth) {
|
|
39
|
+
return clamp(width, PANEL_MIN_WIDTH, computeMaxPanelWidth(availableWidth));
|
|
40
|
+
}
|
|
41
|
+
export function readStoredPanelWidth() {
|
|
42
|
+
if (typeof window === 'undefined')
|
|
43
|
+
return PANEL_DEFAULT_WIDTH;
|
|
44
|
+
try {
|
|
45
|
+
const raw = window.localStorage.getItem(PANEL_WIDTH_STORAGE_KEY);
|
|
46
|
+
const value = raw ? Number(raw) : Number.NaN;
|
|
47
|
+
if (!Number.isFinite(value))
|
|
48
|
+
return PANEL_DEFAULT_WIDTH;
|
|
49
|
+
// Only enforce absolute bounds at the storage layer; the container-relative
|
|
50
|
+
// max is applied at render time (see module docs).
|
|
51
|
+
return clamp(value, PANEL_MIN_WIDTH, PANEL_HARD_MAX_WIDTH);
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
return PANEL_DEFAULT_WIDTH;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
export function writeStoredPanelWidth(width) {
|
|
58
|
+
if (typeof window === 'undefined')
|
|
59
|
+
return;
|
|
60
|
+
try {
|
|
61
|
+
window.localStorage.setItem(PANEL_WIDTH_STORAGE_KEY, String(Math.round(width)));
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
// Best-effort (private mode, quota).
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,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"}
|