@workflow/web-shared 4.0.1-beta.5
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/LICENSE.md +21 -0
- package/README.md +76 -0
- package/dist/api/workflow-api-client.d.ts +303 -0
- package/dist/api/workflow-api-client.d.ts.map +1 -0
- package/dist/api/workflow-api-client.js +797 -0
- package/dist/api/workflow-api-client.js.map +1 -0
- package/dist/api/workflow-server-actions.d.ts +97 -0
- package/dist/api/workflow-server-actions.d.ts.map +1 -0
- package/dist/api/workflow-server-actions.js +329 -0
- package/dist/api/workflow-server-actions.js.map +1 -0
- package/dist/components/ui/alert.d.ts +9 -0
- package/dist/components/ui/alert.d.ts.map +1 -0
- package/dist/components/ui/alert.jsx +22 -0
- package/dist/components/ui/alert.jsx.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/utils.d.ts +11 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +19 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/run-trace-view.d.ts +8 -0
- package/dist/run-trace-view.d.ts.map +1 -0
- package/dist/run-trace-view.jsx +25 -0
- package/dist/run-trace-view.jsx.map +1 -0
- package/dist/sidebar/attribute-panel.d.ts +11 -0
- package/dist/sidebar/attribute-panel.d.ts.map +1 -0
- package/dist/sidebar/attribute-panel.jsx +153 -0
- package/dist/sidebar/attribute-panel.jsx.map +1 -0
- package/dist/sidebar/detail-card.d.ts +6 -0
- package/dist/sidebar/detail-card.d.ts.map +1 -0
- package/dist/sidebar/detail-card.jsx +13 -0
- package/dist/sidebar/detail-card.jsx.map +1 -0
- package/dist/sidebar/events-list.d.ts +8 -0
- package/dist/sidebar/events-list.d.ts.map +1 -0
- package/dist/sidebar/events-list.jsx +67 -0
- package/dist/sidebar/events-list.jsx.map +1 -0
- package/dist/sidebar/workflow-detail-panel.d.ts +8 -0
- package/dist/sidebar/workflow-detail-panel.d.ts.map +1 -0
- package/dist/sidebar/workflow-detail-panel.jsx +59 -0
- package/dist/sidebar/workflow-detail-panel.jsx.map +1 -0
- package/dist/trace-viewer/components/map.d.ts +8 -0
- package/dist/trace-viewer/components/map.d.ts.map +1 -0
- package/dist/trace-viewer/components/map.jsx +164 -0
- package/dist/trace-viewer/components/map.jsx.map +1 -0
- package/dist/trace-viewer/components/markers.d.ts +22 -0
- package/dist/trace-viewer/components/markers.d.ts.map +1 -0
- package/dist/trace-viewer/components/markers.jsx +400 -0
- package/dist/trace-viewer/components/markers.jsx.map +1 -0
- package/dist/trace-viewer/components/node.d.ts +31 -0
- package/dist/trace-viewer/components/node.d.ts.map +1 -0
- package/dist/trace-viewer/components/node.jsx +116 -0
- package/dist/trace-viewer/components/node.jsx.map +1 -0
- package/dist/trace-viewer/components/search-input.d.ts +9 -0
- package/dist/trace-viewer/components/search-input.d.ts.map +1 -0
- package/dist/trace-viewer/components/search-input.jsx +16 -0
- package/dist/trace-viewer/components/search-input.jsx.map +1 -0
- package/dist/trace-viewer/components/search.d.ts +3 -0
- package/dist/trace-viewer/components/search.d.ts.map +1 -0
- package/dist/trace-viewer/components/search.jsx +27 -0
- package/dist/trace-viewer/components/search.jsx.map +1 -0
- package/dist/trace-viewer/components/span-detail-panel.d.ts +10 -0
- package/dist/trace-viewer/components/span-detail-panel.d.ts.map +1 -0
- package/dist/trace-viewer/components/span-detail-panel.jsx +388 -0
- package/dist/trace-viewer/components/span-detail-panel.jsx.map +1 -0
- package/dist/trace-viewer/components/ui.d.ts +28 -0
- package/dist/trace-viewer/components/ui.d.ts.map +1 -0
- package/dist/trace-viewer/components/ui.jsx +54 -0
- package/dist/trace-viewer/components/ui.jsx.map +1 -0
- package/dist/trace-viewer/components/zoom-button.d.ts +3 -0
- package/dist/trace-viewer/components/zoom-button.d.ts.map +1 -0
- package/dist/trace-viewer/components/zoom-button.jsx +40 -0
- package/dist/trace-viewer/components/zoom-button.jsx.map +1 -0
- package/dist/trace-viewer/components/zoom-icons.d.ts +11 -0
- package/dist/trace-viewer/components/zoom-icons.d.ts.map +1 -0
- package/dist/trace-viewer/components/zoom-icons.jsx +23 -0
- package/dist/trace-viewer/components/zoom-icons.jsx.map +1 -0
- package/dist/trace-viewer/context.d.ts +183 -0
- package/dist/trace-viewer/context.d.ts.map +1 -0
- package/dist/trace-viewer/context.jsx +326 -0
- package/dist/trace-viewer/context.jsx.map +1 -0
- package/dist/trace-viewer/index.d.ts +5 -0
- package/dist/trace-viewer/index.d.ts.map +1 -0
- package/dist/trace-viewer/index.jsx +4 -0
- package/dist/trace-viewer/index.jsx.map +1 -0
- package/dist/trace-viewer/trace-viewer.d.ts +22 -0
- package/dist/trace-viewer/trace-viewer.d.ts.map +1 -0
- package/dist/trace-viewer/trace-viewer.jsx +311 -0
- package/dist/trace-viewer/trace-viewer.jsx.map +1 -0
- package/dist/trace-viewer/trace-viewer.module.css +1275 -0
- package/dist/trace-viewer/types.d.ts +201 -0
- package/dist/trace-viewer/types.d.ts.map +1 -0
- package/dist/trace-viewer/types.js +2 -0
- package/dist/trace-viewer/types.js.map +1 -0
- package/dist/trace-viewer/util/constants.d.ts +9 -0
- package/dist/trace-viewer/util/constants.d.ts.map +1 -0
- package/dist/trace-viewer/util/constants.js +9 -0
- package/dist/trace-viewer/util/constants.js.map +1 -0
- package/dist/trace-viewer/util/scrollbar-width.d.ts +2 -0
- package/dist/trace-viewer/util/scrollbar-width.d.ts.map +1 -0
- package/dist/trace-viewer/util/scrollbar-width.js +14 -0
- package/dist/trace-viewer/util/scrollbar-width.js.map +1 -0
- package/dist/trace-viewer/util/timing.d.ts +8 -0
- package/dist/trace-viewer/util/timing.d.ts.map +1 -0
- package/dist/trace-viewer/util/timing.js +29 -0
- package/dist/trace-viewer/util/timing.js.map +1 -0
- package/dist/trace-viewer/util/tree.d.ts +13 -0
- package/dist/trace-viewer/util/tree.d.ts.map +1 -0
- package/dist/trace-viewer/util/tree.js +223 -0
- package/dist/trace-viewer/util/tree.js.map +1 -0
- package/dist/trace-viewer/util/use-immediate-style.d.ts +15 -0
- package/dist/trace-viewer/util/use-immediate-style.d.ts.map +1 -0
- package/dist/trace-viewer/util/use-immediate-style.js +22 -0
- package/dist/trace-viewer/util/use-immediate-style.js.map +1 -0
- package/dist/trace-viewer/util/use-streaming-spans.d.ts +8 -0
- package/dist/trace-viewer/util/use-streaming-spans.d.ts.map +1 -0
- package/dist/trace-viewer/util/use-streaming-spans.js +332 -0
- package/dist/trace-viewer/util/use-streaming-spans.js.map +1 -0
- package/dist/trace-viewer/util/use-trackpad-zoom.d.ts +6 -0
- package/dist/trace-viewer/util/use-trackpad-zoom.d.ts.map +1 -0
- package/dist/trace-viewer/util/use-trackpad-zoom.jsx +38 -0
- package/dist/trace-viewer/util/use-trackpad-zoom.jsx.map +1 -0
- package/dist/trace-viewer/worker.d.ts +2 -0
- package/dist/trace-viewer/worker.d.ts.map +1 -0
- package/dist/trace-viewer/worker.js +107 -0
- package/dist/trace-viewer/worker.js.map +1 -0
- package/dist/workflow-trace-view.d.ts +12 -0
- package/dist/workflow-trace-view.d.ts.map +1 -0
- package/dist/workflow-trace-view.jsx +129 -0
- package/dist/workflow-trace-view.jsx.map +1 -0
- package/dist/workflow-traces/event-colors.d.ts +31 -0
- package/dist/workflow-traces/event-colors.d.ts.map +1 -0
- package/dist/workflow-traces/event-colors.js +68 -0
- package/dist/workflow-traces/event-colors.js.map +1 -0
- package/dist/workflow-traces/trace-colors.d.ts +15 -0
- package/dist/workflow-traces/trace-colors.d.ts.map +1 -0
- package/dist/workflow-traces/trace-colors.js +89 -0
- package/dist/workflow-traces/trace-colors.js.map +1 -0
- package/dist/workflow-traces/trace-span-construction.d.ts +31 -0
- package/dist/workflow-traces/trace-span-construction.d.ts.map +1 -0
- package/dist/workflow-traces/trace-span-construction.js +173 -0
- package/dist/workflow-traces/trace-span-construction.js.map +1 -0
- package/dist/workflow-traces/trace-time-utils.d.ts +13 -0
- package/dist/workflow-traces/trace-time-utils.d.ts.map +1 -0
- package/dist/workflow-traces/trace-time-utils.js +34 -0
- package/dist/workflow-traces/trace-time-utils.js.map +1 -0
- package/package.json +59 -0
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { clsx } from 'clsx';
|
|
3
|
+
import { useCallback, useEffect, useLayoutEffect, useRef } from 'react';
|
|
4
|
+
import { MiniMap } from './components/map';
|
|
5
|
+
import { CursorMarker, EventMarkers, Markers } from './components/markers';
|
|
6
|
+
import { SpanNodes } from './components/node';
|
|
7
|
+
import { SearchBar } from './components/search';
|
|
8
|
+
import { SpanDetailPanel } from './components/span-detail-panel';
|
|
9
|
+
import { ZoomButton } from './components/zoom-button';
|
|
10
|
+
import { TraceViewerContextProvider, useTraceViewer } from './context';
|
|
11
|
+
import styles from './trace-viewer.module.css';
|
|
12
|
+
import { MAP_HEIGHT, MARKER_HEIGHT, MARKER_NOTCH_HEIGHT, ROW_HEIGHT, ROW_PADDING, SEARCH_GAP, SEARCH_HEIGHT, TIMELINE_PADDING, } from './util/constants';
|
|
13
|
+
import { parseTrace } from './util/tree';
|
|
14
|
+
import { useStreamingSpans } from './util/use-streaming-spans';
|
|
15
|
+
export function TraceViewerProvider({ getQuickLinks, children, }) {
|
|
16
|
+
return (<TraceViewerContextProvider getQuickLinks={getQuickLinks}>
|
|
17
|
+
{children}
|
|
18
|
+
</TraceViewerContextProvider>);
|
|
19
|
+
}
|
|
20
|
+
const skeletonTrace = {
|
|
21
|
+
traceId: 'skeleton',
|
|
22
|
+
spans: [
|
|
23
|
+
{
|
|
24
|
+
parentSpanId: '',
|
|
25
|
+
spanId: 'root',
|
|
26
|
+
name: 'root span',
|
|
27
|
+
kind: 1,
|
|
28
|
+
resource: 'vercel.runtime',
|
|
29
|
+
startTime: [5000, 0],
|
|
30
|
+
endTime: [6000, 0],
|
|
31
|
+
duration: [1000, 0],
|
|
32
|
+
library: {
|
|
33
|
+
name: 'vercel-site',
|
|
34
|
+
},
|
|
35
|
+
status: {
|
|
36
|
+
code: 1,
|
|
37
|
+
},
|
|
38
|
+
attributes: {
|
|
39
|
+
'vercel.ownerId': 'team_abc',
|
|
40
|
+
},
|
|
41
|
+
traceFlags: 1,
|
|
42
|
+
events: [],
|
|
43
|
+
links: [],
|
|
44
|
+
},
|
|
45
|
+
],
|
|
46
|
+
resources: [
|
|
47
|
+
{
|
|
48
|
+
name: 'vercel.runtime',
|
|
49
|
+
attributes: {},
|
|
50
|
+
},
|
|
51
|
+
],
|
|
52
|
+
rootSpanId: 'root',
|
|
53
|
+
};
|
|
54
|
+
export function TraceViewerTimeline({ trace = skeletonTrace, className = '', scrollLock = false, height, withPanel = false, highlightedSpans, }) {
|
|
55
|
+
const isSkeleton = trace === skeletonTrace;
|
|
56
|
+
const { state, dispatch } = useTraceViewer();
|
|
57
|
+
const { timelineRef, scrollSnapshotRef } = state;
|
|
58
|
+
const memoCache = state.memoCacheRef.current;
|
|
59
|
+
const hideSearchBar = (highlightedSpans?.length ?? 0) > 0 || trace.spans.length <= 10;
|
|
60
|
+
useEffect(() => {
|
|
61
|
+
const { root, map: spanMap } = parseTrace(trace);
|
|
62
|
+
dispatch({
|
|
63
|
+
type: 'setRoot',
|
|
64
|
+
root,
|
|
65
|
+
spanMap,
|
|
66
|
+
resources: trace.resources || [],
|
|
67
|
+
});
|
|
68
|
+
}, [dispatch, trace]);
|
|
69
|
+
const { rows, spans, events, scale } = useStreamingSpans(highlightedSpans);
|
|
70
|
+
const ref = useRef(null);
|
|
71
|
+
useLayoutEffect(() => {
|
|
72
|
+
const $el = ref.current;
|
|
73
|
+
if (!$el)
|
|
74
|
+
return;
|
|
75
|
+
const onResize = () => {
|
|
76
|
+
const padding = 2 * TIMELINE_PADDING;
|
|
77
|
+
const rect = $el.getBoundingClientRect();
|
|
78
|
+
dispatch({
|
|
79
|
+
type: 'setSize',
|
|
80
|
+
width: rect.width - padding,
|
|
81
|
+
height: rect.height,
|
|
82
|
+
});
|
|
83
|
+
};
|
|
84
|
+
onResize();
|
|
85
|
+
const observer = new ResizeObserver(onResize);
|
|
86
|
+
observer.observe($el);
|
|
87
|
+
window.addEventListener('resize', onResize);
|
|
88
|
+
return () => {
|
|
89
|
+
observer.disconnect();
|
|
90
|
+
window.removeEventListener('resize', onResize);
|
|
91
|
+
};
|
|
92
|
+
}, [dispatch]);
|
|
93
|
+
const lastClickRef = useRef({
|
|
94
|
+
t: 0,
|
|
95
|
+
x: -1,
|
|
96
|
+
y: -1,
|
|
97
|
+
spanId: '',
|
|
98
|
+
});
|
|
99
|
+
const onClick = useCallback((event) => {
|
|
100
|
+
// NOTE(wits): We manually implement double-click logic here so that we can support double
|
|
101
|
+
// clicking a span even if the first click moves the span that the user is clicking on due
|
|
102
|
+
// to the panel opening. If we used a regular double click listener we would need to delay
|
|
103
|
+
// the opening of the panel artificially. This implementation allows us to always be
|
|
104
|
+
// FAST while also avoiding a FRUSTRATING situation.
|
|
105
|
+
const prev = lastClickRef.current;
|
|
106
|
+
const t = Date.now();
|
|
107
|
+
const { clientX: x, clientY: y } = event;
|
|
108
|
+
const d = Math.sqrt((x - prev.x) ** 2 + (y - prev.y) ** 2);
|
|
109
|
+
// double click
|
|
110
|
+
if (t - prev.t <= 500 && d <= 8) {
|
|
111
|
+
event.stopPropagation();
|
|
112
|
+
event.preventDefault();
|
|
113
|
+
if (!prev.spanId) {
|
|
114
|
+
dispatch({
|
|
115
|
+
type: 'resetScale',
|
|
116
|
+
});
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
dispatch({
|
|
120
|
+
type: 'select',
|
|
121
|
+
id: prev.spanId,
|
|
122
|
+
});
|
|
123
|
+
dispatch({
|
|
124
|
+
type: 'scaleToNode',
|
|
125
|
+
id: prev.spanId,
|
|
126
|
+
});
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
const target = event.target;
|
|
130
|
+
if (!target.closest(`.${String(styles.timeline)}`))
|
|
131
|
+
return;
|
|
132
|
+
const $button = target.closest('[data-span-id]');
|
|
133
|
+
const spanId = $button?.dataset.spanId || '';
|
|
134
|
+
lastClickRef.current = {
|
|
135
|
+
x,
|
|
136
|
+
y,
|
|
137
|
+
t,
|
|
138
|
+
spanId,
|
|
139
|
+
};
|
|
140
|
+
if (!spanId)
|
|
141
|
+
return;
|
|
142
|
+
dispatch({
|
|
143
|
+
type: 'toggleSelection',
|
|
144
|
+
id: spanId,
|
|
145
|
+
});
|
|
146
|
+
event.stopPropagation();
|
|
147
|
+
}, [dispatch]);
|
|
148
|
+
// Zoom helper
|
|
149
|
+
useLayoutEffect(() => {
|
|
150
|
+
const $timeline = timelineRef.current;
|
|
151
|
+
if (!$timeline)
|
|
152
|
+
return;
|
|
153
|
+
const snapshot = scrollSnapshotRef.current;
|
|
154
|
+
if (snapshot) {
|
|
155
|
+
$timeline.scrollLeft = snapshot.anchorT * scale - snapshot.anchorX;
|
|
156
|
+
}
|
|
157
|
+
}, [scrollSnapshotRef, timelineRef, scale]);
|
|
158
|
+
// Selection helper
|
|
159
|
+
useEffect(() => {
|
|
160
|
+
const spanId = state.selected?.span.spanId;
|
|
161
|
+
if (!spanId)
|
|
162
|
+
return;
|
|
163
|
+
const timeout = setTimeout(() => {
|
|
164
|
+
const $timeline = state.timelineRef.current;
|
|
165
|
+
const $span = $timeline?.querySelector(`[data-span-id="${spanId}"]`);
|
|
166
|
+
if (!$timeline || !$span)
|
|
167
|
+
return;
|
|
168
|
+
const viewRect = $timeline.getBoundingClientRect();
|
|
169
|
+
const spanRect = $span.getBoundingClientRect();
|
|
170
|
+
// If the selected span is narrower than the timeline, scroll it into view
|
|
171
|
+
if (spanRect.width < viewRect.width &&
|
|
172
|
+
(spanRect.left < viewRect.left ||
|
|
173
|
+
spanRect.right > viewRect.right ||
|
|
174
|
+
spanRect.top < viewRect.top ||
|
|
175
|
+
spanRect.bottom > viewRect.bottom)) {
|
|
176
|
+
$span.scrollIntoView({
|
|
177
|
+
block: 'nearest',
|
|
178
|
+
inline: 'center',
|
|
179
|
+
behavior: 'smooth',
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
}, 500);
|
|
183
|
+
return () => {
|
|
184
|
+
clearTimeout(timeout);
|
|
185
|
+
};
|
|
186
|
+
}, [state.selected, state.timelineRef]);
|
|
187
|
+
// Global keyboard shortcuts
|
|
188
|
+
useEffect(() => {
|
|
189
|
+
const onKeyDown = (e) => {
|
|
190
|
+
if (e.key === 'Escape') {
|
|
191
|
+
dispatch({
|
|
192
|
+
type: 'escape',
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
};
|
|
196
|
+
window.addEventListener('keydown', onKeyDown);
|
|
197
|
+
return () => {
|
|
198
|
+
window.removeEventListener('keydown', onKeyDown);
|
|
199
|
+
};
|
|
200
|
+
}, [dispatch]);
|
|
201
|
+
// Scroll locking
|
|
202
|
+
useEffect(() => {
|
|
203
|
+
if (!scrollLock)
|
|
204
|
+
return;
|
|
205
|
+
const $html = document.documentElement;
|
|
206
|
+
const $body = document.body;
|
|
207
|
+
$html.style.overflow = 'clip';
|
|
208
|
+
$body.style.overflow = 'clip';
|
|
209
|
+
const onScroll = (event) => {
|
|
210
|
+
if (event?.cancelable) {
|
|
211
|
+
event.preventDefault();
|
|
212
|
+
}
|
|
213
|
+
else {
|
|
214
|
+
window.scrollTo({
|
|
215
|
+
left: 0,
|
|
216
|
+
top: 0,
|
|
217
|
+
behavior: 'instant',
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
};
|
|
221
|
+
onScroll();
|
|
222
|
+
window.addEventListener('scroll', onScroll, {
|
|
223
|
+
passive: false,
|
|
224
|
+
});
|
|
225
|
+
return () => {
|
|
226
|
+
$html.style.overflow = '';
|
|
227
|
+
$body.style.overflow = '';
|
|
228
|
+
window.removeEventListener('scroll', onScroll);
|
|
229
|
+
};
|
|
230
|
+
}, [scrollLock]);
|
|
231
|
+
const timelineHeight = Math.max(state.timelineHeight - state.scrollbarWidth, MARKER_HEIGHT +
|
|
232
|
+
ROW_PADDING +
|
|
233
|
+
rows.length * (ROW_HEIGHT + ROW_PADDING) -
|
|
234
|
+
ROW_PADDING +
|
|
235
|
+
// When there are enough spans to be near the bottom edge, add some extra padding
|
|
236
|
+
// to avoid overlapping with the zoom buttons, etc.
|
|
237
|
+
84);
|
|
238
|
+
const inert = Boolean(state.isMobile && state.selected);
|
|
239
|
+
return (<div className={clsx(styles.traceViewer, isSkeleton && styles.skeleton, className)} onClickCapture={onClick} ref={ref} style={{
|
|
240
|
+
height,
|
|
241
|
+
'--timeline-padding': `${TIMELINE_PADDING}px`,
|
|
242
|
+
'--row-height': `${ROW_HEIGHT}px`,
|
|
243
|
+
'--row-padding': `${ROW_PADDING}px`,
|
|
244
|
+
'--search-height': `${!hideSearchBar ? SEARCH_HEIGHT : 0}px`,
|
|
245
|
+
'--search-gap': `${!hideSearchBar ? SEARCH_GAP : 2}px`,
|
|
246
|
+
'--map-height': `${MAP_HEIGHT}px`,
|
|
247
|
+
'--timeline-width': `${state.timelineWidth}px`,
|
|
248
|
+
'--timeline-height': `${state.timelineHeight}px`,
|
|
249
|
+
'--timeline-scroll-width': `${Math.round(state.root.duration * state.scale)}px`,
|
|
250
|
+
'--panel-width': `${state.panelWidth}px`,
|
|
251
|
+
'--panel-height': `${state.panelHeight}px`,
|
|
252
|
+
'--height': `${state.height}px`,
|
|
253
|
+
'--scrollbar-width': `${state.scrollbarWidth}px`,
|
|
254
|
+
'--marker-height': `${MARKER_HEIGHT}px`,
|
|
255
|
+
'--marker-notch-height': `${MARKER_NOTCH_HEIGHT}px`,
|
|
256
|
+
}}>
|
|
257
|
+
{!hideSearchBar ? <SearchBar /> : null}
|
|
258
|
+
<MiniMap rows={rows} scale={scale} timelineRef={timelineRef}/>
|
|
259
|
+
<div className={clsx(styles.traceViewerContent, inert && styles.inert)}>
|
|
260
|
+
<div className={styles.timeline} ref={timelineRef}>
|
|
261
|
+
<div style={{
|
|
262
|
+
position: 'relative',
|
|
263
|
+
width: state.timelineWidth,
|
|
264
|
+
height: state.timelineHeight - TIMELINE_PADDING * 2,
|
|
265
|
+
padding: TIMELINE_PADDING,
|
|
266
|
+
paddingBottom: 0,
|
|
267
|
+
}}>
|
|
268
|
+
<div className={styles.traceNode} style={{
|
|
269
|
+
width: state.root.duration * scale || undefined,
|
|
270
|
+
height: timelineHeight - TIMELINE_PADDING * 2,
|
|
271
|
+
}}>
|
|
272
|
+
<Markers scale={scale}/>
|
|
273
|
+
<EventMarkers events={events} root={state.root} scale={scale}/>
|
|
274
|
+
<CursorMarker dispatch={dispatch} events={events} memoCacheRef={state.memoCacheRef} root={state.root} scale={scale} scrollSnapshotRef={scrollSnapshotRef} spans={spans} timelineRef={timelineRef}/>
|
|
275
|
+
<SpanNodes cacheKey={memoCache.get('')} cache={memoCache} customSpanClassNameFunc={state.customSpanClassNameFunc} customSpanEventClassNameFunc={state.customSpanEventClassNameFunc} root={state.root} scale={scale} scrollSnapshotRef={scrollSnapshotRef} spans={spans}/>
|
|
276
|
+
</div>
|
|
277
|
+
</div>
|
|
278
|
+
</div>
|
|
279
|
+
<div className={styles.zoomButtonTraceViewer}>
|
|
280
|
+
<ZoomButton />
|
|
281
|
+
</div>
|
|
282
|
+
</div>
|
|
283
|
+
{withPanel ? (<div className={clsx(styles.spanDetailPanelTraceViewer, !state.selected && styles.hidden, state.isMobile && styles.mobile)}>
|
|
284
|
+
<SpanDetailPanel attached/>
|
|
285
|
+
</div>) : null}
|
|
286
|
+
</div>);
|
|
287
|
+
}
|
|
288
|
+
export function TraceViewerPanel({ className = '', children = null, }) {
|
|
289
|
+
const { state } = useTraceViewer();
|
|
290
|
+
if (!state.selected) {
|
|
291
|
+
return children;
|
|
292
|
+
}
|
|
293
|
+
return (<div className={clsx(styles.spanDetailPanelTraceViewer, className)} style={{
|
|
294
|
+
position: 'relative',
|
|
295
|
+
'--search-height': '0',
|
|
296
|
+
'--search-gap': '0',
|
|
297
|
+
'--map-height': '0',
|
|
298
|
+
'--panel-width': `100%`,
|
|
299
|
+
'--panel-height': `100%`,
|
|
300
|
+
'--height': `100%`,
|
|
301
|
+
'--scrollbar-width': `${state.scrollbarWidth}px`,
|
|
302
|
+
}}>
|
|
303
|
+
<SpanDetailPanel />
|
|
304
|
+
</div>);
|
|
305
|
+
}
|
|
306
|
+
export function TraceViewer(props) {
|
|
307
|
+
return (<TraceViewerContextProvider getQuickLinks={props.getQuickLinks} withPanel>
|
|
308
|
+
<TraceViewerTimeline withPanel {...props}/>
|
|
309
|
+
</TraceViewerContextProvider>);
|
|
310
|
+
}
|
|
311
|
+
//# sourceMappingURL=trace-viewer.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace-viewer.jsx","sourceRoot":"","sources":["../../src/trace-viewer/trace-viewer.tsx"],"names":[],"mappings":"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"}
|