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

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.
@@ -1,4 +1,4 @@
1
- import { R, K as Ks, Q as Qe } from "./mermaid-3ZIDBTTL-BDM4-x6u.js";
1
+ import { R, K as Ks, Q as Qe } from "./mermaid-3ZIDBTTL-C02sm-ZS.js";
2
2
  import { r as reactExports, j as jsxRuntimeExports } from "./index-BXZSIDEp.js";
3
3
  var L = ({ code: s, language: t, raw: e, className: n, ...d$1 }) => {
4
4
  let { shikiTheme: l } = reactExports.useContext(R), o = Ks(), [m, i] = reactExports.useState(e);
@@ -1,6 +1,6 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports, A as Link, f as reactDomExports, C as useSearchParams, B as useNavigate, D as useLocation, w as withComponentProps } from "./index-BXZSIDEp.js";
2
- import { R as ResolveHookModal, S as Send, a as Skeleton, u as unwrapOrThrow, W as WorkflowWebAPIError, b as RelativeTime, A as Alert, C as CircleAlert, c as AlertTitle, d as AlertDescription, g as getErrorMessage, e as CopyableText, D as DropdownMenu, f as DropdownMenuTrigger, E as Ellipsis, h as DropdownMenuContent, i as DropdownMenuItem, j as ChevronRight, r as resumeHook, k as createCollection, l as hideOthers, m as ReactRemoveScroll, n as useDirection, o as ChevronDown, p as ChevronUp, q as Check, X, s as useControllableState$1, P as Primitive$1, t as composeEventHandlers$1, v as Presence, w as useSize, x as createContextScope$1, y as cancelRun, z as reenqueueRun, B as parseWorkflowName, F as StatusBadge, Z as Zap, G as CircleX, H as RunActionsDropdownItems, I as unwrapServerActionResult, J as WorkflowGraphViewer, T as Tabs, K as TabsList, L as TabsTrigger, M as TabsContent, N as ErrorBoundary } from "./workflow-graph-viewer-C8H50hkM.js";
3
- import { c as createLucideIcon, g as useToast, d as cn, D as DEFAULT_PAGE_SIZE, h as fetchRuns, i as fetchHooks, j as getPaginationDisplay, T as Tooltip, a as TooltipTrigger, B as Button, b as TooltipContent, k as fetchEvents, l as useCallbackRef, m as useComposedRefs, P as Primitive, A as Anchor, n as composeEventHandlers, o as useLayoutEffect2, p as Portal$2, q as useId, s as createPopperScope, v as DismissableLayer, w as createContextScope, x as createSlot, C as Content$1, y as useControllableState, z as Root2$1, V as VISUALLY_HIDDEN_STYLES, E as Arrow, F as useComposedRefs$1, u as useServerConfig, t as toast, L as LoaderCircle, G as fetchRun, H as cva, I as Presence$1, J as createContext2, M as fetchWorkflowsManifest } from "./mermaid-3ZIDBTTL-BDM4-x6u.js";
2
+ import { R as ResolveHookModal, S as Send, a as Skeleton, u as unwrapOrThrow, W as WorkflowWebAPIError, b as RelativeTime, A as Alert, C as CircleAlert, c as AlertTitle, d as AlertDescription, g as getErrorMessage, e as CopyableText, D as DropdownMenu, f as DropdownMenuTrigger, E as Ellipsis, h as DropdownMenuContent, i as DropdownMenuItem, j as ChevronRight, r as resumeHook, k as createCollection, l as hideOthers, m as ReactRemoveScroll, n as useDirection, o as ChevronDown, p as ChevronUp, q as Check, X, s as useControllableState$1, P as Primitive$1, t as composeEventHandlers$1, v as Presence, w as useSize, x as createContextScope$1, y as cancelRun, z as reenqueueRun, B as parseWorkflowName, F as StatusBadge, Z as Zap, G as CircleX, H as RunActionsDropdownItems, I as unwrapServerActionResult, J as WorkflowGraphViewer, T as Tabs, K as TabsList, L as TabsTrigger, M as TabsContent, N as ErrorBoundary } from "./workflow-graph-viewer-CU0UU458.js";
3
+ import { c as createLucideIcon, g as useToast, d as cn, D as DEFAULT_PAGE_SIZE, h as fetchRuns, i as fetchHooks, j as getPaginationDisplay, T as Tooltip, a as TooltipTrigger, B as Button, b as TooltipContent, k as fetchEvents, l as useCallbackRef, m as useComposedRefs, P as Primitive, A as Anchor, n as composeEventHandlers, o as useLayoutEffect2, p as Portal$2, q as useId, s as createPopperScope, v as DismissableLayer, w as createContextScope, x as createSlot, C as Content$1, y as useControllableState, z as Root2$1, V as VISUALLY_HIDDEN_STYLES, E as Arrow, F as useComposedRefs$1, u as useServerConfig, t as toast, L as LoaderCircle, G as fetchRun, H as cva, I as Presence$1, J as createContext2, M as fetchWorkflowsManifest } from "./mermaid-3ZIDBTTL-C02sm-ZS.js";
4
4
  import "./index-B6-SzLmT.js";
