@workflow/web 5.0.0-beta.17 → 5.0.0-beta.19

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 (27) hide show
  1. package/build/client/assets/{highlighted-body-B3W2YXNL-QKf7Yrcl.js → highlighted-body-B3W2YXNL-BDAdDO0w.js} +1 -1
  2. package/build/client/assets/{home-C2tAadK2.js → home-CJauHJtz.js} +2 -2
  3. package/build/client/assets/index-C7C6cDW5.js +200 -0
  4. package/build/client/assets/{manifest-96e6bcc7.js → manifest-41c15b7c.js} +1 -1
  5. package/build/client/assets/{mermaid-3ZIDBTTL-DQJ4rkIZ.js → mermaid-3ZIDBTTL-CO5WTIpO.js} +554 -293
  6. package/build/client/assets/mermaid-3ZIDBTTL-DYmT7Gxj.css +1 -0
  7. package/build/client/assets/root-1hd8ZXAx.css +1 -0
  8. package/build/client/assets/{root-QCHdCGTF.js → root-YgrrwLRm.js} +1 -1
  9. package/build/client/assets/{run-detail-D4mcR51B.js → run-detail-QryL_6ec.js} +84 -156
  10. package/build/client/assets/server-build-NFow1VGe.css +1 -0
  11. package/build/client/assets/{workflow-graph-viewer-BEhdopGj.js → workflow-graph-viewer-DE9gHUqH.js} +1 -1
  12. package/build/client/assets/zstd-B5R2yJjB.wasm +0 -0
  13. package/build/client/assets/zstd-browser-decoder-Cf0Zee4U.js +27 -0
  14. package/build/server/assets/{app-BEmI6bFe.js → app-BPycGx4j.js} +1 -1
  15. package/build/server/assets/{highlighted-body-B3W2YXNL-B_a6Jc52.js → highlighted-body-B3W2YXNL-DOFGe_gB.js} +2 -2
  16. package/build/server/assets/index-C7C6cDW5.js +200 -0
  17. package/build/server/assets/{index-Bg5S_1qh.js → index-CjQDTwmY.js} +27 -26
  18. package/build/server/assets/{mermaid-3ZIDBTTL-C7y9g953.js → mermaid-3ZIDBTTL-CC2oHOb_.js} +2 -2
  19. package/build/server/assets/{server-build-B3KD951q.js → server-build-D2BAH5fL.js} +744 -318
  20. package/build/server/assets/{token-B95VJmzW.js → token-BuB8DbpT.js} +2 -2
  21. package/build/server/assets/{token-util-q0eyRDZK.js → token-util-bxOuz2AK.js} +2 -2
  22. package/build/server/assets/zstd-browser-decoder-D_rFps2o.js +64 -0
  23. package/build/server/index.js +1 -1
  24. package/package.json +5 -5
  25. package/build/client/assets/mermaid-3ZIDBTTL-CVTQRy2j.css +0 -1
  26. package/build/client/assets/root-D1iC2mNY.css +0 -1
  27. package/build/client/assets/server-build-6KQbeuD8.css +0 -1
@@ -1,4 +1,4 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/encryption-g14N5vQl.js","assets/index-B6-SzLmT.js","assets/index-BXZSIDEp.js","assets/highlighted-body-B3W2YXNL-QKf7Yrcl.js"])))=>i.map(i=>d[i]);
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/encryption-g14N5vQl.js","assets/index-B6-SzLmT.js","assets/index-BXZSIDEp.js","assets/zstd-browser-decoder-Cf0Zee4U.js","assets/highlighted-body-B3W2YXNL-BDAdDO0w.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);
@@ -10359,7 +10359,11 @@ const SerializationFormat = {
10359
10359
  /** devalue stringify/parse with TextEncoder/TextDecoder */
10360
10360
  DEVALUE_V1: "devl",
10361
10361
  /** Encrypted payload (inner payload has its own format prefix after decryption) */
10362
- ENCRYPTED: "encr"
10362
+ ENCRYPTED: "encr",
10363
+ /** Gzip-compressed payload (inner payload has its own format prefix after decompression) */
10364
+ GZIP: "gzip",
10365
+ /** Zstandard-compressed payload (inner payload has its own format prefix after decompression) */
10366
+ ZSTD: "zstd"
10363
10367
  };
10364
10368
  const FORMAT_PREFIX_LENGTH = 4;
10365
10369
  new TextEncoder();
@@ -10405,6 +10409,71 @@ function isEncryptedData(data) {
10405
10409
  const prefix = formatDecoder.decode(data.subarray(0, FORMAT_PREFIX_LENGTH));
10406
10410
  return prefix === SerializationFormat.ENCRYPTED;
10407
10411
  }
