@workflow/web-shared 4.0.1-beta.10

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