@workflow/web-shared 5.0.0-beta.1 → 5.0.0-beta.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/components/error-boundary.js +1 -1
- package/dist/components/event-list-view.d.ts +18 -1
- package/dist/components/event-list-view.d.ts.map +1 -1
- package/dist/components/event-list-view.js +219 -125
- package/dist/components/hook-actions.js +1 -1
- package/dist/components/index.d.ts +5 -1
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +6 -2
- package/dist/components/new-trace-viewer/components/copy-button.d.ts +9 -0
- package/dist/components/new-trace-viewer/components/copy-button.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/components/copy-button.js +27 -0
- package/dist/components/new-trace-viewer/components/event-list.d.ts +10 -0
- package/dist/components/new-trace-viewer/components/event-list.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/components/event-list.js +44 -0
- package/dist/components/new-trace-viewer/components/middle-truncate/copy-selection.d.ts +18 -0
- package/dist/components/new-trace-viewer/components/middle-truncate/copy-selection.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/components/middle-truncate/copy-selection.js +54 -0
- package/dist/components/new-trace-viewer/components/middle-truncate/middle-truncate.d.ts +20 -0
- package/dist/components/new-trace-viewer/components/middle-truncate/middle-truncate.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/components/middle-truncate/middle-truncate.js +81 -0
- package/dist/components/new-trace-viewer/components/middle-truncate/truncate.d.ts +25 -0
- package/dist/components/new-trace-viewer/components/middle-truncate/truncate.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/components/middle-truncate/truncate.js +101 -0
- package/dist/components/new-trace-viewer/components/middle-truncate/use-middle-truncate.d.ts +20 -0
- package/dist/components/new-trace-viewer/components/middle-truncate/use-middle-truncate.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/components/middle-truncate/use-middle-truncate.js +114 -0
- package/dist/components/new-trace-viewer/components/split-pane.d.ts +15 -0
- package/dist/components/new-trace-viewer/components/split-pane.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/components/split-pane.js +105 -0
- package/dist/components/new-trace-viewer/components/timeline.d.ts +34 -0
- package/dist/components/new-trace-viewer/components/timeline.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/components/timeline.js +221 -0
- package/dist/components/new-trace-viewer/components/trace-viewer-skeleton.d.ts +2 -0
- package/dist/components/new-trace-viewer/components/trace-viewer-skeleton.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/components/trace-viewer-skeleton.js +19 -0
- package/dist/components/new-trace-viewer/components/use-row-window.d.ts +20 -0
- package/dist/components/new-trace-viewer/components/use-row-window.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/components/use-row-window.js +69 -0
- package/dist/components/new-trace-viewer/context.d.ts +15 -0
- package/dist/components/new-trace-viewer/context.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/context.js +47 -0
- package/dist/components/new-trace-viewer/detail-panel.d.ts +10 -0
- package/dist/components/new-trace-viewer/detail-panel.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/detail-panel.js +13 -0
- package/dist/components/new-trace-viewer/icons.d.ts +6 -0
- package/dist/components/new-trace-viewer/icons.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/icons.js +15 -0
- package/dist/components/new-trace-viewer/search.d.ts +19 -0
- package/dist/components/new-trace-viewer/search.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/search.js +134 -0
- package/dist/components/new-trace-viewer/trace-viewer.d.ts +11 -0
- package/dist/components/new-trace-viewer/trace-viewer.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/trace-viewer.js +400 -0
- package/dist/components/new-trace-viewer/types.d.ts +1 -0
- package/dist/components/new-trace-viewer/types.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/types.js +2 -0
- package/dist/components/new-trace-viewer/util/constants.d.ts +1 -0
- package/dist/components/new-trace-viewer/util/constants.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/util/constants.js +2 -0
- package/dist/components/new-trace-viewer/utils.d.ts +46 -0
- package/dist/components/new-trace-viewer/utils.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/utils.js +330 -0
- package/dist/components/run-trace-view.d.ts +2 -1
- package/dist/components/run-trace-view.d.ts.map +1 -1
- package/dist/components/run-trace-view.js +3 -3
- package/dist/components/sidebar/attribute-panel.d.ts +7 -1
- package/dist/components/sidebar/attribute-panel.d.ts.map +1 -1
- package/dist/components/sidebar/attribute-panel.js +131 -70
- package/dist/components/sidebar/conversation-view.js +1 -1
- package/dist/components/sidebar/copyable-data-block.d.ts +1 -0
- package/dist/components/sidebar/copyable-data-block.d.ts.map +1 -1
- package/dist/components/sidebar/copyable-data-block.js +16 -15
- package/dist/components/sidebar/detail-card.d.ts +5 -6
- package/dist/components/sidebar/detail-card.d.ts.map +1 -1
- package/dist/components/sidebar/detail-card.js +32 -16
- package/dist/components/sidebar/entity-detail-panel.d.ts +3 -1
- package/dist/components/sidebar/entity-detail-panel.d.ts.map +1 -1
- package/dist/components/sidebar/entity-detail-panel.js +20 -37
- package/dist/components/sidebar/events-list.d.ts.map +1 -1
- package/dist/components/sidebar/events-list.js +21 -15
- package/dist/components/sidebar/resolve-hook-modal.js +1 -1
- package/dist/components/sidebar/sidebar-data-context.d.ts +29 -0
- package/dist/components/sidebar/sidebar-data-context.d.ts.map +1 -0
- package/dist/components/sidebar/sidebar-data-context.js +19 -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 +3 -27
- package/dist/components/trace-viewer/components/map.js +1 -1
- package/dist/components/trace-viewer/components/markers.js +1 -1
- package/dist/components/trace-viewer/components/node.js +1 -1
- package/dist/components/trace-viewer/components/search-input.js +1 -1
- package/dist/components/trace-viewer/components/search.js +1 -1
- package/dist/components/trace-viewer/components/span-content.js +1 -1
- package/dist/components/trace-viewer/components/span-detail-panel.js +1 -1
- package/dist/components/trace-viewer/components/span-segments.js +1 -1
- package/dist/components/trace-viewer/components/span-strategies.js +1 -1
- package/dist/components/trace-viewer/components/ui.js +1 -1
- package/dist/components/trace-viewer/components/zoom-button.js +1 -1
- package/dist/components/trace-viewer/components/zoom-icons.js +1 -1
- package/dist/components/trace-viewer/context.js +1 -1
- package/dist/components/trace-viewer/index.js +1 -1
- package/dist/components/trace-viewer/trace-viewer.js +1 -1
- package/dist/components/trace-viewer/types.js +1 -1
- package/dist/components/trace-viewer/util/constants.js +1 -1
- package/dist/components/trace-viewer/util/scrollbar-width.js +1 -1
- package/dist/components/trace-viewer/util/timing.d.ts +1 -1
- package/dist/components/trace-viewer/util/timing.d.ts.map +1 -1
- package/dist/components/trace-viewer/util/timing.js +6 -9
- package/dist/components/trace-viewer/util/tree.js +1 -1
- package/dist/components/trace-viewer/util/use-immediate-style.js +1 -1
- package/dist/components/trace-viewer/util/use-streaming-spans.js +1 -1
- package/dist/components/trace-viewer/util/use-trackpad-zoom.js +1 -1
- package/dist/components/trace-viewer/worker.js +1 -1
- package/dist/components/trace-viewer-new.d.ts +14 -0
- package/dist/components/trace-viewer-new.d.ts.map +1 -0
- package/dist/components/trace-viewer-new.js +22 -0
- package/dist/components/ui/alert.js +1 -1
- package/dist/components/ui/button.d.ts +10 -0
- package/dist/components/ui/button.d.ts.map +1 -0
- package/dist/components/ui/button.js +46 -0
- package/dist/components/ui/card.js +1 -1
- package/dist/components/ui/data-inspector.d.ts +39 -1
- package/dist/components/ui/data-inspector.d.ts.map +1 -1
- package/dist/components/ui/data-inspector.js +207 -22
- package/dist/components/ui/decrypt-button.js +1 -1
- package/dist/components/ui/error-card.js +1 -1
- package/dist/components/ui/error-stack-block.d.ts.map +1 -1
- package/dist/components/ui/error-stack-block.js +27 -19
- package/dist/components/ui/icon-button.d.ts +19 -0
- package/dist/components/ui/icon-button.d.ts.map +1 -0
- package/dist/components/ui/icon-button.js +29 -0
- package/dist/components/ui/inspector-theme.d.ts +9 -10
- package/dist/components/ui/inspector-theme.d.ts.map +1 -1
- package/dist/components/ui/inspector-theme.js +39 -72
- package/dist/components/ui/kbd.d.ts +6 -0
- package/dist/components/ui/kbd.d.ts.map +1 -0
- package/dist/components/ui/kbd.js +6 -0
- package/dist/components/ui/load-more-button.js +1 -1
- package/dist/components/ui/menu-dropdown.js +1 -1
- package/dist/components/ui/skeleton.js +1 -1
- package/dist/components/ui/spinner.js +1 -1
- package/dist/components/ui/timestamp-tooltip.js +1 -1
- package/dist/components/ui/tooltip.d.ts +10 -0
- package/dist/components/ui/tooltip.d.ts.map +1 -0
- package/dist/components/ui/tooltip.js +12 -0
- package/dist/components/workflow-trace-view.d.ts +3 -1
- package/dist/components/workflow-trace-view.d.ts.map +1 -1
- package/dist/components/workflow-trace-view.js +10 -5
- package/dist/components/workflow-traces/event-colors.js +1 -1
- package/dist/components/workflow-traces/trace-colors.js +1 -1
- package/dist/components/workflow-traces/trace-span-construction.d.ts +2 -2
- package/dist/components/workflow-traces/trace-span-construction.d.ts.map +1 -1
- package/dist/components/workflow-traces/trace-span-construction.js +19 -6
- package/dist/components/workflow-traces/trace-time-utils.js +1 -1
- package/dist/hooks/use-dark-mode.js +1 -1
- package/dist/hooks/use-intersection-observer.d.ts +17 -0
- package/dist/hooks/use-intersection-observer.d.ts.map +1 -0
- package/dist/hooks/use-intersection-observer.js +29 -0
- package/dist/hooks/use-load-more-on-scroll.d.ts +21 -0
- package/dist/hooks/use-load-more-on-scroll.d.ts.map +1 -0
- package/dist/hooks/use-load-more-on-scroll.js +28 -0
- package/dist/hooks/use-reduced-motion.d.ts +10 -0
- package/dist/hooks/use-reduced-motion.d.ts.map +1 -0
- package/dist/hooks/use-reduced-motion.js +29 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/lib/event-analysis.js +1 -1
- package/dist/lib/event-materialization.js +1 -1
- package/dist/lib/exact-event-search-id.d.ts +25 -0
- package/dist/lib/exact-event-search-id.d.ts.map +1 -0
- package/dist/lib/exact-event-search-id.js +39 -0
- package/dist/lib/hydration.d.ts +14 -1
- package/dist/lib/hydration.d.ts.map +1 -1
- package/dist/lib/hydration.js +157 -4
- package/dist/lib/stream-display.d.ts +18 -0
- package/dist/lib/stream-display.d.ts.map +1 -0
- package/dist/lib/stream-display.js +30 -0
- package/dist/lib/toast.js +1 -1
- package/dist/lib/trace-builder.d.ts.map +1 -1
- package/dist/lib/trace-builder.js +3 -2
- package/dist/lib/utils.d.ts +9 -9
- package/dist/lib/utils.d.ts.map +1 -1
- package/dist/lib/utils.js +27 -32
- package/dist/styles.css +475 -1
- package/package.json +6 -4
- package/src/components/event-list-view.tsx +421 -262
- package/src/components/index.ts +13 -1
- package/src/components/new-trace-viewer/components/copy-button.tsx +68 -0
- package/src/components/new-trace-viewer/components/event-list.tsx +135 -0
- package/src/components/new-trace-viewer/components/middle-truncate/copy-selection.ts +114 -0
- package/src/components/new-trace-viewer/components/middle-truncate/middle-truncate.tsx +157 -0
- package/src/components/new-trace-viewer/components/middle-truncate/truncate.ts +132 -0
- package/src/components/new-trace-viewer/components/middle-truncate/use-middle-truncate.ts +167 -0
- package/src/components/new-trace-viewer/components/split-pane.tsx +198 -0
- package/src/components/new-trace-viewer/components/timeline.tsx +560 -0
- package/src/components/new-trace-viewer/components/trace-viewer-skeleton.tsx +94 -0
- package/src/components/new-trace-viewer/components/use-row-window.ts +93 -0
- package/src/components/new-trace-viewer/context.tsx +90 -0
- package/src/components/new-trace-viewer/detail-panel.tsx +55 -0
- package/src/components/new-trace-viewer/icons.tsx +79 -0
- package/src/components/new-trace-viewer/search.ts +178 -0
- package/src/components/new-trace-viewer/trace-viewer.tsx +762 -0
- package/src/components/new-trace-viewer/types.ts +0 -0
- package/src/components/new-trace-viewer/util/constants.ts +0 -0
- package/src/components/new-trace-viewer/utils.ts +482 -0
- package/src/components/run-trace-view.tsx +3 -0
- package/src/components/sidebar/attribute-panel.tsx +240 -196
- package/src/components/sidebar/copyable-data-block.tsx +49 -27
- package/src/components/sidebar/detail-card.tsx +119 -59
- package/src/components/sidebar/entity-detail-panel.tsx +92 -148
- package/src/components/sidebar/events-list.tsx +51 -76
- package/src/components/sidebar/sidebar-data-context.tsx +62 -0
- package/src/components/stream-viewer.tsx +18 -40
- package/src/components/trace-viewer/util/timing.ts +5 -9
- package/src/components/trace-viewer-new.tsx +57 -0
- package/src/components/ui/button.tsx +68 -0
- package/src/components/ui/data-inspector.tsx +427 -31
- package/src/components/ui/error-stack-block.tsx +39 -30
- package/src/components/ui/icon-button.tsx +53 -0
- package/src/components/ui/inspector-theme.ts +39 -81
- package/src/components/ui/kbd.tsx +21 -0
- package/src/components/ui/tooltip.tsx +47 -0
- package/src/components/workflow-trace-view.tsx +12 -2
- package/src/components/workflow-traces/trace-span-construction.ts +24 -6
- package/src/hooks/use-intersection-observer.ts +57 -0
- package/src/hooks/use-load-more-on-scroll.ts +49 -0
- package/src/hooks/use-reduced-motion.ts +34 -0
- package/src/index.ts +9 -0
- package/src/lib/exact-event-search-id.ts +67 -0
- package/src/lib/hydration.ts +169 -1
- package/src/lib/stream-display.ts +48 -0
- package/src/lib/trace-builder.ts +2 -1
- package/src/lib/utils.ts +27 -32
- package/src/styles.css +475 -1
- package/dist/components/error-boundary.js.map +0 -1
- package/dist/components/event-list-view.js.map +0 -1
- package/dist/components/hook-actions.js.map +0 -1
- package/dist/components/index.js.map +0 -1
- package/dist/components/run-trace-view.js.map +0 -1
- package/dist/components/sidebar/attribute-panel.js.map +0 -1
- package/dist/components/sidebar/conversation-view.js.map +0 -1
- package/dist/components/sidebar/copyable-data-block.js.map +0 -1
- package/dist/components/sidebar/detail-card.js.map +0 -1
- package/dist/components/sidebar/entity-detail-panel.js.map +0 -1
- package/dist/components/sidebar/events-list.js.map +0 -1
- package/dist/components/sidebar/resolve-hook-modal.js.map +0 -1
- package/dist/components/stream-viewer.js.map +0 -1
- package/dist/components/trace-viewer/components/map.js.map +0 -1
- package/dist/components/trace-viewer/components/markers.js.map +0 -1
- package/dist/components/trace-viewer/components/node.js.map +0 -1
- package/dist/components/trace-viewer/components/search-input.js.map +0 -1
- package/dist/components/trace-viewer/components/search.js.map +0 -1
- package/dist/components/trace-viewer/components/span-content.js.map +0 -1
- package/dist/components/trace-viewer/components/span-detail-panel.js.map +0 -1
- package/dist/components/trace-viewer/components/span-segments.js.map +0 -1
- package/dist/components/trace-viewer/components/span-strategies.js.map +0 -1
- package/dist/components/trace-viewer/components/ui.js.map +0 -1
- package/dist/components/trace-viewer/components/zoom-button.js.map +0 -1
- package/dist/components/trace-viewer/components/zoom-icons.js.map +0 -1
- package/dist/components/trace-viewer/context.js.map +0 -1
- package/dist/components/trace-viewer/index.js.map +0 -1
- package/dist/components/trace-viewer/trace-viewer.js.map +0 -1
- package/dist/components/trace-viewer/types.js.map +0 -1
- package/dist/components/trace-viewer/util/constants.js.map +0 -1
- package/dist/components/trace-viewer/util/scrollbar-width.js.map +0 -1
- package/dist/components/trace-viewer/util/timing.js.map +0 -1
- package/dist/components/trace-viewer/util/tree.js.map +0 -1
- package/dist/components/trace-viewer/util/use-immediate-style.js.map +0 -1
- package/dist/components/trace-viewer/util/use-streaming-spans.js.map +0 -1
- package/dist/components/trace-viewer/util/use-trackpad-zoom.js.map +0 -1
- package/dist/components/trace-viewer/worker.js.map +0 -1
- package/dist/components/ui/alert.js.map +0 -1
- package/dist/components/ui/card.js.map +0 -1
- package/dist/components/ui/data-inspector.js.map +0 -1
- package/dist/components/ui/decrypt-button.js.map +0 -1
- package/dist/components/ui/error-card.js.map +0 -1
- package/dist/components/ui/error-stack-block.js.map +0 -1
- package/dist/components/ui/inspector-theme.js.map +0 -1
- package/dist/components/ui/load-more-button.js.map +0 -1
- package/dist/components/ui/menu-dropdown.js.map +0 -1
- package/dist/components/ui/skeleton.js.map +0 -1
- package/dist/components/ui/spinner.js.map +0 -1
- package/dist/components/ui/timestamp-tooltip.js.map +0 -1
- package/dist/components/workflow-trace-view.js.map +0 -1
- package/dist/components/workflow-traces/event-colors.js.map +0 -1
- package/dist/components/workflow-traces/trace-colors.js.map +0 -1
- package/dist/components/workflow-traces/trace-span-construction.js.map +0 -1
- package/dist/components/workflow-traces/trace-time-utils.js.map +0 -1
- package/dist/hooks/use-dark-mode.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/lib/event-analysis.js.map +0 -1
- package/dist/lib/event-materialization.js.map +0 -1
- package/dist/lib/hydration.js.map +0 -1
- package/dist/lib/toast.js.map +0 -1
- package/dist/lib/trace-builder.js.map +0 -1
- package/dist/lib/utils.js.map +0 -1
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
import { formatDuration, getHighResInMs } from '../trace-viewer/util/timing';
|
|
2
|
+
export function computeRootBounds(spans) {
|
|
3
|
+
let minStart = Number.POSITIVE_INFINITY;
|
|
4
|
+
let maxEnd = Number.NEGATIVE_INFINITY;
|
|
5
|
+
for (const span of spans) {
|
|
6
|
+
const s = getHighResInMs(span.startTime);
|
|
7
|
+
const e = getHighResInMs(span.endTime);
|
|
8
|
+
if (s < minStart)
|
|
9
|
+
minStart = s;
|
|
10
|
+
if (e > maxEnd)
|
|
11
|
+
maxEnd = e;
|
|
12
|
+
}
|
|
13
|
+
if (!Number.isFinite(minStart) || !Number.isFinite(maxEnd)) {
|
|
14
|
+
return { startTime: 0, endTime: 1, duration: 1 };
|
|
15
|
+
}
|
|
16
|
+
const duration = Math.max(maxEnd - minStart, 1);
|
|
17
|
+
return { startTime: minStart, endTime: maxEnd, duration };
|
|
18
|
+
}
|
|
19
|
+
export function getSpanDurationMs(span) {
|
|
20
|
+
return Math.max(0, getHighResInMs(span.endTime) - getHighResInMs(span.startTime));
|
|
21
|
+
}
|
|
22
|
+
const NICE_INTERVALS = [
|
|
23
|
+
1, 2, 5, 10, 20, 50, 100, 200, 500, 1_000, 2_000, 5_000, 10_000, 20_000,
|
|
24
|
+
50_000, 100_000, 200_000, 500_000, 1_000_000, 2_000_000, 5_000_000,
|
|
25
|
+
10_000_000, 20_000_000, 50_000_000, 100_000_000, 200_000_000, 500_000_000,
|
|
26
|
+
1_000_000_000, 2_000_000_000, 5_000_000_000,
|
|
27
|
+
];
|
|
28
|
+
const MAX_MARKERS = 8;
|
|
29
|
+
function pickInterval(viewDuration, maxTicks) {
|
|
30
|
+
for (const interval of NICE_INTERVALS) {
|
|
31
|
+
if (viewDuration / interval <= maxTicks)
|
|
32
|
+
return interval;
|
|
33
|
+
}
|
|
34
|
+
return NICE_INTERVALS[NICE_INTERVALS.length - 1];
|
|
35
|
+
}
|
|
36
|
+
export function computeTimeMarkers(viewDuration, offset) {
|
|
37
|
+
if (viewDuration <= 0)
|
|
38
|
+
return [];
|
|
39
|
+
const maxTicks = 6;
|
|
40
|
+
const interval = pickInterval(viewDuration, maxTicks);
|
|
41
|
+
const firstTick = Math.ceil(offset / interval) * interval;
|
|
42
|
+
const markers = [];
|
|
43
|
+
for (let t = firstTick; t <= offset + viewDuration; t += interval) {
|
|
44
|
+
const position = (t - offset) / viewDuration;
|
|
45
|
+
if (position < -0.01 || position > 1.01)
|
|
46
|
+
continue;
|
|
47
|
+
markers.push({
|
|
48
|
+
position: Math.min(Math.max(position, 0), 1),
|
|
49
|
+
label: formatDuration(Math.abs(t), true),
|
|
50
|
+
value: t,
|
|
51
|
+
});
|
|
52
|
+
if (markers.length >= MAX_MARKERS)
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
55
|
+
return markers;
|
|
56
|
+
}
|
|
57
|
+
export function computeSpanGaps(spans, viewStart, viewEnd) {
|
|
58
|
+
const range = viewEnd - viewStart;
|
|
59
|
+
if (range <= 0)
|
|
60
|
+
return [];
|
|
61
|
+
const gaps = [];
|
|
62
|
+
for (let i = 0; i < spans.length - 1; i++) {
|
|
63
|
+
const endTime = getHighResInMs(spans[i].endTime);
|
|
64
|
+
const startTime = getHighResInMs(spans[i + 1].startTime);
|
|
65
|
+
const gapMs = startTime - endTime;
|
|
66
|
+
if (gapMs <= 0)
|
|
67
|
+
continue;
|
|
68
|
+
const leftFrac = Math.min(Math.max((endTime - viewStart) / range, 0), 1);
|
|
69
|
+
const rightFrac = Math.min(Math.max((startTime - viewStart) / range, 0), 1);
|
|
70
|
+
if (rightFrac - leftFrac < 0.001)
|
|
71
|
+
continue;
|
|
72
|
+
gaps.push({ gapMs, leftFrac, rightFrac, rowIndex: i });
|
|
73
|
+
}
|
|
74
|
+
return gaps;
|
|
75
|
+
}
|
|
76
|
+
// ---------------------------------------------------------------------------
|
|
77
|
+
// Resource colors
|
|
78
|
+
// ---------------------------------------------------------------------------
|
|
79
|
+
export const RESOURCE_COLORS = {
|
|
80
|
+
run: {
|
|
81
|
+
bg: 'var(--ds-blue-200)',
|
|
82
|
+
border: 'var(--ds-blue-500)',
|
|
83
|
+
errorBg: 'var(--ds-red-200)',
|
|
84
|
+
errorBorder: 'var(--ds-red-500)',
|
|
85
|
+
},
|
|
86
|
+
step: {
|
|
87
|
+
bg: 'var(--ds-green-200)',
|
|
88
|
+
border: 'var(--ds-green-500)',
|
|
89
|
+
errorBg: 'var(--ds-red-200)',
|
|
90
|
+
errorBorder: 'var(--ds-red-500)',
|
|
91
|
+
},
|
|
92
|
+
hook: {
|
|
93
|
+
bg: 'var(--ds-amber-200)',
|
|
94
|
+
border: 'var(--ds-amber-500)',
|
|
95
|
+
errorBg: 'var(--ds-red-200)',
|
|
96
|
+
errorBorder: 'var(--ds-red-500)',
|
|
97
|
+
},
|
|
98
|
+
sleep: {
|
|
99
|
+
bg: 'var(--ds-purple-200)',
|
|
100
|
+
border: 'var(--ds-purple-500)',
|
|
101
|
+
errorBg: 'var(--ds-red-200)',
|
|
102
|
+
errorBorder: 'var(--ds-red-500)',
|
|
103
|
+
},
|
|
104
|
+
default: {
|
|
105
|
+
bg: 'var(--ds-gray-200)',
|
|
106
|
+
border: 'var(--ds-gray-500)',
|
|
107
|
+
errorBg: 'var(--ds-red-200)',
|
|
108
|
+
errorBorder: 'var(--ds-red-500)',
|
|
109
|
+
},
|
|
110
|
+
};
|
|
111
|
+
export function getResourceColor(resource) {
|
|
112
|
+
return RESOURCE_COLORS[resource] ?? RESOURCE_COLORS.default;
|
|
113
|
+
}
|
|
114
|
+
function clampFraction(value) {
|
|
115
|
+
return Math.max(0, Math.min(1, value));
|
|
116
|
+
}
|
|
117
|
+
function timeToFraction(time, spanStart, spanDuration) {
|
|
118
|
+
if (spanDuration <= 0)
|
|
119
|
+
return 0;
|
|
120
|
+
return clampFraction((time - spanStart) / spanDuration);
|
|
121
|
+
}
|
|
122
|
+
function sortedEventMarks(events, relevantNames) {
|
|
123
|
+
return events
|
|
124
|
+
.filter((e) => relevantNames.includes(e.name))
|
|
125
|
+
.map((e) => ({ time: getHighResInMs(e.timestamp), type: e.name }))
|
|
126
|
+
.sort((a, b) => a.time - b.time);
|
|
127
|
+
}
|
|
128
|
+
function computeStepSegmentsFromSpan(startMs, duration, events) {
|
|
129
|
+
const segments = [];
|
|
130
|
+
if (duration <= 0)
|
|
131
|
+
return segments;
|
|
132
|
+
const marks = sortedEventMarks(events, [
|
|
133
|
+
'step_started',
|
|
134
|
+
'step_retrying',
|
|
135
|
+
'step_failed',
|
|
136
|
+
'step_completed',
|
|
137
|
+
]);
|
|
138
|
+
if (marks.length === 0) {
|
|
139
|
+
segments.push({ startFraction: 0, endFraction: 1, status: 'running' });
|
|
140
|
+
return segments;
|
|
141
|
+
}
|
|
142
|
+
const firstFraction = timeToFraction(marks[0].time, startMs, duration);
|
|
143
|
+
if (firstFraction > 0.001) {
|
|
144
|
+
segments.push({
|
|
145
|
+
startFraction: 0,
|
|
146
|
+
endFraction: firstFraction,
|
|
147
|
+
status: 'queued',
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
for (let i = 0; i < marks.length; i++) {
|
|
151
|
+
const mark = marks[i];
|
|
152
|
+
const markFrac = timeToFraction(mark.time, startMs, duration);
|
|
153
|
+
const nextMark = marks[i + 1];
|
|
154
|
+
const nextFrac = nextMark
|
|
155
|
+
? timeToFraction(nextMark.time, startMs, duration)
|
|
156
|
+
: 1;
|
|
157
|
+
if (mark.type === 'step_started') {
|
|
158
|
+
if (i === marks.length - 1) {
|
|
159
|
+
segments.push({
|
|
160
|
+
startFraction: markFrac,
|
|
161
|
+
endFraction: 1,
|
|
162
|
+
status: 'succeeded',
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
const nextType = nextMark.type;
|
|
167
|
+
const attemptStatus = nextType === 'step_retrying' || nextType === 'step_failed'
|
|
168
|
+
? 'failed'
|
|
169
|
+
: nextType === 'step_completed'
|
|
170
|
+
? 'succeeded'
|
|
171
|
+
: 'running';
|
|
172
|
+
segments.push({
|
|
173
|
+
startFraction: markFrac,
|
|
174
|
+
endFraction: nextFrac,
|
|
175
|
+
status: attemptStatus,
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
else if (mark.type === 'step_retrying') {
|
|
180
|
+
segments.push({
|
|
181
|
+
startFraction: markFrac,
|
|
182
|
+
endFraction: nextFrac,
|
|
183
|
+
status: 'retrying',
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
else if (mark.type === 'step_failed') {
|
|
187
|
+
if (markFrac < 0.999) {
|
|
188
|
+
segments.push({
|
|
189
|
+
startFraction: markFrac,
|
|
190
|
+
endFraction: 1,
|
|
191
|
+
status: 'failed',
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
return segments;
|
|
197
|
+
}
|
|
198
|
+
function computeHookSegmentsFromSpan(startMs, duration, events) {
|
|
199
|
+
const segments = [];
|
|
200
|
+
if (duration <= 0)
|
|
201
|
+
return segments;
|
|
202
|
+
const sorted = [...events]
|
|
203
|
+
.map((e) => ({ name: e.name, time: getHighResInMs(e.timestamp) }))
|
|
204
|
+
.sort((a, b) => a.time - b.time);
|
|
205
|
+
const received = sorted.find((e) => e.name === 'hook_received');
|
|
206
|
+
const disposed = sorted.find((e) => e.name === 'hook_disposed');
|
|
207
|
+
if (!received && !disposed) {
|
|
208
|
+
segments.push({ startFraction: 0, endFraction: 1, status: 'waiting' });
|
|
209
|
+
return segments;
|
|
210
|
+
}
|
|
211
|
+
const receivedFrac = received
|
|
212
|
+
? timeToFraction(received.time, startMs, duration)
|
|
213
|
+
: null;
|
|
214
|
+
const disposedFrac = disposed
|
|
215
|
+
? timeToFraction(disposed.time, startMs, duration)
|
|
216
|
+
: null;
|
|
217
|
+
if (receivedFrac !== null && receivedFrac > 0.001) {
|
|
218
|
+
segments.push({
|
|
219
|
+
startFraction: 0,
|
|
220
|
+
endFraction: receivedFrac,
|
|
221
|
+
status: 'waiting',
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
else if (receivedFrac === null && disposedFrac !== null) {
|
|
225
|
+
segments.push({
|
|
226
|
+
startFraction: 0,
|
|
227
|
+
endFraction: disposedFrac,
|
|
228
|
+
status: 'waiting',
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
if (receivedFrac !== null) {
|
|
232
|
+
segments.push({
|
|
233
|
+
startFraction: receivedFrac,
|
|
234
|
+
endFraction: disposedFrac ?? 1,
|
|
235
|
+
status: 'received',
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
if (disposedFrac !== null && disposedFrac < 0.999) {
|
|
239
|
+
segments.push({
|
|
240
|
+
startFraction: disposedFrac,
|
|
241
|
+
endFraction: 1,
|
|
242
|
+
status: 'succeeded',
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
return segments;
|
|
246
|
+
}
|
|
247
|
+
function computeSleepSegmentsFromSpan(_startMs, duration, _events) {
|
|
248
|
+
if (duration <= 0)
|
|
249
|
+
return [];
|
|
250
|
+
return [{ startFraction: 0, endFraction: 1, status: 'sleeping' }];
|
|
251
|
+
}
|
|
252
|
+
function computeRunSegmentsFromSpan(startMs, duration, activeStartMs, events, attributes) {
|
|
253
|
+
const segments = [];
|
|
254
|
+
if (duration <= 0)
|
|
255
|
+
return segments;
|
|
256
|
+
const sorted = [...events]
|
|
257
|
+
.map((e) => ({ name: e.name, time: getHighResInMs(e.timestamp) }))
|
|
258
|
+
.sort((a, b) => a.time - b.time);
|
|
259
|
+
const hasRunCreated = sorted.some((e) => e.name === 'run_created');
|
|
260
|
+
if (!hasRunCreated) {
|
|
261
|
+
const runData = attributes?.data;
|
|
262
|
+
const runStatus = runData?.status;
|
|
263
|
+
return computeV1RunSegments(startMs, duration, activeStartMs, runStatus);
|
|
264
|
+
}
|
|
265
|
+
const failedEvent = sorted.find((e) => e.name === 'run_failed');
|
|
266
|
+
let cursor = 0;
|
|
267
|
+
if (activeStartMs !== undefined && activeStartMs > startMs) {
|
|
268
|
+
const queuedFrac = timeToFraction(activeStartMs, startMs, duration);
|
|
269
|
+
if (queuedFrac > 0.001) {
|
|
270
|
+
segments.push({
|
|
271
|
+
startFraction: 0,
|
|
272
|
+
endFraction: queuedFrac,
|
|
273
|
+
status: 'queued',
|
|
274
|
+
});
|
|
275
|
+
cursor = queuedFrac;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
segments.push({
|
|
279
|
+
startFraction: cursor,
|
|
280
|
+
endFraction: 1,
|
|
281
|
+
status: failedEvent ? 'failed' : 'running',
|
|
282
|
+
});
|
|
283
|
+
return segments;
|
|
284
|
+
}
|
|
285
|
+
function computeV1RunSegments(startMs, duration, activeStartMs, runStatus) {
|
|
286
|
+
const segments = [];
|
|
287
|
+
let cursor = 0;
|
|
288
|
+
if (activeStartMs !== undefined && activeStartMs > startMs) {
|
|
289
|
+
const queuedFrac = timeToFraction(activeStartMs, startMs, duration);
|
|
290
|
+
if (queuedFrac > 0.001) {
|
|
291
|
+
segments.push({
|
|
292
|
+
startFraction: 0,
|
|
293
|
+
endFraction: queuedFrac,
|
|
294
|
+
status: 'queued',
|
|
295
|
+
});
|
|
296
|
+
cursor = queuedFrac;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
segments.push({
|
|
300
|
+
startFraction: cursor,
|
|
301
|
+
endFraction: 1,
|
|
302
|
+
status: runStatus === 'failed' ? 'failed' : 'running',
|
|
303
|
+
});
|
|
304
|
+
return segments;
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Compute event-based segments for a span. Dispatches on `span.resource`
|
|
308
|
+
* to the appropriate resource-type-specific segment builder.
|
|
309
|
+
* Returns an empty array for generic (non-workflow) spans.
|
|
310
|
+
*/
|
|
311
|
+
export function computeSpanSegments(span) {
|
|
312
|
+
const startMs = getHighResInMs(span.startTime);
|
|
313
|
+
const duration = getSpanDurationMs(span);
|
|
314
|
+
const activeStartMs = span.activeStartTime
|
|
315
|
+
? getHighResInMs(span.activeStartTime)
|
|
316
|
+
: undefined;
|
|
317
|
+
switch (span.resource) {
|
|
318
|
+
case 'step':
|
|
319
|
+
return computeStepSegmentsFromSpan(startMs, duration, span.events);
|
|
320
|
+
case 'hook':
|
|
321
|
+
return computeHookSegmentsFromSpan(startMs, duration, span.events);
|
|
322
|
+
case 'sleep':
|
|
323
|
+
return computeSleepSegmentsFromSpan(startMs, duration, span.events);
|
|
324
|
+
case 'run':
|
|
325
|
+
return computeRunSegmentsFromSpan(startMs, duration, activeStartMs, span.events, span.attributes);
|
|
326
|
+
default:
|
|
327
|
+
return [];
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy9uZXctdHJhY2Utdmlld2VyL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFZN0UsTUFBTSxVQUFVLGlCQUFpQixDQUFDLEtBQWE7SUFDN0MsSUFBSSxRQUFRLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDO0lBQ3hDLElBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQztJQUV0QyxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ3pCLE1BQU0sQ0FBQyxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDekMsTUFBTSxDQUFDLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsR0FBRyxRQUFRO1lBQUUsUUFBUSxHQUFHLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsR0FBRyxNQUFNO1lBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDM0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFDbkQsQ0FBQztJQUVELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxD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QVEsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsZUFBZTtRQUN4QyxDQUFDLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUM7UUFDdEMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUVkLFFBQVEsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3RCLEtBQUssTUFBTTtZQUNULE9BQU8sMkJBQTJCLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDckUsS0FBSyxNQUFNO1lBQ1QsT0FBTywyQkFBMkIsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyRSxLQUFLLE9BQU87WUFDVixPQUFPLDRCQUE0QixDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RFLEtBQUssS0FBSztZQUNSLE9BQU8sMEJBQTBCLENBQy9CLE9BQU8sRUFDUCxRQUFRLEVBQ1IsYUFBYSxFQUNiLElBQUksQ0FBQyxNQUFNLEVBQ1gsSUFBSSxDQUFDLFVBQVUsQ0FDaEIsQ0FBQztRQUNKO1lBQ0UsT0FBTyxFQUFFLENBQUM7SUFDZCxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgU3BhbiwgU3BhbkV2ZW50IH0gZnJvbSAnLi4vdHJhY2Utdmlld2VyL3R5cGVzJztcbmltcG9ydCB7IGZvcm1hdER1cmF0aW9uLCBnZXRIaWdoUmVzSW5NcyB9IGZyb20gJy4uL3RyYWNlLXZpZXdlci91dGlsL3RpbWluZyc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUm9vdCBib3VuZHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgaW50ZXJmYWNlIFJvb3RCb3VuZHMge1xuICBzdGFydFRpbWU6IG51bWJlcjtcbiAgZW5kVGltZTogbnVtYmVyO1xuICBkdXJhdGlvbjogbnVtYmVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZVJvb3RCb3VuZHMoc3BhbnM6IFNwYW5bXSk6IFJvb3RCb3VuZHMge1xuICBsZXQgbWluU3RhcnQgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gIGxldCBtYXhFbmQgPSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XG5cbiAgZm9yIChjb25zdCBzcGFuIG9mIHNwYW5zKSB7XG4gICAgY29uc3QgcyA9IGdldEhpZ2hSZXNJbk1zKHNwYW4uc3RhcnRUaW1lKTtcbiAgICBjb25zdCBlID0gZ2V0SGlnaFJlc0luTXMoc3Bhbi5lbmRUaW1lKTtcbiAgICBpZiAocyA8IG1pblN0YXJ0KSBtaW5TdGFydCA9IHM7XG4gICAgaWYgKGUgPiBtYXhFbmQpIG1heEVuZCA9IGU7XG4gIH1cblxuICBpZiAoIU51bWJlci5pc0Zpbml0ZShtaW5TdGFydCkgfHwgIU51bWJlci5pc0Zpbml0ZShtYXhFbmQpKSB7XG4gICAgcmV0dXJuIHsgc3RhcnRUaW1lOiAwLCBlbmRUaW1lOiAxLCBkdXJhdGlvbjogMSB9O1xuICB9XG5cbiAgY29uc3QgZHVyYXRpb24gPSBNYXRoLm1heChtYXhFbmQgLSBtaW5TdGFydCwgMSk7XG4gIHJldHVybiB7IHN0YXJ0VGltZTogbWluU3RhcnQsIGVuZFRpbWU6IG1heEVuZCwgZHVyYXRpb24gfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNwYW5EdXJhdGlvbk1zKHNwYW46IFNwYW4pOiBudW1iZXIge1xuICByZXR1cm4gTWF0aC5tYXgoXG4gICAgMCxcbiAgICBnZXRIaWdoUmVzSW5NcyhzcGFuLmVuZFRpbWUpIC0gZ2V0SGlnaFJlc0luTXMoc3Bhbi5zdGFydFRpbWUpXG4gICk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVGltZSBtYXJrZXJzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGludGVyZmFjZSBUaW1lTWFya2VyIHtcbiAgcG9zaXRpb246IG51bWJlcjtcbiAgbGFiZWw6IHN0cmluZztcbiAgdmFsdWU6IG51bWJlcjtcbn1cblxuY29uc3QgTklDRV9JTlRFUlZBTFMgPSBbXG4gIDEsIDIsIDUsIDEwLCAyMCwgNTAsIDEwMCwgMjAwLCA1MDAsIDFfMDAwLCAyXzAwMCwgNV8wMDAsIDEwXzAwMCwgMjBfMDAwLFxuICA1MF8wMDAsIDEwMF8wMDAsIDIwMF8wMDAsIDUwMF8wMDAsIDFfMDAwXzAwMCwgMl8wMDBfMDAwLCA1XzAwMF8wMDAsXG4gIDEwXzAwMF8wMDAsIDIwXzAwMF8wMDAsIDUwXzAwMF8wMDAsIDEwMF8wMDBfMDAwLCAyMDBfMDAwXzAwMCwgNTAwXzAwMF8wMDAsXG4gIDFfMDAwXzAwMF8wMDAsIDJfMDAwXzAwMF8wMDAsIDVfMDAwXzAwMF8wMDAsXG5dO1xuXG5jb25zdCBNQVhfTUFSS0VSUyA9IDg7XG5cbmZ1bmN0aW9uIHBpY2tJbnRlcnZhbCh2aWV3RHVyYXRpb246IG51bWJlciwgbWF4VGlja3M6IG51bWJlcik6IG51bWJlciB7XG4gIGZvciAoY29uc3QgaW50ZXJ2YWwgb2YgTklDRV9JTlRFUlZBTFMpIHtcbiAgICBpZiAodmlld0R1cmF0aW9uIC8gaW50ZXJ2YWwgPD0gbWF4VGlja3MpIHJldHVybiBpbnRlcnZhbDtcbiAgfVxuICByZXR1cm4gTklDRV9JTlRFUlZBTFNbTklDRV9JTlRFUlZBTFMubGVuZ3RoIC0gMV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlVGltZU1hcmtlcnMoXG4gIHZpZXdEdXJhdGlvbjogbnVtYmVyLFxuICBvZmZzZXQ6IG51bWJlclxuKTogVGltZU1hcmtlcltdIHtcbiAgaWYgKHZpZXdEdXJhdGlvbiA8PSAwKSByZXR1cm4gW107XG5cbiAgY29uc3QgbWF4VGlja3MgPSA2O1xuICBjb25zdCBpbnRlcnZhbCA9IHBpY2tJbnRlcnZhbCh2aWV3RHVyYXRpb24sIG1heFRpY2tzKTtcblxuICBjb25zdCBmaXJzdFRpY2sgPSBNYXRoLmNlaWwob2Zmc2V0IC8gaW50ZXJ2YWwpICogaW50ZXJ2YWw7XG4gIGNvbnN0IG1hcmtlcnM6IFRpbWVNYXJrZXJbXSA9IFtdO1xuXG4gIGZvciAobGV0IHQgPSBmaXJzdFRpY2s7IHQgPD0gb2Zmc2V0ICsgdmlld0R1cmF0aW9uOyB0ICs9IGludGVydmFsKSB7XG4gICAgY29uc3QgcG9zaXRpb24gPSAodCAtIG9mZnNldCkgLyB2aWV3RHVyYXRpb247XG4gICAgaWYgKHBvc2l0aW9uIDwgLTAuMDEgfHwgcG9zaXRpb24gPiAxLjAxKSBjb250aW51ZTtcbiAgICBtYXJrZXJzLnB1c2goe1xuICAgICAgcG9zaXRpb246IE1hdGgubWluKE1hdGgubWF4KHBvc2l0aW9uLCAwKSwgMSksXG4gICAgICBsYWJlbDogZm9ybWF0RHVyYXRpb24oTWF0aC5hYnModCksIHRydWUpLFxuICAgICAgdmFsdWU6IHQsXG4gICAgfSk7XG4gICAgaWYgKG1hcmtlcnMubGVuZ3RoID49IE1BWF9NQVJLRVJTKSBicmVhaztcbiAgfVxuXG4gIHJldHVybiBtYXJrZXJzO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFNwYW4gZ2FwcyDigJQgdGltZSBkZWx0YXMgYmV0d2VlbiBjb25zZWN1dGl2ZSBzcGFucyAoQWx0LWtleSBvdmVybGF5KVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBpbnRlcmZhY2UgU3BhbkdhcCB7XG4gIGdhcE1zOiBudW1iZXI7XG4gIGxlZnRGcmFjOiBudW1iZXI7XG4gIHJpZ2h0RnJhYzogbnVtYmVyO1xuICByb3dJbmRleDogbnVtYmVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZVNwYW5HYXBzKFxuICBzcGFuczogU3BhbltdLFxuICB2aWV3U3RhcnQ6IG51bWJlcixcbiAgdmlld0VuZDogbnVtYmVyXG4pOiBTcGFuR2FwW10ge1xuICBjb25zdCByYW5nZSA9IHZpZXdFbmQgLSB2aWV3U3RhcnQ7XG4gIGlmIChyYW5nZSA8PSAwKSByZXR1cm4gW107XG5cbiAgY29uc3QgZ2FwczogU3BhbkdhcFtdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3BhbnMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgY29uc3QgZW5kVGltZSA9IGdldEhpZ2hSZXNJbk1zKHNwYW5zW2ldLmVuZFRpbWUpO1xuICAgIGNvbnN0IHN0YXJ0VGltZSA9IGdldEhpZ2hSZXNJbk1zKHNwYW5zW2kgKyAxXS5zdGFydFRpbWUpO1xuICAgIGNvbnN0IGdhcE1zID0gc3RhcnRUaW1lIC0gZW5kVGltZTtcbiAgICBpZiAoZ2FwTXMgPD0gMCkgY29udGludWU7XG5cbiAgICBjb25zdCBsZWZ0RnJhYyA9IE1hdGgubWluKE1hdGgubWF4KChlbmRUaW1lIC0gdmlld1N0YXJ0KSAvIHJhbmdlLCAwKSwgMSk7XG4gICAgY29uc3QgcmlnaHRGcmFjID0gTWF0aC5taW4oTWF0aC5tYXgoKHN0YXJ0VGltZSAtIHZpZXdTdGFydCkgLyByYW5nZSwgMCksIDEpO1xuICAgIGlmIChyaWdodEZyYWMgLSBsZWZ0RnJhYyA8IDAuMDAxKSBjb250aW51ZTtcblxuICAgIGdhcHMucHVzaCh7IGdhcE1zLCBsZWZ0RnJhYywgcmlnaHRGcmFjLCByb3dJbmRleDogaSB9KTtcbiAgfVxuICByZXR1cm4gZ2Fwcztcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSZXNvdXJjZSBjb2xvcnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgY29uc3QgUkVTT1VSQ0VfQ09MT1JTOiBSZWNvcmQ8XG4gIHN0cmluZyxcbiAge1xuICAgIGJnOiBzdHJpbmc7XG4gICAgYm9yZGVyOiBzdHJpbmc7XG4gICAgZXJyb3JCZz86IHN0cmluZztcbiAgICBlcnJvckJvcmRlcj86IHN0cmluZztcbiAgfVxuPiA9IHtcbiAgcnVuOiB7XG4gICAgYmc6ICd2YXIoLS1kcy1ibHVlLTIwMCknLFxuICAgIGJvcmRlcjogJ3ZhcigtLWRzLWJsdWUtNTAwKScsXG4gICAgZXJyb3JCZzogJ3ZhcigtLWRzLXJlZC0yMDApJyxcbiAgICBlcnJvckJvcmRlcjogJ3ZhcigtLWRzLXJlZC01MDApJyxcbiAgfSxcbiAgc3RlcDoge1xuICAgIGJnOiAndmFyKC0tZHMtZ3JlZW4tMjAwKScsXG4gICAgYm9yZGVyOiAndmFyKC0tZHMtZ3JlZW4tNTAwKScsXG4gICAgZXJyb3JCZzogJ3ZhcigtLWRzLXJlZC0yMDApJyxcbiAgICBlcnJvckJvcmRlcjogJ3ZhcigtLWRzLXJlZC01MDApJyxcbiAgfSxcbiAgaG9vazoge1xuICAgIGJnOiAndmFyKC0tZHMtYW1iZXItMjAwKScsXG4gICAgYm9yZGVyOiAndmFyKC0tZHMtYW1iZXItNTAwKScsXG4gICAgZXJyb3JCZzogJ3ZhcigtLWRzLXJlZC0yMDApJyxcbiAgICBlcnJvckJvcmRlcjogJ3ZhcigtLWRzLXJlZC01MDApJyxcbiAgfSxcbiAgc2xlZXA6IHtcbiAgICBiZzogJ3ZhcigtLWRzLXB1cnBsZS0yMDApJyxcbiAgICBib3JkZXI6ICd2YXIoLS1kcy1wdXJwbGUtNTAwKScsXG4gICAgZXJyb3JCZzogJ3ZhcigtLWRzLXJlZC0yMDApJyxcbiAgICBlcnJvckJvcmRlcjogJ3ZhcigtLWRzLXJlZC01MDApJyxcbiAgfSxcbiAgZGVmYXVsdDoge1xuICAgIGJnOiAndmFyKC0tZHMtZ3JheS0yMDApJyxcbiAgICBib3JkZXI6ICd2YXIoLS1kcy1ncmF5LTUwMCknLFxuICAgIGVycm9yQmc6ICd2YXIoLS1kcy1yZWQtMjAwKScsXG4gICAgZXJyb3JCb3JkZXI6ICd2YXIoLS1kcy1yZWQtNTAwKScsXG4gIH0sXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVzb3VyY2VDb2xvcihyZXNvdXJjZTogc3RyaW5nKToge1xuICBiZzogc3RyaW5nO1xuICBib3JkZXI6IHN0cmluZztcbiAgZXJyb3JCZz86IHN0cmluZztcbiAgZXJyb3JCb3JkZXI/OiBzdHJpbmc7XG59IHtcbiAgcmV0dXJuIFJFU09VUkNFX0NPTE9SU1tyZXNvdXJjZV0gPz8gUkVTT1VSQ0VfQ09MT1JTLmRlZmF1bHQ7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU3BhbiBzZWdtZW50cyDigJQgc3BsaXQgYSB0aW1lbGluZSBiYXIgaW50byBjb2xvcmVkIHNlY3Rpb25zIGJ5IGV2ZW50IHN0YXRlXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IHR5cGUgU2VnbWVudFN0YXR1cyA9XG4gIHwgJ3F1ZXVlZCdcbiAgfCAncnVubmluZydcbiAgfCAnZmFpbGVkJ1xuICB8ICdyZXRyeWluZydcbiAgfCAnc3VjY2VlZGVkJ1xuICB8ICd3YWl0aW5nJ1xuICB8ICdzbGVlcGluZydcbiAgfCAncmVjZWl2ZWQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNlZ21lbnQge1xuICBzdGFydEZyYWN0aW9uOiBudW1iZXI7XG4gIGVuZEZyYWN0aW9uOiBudW1iZXI7XG4gIHN0YXR1czogU2VnbWVudFN0YXR1cztcbn1cblxuZnVuY3Rpb24gY2xhbXBGcmFjdGlvbih2YWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWluKDEsIHZhbHVlKSk7XG59XG5cbmZ1bmN0aW9uIHRpbWVUb0ZyYWN0aW9uKFxuICB0aW1lOiBudW1iZXIsXG4gIHNwYW5TdGFydDogbnVtYmVyLFxuICBzcGFuRHVyYXRpb246IG51bWJlclxuKTogbnVtYmVyIHtcbiAgaWYgKHNwYW5EdXJhdGlvbiA8PSAwKSByZXR1cm4gMDtcbiAgcmV0dXJuIGNsYW1wRnJhY3Rpb24oKHRpbWUgLSBzcGFuU3RhcnQpIC8gc3BhbkR1cmF0aW9uKTtcbn1cblxuaW50ZXJmYWNlIEV2ZW50TWFyayB7XG4gIHRpbWU6IG51bWJlcjtcbiAgdHlwZTogc3RyaW5nO1xufVxuXG5mdW5jdGlvbiBzb3J0ZWRFdmVudE1hcmtzKFxuICBldmVudHM6IFNwYW5FdmVudFtdLFxuICByZWxldmFudE5hbWVzOiBzdHJpbmdbXVxuKTogRXZlbnRNYXJrW10ge1xuICByZXR1cm4gZXZlbnRzXG4gICAgLmZpbHRlcigoZSkgPT4gcmVsZXZhbnROYW1lcy5pbmNsdWRlcyhlLm5hbWUpKVxuICAgIC5tYXAoKGUpID0+ICh7IHRpbWU6IGdldEhpZ2hSZXNJbk1zKGUudGltZXN0YW1wKSwgdHlwZTogZS5uYW1lIH0pKVxuICAgIC5zb3J0KChhLCBiKSA9PiBhLnRpbWUgLSBiLnRpbWUpO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlU3RlcFNlZ21lbnRzRnJvbVNwYW4oXG4gIHN0YXJ0TXM6IG51bWJlcixcbiAgZHVyYXRpb246IG51bWJlcixcbiAgZXZlbnRzOiBTcGFuRXZlbnRbXVxuKTogU2VnbWVudFtdIHtcbiAgY29uc3Qgc2VnbWVudHM6IFNlZ21lbnRbXSA9IFtdO1xuICBpZiAoZHVyYXRpb24gPD0gMCkgcmV0dXJuIHNlZ21lbnRzO1xuXG4gIGNvbnN0IG1hcmtzID0gc29ydGVkRXZlbnRNYXJrcyhldmVudHMsIFtcbiAgICAnc3RlcF9zdGFydGVkJyxcbiAgICAnc3RlcF9yZXRyeWluZycsXG4gICAgJ3N0ZXBfZmFpbGVkJyxcbiAgICAnc3RlcF9jb21wbGV0ZWQnLFxuICBdKTtcblxuICBpZiAobWFya3MubGVuZ3RoID09PSAwKSB7XG4gICAgc2VnbWVudHMucHVzaCh7IHN0YXJ0RnJhY3Rpb246IDAsIGVuZEZyYWN0aW9uOiAxLCBzdGF0dXM6ICdydW5uaW5nJyB9KTtcbiAgICByZXR1cm4gc2VnbWVudHM7XG4gIH1cblxuICBjb25zdCBmaXJzdEZyYWN0aW9uID0gdGltZVRvRnJhY3Rpb24obWFya3NbMF0udGltZSwgc3RhcnRNcywgZHVyYXRpb24pO1xuICBpZiAoZmlyc3RGcmFjdGlvbiA+IDAuMDAxKSB7XG4gICAgc2VnbWVudHMucHVzaCh7XG4gICAgICBzdGFydEZyYWN0aW9uOiAwLFxuICAgICAgZW5kRnJhY3Rpb246IGZpcnN0RnJhY3Rpb24sXG4gICAgICBzdGF0dXM6ICdxdWV1ZWQnLFxuICAgIH0pO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXJrcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IG1hcmsgPSBtYXJrc1tpXTtcbiAgICBjb25zdCBtYXJrRnJhYyA9IHRpbWVUb0ZyYWN0aW9uKG1hcmsudGltZSwgc3RhcnRNcywgZHVyYXRpb24pO1xuICAgIGNvbnN0IG5leHRNYXJrID0gbWFya3NbaSArIDFdO1xuICAgIGNvbnN0IG5leHRGcmFjID0gbmV4dE1hcmtcbiAgICAgID8gdGltZVRvRnJhY3Rpb24obmV4dE1hcmsudGltZSwgc3RhcnRNcywgZHVyYXRpb24pXG4gICAgICA6IDE7XG5cbiAgICBpZiAobWFyay50eXBlID09PSAnc3RlcF9zdGFydGVkJykge1xuICAgICAgaWYgKGkgPT09IG1hcmtzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgc2VnbWVudHMucHVzaCh7XG4gICAgICAgICAgc3RhcnRGcmFjdGlvbjogbWFya0ZyYWMsXG4gICAgICAgICAgZW5kRnJhY3Rpb246IDEsXG4gICAgICAgICAgc3RhdHVzOiAnc3VjY2VlZGVkJyxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBuZXh0VHlwZSA9IG5leHRNYXJrLnR5cGU7XG4gICAgICAgIGNvbnN0IGF0dGVtcHRTdGF0dXM6IFNlZ21lbnRTdGF0dXMgPVxuICAgICAgICAgIG5leHRUeXBlID09PSAnc3RlcF9yZXRyeWluZycgfHwgbmV4dFR5cGUgPT09ICdzdGVwX2ZhaWxlZCdcbiAgICAgICAgICAgID8gJ2ZhaWxlZCdcbiAgICAgICAgICAgIDogbmV4dFR5cGUgPT09ICdzdGVwX2NvbXBsZXRlZCdcbiAgICAgICAgICAgICAgPyAnc3VjY2VlZGVkJ1xuICAgICAgICAgICAgICA6ICdydW5uaW5nJztcbiAgICAgICAgc2VnbWVudHMucHVzaCh7XG4gICAgICAgICAgc3RhcnRGcmFjdGlvbjogbWFya0ZyYWMsXG4gICAgICAgICAgZW5kRnJhY3Rpb246IG5leHRGcmFjLFxuICAgICAgICAgIHN0YXR1czogYXR0ZW1wdFN0YXR1cyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChtYXJrLnR5cGUgPT09ICdzdGVwX3JldHJ5aW5nJykge1xuICAgICAgc2VnbWVudHMucHVzaCh7XG4gICAgICAgIHN0YXJ0RnJhY3Rpb246IG1hcmtGcmFjLFxuICAgICAgICBlbmRGcmFjdGlvbjogbmV4dEZyYWMsXG4gICAgICAgIHN0YXR1czogJ3JldHJ5aW5nJyxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAobWFyay50eXBlID09PSAnc3RlcF9mYWlsZWQnKSB7XG4gICAgICBpZiAobWFya0ZyYWMgPCAwLjk5OSkge1xuICAgICAgICBzZWdtZW50cy5wdXNoKHtcbiAgICAgICAgICBzdGFydEZyYWN0aW9uOiBtYXJrRnJhYyxcbiAgICAgICAgICBlbmRGcmFjdGlvbjogMSxcbiAgICAgICAgICBzdGF0dXM6ICdmYWlsZWQnLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gc2VnbWVudHM7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVIb29rU2VnbWVudHNGcm9tU3BhbihcbiAgc3RhcnRNczogbnVtYmVyLFxuICBkdXJhdGlvbjogbnVtYmVyLFxuICBldmVudHM6IFNwYW5FdmVudFtdXG4pOiBTZWdtZW50W10ge1xuICBjb25zdCBzZWdtZW50czogU2VnbWVudFtdID0gW107XG4gIGlmIChkdXJhdGlvbiA8PSAwKSByZXR1cm4gc2VnbWVudHM7XG5cbiAgY29uc3Qgc29ydGVkID0gWy4uLmV2ZW50c11cbiAgICAubWFwKChlKSA9PiAoeyBuYW1lOiBlLm5hbWUsIHRpbWU6IGdldEhpZ2hSZXNJbk1zKGUudGltZXN0YW1wKSB9KSlcbiAgICAuc29ydCgoYSwgYikgPT4gYS50aW1lIC0gYi50aW1lKTtcblxuICBjb25zdCByZWNlaXZlZCA9IHNvcnRlZC5maW5kKChlKSA9PiBlLm5hbWUgPT09ICdob29rX3JlY2VpdmVkJyk7XG4gIGNvbnN0IGRpc3Bvc2VkID0gc29ydGVkLmZpbmQoKGUpID0+IGUubmFtZSA9PT0gJ2hvb2tfZGlzcG9zZWQnKTtcblxuICBpZiAoIXJlY2VpdmVkICYmICFkaXNwb3NlZCkge1xuICAgIHNlZ21lbnRzLnB1c2goeyBzdGFydEZyYWN0aW9uOiAwLCBlbmRGcmFjdGlvbjogMSwgc3RhdHVzOiAnd2FpdGluZycgfSk7XG4gICAgcmV0dXJuIHNlZ21lbnRzO1xuICB9XG5cbiAgY29uc3QgcmVjZWl2ZWRGcmFjID0gcmVjZWl2ZWRcbiAgICA/IHRpbWVUb0ZyYWN0aW9uKHJlY2VpdmVkLnRpbWUsIHN0YXJ0TXMsIGR1cmF0aW9uKVxuICAgIDogbnVsbDtcbiAgY29uc3QgZGlzcG9zZWRGcmFjID0gZGlzcG9zZWRcbiAgICA/IHRpbWVUb0ZyYWN0aW9uKGRpc3Bvc2VkLnRpbWUsIHN0YXJ0TXMsIGR1cmF0aW9uKVxuICAgIDogbnVsbDtcblxuICBpZiAocmVjZWl2ZWRGcmFjICE9PSBudWxsICYmIHJlY2VpdmVkRnJhYyA+IDAuMDAxKSB7XG4gICAgc2VnbWVudHMucHVzaCh7XG4gICAgICBzdGFydEZyYWN0aW9uOiAwLFxuICAgICAgZW5kRnJhY3Rpb246IHJlY2VpdmVkRnJhYyxcbiAgICAgIHN0YXR1czogJ3dhaXRpbmcnLFxuICAgIH0pO1xuICB9IGVsc2UgaWYgKHJlY2VpdmVkRnJhYyA9PT0gbnVsbCAmJiBkaXNwb3NlZEZyYWMgIT09IG51bGwpIHtcbiAgICBzZWdtZW50cy5wdXNoKHtcbiAgICAgIHN0YXJ0RnJhY3Rpb246IDAsXG4gICAgICBlbmRGcmFjdGlvbjogZGlzcG9zZWRGcmFjLFxuICAgICAgc3RhdHVzOiAnd2FpdGluZycsXG4gICAgfSk7XG4gIH1cblxuICBpZiAocmVjZWl2ZWRGcmFjICE9PSBudWxsKSB7XG4gICAgc2VnbWVudHMucHVzaCh7XG4gICAgICBzdGFydEZyYWN0aW9uOiByZWNlaXZlZEZyYWMsXG4gICAgICBlbmRGcmFjdGlvbjogZGlzcG9zZWRGcmFjID8/IDEsXG4gICAgICBzdGF0dXM6ICdyZWNlaXZlZCcsXG4gICAgfSk7XG4gIH1cblxuICBpZiAoZGlzcG9zZWRGcmFjICE9PSBudWxsICYmIGRpc3Bvc2VkRnJhYyA8IDAuOTk5KSB7XG4gICAgc2VnbWVudHMucHVzaCh7XG4gICAgICBzdGFydEZyYWN0aW9uOiBkaXNwb3NlZEZyYWMsXG4gICAgICBlbmRGcmFjdGlvbjogMSxcbiAgICAgIHN0YXR1czogJ3N1Y2NlZWRlZCcsXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gc2VnbWVudHM7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVTbGVlcFNlZ21lbnRzRnJvbVNwYW4oXG4gIF9zdGFydE1zOiBudW1iZXIsXG4gIGR1cmF0aW9uOiBudW1iZXIsXG4gIF9ldmVudHM6IFNwYW5FdmVudFtdXG4pOiBTZWdtZW50W10ge1xuICBpZiAoZHVyYXRpb24gPD0gMCkgcmV0dXJuIFtdO1xuICByZXR1cm4gW3sgc3RhcnRGcmFjdGlvbjogMCwgZW5kRnJhY3Rpb246IDEsIHN0YXR1czogJ3NsZWVwaW5nJyB9XTtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZVJ1blNlZ21lbnRzRnJvbVNwYW4oXG4gIHN0YXJ0TXM6IG51bWJlcixcbiAgZHVyYXRpb246IG51bWJlcixcbiAgYWN0aXZlU3RhcnRNczogbnVtYmVyIHwgdW5kZWZpbmVkLFxuICBldmVudHM6IFNwYW5FdmVudFtdLFxuICBhdHRyaWJ1dGVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuKTogU2VnbWVudFtdIHtcbiAgY29uc3Qgc2VnbWVudHM6IFNlZ21lbnRbXSA9IFtdO1xuICBpZiAoZHVyYXRpb24gPD0gMCkgcmV0dXJuIHNlZ21lbnRzO1xuXG4gIGNvbnN0IHNvcnRlZCA9IFsuLi5ldmVudHNdXG4gICAgLm1hcCgoZSkgPT4gKHsgbmFtZTogZS5uYW1lLCB0aW1lOiBnZXRIaWdoUmVzSW5NcyhlLnRpbWVzdGFtcCkgfSkpXG4gICAgLnNvcnQoKGEsIGIpID0+IGEudGltZSAtIGIudGltZSk7XG5cbiAgY29uc3QgaGFzUnVuQ3JlYXRlZCA9IHNvcnRlZC5zb21lKChlKSA9PiBlLm5hbWUgPT09ICdydW5fY3JlYXRlZCcpO1xuXG4gIGlmICghaGFzUnVuQ3JlYXRlZCkge1xuICAgIGNvbnN0IHJ1bkRhdGEgPSBhdHRyaWJ1dGVzPy5kYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IHJ1blN0YXR1cyA9IHJ1bkRhdGE/LnN0YXR1cyBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIGNvbXB1dGVWMVJ1blNlZ21lbnRzKHN0YXJ0TXMsIGR1cmF0aW9uLCBhY3RpdmVTdGFydE1zLCBydW5TdGF0dXMpO1xuICB9XG5cbiAgY29uc3QgZmFpbGVkRXZlbnQgPSBzb3J0ZWQuZmluZCgoZSkgPT4gZS5uYW1lID09PSAncnVuX2ZhaWxlZCcpO1xuXG4gIGxldCBjdXJzb3IgPSAwO1xuICBpZiAoYWN0aXZlU3RhcnRNcyAhPT0gdW5kZWZpbmVkICYmIGFjdGl2ZVN0YXJ0TXMgPiBzdGFydE1zKSB7XG4gICAgY29uc3QgcXVldWVkRnJhYyA9IHRpbWVUb0ZyYWN0aW9uKGFjdGl2ZVN0YXJ0TXMsIHN0YXJ0TXMsIGR1cmF0aW9uKTtcbiAgICBpZiAocXVldWVkRnJhYyA+IDAuMDAxKSB7XG4gICAgICBzZWdtZW50cy5wdXNoKHtcbiAgICAgICAgc3RhcnRGcmFjdGlvbjogMCxcbiAgICAgICAgZW5kRnJhY3Rpb246IHF1ZXVlZEZyYWMsXG4gICAgICAgIHN0YXR1czogJ3F1ZXVlZCcsXG4gICAgICB9KTtcbiAgICAgIGN1cnNvciA9IHF1ZXVlZEZyYWM7XG4gICAgfVxuICB9XG5cbiAgc2VnbWVudHMucHVzaCh7XG4gICAgc3RhcnRGcmFjdGlvbjogY3Vyc29yLFxuICAgIGVuZEZyYWN0aW9uOiAxLFxuICAgIHN0YXR1czogZmFpbGVkRXZlbnQgPyAnZmFpbGVkJyA6ICdydW5uaW5nJyxcbiAgfSk7XG5cbiAgcmV0dXJuIHNlZ21lbnRzO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlVjFSdW5TZWdtZW50cyhcbiAgc3RhcnRNczogbnVtYmVyLFxuICBkdXJhdGlvbjogbnVtYmVyLFxuICBhY3RpdmVTdGFydE1zOiBudW1iZXIgfCB1bmRlZmluZWQsXG4gIHJ1blN0YXR1czogc3RyaW5nIHwgdW5kZWZpbmVkXG4pOiBTZWdtZW50W10ge1xuICBjb25zdCBzZWdtZW50czogU2VnbWVudFtdID0gW107XG5cbiAgbGV0IGN1cnNvciA9IDA7XG4gIGlmIChhY3RpdmVTdGFydE1zICE9PSB1bmRlZmluZWQgJiYgYWN0aXZlU3RhcnRNcyA+IHN0YXJ0TXMpIHtcbiAgICBjb25zdCBxdWV1ZWRGcmFjID0gdGltZVRvRnJhY3Rpb24oYWN0aXZlU3RhcnRNcywgc3RhcnRNcywgZHVyYXRpb24pO1xuICAgIGlmIChxdWV1ZWRGcmFjID4gMC4wMDEpIHtcbiAgICAgIHNlZ21lbnRzLnB1c2goe1xuICAgICAgICBzdGFydEZyYWN0aW9uOiAwLFxuICAgICAgICBlbmRGcmFjdGlvbjogcXVldWVkRnJhYyxcbiAgICAgICAgc3RhdHVzOiAncXVldWVkJyxcbiAgICAgIH0pO1xuICAgICAgY3Vyc29yID0gcXVldWVkRnJhYztcbiAgICB9XG4gIH1cblxuICBzZWdtZW50cy5wdXNoKHtcbiAgICBzdGFydEZyYWN0aW9uOiBjdXJzb3IsXG4gICAgZW5kRnJhY3Rpb246IDEsXG4gICAgc3RhdHVzOiBydW5TdGF0dXMgPT09ICdmYWlsZWQnID8gJ2ZhaWxlZCcgOiAncnVubmluZycsXG4gIH0pO1xuXG4gIHJldHVybiBzZWdtZW50cztcbn1cblxuLyoqXG4gKiBDb21wdXRlIGV2ZW50LWJhc2VkIHNlZ21lbnRzIGZvciBhIHNwYW4uIERpc3BhdGNoZXMgb24gYHNwYW4ucmVzb3VyY2VgXG4gKiB0byB0aGUgYXBwcm9wcmlhdGUgcmVzb3VyY2UtdHlwZS1zcGVjaWZpYyBzZWdtZW50IGJ1aWxkZXIuXG4gKiBSZXR1cm5zIGFuIGVtcHR5IGFycmF5IGZvciBnZW5lcmljIChub24td29ya2Zsb3cpIHNwYW5zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZVNwYW5TZWdtZW50cyhzcGFuOiBTcGFuKTogU2VnbWVudFtdIHtcbiAgY29uc3Qgc3RhcnRNcyA9IGdldEhpZ2hSZXNJbk1zKHNwYW4uc3RhcnRUaW1lKTtcbiAgY29uc3QgZHVyYXRpb24gPSBnZXRTcGFuRHVyYXRpb25NcyhzcGFuKTtcbiAgY29uc3QgYWN0aXZlU3RhcnRNcyA9IHNwYW4uYWN0aXZlU3RhcnRUaW1lXG4gICAgPyBnZXRIaWdoUmVzSW5NcyhzcGFuLmFjdGl2ZVN0YXJ0VGltZSlcbiAgICA6IHVuZGVmaW5lZDtcblxuICBzd2l0Y2ggKHNwYW4ucmVzb3VyY2UpIHtcbiAgICBjYXNlICdzdGVwJzpcbiAgICAgIHJldHVybiBjb21wdXRlU3RlcFNlZ21lbnRzRnJvbVNwYW4oc3RhcnRNcywgZHVyYXRpb24sIHNwYW4uZXZlbnRzKTtcbiAgICBjYXNlICdob29rJzpcbiAgICAgIHJldHVybiBjb21wdXRlSG9va1NlZ21lbnRzRnJvbVNwYW4oc3RhcnRNcywgZHVyYXRpb24sIHNwYW4uZXZlbnRzKTtcbiAgICBjYXNlICdzbGVlcCc6XG4gICAgICByZXR1cm4gY29tcHV0ZVNsZWVwU2VnbWVudHNGcm9tU3BhbihzdGFydE1zLCBkdXJhdGlvbiwgc3Bhbi5ldmVudHMpO1xuICAgIGNhc2UgJ3J1bic6XG4gICAgICByZXR1cm4gY29tcHV0ZVJ1blNlZ21lbnRzRnJvbVNwYW4oXG4gICAgICAgIHN0YXJ0TXMsXG4gICAgICAgIGR1cmF0aW9uLFxuICAgICAgICBhY3RpdmVTdGFydE1zLFxuICAgICAgICBzcGFuLmV2ZW50cyxcbiAgICAgICAgc3Bhbi5hdHRyaWJ1dGVzXG4gICAgICApO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gW107XG4gIH1cbn1cbiJdfQ==
|
|
@@ -14,11 +14,12 @@ interface RunTraceViewProps {
|
|
|
14
14
|
onResolveHook?: (hookToken: string, payload: unknown, hook?: Hook) => Promise<void>;
|
|
15
15
|
onCancelRun?: (runId: string) => Promise<void>;
|
|
16
16
|
onStreamClick?: (streamId: string) => void;
|
|
17
|
+
onRunClick?: (runId: string) => void;
|
|
17
18
|
onSpanSelect?: (info: SpanSelectionInfo) => void;
|
|
18
19
|
onLoadMoreSpans?: () => void | Promise<void>;
|
|
19
20
|
hasMoreSpans?: boolean;
|
|
20
21
|
isLoadingMoreSpans?: boolean;
|
|
21
22
|
}
|
|
22
|
-
export declare function RunTraceView({ run, events, isLoading, error, spanDetailData, spanDetailLoading, spanDetailError, onWakeUpSleep, onResolveHook, onCancelRun, onStreamClick, onSpanSelect, onLoadMoreSpans, hasMoreSpans, isLoadingMoreSpans, }: RunTraceViewProps): import("react/jsx-runtime").JSX.Element;
|
|
23
|
+
export declare function RunTraceView({ run, events, isLoading, error, spanDetailData, spanDetailLoading, spanDetailError, onWakeUpSleep, onResolveHook, onCancelRun, onStreamClick, onRunClick, onSpanSelect, onLoadMoreSpans, hasMoreSpans, isLoadingMoreSpans, }: RunTraceViewProps): import("react/jsx-runtime").JSX.Element;
|
|
23
24
|
export {};
|
|
24
25
|
//# sourceMappingURL=run-trace-view.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-trace-view.d.ts","sourceRoot":"","sources":["../../src/components/run-trace-view.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEtE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAGvE,UAAU,iBAAiB;IACzB,GAAG,EAAE,WAAW,CAAC;IACjB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IACrB,cAAc,CAAC,EAAE,WAAW,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC;IAC1D,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,eAAe,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IAC/B,aAAa,CAAC,EAAE,CACd,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,KAClB,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvC,aAAa,CAAC,EAAE,CACd,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,OAAO,EAChB,IAAI,CAAC,EAAE,IAAI,KACR,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACjD,eAAe,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,wBAAgB,YAAY,CAAC,EAC3B,GAAG,EACH,MAAM,EACN,SAAS,EACT,KAAK,EACL,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,aAAa,EACb,WAAW,EACX,aAAa,EACb,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,kBAAkB,GACnB,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"run-trace-view.d.ts","sourceRoot":"","sources":["../../src/components/run-trace-view.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEtE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAGvE,UAAU,iBAAiB;IACzB,GAAG,EAAE,WAAW,CAAC;IACjB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IACrB,cAAc,CAAC,EAAE,WAAW,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC;IAC1D,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,eAAe,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IAC/B,aAAa,CAAC,EAAE,CACd,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,KAClB,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvC,aAAa,CAAC,EAAE,CACd,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,OAAO,EAChB,IAAI,CAAC,EAAE,IAAI,KACR,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACjD,eAAe,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,wBAAgB,YAAY,CAAC,EAC3B,GAAG,EACH,MAAM,EACN,SAAS,EACT,KAAK,EACL,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,aAAa,EACb,WAAW,EACX,aAAa,EACb,UAAU,EACV,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,kBAAkB,GACnB,EAAE,iBAAiB,2CAiCnB"}
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { AlertCircle } from 'lucide-react';
|
|
4
4
|
import { WorkflowTraceViewer } from './workflow-trace-view';
|
|
5
|
-
export function RunTraceView({ run, events, isLoading, error, spanDetailData, spanDetailLoading, spanDetailError, onWakeUpSleep, onResolveHook, onCancelRun, onStreamClick, onSpanSelect, onLoadMoreSpans, hasMoreSpans, isLoadingMoreSpans, }) {
|
|
5
|
+
export function RunTraceView({ run, events, isLoading, error, spanDetailData, spanDetailLoading, spanDetailError, onWakeUpSleep, onResolveHook, onCancelRun, onStreamClick, onRunClick, onSpanSelect, onLoadMoreSpans, hasMoreSpans, isLoadingMoreSpans, }) {
|
|
6
6
|
if (error && !run) {
|
|
7
7
|
return (_jsxs("div", { className: "m-4", children: [_jsx(AlertCircle, { className: "h-4 w-4" }), _jsx("p", { children: "Error loading workflow run" }), _jsx("p", { children: error.message })] }));
|
|
8
8
|
}
|
|
9
|
-
return (_jsx("div", { className: "w-full h-full relative", children: _jsx(WorkflowTraceViewer, { error: error, events: events, run: run, isLoading: isLoading, spanDetailData: spanDetailData, spanDetailLoading: spanDetailLoading, spanDetailError: spanDetailError, onWakeUpSleep: onWakeUpSleep, onResolveHook: onResolveHook, onCancelRun: onCancelRun, onStreamClick: onStreamClick, onSpanSelect: onSpanSelect, onLoadMoreSpans: onLoadMoreSpans, hasMoreSpans: hasMoreSpans, isLoadingMoreSpans: isLoadingMoreSpans }) }));
|
|
9
|
+
return (_jsx("div", { className: "w-full h-full relative", children: _jsx(WorkflowTraceViewer, { error: error, events: events, run: run, isLoading: isLoading, spanDetailData: spanDetailData, spanDetailLoading: spanDetailLoading, spanDetailError: spanDetailError, onWakeUpSleep: onWakeUpSleep, onResolveHook: onResolveHook, onCancelRun: onCancelRun, onStreamClick: onStreamClick, onRunClick: onRunClick, onSpanSelect: onSpanSelect, onLoadMoreSpans: onLoadMoreSpans, hasMoreSpans: hasMoreSpans, isLoadingMoreSpans: isLoadingMoreSpans }) }));
|
|
10
10
|
}
|
|
11
|
-
//# sourceMappingURL=
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuLXRyYWNlLXZpZXcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcG9uZW50cy9ydW4tdHJhY2Utdmlldy50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOztBQUdiLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFM0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUE0QjVELE1BQU0sVUFBVSxZQUFZLENBQUMsRUFDM0IsR0FBRyxFQUNILE1BQU0sRUFDTixTQUFTLEVBQ1QsS0FBSyxFQUNMLGNBQWMsRUFDZCxpQkFBaUIsRUFDakIsZUFBZSxFQUNmLGFBQWEsRUFDYixhQUFhLEVBQ2IsV0FBVyxFQUNYLGFBQWEsRUFDYixVQUFVLEVBQ1YsWUFBWSxFQUNaLGVBQWUsRUFDZixZQUFZLEVBQ1osa0JBQWtCLEdBQ0E7SUFDbEIsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNsQixPQUFPLENBQ0wsZUFBSyxTQUFTLEVBQUMsS0FBSyxhQUNsQixLQUFDLFdBQVcsSUFBQyxTQUFTLEVBQUMsU0FBUyxHQUFHLEVBQ25DLHFEQUFpQyxFQUNqQyxzQkFBSSxLQUFLLENBQUMsT0FBTyxHQUFLLElBQ2xCLENBQ1AsQ0FBQztJQUNKLENBQUM7SUFFRCxPQUFPLENBQ0wsY0FBSyxTQUFTLEVBQUMsd0JBQXdCLFlBQ3JDLEtBQUMsbUJBQW1CLElBQ2xCLEtBQUssRUFBRSxLQUFLLEVBQ1osTUFBTSxFQUFFLE1BQU0sRUFDZCxHQUFHLEVBQUUsR0FBRyxFQUNSLFNBQVMsRUFBRSxTQUFTLEVBQ3BCLGNBQWMsRUFBRSxjQUFjLEVBQzlCLGlCQUFpQixFQUFFLGlCQUFpQixFQUNwQyxlQUFlLEVBQUUsZUFBZSxFQUNoQyxhQUFhLEVBQUUsYUFBYSxFQUM1QixhQUFhLEVBQUUsYUFBYSxFQUM1QixXQUFXLEVBQUUsV0FBVyxFQUN4QixhQUFhLEVBQUUsYUFBYSxFQUM1QixVQUFVLEVBQUUsVUFBVSxFQUN0QixZQUFZLEVBQUUsWUFBWSxFQUMxQixlQUFlLEVBQUUsZUFBZSxFQUNoQyxZQUFZLEVBQUUsWUFBWSxFQUMxQixrQkFBa0IsRUFBRSxrQkFBa0IsR0FDdEMsR0FDRSxDQUNQLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgdHlwZSB7IEV2ZW50LCBIb29rLCBTdGVwLCBXb3JrZmxvd1J1biB9IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgeyBBbGVydENpcmNsZSB9IGZyb20gJ2x1Y2lkZS1yZWFjdCc7XG5pbXBvcnQgdHlwZSB7IFNwYW5TZWxlY3Rpb25JbmZvIH0gZnJvbSAnLi9zaWRlYmFyL2VudGl0eS1kZXRhaWwtcGFuZWwnO1xuaW1wb3J0IHsgV29ya2Zsb3dUcmFjZVZpZXdlciB9IGZyb20gJy4vd29ya2Zsb3ctdHJhY2Utdmlldyc7XG5cbmludGVyZmFjZSBSdW5UcmFjZVZpZXdQcm9wcyB7XG4gIHJ1bjogV29ya2Zsb3dSdW47XG4gIGV2ZW50czogRXZlbnRbXTtcbiAgaXNMb2FkaW5nPzogYm9vbGVhbjtcbiAgZXJyb3I/OiBFcnJvciB8IG51bGw7XG4gIHNwYW5EZXRhaWxEYXRhPzogV29ya2Zsb3dSdW4gfCBTdGVwIHwgSG9vayB8IEV2ZW50IHwgbnVsbDtcbiAgc3BhbkRldGFpbExvYWRpbmc/OiBib29sZWFuO1xuICBzcGFuRGV0YWlsRXJyb3I/OiBFcnJvciB8IG51bGw7XG4gIG9uV2FrZVVwU2xlZXA/OiAoXG4gICAgcnVuSWQ6IHN0cmluZyxcbiAgICBjb3JyZWxhdGlvbklkOiBzdHJpbmdcbiAgKSA9PiBQcm9taXNlPHsgc3RvcHBlZENvdW50OiBudW1iZXIgfT47XG4gIG9uUmVzb2x2ZUhvb2s/OiAoXG4gICAgaG9va1Rva2VuOiBzdHJpbmcsXG4gICAgcGF5bG9hZDogdW5rbm93bixcbiAgICBob29rPzogSG9va1xuICApID0+IFByb21pc2U8dm9pZD47XG4gIG9uQ2FuY2VsUnVuPzogKHJ1bklkOiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG4gIG9uU3RyZWFtQ2xpY2s/OiAoc3RyZWFtSWQ6IHN0cmluZykgPT4gdm9pZDtcbiAgb25SdW5DbGljaz86IChydW5JZDogc3RyaW5nKSA9PiB2b2lkO1xuICBvblNwYW5TZWxlY3Q/OiAoaW5mbzogU3BhblNlbGVjdGlvbkluZm8pID0+IHZvaWQ7XG4gIG9uTG9hZE1vcmVTcGFucz86ICgpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICBoYXNNb3JlU3BhbnM/OiBib29sZWFuO1xuICBpc0xvYWRpbmdNb3JlU3BhbnM/OiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gUnVuVHJhY2VWaWV3KHtcbiAgcnVuLFxuICBldmVudHMsXG4gIGlzTG9hZGluZyxcbiAgZXJyb3IsXG4gIHNwYW5EZXRhaWxEYXRhLFxuICBzcGFuRGV0YWlsTG9hZGluZyxcbiAgc3BhbkRldGFpbEVycm9yLFxuICBvbldha2VVcFNsZWVwLFxuICBvblJlc29sdmVIb29rLFxuICBvbkNhbmNlbFJ1bixcbiAgb25TdHJlYW1DbGljayxcbiAgb25SdW5DbGljayxcbiAgb25TcGFuU2VsZWN0LFxuICBvbkxvYWRNb3JlU3BhbnMsXG4gIGhhc01vcmVTcGFucyxcbiAgaXNMb2FkaW5nTW9yZVNwYW5zLFxufTogUnVuVHJhY2VWaWV3UHJvcHMpIHtcbiAgaWYgKGVycm9yICYmICFydW4pIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJtLTRcIj5cbiAgICAgICAgPEFsZXJ0Q2lyY2xlIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuICAgICAgICA8cD5FcnJvciBsb2FkaW5nIHdvcmtmbG93IHJ1bjwvcD5cbiAgICAgICAgPHA+e2Vycm9yLm1lc3NhZ2V9PC9wPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJ3LWZ1bGwgaC1mdWxsIHJlbGF0aXZlXCI+XG4gICAgICA8V29ya2Zsb3dUcmFjZVZpZXdlclxuICAgICAgICBlcnJvcj17ZXJyb3J9XG4gICAgICAgIGV2ZW50cz17ZXZlbnRzfVxuICAgICAgICBydW49e3J1bn1cbiAgICAgICAgaXNMb2FkaW5nPXtpc0xvYWRpbmd9XG4gICAgICAgIHNwYW5EZXRhaWxEYXRhPXtzcGFuRGV0YWlsRGF0YX1cbiAgICAgICAgc3BhbkRldGFpbExvYWRpbmc9e3NwYW5EZXRhaWxMb2FkaW5nfVxuICAgICAgICBzcGFuRGV0YWlsRXJyb3I9e3NwYW5EZXRhaWxFcnJvcn1cbiAgICAgICAgb25XYWtlVXBTbGVlcD17b25XYWtlVXBTbGVlcH1cbiAgICAgICAgb25SZXNvbHZlSG9vaz17b25SZXNvbHZlSG9va31cbiAgICAgICAgb25DYW5jZWxSdW49e29uQ2FuY2VsUnVufVxuICAgICAgICBvblN0cmVhbUNsaWNrPXtvblN0cmVhbUNsaWNrfVxuICAgICAgICBvblJ1bkNsaWNrPXtvblJ1bkNsaWNrfVxuICAgICAgICBvblNwYW5TZWxlY3Q9e29uU3BhblNlbGVjdH1cbiAgICAgICAgb25Mb2FkTW9yZVNwYW5zPXtvbkxvYWRNb3JlU3BhbnN9XG4gICAgICAgIGhhc01vcmVTcGFucz17aGFzTW9yZVNwYW5zfVxuICAgICAgICBpc0xvYWRpbmdNb3JlU3BhbnM9e2lzTG9hZGluZ01vcmVTcGFuc31cbiAgICAgIC8+XG4gICAgPC9kaXY+XG4gICk7XG59XG4iXX0=
|
|
@@ -9,7 +9,7 @@ export declare const AttributeBlock: ({ attribute, value, isLoading, inline, con
|
|
|
9
9
|
inline?: boolean;
|
|
10
10
|
context?: DisplayContext;
|
|
11
11
|
}) => import("react/jsx-runtime").JSX.Element | null;
|
|
12
|
-
export declare const AttributePanel: ({ data, moduleSpecifier, isLoading, error, expiredAt, onStreamClick, resource, }: {
|
|
12
|
+
export declare const AttributePanel: ({ data, moduleSpecifier, isLoading, error, expiredAt, onStreamClick, onRunClick, onDecrypt, isDecrypting, resource, }: {
|
|
13
13
|
data: Record<string, unknown>;
|
|
14
14
|
moduleSpecifier?: string;
|
|
15
15
|
isLoading?: boolean;
|
|
@@ -17,6 +17,12 @@ export declare const AttributePanel: ({ data, moduleSpecifier, isLoading, error,
|
|
|
17
17
|
expiredAt?: string | Date;
|
|
18
18
|
/** Callback when a stream reference is clicked */
|
|
19
19
|
onStreamClick?: (streamId: string) => void;
|
|
20
|
+
/** Callback when a run reference is clicked */
|
|
21
|
+
onRunClick?: (runId: string) => void;
|
|
22
|
+
/** Callback when an encrypted marker is clicked (triggers decryption) */
|
|
23
|
+
onDecrypt?: () => void;
|
|
24
|
+
/** Whether decryption is currently in progress */
|
|
25
|
+
isDecrypting?: boolean;
|
|
20
26
|
/** Resource type of the selected span — used to show targeted loading skeletons. */
|
|
21
27
|
resource?: string;
|
|
22
28
|
}) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attribute-panel.d.ts","sourceRoot":"","sources":["../../../src/components/sidebar/attribute-panel.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"attribute-panel.d.ts","sourceRoot":"","sources":["../../../src/components/sidebar/attribute-panel.tsx"],"names":[],"mappings":"AAgWA,eAAO,MAAM,oBAAoB,GAAI,OAAO,OAAO,KAAG,MAQrD,CAAC;AAoBF,UAAU,cAAc;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAmPD,eAAO,MAAM,cAAc,GAAI,mDAM5B;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,cAAc,CAAC;CAC1B,mDAyEA,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,uHAW5B;IACD,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,kDAAkD;IAClD,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,+CAA+C;IAC/C,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,kDAAkD;IAClD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,oFAAoF;IACpF,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,4CAyNA,CAAC"}
|