10412
+ function isCompressedData(data) {
10413
+ if (!(data instanceof Uint8Array) || data.length < FORMAT_PREFIX_LENGTH) {
10414
+ return false;
10415
+ }
10416
+ const prefix = formatDecoder.decode(data.subarray(0, FORMAT_PREFIX_LENGTH));
10417
+ return prefix === SerializationFormat.GZIP || prefix === SerializationFormat.ZSTD;
10418
+ }
10419
+ function getNodeZlib() {
10420
+ var _a3, _b2;
10421
+ try {
10422
+ return (_b2 = (_a3 = globalThis.process) == null ? void 0 : _a3.getBuiltinModule) == null ? void 0 : _b2.call(_a3, "node:zlib");
10423
+ } catch {
10424
+ return void 0;
10425
+ }
10426
+ }
10427
+ function decompressSyncIfAvailable(format, payload) {
10428
+ try {
10429
+ const zlib = getNodeZlib();
10430
+ if (format === SerializationFormat.GZIP && (zlib == null ? void 0 : zlib.gunzipSync)) {
10431
+ return new Uint8Array(zlib.gunzipSync(payload));
10432
+ }
10433
+ if (format === SerializationFormat.ZSTD && (zlib == null ? void 0 : zlib.zstdDecompressSync)) {
10434
+ return new Uint8Array(zlib.zstdDecompressSync(payload));
10435
+ }
10436
+ } catch {
10437
+ }
10438
+ return void 0;
10439
+ }
10440
+ let zstdBrowserDecoder;
10441
+ function registerZstdDecoder(decoder2) {
10442
+ zstdBrowserDecoder = decoder2;
10443
+ }
10444
+ async function decompressAsync(format, payload) {
10445
+ if (format === SerializationFormat.ZSTD) {
10446
+ const sync = decompressSyncIfAvailable(format, payload);
10447
+ if (sync)
10448
+ return sync;
10449
+ if (zstdBrowserDecoder)
10450
+ return zstdBrowserDecoder(payload);
10451
+ throw new Error("zstd-compressed workflow data encountered but no zstd decoder is available. Node.js 22.15+ decodes natively; in the browser register one via registerZstdDecoder (the web o11y package does this).");
10452
+ }
10453
+ const transform2 = new DecompressionStream("gzip");
10454
+ const writer = transform2.writable.getWriter();
10455
+ const writePromise = writer.write(payload).then(() => writer.close());
10456
+ writePromise.catch(() => {
10457
+ });
10458
+ const chunks = [];
10459
+ let total = 0;
10460
+ const reader = transform2.readable.getReader();
10461
+ for (; ; ) {
10462
+ const { done, value } = await reader.read();
10463
+ if (done)
10464
+ break;
10465
+ chunks.push(value);
10466
+ total += value.length;
10467
+ }
10468
+ await writePromise;
10469
+ const out = new Uint8Array(total);
10470
+ let offset2 = 0;
10471
+ for (const chunk of chunks) {
10472
+ out.set(chunk, offset2);
10473
+ offset2 += chunk.length;
10474
+ }
10475
+ return out;
10476
+ }
10408
10477
  function hydrateData(value, revivers) {
10409
10478
  if (value instanceof Uint8Array) {
10410
10479
  if (isEncryptedData(value)) {
@@ -10415,6 +10484,13 @@ function hydrateData(value, revivers) {
10415
10484
  const str = new TextDecoder().decode(payload);
10416
10485
  return parse$4(str, revivers);
10417
10486
  }
10487
+ if (format === SerializationFormat.GZIP || format === SerializationFormat.ZSTD) {
10488
+ const inflated = decompressSyncIfAvailable(format, payload);
10489
+ if (inflated === void 0) {
10490
+ return value;
10491
+ }
10492
+ return hydrateData(inflated, revivers);
10493
+ }
10418
10494
  throw new Error(`Unsupported serialization format: ${format}`);
10419
10495
  }
10420
10496
  if (Array.isArray(value)) {
@@ -10423,16 +10499,20 @@ function hydrateData(value, revivers) {
10423
10499
  return value;
10424
10500
  }
10425
10501
  async function hydrateDataWithKey(value, revivers, key) {
10426
- if (value instanceof Uint8Array && isEncryptedData(value) && key) {
10502
+ let data = value;
10503
+ if (data instanceof Uint8Array && isEncryptedData(data) && key) {
10427
10504
  const { decrypt } = await __vitePreload(async () => {
10428
10505
  const { decrypt: decrypt2 } = await import("./encryption-g14N5vQl.js");
10429
10506
  return { decrypt: decrypt2 };
10430
10507
  }, true ? __vite__mapDeps([0,1,2]) : void 0);
10431
- const { payload } = decodeFormatPrefix(value);
10432
- const decrypted = await decrypt(key, payload);
10433
- return hydrateData(decrypted, revivers);
10508
+ const { payload } = decodeFormatPrefix(data);
10509
+ data = await decrypt(key, payload);
10510
+ }
10511
+ if (data instanceof Uint8Array && isCompressedData(data)) {
10512
+ const { format, payload } = decodeFormatPrefix(data);
10513
+ data = await decompressAsync(format, payload);
10434
10514
  }
10435
- return hydrateData(value, revivers);
10515
+ return hydrateData(data, revivers);
10436
10516
  }
10437
10517
  const STREAM_ID_PREFIX = "strm_";
10438
10518
  const STREAM_REF_TYPE$1 = "__workflow_stream_ref__";
@@ -10685,10 +10765,12 @@ const serializationFormat = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object
10685
10765
  hydrateData,
10686
10766
  hydrateDataWithKey,
10687
10767
  hydrateResourceIO: hydrateResourceIO$1,
10768
+ isCompressedData,
10688
10769
  isEncryptedData,
10689
10770
  isExpiredStub,
10690
10771
  isRunRef: isRunRef$1,
10691
10772
  observabilityRevivers,
10773
+ registerZstdDecoder,
10692
10774
  serializedClassToString,
10693
10775
  serializedInstanceToRef,
10694
10776
  serializedRunToRunRef,
@@ -16115,6 +16197,11 @@ async function hydrateResourceIOWithKey(resource, key) {
16115
16197
  const { importKey: importKey2 } = await import("./encryption-g14N5vQl.js");
16116
16198
  return { importKey: importKey2 };
16117
16199
  }, true ? __vite__mapDeps([0,1,2]) : void 0);
16200
+ const { ensureZstdDecoderRegistered } = await __vitePreload(async () => {
16201
+ const { ensureZstdDecoderRegistered: ensureZstdDecoderRegistered2 } = await import("./zstd-browser-decoder-Cf0Zee4U.js");
16202
+ return { ensureZstdDecoderRegistered: ensureZstdDecoderRegistered2 };
16203
+ }, true ? __vite__mapDeps([3,2]) : void 0);
16204
+ ensureZstdDecoderRegistered();
16118
16205
  const cryptoKey = await importKey(key);
16119
16206
  const revivers = getRevivers();
16120
16207
  async function decryptField(value, rev, k2) {
@@ -19286,6 +19373,114 @@ function ContextCardTrigger({ content: content2, children: children2, side = "ri
19286
19373
  function Skeleton$1({ className, style: style2, ...props }) {
19287
19374
  return jsxRuntimeExports.jsx("div", { ...props, className: cn$4("rounded-md", className), style: { backgroundColor: "var(--ds-gray-200)", ...style2 } });
19288
19375
  }
19376
+ const TIME_UNITS = [
19377
+ { unit: "year", ms: 31536e6 },
19378
+ { unit: "month", ms: 2628e6 },
19379
+ { unit: "day", ms: 864e5 },
19380
+ { unit: "hour", ms: 36e5 },
19381
+ { unit: "minute", ms: 6e4 },
19382
+ { unit: "second", ms: 1e3 }
19383
+ ];
19384
+ function formatTimeDifference(diff) {
19385
+ let remaining = Math.abs(diff);
19386
+ const result = [];
19387
+ for (const { unit, ms } of TIME_UNITS) {
19388
+ const value = Math.floor(remaining / ms);
19389
+ if (value > 0 || result.length > 0) {
19390
+ result.push(`${value} ${unit}${value !== 1 ? "s" : ""}`);
19391
+ remaining %= ms;
19392
+ }
19393
+ if (result.length === 3)
19394
+ break;
19395
+ }
19396
+ return result.join(", ");
19397
+ }
19398
+ function useTimeAgo(date2) {
19399
+ const [timeAgo, setTimeAgo] = reactExports.useState("");
19400
+ reactExports.useEffect(() => {
19401
+ const updateTimeAgo = () => {
19402
+ const diff = Date.now() - date2;
19403
+ const formattedDiff = formatTimeDifference(diff);
19404
+ setTimeAgo(formattedDiff ? `${formattedDiff} ago` : "Just now");
19405
+ };
19406
+ updateTimeAgo();
19407
+ const timer = setInterval(updateTimeAgo, 1e3);
19408
+ return () => clearInterval(timer);
19409
+ }, [date2]);
19410
+ return timeAgo;
19411
+ }
19412
+ function useShortTimeAgo(date2) {
19413
+ const [shortTimeAgo, setShortTimeAgo] = reactExports.useState("");
19414
+ reactExports.useEffect(() => {
19415
+ if (!date2) {
19416
+ setShortTimeAgo("");
19417
+ return;
19418
+ }
19419
+ const updateShortTimeAgo = () => {
19420
+ const diff = Date.now() - date2;
19421
+ const days = Math.floor(diff / (1e3 * 60 * 60 * 24));
19422
+ const hours = Math.floor(diff / (1e3 * 60 * 60));
19423
+ const minutes = Math.floor(diff / (1e3 * 60));
19424
+ if (days > 0) {
19425
+ setShortTimeAgo(`${days} day${days > 1 ? "s" : ""} ago`);
19426
+ } else if (hours > 0) {
19427
+ setShortTimeAgo(`${hours} hour${hours > 1 ? "s" : ""} ago`);
19428
+ } else if (minutes > 0) {
19429
+ setShortTimeAgo(`${minutes} minute${minutes > 1 ? "s" : ""} ago`);
19430
+ } else {
19431
+ setShortTimeAgo("Just now");
19432
+ }
19433
+ };
19434
+ updateShortTimeAgo();
19435
+ const timer = setInterval(updateShortTimeAgo, 6e4);
19436
+ return () => clearInterval(timer);
19437
+ }, [date2]);
19438
+ return shortTimeAgo;
19439
+ }
19440
+ function ZoneDateTimeRow({ date: date2, zone }) {
19441
+ var _a3;
19442
+ const dateObj = new Date(date2);
19443
+ const formattedZone = ((_a3 = new Intl.DateTimeFormat("en-US", {
19444
+ timeZone: zone,
19445
+ timeZoneName: "short"
19446
+ }).formatToParts(dateObj).find((part) => part.type === "timeZoneName")) == null ? void 0 : _a3.value) || zone;
19447
+ const formattedDate = dateObj.toLocaleString("en-US", {
19448
+ timeZone: zone,
19449
+ year: "numeric",
19450
+ month: "long",
19451
+ day: "numeric"
19452
+ });
19453
+ const formattedTime = dateObj.toLocaleTimeString("en-US", {
19454
+ timeZone: zone,
19455
+ hour: "2-digit",
19456
+ minute: "2-digit",
19457
+ second: "2-digit"
19458
+ });
19459
+ return jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between gap-3", children: [jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-1.5", children: [jsxRuntimeExports.jsx("div", { className: "flex items-center justify-center h-4 px-1.5 bg-gray-200 rounded-xs", children: jsxRuntimeExports.jsx("span", { className: "text-[12px] font-mono text-gray-900", children: formattedZone }) }), jsxRuntimeExports.jsx("span", { className: "text-[13px] text-gray-1000", children: formattedDate })] }), jsxRuntimeExports.jsx("span", { className: "tabular-nums text-[12px] font-mono text-gray-900", children: formattedTime })] });
19460
+ }
19461
+ function RelativeTimeContextCardContent({ date: date2 }) {
19462
+ const localTimezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
19463
+ const timeAgo = useTimeAgo(date2);
19464
+ return jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-3 min-w-[300px]", children: [jsxRuntimeExports.jsx("div", { className: "flex flex-col gap-3", children: jsxRuntimeExports.jsx("span", { className: "tabular-nums text-[13px] text-gray-900", children: timeAgo }) }), jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-2", children: [jsxRuntimeExports.jsx(ZoneDateTimeRow, { date: date2, zone: "UTC" }), jsxRuntimeExports.jsx(ZoneDateTimeRow, { date: date2, zone: localTimezone })] })] });
19465
+ }
19466
+ function DefaultTimeText({ date: date2 }) {
19467
+ const shortTimeAgo = useShortTimeAgo(date2);
19468
+ return jsxRuntimeExports.jsx("span", { className: "text-label-14 text-gray-900", children: shortTimeAgo });
19469
+ }
19470
+ function RelativeTimeCard({ date: date2, children: _children, ...props }) {
19471
+ const children2 = _children === void 0 ? jsxRuntimeExports.jsx(DefaultTimeText, { date: date2 }) : _children;
19472
+ if (!date2)
19473
+ return children2;
19474
+ return jsxRuntimeExports.jsx(ContextCardTrigger, { content: jsxRuntimeExports.jsx(RelativeTimeContextCardContent, { date: date2 }), ...props, children: children2 });
19475
+ }
19476
+ function TimestampTooltip({ date: date2, children: children2, side = "top" }) {
19477
+ const hasProvider = useHasContextCardProvider();
19478
+ const ts = date2 == null ? null : typeof date2 === "number" ? date2 : new Date(date2).getTime();
19479
+ if (ts == null || Number.isNaN(ts))
19480
+ return jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment, { children: children2 });
19481
+ const card = jsxRuntimeExports.jsx(RelativeTimeCard, { date: ts, side, asChild: true, children: children2 });
19482
+ return hasProvider ? card : jsxRuntimeExports.jsx(ContextCardProvider, { children: card });
19483
+ }
19289
19484
  const convert = (
19290
19485
  // Note: overloads in JSDoc can’t yet use different `@template`s.
19291
19486
  /**
@@ -44048,7 +44243,7 @@ var tn = f("block", "before:content-[counter(line)]", "before:inline-block", "be
44048
44243
  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 });
44049
44244
  var Se = reactExports.createContext({ code: "" }), de = () => reactExports.useContext(Se);
44050
44245
  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 }) });
44051
- var cn$1 = /\n+$/, dn = reactExports.lazy(() => __vitePreload(() => import("./highlighted-body-B3W2YXNL-QKf7Yrcl.js"), true ? __vite__mapDeps([3,2]) : void 0).then((e) => ({ default: e.HighlightedCodeBlockBody }))), rt = ({ code: e, language: t, className: o, children: n, isIncomplete: s2 = false, ...r2 }) => {
44246
+ var cn$1 = /\n+$/, dn = reactExports.lazy(() => __vitePreload(() => import("./highlighted-body-B3W2YXNL-BDAdDO0w.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 }) => {
44052
44247
  let i = reactExports.useMemo(() => e.replace(cn$1, ""), [e]), c = reactExports.useMemo(() => ({ bg: "transparent", fg: "inherit", tokens: i.split(`
44053
44248
  `).map((a2) => [{ content: a2, color: "inherit", bgColor: "transparent", htmlStyle: {}, offset: 0 }]) }), [i]);
44054
44249
  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 }) })] }) });
@@ -44869,127 +45064,127 @@ const TraceViewerContext = reactExports.createContext({
44869
45064
  TraceViewerContext.displayName = "TraceViewerContext";
44870
45065
  const useTraceViewer = () => reactExports.useContext(TraceViewerContext);
44871
45066
  reactExports.createContext(null);
44872
- const traceNode = "_traceNode_1fmf2_1";
44873
- const childRow = "_childRow_1fmf2_5";
44874
- const spanNode = "_spanNode_1fmf2_11";
44875
- const huge = "_huge_1fmf2_31";
44876
- const spanName = "_spanName_1fmf2_34";
44877
- const spanSpacer = "_spanSpacer_1fmf2_40";
44878
- const spanDuration = "_spanDuration_1fmf2_44";
44879
- const small = "_small_1fmf2_62";
44880
- const xHover = "_xHover_1fmf2_62";
44881
- const spanNodeEvent = "_spanNodeEvent_1fmf2_118";
44882
- const eventDiamond = "_eventDiamond_1fmf2_124";
44883
- const customEventColor = "_customEventColor_1fmf2_140";
44884
- const hoverInfo = "_hoverInfo_1fmf2_145";
44885
- const eventName = "_eventName_1fmf2_149";
44886
- const eventTimestamp = "_eventTimestamp_1fmf2_153";
44887
- const alignStart = "_alignStart_1fmf2_174";
44888
- const alignEnd = "_alignEnd_1fmf2_178";
44889
- const colorVercel = "_colorVercel_1fmf2_205";
44890
- const color0 = "_color0_1fmf2_213";
44891
- const color1 = "_color1_1fmf2_220";
44892
- const color2 = "_color2_1fmf2_227";
44893
- const color3 = "_color3_1fmf2_234";
44894
- const color4 = "_color4_1fmf2_241";
44895
- const colorHighlight = "_colorHighlight_1fmf2_248";
44896
- const unlit = "_unlit_1fmf2_256";
44897
- const mapContainer = "_mapContainer_1fmf2_262";
44898
- const spanDetailPanel = "_spanDetailPanel_1fmf2_329";
44899
- const spanDetailPanelResizer = "_spanDetailPanelResizer_1fmf2_338";
44900
- const spanDetailPanelTop = "_spanDetailPanelTop_1fmf2_353";
44901
- const spanDetailPanelBody = "_spanDetailPanelBody_1fmf2_362";
44902
- const spanDetailPanelTopInfo = "_spanDetailPanelTopInfo_1fmf2_375";
44903
- const spanNameDetailPanel = "_spanNameDetailPanel_1fmf2_389";
44904
- const spanDetailPanelTruncatedHeading = "_spanDetailPanelTruncatedHeading_1fmf2_395";
44905
- const spanDetailPanelName = "_spanDetailPanelName_1fmf2_405";
44906
- const spanDetailPanelDuration = "_spanDetailPanelDuration_1fmf2_416";
44907
- const spanDetailPanelCorner = "_spanDetailPanelCorner_1fmf2_427";
44908
- const spanDetailPanelCornerInner = "_spanDetailPanelCornerInner_1fmf2_437";
44909
- const spanDetailPanelCloseVerticalRule = "_spanDetailPanelCloseVerticalRule_1fmf2_445";
44910
- const spanDetailPanelClose = "_spanDetailPanelClose_1fmf2_445";
44911
- const spanDetailPanelAttribute = "_spanDetailPanelAttribute_1fmf2_467";
44912
- const spanDetailPanelAttributeKey = "_spanDetailPanelAttributeKey_1fmf2_484";
44913
- const spanDetailPanelAttributeValue = "_spanDetailPanelAttributeValue_1fmf2_492";
44914
- const spanDetailPanelQuickLink = "_spanDetailPanelQuickLink_1fmf2_503";
44915
- const spanDetailPanelQuickLinkLabel = "_spanDetailPanelQuickLinkLabel_1fmf2_506";
44916
- const detailGroup = "_detailGroup_1fmf2_519";
44917
- const expanded = "_expanded_1fmf2_533";
44918
- const collapsed = "_collapsed_1fmf2_534";
44919
- const ancestorGroup = "_ancestorGroup_1fmf2_535";
44920
- const detailHeading = "_detailHeading_1fmf2_539";
44921
- const buttonLink = "_buttonLink_1fmf2_562";
44922
- const note = "_note_1fmf2_581";
44923
- const skeleton = "_skeleton_1fmf2_589";
44924
- const skeletonRounded = "_skeletonRounded_1fmf2_595";
44925
- const detailHeadingIcon = "_detailHeadingIcon_1fmf2_599";
44926
- const infraSpanDescription = "_infraSpanDescription_1fmf2_603";
44927
- const ancestorNode = "_ancestorNode_1fmf2_613";
44928
- const ancestorText = "_ancestorText_1fmf2_629";
44929
- const ancestorName = "_ancestorName_1fmf2_639";
44930
- const ancestorDuration = "_ancestorDuration_1fmf2_644";
44931
- const ancestorLineContainer = "_ancestorLineContainer_1fmf2_649";
44932
- const ancestorLine = "_ancestorLine_1fmf2_649";
44933
- const zoomButtonGroup = "_zoomButtonGroup_1fmf2_701";
44934
- const zoomButton = "_zoomButton_1fmf2_701";
44935
- const divider = "_divider_1fmf2_751";
44936
- const markersContainer = "_markersContainer_1fmf2_758";
44937
- const markers = "_markers_1fmf2_758";
44938
- const marker = "_marker_1fmf2_758";
44939
- const notch = "_notch_1fmf2_792";
44940
- const markerLabel = "_markerLabel_1fmf2_798";
44941
- const markerClockTime = "_markerClockTime_1fmf2_807";
44942
- const eventMarkersContainer = "_eventMarkersContainer_1fmf2_816";
44943
- const eventMarkers = "_eventMarkers_1fmf2_816";
44944
- const eventMarker = "_eventMarker_1fmf2_816";
44945
- const cursorMarkerStickyParent = "_cursorMarkerStickyParent_1fmf2_839";
44946
- const cursorMarkerLabelContainer = "_cursorMarkerLabelContainer_1fmf2_848";
44947
- const cursorMarkerLabel = "_cursorMarkerLabel_1fmf2_848";
44948
- const cursorMarkerContainer = "_cursorMarkerContainer_1fmf2_898";
44949
- const cursorMarker = "_cursorMarker_1fmf2_839";
44950
- const cursorSelection = "_cursorSelection_1fmf2_916";
44951
- const traceViewer = "_traceViewer_1fmf2_966";
44952
- const mapCanvas = "_mapCanvas_1fmf2_972";
44953
- const zoomButtonTraceViewer = "_zoomButtonTraceViewer_1fmf2_988";
44954
- const timeline = "_timeline_1fmf2_1011";
44955
- const searchBar = "_searchBar_1fmf2_1019";
44956
- const searchInput = "_searchInput_1fmf2_1031";
44957
- const searchInputLabel = "_searchInputLabel_1fmf2_1038";
44958
- const searchInputPrefix = "_searchInputPrefix_1fmf2_1063";
44959
- const mapThumb = "_mapThumb_1fmf2_1101";
44960
- const spanDetailPanelTraceViewer = "_spanDetailPanelTraceViewer_1fmf2_1115";
44961
- const traceViewerContent = "_traceViewerContent_1fmf2_1134";
44962
- const inert = "_inert_1fmf2_1144";
44963
- const hidden = "_hidden_1fmf2_1180";
44964
- const mobile = "_mobile_1fmf2_1184";
44965
- const spanRunning = "_spanRunning_1fmf2_1194";
44966
- const spanPending = "_spanPending_1fmf2_1195";
44967
- const spanCompleted = "_spanCompleted_1fmf2_1203";
44968
- const spanCancelled = "_spanCancelled_1fmf2_1211";
44969
- const spanFailed = "_spanFailed_1fmf2_1219";
44970
- const spanPendingStriped = "_spanPendingStriped_1fmf2_1228";
44971
- const hasQueuedTime = "_hasQueuedTime_1fmf2_1242";
44972
- const spanSleep = "_spanSleep_1fmf2_1254";
44973
- const spanHook = "_spanHook_1fmf2_1263";
44974
- const segmentLayer = "_segmentLayer_1fmf2_1275";
44975
- const segment = "_segment_1fmf2_1275";
44976
- const segmentLabel = "_segmentLabel_1fmf2_1291";
44977
- const segmentTag = "_segmentTag_1fmf2_1306";
44978
- const segQueued = "_segQueued_1fmf2_1314";
44979
- const segRunning = "_segRunning_1fmf2_1325";
44980
- const segFailed = "_segFailed_1fmf2_1330";
44981
- const segRetrying = "_segRetrying_1fmf2_1335";
44982
- const segSucceeded = "_segSucceeded_1fmf2_1346";
44983
- const segWaiting = "_segWaiting_1fmf2_1351";
44984
- const segSleeping = "_segSleeping_1fmf2_1362";
44985
- const segReceived = "_segReceived_1fmf2_1367";
44986
- const boundaryMarker = "_boundaryMarker_1fmf2_1372";
44987
- const boundaryLine = "_boundaryLine_1fmf2_1373";
44988
- const hasSegments = "_hasSegments_1fmf2_1395";
44989
- const eventFailed = "_eventFailed_1fmf2_1432";
44990
- const eventRetrying = "_eventRetrying_1fmf2_1441";
44991
- const eventHook = "_eventHook_1fmf2_1450";
44992
- const eventDefault = "_eventDefault_1fmf2_1459";
45067
+ const traceNode = "_traceNode_1ytrx_1";
45068
+ const childRow = "_childRow_1ytrx_5";
45069
+ const spanNode = "_spanNode_1ytrx_11";
45070
+ const huge = "_huge_1ytrx_31";
45071
+ const spanName = "_spanName_1ytrx_34";
45072
+ const spanSpacer = "_spanSpacer_1ytrx_40";
45073
+ const spanDuration = "_spanDuration_1ytrx_44";
45074
+ const small = "_small_1ytrx_62";
45075
+ const xHover = "_xHover_1ytrx_62";
45076
+ const spanNodeEvent = "_spanNodeEvent_1ytrx_118";
45077
+ const eventDiamond = "_eventDiamond_1ytrx_124";
45078
+ const customEventColor = "_customEventColor_1ytrx_140";
45079
+ const hoverInfo = "_hoverInfo_1ytrx_145";
45080
+ const eventName = "_eventName_1ytrx_149";
45081
+ const eventTimestamp = "_eventTimestamp_1ytrx_153";
45082
+ const alignStart = "_alignStart_1ytrx_174";
45083
+ const alignEnd = "_alignEnd_1ytrx_178";
45084
+ const colorVercel = "_colorVercel_1ytrx_205";
45085
+ const color0 = "_color0_1ytrx_213";
45086
+ const color1 = "_color1_1ytrx_220";
45087
+ const color2 = "_color2_1ytrx_227";
45088
+ const color3 = "_color3_1ytrx_234";
45089
+ const color4 = "_color4_1ytrx_241";
45090
+ const colorHighlight = "_colorHighlight_1ytrx_248";
45091
+ const unlit = "_unlit_1ytrx_256";
45092
+ const mapContainer = "_mapContainer_1ytrx_262";
45093
+ const spanDetailPanel = "_spanDetailPanel_1ytrx_329";
45094
+ const spanDetailPanelResizer = "_spanDetailPanelResizer_1ytrx_338";
45095
+ const spanDetailPanelTop = "_spanDetailPanelTop_1ytrx_353";
45096
+ const spanDetailPanelBody = "_spanDetailPanelBody_1ytrx_362";
45097
+ const spanDetailPanelTopInfo = "_spanDetailPanelTopInfo_1ytrx_375";
45098
+ const spanNameDetailPanel = "_spanNameDetailPanel_1ytrx_389";
45099
+ const spanDetailPanelTruncatedHeading = "_spanDetailPanelTruncatedHeading_1ytrx_395";
45100
+ const spanDetailPanelName = "_spanDetailPanelName_1ytrx_405";
45101
+ const spanDetailPanelDuration = "_spanDetailPanelDuration_1ytrx_416";
45102
+ const spanDetailPanelCorner = "_spanDetailPanelCorner_1ytrx_427";
45103
+ const spanDetailPanelCornerInner = "_spanDetailPanelCornerInner_1ytrx_437";
45104
+ const spanDetailPanelCloseVerticalRule = "_spanDetailPanelCloseVerticalRule_1ytrx_445";
45105
+ const spanDetailPanelClose = "_spanDetailPanelClose_1ytrx_445";
45106
+ const spanDetailPanelAttribute = "_spanDetailPanelAttribute_1ytrx_467";
45107
+ const spanDetailPanelAttributeKey = "_spanDetailPanelAttributeKey_1ytrx_484";
45108
+ const spanDetailPanelAttributeValue = "_spanDetailPanelAttributeValue_1ytrx_492";
45109
+ const spanDetailPanelQuickLink = "_spanDetailPanelQuickLink_1ytrx_503";
45110
+ const spanDetailPanelQuickLinkLabel = "_spanDetailPanelQuickLinkLabel_1ytrx_506";
45111
+ const detailGroup = "_detailGroup_1ytrx_519";
45112
+ const expanded = "_expanded_1ytrx_533";
45113
+ const collapsed = "_collapsed_1ytrx_534";
45114
+ const ancestorGroup = "_ancestorGroup_1ytrx_535";
45115
+ const detailHeading = "_detailHeading_1ytrx_539";
45116
+ const buttonLink = "_buttonLink_1ytrx_562";
45117
+ const note = "_note_1ytrx_581";
45118
+ const skeleton = "_skeleton_1ytrx_589";
45119
+ const skeletonRounded = "_skeletonRounded_1ytrx_595";
45120
+ const detailHeadingIcon = "_detailHeadingIcon_1ytrx_599";
45121
+ const infraSpanDescription = "_infraSpanDescription_1ytrx_603";
45122
+ const ancestorNode = "_ancestorNode_1ytrx_613";
45123
+ const ancestorText = "_ancestorText_1ytrx_629";
45124
+ const ancestorName = "_ancestorName_1ytrx_639";
45125
+ const ancestorDuration = "_ancestorDuration_1ytrx_644";
45126
+ const ancestorLineContainer = "_ancestorLineContainer_1ytrx_649";
45127
+ const ancestorLine = "_ancestorLine_1ytrx_649";
45128
+ const zoomButtonGroup = "_zoomButtonGroup_1ytrx_701";
45129
+ const zoomButton = "_zoomButton_1ytrx_701";
45130
+ const divider = "_divider_1ytrx_751";
45131
+ const markersContainer = "_markersContainer_1ytrx_758";
45132
+ const markers = "_markers_1ytrx_758";
45133
+ const marker = "_marker_1ytrx_758";
45134
+ const notch = "_notch_1ytrx_792";
45135
+ const markerLabel = "_markerLabel_1ytrx_798";
45136
+ const markerClockTime = "_markerClockTime_1ytrx_807";
45137
+ const eventMarkersContainer = "_eventMarkersContainer_1ytrx_816";
45138
+ const eventMarkers = "_eventMarkers_1ytrx_816";
45139
+ const eventMarker = "_eventMarker_1ytrx_816";
45140
+ const cursorMarkerStickyParent = "_cursorMarkerStickyParent_1ytrx_839";
45141
+ const cursorMarkerLabelContainer = "_cursorMarkerLabelContainer_1ytrx_848";
45142
+ const cursorMarkerLabel = "_cursorMarkerLabel_1ytrx_848";
45143
+ const cursorMarkerContainer = "_cursorMarkerContainer_1ytrx_898";
45144
+ const cursorMarker = "_cursorMarker_1ytrx_839";
45145
+ const cursorSelection = "_cursorSelection_1ytrx_916";
45146
+ const traceViewer = "_traceViewer_1ytrx_966";
45147
+ const mapCanvas = "_mapCanvas_1ytrx_972";
45148
+ const zoomButtonTraceViewer = "_zoomButtonTraceViewer_1ytrx_988";
45149
+ const timeline = "_timeline_1ytrx_1011";
45150
+ const searchBar = "_searchBar_1ytrx_1019";
45151
+ const searchInput = "_searchInput_1ytrx_1031";
45152
+ const searchInputLabel = "_searchInputLabel_1ytrx_1038";
45153
+ const searchInputPrefix = "_searchInputPrefix_1ytrx_1063";
45154
+ const mapThumb = "_mapThumb_1ytrx_1101";
45155
+ const spanDetailPanelTraceViewer = "_spanDetailPanelTraceViewer_1ytrx_1115";
45156
+ const traceViewerContent = "_traceViewerContent_1ytrx_1134";
45157
+ const inert = "_inert_1ytrx_1144";
45158
+ const hidden = "_hidden_1ytrx_1180";
45159
+ const mobile = "_mobile_1ytrx_1184";
45160
+ const spanRunning = "_spanRunning_1ytrx_1194";
45161
+ const spanPending = "_spanPending_1ytrx_1195";
45162
+ const spanCompleted = "_spanCompleted_1ytrx_1203";
45163
+ const spanCancelled = "_spanCancelled_1ytrx_1211";
45164
+ const spanFailed = "_spanFailed_1ytrx_1219";
45165
+ const spanPendingStriped = "_spanPendingStriped_1ytrx_1228";
45166
+ const hasQueuedTime = "_hasQueuedTime_1ytrx_1242";
45167
+ const spanSleep = "_spanSleep_1ytrx_1254";
45168
+ const spanHook = "_spanHook_1ytrx_1263";
45169
+ const segmentLayer = "_segmentLayer_1ytrx_1275";
45170
+ const segment = "_segment_1ytrx_1275";
45171
+ const segmentLabel = "_segmentLabel_1ytrx_1291";
45172
+ const segmentTag = "_segmentTag_1ytrx_1306";
45173
+ const segQueued = "_segQueued_1ytrx_1314";
45174
+ const segRunning = "_segRunning_1ytrx_1325";
45175
+ const segFailed = "_segFailed_1ytrx_1330";
45176
+ const segRetrying = "_segRetrying_1ytrx_1335";
45177
+ const segSucceeded = "_segSucceeded_1ytrx_1346";
45178
+ const segWaiting = "_segWaiting_1ytrx_1351";
45179
+ const segSleeping = "_segSleeping_1ytrx_1362";
45180
+ const segReceived = "_segReceived_1ytrx_1367";
45181
+ const boundaryMarker = "_boundaryMarker_1ytrx_1372";
45182
+ const boundaryLine = "_boundaryLine_1ytrx_1373";
45183
+ const hasSegments = "_hasSegments_1ytrx_1395";
45184
+ const eventFailed = "_eventFailed_1ytrx_1432";
45185
+ const eventRetrying = "_eventRetrying_1ytrx_1441";
45186
+ const eventHook = "_eventHook_1ytrx_1450";
45187
+ const eventDefault = "_eventDefault_1ytrx_1459";
44993
45188
  const styles$1 = {
44994
45189
  traceNode,
44995
45190
  childRow,
@@ -45053,7 +45248,7 @@ const styles$1 = {
45053
45248
  ancestorLineContainer,
45054
45249
  ancestorLine,
45055
45250
  zoomButtonGroup,
45056
- "zoom-buttons-fade-in": "_zoom-buttons-fade-in_1fmf2_1",
45251
+ "zoom-buttons-fade-in": "_zoom-buttons-fade-in_1ytrx_1",
45057
45252
  zoomButton,
45058
45253
  divider,
45059
45254
  markersContainer,
@@ -45072,7 +45267,7 @@ const styles$1 = {
45072
45267
  cursorMarker,
45073
45268
  cursorSelection,
45074
45269
  traceViewer,
45075
- "span-skeleton": "_span-skeleton_1fmf2_1",
45270
+ "span-skeleton": "_span-skeleton_1ytrx_1",
45076
45271
  mapCanvas,
45077
45272
  zoomButtonTraceViewer,
45078
45273
  timeline,
@@ -46399,7 +46594,7 @@ function computeStepSegmentsFromSpan(startMs, duration2, events) {
46399
46594
  "step_completed"
46400
46595
  ]);
46401
46596
  if (marks.length === 0) {
46402
- segments.push({ startFraction: 0, endFraction: 1, status: "running" });
46597
+ segments.push({ startFraction: 0, endFraction: 1, status: "queued" });
46403
46598
  return segments;
46404
46599
  }
46405
46600
  const firstFraction = timeToFraction(marks[0].time, startMs, duration2);
@@ -46424,7 +46619,7 @@ function computeStepSegmentsFromSpan(startMs, duration2, events) {
46424
46619
  });
46425
46620
  } else {
46426
46621
  const nextType = nextMark.type;
46427
- const attemptStatus = nextType === "step_retrying" || nextType === "step_failed" ? "failed" : nextType === "step_completed" ? "succeeded" : "running";
46622
+ const attemptStatus = nextType === "step_retrying" || nextType === "step_failed" ? "failed" : nextType === "step_completed" ? "succeeded" : "retrying";
46428
46623
  segments.push({
46429
46624
  startFraction: markFrac,
46430
46625
  endFraction: nextFrac,
@@ -46453,35 +46648,16 @@ function computeHookSegmentsFromSpan(startMs, duration2, events) {
46453
46648
  const segments = [];
46454
46649
  if (duration2 <= 0)
46455
46650
  return segments;
46456
- const sorted = [...events].map((e) => ({ name: e.name, time: getHighResInMs(e.timestamp) })).sort((a2, b2) => a2.time - b2.time);
46457
- const received = sorted.find((e) => e.name === "hook_received");
46458
- const disposed = sorted.find((e) => e.name === "hook_disposed");
46459
- if (!received && !disposed) {
46460
- segments.push({ startFraction: 0, endFraction: 1, status: "waiting" });
46461
- return segments;
46462
- }
46463
- const receivedFrac = received ? timeToFraction(received.time, startMs, duration2) : null;
46651
+ const disposed = sortedEventMarks(events, ["hook_disposed"])[0];
46464
46652
  const disposedFrac = disposed ? timeToFraction(disposed.time, startMs, duration2) : null;
46465
- if (receivedFrac !== null && receivedFrac > 1e-3) {
46653
+ const waitingEnd = disposedFrac ?? 1;
46654
+ if (waitingEnd > 1e-3) {
46466
46655
  segments.push({
46467
46656
  startFraction: 0,
46468
- endFraction: receivedFrac,
46469
- status: "waiting"
46470
- });
46471
- } else if (receivedFrac === null && disposedFrac !== null) {
46472
- segments.push({
46473
- startFraction: 0,
46474
- endFraction: disposedFrac,
46657
+ endFraction: waitingEnd,
46475
46658
  status: "waiting"
46476
46659
  });
46477
46660
  }
46478
- if (receivedFrac !== null) {
46479
- segments.push({
46480
- startFraction: receivedFrac,
46481
- endFraction: disposedFrac ?? 1,
46482
- status: "received"
46483
- });
46484
- }
46485
46661
  if (disposedFrac !== null && disposedFrac < 0.999) {
46486
46662
  segments.push({
46487
46663
  startFraction: disposedFrac,
@@ -46572,6 +46748,33 @@ function computeSpanSegments(span) {
46572
46748
  return [];
46573
46749
  }
46574
46750
  }
46751
+ const MARKER_EVENT_NAMES = ["hook_received", "attr_set"];
46752
+ function computeSpanMarkers(span) {
46753
+ return sortedEventMarks(span.events, MARKER_EVENT_NAMES).map((mark2) => ({
46754
+ timeMs: mark2.time
46755
+ }));
46756
+ }
46757
+ function computeOffscreenMarkers(markers2, visibleStartMs, visibleEndMs) {
46758
+ let leftCount = 0;
46759
+ let rightCount = 0;
46760
+ let nearestLeft = Number.NEGATIVE_INFINITY;
46761
+ let nearestRight = Number.POSITIVE_INFINITY;
46762
+ for (const { timeMs } of markers2) {
46763
+ if (timeMs < visibleStartMs) {
46764
+ leftCount++;
46765
+ if (timeMs > nearestLeft)
46766
+ nearestLeft = timeMs;
46767
+ } else if (timeMs > visibleEndMs) {
46768
+ rightCount++;
46769
+ if (timeMs < nearestRight)
46770
+ nearestRight = timeMs;
46771
+ }
46772
+ }
46773
+ return {
46774
+ left: leftCount > 0 ? { count: leftCount, nearestMs: nearestLeft } : null,
46775
+ right: rightCount > 0 ? { count: rightCount, nearestMs: nearestRight } : null
46776
+ };
46777
+ }
46575
46778
  const INITIAL_VISIBLE_ROWS = 60;
46576
46779
  function getScrollParent(el) {
46577
46780
  let node2 = (el == null ? void 0 : el.parentElement) ?? null;
@@ -46620,6 +46823,75 @@ function useRowWindow(ref, rowCount, rowHeight, overscan = 12) {
46620
46823
  return range;
46621
46824
  }
46622
46825
  const ROW_HEIGHT_PX = 40;
46826
+ function scrollRowIntoView(listEl, index2, rowHeight, opts) {
46827
+ const scroller = listEl ? getScrollParent(listEl) : null;
46828
+ if (!listEl || !scroller)
46829
+ return;
46830
+ const margin = (opts == null ? void 0 : opts.margin) ?? rowHeight;
46831
+ const listOffset = listEl.getBoundingClientRect().top - scroller.getBoundingClientRect().top + scroller.scrollTop;
46832
+ const rowTop = listOffset + index2 * rowHeight;
46833
+ const rowBottom = rowTop + rowHeight;
46834
+ const viewTop = scroller.scrollTop;
46835
+ const viewBottom = viewTop + scroller.clientHeight;
46836
+ let top = null;
46837
+ if (rowTop < viewTop) {
46838
+ top = rowTop - margin;
46839
+ } else if (rowBottom > viewBottom) {
46840
+ top = rowBottom + margin - scroller.clientHeight;
46841
+ }
46842
+ if (top === null)
46843
+ return;
46844
+ const max2 = scroller.scrollHeight - scroller.clientHeight;
46845
+ scroller.scrollTo({
46846
+ top: Math.max(0, Math.min(top, max2)),
46847
+ behavior: opts == null ? void 0 : opts.behavior
46848
+ });
46849
+ }
46850
+ function projectMarkers(markers2, visibleStartMs, visibleEndMs) {
46851
+ const visibleDurationMs = visibleEndMs - visibleStartMs;
46852
+ if (visibleDurationMs <= 0)
46853
+ return [];
46854
+ return markers2.flatMap((m2) => {
46855
+ if (m2.timeMs < visibleStartMs || m2.timeMs > visibleEndMs) {
46856
+ return [];
46857
+ }
46858
+ return [
46859
+ {
46860
+ leftPct: (m2.timeMs - visibleStartMs) / visibleDurationMs * 100,
46861
+ timeMs: m2.timeMs
46862
+ }
46863
+ ];
46864
+ });
46865
+ }
46866
+ const MARKER_MIN_GAP_PX = 16;
46867
+ function cullCollidingMarkers(projected, pixelWidth) {
46868
+ const kept = [];
46869
+ let lastKeptPct = Number.NEGATIVE_INFINITY;
46870
+ for (const m2 of projected) {
46871
+ const gapPx = (m2.leftPct - lastKeptPct) / 100 * pixelWidth;
46872
+ if (gapPx < MARKER_MIN_GAP_PX)
46873
+ continue;
46874
+ kept.push(m2);
46875
+ lastKeptPct = m2.leftPct;
46876
+ }
46877
+ return kept;
46878
+ }
46879
+ function MarkerTick({ className }) {
46880
+ return jsxRuntimeExports.jsx("span", { className: cn$4("block w-[3px] rounded-full bg-gray-1000", className) });
46881
+ }
46882
+ function MarkerLayer({ markers: markers2 }) {
46883
+ return jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment, { children: markers2.map((m2) => jsxRuntimeExports.jsx("span", { className: "pointer-events-auto absolute top-0 bottom-0 z-10 flex w-8 -translate-x-1/2 items-center justify-center", style: { left: `clamp(8px, ${m2.leftPct}%, calc(100% - 8px))` }, children: jsxRuntimeExports.jsx(TimestampTooltip, { date: m2.timeMs, children: jsxRuntimeExports.jsx("span", { className: "flex h-6 w-8 items-center justify-center", children: jsxRuntimeExports.jsx(MarkerTick, { className: "h-3" }) }) }) }, m2.timeMs)) });
46884
+ }
46885
+ function OffscreenMarkerIndicator({ direction, count: count2, targetMs, onReveal }) {
46886
+ const Chevron = direction === "right" ? ArrowRight : ArrowLeft;
46887
+ const label = `${count2} marker${count2 === 1 ? "" : "s"} ${direction === "right" ? "ahead" : "behind"} — click to scroll to ${count2 === 1 ? "it" : "the nearest"}`;
46888
+ const chevron = jsxRuntimeExports.jsx("span", { className: "flex h-6 w-6 shrink-0 items-center justify-center", children: jsxRuntimeExports.jsx(Chevron, { className: "size-3 text-gray-900" }) });
46889
+ const tick = jsxRuntimeExports.jsx(MarkerTick, { className: "h-3.5 shrink-0" });
46890
+ return jsxRuntimeExports.jsx("button", { type: "button", "aria-label": label, title: label, onClick: (e) => {
46891
+ e.stopPropagation();
46892
+ onReveal == null ? void 0 : onReveal(targetMs);
46893
+ }, className: cn$4("pointer-events-auto absolute top-1/2 z-20 flex h-6 -translate-y-1/2 cursor-pointer items-center rounded-[0.25rem] border border-gray-alpha-400 bg-background-100 shadow-sm hover:bg-gray-100", direction === "right" ? "right-0 pl-1.5" : "left-0 pr-1.5"), children: direction === "left" ? jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [chevron, tick] }) : jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [tick, chevron] }) });
46894
+ }
46623
46895
  const runningStripes = "_runningStripes_62ud0_1";
46624
46896
  const styles = {
46625
46897
  runningStripes
@@ -46630,7 +46902,7 @@ const TIMELINE_PADDING_PX = 16;
46630
46902
  const SEGMENT_CLASSES = {
46631
46903
  queued: "bg-gray-400 border border-gray-500",
46632
46904
  retrying: "bg-gray-400 border border-gray-500",
46633
- waiting: "bg-gray-400 border border-gray-500",
46905
+ waiting: "bg-gray-200 border border-gray-500",
46634
46906
  running: "bg-blue-200 border border-blue-500",
46635
46907
  completed: "bg-blue-200 border border-blue-500",
46636
46908
  failed: "bg-red-200 border border-red-500",
@@ -46711,8 +46983,8 @@ function projectSegments(segments, spanStartMs, spanDurationMs, geometry) {
46711
46983
  ];
46712
46984
  });
46713
46985
  }
46714
- function DurationLabel({ label }) {
46715
- return jsxRuntimeExports.jsx("span", { className: "pointer-events-none absolute inset-0 flex items-center justify-start overflow-hidden px-1 text-[10px] font-mono font-medium leading-none whitespace-nowrap text-left text-gray-1000 tabular-nums opacity-0 group-hover/timeline-row:opacity-100", children: label });
46986
+ function DurationLabel({ label, className }) {
46987
+ return jsxRuntimeExports.jsx("span", { className: cn$4("pointer-events-none absolute inset-0 flex items-center justify-start overflow-hidden px-1 text-[10px] font-mono font-medium leading-none whitespace-nowrap text-left text-gray-1000 tabular-nums opacity-0 group-hover/timeline-row:opacity-100", className), children: label });
46716
46988
  }
46717
46989
  function BoundaryArrow({ direction }) {
46718
46990
  const Icon2 = direction === "right" ? ArrowRight : ArrowLeft;
@@ -46727,15 +46999,18 @@ function LeadInConnector({ leftPct, widthPct, label }) {
46727
46999
  width: `calc(${widthPct}% - 1px)`
46728
47000
  }, children: [jsxRuntimeExports.jsx("div", { className: "absolute left-0 top-1/2 h-4 w-px -translate-y-1/2 bg-gray-500" }), jsxRuntimeExports.jsx("div", { className: "absolute inset-x-0 top-1/2 h-px -translate-y-1/2 bg-gray-500" }), label ? jsxRuntimeExports.jsx(DurationLabel, { label }) : null] });
46729
47001
  }
46730
- function SegmentBar({ segments }) {
47002
+ function SegmentBar({ segments, showLabels = true }) {
46731
47003
  return jsxRuntimeExports.jsx("div", { className: "relative h-6 w-full", children: segments.map((seg, i) => {
46732
47004
  if (seg.status === "queued") {
46733
47005
  const leadInLabel = formatDurationPrecise(seg.fullDurationMs);
46734
- const showLeadInLabel = seg.pixelWidth >= Math.max(40, leadInLabel.length * 6 + 12);
46735
- return jsxRuntimeExports.jsx(LeadInConnector, { leftPct: seg.leftPct, widthPct: seg.widthPct, label: showLeadInLabel ? leadInLabel : null }, i);
47006
+ const showLeadInLabel = showLabels && seg.pixelWidth >= Math.max(40, leadInLabel.length * 6 + 12);
47007
+ const isFullWidthQueued = segments.length === 1;
47008
+ return jsxRuntimeExports.jsxs(reactExports.Fragment, { children: [jsxRuntimeExports.jsx(LeadInConnector, { leftPct: seg.leftPct, widthPct: seg.widthPct, label: showLeadInLabel ? leadInLabel : null }), isFullWidthQueued ? jsxRuntimeExports.jsx("div", { className: "absolute top-1/2 h-4 w-px -translate-y-1/2 bg-gray-500", style: {
47009
+ left: `calc(${seg.leftPct + seg.widthPct}% - 1.5px)`
47010
+ } }) : null] }, i);
46736
47011
  }
46737
47012
  const label = formatDurationPrecise(seg.fullDurationMs);
46738
- const showLabel = seg.pixelWidth >= Math.max(40, label.length * 6 + 12);
47013
+ const showLabel = showLabels && seg.pixelWidth >= Math.max(40, label.length * 6 + 12);
46739
47014
  return jsxRuntimeExports.jsxs("div", { className: cn$4("absolute h-full overflow-hidden rounded-[0.25rem]", SEGMENT_CLASSES[seg.status]), style: {
46740
47015
  // 1px gap between adjacent segments, distributed equally.
46741
47016
  left: `calc(${seg.leftPct}% + 0.5px)`,
@@ -46744,31 +47019,7 @@ function SegmentBar({ segments }) {
46744
47019
  }, children: [ACTIVE_SEGMENT_STATUSES.has(seg.status) ? jsxRuntimeExports.jsx(RunningStripes, {}) : null, showLabel ? jsxRuntimeExports.jsx(DurationLabel, { label }) : null] }, i);
46745
47020
  }) });
46746
47021
  }
46747
- function formatMarkerTime(ms) {
46748
- const date2 = new Date(ms);
46749
- return date2.toLocaleTimeString("en-US", {
46750
- hour: "2-digit",
46751
- minute: "2-digit",
46752
- second: "2-digit",
46753
- hour12: false
46754
- }) + "." + date2.getMilliseconds().toString().padStart(3, "0");
46755
- }
46756
- function AttrSetMarkers({ span, viewStart, viewDuration }) {
46757
- const markers2 = reactExports.useMemo(() => span.events.filter((e) => e.name === "attr_set"), [span.events]);
46758
- if (markers2.length === 0 || viewDuration <= 0)
46759
- return null;
46760
- return jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment, { children: markers2.map((event, index2) => {
46761
- const timeMs = getHighResInMs(event.timestamp);
46762
- const frac = (timeMs - viewStart) / viewDuration;
46763
- if (frac < 0 || frac > 1)
46764
- return null;
46765
- return jsxRuntimeExports.jsxs(Tooltip$1, { children: [jsxRuntimeExports.jsx(TooltipTrigger$1, { asChild: true, children: jsxRuntimeExports.jsx("div", { "aria-label": "Attributes set", className: "absolute top-1/2 z-10 flex h-4 w-4 -translate-x-1/2 -translate-y-1/2 cursor-pointer items-center justify-center", style: { left: `${frac * 100}%` }, children: jsxRuntimeExports.jsx("div", { className: "h-2 w-2 rotate-45 rounded-[1px] border", style: {
46766
- backgroundColor: "var(--ds-teal-400)",
46767
- borderColor: "var(--ds-teal-900)"
46768
- } }) }) }), jsxRuntimeExports.jsxs(TooltipContent$1, { children: ["Attributes set · ", formatMarkerTime(timeMs)] })] }, `attr-set-${index2}`);
46769
- }) });
46770
- }
46771
- const TimelineBar = reactExports.memo(function TimelineBar2({ span, viewStart, viewDuration, containerWidth, isSelected, isDimmed, onSelect }) {
47022
+ const TimelineBar = reactExports.memo(function TimelineBar2({ span, viewStart, viewDuration, containerWidth, isSelected, isDimmed, onSelect, onRevealTime }) {
46772
47023
  var _a3;
46773
47024
  const startMs = getHighResInMs(span.startTime);
46774
47025
  const endMs = getHighResInMs(span.endTime);
@@ -46776,6 +47027,10 @@ const TimelineBar = reactExports.memo(function TimelineBar2({ span, viewStart, v
46776
47027
  const geometry = reactExports.useMemo(() => computeBarGeometry(startMs, endMs, viewStart, viewStart + viewDuration, containerWidth), [startMs, endMs, viewStart, viewDuration, containerWidth]);
46777
47028
  const baseSegments = reactExports.useMemo(() => computeSpanSegments(span), [span]);
46778
47029
  const segments = reactExports.useMemo(() => geometry.mode.kind === "full" ? projectSegments(baseSegments, startMs, totalDurationMs, geometry) : [], [geometry, baseSegments, startMs, totalDurationMs]);
47030
+ const baseMarkers = reactExports.useMemo(() => computeSpanMarkers(span), [span]);
47031
+ const markers2 = reactExports.useMemo(() => geometry.mode.kind === "full" ? cullCollidingMarkers(projectMarkers(baseMarkers, geometry.visibleStartMs, geometry.visibleEndMs), geometry.visiblePixelWidth) : [], [geometry, baseMarkers]);
47032
+ const offscreen = reactExports.useMemo(() => geometry.mode.kind === "full" ? computeOffscreenMarkers(baseMarkers, geometry.visibleStartMs, geometry.visibleEndMs) : { left: null, right: null }, [geometry, baseMarkers]);
47033
+ const hasMarkers = markers2.length > 0 || offscreen.left !== null || offscreen.right !== null;
46779
47034
  const workflowStatus = (_a3 = span.attributes.data) == null ? void 0 : _a3.status;
46780
47035
  const isErrored = span.status.code === 2 || workflowStatus === "failed";
46781
47036
  const colors = getResourceColor(span.resource);
@@ -46786,7 +47041,11 @@ const TimelineBar = reactExports.memo(function TimelineBar2({ span, viewStart, v
46786
47041
  const handleClick = reactExports.useCallback(() => {
46787
47042
  onSelect(span.spanId);
46788
47043
  }, [onSelect, span.spanId]);
46789
- return jsxRuntimeExports.jsx("div", { role: "treeitem", "aria-selected": isSelected, "aria-expanded": isSelected, "aria-level": 1, className: cn$4("group/timeline-row h-10 relative flex items-center hover:bg-gray-100 aria-selected:bg-gray-100 aria-selected:hover:bg-gray-200 transition-opacity", isDimmed && "opacity-35"), onClick: handleClick, children: jsxRuntimeExports.jsxs("div", { className: "absolute inset-y-0", style: TIMELINE_INSET_STYLE, children: [jsxRuntimeExports.jsx("div", { className: "absolute top-1/2 h-6 -translate-y-1/2 rounded-[0.25rem]", style: getBarPositionStyle(geometry), children: geometry.mode.kind === "arrow" ? jsxRuntimeExports.jsx(BoundaryArrow, { direction: geometry.mode.direction }) : geometry.mode.kind === "tiny" ? jsxRuntimeExports.jsx("div", { className: "h-6 rounded-[0.25rem] border", style: { background: fallbackBg, borderColor: fallbackBorder } }) : segments.length > 0 ? jsxRuntimeExports.jsx(SegmentBar, { segments }) : jsxRuntimeExports.jsx(PlainBar, { bg: fallbackBg, border: fallbackBorder, label: showTotalLabel ? totalLabel : null }) }), jsxRuntimeExports.jsx(AttrSetMarkers, { span, viewStart, viewDuration })] }) });
47044
+ return jsxRuntimeExports.jsx("div", { role: "treeitem", "aria-selected": isSelected, "aria-expanded": isSelected, "aria-level": 1, className: cn$4("group/timeline-row h-10 relative flex items-center hover:bg-gray-100 aria-selected:bg-gray-100 aria-selected:hover:bg-gray-200 transition-opacity", isDimmed && "opacity-35"), onClick: handleClick, children: jsxRuntimeExports.jsxs("div", { className: "absolute inset-y-0", style: TIMELINE_INSET_STYLE, children: [jsxRuntimeExports.jsx("div", { className: "absolute top-1/2 h-6 -translate-y-1/2 overflow-hidden rounded-[0.25rem]", style: getBarPositionStyle(geometry), children: geometry.mode.kind === "arrow" ? jsxRuntimeExports.jsx(BoundaryArrow, { direction: geometry.mode.direction }) : geometry.mode.kind === "tiny" ? jsxRuntimeExports.jsx("div", { className: "h-6 rounded-[0.25rem] border", style: { background: fallbackBg, borderColor: fallbackBorder } }) : segments.length > 0 ? jsxRuntimeExports.jsx(SegmentBar, { segments, showLabels: !hasMarkers }) : jsxRuntimeExports.jsx(PlainBar, { bg: fallbackBg, border: fallbackBorder, label: showTotalLabel ? totalLabel : null }) }), hasMarkers ? jsxRuntimeExports.jsxs("div", { className: "pointer-events-none absolute top-1/2 h-6 -translate-y-1/2", style: getBarPositionStyle(geometry), children: [markers2.length > 0 ? jsxRuntimeExports.jsx(MarkerLayer, { markers: markers2 }) : null, offscreen.left ? jsxRuntimeExports.jsx(OffscreenMarkerIndicator, { direction: "left", count: offscreen.left.count, targetMs: offscreen.left.nearestMs, onReveal: onRevealTime }) : null, offscreen.right ? jsxRuntimeExports.jsx(OffscreenMarkerIndicator, { direction: "right", count: offscreen.right.count, targetMs: offscreen.right.nearestMs, onReveal: onRevealTime }) : null, showTotalLabel ? jsxRuntimeExports.jsx(DurationLabel, {
47045
+ label: totalLabel,
47046
+ // Shift clear of the left edge indicator so it isn't covered.
47047
+ className: offscreen.left ? "pl-10" : void 0
47048
+ }) : null] }) : null] }) });
46790
47049
  });
46791
47050
  const DELTA_CAP_HEIGHT_PX = 8;
46792
47051
  const DELTA_ROW_OFFSET_PX = 8;
@@ -46802,7 +47061,7 @@ const DeltaIndicator = reactExports.memo(function DeltaIndicator2({ leftFrac, ri
46802
47061
  function TimelineHeader({ markers: markers2, hoverInfo: hoverInfo2 }) {
46803
47062
  return jsxRuntimeExports.jsx("div", { className: "relative bg-background-100 border-b border-gray-alpha-400 h-10 min-h-10 flex items-end px-4 pb-1", children: jsxRuntimeExports.jsxs("div", { className: "relative h-full flex-1", children: [markers2.map((m2) => jsxRuntimeExports.jsx("span", { className: "absolute bottom-1 font-mono text-xs font-normal leading-4 text-gray-900 whitespace-nowrap", style: { left: `${m2.position * 100}%` }, children: m2.label }, String(m2.value))), hoverInfo2 && jsxRuntimeExports.jsx("span", { className: "absolute top-1 pointer-events-none z-10 font-mono text-[11px] leading-4 text-gray-1000 whitespace-nowrap bg-background-100 border border-gray-alpha-400 rounded px-1 -translate-x-1/2", style: { left: `${hoverInfo2.fraction * 100}%` }, children: hoverInfo2.label })] }) });
46804
47063
  }
46805
- function Timeline({ spans, viewStart, viewEnd, markers: markers2, selectedId, searchResult, onSelect, hoverFraction, altHeld = false }) {
47064
+ function Timeline({ spans, viewStart, viewEnd, markers: markers2, selectedId, searchResult, onSelect, onRevealTime, hoverFraction, altHeld = false }) {
46806
47065
  const containerRef = reactExports.useRef(null);
46807
47066
  const [containerWidth, setContainerWidth] = reactExports.useState(0);
46808
47067
  const viewDuration = viewEnd - viewStart;
@@ -46822,7 +47081,7 @@ function Timeline({ spans, viewStart, viewEnd, markers: markers2, selectedId, se
46822
47081
  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) => (
46823
47082
  // Skip the "0s" origin marker since the left edge already implies it.
46824
47083
  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
46825
- )) }), 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 }, 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: formatDuration(gap.gapMs, true), rowIndex: gap.rowIndex }, gap.rowIndex)) })] });
47084
+ )) }), 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: formatDuration(gap.gapMs, true), rowIndex: gap.rowIndex }, gap.rowIndex)) })] });
46826
47085
  }
46827
47086
  const ActiveSpanContext = reactExports.createContext(null);
46828
47087
  ActiveSpanContext.displayName = "ActiveSpanContext";
@@ -49266,126 +49525,128 @@ const mermaid3ZIDBTTL = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.def
49266
49525
  Mermaid: Nt
49267
49526
  }, Symbol.toStringTag, { value: "Module" }));
49268
49527
  export {
49269
- ContextCardProvider as $,
49528
+ RESERVED_ATTRIBUTE_KEY_PREFIX as $,
49270
49529
  Anchor as A,
49271
49530
  Button as B,
49272
49531
  Content as C,
49273
49532
  DEFAULT_PAGE_SIZE as D,
49274
- Arrow$1 as E,
49275
- useComposedRefs as F,
49276
- fetchRun as G,
49277
- cva as H,
49278
- Presence as I,
49279
- createContext2 as J,
49533
+ Root2 as E,
49534
+ Arrow$1 as F,
49535
+ useComposedRefs as G,
49536
+ fetchRun as H,
49537
+ cva as I,
49538
+ Presence as J,
49280
49539
  Ks as K,
49281
49540
  LoaderCircle as L,
49282
- fetchWorkflowsManifest as M,
49283
- cn$4 as N,
49284
- DataInspector as O,
49541
+ createContext2 as M,
49542
+ fetchWorkflowsManifest as N,
49543
+ cn$4 as O,
49285
49544
  Primitive as P,
49286
49545
  Qe as Q,
49287
49546
  R,
49288
49547
  ServerConfigProvider as S,
49289
49548
  Tooltip as T,
49290
- DecryptClickContext as U,
49549
+ DataInspector as U,
49291
49550
  VISUALLY_HIDDEN_STYLES as V,
49292
- Button$1 as W,
49293
- Spinner as X,
49294
- Lock as Y,
49295
- RESERVED_ATTRIBUTE_KEY_PREFIX as Z,
49296
- useHasContextCardProvider as _,
49551
+ DecryptClickContext as W,
49552
+ Button$1 as X,
49553
+ Spinner as Y,
49554
+ Lock as Z,
49555
+ __vitePreload as _,
49297
49556
  TooltipTrigger as a,
49298
- cancelRun as a$,
49299
- ContextCardTrigger as a0,
49557
+ hide as a$,
49558
+ ContextCardProvider as a0,
49300
49559
  Skeleton$1 as a1,
49301
49560
  Yr as a2,
49302
49561
  isEncryptedMarker as a3,
49303
- formatDuration as a4,
49304
- _r as a5,
49305
- RunClickContext as a6,
49306
- StreamClickContext as a7,
49307
- isExpiredMarker as a8,
49308
- isDoStreamStep as a9,
49309
- SidebarDataProvider as aA,
49310
- hydrateResourceIOWithKey as aB,
49311
- hydrateResourceIO as aC,
49312
- fetchHook as aD,
49313
- fetchStep as aE,
49314
- fetchStreams as aF,
49315
- Slot as aG,
49316
- Slottable as aH,
49317
- buttonVariants as aI,
49318
- fetchEvent as aJ,
49319
- fetchEventsByCorrelationId as aK,
49320
- isEncryptedData as aL,
49321
- hydrateData as aM,
49322
- getWebRevivers as aN,
49323
- LIVE_UPDATE_INTERVAL_MS as aO,
49324
- getEncryptionKeyForRun as aP,
49325
- StreamViewer as aQ,
49326
- composeRefs as aR,
49327
- useFloating as aS,
49328
- offset as aT,
49329
- shift as aU,
49330
- limitShift as aV,
49331
- flip as aW,
49332
- size as aX,
49333
- arrow as aY,
49334
- hide as aZ,
49335
- autoUpdate as a_,
49336
- extractConversation as aa,
49337
- hasEncryptedFields as ab,
49338
- EVENT_DATA_REF_FIELDS as ac,
49339
- useSidebarDataOptional as ad,
49340
- clsx as ae,
49341
- useRowWindow as af,
49342
- isSpanDimmedBySearch as ag,
49343
- ROW_HEIGHT_PX as ah,
49344
- getSpanDurationMs as ai,
49345
- formatDurationPrecise as aj,
49346
- TooltipProvider as ak,
49347
- ActiveSpanProvider as al,
49348
- useActiveSpan as am,
49349
- useSidebarData as an,
49350
- searchSpans as ao,
49351
- computeRootBounds as ap,
49352
- computeTimeMarkers as aq,
49353
- getHighResInMs as ar,
49354
- TIMELINE_PADDING_PX as as,
49355
- Timeline as at,
49356
- TimelineHeader as au,
49357
- IconButton as av,
49358
- Tooltip$1 as aw,
49359
- TooltipTrigger$1 as ax,
49360
- TooltipContent$1 as ay,
49361
- useReducedMotion as az,
49562
+ TimestampTooltip as a4,
49563
+ formatDuration as a5,
49564
+ _r as a6,
49565
+ RunClickContext as a7,
49566
+ StreamClickContext as a8,
49567
+ isExpiredMarker as a9,
49568
+ TooltipTrigger$1 as aA,
49569
+ TooltipContent$1 as aB,
49570
+ SidebarDataProvider as aC,
49571
+ hydrateResourceIOWithKey as aD,
49572
+ hydrateResourceIO as aE,
49573
+ fetchHook as aF,
49574
+ fetchStep as aG,
49575
+ fetchStreams as aH,
49576
+ Slot as aI,
49577
+ Slottable as aJ,
49578
+ buttonVariants as aK,
49579
+ fetchEvent as aL,
49580
+ fetchEventsByCorrelationId as aM,
49581
+ isEncryptedData as aN,
49582
+ hydrateData as aO,
49583
+ getWebRevivers as aP,
49584
+ LIVE_UPDATE_INTERVAL_MS as aQ,
49585
+ getEncryptionKeyForRun as aR,
49586
+ StreamViewer as aS,
49587
+ composeRefs as aT,
49588
+ useFloating as aU,
49589
+ offset as aV,
49590
+ shift as aW,
49591
+ limitShift as aX,
49592
+ flip as aY,
49593
+ size as aZ,
49594
+ arrow as a_,
49595
+ isDoStreamStep as aa,
49596
+ extractConversation as ab,
49597
+ hasEncryptedFields as ac,
49598
+ EVENT_DATA_REF_FIELDS as ad,
49599
+ useSidebarDataOptional as ae,
49600
+ clsx as af,
49601
+ useRowWindow as ag,
49602
+ isSpanDimmedBySearch as ah,
49603
+ ROW_HEIGHT_PX as ai,
49604
+ getSpanDurationMs as aj,
49605
+ formatDurationPrecise as ak,
49606
+ TooltipProvider as al,
49607
+ ActiveSpanProvider as am,
49608
+ useActiveSpan as an,
49609
+ useSidebarData as ao,
49610
+ useReducedMotion as ap,
49611
+ searchSpans as aq,
49612
+ computeRootBounds as ar,
49613
+ computeTimeMarkers as as,
49614
+ getHighResInMs as at,
49615
+ scrollRowIntoView as au,
49616
+ TIMELINE_PADDING_PX as av,
49617
+ Timeline as aw,
49618
+ TimelineHeader as ax,
49619
+ IconButton as ay,
49620
+ Tooltip$1 as az,
49362
49621
  TooltipContent as b,
49363
- reenqueueRun as b0,
49364
- wakeUpRun as b1,
49365
- resumeHook as b2,
49366
- recreateRun as b3,
49622
+ autoUpdate as b0,
49623
+ cancelRun as b1,
49624
+ reenqueueRun as b2,
49625
+ wakeUpRun as b3,
49626
+ resumeHook as b4,
49627
+ recreateRun as b5,
49367
49628
  createLucideIcon as c,
49368
- cn as d,
49369
- Toaster as e,
49370
- TooltipProvider$1 as f,
49371
- useToast as g,
49372
- fetchRuns as h,
49373
- fetchHooks as i,
49374
- getPaginationDisplay as j,
49375
- fetchEvents as k,
49376
- useCallbackRef as l,
49377
- useComposedRefs$1 as m,
49378
- composeEventHandlers as n,
49379
- useLayoutEffect2 as o,
49380
- Portal$1 as p,
49381
- useId as q,
49382
- runHealthCheck as r,
49383
- createPopperScope as s,
49629
+ runHealthCheck as d,
49630
+ cn as e,
49631
+ Toaster as f,
49632
+ TooltipProvider$1 as g,
49633
+ useToast as h,
49634
+ fetchRuns as i,
49635
+ fetchHooks as j,
49636
+ getPaginationDisplay as k,
49637
+ fetchEvents as l,
49638
+ useCallbackRef as m,
49639
+ useComposedRefs$1 as n,
49640
+ composeEventHandlers as o,
49641
+ useLayoutEffect2 as p,
49642
+ Portal$1 as q,
49643
+ registerZstdDecoder as r,
49644
+ useId as s,
49384
49645
  toast as t,
49385
49646
  useServerConfig as u,
49386
- DismissableLayer as v,
49387
- createContextScope as w,
49388
- createSlot as x,
49389
- useControllableState as y,
49390
- Root2 as z
49647
+ createPopperScope as v,
49648
+ DismissableLayer as w,
49649
+ createContextScope as x,
49650
+ createSlot as y,
49651
+ useControllableState as z
49391
49652
  };