@workflow/web 5.0.0-beta.13 → 5.0.0-beta.15

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 (21) hide show
  1. package/build/client/assets/{highlighted-body-B3W2YXNL-B8ZRlnzz.js → highlighted-body-B3W2YXNL-BQ1pmB9V.js} +1 -1
  2. package/build/client/assets/{home-1yC3MOjQ.js → home-DmsdVk2U.js} +2 -2
  3. package/build/client/assets/{manifest-9f37c22f.js → manifest-67209c1f.js} +1 -1
  4. package/build/client/assets/{mermaid-3ZIDBTTL-BDM4-x6u.js → mermaid-3ZIDBTTL-BMWEihLr.js} +177 -154
  5. package/build/client/assets/{mermaid-3ZIDBTTL-DKxHcEOp.css → mermaid-3ZIDBTTL-CVTQRy2j.css} +1 -1
  6. package/build/client/assets/{root-C5RLIKj5.js → root-BABNjrUh.js} +1 -1
  7. package/build/client/assets/{run-detail-DM1PDAnQ.js → run-detail-9xQOGhVk.js} +53 -15
  8. package/build/client/assets/server-build-Ik-p0gUh.css +1 -0
  9. package/build/client/assets/{workflow-graph-viewer-C8H50hkM.js → workflow-graph-viewer-fgQ2XQ5R.js} +1 -1
  10. package/build/server/assets/{app-eXXkzWLS.js → app-DM9e_6xn.js} +1 -1
  11. package/build/server/assets/{highlighted-body-B3W2YXNL-DMxq-VLe.js → highlighted-body-B3W2YXNL-tYGHwGrY.js} +2 -2
  12. package/build/server/assets/index-8Fb8OEQ2.js +95 -0
  13. package/build/server/assets/index-B8YoYr9f.js +1117 -0
  14. package/build/server/assets/{mermaid-3ZIDBTTL-DNPNsNRF.js → mermaid-3ZIDBTTL-EN1JYLRP.js} +2 -2
  15. package/build/server/assets/{server-build-CSP1Aknr.js → server-build-CZXlov2m.js} +852 -1317
  16. package/build/server/assets/{token-DOrkjd5O.js → token-CDoC3gHn.js} +2 -2
  17. package/build/server/assets/{token-util-Hv7wRzsW.js → token-util-C02bLOPS.js} +2 -2
  18. package/build/server/index.js +1 -1
  19. package/package.json +5 -5
  20. package/build/client/assets/server-build-CNnlgxpd.css +0 -1
  21. package/build/server/assets/index-BjEgWhxl.js +0 -89
@@ -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-B8ZRlnzz.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/highlighted-body-B3W2YXNL-BQ1pmB9V.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);
@@ -6779,6 +6779,41 @@ function formatDuration(ms, compact = false) {
6779
6779
  parts.push(`${seconds}s`);
6780
6780
  return parts.join(" ");
6781
6781
  }
6782
+ const preciseSecondsFormatter = new Intl.NumberFormat(void 0, {
6783
+ minimumFractionDigits: 2,
6784
+ maximumFractionDigits: 2
6785
+ });
6786
+ function formatDurationPrecise(ms) {
6787
+ if (ms === 0) {
6788
+ return "0s";
6789
+ }
6790
+ if (ms < MS_IN_SECOND) {
6791
+ const roundedMs = Math.round(ms);
6792
+ if (roundedMs < MS_IN_SECOND) {
6793
+ return `${roundedMs}ms`;
6794
+ }
6795
+ }
6796
+ const normalizedMs = Math.round(ms / 10) * 10;
6797
+ if (normalizedMs < MS_IN_MINUTE) {
6798
+ return `${preciseSecondsFormatter.format(normalizedMs / MS_IN_SECOND)}s`;
6799
+ }
6800
+ const days = Math.floor(normalizedMs / MS_IN_DAY);
6801
+ const hours = Math.floor(normalizedMs % MS_IN_DAY / MS_IN_HOUR);
6802
+ const minutes = Math.floor(normalizedMs % MS_IN_HOUR / MS_IN_MINUTE);
6803
+ const seconds = normalizedMs % MS_IN_MINUTE / MS_IN_SECOND;
6804
+ const parts = [];
6805
+ if (days > 0) {
6806
+ parts.push(`${days}d`);
6807
+ }
6808
+ if (hours > 0) {
6809
+ parts.push(`${hours}h`);
6810
+ }
6811
+ if (minutes > 0) {
6812
+ parts.push(`${minutes}m`);
6813
+ }
6814
+ parts.push(`${preciseSecondsFormatter.format(seconds)}s`);
6815
+ return parts.join(" ");
6816
+ }
6782
6817
  function isDoStreamStep(stepName) {
6783
6818
  return stepName.endsWith("//doStreamStep");
6784
6819
  }
@@ -10858,7 +10893,6 @@ function shallowClone(o) {
10858
10893
  return o;
10859
10894
  }
10860
10895
  const propertyKeyTypes = /* @__PURE__ */ new Set(["string", "number", "symbol"]);
10861
- const primitiveTypes = /* @__PURE__ */ new Set(["string", "number", "bigint", "boolean", "symbol", "undefined"]);
10862
10896
  function escapeRegex(str) {
10863
10897
  return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
10864
10898
  }
@@ -13164,51 +13198,6 @@ function handleReadonlyResult(payload) {
13164
13198
  payload.value = Object.freeze(payload.value);
13165
13199
  return payload;
13166
13200
  }