5
5
  /**
6
6
  * @license lucide-react v0.575.0 - ISC
@@ -1 +1 @@
1
- window.__reactRouterManifest={"entry":{"module":"/assets/entry.client-DOJDY_4b.js","imports":["/assets/index-BXZSIDEp.js"],"css":[]},"routes":{"root":{"id":"root","path":"","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasDefaultExport":true,"hasErrorBoundary":true,"module":"/assets/root-C5RLIKj5.js","imports":["/assets/index-BXZSIDEp.js","/assets/mermaid-3ZIDBTTL-BDM4-x6u.js"],"css":["/assets/root-Bqr5evzw.css","/assets/mermaid-3ZIDBTTL-DKxHcEOp.css"]},"routes/home":{"id":"routes/home","parentId":"root","index":true,"hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasDefaultExport":true,"hasErrorBoundary":false,"module":"/assets/home-1yC3MOjQ.js","imports":["/assets/index-BXZSIDEp.js","/assets/workflow-graph-viewer-C8H50hkM.js","/assets/mermaid-3ZIDBTTL-BDM4-x6u.js","/assets/index-B6-SzLmT.js"],"css":["/assets/workflow-graph-viewer-DnlNuQQH.css","/assets/mermaid-3ZIDBTTL-DKxHcEOp.css"]},"routes/run-detail":{"id":"routes/run-detail","parentId":"root","path":"run/:runId","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasDefaultExport":true,"hasErrorBoundary":false,"module":"/assets/run-detail-DM1PDAnQ.js","imports":["/assets/index-BXZSIDEp.js","/assets/workflow-graph-viewer-C8H50hkM.js","/assets/mermaid-3ZIDBTTL-BDM4-x6u.js","/assets/encryption-g14N5vQl.js","/assets/index-B6-SzLmT.js"],"css":["/assets/workflow-graph-viewer-DnlNuQQH.css","/assets/mermaid-3ZIDBTTL-DKxHcEOp.css"]},"routes/api.rpc":{"id":"routes/api.rpc","parentId":"root","path":"api/rpc","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasDefaultExport":false,"hasErrorBoundary":false,"module":"/assets/api.rpc-l0sNRNKZ.js","imports":[],"css":[]},"routes/api.stream.$streamId":{"id":"routes/api.stream.$streamId","parentId":"root","path":"api/stream/:streamId","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasDefaultExport":false,"hasErrorBoundary":false,"module":"/assets/api.stream._streamId-l0sNRNKZ.js","imports":[],"css":[]}},"url":"/assets/manifest-9f37c22f.js","version":"9f37c22f"};
1
+ window.__reactRouterManifest={"entry":{"module":"/assets/entry.client-DOJDY_4b.js","imports":["/assets/index-BXZSIDEp.js"],"css":[]},"routes":{"root":{"id":"root","path":"","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasDefaultExport":true,"hasErrorBoundary":true,"module":"/assets/root-Dduz44vX.js","imports":["/assets/index-BXZSIDEp.js","/assets/mermaid-3ZIDBTTL-C02sm-ZS.js"],"css":["/assets/root-Bqr5evzw.css","/assets/mermaid-3ZIDBTTL-DKxHcEOp.css"]},"routes/home":{"id":"routes/home","parentId":"root","index":true,"hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasDefaultExport":true,"hasErrorBoundary":false,"module":"/assets/home-D9oyGYfj.js","imports":["/assets/index-BXZSIDEp.js","/assets/workflow-graph-viewer-CU0UU458.js","/assets/mermaid-3ZIDBTTL-C02sm-ZS.js","/assets/index-B6-SzLmT.js"],"css":["/assets/workflow-graph-viewer-DnlNuQQH.css","/assets/mermaid-3ZIDBTTL-DKxHcEOp.css"]},"routes/run-detail":{"id":"routes/run-detail","parentId":"root","path":"run/:runId","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasDefaultExport":true,"hasErrorBoundary":false,"module":"/assets/run-detail-uOQTua8_.js","imports":["/assets/index-BXZSIDEp.js","/assets/workflow-graph-viewer-CU0UU458.js","/assets/mermaid-3ZIDBTTL-C02sm-ZS.js","/assets/encryption-g14N5vQl.js","/assets/index-B6-SzLmT.js"],"css":["/assets/workflow-graph-viewer-DnlNuQQH.css","/assets/mermaid-3ZIDBTTL-DKxHcEOp.css"]},"routes/api.rpc":{"id":"routes/api.rpc","parentId":"root","path":"api/rpc","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasDefaultExport":false,"hasErrorBoundary":false,"module":"/assets/api.rpc-l0sNRNKZ.js","imports":[],"css":[]},"routes/api.stream.$streamId":{"id":"routes/api.stream.$streamId","parentId":"root","path":"api/stream/:streamId","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasDefaultExport":false,"hasErrorBoundary":false,"module":"/assets/api.stream._streamId-l0sNRNKZ.js","imports":[],"css":[]}},"url":"/assets/manifest-6fc92124.js","version":"6fc92124"};
@@ -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-BEqiCpJd.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);
@@ -15589,11 +15558,9 @@ object({
15589
15558
  isWebhook: boolean$2().optional(),
15590
15559
  isSystem: boolean$2().optional()
15591
15560
  });
15592
- const QueuePrefix = union([
15593
- literal("__wkf_step_"),
15594
- literal("__wkf_workflow_")
15595
- ]);
15596
- templateLiteral([QueuePrefix, string$2()]);
15561
+ string$2().regex(/^__(?:[a-z][a-z0-9]*_)?wkf_(?:workflow|step)_$/, "Must match __wkf_{workflow|step}_ or __{namespace}_wkf_{workflow|step}_");
15562
+ string$2().regex(/^__(?:[a-z][a-z0-9]*_)?wkf_(?:workflow|step)_.+$/, "Must be a valid queue name with a recognized prefix");
15563
+ string$2().regex(/^[a-z][a-z0-9]*$/, "Must be lowercase alphanumeric, starting with a letter");
15597
15564
  string$2().brand().describe("A stored queue message ID");
15598
15565
  const TraceCarrierSchema = record(string$2(), string$2());
15599
15566
  const RunInputSchema = object({
@@ -43315,7 +43282,7 @@ var tn = f("block", "before:content-[counter(line)]", "before:inline-block", "be
43315
43282
  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
43283
  var Se = reactExports.createContext({ code: "" }), de = () => reactExports.useContext(Se);
43317
43284
  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 }) => {
43285
+ var cn$1 = /\n+$/, dn = reactExports.lazy(() => __vitePreload(() => import("./highlighted-body-B3W2YXNL-BEqiCpJd.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
43286
  let i = reactExports.useMemo(() => e.replace(cn$1, ""), [e]), c = reactExports.useMemo(() => ({ bg: "transparent", fg: "inherit", tokens: i.split(`
43320
43287
  `).map((a2) => [{ content: a2, color: "inherit", bgColor: "transparent", htmlStyle: {}, offset: 0 }]) }), [i]);
43321
43288
  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 }) })] }) });
@@ -45965,7 +45932,7 @@ function PlainBar({ bg, border, label }) {
45965
45932
  }
45966
45933
  function SegmentBar({ segments }) {
45967
45934
  return jsxRuntimeExports.jsx("div", { className: "relative h-6 w-full", children: segments.map((seg, i) => {
45968
- const label = formatDuration(seg.fullDurationMs);
45935
+ const label = formatDurationPrecise(seg.fullDurationMs);
45969
45936
  const showLabel = seg.pixelWidth >= Math.max(40, label.length * 6 + 12);
45970
45937
  const isNarrowQueued = seg.status === "queued" && seg.pixelWidth < 20;
45971
45938
  const overrideBg = isNarrowQueued ? "var(--ds-gray-400)" : void 0;
@@ -45993,7 +45960,7 @@ const TimelineBar = reactExports.memo(function TimelineBar2({ span, viewStart, v
45993
45960
  const colors = getResourceColor(span.resource);
45994
45961
  const fallbackBg = isErrored ? colors.errorBg ?? "var(--ds-red-200)" : colors.bg;
45995
45962
  const fallbackBorder = isErrored ? colors.errorBorder ?? "var(--ds-red-500)" : colors.border;
45996
- const totalLabel = formatDuration(totalDurationMs);
45963
+ const totalLabel = formatDurationPrecise(totalDurationMs);
45997
45964
  const showTotalLabel = geometry.visiblePixelWidth >= Math.max(40, totalLabel.length * 6 + 12);
45998
45965
  const handleClick = reactExports.useCallback(() => {
45999
45966
  onSelect(span.spanId);
@@ -48631,58 +48598,59 @@ export {
48631
48598
  hasEncryptedFields as a7,
48632
48599
  EVENT_DATA_REF_FIELDS as a8,
48633
48600
  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,
48601
+ fetchStreams as aA,
48602
+ Slot as aB,
48603
+ Slottable as aC,
48604
+ buttonVariants as aD,
48605
+ fetchEvent as aE,
48606
+ fetchEventsByCorrelationId as aF,
48607
+ isEncryptedData as aG,
48608
+ hydrateData as aH,
48609
+ getWebRevivers as aI,
48610
+ LIVE_UPDATE_INTERVAL_MS as aJ,
48611
+ getEncryptionKeyForRun as aK,
48612
+ StreamViewer as aL,
48613
+ composeRefs as aM,
48614
+ useFloating as aN,
48615
+ offset as aO,
48616
+ shift as aP,
48617
+ limitShift as aQ,
48618
+ flip as aR,
48619
+ size as aS,
48620
+ arrow as aT,
48621
+ hide as aU,
48622
+ autoUpdate as aV,
48623
+ cancelRun as aW,
48624
+ reenqueueRun as aX,
48625
+ wakeUpRun as aY,
48626
+ resumeHook as aZ,
48627
+ recreateRun as a_,
48660
48628
  clsx as aa,
48661
48629
  useRowWindow as ab,
48662
48630
  isSpanDimmedBySearch as ac,
48663
48631
  ROW_HEIGHT_PX as ad,
48664
48632
  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,
48633
+ formatDurationPrecise as af,
48634
+ TooltipProvider as ag,
48635
+ ActiveSpanProvider as ah,
48636
+ useActiveSpan as ai,
48637
+ useSidebarData as aj,
48638
+ searchSpans as ak,
48639
+ computeRootBounds as al,
48640
+ computeTimeMarkers as am,
48641
+ getHighResInMs as an,
48642
+ TIMELINE_PADDING_PX as ao,
48643
+ Timeline as ap,
48644
+ TimelineHeader as aq,
48645
+ IconButton as ar,
48646
+ Tooltip$1 as as,
48647
+ TooltipTrigger$1 as at,
48648
+ TooltipContent$1 as au,
48649
+ SidebarDataProvider as av,
48650
+ hydrateResourceIOWithKey as aw,
48651
+ hydrateResourceIO as ax,
48652
+ fetchHook as ay,
48653
+ fetchStep as az,
48686
48654
  TooltipContent as b,
48687
48655
  createLucideIcon as c,
48688
48656
  cn as d,
@@ -1,5 +1,5 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports, w as withComponentProps, x as withErrorBoundaryProps, M as Meta, L as Links, S as ScrollRestoration, y as Scripts, O as Outlet, z as useRouteError, i as isRouteErrorResponse, A as Link, B as useNavigate, C as useSearchParams } from "./index-BXZSIDEp.js";
2
- import { c as createLucideIcon, u as useServerConfig, T as Tooltip, a as TooltipTrigger, b as TooltipContent, r as runHealthCheck, t as toast, B as Button, L as LoaderCircle, d as cn, e as Toaster$1, S as ServerConfigProvider, f as TooltipProvider } from "./mermaid-3ZIDBTTL-BDM4-x6u.js";
2
+ import { c as createLucideIcon, u as useServerConfig, T as Tooltip, a as TooltipTrigger, b as TooltipContent, r as runHealthCheck, t as toast, B as Button, L as LoaderCircle, d as cn, e as Toaster$1, S as ServerConfigProvider, f as TooltipProvider } from "./mermaid-3ZIDBTTL-C02sm-ZS.js";
3
3
  var M = (e, i, s, u, m, a, l, h) => {
4
4
  let d = document.documentElement, w = ["light", "dark"];
5
5
  function p(n) {
@@ -1,6 +1,6 @@
1
1
  import { j as jsxRuntimeExports, r as reactExports, f as reactDomExports, G as ReactDOM, B as useNavigate, C as useSearchParams, A as Link, w as withComponentProps, H as useParams } from "./index-BXZSIDEp.js";
2
- import { q as Check, O as Copy, C as CircleAlert, Q as parseStepName, B as parseWorkflowName, j as ChevronRight, o as ChevronDown, U as ErrorCard, Z as Zap, S as Send, R as ResolveHookModal, V as Circle, p as ChevronUp, X, N as ErrorBoundary, I as unwrapServerActionResult, u as unwrapOrThrow, W as WorkflowWebAPIError, Y as useEscapeKeydown, t as composeEventHandlers, _ as useCallbackRef, $ as useLayoutEffect2, s as useControllableState, a0 as useId, a1 as createContext2, v as Presence, x as createContextScope, l as hideOthers, m as ReactRemoveScroll, a2 as useFocusGuards, a3 as LAYOUT, a4 as wakeUpRun, r as resumeHook, A as Alert, c as AlertTitle, d as AlertDescription, a as Skeleton$1, a5 as RunActionsButtons, F as StatusBadge, e as CopyableText, b as RelativeTime, T as Tabs, K as TabsList, L as TabsTrigger, M as TabsContent, y as cancelRun, a6 as recreateRun } from "./workflow-graph-viewer-C8H50hkM.js";
3
- import { c as createLucideIcon, N as Spinner, O as cn, g as useToast, U as Skeleton, W as DecryptClickContext, Y as Yr, X as isEncryptedMarker, Z as formatDuration, _ as DataInspector, $ as _r, a0 as Button, a1 as Lock, a2 as RunClickContext, a3 as StreamClickContext, a4 as isExpiredMarker, a5 as isDoStreamStep, a6 as extractConversation, a7 as hasEncryptedFields, a8 as EVENT_DATA_REF_FIELDS, a9 as useSidebarDataOptional, aa as clsx, ab as useRowWindow, ac as isSpanDimmedBySearch, ad as ROW_HEIGHT_PX, ae as getSpanDurationMs, af as TooltipProvider, ag as ActiveSpanProvider, ah as useActiveSpan, ai as useSidebarData, aj as searchSpans, ak as computeRootBounds, al as computeTimeMarkers, am as getHighResInMs, an as TIMELINE_PADDING_PX, ao as Timeline, ap as TimelineHeader, aq as IconButton, ar as Tooltip, as as TooltipTrigger, at as TooltipContent, au as SidebarDataProvider, av as hydrateResourceIOWithKey, aw as hydrateResourceIO, ax as fetchHook, k as fetchEvents, G as fetchRun, ay as fetchStep, az as fetchStreams, aA as Slot, F as useComposedRefs, aB as Slottable, d as cn$1, aC as buttonVariants, aD as fetchEvent, aE as fetchEventsByCorrelationId, aF as isEncryptedData, aG as hydrateData, aH as getWebRevivers, T as Tooltip$1, a as TooltipTrigger$1, b as TooltipContent$1, aI as LIVE_UPDATE_INTERVAL_MS$1, u as useServerConfig, aJ as getEncryptionKeyForRun, t as toast, L as LoaderCircle, aK as StreamViewer } from "./mermaid-3ZIDBTTL-BDM4-x6u.js";
2
+ import { q as Check, O as Copy, C as CircleAlert, Q as parseStepName, B as parseWorkflowName, j as ChevronRight, o as ChevronDown, U as ErrorCard, Z as Zap, S as Send, R as ResolveHookModal, V as Circle, p as ChevronUp, X, N as ErrorBoundary, I as unwrapServerActionResult, u as unwrapOrThrow, W as WorkflowWebAPIError, Y as useEscapeKeydown, t as composeEventHandlers, _ as useCallbackRef, $ as useLayoutEffect2, s as useControllableState, a0 as useId, a1 as createContext2, v as Presence, x as createContextScope, l as hideOthers, m as ReactRemoveScroll, a2 as useFocusGuards, a3 as LAYOUT, a4 as wakeUpRun, r as resumeHook, A as Alert, c as AlertTitle, d as AlertDescription, a as Skeleton$1, a5 as RunActionsButtons, F as StatusBadge, e as CopyableText, b as RelativeTime, T as Tabs, K as TabsList, L as TabsTrigger, M as TabsContent, y as cancelRun, a6 as recreateRun } from "./workflow-graph-viewer-CU0UU458.js";
3
+ import { c as createLucideIcon, N as Spinner, O as cn, g as useToast, U as Skeleton, W as DecryptClickContext, Y as Yr, X as isEncryptedMarker, Z as formatDuration, _ as DataInspector, $ as _r, a0 as Button, a1 as Lock, a2 as RunClickContext, a3 as StreamClickContext, a4 as isExpiredMarker, a5 as isDoStreamStep, a6 as extractConversation, a7 as hasEncryptedFields, a8 as EVENT_DATA_REF_FIELDS, a9 as useSidebarDataOptional, aa as clsx, ab as useRowWindow, ac as isSpanDimmedBySearch, ad as ROW_HEIGHT_PX, ae as getSpanDurationMs, af as formatDurationPrecise, ag as TooltipProvider, ah as ActiveSpanProvider, ai as useActiveSpan, aj as useSidebarData, ak as searchSpans, al as computeRootBounds, am as computeTimeMarkers, an as getHighResInMs, ao as TIMELINE_PADDING_PX, ap as Timeline, aq as TimelineHeader, ar as IconButton, as as Tooltip, at as TooltipTrigger, au as TooltipContent, av as SidebarDataProvider, aw as hydrateResourceIOWithKey, ax as hydrateResourceIO, ay as fetchHook, k as fetchEvents, G as fetchRun, az as fetchStep, aA as fetchStreams, aB as Slot, F as useComposedRefs, aC as Slottable, d as cn$1, aD as buttonVariants, aE as fetchEvent, aF as fetchEventsByCorrelationId, aG as isEncryptedData, aH as hydrateData, aI as getWebRevivers, T as Tooltip$1, a as TooltipTrigger$1, b as TooltipContent$1, aJ as LIVE_UPDATE_INTERVAL_MS$1, u as useServerConfig, aK as getEncryptionKeyForRun, t as toast, L as LoaderCircle, aL as StreamViewer } from "./mermaid-3ZIDBTTL-C02sm-ZS.js";
4
4
  import { decrypt, importKey } from "./encryption-g14N5vQl.js";
5
5
  import "./index-B6-SzLmT.js";
6
6
  /**
@@ -2011,6 +2011,7 @@ const attributeOrder = [
2011
2011
  "eventData",
2012
2012
  "input",
2013
2013
  "output",
2014
+ "attributes",
2014
2015
  "resumeAt"
2015
2016
  ];
2016
2017
  const sortByAttributeOrder = (a, b) => {
@@ -2029,6 +2030,7 @@ const attributeDisplayNames = {
2029
2030
  runId: "Run ID",
2030
2031
  token: "Token",
2031
2032
  eventType: "Event Type",
2033
+ errorCode: "Error Code",
2032
2034
  correlationId: "Correlation ID",
2033
2035
  deploymentId: "Deployment ID",
2034
2036
  specVersion: "Spec Version",
@@ -2127,12 +2129,12 @@ const attributeToDisplayFn = {
2127
2129
  environment: (_value) => null,
2128
2130
  executionContext: (_value) => null,
2129
2131
  // Attributes MVP — string-string metadata attached to the run.
2130
- // Rendered as a JSON block; if empty/missing, hidden by the
2131
- // hasDisplayContent gate above.
2132
+ // Rendered in its own collapsible DetailCard; if empty/missing, hidden
2133
+ // by the hasDisplayContent gate.
2132
2134
  attributes: (value) => {
2133
2135
  if (!hasDisplayContent(value))
2134
2136
  return null;
2135
- return JsonBlock(value);
2137
+ return jsxRuntimeExports.jsx(DetailCard, { summary: "Attributes", children: JsonBlock(value) });
2136
2138
  },
2137
2139
  // Dates — wrapped with TimestampTooltip showing UTC/local + relative time
2138
2140
  createdAt: timestampWithTooltipOrNull,
@@ -2223,12 +2225,14 @@ const resolvableAttributes = [
2223
2225
  "output",
2224
2226
  "error",
2225
2227
  "metadata",
2228
+ "attributes",
2226
2229
  "eventData"
2227
2230
  ];
2228
2231
  const selfHeaderedAttributes = /* @__PURE__ */ new Set([
2229
2232
  "input",
2230
2233
  "output",
2231
2234
  "error",
2235
+ "attributes",
2232
2236
  "eventData"
2233
2237
  ]);
