@workflow/web-shared 5.0.0-beta.35 → 5.0.0-beta.36
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/dist/components/new-trace-viewer/components/event-list.d.ts.map +1 -1
- package/dist/components/new-trace-viewer/components/event-list.js +10 -7
- package/dist/components/new-trace-viewer/components/split-pane.d.ts.map +1 -1
- package/dist/components/new-trace-viewer/components/split-pane.js +5 -5
- package/dist/components/new-trace-viewer/components/timeline.d.ts +8 -2
- package/dist/components/new-trace-viewer/components/timeline.d.ts.map +1 -1
- package/dist/components/new-trace-viewer/components/timeline.js +95 -26
- package/dist/components/new-trace-viewer/components/trace-shortcut-helper.js +2 -2
- package/dist/components/new-trace-viewer/trace-viewer.d.ts.map +1 -1
- package/dist/components/new-trace-viewer/trace-viewer.js +14 -11
- package/dist/components/new-trace-viewer/utils.d.ts +29 -0
- package/dist/components/new-trace-viewer/utils.d.ts.map +1 -1
- package/dist/components/new-trace-viewer/utils.js +46 -3
- package/package.json +4 -4
- package/src/components/new-trace-viewer/components/event-list.tsx +21 -11
- package/src/components/new-trace-viewer/components/split-pane.tsx +14 -4
- package/src/components/new-trace-viewer/components/timeline.tsx +158 -47
- package/src/components/new-trace-viewer/components/trace-shortcut-helper.tsx +1 -1
- package/src/components/new-trace-viewer/trace-viewer.tsx +44 -38
- package/src/components/new-trace-viewer/utils.test.ts +199 -0
- package/src/components/new-trace-viewer/utils.ts +79 -2
|
@@ -174,6 +174,11 @@ export interface SpanGap {
|
|
|
174
174
|
rowIndex: number;
|
|
175
175
|
}
|
|
176
176
|
|
|
177
|
+
/** Project an absolute time onto the viewport as a clamped [0, 1] fraction. */
|
|
178
|
+
function toViewportFrac(ms: number, viewStart: number, range: number): number {
|
|
179
|
+
return Math.min(Math.max((ms - viewStart) / range, 0), 1);
|
|
180
|
+
}
|
|
181
|
+
|
|
177
182
|
export function computeSpanGaps(
|
|
178
183
|
spans: Span[],
|
|
179
184
|
viewStart: number,
|
|
@@ -189,8 +194,8 @@ export function computeSpanGaps(
|
|
|
189
194
|
const gapMs = startTime - endTime;
|
|
190
195
|
if (gapMs <= 0) continue;
|
|
191
196
|
|
|
192
|
-
const leftFrac =
|
|
193
|
-
const rightFrac =
|
|
197
|
+
const leftFrac = toViewportFrac(endTime, viewStart, range);
|
|
198
|
+
const rightFrac = toViewportFrac(startTime, viewStart, range);
|
|
194
199
|
if (rightFrac - leftFrac < 0.001) continue;
|
|
195
200
|
|
|
196
201
|
gaps.push({ gapMs, leftFrac, rightFrac, rowIndex: i });
|
|
@@ -198,6 +203,78 @@ export function computeSpanGaps(
|
|
|
198
203
|
return gaps;
|
|
199
204
|
}
|
|
200
205
|
|
|
206
|
+
export interface SpanDelta {
|
|
207
|
+
/** True measured time between the two spans, unaffected by clamping. */
|
|
208
|
+
deltaMs: number;
|
|
209
|
+
/** Viewport-clamped fraction of the anchor span's measured edge. */
|
|
210
|
+
anchorFrac: number;
|
|
211
|
+
/** Viewport-clamped fraction of the hovered span's measured edge. */
|
|
212
|
+
hoveredFrac: number;
|
|
213
|
+
/**
|
|
214
|
+
* Which edge of the anchor span the measurement runs from: its end when the
|
|
215
|
+
* spans are disjoint and the anchor comes first, otherwise its start.
|
|
216
|
+
*/
|
|
217
|
+
anchorEdge: 'start' | 'end';
|
|
218
|
+
/**
|
|
219
|
+
* Set when the hovered span lies entirely outside the viewport on one side,
|
|
220
|
+
* i.e. its row renders an off-screen arrow the line should stop short of.
|
|
221
|
+
*/
|
|
222
|
+
hoveredOffscreen: 'left' | 'right' | null;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* Measure the temporal delta between an anchor (selected) span and a hovered
|
|
227
|
+
* span for the Alt+hover measurement overlay. Ordering the two spans by start
|
|
228
|
+
* time (E = earlier-starting, L = later-starting), the measurement runs to
|
|
229
|
+
* L's start from E's end when the spans are disjoint ("how long after E ended
|
|
230
|
+
* did L start"), or from E's start when they overlap ("how long after E
|
|
231
|
+
* started did L start"). Fractions are clamped to the viewport like
|
|
232
|
+
* `computeSpanGaps`; `deltaMs` is always the true duration. Returns null when
|
|
233
|
+
* the measurement lies entirely outside the viewport.
|
|
234
|
+
*/
|
|
235
|
+
export function computeSpanDelta(
|
|
236
|
+
anchor: Span,
|
|
237
|
+
hovered: Span,
|
|
238
|
+
viewStart: number,
|
|
239
|
+
viewEnd: number
|
|
240
|
+
): SpanDelta | null {
|
|
241
|
+
const range = viewEnd - viewStart;
|
|
242
|
+
if (range <= 0) return null;
|
|
243
|
+
|
|
244
|
+
const anchorStart = getHighResInMs(anchor.startTime);
|
|
245
|
+
const hoveredStart = getHighResInMs(hovered.startTime);
|
|
246
|
+
const anchorIsEarlier = anchorStart <= hoveredStart;
|
|
247
|
+
const earlierStart = anchorIsEarlier ? anchorStart : hoveredStart;
|
|
248
|
+
const earlierEnd = getHighResInMs(
|
|
249
|
+
anchorIsEarlier ? anchor.endTime : hovered.endTime
|
|
250
|
+
);
|
|
251
|
+
const laterStart = anchorIsEarlier ? hoveredStart : anchorStart;
|
|
252
|
+
|
|
253
|
+
const originMs = earlierEnd <= laterStart ? earlierEnd : earlierStart;
|
|
254
|
+
const deltaMs = laterStart - originMs;
|
|
255
|
+
|
|
256
|
+
// Entirely outside the viewport. Compared in time-space (not clamped
|
|
257
|
+
// fractions) so a zero-delta point sitting exactly on a viewport edge —
|
|
258
|
+
// e.g. the root span selected at default zoom — still renders.
|
|
259
|
+
if (laterStart < viewStart || originMs > viewEnd) {
|
|
260
|
+
return null;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
const originFrac = toViewportFrac(originMs, viewStart, range);
|
|
264
|
+
const laterFrac = toViewportFrac(laterStart, viewStart, range);
|
|
265
|
+
|
|
266
|
+
const hoveredEnd = getHighResInMs(hovered.endTime);
|
|
267
|
+
|
|
268
|
+
return {
|
|
269
|
+
deltaMs,
|
|
270
|
+
anchorFrac: anchorIsEarlier ? originFrac : laterFrac,
|
|
271
|
+
hoveredFrac: anchorIsEarlier ? laterFrac : originFrac,
|
|
272
|
+
anchorEdge: anchorIsEarlier && earlierEnd <= laterStart ? 'end' : 'start',
|
|
273
|
+
hoveredOffscreen:
|
|
274
|
+
hoveredStart > viewEnd ? 'right' : hoveredEnd < viewStart ? 'left' : null,
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
|
|
201
278
|
// ---------------------------------------------------------------------------
|
|
202
279
|
// Resource colors
|
|
203
280
|
// ---------------------------------------------------------------------------
|