13167
- const $ZodTemplateLiteral = /* @__PURE__ */ $constructor("$ZodTemplateLiteral", (inst, def) => {
13168
- $ZodType.init(inst, def);
13169
- const regexParts = [];
13170
- for (const part of def.parts) {
13171
- if (typeof part === "object" && part !== null) {
13172
- if (!part._zod.pattern) {
13173
- throw new Error(`Invalid template literal part, no pattern found: ${[...part._zod.traits].shift()}`);
13174
- }
13175
- const source = part._zod.pattern instanceof RegExp ? part._zod.pattern.source : part._zod.pattern;
13176
- if (!source)
13177
- throw new Error(`Invalid template literal part: ${part._zod.traits}`);
13178
- const start = source.startsWith("^") ? 1 : 0;
13179
- const end = source.endsWith("$") ? source.length - 1 : source.length;
13180
- regexParts.push(source.slice(start, end));
13181
- } else if (part === null || primitiveTypes.has(typeof part)) {
13182
- regexParts.push(escapeRegex(`${part}`));
13183
- } else {
13184
- throw new Error(`Invalid template literal part: ${part}`);
13185
- }
13186
- }
13187
- inst._zod.pattern = new RegExp(`^${regexParts.join("")}$`);
13188
- inst._zod.parse = (payload, _ctx) => {
13189
- if (typeof payload.value !== "string") {
13190
- payload.issues.push({
13191
- input: payload.value,
13192
- inst,
13193
- expected: "string",
13194
- code: "invalid_type"
13195
- });
13196
- return payload;
13197
- }
13198
- inst._zod.pattern.lastIndex = 0;
13199
- if (!inst._zod.pattern.test(payload.value)) {
13200
- payload.issues.push({
13201
- input: payload.value,
13202
- inst,
13203
- code: "invalid_format",
13204
- format: def.format ?? "template_literal",
13205
- pattern: inst._zod.pattern.source
13206
- });
13207
- return payload;
13208
- }
13209
- return payload;
13210
- };
13211
- });
13212
13201
  const $ZodLazy = /* @__PURE__ */ $constructor("$ZodLazy", (inst, def) => {
13213
13202
  $ZodType.init(inst, def);
13214
13203
  defineLazy(inst._zod, "innerType", () => def.getter());
@@ -14361,14 +14350,6 @@ const literalProcessor = (schema, ctx, json, _params) => {
14361
14350
  json.enum = vals;
14362
14351
  }
14363
14352
  };
14364
- const templateLiteralProcessor = (schema, _ctx, json, _params) => {
14365
- const _json = json;
14366
- const pattern = schema._zod.pattern;
14367
- if (!pattern)
14368
- throw new Error("Pattern not found in template literal");
14369
- _json.type = "string";
14370
- _json.pattern = pattern.source;
14371
- };
14372
14353
  const customProcessor = (_schema, ctx, _json, _params) => {
14373
14354
  if (ctx.unrepresentable === "throw") {
14374
14355
  throw new Error("Custom types cannot be represented in JSON Schema");
@@ -15282,18 +15263,6 @@ function readonly(innerType) {
15282
15263
  innerType
15283
15264
  });
15284
15265
  }
15285
- const ZodTemplateLiteral = /* @__PURE__ */ $constructor("ZodTemplateLiteral", (inst, def) => {
15286
- $ZodTemplateLiteral.init(inst, def);
15287
- ZodType.init(inst, def);
15288
- inst._zod.processJSONSchema = (ctx, json, params) => templateLiteralProcessor(inst, ctx, json);
15289
- });
15290
- function templateLiteral(parts, params) {
15291
- return new ZodTemplateLiteral({
15292
- type: "template_literal",
15293
- parts,
15294
- ...normalizeParams(params)
15295
- });
15296
- }
15297
15266
  const ZodLazy = /* @__PURE__ */ $constructor("ZodLazy", (inst, def) => {
15298
15267
  $ZodLazy.init(inst, def);
15299
15268
  ZodType.init(inst, def);
@@ -15342,10 +15311,11 @@ function _instanceof(cls, params = {}) {
15342
15311
  function date(params) {
15343
15312
  return /* @__PURE__ */ _coercedDate(ZodDate, params);
15344
15313
  }
15345
- object({
15314
+ const AttributeChangeSchema = object({
15346
15315
  key: string$2(),
15347
15316
  value: union([string$2(), _null()])
15348
15317
  });
15318
+ const AttributeChangesSchema = array(AttributeChangeSchema);
15349
15319
  const BinarySerializedDataSchema = _instanceof(Uint8Array);
15350
15320
  const LegacySerializedDataSchemaV1 = any();
15351
15321
  const SerializedDataSchema = union([
@@ -15370,6 +15340,8 @@ const EventTypeSchema = _enum([
15370
15340
  "run_completed",
15371
15341
  "run_failed",
15372
15342
  "run_cancelled",
15343
+ // Run attribute events
15344
+ "attr_set",
15373
15345
  // Step lifecycle events
15374
15346
  "step_created",
15375
15347
  "step_completed",
@@ -15485,13 +15457,34 @@ const WaitCompletedEventSchema = BaseEventSchema.extend({
15485
15457
  resumeAt: date().optional()
15486
15458
  }).optional()
15487
15459
  });
15460
+ const AttributeWriterSchema = discriminatedUnion("type", [
15461
+ object({
15462
+ type: literal("workflow")
15463
+ }),
15464
+ object({
15465
+ type: literal("step"),
15466
+ stepId: string$2(),
15467
+ attempt: number$2()
15468
+ })
15469
+ ]);
15470
+ const AttrSetEventSchema = BaseEventSchema.extend({
15471
+ eventType: literal("attr_set"),
15472
+ correlationId: string$2().optional(),
15473
+ eventData: object({
15474
+ changes: AttributeChangesSchema,
15475
+ writer: AttributeWriterSchema,
15476
+ allowReservedAttributes: literal(true).optional()
15477
+ })
15478
+ });
15488
15479
  const RunCreatedEventSchema = BaseEventSchema.extend({
15489
15480
  eventType: literal("run_created"),
15490
15481
  eventData: object({
15491
15482
  deploymentId: string$2(),
15492
15483
  workflowName: string$2(),
15493
15484
  input: SerializedDataSchema,
15494
- executionContext: record(string$2(), any()).optional()
15485
+ executionContext: record(string$2(), any()).optional(),
15486
+ attributes: record(string$2(), string$2()).optional(),
15487
+ allowReservedAttributes: literal(true).optional()
15495
15488
  })
15496
15489
  });
15497
15490
  const RunStartedEventSchema = BaseEventSchema.extend({
@@ -15500,7 +15493,9 @@ const RunStartedEventSchema = BaseEventSchema.extend({
15500
15493
  input: SerializedDataSchema.optional(),
15501
15494
  deploymentId: string$2().optional(),
15502
15495
  workflowName: string$2().optional(),
15503
- executionContext: record(string$2(), any()).optional()
15496
+ executionContext: record(string$2(), any()).optional(),
15497
+ attributes: record(string$2(), string$2()).optional(),
15498
+ allowReservedAttributes: literal(true).optional()
15504
15499
  }).optional()
15505
15500
  });
15506
15501
  const RunCompletedEventSchema = BaseEventSchema.extend({
@@ -15532,6 +15527,7 @@ discriminatedUnion("eventType", [
15532
15527
  RunCompletedEventSchema,
15533
15528
  RunFailedEventSchema,
15534
15529
  RunCancelledEventSchema,
15530
+ AttrSetEventSchema,
15535
15531
  // Step lifecycle events
15536
15532
  StepCreatedEventSchema,
15537
15533
  StepCompletedEventSchema,
@@ -15553,6 +15549,7 @@ const AllEventsSchema = discriminatedUnion("eventType", [
15553
15549
  RunCompletedEventSchema,
15554
15550
  RunFailedEventSchema,
15555
15551
  RunCancelledEventSchema,
15552
+ AttrSetEventSchema,
15556
15553
  // Step lifecycle events
15557
15554
  StepCreatedEventSchema,
15558
15555
  StepCompletedEventSchema,
@@ -15589,11 +15586,9 @@ object({
15589
15586
  isWebhook: boolean$2().optional(),
15590
15587
  isSystem: boolean$2().optional()
15591
15588
  });
15592
- const QueuePrefix = union([
15593
- literal("__wkf_step_"),
15594
- literal("__wkf_workflow_")
15595
- ]);
15596
- templateLiteral([QueuePrefix, string$2()]);
15589
+ string$2().regex(/^__(?:[a-z][a-z0-9]*_)?wkf_(?:workflow|step)_$/, "Must match __wkf_{workflow|step}_ or __{namespace}_wkf_{workflow|step}_");
15590
+ string$2().regex(/^__(?:[a-z][a-z0-9]*_)?wkf_(?:workflow|step)_.+$/, "Must be a valid queue name with a recognized prefix");
15591
+ string$2().regex(/^[a-z][a-z0-9]*$/, "Must be lowercase alphanumeric, starting with a letter");
15597
15592
  string$2().brand().describe("A stored queue message ID");
15598
15593
  const TraceCarrierSchema = record(string$2(), string$2());
15599
15594
  const RunInputSchema = object({
@@ -15601,7 +15596,9 @@ const RunInputSchema = object({
15601
15596
  deploymentId: string$2(),
15602
15597
  workflowName: string$2(),
15603
15598
  specVersion: number$2(),
15604
- executionContext: record(string$2(), any()).optional()
15599
+ executionContext: record(string$2(), any()).optional(),
15600
+ /** Initial plaintext run attributes, for resilient run creation. */
15601
+ attributes: record(string$2(), string$2()).optional()
15605
15602
  });
15606
15603
  const WorkflowInvokePayloadSchema = object({
15607
15604
  runId: string$2(),
@@ -43315,7 +43312,7 @@ var tn = f("block", "before:content-[counter(line)]", "before:inline-block", "be
43315
43312
  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 });
43316
43313
  var Se = reactExports.createContext({ code: "" }), de = () => reactExports.useContext(Se);
43317
43314
  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 }) });
43318
- var cn$1 = /\n+$/, dn = reactExports.lazy(() => __vitePreload(() => import("./highlighted-body-B3W2YXNL-B8ZRlnzz.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 }) => {
43315
+ var cn$1 = /\n+$/, dn = reactExports.lazy(() => __vitePreload(() => import("./highlighted-body-B3W2YXNL-BQ1pmB9V.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 }) => {
43319
43316
  let i = reactExports.useMemo(() => e.replace(cn$1, ""), [e]), c = reactExports.useMemo(() => ({ bg: "transparent", fg: "inherit", tokens: i.split(`
43320
43317
  `).map((a2) => [{ content: a2, color: "inherit", bgColor: "transparent", htmlStyle: {}, offset: 0 }]) }), [i]);
43321
43318
  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 }) })] }) });
@@ -44257,7 +44254,7 @@ const eventFailed = "_eventFailed_1fmf2_1432";
44257
44254
  const eventRetrying = "_eventRetrying_1fmf2_1441";
44258
44255
  const eventHook = "_eventHook_1fmf2_1450";
44259
44256
  const eventDefault = "_eventDefault_1fmf2_1459";
44260
- const styles = {
44257
+ const styles$1 = {
44261
44258
  traceNode,
44262
44259
  childRow,
44263
44260
  spanNode,
@@ -44727,15 +44724,15 @@ const SEGMENT_LABELS = {
44727
44724
  function SegmentLayer({ segments, spanDuration: spanDuration2 }) {
44728
44725
  if (segments.length === 0)
44729
44726
  return null;
44730
- return jsxRuntimeExports.jsx("div", { className: styles.segmentLayer, children: segments.map((seg, i) => {
44731
- const className = styles[SEGMENT_CLASS_MAP[seg.status]];
44727
+ return jsxRuntimeExports.jsx("div", { className: styles$1.segmentLayer, children: segments.map((seg, i) => {
44728
+ const className = styles$1[SEGMENT_CLASS_MAP[seg.status]];
44732
44729
  const segDuration = (seg.endFraction - seg.startFraction) * spanDuration2;
44733
44730
  const label = SEGMENT_LABELS[seg.status];
44734
44731
  const style2 = {
44735
44732
  left: `${seg.startFraction * 100}%`,
44736
44733
  width: `${(seg.endFraction - seg.startFraction) * 100}%`
44737
44734
  };
44738
- return jsxRuntimeExports.jsx("div", { className: `${styles.segment} ${String(className)}`, style: style2, title: label ? `${label} ${formatDuration(segDuration)}` : formatDuration(segDuration) }, `seg-${seg.status}-${String(i)}`);
44735
+ return jsxRuntimeExports.jsx("div", { className: `${styles$1.segment} ${String(className)}`, style: style2, title: label ? `${label} ${formatDuration(segDuration)}` : formatDuration(segDuration) }, `seg-${seg.status}-${String(i)}`);
44739
44736
  }) });
44740
44737
  }
44741
44738
  function getSegmentTags(segments, spanDuration2) {
@@ -44764,7 +44761,7 @@ function TextContent({ node: node2, layout, durationMs, segmentTags }) {
44764
44761
  return null;
44765
44762
  }
44766
44763
  const showTags = segmentTags && segmentTags.length > 0 && (layout.isHovered || layout.width > 200);
44767
- return jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsxs("span", { className: styles.spanName, children: [node2.label || node2.span.name, showTags ? segmentTags.map((tag, i) => jsxRuntimeExports.jsxs("span", { className: styles.segmentTag, children: [" · ", tag.label, " ", tag.duration] }, i)) : null] }), layout.isHuge ? jsxRuntimeExports.jsx("span", { className: styles.spanSpacer }) : null, layout.isHovered || layout.width > 128 ? jsxRuntimeExports.jsx("span", { className: styles.spanDuration, children: duration2 }) : null] });
44764
+ return jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsxs("span", { className: styles$1.spanName, children: [node2.label || node2.span.name, showTags ? segmentTags.map((tag, i) => jsxRuntimeExports.jsxs("span", { className: styles$1.segmentTag, children: [" · ", tag.label, " ", tag.duration] }, i)) : null] }), layout.isHuge ? jsxRuntimeExports.jsx("span", { className: styles$1.spanSpacer }) : null, layout.isHovered || layout.width > 128 ? jsxRuntimeExports.jsx("span", { className: styles$1.spanDuration, children: duration2 }) : null] });
44768
44765
  }
44769
44766
  function DefaultContent({ node: node2, layout }) {
44770
44767
  return jsxRuntimeExports.jsx(TextContent, { node: node2, layout });
@@ -44887,8 +44884,8 @@ function getSpanLayout(resourceType, node2, root2, scale, scrollSnapshotRef) {
44887
44884
  }
44888
44885
  const getSpanColorClassName = (node2) => {
44889
44886
  if (node2.isVercel)
44890
- return String(styles.colorVercel);
44891
- return String(styles[`color${node2.resourceIndex % 5}`]);
44887
+ return String(styles$1.colorVercel);
44888
+ return String(styles$1[`color${node2.resourceIndex % 5}`]);
44892
44889
  };
44893
44890
  function getTerminalTimestamp(resourceType, node2) {
44894
44891
  const events = node2.events;
@@ -45031,7 +45028,7 @@ const SpanComponent = reactExports.memo(function SpanComponent2({ node: node2, r
45031
45028
  return () => cancelAnimationFrame(rafId);
45032
45029
  }, [isLive, canonicalStartTime, scale]);
45033
45030
  const renderNode = segmentNode;
45034
- return jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx("button", { "aria-label": `${span.name} - ${duration2}`, className: clsx(styles.spanNode, layout.isHuge && styles.huge, layout.isSmall && styles.small, layout.isExpanded && styles.xHover, node2.isHighlighted ? styles.colorHighlight : getSpanColorClassName(node2), node2.isHighlighted === false && styles.unlit, customClassName, hasSegments2 && styles.hasSegments), "data-span-id": span.spanId, "data-start-time": segmentNode.startTime - root2.startTime, "data-right-side": layout.isNearRightSide, "data-selected": node2.isSelected ? "" : void 0, ref, style: getSpanStyle(layout, segmentNode, root2, scale), type: "button", children: jsxRuntimeExports.jsx(SpanContent, { durationMs, resourceType, node: renderNode, layout }) }), segmentNode.events && !layout.isSmall ? segmentNode.events.map((x2) => jsxRuntimeExports.jsx(SpanEventComponent, { customSpanEventClassNameFunc, event: x2, node: segmentNode, root: root2, scale, asBoundary: isWorkflowSpan }, x2.key)) : null] });
45031
+ return jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx("button", { "aria-label": `${span.name} - ${duration2}`, className: clsx(styles$1.spanNode, layout.isHuge && styles$1.huge, layout.isSmall && styles$1.small, layout.isExpanded && styles$1.xHover, node2.isHighlighted ? styles$1.colorHighlight : getSpanColorClassName(node2), node2.isHighlighted === false && styles$1.unlit, customClassName, hasSegments2 && styles$1.hasSegments), "data-span-id": span.spanId, "data-start-time": segmentNode.startTime - root2.startTime, "data-right-side": layout.isNearRightSide, "data-selected": node2.isSelected ? "" : void 0, ref, style: getSpanStyle(layout, segmentNode, root2, scale), type: "button", children: jsxRuntimeExports.jsx(SpanContent, { durationMs, resourceType, node: renderNode, layout }) }), segmentNode.events && !layout.isSmall ? segmentNode.events.map((x2) => jsxRuntimeExports.jsx(SpanEventComponent, { customSpanEventClassNameFunc, event: x2, node: segmentNode, root: root2, scale, asBoundary: isWorkflowSpan }, x2.key)) : null] });
45035
45032
  });
45036
45033
  const BOUNDARY_LABELS = {
45037
45034
  step_started: "Started",
@@ -45089,17 +45086,17 @@ const SpanEventComponent = reactExports.memo(function SpanEventComponent2({ even
45089
45086
  const isLeftAligned = node2.duration <= 0 || (event.timestamp - node2.startTime) / node2.duration < 0.5;
45090
45087
  const customClassName = customSpanEventClassNameFunc ? customSpanEventClassNameFunc(event) : "";
45091
45088
  return jsxRuntimeExports.jsxs("div", { title: phaseDuration ? `${displayLabel} ${timestamp}
45092
- ${phaseLabel} ${phaseDuration}` : `${displayLabel} ${timestamp}`, className: clsx(styles.spanNodeEvent, customClassName, asBoundary && styles.boundaryMarker, node2.isHighlighted ? styles.colorHighlight : getSpanColorClassName(node2), node2.isHighlighted === false && styles.unlit), "data-hovered": event.isHovered, ref, style: {
45089
+ ${phaseLabel} ${phaseDuration}` : `${displayLabel} ${timestamp}`, className: clsx(styles$1.spanNodeEvent, customClassName, asBoundary && styles$1.boundaryMarker, node2.isHighlighted ? styles$1.colorHighlight : getSpanColorClassName(node2), node2.isHighlighted === false && styles$1.unlit), "data-hovered": event.isHovered, ref, style: {
45093
45090
  left,
45094
45091
  top
45095
- }, children: [jsxRuntimeExports.jsx("div", { className: clsx(styles.hoverInfo, isLeftAligned ? styles.alignStart : styles.alignEnd), children: asBoundary ? jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx("span", { className: styles.eventName, children: displayLabel }), jsxRuntimeExports.jsx("span", { className: styles.eventTimestamp, children: timestamp }), phaseDuration ? jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx("span", { className: styles.eventName, children: phaseLabel }), jsxRuntimeExports.jsx("span", { className: styles.eventTimestamp, children: phaseDuration })] }) : null] }) : jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx("span", { className: styles.eventName, children: name2 }), jsxRuntimeExports.jsx("span", { className: styles.eventTimestamp, children: timestamp })] }) }), asBoundary ? jsxRuntimeExports.jsx("div", { className: styles.boundaryLine }) : jsxRuntimeExports.jsx("div", { className: styles.eventDiamond })] });
45092
+ }, children: [jsxRuntimeExports.jsx("div", { className: clsx(styles$1.hoverInfo, isLeftAligned ? styles$1.alignStart : styles$1.alignEnd), children: asBoundary ? jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx("span", { className: styles$1.eventName, children: displayLabel }), jsxRuntimeExports.jsx("span", { className: styles$1.eventTimestamp, children: timestamp }), phaseDuration ? jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx("span", { className: styles$1.eventName, children: phaseLabel }), jsxRuntimeExports.jsx("span", { className: styles$1.eventTimestamp, children: phaseDuration })] }) : null] }) : jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx("span", { className: styles$1.eventName, children: name2 }), jsxRuntimeExports.jsx("span", { className: styles$1.eventTimestamp, children: timestamp })] }) }), asBoundary ? jsxRuntimeExports.jsx("div", { className: styles$1.boundaryLine }) : jsxRuntimeExports.jsx("div", { className: styles$1.eventDiamond })] });
45096
45093
  });
45097
45094
  const colorTokenMap = {
45098
45095
  "gray-700": "var(--ds-gray-700)",
45099
45096
  "gray-900": "var(--ds-gray-900)"
45100
45097
  };
45101
45098
  function IconChevronDown({ size: size2 = 16 }) {
45102
- return jsxRuntimeExports.jsxs("svg", { width: size2, height: size2, viewBox: "0 0 24 24", fill: "none", "aria-hidden": true, className: styles.detailHeadingIcon, children: [jsxRuntimeExports.jsx("title", { children: "Chevron Down" }), jsxRuntimeExports.jsx("path", { d: "M6 9l6 6 6-6", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" })] });
45099
+ return jsxRuntimeExports.jsxs("svg", { width: size2, height: size2, viewBox: "0 0 24 24", fill: "none", "aria-hidden": true, className: styles$1.detailHeadingIcon, children: [jsxRuntimeExports.jsx("title", { children: "Chevron Down" }), jsxRuntimeExports.jsx("path", { d: "M6 9l6 6 6-6", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" })] });
45103
45100
  }
45104
45101
  function IconExternalSmall({ size: size2 = 16, color: color5 = "gray-900" }) {
45105
45102
  const style2 = { color: colorTokenMap[color5] || color5 };
@@ -45114,7 +45111,7 @@ function Link(props) {
45114
45111
  return jsxRuntimeExports.jsx("a", { className, href, ...rest, children: children2 });
45115
45112
  }
45116
45113
  function Skeleton({ width, height, rounded }) {
45117
- return jsxRuntimeExports.jsx("span", { className: clsx(styles.skeleton, rounded && styles.skeletonRounded), style: { width, height }, "aria-hidden": true });
45114
+ return jsxRuntimeExports.jsx("span", { className: clsx(styles$1.skeleton, rounded && styles$1.skeletonRounded), style: { width, height }, "aria-hidden": true });
45118
45115
  }
45119
45116
  const EXPANDED_STORAGE_KEY_PREFIX = "vc-trace-span-exp:";
45120
45117
  function DetailGroup({ name: name2, className = "", children: children2 }) {
@@ -45130,7 +45127,7 @@ function DetailGroup({ name: name2, className = "", children: children2 }) {
45130
45127
  return willBeExpanded;
45131
45128
  });
45132
45129
  }, [name2]);
45133
- return jsxRuntimeExports.jsxs("div", { className: clsx(styles.detailGroup, isExpanded ? styles.expanded : styles.collapsed, className), children: [jsxRuntimeExports.jsxs("button", { className: styles.detailHeading, onClick: toggleExpanded, type: "button", children: [jsxRuntimeExports.jsx("span", { children: name2 }), jsxRuntimeExports.jsx(IconChevronDown, {})] }), isExpanded ? children2 : null] });
45130
+ return jsxRuntimeExports.jsxs("div", { className: clsx(styles$1.detailGroup, isExpanded ? styles$1.expanded : styles$1.collapsed, className), children: [jsxRuntimeExports.jsxs("button", { className: styles$1.detailHeading, onClick: toggleExpanded, type: "button", children: [jsxRuntimeExports.jsx("span", { children: name2 }), jsxRuntimeExports.jsx(IconChevronDown, {})] }), isExpanded ? children2 : null] });
45134
45131
  }
45135
45132
  reactExports.memo(function EntrySpanLinks({ getQuickLinks, span }) {
45136
45133
  const links = getQuickLinks(span);
@@ -45154,7 +45151,7 @@ function usePromise(promise) {
45154
45151
  }
45155
45152
  function EntrySpanLink({ name: name2, link: linkPromise }) {
45156
45153
  const link2 = usePromise(linkPromise);
45157
- return jsxRuntimeExports.jsxs(Link, { as: link2 ? void 0 : "span", className: clsx(styles.spanDetailPanelAttribute, styles.spanDetailPanelQuickLink), href: (link2 == null ? void 0 : link2.href) || "", children: [jsxRuntimeExports.jsx("span", { className: styles.spanDetailPanelAttributeKey, children: name2 }), jsxRuntimeExports.jsx("span", { className: clsx(styles.spanDetailPanelAttributeValue, styles.spanDetailPanelQuickLinkLabel), children: link2 ? jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [link2.label, link2.icon || jsxRuntimeExports.jsx(IconExternalSmall, { color: "gray-900" })] }) : jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx(Skeleton, { height: 18, width: 32 + name2.length * 8 }), jsxRuntimeExports.jsx(Skeleton, { height: 18, rounded: true, width: 18 })] }) })] });
45154
+ return jsxRuntimeExports.jsxs(Link, { as: link2 ? void 0 : "span", className: clsx(styles$1.spanDetailPanelAttribute, styles$1.spanDetailPanelQuickLink), href: (link2 == null ? void 0 : link2.href) || "", children: [jsxRuntimeExports.jsx("span", { className: styles$1.spanDetailPanelAttributeKey, children: name2 }), jsxRuntimeExports.jsx("span", { className: clsx(styles$1.spanDetailPanelAttributeValue, styles$1.spanDetailPanelQuickLinkLabel), children: link2 ? jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [link2.label, link2.icon || jsxRuntimeExports.jsx(IconExternalSmall, { color: "gray-900" })] }) : jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx(Skeleton, { height: 18, width: 32 + name2.length * 8 }), jsxRuntimeExports.jsx(Skeleton, { height: 18, rounded: true, width: 18 })] }) })] });
45158
45155
  }
45159
45156
  function useImmediateStyle(ref) {
45160
45157
  const styleRef = reactExports.useRef({});
@@ -45313,10 +45310,10 @@ reactExports.memo(function MiniMap({ timelineRef, rows, scale }) {
45313
45310
  $timeline.removeEventListener("scroll", onScroll);
45314
45311
  };
45315
45312
  }, [timelineRef, thumbRatio, setThumbStyle]);
45316
- return jsxRuntimeExports.jsxs("div", { className: styles.mapContainer, ref: containerRef, style: {
45313
+ return jsxRuntimeExports.jsxs("div", { className: styles$1.mapContainer, ref: containerRef, style: {
45317
45314
  width: thumbWidth > 0 ? mapWidth : "100%",
45318
45315
  height: MAP_HEIGHT
45319
- }, children: [jsxRuntimeExports.jsx("canvas", { className: styles.mapCanvas, height: MAP_HEIGHT * dpi, ref: canvasRef, style: { width: mapWidth, height: MAP_HEIGHT }, width: mapWidth * dpi }), jsxRuntimeExports.jsx("div", { className: styles.mapThumb, ref: thumbRef, style: {
45316
+ }, children: [jsxRuntimeExports.jsx("canvas", { className: styles$1.mapCanvas, height: MAP_HEIGHT * dpi, ref: canvasRef, style: { width: mapWidth, height: MAP_HEIGHT }, width: mapWidth * dpi }), jsxRuntimeExports.jsx("div", { className: styles$1.mapThumb, ref: thumbRef, style: {
45320
45317
  transform: thumbStyle.transform,
45321
45318
  width: thumbWidth > 0 ? thumbWidth : `calc(100% - ${TIMELINE_PADDING * 2}px)`,
45322
45319
  top: 2,
@@ -45757,15 +45754,22 @@ function computeSleepSegmentsFromSpan(_startMs, duration2, _events) {
45757
45754
  return [];
45758
45755
  return [{ startFraction: 0, endFraction: 1, status: "sleeping" }];
45759
45756
  }
45757
+ function runSegmentStatus(runStatus) {
45758
+ if (runStatus === "failed")
45759
+ return "failed";
45760
+ if (runStatus === "running" || runStatus === "pending")
45761
+ return "running";
45762
+ return "completed";
45763
+ }
45760
45764
  function computeRunSegmentsFromSpan(startMs, duration2, activeStartMs, events, attributes) {
45761
45765
  const segments = [];
45762
45766
  if (duration2 <= 0)
45763
45767
  return segments;
45764
45768
  const sorted = [...events].map((e) => ({ name: e.name, time: getHighResInMs(e.timestamp) })).sort((a2, b2) => a2.time - b2.time);
45769
+ const runData = attributes == null ? void 0 : attributes.data;
45770
+ const runStatus = runData == null ? void 0 : runData.status;
45765
45771
  const hasRunCreated = sorted.some((e) => e.name === "run_created");
45766
45772
  if (!hasRunCreated) {
45767
- const runData = attributes == null ? void 0 : attributes.data;
45768
- const runStatus = runData == null ? void 0 : runData.status;
45769
45773
  return computeV1RunSegments(startMs, duration2, activeStartMs, runStatus);
45770
45774
  }
45771
45775
  const failedEvent = sorted.find((e) => e.name === "run_failed");
@@ -45784,7 +45788,7 @@ function computeRunSegmentsFromSpan(startMs, duration2, activeStartMs, events, a
45784
45788
  segments.push({
45785
45789
  startFraction: cursor,
45786
45790
  endFraction: 1,
45787
- status: failedEvent ? "failed" : "running"
45791
+ status: failedEvent ? "failed" : runSegmentStatus(runStatus)
45788
45792
  });
45789
45793
  return segments;
45790
45794
  }
@@ -45805,7 +45809,7 @@ function computeV1RunSegments(startMs, duration2, activeStartMs, runStatus) {
45805
45809
  segments.push({
45806
45810
  startFraction: cursor,
45807
45811
  endFraction: 1,
45808
- status: runStatus === "failed" ? "failed" : "running"
45812
+ status: runSegmentStatus(runStatus)
45809
45813
  });
45810
45814
  return segments;
45811
45815
  }
@@ -45874,6 +45878,10 @@ function useRowWindow(ref, rowCount, rowHeight, overscan = 12) {
45874
45878
  return range;
45875
45879
  }
45876
45880
  const ROW_HEIGHT_PX = 40;
45881
+ const runningStripes = "_runningStripes_62ud0_1";
45882
+ const styles = {
45883
+ runningStripes
45884
+ };
45877
45885
  const TINY_BAR_BOX_SIZE_PX = 24;
45878
45886
  const TINY_BAR_WIDTH_PX = 4;
45879
45887
  const TIMELINE_PADDING_PX = 16;
@@ -45882,6 +45890,7 @@ const SEGMENT_CLASSES = {
45882
45890
  retrying: "bg-gray-400 border border-gray-500",
45883
45891
  waiting: "bg-gray-400 border border-gray-500",
45884
45892
  running: "bg-blue-200 border border-blue-500",
45893
+ completed: "bg-blue-200 border border-blue-500",
45885
45894
  failed: "bg-red-200 border border-red-500",
45886
45895
  succeeded: "bg-green-200 border border-green-500",
45887
45896
  sleeping: "bg-gray-400 border border-gray-500",
@@ -45891,6 +45900,13 @@ const TIMELINE_INSET_STYLE = {
45891
45900
  left: TIMELINE_PADDING_PX,
45892
45901
  right: TIMELINE_PADDING_PX
45893
45902
  };
45903
+ const ACTIVE_SEGMENT_STATUSES = /* @__PURE__ */ new Set([
45904
+ "running",
45905
+ "received"
45906
+ ]);
45907
+ function RunningStripes() {
45908
+ return jsxRuntimeExports.jsx("div", { "aria-hidden": true, className: styles.runningStripes });
45909
+ }
45894
45910
  function computeBarGeometry(startMs, endMs, viewStart, viewEnd, containerWidth) {
45895
45911
  const viewDuration = viewEnd - viewStart;
45896
45912
  const visibleStartMs = Math.max(startMs, viewStart);
@@ -45963,21 +45979,27 @@ function BoundaryArrow({ direction }) {
45963
45979
  function PlainBar({ bg, border, label }) {
45964
45980
  return jsxRuntimeExports.jsx("div", { className: "relative h-6 w-full min-w-1 rounded-[0.25rem] border", style: { background: bg, borderColor: border }, children: label ? jsxRuntimeExports.jsx(DurationLabel, { label }) : null });
45965
45981
  }
45982
+ function LeadInConnector({ leftPct, widthPct, label }) {
45983
+ return jsxRuntimeExports.jsxs("div", { className: "absolute top-1/2 h-6 -translate-y-1/2", style: {
45984
+ left: `calc(${leftPct}% + 0.5px)`,
45985
+ width: `calc(${widthPct}% - 1px)`
45986
+ }, 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] });
45987
+ }
45966
45988
  function SegmentBar({ segments }) {
45967
45989
  return jsxRuntimeExports.jsx("div", { className: "relative h-6 w-full", children: segments.map((seg, i) => {
45968
- const label = formatDuration(seg.fullDurationMs);
45990
+ if (seg.status === "queued") {
45991
+ const leadInLabel = formatDurationPrecise(seg.fullDurationMs);
45992
+ const showLeadInLabel = seg.pixelWidth >= Math.max(40, leadInLabel.length * 6 + 12);
45993
+ return jsxRuntimeExports.jsx(LeadInConnector, { leftPct: seg.leftPct, widthPct: seg.widthPct, label: showLeadInLabel ? leadInLabel : null }, i);
45994
+ }
45995
+ const label = formatDurationPrecise(seg.fullDurationMs);
45969
45996
  const showLabel = seg.pixelWidth >= Math.max(40, label.length * 6 + 12);
45970
- const isNarrowQueued = seg.status === "queued" && seg.pixelWidth < 20;
45971
- const overrideBg = isNarrowQueued ? "var(--ds-gray-400)" : void 0;
45972
- const overrideBorder = isNarrowQueued ? "var(--ds-gray-500)" : void 0;
45973
- return jsxRuntimeExports.jsx("div", { className: cn$4("absolute h-full rounded-[0.25rem]", SEGMENT_CLASSES[seg.status]), style: {
45997
+ return jsxRuntimeExports.jsxs("div", { className: cn$4("absolute h-full overflow-hidden rounded-[0.25rem]", SEGMENT_CLASSES[seg.status]), style: {
45974
45998
  // 1px gap between adjacent segments, distributed equally.
45975
45999
  left: `calc(${seg.leftPct}% + 0.5px)`,
45976
46000
  width: `calc(${seg.widthPct}% - 1px)`,
45977
- minWidth: 1,
45978
- background: overrideBg,
45979
- borderColor: overrideBorder
45980
- }, children: showLabel ? jsxRuntimeExports.jsx(DurationLabel, { label }) : null }, i);
46001
+ minWidth: 1
46002
+ }, children: [ACTIVE_SEGMENT_STATUSES.has(seg.status) ? jsxRuntimeExports.jsx(RunningStripes, {}) : null, showLabel ? jsxRuntimeExports.jsx(DurationLabel, { label }) : null] }, i);
45981
46003
  }) });
45982
46004
  }
45983
46005
  const TimelineBar = reactExports.memo(function TimelineBar2({ span, viewStart, viewDuration, containerWidth, isSelected, isDimmed, onSelect }) {
@@ -45993,7 +46015,7 @@ const TimelineBar = reactExports.memo(function TimelineBar2({ span, viewStart, v
45993
46015
  const colors = getResourceColor(span.resource);
45994
46016
  const fallbackBg = isErrored ? colors.errorBg ?? "var(--ds-red-200)" : colors.bg;
45995
46017
  const fallbackBorder = isErrored ? colors.errorBorder ?? "var(--ds-red-500)" : colors.border;
45996
- const totalLabel = formatDuration(totalDurationMs);
46018
+ const totalLabel = formatDurationPrecise(totalDurationMs);
45997
46019
  const showTotalLabel = geometry.visiblePixelWidth >= Math.max(40, totalLabel.length * 6 + 12);
45998
46020
  const handleClick = reactExports.useCallback(() => {
45999
46021
  onSelect(span.spanId);
@@ -48631,58 +48653,59 @@ export {
48631
48653
  hasEncryptedFields as a7,
48632
48654
  EVENT_DATA_REF_FIELDS as a8,
48633
48655
  useSidebarDataOptional as a9,
48634
- Slot as aA,
48635
- Slottable as aB,
48636
- buttonVariants as aC,
48637
- fetchEvent as aD,
48638
- fetchEventsByCorrelationId as aE,
48639
- isEncryptedData as aF,
48640
- hydrateData as aG,
48641
- getWebRevivers as aH,
48642
- LIVE_UPDATE_INTERVAL_MS as aI,
48643
- getEncryptionKeyForRun as aJ,
48644
- StreamViewer as aK,
48645
- composeRefs as aL,
48646
- useFloating as aM,
48647
- offset as aN,
48648
- shift as aO,
48649
- limitShift as aP,
48650
- flip as aQ,
48651
- size as aR,
48652
- arrow as aS,
48653
- hide as aT,
48654
- autoUpdate as aU,
48655
- cancelRun as aV,
48656
- reenqueueRun as aW,
48657
- wakeUpRun as aX,
48658
- resumeHook as aY,
48659
- recreateRun as aZ,
48656
+ fetchStreams as aA,
48657
+ Slot as aB,
48658
+ Slottable as aC,
48659
+ buttonVariants as aD,
48660
+ fetchEvent as aE,
48661
+ fetchEventsByCorrelationId as aF,
48662
+ isEncryptedData as aG,
48663
+ hydrateData as aH,
48664
+ getWebRevivers as aI,
48665
+ LIVE_UPDATE_INTERVAL_MS as aJ,
48666
+ getEncryptionKeyForRun as aK,
48667
+ StreamViewer as aL,
48668
+ composeRefs as aM,
48669
+ useFloating as aN,
48670
+ offset as aO,
48671
+ shift as aP,
48672
+ limitShift as aQ,
48673
+ flip as aR,
48674
+ size as aS,
48675
+ arrow as aT,
48676
+ hide as aU,
48677
+ autoUpdate as aV,
48678
+ cancelRun as aW,
48679
+ reenqueueRun as aX,
48680
+ wakeUpRun as aY,
48681
+ resumeHook as aZ,
48682
+ recreateRun as a_,
48660
48683
  clsx as aa,
48661
48684
  useRowWindow as ab,
48662
48685
  isSpanDimmedBySearch as ac,
48663
48686
  ROW_HEIGHT_PX as ad,
48664
48687
  getSpanDurationMs as ae,
48665
- TooltipProvider as af,
48666
- ActiveSpanProvider as ag,
48667
- useActiveSpan as ah,
48668
- useSidebarData as ai,
48669
- searchSpans as aj,
48670
- computeRootBounds as ak,
48671
- computeTimeMarkers as al,
48672
- getHighResInMs as am,
48673
- TIMELINE_PADDING_PX as an,
48674
- Timeline as ao,
48675
- TimelineHeader as ap,
48676
- IconButton as aq,
48677
- Tooltip$1 as ar,
48678
- TooltipTrigger$1 as as,
48679
- TooltipContent$1 as at,
48680
- SidebarDataProvider as au,
48681
- hydrateResourceIOWithKey as av,
48682
- hydrateResourceIO as aw,
48683
- fetchHook as ax,
48684
- fetchStep as ay,
48685
- fetchStreams as az,
48688
+ formatDurationPrecise as af,
48689
+ TooltipProvider as ag,
48690
+ ActiveSpanProvider as ah,
48691
+ useActiveSpan as ai,
48692
+ useSidebarData as aj,
48693
+ searchSpans as ak,
48694
+ computeRootBounds as al,
48695
+ computeTimeMarkers as am,
48696
+ getHighResInMs as an,
48697
+ TIMELINE_PADDING_PX as ao,
48698
+ Timeline as ap,
48699
+ TimelineHeader as aq,
48700
+ IconButton as ar,
48701
+ Tooltip$1 as as,
48702
+ TooltipTrigger$1 as at,
48703
+ TooltipContent$1 as au,
48704
+ SidebarDataProvider as av,
48705
+ hydrateResourceIOWithKey as aw,
48706
+ hydrateResourceIO as ax,
48707
+ fetchHook as ay,
48708
+ fetchStep as az,
48686
48709
  TooltipContent as b,
48687
48710
  createLucideIcon as c,
48688
48711
  cn as d,