2234
2238
  const ExpiredDataMessage = () => jsxRuntimeExports.jsx("div", { className: "text-copy-12 rounded-md border p-4 my-2", style: {
@@ -2457,13 +2461,46 @@ function EventDataBlock({ eventType, data }) {
2457
2461
  }
2458
2462
  return jsxRuntimeExports.jsx(CopyableDataBlock, { data });
2459
2463
  }
2460
- function EventsList({ events, isLoading = false, error, onLoadEventData, encryptionKey }) {
2464
+ function EventsList({ events, isLoading = false, error, onLoadEventData, onStreamClick, onRunClick, encryptionKey }) {
2461
2465
  const sortedEvents = reactExports.useMemo(() => [...events].sort((a, b) => new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime()), [events]);
2462
2466
  const hasEvents = sortedEvents.length > 0 && !error;
2463
2467
  if (!hasEvents && !isLoading) {
2464
2468
  return jsxRuntimeExports.jsx(DetailCard, { summary: "Events", disabled: true });
2465
2469
  }
2466
- return jsxRuntimeExports.jsx(DetailCard, { summary: "Events", contentClassName: "mb-0", defaultOpen: true, children: isLoading ? jsxRuntimeExports.jsx("div", { className: "flex flex-col -mx-4", children: [0, 1, 2].map((i) => jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between gap-3 bg-background-200 px-4 py-2", children: [jsxRuntimeExports.jsx(Skeleton, { className: "h-4 w-32 rounded" }), jsxRuntimeExports.jsx(Skeleton, { className: "h-3 w-16 rounded" })] }, i)) }) : jsxRuntimeExports.jsx("div", { className: "flex flex-col -mx-4", children: sortedEvents.map((event) => jsxRuntimeExports.jsx(EventItem, { event, onLoadEventData, encryptionKey }, event.eventId)) }) });
2470
+ return jsxRuntimeExports.jsx(RunClickContext.Provider, { value: onRunClick, children: jsxRuntimeExports.jsx(StreamClickContext.Provider, { value: onStreamClick, children: jsxRuntimeExports.jsx(DetailCard, { summary: "Events", contentClassName: "mb-0", defaultOpen: true, children: isLoading ? jsxRuntimeExports.jsx("div", { className: "flex flex-col -mx-4", children: [0, 1, 2].map((i) => jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between gap-3 bg-background-200 px-4 py-2", children: [jsxRuntimeExports.jsx(Skeleton, { className: "h-4 w-32 rounded" }), jsxRuntimeExports.jsx(Skeleton, { className: "h-3 w-16 rounded" })] }, i)) }) : jsxRuntimeExports.jsx("div", { className: "flex flex-col -mx-4", children: sortedEvents.map((event) => jsxRuntimeExports.jsx(EventItem, { event, onLoadEventData, encryptionKey }, event.eventId)) }) }) }) });
2471
+ }
2472
+ const hasField = (value, key) => key in value;
2473
+ function spanDetailMatchesSelection(detail, resource, resourceId) {
2474
+ if (!detail || typeof detail !== "object" || !resource || !resourceId) {
2475
+ return false;
2476
+ }
2477
+ switch (resource) {
2478
+ case "step":
2479
+ return hasField(detail, "stepId") && detail.stepId === resourceId;
2480
+ case "hook":
2481
+ return hasField(detail, "hookId") && detail.hookId === resourceId;
2482
+ case "sleep":
2483
+ return hasField(detail, "waitId") && detail.waitId === resourceId;
2484
+ case "run":
2485
+ return hasField(detail, "runId") && !("stepId" in detail) && !("hookId" in detail) && !("waitId" in detail) && detail.runId === resourceId;
2486
+ default:
2487
+ return false;
2488
+ }
2489
+ }
2490
+ function mergeSpanDetail(spanData, detail) {
2491
+ if (!detail || typeof detail !== "object") {
2492
+ return spanData;
2493
+ }
2494
+ if (!spanData || typeof spanData !== "object") {
2495
+ return detail;
2496
+ }
2497
+ const merged = { ...detail };
2498
+ for (const [key, value] of Object.entries(spanData)) {
2499
+ if (value !== void 0) {
2500
+ merged[key] = value;
2501
+ }
2502
+ }
2503
+ return merged;
2467
2504
  }
2468
2505
  function isStep(data) {
2469
2506
  return data !== null && typeof data === "object" && "stepId" in data;
@@ -2554,17 +2591,18 @@ function EntityDetailPanel({ run, onStreamClick, onRunClick, spanDetailData, spa
2554
2591
  ]);
2555
2592
  const error = spanDetailError ?? void 0;
2556
2593
  const loading = spanDetailLoading ?? false;
2594
+ const matchedSpanDetailData = reactExports.useMemo(() => spanDetailMatchesSelection(spanDetailData, resource, resourceId) ? spanDetailData : null, [spanDetailData, resource, resourceId]);
2557
2595
  const hookToken = reactExports.useMemo(() => {
2558
2596
  if (resource !== "hook" || !resourceId)
2559
2597
  return void 0;
2560
- if (isHook(spanDetailData) && spanDetailData.token) {
2561
- return spanDetailData.token;
2598
+ if (isHook(matchedSpanDetailData) && matchedSpanDetailData.token) {
2599
+ return matchedSpanDetailData.token;
2562
2600
  }
2563
2601
  if (isHook(data) && data.token) {
2564
2602
  return data.token;
2565
2603
  }
2566
2604
  return void 0;
2567
- }, [resource, resourceId, spanDetailData, data]);
2605
+ }, [resource, resourceId, matchedSpanDetailData, data]);
2568
2606
  reactExports.useEffect(() => {
2569
2607
  if (error && selectedSpan && resource) {
2570
2608
  toast2.error(`Failed to load ${resource} details`, {
@@ -2619,7 +2657,7 @@ function EntityDetailPanel({ run, onStreamClick, onRunClick, spanDetailData, spa
2619
2657
  }
2620
2658
  try {
2621
2659
  setResolvingHook(true);
2622
- const candidate = spanDetailData ?? data;
2660
+ const candidate = matchedSpanDetailData ?? data;
2623
2661
  const hook = isHook(candidate) ? candidate : void 0;
2624
2662
  await onResolveHook(hookToken, payload, hook);
2625
2663
  toast2.success("Hook resolved", {
@@ -2637,8 +2675,8 @@ function EntityDetailPanel({ run, onStreamClick, onRunClick, spanDetailData, spa
2637
2675
  } finally {
2638
2676
  setResolvingHook(false);
2639
2677
  }
2640
- }, [onResolveHook, hookToken, resolvingHook, spanDetailData, data]);
2641
- const displayData = spanDetailData ?? data;
2678
+ }, [onResolveHook, hookToken, resolvingHook, matchedSpanDetailData, data]);
2679
+ const displayData = reactExports.useMemo(() => mergeSpanDetail(data, matchedSpanDetailData), [data, matchedSpanDetailData]);
2642
2680
  const moduleSpecifier = reactExports.useMemo(() => {
2643
2681
  const displayRecord = displayData;
2644
2682
  const displayStepName = displayRecord.stepName;
@@ -2667,7 +2705,7 @@ function EntityDetailPanel({ run, onStreamClick, onRunClick, spanDetailData, spa
2667
2705
  }, children: [jsxRuntimeExports.jsx(Zap, { className: "h-4 w-4" }), stoppingSleep ? "Waking up..." : "Wake Up Sleep"] }), resource === "hook" && canResolveHook && jsxRuntimeExports.jsxs("button", { type: "button", onClick: () => setShowResolveHookModal(true), disabled: resolvingHook, className: clsx("flex items-center justify-center gap-2 rounded-md px-3 py-2 text-sm font-medium", "disabled:opacity-50 disabled:cursor-not-allowed transition-colors", resolvingHook ? "opacity-50 cursor-not-allowed" : "cursor-pointer"), style: {
2668
2706
  background: "var(--ds-gray-1000)",
2669
2707
  color: "var(--ds-background-100)"
2670
- }, children: [jsxRuntimeExports.jsx(Send, { className: "h-4 w-4" }), "Resolve Hook"] })] })] }), jsxRuntimeExports.jsx(AttributePanel, { data: displayData, moduleSpecifier, expiredAt: run.expiredAt, isLoading: loading, error: error ?? void 0, onStreamClick, onRunClick, onDecrypt, isDecrypting, resource }), resource !== "run" && rawEvents && jsxRuntimeExports.jsx(EventsList, { events: rawEvents, onLoadEventData, encryptionKey })] }) }), jsxRuntimeExports.jsx(ResolveHookModal, { isOpen: showResolveHookModal, onClose: () => setShowResolveHookModal(false), onSubmit: handleResolveHook, isSubmitting: resolvingHook })] });
2708
+ }, children: [jsxRuntimeExports.jsx(Send, { className: "h-4 w-4" }), "Resolve Hook"] })] })] }), jsxRuntimeExports.jsx(AttributePanel, { data: displayData, moduleSpecifier, expiredAt: run.expiredAt, isLoading: loading, error: error ?? void 0, onStreamClick, onRunClick, onDecrypt, isDecrypting, resource }), resource !== "run" && rawEvents && jsxRuntimeExports.jsx(EventsList, { events: rawEvents, onLoadEventData, onStreamClick, onRunClick, encryptionKey })] }) }), jsxRuntimeExports.jsx(ResolveHookModal, { isOpen: showResolveHookModal, onClose: () => setShowResolveHookModal(false), onSubmit: handleResolveHook, isSubmitting: resolvingHook })] });
2671
2709
  }
