@workflow/web 5.0.0-beta.27 → 5.0.0-beta.29
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/build/client/assets/arrow-up-right-nUJMbeWN.js +15 -0
- package/build/client/assets/{encryption-BQTnudEZ.js → encryption-CLVP4klT.js} +2 -2
- package/build/client/assets/{entry.client-DOJDY_4b.js → entry.client-Q4eUIqMI.js} +25 -25
- package/build/client/assets/{highlighted-body-B3W2YXNL-B-EF8R0t.js → highlighted-body-B3W2YXNL-_4bJAUnT.js} +2 -2
- package/build/client/assets/{home-DQkixJk4.js → home-W4Ja_rr1.js} +1698 -234
- package/build/client/assets/{index-C7C6cDW5.js → index-HqNj_XIX.js} +10 -10
- package/build/client/assets/{index-BXZSIDEp.js → index-Q81MFBxC.js} +22 -22
- package/build/client/assets/{index-ConSkUmc.js → index-STTN0-2V.js} +1 -1
- package/build/client/assets/manifest-56b6d9e0.js +1 -0
- package/build/client/assets/{mermaid-3ZIDBTTL-aixonSAh.js → mermaid-3ZIDBTTL-BfwKRFTU.js} +404 -77
- package/build/client/assets/{root-CsCdj08f.js → root-DOkL1_-J.js} +5 -15
- package/build/client/assets/root-okIQN2A_.css +1 -0
- package/build/client/assets/{run-detail-CCsVqid_.js → run-detail-CRleiBxx.js} +116 -195
- package/build/client/assets/server-build-H39y96IB.css +1 -0
- package/build/client/assets/{workflow-graph-viewer-BlPvo_5I.js → workflow-graph-viewer-CvsdACR5.js} +224 -199
- package/build/client/assets/{zstd-browser-decoder-RyHgsNO3.js → zstd-browser-decoder-bX851D8O.js} +3 -3
- package/build/server/assets/{app-kYNGZFkW.js → app-jsOjV9W7.js} +43 -43
- package/build/server/assets/{highlighted-body-B3W2YXNL-D1QWoqJB.js → highlighted-body-B3W2YXNL-DpTmbI4L.js} +4 -4
- package/build/server/assets/{index-BafExO0s.js → index-BfLBLRRi.js} +10 -10
- package/build/server/assets/{index-fWQcXKhC.js → index-CJPCT6Jd.js} +5 -5
- package/build/server/assets/{mermaid-3ZIDBTTL-BOh-zwwU.js → mermaid-3ZIDBTTL-Dl6hRpcE.js} +4 -4
- package/build/server/assets/{server-build-B21fZEey.js → server-build-BRxoSdNU.js} +39298 -37117
- package/build/server/assets/{token-DmIqmbeU.js → token-BqP-cpRD.js} +2 -2
- package/build/server/assets/{token-util-D4JYdrFc.js → token-util-DaPlIe_a.js} +2 -2
- package/build/server/assets/{zstd-browser-decoder-DgO7NCG6.js → zstd-browser-decoder-Cyb8--z9.js} +5 -5
- package/build/server/index.js +1 -1
- package/package.json +10 -8
- package/build/client/assets/manifest-ce6dd06d.js +0 -1
- package/build/client/assets/root-BlaSucTH.css +0 -1
- package/build/client/assets/server-build-DPrKlhgf.css +0 -1
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/encryption-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/encryption-CLVP4klT.js","assets/index-STTN0-2V.js","assets/index-Q81MFBxC.js","assets/zstd-browser-decoder-bX851D8O.js","assets/highlighted-body-B3W2YXNL-_4bJAUnT.js"])))=>i.map(i=>d[i]);
|
|
2
2
|
var __defProp = Object.defineProperty;
|
|
3
3
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
4
4
|
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
5
5
|
var _a2, _b;
|
|
6
|
-
import { r as reactExports, j as jsxRuntimeExports,
|
|
6
|
+
import { r as reactExports, j as jsxRuntimeExports, p as reactDomExports, I as React, G as ReactDOM, R as ReactExports, g as getDefaultExportFromCjs } from "./index-Q81MFBxC.js";
|
|
7
7
|
function composeEventHandlers(originalEventHandler, ourEventHandler, { checkForDefaultPrevented = true } = {}) {
|
|
8
8
|
return function handleEvent(event) {
|
|
9
9
|
originalEventHandler == null ? void 0 : originalEventHandler(event);
|
|
@@ -10542,7 +10542,7 @@ async function hydrateDataWithKey(value, revivers, key) {
|
|
|
10542
10542
|
let data = value;
|
|
10543
10543
|
if (data instanceof Uint8Array && isEncryptedData(data) && key) {
|
|
10544
10544
|
const { decrypt } = await __vitePreload(async () => {
|
|
10545
|
-
const { decrypt: decrypt2 } = await import("./encryption-
|
|
10545
|
+
const { decrypt: decrypt2 } = await import("./encryption-CLVP4klT.js");
|
|
10546
10546
|
return { decrypt: decrypt2 };
|
|
10547
10547
|
}, true ? __vite__mapDeps([0,1,2]) : void 0);
|
|
10548
10548
|
const { payload } = decodeFormatPrefix(data);
|
|
@@ -15504,6 +15504,22 @@ const BaseEventSchema = object({
|
|
|
15504
15504
|
correlationId: string$2().optional(),
|
|
15505
15505
|
specVersion: number$3().optional()
|
|
15506
15506
|
});
|
|
15507
|
+
const stepLatencyTelemetryFields = {
|
|
15508
|
+
// Time-to-first-step: milliseconds from run creation until the run's first
|
|
15509
|
+
// step body began executing, minus time spent committing hook_created
|
|
15510
|
+
// events. Only reported when nothing else (hooks received, waits,
|
|
15511
|
+
// attributes, other steps) happened before the first step.
|
|
15512
|
+
ttfs: number$3().optional(),
|
|
15513
|
+
// Step-to-step overhead: milliseconds between the previous step's terminal
|
|
15514
|
+
// event and this step's body beginning to execute. Only reported when the
|
|
15515
|
+
// two steps ran back-to-back (the previous event-log entry is a
|
|
15516
|
+
// step_completed/step_failed).
|
|
15517
|
+
stso: number$3().optional(),
|
|
15518
|
+
// Names of the runtime's optional startup-latency optimizations that were
|
|
15519
|
+
// active for this measurement (e.g. 'turbo', 'lazyStepStart',
|
|
15520
|
+
// 'optimisticStart'), so latency metrics can be segmented by them.
|
|
15521
|
+
optimizations: array(string$2()).optional()
|
|
15522
|
+
};
|
|
15507
15523
|
const StepCompletedEventSchema = BaseEventSchema.extend({
|
|
15508
15524
|
eventType: literal("step_completed"),
|
|
15509
15525
|
correlationId: string$2(),
|
|
@@ -15513,7 +15529,8 @@ const StepCompletedEventSchema = BaseEventSchema.extend({
|
|
|
15513
15529
|
// the key without an extra run lookup on this hot per-step write.
|
|
15514
15530
|
// Optional: older runtimes omit it and the backend falls back to a read.
|
|
15515
15531
|
workflowName: string$2().optional(),
|
|
15516
|
-
result: SerializedDataSchema
|
|
15532
|
+
result: SerializedDataSchema,
|
|
15533
|
+
...stepLatencyTelemetryFields
|
|
15517
15534
|
})
|
|
15518
15535
|
});
|
|
15519
15536
|
const StepFailedEventSchema = BaseEventSchema.extend({
|
|
@@ -15523,7 +15540,8 @@ const StepFailedEventSchema = BaseEventSchema.extend({
|
|
|
15523
15540
|
stepName: string$2().optional(),
|
|
15524
15541
|
// The thrown value, serialized via the workflow serialization pipeline.
|
|
15525
15542
|
// Can be any JavaScript value (string, number, object, Error, etc.)
|
|
15526
|
-
error: SerializedDataSchema
|
|
15543
|
+
error: SerializedDataSchema,
|
|
15544
|
+
...stepLatencyTelemetryFields
|
|
15527
15545
|
})
|
|
15528
15546
|
});
|
|
15529
15547
|
const StepRetryingEventSchema = BaseEventSchema.extend({
|
|
@@ -15670,7 +15688,13 @@ const RunFailedEventSchema = BaseEventSchema.extend({
|
|
|
15670
15688
|
})
|
|
15671
15689
|
});
|
|
15672
15690
|
const RunCancelledEventSchema = BaseEventSchema.extend({
|
|
15673
|
-
eventType: literal("run_cancelled")
|
|
15691
|
+
eventType: literal("run_cancelled"),
|
|
15692
|
+
eventData: object({
|
|
15693
|
+
// Optional free-text reason for the cancellation. Kept as small
|
|
15694
|
+
// plaintext metadata (like run_failed's errorCode) so it survives
|
|
15695
|
+
// resolveData: 'none' and can be displayed without decryption.
|
|
15696
|
+
cancelReason: string$2().max(512).optional()
|
|
15697
|
+
}).optional()
|
|
15674
15698
|
});
|
|
15675
15699
|
discriminatedUnion("eventType", [
|
|
15676
15700
|
// Run lifecycle events
|
|
@@ -16375,12 +16399,12 @@ async function hydrateResourceIOAsync(resource, key) {
|
|
|
16375
16399
|
return { hydrateDataWithKey: hydrateDataWithKey3 };
|
|
16376
16400
|
}, true ? void 0 : void 0);
|
|
16377
16401
|
const { ensureZstdDecoderRegistered } = await __vitePreload(async () => {
|
|
16378
|
-
const { ensureZstdDecoderRegistered: ensureZstdDecoderRegistered2 } = await import("./zstd-browser-decoder-
|
|
16402
|
+
const { ensureZstdDecoderRegistered: ensureZstdDecoderRegistered2 } = await import("./zstd-browser-decoder-bX851D8O.js");
|
|
16379
16403
|
return { ensureZstdDecoderRegistered: ensureZstdDecoderRegistered2 };
|
|
16380
16404
|
}, true ? __vite__mapDeps([3,2]) : void 0);
|
|
16381
16405
|
ensureZstdDecoderRegistered();
|
|
16382
16406
|
const cryptoKey = key ? await __vitePreload(async () => {
|
|
16383
|
-
const { importKey } = await import("./encryption-
|
|
16407
|
+
const { importKey } = await import("./encryption-CLVP4klT.js");
|
|
16384
16408
|
return { importKey };
|
|
16385
16409
|
}, true ? __vite__mapDeps([0,1,2]) : void 0).then(({ importKey }) => importKey(key)) : void 0;
|
|
16386
16410
|
const revivers = getRevivers();
|
|
@@ -17522,26 +17546,26 @@ const ToastContext = reactExports.createContext(defaultAdapter);
|
|
|
17522
17546
|
function useToast() {
|
|
17523
17547
|
return reactExports.useContext(ToastContext);
|
|
17524
17548
|
}
|
|
17525
|
-
const MS_IN_SECOND = 1e3;
|
|
17526
|
-
const MS_IN_MINUTE = 60 * MS_IN_SECOND;
|
|
17549
|
+
const MS_IN_SECOND$1 = 1e3;
|
|
17550
|
+
const MS_IN_MINUTE = 60 * MS_IN_SECOND$1;
|
|
17527
17551
|
const MS_IN_HOUR = 60 * MS_IN_MINUTE;
|
|
17528
17552
|
const MS_IN_DAY = 24 * MS_IN_HOUR;
|
|
17529
17553
|
function formatDuration(ms, compact = false) {
|
|
17530
17554
|
if (ms === 0) {
|
|
17531
17555
|
return "0s";
|
|
17532
17556
|
}
|
|
17533
|
-
if (ms < MS_IN_SECOND) {
|
|
17557
|
+
if (ms < MS_IN_SECOND$1) {
|
|
17534
17558
|
const roundedMs2 = Math.round(ms);
|
|
17535
|
-
return roundedMs2 < MS_IN_SECOND ? `${roundedMs2}ms` : "1s";
|
|
17559
|
+
return roundedMs2 < MS_IN_SECOND$1 ? `${roundedMs2}ms` : "1s";
|
|
17536
17560
|
}
|
|
17537
|
-
const roundedMs = Math.round(ms / MS_IN_SECOND) * MS_IN_SECOND;
|
|
17561
|
+
const roundedMs = Math.round(ms / MS_IN_SECOND$1) * MS_IN_SECOND$1;
|
|
17538
17562
|
if (roundedMs < MS_IN_MINUTE) {
|
|
17539
|
-
return `${Math.floor(roundedMs / MS_IN_SECOND)}s`;
|
|
17563
|
+
return `${Math.floor(roundedMs / MS_IN_SECOND$1)}s`;
|
|
17540
17564
|
}
|
|
17541
17565
|
if (compact) {
|
|
17542
17566
|
if (roundedMs < MS_IN_HOUR) {
|
|
17543
17567
|
const m3 = Math.floor(roundedMs / MS_IN_MINUTE);
|
|
17544
|
-
const s2 = Math.floor(roundedMs % MS_IN_MINUTE / MS_IN_SECOND);
|
|
17568
|
+
const s2 = Math.floor(roundedMs % MS_IN_MINUTE / MS_IN_SECOND$1);
|
|
17545
17569
|
return s2 > 0 ? `${m3}m ${s2}s` : `${m3}m`;
|
|
17546
17570
|
}
|
|
17547
17571
|
const h2 = Math.floor(roundedMs / MS_IN_HOUR);
|
|
@@ -17551,7 +17575,7 @@ function formatDuration(ms, compact = false) {
|
|
|
17551
17575
|
const days = Math.floor(roundedMs / MS_IN_DAY);
|
|
17552
17576
|
const hours = Math.floor(roundedMs % MS_IN_DAY / MS_IN_HOUR);
|
|
17553
17577
|
const minutes = Math.floor(roundedMs % MS_IN_HOUR / MS_IN_MINUTE);
|
|
17554
|
-
const seconds = Math.floor(roundedMs % MS_IN_MINUTE / MS_IN_SECOND);
|
|
17578
|
+
const seconds = Math.floor(roundedMs % MS_IN_MINUTE / MS_IN_SECOND$1);
|
|
17555
17579
|
const parts = [];
|
|
17556
17580
|
if (days > 0) {
|
|
17557
17581
|
parts.push(`${days}d`);
|
|
@@ -17565,28 +17589,25 @@ function formatDuration(ms, compact = false) {
|
|
|
17565
17589
|
parts.push(`${seconds}s`);
|
|
17566
17590
|
return parts.join(" ");
|
|
17567
17591
|
}
|
|
17568
|
-
|
|
17569
|
-
minimumFractionDigits: 2,
|
|
17570
|
-
maximumFractionDigits: 2
|
|
17571
|
-
});
|
|
17572
|
-
function formatDurationPrecise(ms) {
|
|
17592
|
+
function formatDurationPrecise(ms, fractionDigits = 2) {
|
|
17573
17593
|
if (ms === 0) {
|
|
17574
17594
|
return "0s";
|
|
17575
17595
|
}
|
|
17576
|
-
if (ms < MS_IN_SECOND) {
|
|
17596
|
+
if (ms < MS_IN_SECOND$1) {
|
|
17577
17597
|
const roundedMs = Math.round(ms);
|
|
17578
|
-
if (roundedMs < MS_IN_SECOND) {
|
|
17598
|
+
if (roundedMs < MS_IN_SECOND$1) {
|
|
17579
17599
|
return `${roundedMs}ms`;
|
|
17580
17600
|
}
|
|
17581
17601
|
}
|
|
17582
|
-
const
|
|
17602
|
+
const granularityMs = MS_IN_SECOND$1 / 10 ** fractionDigits;
|
|
17603
|
+
const normalizedMs = Math.round(ms / granularityMs) * granularityMs;
|
|
17583
17604
|
if (normalizedMs < MS_IN_MINUTE) {
|
|
17584
|
-
return `${
|
|
17605
|
+
return `${Number((normalizedMs / MS_IN_SECOND$1).toFixed(fractionDigits))}s`;
|
|
17585
17606
|
}
|
|
17586
17607
|
const days = Math.floor(normalizedMs / MS_IN_DAY);
|
|
17587
17608
|
const hours = Math.floor(normalizedMs % MS_IN_DAY / MS_IN_HOUR);
|
|
17588
17609
|
const minutes = Math.floor(normalizedMs % MS_IN_HOUR / MS_IN_MINUTE);
|
|
17589
|
-
const seconds = normalizedMs % MS_IN_MINUTE / MS_IN_SECOND;
|
|
17610
|
+
const seconds = normalizedMs % MS_IN_MINUTE / MS_IN_SECOND$1;
|
|
17590
17611
|
const parts = [];
|
|
17591
17612
|
if (days > 0) {
|
|
17592
17613
|
parts.push(`${days}d`);
|
|
@@ -17597,7 +17618,7 @@ function formatDurationPrecise(ms) {
|
|
|
17597
17618
|
if (minutes > 0) {
|
|
17598
17619
|
parts.push(`${minutes}m`);
|
|
17599
17620
|
}
|
|
17600
|
-
parts.push(`${
|
|
17621
|
+
parts.push(`${Number(seconds.toFixed(fractionDigits))}s`);
|
|
17601
17622
|
return parts.join(" ");
|
|
17602
17623
|
}
|
|
17603
17624
|
function isDoStreamStep(stepName) {
|
|
@@ -43940,7 +43961,7 @@ var tn = f("block", "before:content-[counter(line)]", "before:inline-block", "be
|
|
|
43940
43961
|
var et = ({ className: e, language: t, style: o, isIncomplete: n, ...s2 }) => jsxRuntimeExports.jsx("div", { className: f("my-4 flex w-full flex-col gap-2 rounded-xl border border-border bg-sidebar p-2", e), "data-incomplete": n || void 0, "data-language": t, "data-streamdown": "code-block", style: { contentVisibility: "auto", containIntrinsicSize: "auto 200px", ...o }, ...s2 });
|
|
43941
43962
|
var Se = reactExports.createContext({ code: "" }), de = () => reactExports.useContext(Se);
|
|
43942
43963
|
var ot = ({ language: e }) => jsxRuntimeExports.jsx("div", { className: "flex h-8 items-center text-muted-foreground text-xs", "data-language": e, "data-streamdown": "code-block-header", children: jsxRuntimeExports.jsx("span", { className: "ml-1 font-mono lowercase", children: e }) });
|
|
43943
|
-
var cn$1 = /\n+$/, dn = reactExports.lazy(() => __vitePreload(() => import("./highlighted-body-B3W2YXNL-
|
|
43964
|
+
var cn$1 = /\n+$/, dn = reactExports.lazy(() => __vitePreload(() => import("./highlighted-body-B3W2YXNL-_4bJAUnT.js"), true ? __vite__mapDeps([4,2]) : void 0).then((e) => ({ default: e.HighlightedCodeBlockBody }))), rt = ({ code: e, language: t, className: o, children: n, isIncomplete: s2 = false, ...r2 }) => {
|
|
43944
43965
|
let i = reactExports.useMemo(() => e.replace(cn$1, ""), [e]), c = reactExports.useMemo(() => ({ bg: "transparent", fg: "inherit", tokens: i.split(`
|
|
43945
43966
|
`).map((a2) => [{ content: a2, color: "inherit", bgColor: "transparent", htmlStyle: {}, offset: 0 }]) }), [i]);
|
|
43946
43967
|
return jsxRuntimeExports.jsx(Se.Provider, { value: { code: e }, children: jsxRuntimeExports.jsxs(et, { isIncomplete: s2, language: t, children: [jsxRuntimeExports.jsx(ot, { language: t }), n ? jsxRuntimeExports.jsx("div", { className: "pointer-events-none sticky top-2 z-10 -mt-10 flex h-8 items-center justify-end", children: jsxRuntimeExports.jsx("div", { className: "pointer-events-auto flex shrink-0 items-center gap-2 rounded-md border border-sidebar bg-sidebar/80 px-1.5 py-1 supports-[backdrop-filter]:bg-sidebar/70 supports-[backdrop-filter]:backdrop-blur", "data-streamdown": "code-block-actions", children: n }) }) : null, jsxRuntimeExports.jsx(reactExports.Suspense, { fallback: jsxRuntimeExports.jsx(Qe, { className: o, language: t, result: c, ...r2 }), children: jsxRuntimeExports.jsx(dn, { className: o, code: i, language: t, raw: c, ...r2 }) })] }) });
|
|
@@ -46198,6 +46219,26 @@ function computeRootBounds(spans) {
|
|
|
46198
46219
|
function getSpanDurationMs(span) {
|
|
46199
46220
|
return Math.max(0, getHighResInMs(span.endTime) - getHighResInMs(span.startTime));
|
|
46200
46221
|
}
|
|
46222
|
+
function isSpanErrored(span) {
|
|
46223
|
+
var _a3;
|
|
46224
|
+
const workflowStatus = (_a3 = span.attributes.data) == null ? void 0 : _a3.status;
|
|
46225
|
+
return span.status.code === 2 || workflowStatus === "failed";
|
|
46226
|
+
}
|
|
46227
|
+
function clampViewportToRoot(next2, rootStart, rootEnd, minDurationMs) {
|
|
46228
|
+
const rootDuration = Math.max(rootEnd - rootStart, minDurationMs);
|
|
46229
|
+
const duration2 = Math.min(rootDuration, Math.max(minDurationMs, next2.end - next2.start));
|
|
46230
|
+
const maxStart = rootEnd - duration2;
|
|
46231
|
+
const start = Math.min(Math.max(next2.start, rootStart), maxStart);
|
|
46232
|
+
return { start, end: start + duration2 };
|
|
46233
|
+
}
|
|
46234
|
+
function wheelDeltaToPixels(delta, deltaMode) {
|
|
46235
|
+
return deltaMode === 1 ? delta * 16 : delta;
|
|
46236
|
+
}
|
|
46237
|
+
function wheelZoomScaleFactor(event) {
|
|
46238
|
+
const dy = wheelDeltaToPixels(event.deltaY, event.deltaMode);
|
|
46239
|
+
const isMouseWheel = event.deltaMode === 1 || Math.abs(event.deltaY) >= 50;
|
|
46240
|
+
return 2 ** (dy / (isMouseWheel ? 200 : 60));
|
|
46241
|
+
}
|
|
46201
46242
|
const NICE_INTERVALS = [
|
|
46202
46243
|
1,
|
|
46203
46244
|
2,
|
|
@@ -46231,6 +46272,7 @@ const NICE_INTERVALS = [
|
|
|
46231
46272
|
5e9
|
|
46232
46273
|
];
|
|
46233
46274
|
const MAX_MARKERS = 8;
|
|
46275
|
+
const MS_IN_SECOND = 1e3;
|
|
46234
46276
|
function pickInterval(viewDuration, maxTicks) {
|
|
46235
46277
|
for (const interval of NICE_INTERVALS) {
|
|
46236
46278
|
if (viewDuration / interval <= maxTicks)
|
|
@@ -46243,6 +46285,7 @@ function computeTimeMarkers(viewDuration, offset2) {
|
|
|
46243
46285
|
return [];
|
|
46244
46286
|
const maxTicks = 6;
|
|
46245
46287
|
const interval = pickInterval(viewDuration, maxTicks);
|
|
46288
|
+
const fractionDigits = interval >= MS_IN_SECOND ? 0 : Math.ceil(-Math.log10(interval / MS_IN_SECOND));
|
|
46246
46289
|
const firstTick = Math.ceil(offset2 / interval) * interval;
|
|
46247
46290
|
const markers2 = [];
|
|
46248
46291
|
for (let t = firstTick; t <= offset2 + viewDuration; t += interval) {
|
|
@@ -46251,7 +46294,7 @@ function computeTimeMarkers(viewDuration, offset2) {
|
|
|
46251
46294
|
continue;
|
|
46252
46295
|
markers2.push({
|
|
46253
46296
|
position: Math.min(Math.max(position2, 0), 1),
|
|
46254
|
-
label: formatDuration(Math.abs(t), true),
|
|
46297
|
+
label: fractionDigits === 0 ? formatDuration(Math.abs(t), true) : formatDurationPrecise(Math.abs(t), fractionDigits),
|
|
46255
46298
|
value: t
|
|
46256
46299
|
});
|
|
46257
46300
|
if (markers2.length >= MAX_MARKERS)
|
|
@@ -46767,7 +46810,6 @@ function SegmentBar({ segments, showLabels = true }) {
|
|
|
46767
46810
|
}) });
|
|
46768
46811
|
}
|
|
46769
46812
|
const TimelineBar = reactExports.memo(function TimelineBar2({ span, viewStart, viewDuration, containerWidth, isSelected, isDimmed, onSelect, onRevealTime }) {
|
|
46770
|
-
var _a3;
|
|
46771
46813
|
const startMs = getHighResInMs(span.startTime);
|
|
46772
46814
|
const endMs = getHighResInMs(span.endTime);
|
|
46773
46815
|
const totalDurationMs = getSpanDurationMs(span);
|
|
@@ -46778,8 +46820,7 @@ const TimelineBar = reactExports.memo(function TimelineBar2({ span, viewStart, v
|
|
|
46778
46820
|
const markers2 = reactExports.useMemo(() => geometry.mode.kind === "full" ? cullCollidingMarkers(projectMarkers(baseMarkers, geometry.visibleStartMs, geometry.visibleEndMs), geometry.visiblePixelWidth) : [], [geometry, baseMarkers]);
|
|
46779
46821
|
const offscreen = reactExports.useMemo(() => geometry.mode.kind === "full" ? computeOffscreenMarkers(baseMarkers, geometry.visibleStartMs, geometry.visibleEndMs) : { left: null, right: null }, [geometry, baseMarkers]);
|
|
46780
46822
|
const hasMarkers = markers2.length > 0 || offscreen.left !== null || offscreen.right !== null;
|
|
46781
|
-
const
|
|
46782
|
-
const isErrored = span.status.code === 2 || workflowStatus === "failed";
|
|
46823
|
+
const isErrored = isSpanErrored(span);
|
|
46783
46824
|
const colors = getResourceColor(span.resource);
|
|
46784
46825
|
const fallbackBg = isErrored ? colors.errorBg ?? "var(--ds-red-200)" : colors.bg;
|
|
46785
46826
|
const fallbackBorder = isErrored ? colors.errorBorder ?? "var(--ds-red-500)" : colors.border;
|
|
@@ -46828,8 +46869,285 @@ function Timeline({ spans, viewStart, viewEnd, markers: markers2, selectedId, se
|
|
|
46828
46869
|
return jsxRuntimeExports.jsxs("div", { ref: containerRef, className: "relative h-full overflow-hidden", style: { minHeight: spans.length * ROW_HEIGHT_PX }, children: [jsxRuntimeExports.jsx("div", { "aria-hidden": true, className: "absolute inset-y-0 pointer-events-none", style: TIMELINE_INSET_STYLE, children: markers2.map((marker2) => (
|
|
46829
46870
|
// Skip the "0s" origin marker since the left edge already implies it.
|
|
46830
46871
|
Math.abs(marker2.value) > 1e-6 ? jsxRuntimeExports.jsx("div", { className: "absolute top-0 bottom-0 w-px bg-gray-alpha-300", style: { left: `${marker2.position * 100}%` } }, String(marker2.value)) : null
|
|
46831
|
-
)) }), hoverFraction != null && jsxRuntimeExports.jsx("div", { className: "absolute inset-y-0 pointer-events-none z-10", style: TIMELINE_INSET_STYLE, children: jsxRuntimeExports.jsx("div", { className: "absolute top-0 bottom-0 w-px bg-gray-alpha-500", style: { left: `${hoverFraction * 100}%` } }) }), jsxRuntimeExports.jsx("div", { style: { transform: `translateY(${start * ROW_HEIGHT_PX}px)` }, children: spans.slice(start, end).map((span) => jsxRuntimeExports.jsx(TimelineBar, { span, viewStart, viewDuration, containerWidth: timelineWidth, isSelected: selectedId === span.spanId, isDimmed: isSpanDimmedBySearch(span.spanId, searchResult), onSelect, onRevealTime }, span.spanId)) }), altHeld && jsxRuntimeExports.jsx("div", { "aria-hidden": true, className: "absolute inset-y-0 pointer-events-none", style: TIMELINE_INSET_STYLE, children: gaps.map((gap) => jsxRuntimeExports.jsx(DeltaIndicator, { leftFrac: gap.leftFrac, rightFrac: gap.rightFrac, label:
|
|
46872
|
+
)) }), hoverFraction != null && jsxRuntimeExports.jsx("div", { className: "absolute inset-y-0 pointer-events-none z-10", style: TIMELINE_INSET_STYLE, children: jsxRuntimeExports.jsx("div", { className: "absolute top-0 bottom-0 w-px bg-gray-alpha-500", style: { left: `${hoverFraction * 100}%` } }) }), jsxRuntimeExports.jsx("div", { style: { transform: `translateY(${start * ROW_HEIGHT_PX}px)` }, children: spans.slice(start, end).map((span) => jsxRuntimeExports.jsx(TimelineBar, { span, viewStart, viewDuration, containerWidth: timelineWidth, isSelected: selectedId === span.spanId, isDimmed: isSpanDimmedBySearch(span.spanId, searchResult), onSelect, onRevealTime }, span.spanId)) }), altHeld && jsxRuntimeExports.jsx("div", { "aria-hidden": true, className: "absolute inset-y-0 pointer-events-none", style: TIMELINE_INSET_STYLE, children: gaps.map((gap) => jsxRuntimeExports.jsx(DeltaIndicator, { leftFrac: gap.leftFrac, rightFrac: gap.rightFrac, label: formatDurationPrecise(gap.gapMs), rowIndex: gap.rowIndex }, gap.rowIndex)) })] });
|
|
46873
|
+
}
|
|
46874
|
+
const CANVAS_PAD_Y_PX = 6;
|
|
46875
|
+
const MIN_LINE_HEIGHT_PX = 1.5;
|
|
46876
|
+
const MAX_LINE_HEIGHT_PX = 3;
|
|
46877
|
+
const MIN_LINE_WIDTH_PX = 2;
|
|
46878
|
+
const CLICK_DRAG_THRESHOLD_PX = 3;
|
|
46879
|
+
const MIN_BRUSH_WIDTH_PX = 6;
|
|
46880
|
+
const KEYBOARD_PAN_FRACTION = 0.1;
|
|
46881
|
+
const RESOURCE_LINE_TOKENS = {
|
|
46882
|
+
run: "--ds-blue-400",
|
|
46883
|
+
step: "--ds-green-400",
|
|
46884
|
+
hook: "--ds-gray-400",
|
|
46885
|
+
sleep: "--ds-gray-400"
|
|
46886
|
+
};
|
|
46887
|
+
const DEFAULT_LINE_TOKEN = "--ds-gray-400";
|
|
46888
|
+
const ERROR_LINE_TOKEN = "--ds-red-400";
|
|
46889
|
+
function computeDensityLayout(spans, rootStartMs, rootDurationMs, contentWidth, contentHeight) {
|
|
46890
|
+
const count2 = spans.length;
|
|
46891
|
+
const lineHeight = Math.max(MIN_LINE_HEIGHT_PX, Math.min(MAX_LINE_HEIGHT_PX, contentHeight / count2));
|
|
46892
|
+
const rowStep = count2 > 1 ? Math.min((contentHeight - lineHeight) / (count2 - 1), lineHeight + 1) : 0;
|
|
46893
|
+
const rectsByToken = /* @__PURE__ */ new Map();
|
|
46894
|
+
spans.forEach((span, index2) => {
|
|
46895
|
+
const token = isSpanErrored(span) ? ERROR_LINE_TOKEN : RESOURCE_LINE_TOKENS[span.resource] ?? DEFAULT_LINE_TOKEN;
|
|
46896
|
+
const startMs = getHighResInMs(span.startTime);
|
|
46897
|
+
const endMs = getHighResInMs(span.endTime);
|
|
46898
|
+
const x2 = TIMELINE_PADDING_PX + (startMs - rootStartMs) / rootDurationMs * contentWidth;
|
|
46899
|
+
const w2 = Math.max(MIN_LINE_WIDTH_PX, (endMs - startMs) / rootDurationMs * contentWidth);
|
|
46900
|
+
const y2 = CANVAS_PAD_Y_PX + index2 * rowStep;
|
|
46901
|
+
const rects = rectsByToken.get(token) ?? [];
|
|
46902
|
+
rects.push([x2, y2, w2]);
|
|
46903
|
+
rectsByToken.set(token, rects);
|
|
46904
|
+
});
|
|
46905
|
+
return { lineHeight, rectsByToken };
|
|
46832
46906
|
}
|
|
46907
|
+
function useDpr() {
|
|
46908
|
+
const [dpr, setDpr] = reactExports.useState(1);
|
|
46909
|
+
reactExports.useLayoutEffect(() => {
|
|
46910
|
+
const onChange = () => setDpr(window.devicePixelRatio || 1);
|
|
46911
|
+
const media = matchMedia(`(resolution: ${dpr}dppx)`);
|
|
46912
|
+
media.addEventListener("change", onChange);
|
|
46913
|
+
onChange();
|
|
46914
|
+
return () => media.removeEventListener("change", onChange);
|
|
46915
|
+
}, [dpr]);
|
|
46916
|
+
return dpr;
|
|
46917
|
+
}
|
|
46918
|
+
function useThemeVersion() {
|
|
46919
|
+
const [version2, setVersion] = reactExports.useState(0);
|
|
46920
|
+
reactExports.useEffect(() => {
|
|
46921
|
+
const observer = new MutationObserver(() => setVersion((v2) => v2 + 1));
|
|
46922
|
+
observer.observe(document.documentElement, {
|
|
46923
|
+
attributes: true,
|
|
46924
|
+
attributeFilter: ["class", "data-theme", "style"]
|
|
46925
|
+
});
|
|
46926
|
+
return () => observer.disconnect();
|
|
46927
|
+
}, []);
|
|
46928
|
+
return version2;
|
|
46929
|
+
}
|
|
46930
|
+
const Minimap = reactExports.memo(function Minimap2({ spans, root: root2, viewport, minViewportMs, onViewportChange, onAnimateTo }) {
|
|
46931
|
+
const { startTime: rootStartMs, endTime: rootEndMs, duration: rootDurationMs } = root2;
|
|
46932
|
+
const containerRef = reactExports.useRef(null);
|
|
46933
|
+
const canvasRef = reactExports.useRef(null);
|
|
46934
|
+
const dpr = useDpr();
|
|
46935
|
+
const themeVersion = useThemeVersion();
|
|
46936
|
+
const viewportRef = reactExports.useRef(viewport);
|
|
46937
|
+
viewportRef.current = viewport;
|
|
46938
|
+
const [drag, setDrag] = reactExports.useState(null);
|
|
46939
|
+
const [selection, setSelection] = reactExports.useState(null);
|
|
46940
|
+
const xToTime = reactExports.useCallback((x2, contentWidth) => {
|
|
46941
|
+
if (contentWidth <= 0)
|
|
46942
|
+
return rootStartMs;
|
|
46943
|
+
const fraction = (x2 - TIMELINE_PADDING_PX) / contentWidth;
|
|
46944
|
+
return Math.min(Math.max(rootStartMs + fraction * rootDurationMs, rootStartMs), rootEndMs);
|
|
46945
|
+
}, [rootStartMs, rootDurationMs, rootEndMs]);
|
|
46946
|
+
const clamp2 = reactExports.useCallback((next2) => clampViewportToRoot(next2, rootStartMs, rootEndMs, minViewportMs), [rootStartMs, rootEndMs, minViewportMs]);
|
|
46947
|
+
reactExports.useLayoutEffect(() => {
|
|
46948
|
+
const canvas = canvasRef.current;
|
|
46949
|
+
const container = containerRef.current;
|
|
46950
|
+
const ctx = canvas == null ? void 0 : canvas.getContext("2d");
|
|
46951
|
+
if (!canvas || !container || !ctx)
|
|
46952
|
+
return;
|
|
46953
|
+
const draw = () => {
|
|
46954
|
+
const width = canvas.clientWidth;
|
|
46955
|
+
const height = canvas.clientHeight;
|
|
46956
|
+
const contentWidth = width - TIMELINE_PADDING_PX * 2;
|
|
46957
|
+
if (width <= 0 || height <= 0 || contentWidth <= 0)
|
|
46958
|
+
return;
|
|
46959
|
+
canvas.width = Math.round(width * dpr);
|
|
46960
|
+
canvas.height = Math.round(height * dpr);
|
|
46961
|
+
ctx.scale(dpr, dpr);
|
|
46962
|
+
ctx.clearRect(0, 0, width, height);
|
|
46963
|
+
if (spans.length === 0 || rootDurationMs <= 0)
|
|
46964
|
+
return;
|
|
46965
|
+
const { lineHeight, rectsByToken } = computeDensityLayout(spans, rootStartMs, rootDurationMs, contentWidth, height - CANVAS_PAD_Y_PX * 2);
|
|
46966
|
+
const style2 = getComputedStyle(container);
|
|
46967
|
+
const drawToken = (token) => {
|
|
46968
|
+
const rects = rectsByToken.get(token);
|
|
46969
|
+
if (!rects)
|
|
46970
|
+
return;
|
|
46971
|
+
ctx.fillStyle = style2.getPropertyValue(token).trim() || "rgb(160,160,160)";
|
|
46972
|
+
ctx.beginPath();
|
|
46973
|
+
for (const [x2, y2, w2] of rects) {
|
|
46974
|
+
ctx.roundRect(x2, y2, w2, lineHeight, lineHeight / 2);
|
|
46975
|
+
}
|
|
46976
|
+
ctx.fill();
|
|
46977
|
+
};
|
|
46978
|
+
for (const token of rectsByToken.keys()) {
|
|
46979
|
+
if (token !== ERROR_LINE_TOKEN)
|
|
46980
|
+
drawToken(token);
|
|
46981
|
+
}
|
|
46982
|
+
drawToken(ERROR_LINE_TOKEN);
|
|
46983
|
+
};
|
|
46984
|
+
draw();
|
|
46985
|
+
const observer = new ResizeObserver(draw);
|
|
46986
|
+
observer.observe(container);
|
|
46987
|
+
return () => observer.disconnect();
|
|
46988
|
+
}, [spans, rootStartMs, rootDurationMs, dpr, themeVersion]);
|
|
46989
|
+
const pointerFrame = reactExports.useCallback((e) => {
|
|
46990
|
+
const rect = e.currentTarget.getBoundingClientRect();
|
|
46991
|
+
return {
|
|
46992
|
+
x: e.clientX - rect.left,
|
|
46993
|
+
cw: rect.width - TIMELINE_PADDING_PX * 2
|
|
46994
|
+
};
|
|
46995
|
+
}, []);
|
|
46996
|
+
const resolveDragState = reactExports.useCallback((target2, x2, cw) => {
|
|
46997
|
+
if (target2.closest('[data-minimap-handle="left"]')) {
|
|
46998
|
+
return { mode: "resize-left" };
|
|
46999
|
+
}
|
|
47000
|
+
if (target2.closest('[data-minimap-handle="right"]')) {
|
|
47001
|
+
return { mode: "resize-right" };
|
|
47002
|
+
}
|
|
47003
|
+
const { start, end } = viewportRef.current;
|
|
47004
|
+
const isFullExtent = start - rootStartMs < rootDurationMs * 1e-3 && rootEndMs - end < rootDurationMs * 1e-3;
|
|
47005
|
+
if (target2.closest("[data-minimap-brush]") && !isFullExtent) {
|
|
47006
|
+
return { mode: "pan", grabOffsetMs: xToTime(x2, cw) - start };
|
|
47007
|
+
}
|
|
47008
|
+
return { mode: "select", originX: x2, originMs: xToTime(x2, cw) };
|
|
47009
|
+
}, [xToTime, rootStartMs, rootDurationMs, rootEndMs]);
|
|
47010
|
+
const handlePointerDown = reactExports.useCallback((e) => {
|
|
47011
|
+
if (e.button !== 0)
|
|
47012
|
+
return;
|
|
47013
|
+
const { x: x2, cw } = pointerFrame(e);
|
|
47014
|
+
if (cw <= 0)
|
|
47015
|
+
return;
|
|
47016
|
+
e.currentTarget.setPointerCapture(e.pointerId);
|
|
47017
|
+
setDrag(resolveDragState(e.target, x2, cw));
|
|
47018
|
+
}, [pointerFrame, resolveDragState]);
|
|
47019
|
+
const handlePointerMove = reactExports.useCallback((e) => {
|
|
47020
|
+
if (!drag)
|
|
47021
|
+
return;
|
|
47022
|
+
const { x: x2, cw } = pointerFrame(e);
|
|
47023
|
+
const t = xToTime(x2, cw);
|
|
47024
|
+
const { start, end } = viewportRef.current;
|
|
47025
|
+
if (drag.mode === "pan") {
|
|
47026
|
+
const duration2 = end - start;
|
|
47027
|
+
onViewportChange(clamp2({
|
|
47028
|
+
start: t - drag.grabOffsetMs,
|
|
47029
|
+
end: t - drag.grabOffsetMs + duration2
|
|
47030
|
+
}));
|
|
47031
|
+
} else if (drag.mode === "resize-left") {
|
|
47032
|
+
onViewportChange({ start: Math.min(t, end - minViewportMs), end });
|
|
47033
|
+
} else if (drag.mode === "resize-right") {
|
|
47034
|
+
onViewportChange({ start, end: Math.max(t, start + minViewportMs) });
|
|
47035
|
+
} else if (selection || Math.abs(x2 - drag.originX) > CLICK_DRAG_THRESHOLD_PX) {
|
|
47036
|
+
setSelection({
|
|
47037
|
+
x0: Math.min(drag.originX, x2),
|
|
47038
|
+
x1: Math.max(drag.originX, x2)
|
|
47039
|
+
});
|
|
47040
|
+
}
|
|
47041
|
+
}, [
|
|
47042
|
+
drag,
|
|
47043
|
+
selection,
|
|
47044
|
+
pointerFrame,
|
|
47045
|
+
xToTime,
|
|
47046
|
+
onViewportChange,
|
|
47047
|
+
clamp2,
|
|
47048
|
+
minViewportMs
|
|
47049
|
+
]);
|
|
47050
|
+
const endDrag = reactExports.useCallback((e) => {
|
|
47051
|
+
if (!drag)
|
|
47052
|
+
return;
|
|
47053
|
+
if (drag.mode === "select") {
|
|
47054
|
+
const { x: x2, cw } = pointerFrame(e);
|
|
47055
|
+
const t = xToTime(x2, cw);
|
|
47056
|
+
if (selection) {
|
|
47057
|
+
onAnimateTo(clamp2({
|
|
47058
|
+
start: Math.min(drag.originMs, t),
|
|
47059
|
+
end: Math.max(drag.originMs, t)
|
|
47060
|
+
}));
|
|
47061
|
+
} else {
|
|
47062
|
+
const { start, end } = viewportRef.current;
|
|
47063
|
+
const duration2 = end - start;
|
|
47064
|
+
onAnimateTo(clamp2({ start: t - duration2 / 2, end: t + duration2 / 2 }));
|
|
47065
|
+
}
|
|
47066
|
+
}
|
|
47067
|
+
setSelection(null);
|
|
47068
|
+
setDrag(null);
|
|
47069
|
+
}, [drag, selection, pointerFrame, xToTime, onAnimateTo, clamp2]);
|
|
47070
|
+
const handleLostPointerCapture = reactExports.useCallback(() => {
|
|
47071
|
+
setSelection(null);
|
|
47072
|
+
setDrag(null);
|
|
47073
|
+
}, []);
|
|
47074
|
+
const handleDoubleClick = reactExports.useCallback(() => {
|
|
47075
|
+
onAnimateTo({ start: rootStartMs, end: rootEndMs });
|
|
47076
|
+
}, [onAnimateTo, rootStartMs, rootEndMs]);
|
|
47077
|
+
reactExports.useEffect(() => {
|
|
47078
|
+
const el = containerRef.current;
|
|
47079
|
+
if (!el || rootDurationMs <= 0)
|
|
47080
|
+
return;
|
|
47081
|
+
const zoomAtCursor = (e, cw, left) => {
|
|
47082
|
+
const scaleFactor = wheelZoomScaleFactor(e);
|
|
47083
|
+
const { start, end } = viewportRef.current;
|
|
47084
|
+
const duration2 = end - start;
|
|
47085
|
+
const cursorFraction = Math.min(Math.max((e.clientX - left - TIMELINE_PADDING_PX) / cw, 0), 1);
|
|
47086
|
+
const cursorMs = rootStartMs + cursorFraction * rootDurationMs;
|
|
47087
|
+
const anchor = Math.min(Math.max(duration2 > 0 ? (cursorMs - start) / duration2 : 0.5, 0), 1);
|
|
47088
|
+
const newDuration = duration2 * scaleFactor;
|
|
47089
|
+
onViewportChange(clamp2({
|
|
47090
|
+
start: cursorMs - anchor * newDuration,
|
|
47091
|
+
end: cursorMs + (1 - anchor) * newDuration
|
|
47092
|
+
}));
|
|
47093
|
+
};
|
|
47094
|
+
const panByMapPixels = (e, cw) => {
|
|
47095
|
+
const dx = wheelDeltaToPixels(e.deltaX, e.deltaMode);
|
|
47096
|
+
const panMs = dx / cw * rootDurationMs;
|
|
47097
|
+
const { start, end } = viewportRef.current;
|
|
47098
|
+
onViewportChange(clamp2({ start: start + panMs, end: end + panMs }));
|
|
47099
|
+
};
|
|
47100
|
+
const onWheel = (e) => {
|
|
47101
|
+
const isZoomGesture = e.ctrlKey || e.metaKey;
|
|
47102
|
+
const hasDeltaX = Math.abs(e.deltaX) > Math.abs(e.deltaY);
|
|
47103
|
+
if (!isZoomGesture && !hasDeltaX)
|
|
47104
|
+
return;
|
|
47105
|
+
e.preventDefault();
|
|
47106
|
+
const rect = el.getBoundingClientRect();
|
|
47107
|
+
const cw = rect.width - TIMELINE_PADDING_PX * 2;
|
|
47108
|
+
if (cw <= 0)
|
|
47109
|
+
return;
|
|
47110
|
+
if (isZoomGesture)
|
|
47111
|
+
zoomAtCursor(e, cw, rect.left);
|
|
47112
|
+
else
|
|
47113
|
+
panByMapPixels(e, cw);
|
|
47114
|
+
};
|
|
47115
|
+
el.addEventListener("wheel", onWheel, { passive: false });
|
|
47116
|
+
return () => el.removeEventListener("wheel", onWheel);
|
|
47117
|
+
}, [rootStartMs, rootDurationMs, onViewportChange, clamp2]);
|
|
47118
|
+
const handleKeyDown = reactExports.useCallback((e) => {
|
|
47119
|
+
const { start, end } = viewportRef.current;
|
|
47120
|
+
const duration2 = end - start;
|
|
47121
|
+
const pan = duration2 * KEYBOARD_PAN_FRACTION;
|
|
47122
|
+
if (e.key === "ArrowLeft") {
|
|
47123
|
+
onViewportChange(clamp2({ start: start - pan, end: end - pan }));
|
|
47124
|
+
} else if (e.key === "ArrowRight") {
|
|
47125
|
+
onViewportChange(clamp2({ start: start + pan, end: end + pan }));
|
|
47126
|
+
} else if (e.key === "Home") {
|
|
47127
|
+
onViewportChange(clamp2({ start: rootStartMs, end: rootStartMs + duration2 }));
|
|
47128
|
+
} else if (e.key === "End") {
|
|
47129
|
+
onViewportChange(clamp2({ start: rootEndMs - duration2, end: rootEndMs }));
|
|
47130
|
+
} else {
|
|
47131
|
+
return;
|
|
47132
|
+
}
|
|
47133
|
+
e.preventDefault();
|
|
47134
|
+
}, [onViewportChange, clamp2, rootStartMs, rootEndMs]);
|
|
47135
|
+
const startFraction = (viewport.start - rootStartMs) / rootDurationMs;
|
|
47136
|
+
const endFraction = (viewport.end - rootStartMs) / rootDurationMs;
|
|
47137
|
+
const trackWidth = `(100% - ${TIMELINE_PADDING_PX * 2}px)`;
|
|
47138
|
+
const brushStyle = {
|
|
47139
|
+
left: `calc(${TIMELINE_PADDING_PX}px + ${startFraction} * ${trackWidth})`,
|
|
47140
|
+
width: `max(${MIN_BRUSH_WIDTH_PX}px, calc(${endFraction - startFraction} * ${trackWidth}))`
|
|
47141
|
+
};
|
|
47142
|
+
const viewDuration = viewport.end - viewport.start;
|
|
47143
|
+
const scrollableMs = Math.max(rootDurationMs - viewDuration, 0);
|
|
47144
|
+
const scrollPercent = scrollableMs > 0 ? Math.round((viewport.start - rootStartMs) / scrollableMs * 100) : 0;
|
|
47145
|
+
return jsxRuntimeExports.jsxs("div", { ref: containerRef, className: cn$4("relative h-10 min-h-10 w-full border-b border-gray-alpha-400 bg-background-100 select-none overflow-hidden touch-none", (drag == null ? void 0 : drag.mode) === "select" && "cursor-crosshair"), onPointerDown: handlePointerDown, onPointerMove: handlePointerMove, onPointerUp: endDrag, onPointerCancel: endDrag, onLostPointerCapture: handleLostPointerCapture, onDoubleClick: handleDoubleClick, children: [jsxRuntimeExports.jsx("canvas", { ref: canvasRef, "aria-hidden": true, className: "pointer-events-none absolute inset-0 h-full w-full mix-blend-multiply [.dark-theme_&]:mix-blend-screen [.dark_&]:mix-blend-screen [[data-theme=dark]_&]:mix-blend-screen" }), selection ? jsxRuntimeExports.jsx("div", { "aria-hidden": true, className: "pointer-events-none absolute inset-y-0 border border-blue-500 bg-blue-300 opacity-40", style: { left: selection.x0, width: selection.x1 - selection.x0 } }) : null, jsxRuntimeExports.jsxs("div", { "data-minimap-brush": true, role: "scrollbar", "aria-controls": "trace-timeline", "aria-orientation": "horizontal", "aria-valuemin": 0, "aria-valuemax": 100, "aria-valuenow": scrollPercent, "aria-valuetext": `Viewing ${formatDurationPrecise(viewport.start - rootStartMs)} to ${formatDurationPrecise(viewport.end - rootStartMs)} of ${formatDurationPrecise(rootDurationMs)}`, "aria-label": "Timeline overview", tabIndex: 0, onKeyDown: handleKeyDown, className: cn$4(
|
|
47146
|
+
// Glass thumb, matching the legacy trace viewer's map window.
|
|
47147
|
+
"group/minimap-brush absolute top-0.5 bottom-0.5 rounded-[3px] border border-gray-alpha-400 bg-gray-alpha-200 shadow-sm focus-visible:outline focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-[var(--ds-focus-color)]",
|
|
47148
|
+
(drag == null ? void 0 : drag.mode) === "pan" ? "cursor-grabbing" : "cursor-grab"
|
|
47149
|
+
), style: brushStyle, children: [jsxRuntimeExports.jsx("div", { "data-minimap-handle": "left", className: "absolute inset-y-0 -left-1 flex w-2.5 cursor-ew-resize items-center justify-center", children: jsxRuntimeExports.jsx("span", { className: cn$4("h-3.5 w-[3px] rounded-full bg-gray-600 opacity-0 transition-opacity group-hover/minimap-brush:opacity-100 group-focus-visible/minimap-brush:opacity-100", drag && "opacity-100") }) }), jsxRuntimeExports.jsx("div", { "data-minimap-handle": "right", className: "absolute inset-y-0 -right-1 flex w-2.5 cursor-ew-resize items-center justify-center", children: jsxRuntimeExports.jsx("span", { className: cn$4("h-3.5 w-[3px] rounded-full bg-gray-600 opacity-0 transition-opacity group-hover/minimap-brush:opacity-100 group-focus-visible/minimap-brush:opacity-100", drag && "opacity-100") }) })] })] });
|
|
47150
|
+
});
|
|
46833
47151
|
const DEFAULT_PAGE_SIZE = 10;
|
|
46834
47152
|
function cn(...inputs) {
|
|
46835
47153
|
return twMerge(clsx(inputs));
|
|
@@ -49194,6 +49512,9 @@ async function fetchEventsByCorrelationId(worldEnv, correlationId, params) {
|
|
|
49194
49512
|
async function fetchHooks(worldEnv, params) {
|
|
49195
49513
|
return rpc("fetchHooks", { worldEnv, params });
|
|
49196
49514
|
}
|
|
49515
|
+
async function fetchHookToken(worldEnv, runId, hookId) {
|
|
49516
|
+
return rpc("fetchHookToken", { worldEnv, runId, hookId });
|
|
49517
|
+
}
|
|
49197
49518
|
async function fetchHook(worldEnv, hookId, resolveData = "all") {
|
|
49198
49519
|
return rpc("fetchHook", { worldEnv, hookId, resolveData });
|
|
49199
49520
|
}
|
|
@@ -49258,7 +49579,7 @@ export {
|
|
|
49258
49579
|
Button$1 as Z,
|
|
49259
49580
|
__vitePreload as _,
|
|
49260
49581
|
TooltipTrigger as a,
|
|
49261
|
-
|
|
49582
|
+
LIVE_UPDATE_INTERVAL_MS as a$,
|
|
49262
49583
|
Lock as a0,
|
|
49263
49584
|
CollapsibleRoot as a1,
|
|
49264
49585
|
CollapsibleTrigger as a2,
|
|
@@ -49269,33 +49590,33 @@ export {
|
|
|
49269
49590
|
Yr as a7,
|
|
49270
49591
|
isEncryptedMarker$1 as a8,
|
|
49271
49592
|
TimestampTooltip as a9,
|
|
49272
|
-
|
|
49273
|
-
|
|
49274
|
-
|
|
49275
|
-
|
|
49276
|
-
|
|
49277
|
-
|
|
49278
|
-
|
|
49279
|
-
|
|
49280
|
-
|
|
49281
|
-
|
|
49282
|
-
|
|
49283
|
-
|
|
49284
|
-
|
|
49285
|
-
|
|
49286
|
-
|
|
49287
|
-
|
|
49288
|
-
|
|
49289
|
-
|
|
49290
|
-
|
|
49291
|
-
|
|
49292
|
-
|
|
49293
|
-
|
|
49294
|
-
|
|
49295
|
-
|
|
49296
|
-
|
|
49297
|
-
|
|
49298
|
-
|
|
49593
|
+
useReducedMotion as aA,
|
|
49594
|
+
searchSpans as aB,
|
|
49595
|
+
computeRootBounds as aC,
|
|
49596
|
+
computeTimeMarkers as aD,
|
|
49597
|
+
clampViewportToRoot as aE,
|
|
49598
|
+
getHighResInMs as aF,
|
|
49599
|
+
scrollRowIntoView as aG,
|
|
49600
|
+
TIMELINE_PADDING_PX as aH,
|
|
49601
|
+
Minimap as aI,
|
|
49602
|
+
Timeline as aJ,
|
|
49603
|
+
TimelineHeader as aK,
|
|
49604
|
+
wheelZoomScaleFactor as aL,
|
|
49605
|
+
wheelDeltaToPixels as aM,
|
|
49606
|
+
SidebarDataProvider as aN,
|
|
49607
|
+
fetchHook as aO,
|
|
49608
|
+
hydrateResourceIOAsync as aP,
|
|
49609
|
+
fetchStep as aQ,
|
|
49610
|
+
hydrateResourceIO as aR,
|
|
49611
|
+
fetchStreams as aS,
|
|
49612
|
+
Slot as aT,
|
|
49613
|
+
Slottable as aU,
|
|
49614
|
+
buttonVariants as aV,
|
|
49615
|
+
fetchEvent as aW,
|
|
49616
|
+
fetchEventsByCorrelationId as aX,
|
|
49617
|
+
isEncryptedData as aY,
|
|
49618
|
+
hydrateData as aZ,
|
|
49619
|
+
getWebRevivers as a_,
|
|
49299
49620
|
formatDuration as aa,
|
|
49300
49621
|
_r as ab,
|
|
49301
49622
|
RunClickContext as ac,
|
|
@@ -49318,23 +49639,29 @@ export {
|
|
|
49318
49639
|
isSpanDimmedBySearch as at,
|
|
49319
49640
|
ROW_HEIGHT_PX as au,
|
|
49320
49641
|
getSpanDurationMs as av,
|
|
49321
|
-
|
|
49322
|
-
|
|
49323
|
-
|
|
49324
|
-
|
|
49642
|
+
isSpanErrored as aw,
|
|
49643
|
+
formatDurationPrecise as ax,
|
|
49644
|
+
TooltipProvider as ay,
|
|
49645
|
+
ActiveSpanProvider as az,
|
|
49325
49646
|
TooltipContent as b,
|
|
49326
|
-
|
|
49327
|
-
|
|
49328
|
-
|
|
49329
|
-
|
|
49330
|
-
|
|
49331
|
-
|
|
49332
|
-
|
|
49333
|
-
|
|
49334
|
-
|
|
49335
|
-
|
|
49336
|
-
|
|
49337
|
-
|
|
49647
|
+
getEncryptionKeyForRun as b0,
|
|
49648
|
+
StreamViewer as b1,
|
|
49649
|
+
composeRefs as b2,
|
|
49650
|
+
useFloating as b3,
|
|
49651
|
+
offset as b4,
|
|
49652
|
+
shift as b5,
|
|
49653
|
+
limitShift as b6,
|
|
49654
|
+
flip as b7,
|
|
49655
|
+
size as b8,
|
|
49656
|
+
arrow as b9,
|
|
49657
|
+
hide as ba,
|
|
49658
|
+
autoUpdate as bb,
|
|
49659
|
+
cancelRun as bc,
|
|
49660
|
+
reenqueueRun as bd,
|
|
49661
|
+
wakeUpRun as be,
|
|
49662
|
+
resumeHook as bf,
|
|
49663
|
+
fetchHookToken as bg,
|
|
49664
|
+
recreateRun as bh,
|
|
49338
49665
|
createLucideIcon as c,
|
|
49339
49666
|
runHealthCheck as d,
|
|
49340
49667
|
cn as e,
|