2672
2710
  const COL_TEMPLATE = "340px 1px minmax(50px, 1fr)";
2673
2711
  const ROWS = [
@@ -2777,7 +2815,7 @@ const EventRow = ({ span, isSelected, isDimmed, onSelectSpan }) => {
2777
2815
  const workflowStatus = (_a = span.attributes.data) == null ? void 0 : _a.status;
2778
2816
  const isErrored = span.status.code === 2 || workflowStatus === "failed";
2779
2817
  const { icon: Icon, className: tagClassName } = getEventStyle(span.resource, isErrored);
2780
- return jsxRuntimeExports.jsx("li", { className: cn("relative overflow-clip group transition-opacity", ROW_HEIGHT_CLASS, isDimmed && "opacity-35"), role: "treeitem", "aria-selected": isSelected, "aria-expanded": isSelected, "aria-level": 1, onClick: () => onSelectSpan(span.spanId), children: jsxRuntimeExports.jsx("div", { className: "h-full hover:bg-gray-100 group-aria-selected:bg-gray-100 group-aria-selected:hover:bg-gray-200", children: jsxRuntimeExports.jsxs("div", { className: "flex h-full min-w-0 items-center pl-4 pr-2", children: [jsxRuntimeExports.jsxs("div", { className: "flex min-w-0 flex-1 items-center gap-2", children: [jsxRuntimeExports.jsx("span", { className: cn("shrink-0", tagClassName), children: jsxRuntimeExports.jsx(Icon, { className: "w-4 h-4" }) }), jsxRuntimeExports.jsx("span", { className: "min-w-0 text-label-14", children: jsxRuntimeExports.jsx(MiddleTruncate, { value: span.name }) })] }), jsxRuntimeExports.jsx("div", { className: "ml-2 shrink-0", children: jsxRuntimeExports.jsx("span", { className: "text-label-14 text-gray-900 tabular-nums", children: formatDuration(durationMs) }) })] }) }) });
2818
+ return jsxRuntimeExports.jsx("li", { className: cn("relative overflow-clip group transition-opacity", ROW_HEIGHT_CLASS, isDimmed && "opacity-35"), role: "treeitem", "aria-selected": isSelected, "aria-expanded": isSelected, "aria-level": 1, onClick: () => onSelectSpan(span.spanId), children: jsxRuntimeExports.jsx("div", { className: "h-full hover:bg-gray-100 group-aria-selected:bg-gray-100 group-aria-selected:hover:bg-gray-200", children: jsxRuntimeExports.jsxs("div", { className: "flex h-full min-w-0 items-center pl-4 pr-2", children: [jsxRuntimeExports.jsxs("div", { className: "flex min-w-0 flex-1 items-center gap-2", children: [jsxRuntimeExports.jsx("span", { className: cn("shrink-0", tagClassName), children: jsxRuntimeExports.jsx(Icon, { className: "w-4 h-4" }) }), jsxRuntimeExports.jsx("span", { className: "min-w-0 text-label-14", children: jsxRuntimeExports.jsx(MiddleTruncate, { value: span.name }) })] }), jsxRuntimeExports.jsx("div", { className: "ml-2 shrink-0", children: jsxRuntimeExports.jsx("span", { className: "text-label-14 text-gray-900 tabular-nums", children: formatDurationPrecise(durationMs) }) })] }) }) });
2781
2819
  };
2782
2820
  const EventList = ({ spans, activeSpanId, searchResult, onSelectSpan }) => {
2783
2821
  const listRef = reactExports.useRef(null);
@@ -1,7 +1,7 @@
1
1
  var __defProp = Object.defineProperty;
2
2
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
3
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4
- import { c as createLucideIcon, O as cn, d as cn$1, H as cva, aL as composeRefs, F as useComposedRefs, aM as useFloating, aN as offset, aO as shift, aP as limitShift, aQ as flip, aR as size, aS as arrow, aT as hide, aU as autoUpdate, T as Tooltip, a as TooltipTrigger, b as TooltipContent, aV as cancelRun$1, aW as reenqueueRun$1, aX as wakeUpRun$1, aY as resumeHook$1, aZ as recreateRun$1, w as createContextScope$1, m as useComposedRefs$1, x as createSlot, Z as formatDuration, B as Button, t as toast, q as useId$1, P as Primitive$1, n as composeEventHandlers$1, y as useControllableState$1, l as useCallbackRef$2, I as Presence$1 } from "./mermaid-3ZIDBTTL-BDM4-x6u.js";
4
+ import { c as createLucideIcon, O as cn, d as cn$1, H as cva, aM as composeRefs, F as useComposedRefs, aN as useFloating, aO as offset, aP as shift, aQ as limitShift, aR as flip, aS as size, aT as arrow, aU as hide, aV as autoUpdate, T as Tooltip, a as TooltipTrigger, b as TooltipContent, aW as cancelRun$1, aX as reenqueueRun$1, aY as wakeUpRun$1, aZ as resumeHook$1, a_ as recreateRun$1, w as createContextScope$1, m as useComposedRefs$1, x as createSlot, Z as formatDuration, B as Button, t as toast, q as useId$1, P as Primitive$1, n as composeEventHandlers$1, y as useControllableState$1, l as useCallbackRef$2, I as Presence$1 } from "./mermaid-3ZIDBTTL-C02sm-ZS.js";
5
5
  import { r as reactExports, j as jsxRuntimeExports, f as reactDomExports, R as ReactExports, I as React, G as ReactDOM, a as requireReact, g as getDefaultExportFromCjs } from "./index-BXZSIDEp.js";
6
6
  import { V as VERCEL_403_ERROR_MESSAGE } from "./index-B6-SzLmT.js";
7
7
  function parseName(tag, name) {
@@ -9176,7 +9176,7 @@ const app = express();
9176
9176
  app.all(
9177
9177
  "/{*splat}",
9178
9178
  createRequestHandler({
9179
- build: () => import("./server-build-CSP1Aknr.js").then((n) => n.Z)
9179
+ build: () => import("./server-build-B9XdaVeE.js").then((n) => n.a0)
9180
9180
  })
9181
9181
  );
9182
9182
  app.use(
@@ -1,5 +1,5 @@
1
- import { K as R, O as Ks, T as jsxRuntimeExports, U as Qe } from "./server-build-CSP1Aknr.js";
2
- import { r as reactExports } from "./app-eXXkzWLS.js";
1
+ import { U as R, X as Ks, Y as jsxRuntimeExports, Z as Qe } from "./server-build-B9XdaVeE.js";
2
+ import { r as reactExports } from "./app-BKJ-G0q_.js";
3
3
  import "node:stream";
4
4
  import "util";
5
5
  import "crypto";