@workflow/web 5.0.0-beta.42 → 5.0.0-beta.44

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 (23) hide show
  1. package/build/client/assets/{arrow-up-right-D39pnGsD.js → arrow-up-right-AtCpRI70.js} +1 -1
  2. package/build/client/assets/{highlighted-body-B3W2YXNL-Dc1dLaUr.js → highlighted-body-B3W2YXNL-BPRwlr7r.js} +1 -1
  3. package/build/client/assets/{home-C6CuMqQu.js → home-BMHSjdeg.js} +3 -3
  4. package/build/client/assets/{loader-circle-BOxaTUjK.js → loader-circle-abAcDEYl.js} +1 -1
  5. package/build/client/assets/{manifest-cf88886b.js → manifest-a9a8ec99.js} +1 -1
  6. package/build/client/assets/{mermaid-3ZIDBTTL-gEw-Ch1C.js → mermaid-3ZIDBTTL-CrfHaTou.js} +368 -294
  7. package/build/client/assets/{root-BfhMCbkz.js → root-e8qlLJiK.js} +3 -3
  8. package/build/client/assets/{run-detail-DKz7lp2q.js → run-detail-CrWq-9Tk.js} +172 -56
  9. package/build/client/assets/{workflow-graph-viewer-CxrWityD.js → workflow-graph-viewer-CFAXloBw.js} +1 -1
  10. package/build/client/assets/{zstd-browser-decoder-CAEVa0bm.js → zstd-browser-decoder-B9DmHkyE.js} +1 -1
  11. package/build/server/assets/{app-SrggQnfh.js → app-wed_Qw3X.js} +1773 -856
  12. package/build/server/assets/{highlighted-body-B3W2YXNL-DMhwZQgG.js → highlighted-body-B3W2YXNL-imLU-Cvz.js} +5 -4
  13. package/build/server/assets/{index-ByPjQpgH.js → index-Dsr6TVhD.js} +1 -1
  14. package/build/server/assets/{index-DsnQrgwB.js → index-DxLR22JW.js} +80 -71
  15. package/build/server/assets/{mermaid-3ZIDBTTL-CK9fLYE8.js → mermaid-3ZIDBTTL-CgaDjNgb.js} +5 -4
  16. package/build/server/assets/{token-sFDUVNm0.js → token-CA6-cBL4.js} +1 -1
  17. package/build/server/assets/{token-util-CighjZkT.js → token-util-BNjC27Tj.js} +1 -1
  18. package/build/server/assets/{websocket-server-BADWB2u5.js → websocket-server-S8DMC969.js} +1 -1
  19. package/build/server/assets/{wrapper-Bwi-W3ol.js → wrapper-DeK0m2tW.js} +7 -6
  20. package/build/server/assets/{ws-transport-DaZsgQ2B.js → ws-transport-DdxSF5J6.js} +44 -25
  21. package/build/server/assets/{zstd-browser-decoder-dRi0VqoM.js → zstd-browser-decoder-Cd_DTxZV.js} +5 -4
  22. package/build/server/index.js +7 -6
  23. package/package.json +8 -8
@@ -1,7 +1,7 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports, w as withComponentProps, a as withErrorBoundaryProps, M as Meta, L as Links, S as ScrollRestoration, b as Scripts, O as Outlet, u as useRouteError, i as isRouteErrorResponse, c as Link, d as useNavigate, e as useSearchParams } from "./index-PFjW8YjQ.js";
2
- import { c as createLucideIcon, u as useServerConfig, T as Tooltip, a as TooltipTrigger, b as TooltipContent, d as runHealthCheck, t as toast, B as Button, e as cn, f as Toaster$1, S as ServerConfigProvider, g as TooltipProvider } from "./mermaid-3ZIDBTTL-gEw-Ch1C.js";
3
- import { L as LoaderCircle } from "./loader-circle-BOxaTUjK.js";
4
- import { A as ArrowUpRight } from "./arrow-up-right-D39pnGsD.js";
2
+ import { c as createLucideIcon, u as useServerConfig, T as Tooltip, a as TooltipTrigger, b as TooltipContent, d as runHealthCheck, t as toast, B as Button, e as cn, f as Toaster$1, S as ServerConfigProvider, g as TooltipProvider } from "./mermaid-3ZIDBTTL-CrfHaTou.js";
3
+ import { L as LoaderCircle } from "./loader-circle-abAcDEYl.js";
4
+ import { A as ArrowUpRight } from "./arrow-up-right-AtCpRI70.js";
5
5
  var M = (e, i, s, u, m, a, l, h) => {
6
6
  let d = document.documentElement, w = ["light", "dark"];
7
7
  function p(n) {
@@ -1,7 +1,7 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports, o as reactDomExports, D as ReactDOM, d as useNavigate, e as useSearchParams, c as Link, w as withComponentProps, G as useParams } from "./index-PFjW8YjQ.js";
2
- import { C as CircleAlert, O as parseStepName, B as parseWorkflowName, Q as ErrorCard, U as format, Z as Zap, S as Send, R as ResolveHookModal, q as ChevronUp, X, N as ErrorBoundary, V as Circle, u as unwrapOrThrow, W as WorkflowWebAPIError, I as unwrapServerActionResult, 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, n as hideOthers, o as ReactRemoveScroll, a2 as useFocusGuards, a3 as LAYOUT, a4 as wakeUpRun, l as resumeHook, A as Alert, c as AlertTitle, g as getErrorTitle, d as AlertDescription, e as getErrorMessage, a as Skeleton$1, a5 as RunActionsButtons, F as StatusBadge, h as CopyableText, b as RelativeTime, T as Tabs, K as TabsList, L as TabsTrigger, M as TabsContent, a6 as cancelRun, a7 as recreateRun } from "./workflow-graph-viewer-CxrWityD.js";
3
- import { c as createLucideIcon, Y as entityEventClass, Z as cn, $ as CopyableDataBlock, a0 as CollapsibleRoot, a1 as CollapsibleTrigger, a2 as CollapsibleContent, a3 as CopyButton, O as cva, a4 as RESERVED_ATTRIBUTE_KEY_PREFIX, a5 as Spinner, a6 as TooltipProvider, a7 as Tooltip, a8 as TooltipTrigger, a9 as TooltipContent, aa as ContextCardProvider, h as useToast, ab as Skeleton, ac as DecryptClickContext, ad as Yr, ae as isEncryptedMarker, m as ChevronRight, af as TimestampTooltip, ag as formatDuration, C as Check, l as Copy, ah as DataInspector, ai as _r, aj as isHookLifecycleEventType, ak as isTerminalStepEventType, al as isWaitEventType, am as isStepEventType, an as RunClickContext, ao as StreamClickContext, ap as Collapsible, aq as isExpiredMarker, ar as isDoStreamStep, as as extractConversation, at as EncryptedDataBlock, au as getEventDataRefFields, av as hasEncryptedFields, aw as useSidebarDataOptional, ax as isTerminalWorkflowRunStatus, ay as clsx, az as useActiveSpan, aA as useSidebarData, aB as IconButton, J as ChevronDown, aC as useRowWindow, aD as isSpanDimmedBySearch, aE as ROW_HEIGHT_PX, aF as getSpanDurationMs, aG as isSpanErrored, aH as formatDurationPrecise, aI as ActiveSpanProvider, aJ as useReducedMotion, aK as searchSpans, aL as computeRootBounds, aM as computeTimeMarkers, aN as clampViewportToRoot, aO as getHighResInMs, aP as scrollRowIntoView, aQ as TIMELINE_PADDING_PX, aR as Minimap, aS as Timeline, aT as TimelineHeader, aU as wheelZoomScaleFactor, aV as wheelDeltaToPixels, aW as SidebarDataProvider, aX as fetchHook, n as fetchEvents, aY as hydrateResourceIOAsync, N as fetchRun, aZ as fetchStep, a_ as hydrateResourceIO, a$ as fetchStreams, b0 as apiBase, b1 as Slot, L as useComposedRefs, b2 as Slottable, e as cn$1, b3 as buttonVariants, b4 as fetchEvent, b5 as fetchEventsByCorrelationId, b6 as isEncryptedData, b7 as hydrateData, b8 as decrypt, b9 as deriveRunPayloadKeys, ba as getWebRevivers, T as Tooltip$1, a as TooltipTrigger$1, b as TooltipContent$1, bb as LIVE_UPDATE_INTERVAL_MS$1, u as useServerConfig, bc as getEncryptionKeyForRun, t as toast, bd as StreamViewerSkeleton, be as Lock, bf as StreamViewer } from "./mermaid-3ZIDBTTL-gEw-Ch1C.js";
4
- import { A as ArrowUpRight } from "./arrow-up-right-D39pnGsD.js";
2
+ import { C as CircleAlert, O as parseStepName, B as parseWorkflowName, Q as ErrorCard, U as format, Z as Zap, S as Send, R as ResolveHookModal, q as ChevronUp, X, N as ErrorBoundary, V as Circle, u as unwrapOrThrow, W as WorkflowWebAPIError, I as unwrapServerActionResult, 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, n as hideOthers, o as ReactRemoveScroll, a2 as useFocusGuards, a3 as LAYOUT, a4 as wakeUpRun, l as resumeHook, A as Alert, c as AlertTitle, g as getErrorTitle, d as AlertDescription, e as getErrorMessage, a as Skeleton$1, a5 as RunActionsButtons, F as StatusBadge, h as CopyableText, b as RelativeTime, T as Tabs, K as TabsList, L as TabsTrigger, M as TabsContent, a6 as cancelRun, a7 as recreateRun } from "./workflow-graph-viewer-CFAXloBw.js";
3
+ import { c as createLucideIcon, Y as entityEventClass, Z as isSealedNoopEvent$1, $ as cn, a0 as CopyableDataBlock, a1 as CollapsibleRoot, a2 as CollapsibleTrigger, a3 as CollapsibleContent, a4 as CopyButton, O as cva, a5 as RESERVED_ATTRIBUTE_KEY_PREFIX, a6 as Spinner, a7 as TooltipProvider, a8 as Tooltip, a9 as TooltipTrigger, aa as TooltipContent, ab as ContextCardProvider, h as useToast, ac as Skeleton, ad as DecryptClickContext, ae as Yr, af as isEncryptedMarker, m as ChevronRight, ag as TimestampTooltip, ah as formatDuration, C as Check, l as Copy, ai as DataInspector, aj as _r, ak as isHookLifecycleEventType, al as isTerminalStepEventType, am as isWaitEventType, an as isStepEventType, ao as RunClickContext, ap as StreamClickContext, aq as Collapsible, ar as isExpiredMarker, as as isDoStreamStep, at as extractConversation, au as EncryptedDataBlock, av as getEventDataRefFields, aw as hasEncryptedFields, ax as useSidebarDataOptional, ay as isTerminalWorkflowRunStatus, az as clsx, aA as useActiveSpan, aB as useSidebarData, aC as IconButton, J as ChevronDown, aD as useRowWindow, aE as isSpanDimmedBySearch, aF as ROW_HEIGHT_PX, aG as getSpanDurationMs, aH as isSpanErrored, aI as formatDurationPrecise, aJ as ActiveSpanProvider, aK as useReducedMotion, aL as searchSpans, aM as computeRootBounds, aN as computeTimeMarkers, aO as clampViewportToRoot, aP as getHighResInMs, aQ as scrollRowIntoView, aR as TIMELINE_PADDING_PX, aS as Minimap, aT as Timeline, aU as TimelineHeader, aV as wheelZoomScaleFactor, aW as wheelDeltaToPixels, aX as SidebarDataProvider, aY as fetchHook, n as fetchEvents, aZ as hydrateResourceIOAsync, N as fetchRun, a_ as fetchStep, a$ as hydrateResourceIO, b0 as fetchStreams, b1 as apiBase, b2 as Slot, L as useComposedRefs, b3 as Slottable, e as cn$1, b4 as buttonVariants, b5 as fetchEvent, b6 as fetchEventsByCorrelationId, b7 as isEncryptedData, b8 as hydrateData, b9 as decrypt, ba as deriveRunPayloadKeys, bb as getWebRevivers, T as Tooltip$1, a as TooltipTrigger$1, b as TooltipContent$1, bc as LIVE_UPDATE_INTERVAL_MS$1, u as useServerConfig, bd as getEncryptionKeyForRun, t as toast, be as StreamViewerSkeleton, bf as Lock, bg as StreamViewer } from "./mermaid-3ZIDBTTL-CrfHaTou.js";
4
+ import { A as ArrowUpRight } from "./arrow-up-right-AtCpRI70.js";
5
5
  /**
6
6
  * @license lucide-react v0.575.0 - ISC
7
7
  *
@@ -194,6 +194,10 @@ function looksLikeWorkflowIdSearchInput(query) {
194
194
  }
195
195
  return /\d/.test(trimmed);
196
196
  }
197
+ const SEALED_EVENT_MESSAGE = "No-op events are written by the backend to seal an abandoned log position";
198
+ function isSealedNoopEvent(event) {
199
+ return isSealedNoopEvent$1(event);
200
+ }
197
201
  const ELLIPSIS = "…";
198
202
  const MIN_START = 3;
199
203
  const MIN_END = 3;
@@ -324,6 +328,33 @@ function getMiddleTruncateCopyTextFromSelectionText({ prefixText, selectionText,
324
328
  });
325
329
  return mappedText === null ? null : leading + mappedText + trailing;
326
330
  }
331
+ const pendingMeasurements = /* @__PURE__ */ new Map();
332
+ let measurementFrame = 0;
333
+ function flushMeasurements() {
334
+ measurementFrame = 0;
335
+ const reads = [...pendingMeasurements.values()];
336
+ pendingMeasurements.clear();
337
+ const measures = reads.map((read) => read());
338
+ for (const measure of measures) {
339
+ measure == null ? void 0 : measure();
340
+ }
341
+ }
342
+ function scheduleMeasurement(key, { read, measure }) {
343
+ pendingMeasurements.set(key, () => {
344
+ const measurement = read();
345
+ return measurement === null ? null : () => measure(measurement);
346
+ });
347
+ if (measurementFrame === 0) {
348
+ measurementFrame = requestAnimationFrame(flushMeasurements);
349
+ }
350
+ }
351
+ function cancelMeasurement(key) {
352
+ pendingMeasurements.delete(key);
353
+ if (pendingMeasurements.size === 0 && measurementFrame !== 0) {
354
+ cancelAnimationFrame(measurementFrame);
355
+ measurementFrame = 0;
356
+ }
357
+ }
327
358
  const useIsomorphicLayoutEffect = typeof window === "undefined" ? reactExports.useEffect : reactExports.useLayoutEffect;
328
359
  function createFullState(value, graphemes) {
329
360
  return {
@@ -341,7 +372,13 @@ function useMiddleTruncate(value) {
341
372
  const ref = reactExports.useRef(null);
342
373
  const measureRef = reactExports.useRef(null);
343
374
  const [state, setState] = reactExports.useState(() => fullState);
344
- const rafRef = reactExports.useRef(0);
375
+ const measurementKeyRef = reactExports.useRef({});
376
+ const textMeasurementCacheRef = reactExports.useRef({
377
+ typography: "",
378
+ value,
379
+ widths: /* @__PURE__ */ new Map()
380
+ });
381
+ const lastMeasurementRef = reactExports.useRef(null);
345
382
  const updateState = reactExports.useCallback((nextState) => {
346
383
  setState((currentState) => {
347
384
  if (currentState.displayText === nextState.displayText && currentState.isTruncated === nextState.isTruncated && currentState.prefixText === nextState.prefixText && currentState.prefixGraphemeCount === nextState.prefixGraphemeCount && currentState.suffixText === nextState.suffixText && currentState.suffixGraphemeCount === nextState.suffixGraphemeCount) {
@@ -350,26 +387,68 @@ function useMiddleTruncate(value) {
350
387
  return nextState;
351
388
  });
352
389
  }, []);
353
- const recalculate = reactExports.useCallback(() => {
390
+ const readMeasurement = reactExports.useCallback(() => {
354
391
  const el = ref.current;
355
392
  const measureEl = measureRef.current;
356
393
  if (!el || !measureEl)
394
+ return null;
395
+ const availableWidth = el.clientWidth;
396
+ const style = getComputedStyle(measureEl);
397
+ return {
398
+ availableWidth,
399
+ typography: [
400
+ style.fontFamily,
401
+ style.fontFeatureSettings,
402
+ style.fontKerning,
403
+ style.fontSize,
404
+ style.fontStretch,
405
+ style.fontStyle,
406
+ style.fontVariationSettings,
407
+ style.fontWeight,
408
+ style.letterSpacing,
409
+ style.textTransform
410
+ ].join("\0")
411
+ };
412
+ }, []);
413
+ const recalculate = reactExports.useCallback(({ availableWidth, typography }) => {
414
+ const measureEl = measureRef.current;
415
+ if (!measureEl)
416
+ return;
417
+ const lastMeasurement = lastMeasurementRef.current;
418
+ if ((lastMeasurement == null ? void 0 : lastMeasurement.availableWidth) === availableWidth && lastMeasurement.typography === typography && lastMeasurement.value === value) {
357
419
  return;
358
- const available = el.clientWidth;
359
- if (available <= 0) {
420
+ }
421
+ lastMeasurementRef.current = {
422
+ availableWidth,
423
+ typography,
424
+ value
425
+ };
426
+ if (availableWidth <= 0) {
360
427
  updateState(fullState);
361
428
  return;
362
429
  }
430
+ const textMeasurementCache = textMeasurementCacheRef.current;
431
+ if (textMeasurementCache.typography !== typography || textMeasurementCache.value !== value) {
432
+ textMeasurementCache.typography = typography;
433
+ textMeasurementCache.value = value;
434
+ textMeasurementCache.widths.clear();
435
+ }
363
436
  const measure = (text) => {
437
+ const cachedWidth = textMeasurementCache.widths.get(text);
438
+ if (cachedWidth !== void 0) {
439
+ return cachedWidth;
440
+ }
364
441
  measureEl.textContent = text;
365
- return measureEl.scrollWidth;
442
+ const width = measureEl.scrollWidth;
443
+ textMeasurementCache.widths.set(text, width);
444
+ return width;
366
445
  };
367
446
  const fullWidth = measure(value);
368
- if (fullWidth <= available) {
447
+ if (fullWidth <= availableWidth) {
369
448
  updateState(fullState);
370
449
  return;
371
450
  }
372
- const result = middleTruncate(graphemes, available, measure, fullWidth);
451
+ const result = middleTruncate(graphemes, availableWidth, measure, fullWidth);
373
452
  updateState({
374
453
  displayText: result.text,
375
454
  isTruncated: result.truncated,
@@ -380,33 +459,45 @@ function useMiddleTruncate(value) {
380
459
  });
381
460
  }, [fullState, graphemes, updateState, value]);
382
461
  useIsomorphicLayoutEffect(() => {
383
- recalculate();
384
- }, [recalculate]);
462
+ const measurement = readMeasurement();
463
+ if (measurement) {
464
+ recalculate(measurement);
465
+ }
466
+ }, [readMeasurement, recalculate]);
385
467
  reactExports.useEffect(() => {
386
468
  var _a;
387
469
  const el = ref.current;
388
470
  if (!el)
389
471
  return;
390
- const debouncedRecalc = () => {
391
- cancelAnimationFrame(rafRef.current);
392
- rafRef.current = requestAnimationFrame(recalculate);
472
+ const measurementKey = measurementKeyRef.current;
473
+ const scheduleRecalculation = () => {
474
+ scheduleMeasurement(measurementKey, {
475
+ read: readMeasurement,
476
+ measure: recalculate
477
+ });
393
478
  };
394
- const ro = typeof ResizeObserver !== "undefined" ? new ResizeObserver(debouncedRecalc) : null;
479
+ const ro = typeof ResizeObserver !== "undefined" ? new ResizeObserver(scheduleRecalculation) : null;
395
480
  ro == null ? void 0 : ro.observe(el);
396
- window.addEventListener("resize", debouncedRecalc);
481
+ if (!ro) {
482
+ window.addEventListener("resize", scheduleRecalculation);
483
+ }
397
484
  const onFontsLoaded = () => {
398
- debouncedRecalc();
485
+ textMeasurementCacheRef.current.widths.clear();
486
+ lastMeasurementRef.current = null;
487
+ scheduleRecalculation();
399
488
  };
400
489
  const fontSet = "fonts" in document ? document.fonts : null;
401
490
  (_a = fontSet == null ? void 0 : fontSet.addEventListener) == null ? void 0 : _a.call(fontSet, "loadingdone", onFontsLoaded);
402
491
  return () => {
403
492
  var _a2;
404
493
  ro == null ? void 0 : ro.disconnect();
405
- window.removeEventListener("resize", debouncedRecalc);
406
- cancelAnimationFrame(rafRef.current);
494
+ if (!ro) {
495
+ window.removeEventListener("resize", scheduleRecalculation);
496
+ }
497
+ cancelMeasurement(measurementKey);
407
498
  (_a2 = fontSet == null ? void 0 : fontSet.removeEventListener) == null ? void 0 : _a2.call(fontSet, "loadingdone", onFontsLoaded);
408
499
  };
409
- }, [recalculate]);
500
+ }, [readMeasurement, recalculate]);
410
501
  return {
411
502
  ref,
412
503
  measureRef,
@@ -422,12 +513,18 @@ function getRangeOffsets(container, range) {
422
513
  if (!container.contains(range.startContainer) || !container.contains(range.endContainer)) {
423
514
  return null;
424
515
  }
425
- const startRange = document.createRange();
426
- startRange.selectNodeContents(container);
427
- startRange.setEnd(range.startContainer, range.startOffset);
428
- const endRange = document.createRange();
429
- endRange.selectNodeContents(container);
430
- endRange.setEnd(range.endContainer, range.endOffset);
516
+ let startRange;
517
+ let endRange;
518
+ try {
519
+ startRange = document.createRange();
520
+ startRange.selectNodeContents(container);
521
+ startRange.setEnd(range.startContainer, range.startOffset);
522
+ endRange = document.createRange();
523
+ endRange.selectNodeContents(container);
524
+ endRange.setEnd(range.endContainer, range.endOffset);
525
+ } catch {
526
+ return null;
527
+ }
431
528
  return {
432
529
  end: endRange.toString().length,
433
530
  start: startRange.toString().length
@@ -449,7 +546,7 @@ function MiddleTruncate({ value, className, onCopy: onCopyProp, ...props }) {
449
546
  const range = selection.getRangeAt(0);
450
547
  const visibleEl = visibleRef.current;
451
548
  let copyText = null;
452
- if (e.currentTarget.contains(range.startContainer) && e.currentTarget.contains(range.endContainer) && visibleEl) {
549
+ if (selectionText.includes(ELLIPSIS) && e.currentTarget.contains(range.startContainer) && e.currentTarget.contains(range.endContainer) && visibleEl) {
453
550
  const offsets = getRangeOffsets(visibleEl, range);
454
551
  if (offsets) {
455
552
  copyText = getMiddleTruncateCopyText({
@@ -578,14 +675,14 @@ function AttrSetEventBlock({ data }) {
578
675
  const writerLabel = describeWriter(data.writer);
579
676
  return jsxRuntimeExports.jsxs("div", { className: "flex flex-col px-3 py-1", children: [jsxRuntimeExports.jsx("div", { className: "flex flex-col", children: data.changes.map((change, index) => jsxRuntimeExports.jsx(AttributeRow, { attributeKey: change.key, removed: change.value === null, value: change.value ?? void 0 }, `${change.key}:${index}`)) }), writerLabel && jsxRuntimeExports.jsx("div", { className: "border-gray-alpha-400 border-t py-1.5 text-gray-700 text-label-12", children: writerLabel })] });
580
677
  }
581
- const STYLES$2 = `.wf-decrypt-btn{appearance:none;-webkit-appearance:none;border:none;display:inline-flex;align-items:center;justify-content:center;height:40px;padding:0 12px;border-radius:6px;font-size:14px;font-weight:500;line-height:20px;cursor:pointer;white-space:nowrap;gap:6px;transition:background 150ms}.wf-decrypt-idle{color:var(--ds-gray-1000);background:var(--ds-background-100);box-shadow:0 0 0 1px var(--ds-gray-400)}.wf-decrypt-idle:hover{background:var(--ds-gray-alpha-200)}.wf-decrypt-done{color:var(--ds-green-900);background:var(--ds-green-100);box-shadow:0 0 0 1px var(--ds-green-400);cursor:default}`;
582
- function DecryptButton({ decrypted = false, loading = false, onClick }) {
583
- return jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx("style", { dangerouslySetInnerHTML: { __html: STYLES$2 } }), jsxRuntimeExports.jsxs("button", { type: "button", onClick: decrypted ? void 0 : onClick, disabled: decrypted || loading, className: `wf-decrypt-btn ${decrypted ? "wf-decrypt-done" : "wf-decrypt-idle"}`, children: [loading ? jsxRuntimeExports.jsx(Spinner, { size: 14 }) : decrypted ? jsxRuntimeExports.jsxs("svg", { width: 14, height: 14, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", children: [jsxRuntimeExports.jsx("rect", { x: "3", y: "11", width: "18", height: "11", rx: "2", ry: "2" }), jsxRuntimeExports.jsx("path", { d: "M7 11V7a5 5 0 0 1 9.9-1" })] }) : jsxRuntimeExports.jsxs("svg", { width: 14, height: 14, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", children: [jsxRuntimeExports.jsx("rect", { x: "3", y: "11", width: "18", height: "11", rx: "2", ry: "2" }), jsxRuntimeExports.jsx("path", { d: "M7 11V7a5 5 0 0 1 10 0v4" })] }), loading ? "Decrypting…" : decrypted ? "Decrypted" : "Decrypt"] })] });
678
+ const STYLES$2 = `.wf-decrypt-btn{appearance:none;-webkit-appearance:none;border:none;display:inline-flex;align-items:center;justify-content:center;height:40px;padding:0 12px;border-radius:6px;font-size:14px;font-weight:500;line-height:20px;cursor:pointer;white-space:nowrap;gap:6px;transition:background 150ms}.wf-decrypt-idle{color:var(--ds-gray-1000);background:var(--ds-background-100);box-shadow:0 0 0 1px var(--ds-gray-400)}.wf-decrypt-idle:hover{background:var(--ds-gray-alpha-200)}.wf-decrypt-btn:disabled{cursor:not-allowed;opacity:.5}.wf-decrypt-done{color:var(--ds-green-900);background:var(--ds-green-100);box-shadow:0 0 0 1px var(--ds-green-400);cursor:default}`;
679
+ function DecryptButton({ decrypted = false, loading = false, disabled = false, disabledReason, onClick }) {
680
+ return jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx("style", { dangerouslySetInnerHTML: { __html: STYLES$2 } }), jsxRuntimeExports.jsxs("button", { type: "button", onClick: decrypted ? void 0 : onClick, disabled: decrypted || loading || disabled, title: disabled ? disabledReason : void 0, className: `wf-decrypt-btn ${decrypted ? "wf-decrypt-done" : "wf-decrypt-idle"}`, children: [loading ? jsxRuntimeExports.jsx(Spinner, { size: 14 }) : decrypted ? jsxRuntimeExports.jsxs("svg", { width: 14, height: 14, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", children: [jsxRuntimeExports.jsx("rect", { x: "3", y: "11", width: "18", height: "11", rx: "2", ry: "2" }), jsxRuntimeExports.jsx("path", { d: "M7 11V7a5 5 0 0 1 9.9-1" })] }) : jsxRuntimeExports.jsxs("svg", { width: 14, height: 14, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", children: [jsxRuntimeExports.jsx("rect", { x: "3", y: "11", width: "18", height: "11", rx: "2", ry: "2" }), jsxRuntimeExports.jsx("path", { d: "M7 11V7a5 5 0 0 1 10 0v4" })] }), loading ? "Decrypting…" : decrypted ? "Decrypted" : "Decrypt"] })] });
584
681
  }
585
- function DuplicateEventTooltip({ isDuplicate = false, children }) {
586
- if (!isDuplicate)
682
+ function EventNoticeTooltip({ notice, children }) {
683
+ if (!notice)
587
684
  return children;
588
- return jsxRuntimeExports.jsx(TooltipProvider, { delayDuration: 300, children: jsxRuntimeExports.jsxs(Tooltip, { children: [jsxRuntimeExports.jsx(TooltipTrigger, { asChild: true, children }), jsxRuntimeExports.jsx(TooltipContent, { className: "max-w-[264px] leading-snug", collisionPadding: 8, side: "top", children: DUPLICATE_EVENT_MESSAGE })] }) });
685
+ return jsxRuntimeExports.jsx(TooltipProvider, { delayDuration: 300, children: jsxRuntimeExports.jsxs(Tooltip, { children: [jsxRuntimeExports.jsx(TooltipTrigger, { asChild: true, children }), jsxRuntimeExports.jsx(TooltipContent, { className: "max-w-[264px] leading-snug", collisionPadding: 8, side: "top", children: notice })] }) });
589
686
  }
590
687
  function isStructuredError(value) {
591
688
  return value != null && typeof value === "object" && (typeof value.message === "string" || typeof value.stack === "string");
@@ -610,7 +707,7 @@ ${stack}` : body;
610
707
  borderBottom: "1px solid var(--ds-red-400)"
611
708
  }, children: [jsxRuntimeExports.jsx(CircleAlert, { className: "h-4 w-4 shrink-0" }), jsxRuntimeExports.jsx("p", {
612
709
  className: "text-label-12 font-semibold m-0 truncate",
613
- // The full message or stack is in the body below; the header just
710
+ // The full message or stack is in the body below; the header
614
711
  // shows the first line, single-line, with overflow
615
712
  // ellipsised so a long title doesn't push the copy button or
616
713
  // wrap into the framed hint/docs lines.
@@ -702,6 +799,9 @@ function getStatusDotColor(eventType) {
702
799
  if (eventType === "step_started" || eventType === "run_started" || eventType === "workflow_started" || eventType === "hook_received") {
703
800
  return "var(--ds-blue-700)";
704
801
  }
802
+ if (eventType === "noop") {
803
+ return "var(--ds-gray-500)";
804
+ }
705
805
  return "var(--ds-gray-600)";
706
806
  }
707
807
  function buildNameMaps(events, run) {
@@ -711,7 +811,7 @@ function buildNameMaps(events, run) {
711
811
  for (const event of events) {
712
812
  if (event.eventType === "step_created" && event.correlationId) {
713
813
  const stepName = ((_a = event.eventData) == null ? void 0 : _a.stepName) ?? "";
714
- const parsed = parseStepName(String(stepName));
814
+ const parsed = parseStepName(String(stepName)) ?? parseWorkflowName(String(stepName));
715
815
  correlationNameMap.set(event.correlationId, (parsed == null ? void 0 : parsed.shortName) ?? stepName);
716
816
  }
717
817
  }
@@ -770,9 +870,9 @@ function hasEncryptedValues(data) {
770
870
  return false;
771
871
  }
772
872
  function isRunLevel(eventType) {
773
- return eventType === "run_created" || eventType === "run_started" || eventType === "run_completed" || eventType === "run_failed" || eventType === "run_cancelled" || eventType === "workflow_started" || eventType === "workflow_completed" || eventType === "workflow_failed" || // attr_set carries a dedup correlationId rather than a child entity ID,
774
- // so it groups and labels with the run itself.
775
- eventType === "attr_set";
873
+ return eventType === "run_created" || eventType === "run_started" || eventType === "run_completed" || eventType === "run_failed" || eventType === "run_cancelled" || eventType === "workflow_started" || eventType === "workflow_completed" || eventType === "workflow_failed" || // attr_set and noop carry a dedup/positional correlationId rather than a
874
+ // child entity ID, so they group and label with the run itself.
875
+ eventType === "attr_set" || eventType === "noop";
776
876
  }
777
877
  const GUTTER_WIDTH = 36;
778
878
  const LANE_X = 20;
@@ -980,6 +1080,8 @@ function EventRow$1({ event, index, isFirst, isLast, isExpanded, onToggleExpand,
980
1080
  }
981
1081
  }, []);
982
1082
  const rowGroupKey = isRunLevel(event.eventType) ? "__run__" : event.correlationId ?? void 0;
1083
+ const isSealed = isSealedNoopEvent(event);
1084
+ const rowNotice = isDuplicate ? DUPLICATE_EVENT_MESSAGE : isSealed ? SEALED_EVENT_MESSAGE : void 0;
983
1085
  const statusDotColor = getStatusDotColor(event.eventType);
984
1086
  const createdAt = new Date(event.createdAt);
985
1087
  const occurredAt = parseEventDate(event.occurredAt);
@@ -1087,8 +1189,8 @@ function EventRow$1({ event, index, isFirst, isLast, isExpanded, onToggleExpand,
1087
1189
  }, children: jsxRuntimeExports.jsx(ChevronRight, { className: "h-3 w-3 transition-transform", style: {
1088
1190
  color: "var(--ds-gray-900)",
1089
1191
  transform: isExpanded ? "rotate(90deg)" : "rotate(0deg)"
1090
- } }) }), showSeparateEventOccurrenceTimestamps && jsxRuntimeExports.jsx("div", { className: "tabular-nums min-w-0 px-4", style: { color: "var(--ds-gray-900)", flex: "2 1 0%" }, children: occurredAt ? jsxRuntimeExports.jsx(TimestampTooltip, { date: occurredAt, children: jsxRuntimeExports.jsx("span", { children: formatEventTime(occurredAt) }) }) : "-" }), jsxRuntimeExports.jsx("div", { className: "tabular-nums min-w-0 px-4", style: { color: "var(--ds-gray-900)", flex: "2 1 0%" }, children: jsxRuntimeExports.jsx(TimestampTooltip, { date: displayedCreatedAt, children: jsxRuntimeExports.jsx("span", { children: formatEventTime(displayedCreatedAt) }) }) }), jsxRuntimeExports.jsx("div", { className: "font-medium min-w-0 px-4", style: { flex: "2 1 0%" }, children: jsxRuntimeExports.jsx(DuplicateEventTooltip, { isDuplicate, children: jsxRuntimeExports.jsxs("span", { className: "inline-flex items-center gap-1.5", style: {
1091
- color: isDuplicate ? "var(--ds-gray-700)" : "var(--ds-gray-900)"
1192
+ } }) }), showSeparateEventOccurrenceTimestamps && jsxRuntimeExports.jsx("div", { className: "tabular-nums min-w-0 px-4", style: { color: "var(--ds-gray-900)", flex: "2 1 0%" }, children: occurredAt ? jsxRuntimeExports.jsx(TimestampTooltip, { date: occurredAt, children: jsxRuntimeExports.jsx("span", { children: formatEventTime(occurredAt) }) }) : "-" }), jsxRuntimeExports.jsx("div", { className: "tabular-nums min-w-0 px-4", style: { color: "var(--ds-gray-900)", flex: "2 1 0%" }, children: jsxRuntimeExports.jsx(TimestampTooltip, { date: displayedCreatedAt, children: jsxRuntimeExports.jsx("span", { children: formatEventTime(displayedCreatedAt) }) }) }), jsxRuntimeExports.jsx("div", { className: "font-medium min-w-0 px-4", style: { flex: "2 1 0%" }, children: jsxRuntimeExports.jsx(EventNoticeTooltip, { notice: rowNotice, children: jsxRuntimeExports.jsxs("span", { className: "inline-flex items-center gap-1.5", style: {
1193
+ color: rowNotice ? "var(--ds-gray-700)" : "var(--ds-gray-900)"
1092
1194
  }, children: [jsxRuntimeExports.jsxs("span", { style: {
1093
1195
  position: "relative",
1094
1196
  display: "inline-flex",
@@ -1118,7 +1220,7 @@ function EventRow$1({ event, index, isFirst, isLast, isExpanded, onToggleExpand,
1118
1220
  color: "var(--ds-red-900)"
1119
1221
  }, children: loadError }) : isLoading || loadedEventData === null && !hasAttemptedLoad && event.correlationId ? jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-2 p-3", children: [jsxRuntimeExports.jsx(Skeleton, { className: "h-3", style: { width: "75%" } }), jsxRuntimeExports.jsx(Skeleton, { className: "h-3", style: { width: "50%" } }), jsxRuntimeExports.jsx(Skeleton, { className: "h-3", style: { width: "60%" } })] }) : jsxRuntimeExports.jsx("div", { className: "p-2 text-label-12", style: { color: "var(--ds-gray-900)" }, children: "No data" })] })] })] });
1120
1222
  }
1121
- function EventListViewInner({ events, run, onLoadEventData, hasMoreEvents = false, isLoadingMoreEvents = false, onLoadMoreEvents, encryptionKey, isLoading = false, sortOrder: sortOrderProp, onSortOrderChange, onDecrypt, isDecrypting = false, hasEncryptedData: hasEncryptedDataProp = false, onExactIdSearch, showSeparateEventOccurrenceTimestamps = false }) {
1223
+ function EventListViewInner({ events, run, onLoadEventData, hasMoreEvents = false, isLoadingMoreEvents = false, onLoadMoreEvents, encryptionKey, isLoading = false, sortOrder: sortOrderProp, onSortOrderChange, onDecrypt, isDecrypting = false, isDecryptDisabled = false, decryptDisabledReason, hasEncryptedData: hasEncryptedDataProp = false, onExactIdSearch, showSeparateEventOccurrenceTimestamps = false }) {
1122
1224
  const toast2 = useToast();
1123
1225
  const [internalSortOrder, setInternalSortOrder] = reactExports.useState("asc");
1124
1226
  const effectiveSortOrder = sortOrderProp ?? internalSortOrder;
@@ -1336,7 +1438,12 @@ function EventListViewInner({ events, run, onLoadEventData, hasMoreEvents = fals
1336
1438
  if (isInitialLoad) {
1337
1439
  return jsxRuntimeExports.jsxs("div", { className: "h-full flex flex-col overflow-hidden", children: [jsxRuntimeExports.jsx("div", { style: { padding: 6 }, children: jsxRuntimeExports.jsx(Skeleton, { style: { height: 40, borderRadius: 6 } }) }), jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-0 h-10 border-b flex-shrink-0", style: { borderColor: "var(--ds-gray-alpha-200)" }, children: [jsxRuntimeExports.jsx("div", { className: "flex-shrink-0", style: { width: GUTTER_WIDTH } }), jsxRuntimeExports.jsx("div", { className: "w-5 flex-shrink-0" }), jsxRuntimeExports.jsx("div", { className: "min-w-0 px-4", style: { flex: "2 1 0%" }, children: jsxRuntimeExports.jsx(Skeleton, { className: "h-3", style: { width: 40 } }) }), jsxRuntimeExports.jsx("div", { className: "min-w-0 px-4", style: { flex: "2 1 0%" }, children: jsxRuntimeExports.jsx(Skeleton, { className: "h-3", style: { width: 72 } }) }), jsxRuntimeExports.jsx("div", { className: "min-w-0 px-4", style: { flex: "2 1 0%" }, children: jsxRuntimeExports.jsx(Skeleton, { className: "h-3", style: { width: 44 } }) }), jsxRuntimeExports.jsx("div", { className: "min-w-0 px-4", style: { flex: "3 1 0%" }, children: jsxRuntimeExports.jsx(Skeleton, { className: "h-3", style: { width: 92 } }) }), jsxRuntimeExports.jsx("div", { className: "min-w-0 px-4", style: { flex: "3 1 0%" }, children: jsxRuntimeExports.jsx(Skeleton, { className: "h-3", style: { width: 60 } }) })] }), jsxRuntimeExports.jsx(RowsSkeleton, {})] });
1338
1440
  }
1339
- return jsxRuntimeExports.jsx(DecryptClickContext.Provider, { value: onDecrypt ? { onDecrypt, isDecrypting } : void 0, children: jsxRuntimeExports.jsxs("div", { className: "h-full flex flex-col overflow-hidden", children: [jsxRuntimeExports.jsx("style", { children: `@keyframes workflow-dot-pulse{0%{transform:scale(1);opacity:.7}70%,100%{transform:scale(2.2);opacity:0}}` }), jsxRuntimeExports.jsxs("div", { style: {
1441
+ return jsxRuntimeExports.jsx(DecryptClickContext.Provider, { value: onDecrypt ? {
1442
+ onDecrypt,
1443
+ isDecrypting,
1444
+ isDecryptDisabled,
1445
+ decryptDisabledReason
1446
+ } : void 0, children: jsxRuntimeExports.jsxs("div", { className: "h-full flex flex-col overflow-hidden", children: [jsxRuntimeExports.jsx("style", { children: `@keyframes workflow-dot-pulse{0%{transform:scale(1);opacity:.7}70%,100%{transform:scale(2.2);opacity:0}}` }), jsxRuntimeExports.jsxs("div", { style: {
1340
1447
  padding: 6,
1341
1448
  backgroundColor: "var(--ds-background-100)",
1342
1449
  display: "flex",
@@ -1371,7 +1478,7 @@ function EventListViewInner({ events, run, onLoadEventData, hasMoreEvents = fals
1371
1478
  width: "100%",
1372
1479
  opacity: onExactIdSearch ? 1 : 0.5,
1373
1480
  cursor: onExactIdSearch ? "text" : "not-allowed"
1374
- } })] }), jsxRuntimeExports.jsx(MenuDropdown, { options: SORT_OPTIONS, value: effectiveSortOrder, onChange: handleSortOrderChange }), (hasEncryptedData || encryptionKey) && onDecrypt && jsxRuntimeExports.jsx(DecryptButton, { decrypted: !!encryptionKey, loading: isDecrypting, onClick: onDecrypt })] }), jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-0 text-label-13 font-medium h-10 border-b flex-shrink-0", style: {
1481
+ } })] }), jsxRuntimeExports.jsx(MenuDropdown, { options: SORT_OPTIONS, value: effectiveSortOrder, onChange: handleSortOrderChange }), (hasEncryptedData || encryptionKey) && onDecrypt && jsxRuntimeExports.jsx(DecryptButton, { decrypted: !!encryptionKey, loading: isDecrypting, disabled: isDecryptDisabled, disabledReason: decryptDisabledReason, onClick: onDecrypt })] }), jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-0 text-label-13 font-medium h-10 border-b flex-shrink-0", style: {
1375
1482
  borderColor: "var(--ds-gray-alpha-200)",
1376
1483
  color: "var(--ds-gray-900)",
1377
1484
  backgroundColor: "var(--ds-background-100)"
@@ -1663,7 +1770,7 @@ function stepToSpan(stepEvents, maxEndTime) {
1663
1770
  if (!step) {
1664
1771
  return null;
1665
1772
  }
1666
- const parsedName = parseStepName(String(step.stepName));
1773
+ const parsedName = parseStepName(String(step.stepName)) ?? parseWorkflowName(String(step.stepName));
1667
1774
  const attributes = {
1668
1775
  resource: "step",
1669
1776
  data: step
@@ -1876,7 +1983,7 @@ function buildTrace(run, events, now, { isCompleteHistory = false } = {}) {
1876
1983
  const duplicateEventIds = findDuplicateEventIds(events, {
1877
1984
  isCompleteHistory
1878
1985
  });
1879
- const actedOnEvents = duplicateEventIds.size === 0 ? events : events.filter((event) => !duplicateEventIds.has(event.eventId));
1986
+ const actedOnEvents = events.filter((event) => !duplicateEventIds.has(event.eventId) && !isSealedNoopEvent(event));
1880
1987
  const groupedEvents = groupEventsByCorrelation(actedOnEvents);
1881
1988
  const latestKnownTime = computeLatestKnownTime(actedOnEvents, run);
1882
1989
  const { runSpan, spans } = buildSpans(run, groupedEvents, now, latestKnownTime);
@@ -2226,7 +2333,7 @@ const attributeToDisplayFn = {
2226
2333
  receivedCount: (value) => String(value),
2227
2334
  lastReceivedAt: localMillisecondTimeOrNull,
2228
2335
  disposedAt: localMillisecondTimeOrNull,
2229
- // Internal resume plumbing not surfaced in the UI
2336
+ // Internal resume plumbing, not surfaced in the UI
2230
2337
  resumeContext: (_value) => null,
2231
2338
  resumeId: (_value) => null,
2232
2339
  resumeCapabilities: (_value) => null,
@@ -2244,7 +2351,7 @@ const attributeToDisplayFn = {
2244
2351
  projectId: (_value) => null,
2245
2352
  environment: (_value) => null,
2246
2353
  executionContext: (_value) => null,
2247
- // Attributes string-string metadata attached to the run.
2354
+ // Attributes: string-string metadata attached to the run.
2248
2355
  // Rendered as key-value rows in its own collapsible section;
2249
2356
  // if empty/missing, hidden by the hasDisplayContent gate.
2250
2357
  attributes: (value) => {
@@ -2252,7 +2359,7 @@ const attributeToDisplayFn = {
2252
2359
  return null;
2253
2360
  return jsxRuntimeExports.jsx(RunAttributesCard, { attributes: value });
2254
2361
  },
2255
- // Dates wrapped with TimestampTooltip showing UTC/local + relative time
2362
+ // Dates: wrapped with TimestampTooltip showing UTC/local + relative time
2256
2363
  occurredAt: timestampWithTooltipOrNull,
2257
2364
  createdAt: timestampWithTooltipOrNull,
2258
2365
  startedAt: timestampWithTooltipOrNull,
@@ -2340,7 +2447,7 @@ const attributeToDisplayFn = {
2340
2447
  },
2341
2448
  // Internal encryption plumbing: the run's X25519 public key, used by
2342
2449
  // cross-run writers to seal payloads to this run. Not actionable for users
2343
- // and not secret hidden rather than rendered as 44 opaque base64 chars.
2450
+ // and not secret, so hidden rather than rendered as 44 opaque base64 chars.
2344
2451
  encryptionPublicKey: (_value) => null
2345
2452
  };
2346
2453
  const resolvableAttributes = [
@@ -2412,7 +2519,7 @@ const AttributeBlock = ({ attribute, value, isLoading, inline = false, context }
2412
2519
  }
2413
2520
  return jsxRuntimeExports.jsxs("div", { className: "relative", children: [typeof isLoading === "boolean" && isLoading && jsxRuntimeExports.jsx("div", { className: "absolute top-9 right-4", children: jsxRuntimeExports.jsx("div", { className: "animate-spin rounded-full h-4 w-4 border-b-2", style: { borderColor: "var(--ds-gray-900)" } }) }), jsxRuntimeExports.jsxs("div", { className: "my-2 flex flex-col gap-0", children: [jsxRuntimeExports.jsx("span", { className: "text-label-14 text-gray-1000 font-medium first-letter:uppercase", children: attribute }), jsxRuntimeExports.jsx("span", { className: "text-label-12", style: { color: "var(--ds-gray-1000)" }, children: displayValue })] }, attribute)] });
2414
2521
  };
2415
- const AttributePanel = ({ data, moduleSpecifier, moduleSourceUrl, isLoading, error, expiredAt, onStreamClick, onRunClick, onDecrypt, isDecrypting = false, resource }) => {
2522
+ const AttributePanel = ({ data, moduleSpecifier, moduleSourceUrl, isLoading, error, expiredAt, onStreamClick, onRunClick, onDecrypt, isDecrypting = false, isDecryptDisabled = false, decryptDisabledReason, resource }) => {
2416
2523
  const displayData = reactExports.useMemo(() => {
2417
2524
  const result = { ...data };
2418
2525
  const execCtx = data.executionContext;
@@ -2478,6 +2585,8 @@ const AttributePanel = ({ data, moduleSpecifier, moduleSourceUrl, isLoading, err
2478
2585
  const decryptValue = onDecrypt ? {
2479
2586
  onDecrypt,
2480
2587
  isDecrypting,
2588
+ isDecryptDisabled,
2589
+ decryptDisabledReason,
2481
2590
  hasEncryptedData: outerDecryptCtx == null ? void 0 : outerDecryptCtx.hasEncryptedData
2482
2591
  } : outerDecryptCtx;
2483
2592
  return jsxRuntimeExports.jsx(ContextCardProvider, { children: jsxRuntimeExports.jsx(RunClickContext.Provider, { value: onRunClick, children: jsxRuntimeExports.jsx(StreamClickContext.Provider, { value: onStreamClick, children: jsxRuntimeExports.jsxs(DecryptClickContext.Provider, { value: decryptValue, children: [visibleBasicAttributes.length > 0 && jsxRuntimeExports.jsxs(CollapsibleRoot, { defaultOpen: true, children: [jsxRuntimeExports.jsx(CollapsibleTrigger, { children: "Metadata" }), jsxRuntimeExports.jsx(CollapsibleContent, { className: "mt-0 mb-2", children: jsxRuntimeExports.jsxs("div", { className: "flex flex-col", children: [orderedBasicAttributes.map((attribute) => {
@@ -2544,6 +2653,7 @@ function EventItem({ event, onLoadEventData, encryptionKey, showSeparateEventOcc
2544
2653
  setLoadedData(null);
2545
2654
  void loadEventData(true);
2546
2655
  }, [encryptionKey, loadEventData]);
2656
+ const rowNotice = isDuplicate ? DUPLICATE_EVENT_MESSAGE : isSealedNoopEvent(event) ? SEALED_EVENT_MESSAGE : void 0;
2547
2657
  const createdAt = new Date(event.createdAt);
2548
2658
  const occurredAt = parseDateValue(event.occurredAt);
2549
2659
  const displayedCreatedAt = showSeparateEventOccurrenceTimestamps ? createdAt : getEffectiveEventDate(event);
@@ -2556,7 +2666,7 @@ function EventItem({ event, onLoadEventData, encryptionKey, showSeparateEventOcc
2556
2666
  return jsxRuntimeExports.jsxs(CollapsibleRoot, { variant: "card", onOpenChange: canHaveData ? (open) => {
2557
2667
  if (open)
2558
2668
  handleExpand();
2559
- } : void 0, children: [jsxRuntimeExports.jsx(CollapsibleTrigger, { className: "px-3 py-2", children: jsxRuntimeExports.jsxs("div", { className: "flex w-full items-center justify-between gap-3", children: [jsxRuntimeExports.jsx(DuplicateEventTooltip, { isDuplicate, children: jsxRuntimeExports.jsx("span", { className: `text-label-12 font-mono ${isDuplicate ? "text-gray-700" : "text-gray-1000"}`, children: event.eventType }) }), jsxRuntimeExports.jsx("span", { className: "shrink-0 text-label-13 text-gray-900", children: displayedCreatedAtTime })] }) }), jsxRuntimeExports.jsxs(CollapsibleContent, { children: [jsxRuntimeExports.jsxs("div", { className: "flex flex-col bg-background-200 [&:has(+_*)]:border-b [&:has(+_*)]:border-gray-alpha-400", children: [showSeparateEventOccurrenceTimestamps && occurredAt && jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between gap-2 py-2 px-3", children: [jsxRuntimeExports.jsx("span", { className: "text-label-12 text-gray-900", children: "Occurred" }), jsxRuntimeExports.jsx(TimestampTooltip, { date: occurredAt, children: jsxRuntimeExports.jsx("span", { className: "max-w-[70%] truncate text-right text-label-12 font-mono", children: formatEventTimestamp(occurredAt) }) })] }), jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between gap-2 py-2 px-3", children: [jsxRuntimeExports.jsx("span", { className: "text-label-12 text-gray-900", children: "Event ID" }), jsxRuntimeExports.jsx("span", { className: "max-w-[70%] truncate text-right text-label-12 font-mono", children: event.eventId })] }), event.correlationId && jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between gap-2 py-2 px-3", children: [jsxRuntimeExports.jsx("span", { className: "text-label-12 text-gray-900", children: "Correlation ID" }), jsxRuntimeExports.jsx("span", { className: "max-w-[70%] truncate text-right text-label-12 font-mono", children: event.correlationId })] })] }), isLoading && jsxRuntimeExports.jsxs("div", { className: "p-3", children: [jsxRuntimeExports.jsx(Skeleton, { className: "h-4 w-[35%]" }), jsxRuntimeExports.jsx(Skeleton, { className: "mt-2 h-4 w-[90%]" }), jsxRuntimeExports.jsx(Skeleton, { className: "mt-2 h-4 w-[75%]" })] }), loadError && jsxRuntimeExports.jsx(ErrorCard, { title: "Failed to load event data", details: loadError, className: "mt-2" }), displayPayload != null && jsxRuntimeExports.jsx("div", { className: "[&>div]:border-none [&>div]:rounded-none", children: jsxRuntimeExports.jsx(EventDataBlock, { eventType: event.eventType, data: displayPayload }) })] })] });
2669
+ } : void 0, children: [jsxRuntimeExports.jsx(CollapsibleTrigger, { className: "px-3 py-2", children: jsxRuntimeExports.jsxs("div", { className: "flex w-full items-center justify-between gap-3", children: [jsxRuntimeExports.jsx(EventNoticeTooltip, { notice: rowNotice, children: jsxRuntimeExports.jsx("span", { className: `text-label-12 font-mono ${rowNotice ? "text-gray-700" : "text-gray-1000"}`, children: event.eventType }) }), jsxRuntimeExports.jsx("span", { className: "shrink-0 text-label-13 text-gray-900", children: displayedCreatedAtTime })] }) }), jsxRuntimeExports.jsxs(CollapsibleContent, { children: [jsxRuntimeExports.jsxs("div", { className: "flex flex-col bg-background-200 [&:has(+_*)]:border-b [&:has(+_*)]:border-gray-alpha-400", children: [showSeparateEventOccurrenceTimestamps && occurredAt && jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between gap-2 py-2 px-3", children: [jsxRuntimeExports.jsx("span", { className: "text-label-12 text-gray-900", children: "Occurred" }), jsxRuntimeExports.jsx(TimestampTooltip, { date: occurredAt, children: jsxRuntimeExports.jsx("span", { className: "max-w-[70%] truncate text-right text-label-12 font-mono", children: formatEventTimestamp(occurredAt) }) })] }), jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between gap-2 py-2 px-3", children: [jsxRuntimeExports.jsx("span", { className: "text-label-12 text-gray-900", children: "Event ID" }), jsxRuntimeExports.jsx("span", { className: "max-w-[70%] truncate text-right text-label-12 font-mono", children: event.eventId })] }), event.correlationId && jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between gap-2 py-2 px-3", children: [jsxRuntimeExports.jsx("span", { className: "text-label-12 text-gray-900", children: "Correlation ID" }), jsxRuntimeExports.jsx("span", { className: "max-w-[70%] truncate text-right text-label-12 font-mono", children: event.correlationId })] })] }), isLoading && jsxRuntimeExports.jsxs("div", { className: "p-3", children: [jsxRuntimeExports.jsx(Skeleton, { className: "h-4 w-[35%]" }), jsxRuntimeExports.jsx(Skeleton, { className: "mt-2 h-4 w-[90%]" }), jsxRuntimeExports.jsx(Skeleton, { className: "mt-2 h-4 w-[75%]" })] }), loadError && jsxRuntimeExports.jsx(ErrorCard, { title: "Failed to load event data", details: loadError, className: "mt-2" }), displayPayload != null && jsxRuntimeExports.jsx("div", { className: "[&>div]:border-none [&>div]:rounded-none", children: jsxRuntimeExports.jsx(EventDataBlock, { eventType: event.eventType, data: displayPayload }) })] })] });
2560
2670
  }
2561
2671
  function hasOnlyExpiredFields(data, eventType) {
2562
2672
  if (data === null || typeof data !== "object" || Array.isArray(data)) {
@@ -2751,7 +2861,7 @@ function useSelectedSpanDetail(selectedSpan, fetchSpanDetail) {
2751
2861
  function isHook(data) {
2752
2862
  return data !== null && typeof data === "object" && "hookId" in data;
2753
2863
  }
2754
- function EntityDetailPanel({ run, onStreamClick, onRunClick, fetchSpanDetail, onWakeUpSleep, onLoadEventData, onResolveHook, encryptionKey, onDecrypt, isDecrypting = false, selectedSpan, showSeparateEventOccurrenceTimestamps = false, getModuleSourceUrl }) {
2864
+ function EntityDetailPanel({ run, onStreamClick, onRunClick, fetchSpanDetail, onWakeUpSleep, onLoadEventData, onResolveHook, encryptionKey, onDecrypt, isDecrypting = false, isDecryptDisabled = false, decryptDisabledReason, selectedSpan, showSeparateEventOccurrenceTimestamps = false, getModuleSourceUrl }) {
2755
2865
  const toast2 = useToast();
2756
2866
  const [stoppingSleep, setStoppingSleep] = reactExports.useState(false);
2757
2867
  const [showResolveHookModal, setShowResolveHookModal] = reactExports.useState(false);
@@ -2909,7 +3019,13 @@ function EntityDetailPanel({ run, onStreamClick, onRunClick, fetchSpanDetail, on
2909
3019
  return null;
2910
3020
  }
2911
3021
  const hasPendingActions = resource === "sleep" && canWakeUp || resource === "hook" && canResolveHook;
2912
- return jsxRuntimeExports.jsxs("div", { className: "flex h-full flex-col", children: [jsxRuntimeExports.jsx(DecryptClickContext.Provider, { value: onDecrypt ? { onDecrypt, isDecrypting, hasEncryptedData } : void 0, children: jsxRuntimeExports.jsxs("div", { className: "flex-1 overflow-y-auto px-4 pb-8", children: [hasPendingActions && jsxRuntimeExports.jsxs("div", { className: "mb-4 rounded-lg border p-2", style: {
3022
+ return jsxRuntimeExports.jsxs("div", { className: "flex h-full flex-col", children: [jsxRuntimeExports.jsx(DecryptClickContext.Provider, { value: onDecrypt ? {
3023
+ onDecrypt,
3024
+ isDecrypting,
3025
+ isDecryptDisabled,
3026
+ decryptDisabledReason,
3027
+ hasEncryptedData
3028
+ } : void 0, children: jsxRuntimeExports.jsxs("div", { className: "flex-1 overflow-y-auto px-4 pb-8", children: [hasPendingActions && jsxRuntimeExports.jsxs("div", { className: "mb-4 rounded-lg border p-2", style: {
2913
3029
  borderColor: "var(--ds-gray-300)",
2914
3030
  backgroundColor: "var(--ds-gray-100)"
2915
3031
  }, children: [jsxRuntimeExports.jsx("p", { className: "mb-2 px-1 text-label-13 font-medium uppercase tracking-wide", style: { color: "var(--ds-gray-700)" }, children: "Actions" }), jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-2", children: [resource === "sleep" && canWakeUp && jsxRuntimeExports.jsxs("button", { type: "button", onClick: handleWakeUp, disabled: stoppingSleep, className: clsx("flex items-center justify-center gap-2 rounded-md px-3 py-2 text-button-14", "disabled:opacity-50 disabled:cursor-not-allowed transition-colors", stoppingSleep ? "opacity-50 cursor-not-allowed" : "cursor-pointer"), style: {
@@ -2918,7 +3034,7 @@ function EntityDetailPanel({ run, onStreamClick, onRunClick, fetchSpanDetail, on
2918
3034
  }, 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-button-14", "disabled:opacity-50 disabled:cursor-not-allowed transition-colors", resolvingHook ? "opacity-50 cursor-not-allowed" : "cursor-pointer"), style: {
2919
3035
  background: "var(--ds-gray-1000)",
2920
3036
  color: "var(--ds-background-100)"
2921
- }, children: [jsxRuntimeExports.jsx(Send, { className: "h-4 w-4" }), "Resolve Hook"] })] })] }), jsxRuntimeExports.jsx(AttributePanel, { data: displayData, moduleSpecifier, moduleSourceUrl, expiredAt: run.expiredAt, isLoading: loading, error: error ?? void 0, onStreamClick, onRunClick, onDecrypt, isDecrypting, resource }), rawEvents && jsxRuntimeExports.jsx(EventsList, { events: rawEvents, onLoadEventData, onStreamClick, onRunClick, encryptionKey, showSeparateEventOccurrenceTimestamps, duplicateEventIds: selectedSpan == null ? void 0 : selectedSpan.duplicateEventIds })] }) }), jsxRuntimeExports.jsx(ResolveHookModal, { isOpen: showResolveHookModal, onClose: () => setShowResolveHookModal(false), onSubmit: handleResolveHook, isSubmitting: resolvingHook })] });
3037
+ }, children: [jsxRuntimeExports.jsx(Send, { className: "h-4 w-4" }), "Resolve Hook"] })] })] }), jsxRuntimeExports.jsx(AttributePanel, { data: displayData, moduleSpecifier, moduleSourceUrl, expiredAt: run.expiredAt, isLoading: loading, error: error ?? void 0, onStreamClick, onRunClick, onDecrypt, isDecrypting, isDecryptDisabled, decryptDisabledReason, resource }), rawEvents && jsxRuntimeExports.jsx(EventsList, { events: rawEvents, onLoadEventData, onStreamClick, onRunClick, encryptionKey, showSeparateEventOccurrenceTimestamps, duplicateEventIds: selectedSpan == null ? void 0 : selectedSpan.duplicateEventIds })] }) }), jsxRuntimeExports.jsx(ResolveHookModal, { isOpen: showResolveHookModal, onClose: () => setShowResolveHookModal(false), onSubmit: handleResolveHook, isSubmitting: resolvingHook })] });
2922
3038
  }
2923
3039
  const PANEL_MIN_WIDTH = 280;
2924
3040
  const PANEL_HARD_MAX_WIDTH = 1300;
@@ -3170,7 +3286,7 @@ function TraceDetailPanel({ containerRef, onNavigateToSpan, onClose }) {
3170
3286
  }, [selectedSpan == null ? void 0 : selectedSpan.data, selectedSpan == null ? void 0 : selectedSpan.resource]);
3171
3287
  if (!activeSpan)
3172
3288
  return null;
3173
- return jsxRuntimeExports.jsxs("aside", { ref: asideRef, id: DETAIL_PANEL_ID, className: "relative flex flex-col h-full max-h-full shrink-0 bg-background-100 border-l border-gray-alpha-400", style: { width: panelWidth }, children: [jsxRuntimeExports.jsx(DraggableBorder, { element: asideRef, position: "left", onWidthChange: handleResize, onReset: () => handleResize(PANEL_DEFAULT_WIDTH), "aria-label": "Resize span details panel", "aria-controls": DETAIL_PANEL_ID, "aria-valuemin": PANEL_MIN_WIDTH, "aria-valuemax": panelMaxWidth, "aria-valuenow": Math.min(Math.max(Math.round(panelWidth), PANEL_MIN_WIDTH), panelMaxWidth) }), jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between gap-2 shrink-0 px-4 py-[7.5px]", children: [jsxRuntimeExports.jsx("span", { className: "text-label-14 font-medium text-gray-1000 truncate block", children: selectedSpanName }), jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-0.5 shrink-0", children: [jsxRuntimeExports.jsxs(Tooltip, { children: [jsxRuntimeExports.jsx(TooltipTrigger, { asChild: true, children: jsxRuntimeExports.jsx(IconButton, { "aria-label": "Navigate up", "aria-keyshortcuts": "K", onClick: handleSelectPrev, disabled: !prevSpanId, children: jsxRuntimeExports.jsx(ChevronUp, { className: "w-4 h-4" }) }) }), prevSpanId ? jsxRuntimeExports.jsxs(TooltipContent, { children: ["Navigate up", jsxRuntimeExports.jsx(Kbd, { children: "K" })] }) : null] }), jsxRuntimeExports.jsxs(Tooltip, { children: [jsxRuntimeExports.jsx(TooltipTrigger, { asChild: true, children: jsxRuntimeExports.jsx(IconButton, { "aria-label": "Navigate down", "aria-keyshortcuts": "J", onClick: handleSelectNext, disabled: !nextSpanId, children: jsxRuntimeExports.jsx(ChevronDown, { className: "w-4 h-4" }) }) }), nextSpanId ? jsxRuntimeExports.jsxs(TooltipContent, { children: ["Navigate down", jsxRuntimeExports.jsx(Kbd, { children: "J" })] }) : null] }), jsxRuntimeExports.jsx("div", { "aria-hidden": true, className: "w-px h-4 bg-gray-alpha-400 mx-1" }), jsxRuntimeExports.jsx(IconButton, { "aria-label": "Close span details", "aria-keyshortcuts": "Escape", onClick: onClose, children: jsxRuntimeExports.jsx(X, { className: "w-4 h-4" }) })] })] }), jsxRuntimeExports.jsx("div", { className: "flex-1 overflow-y-auto", children: jsxRuntimeExports.jsx(ErrorBoundary, { children: jsxRuntimeExports.jsx(EntityDetailPanel, { run: sidebar.run, onStreamClick: sidebar.onStreamClick, onRunClick: sidebar.onRunClick, fetchSpanDetail: sidebar.fetchSpanDetail, onWakeUpSleep: sidebar.onWakeUpSleep, onLoadEventData: sidebar.onLoadEventData, onResolveHook: sidebar.onResolveHook, encryptionKey: sidebar.encryptionKey, onDecrypt: sidebar.onDecrypt, isDecrypting: sidebar.isDecrypting, selectedSpan, showSeparateEventOccurrenceTimestamps: sidebar.showSeparateEventOccurrenceTimestamps, getModuleSourceUrl: sidebar.getModuleSourceUrl }) }) })] });
3289
+ return jsxRuntimeExports.jsxs("aside", { ref: asideRef, id: DETAIL_PANEL_ID, className: "relative flex flex-col h-full max-h-full shrink-0 bg-background-100 border-l border-gray-alpha-400", style: { width: panelWidth }, children: [jsxRuntimeExports.jsx(DraggableBorder, { element: asideRef, position: "left", onWidthChange: handleResize, onReset: () => handleResize(PANEL_DEFAULT_WIDTH), "aria-label": "Resize span details panel", "aria-controls": DETAIL_PANEL_ID, "aria-valuemin": PANEL_MIN_WIDTH, "aria-valuemax": panelMaxWidth, "aria-valuenow": Math.min(Math.max(Math.round(panelWidth), PANEL_MIN_WIDTH), panelMaxWidth) }), jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between gap-2 shrink-0 px-4 py-[7.5px]", children: [jsxRuntimeExports.jsx("span", { className: "text-label-14 font-medium text-gray-1000 truncate block", children: selectedSpanName }), jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-0.5 shrink-0", children: [jsxRuntimeExports.jsxs(Tooltip, { children: [jsxRuntimeExports.jsx(TooltipTrigger, { asChild: true, children: jsxRuntimeExports.jsx(IconButton, { "aria-label": "Navigate up", "aria-keyshortcuts": "K", onClick: handleSelectPrev, disabled: !prevSpanId, children: jsxRuntimeExports.jsx(ChevronUp, { className: "w-4 h-4" }) }) }), prevSpanId ? jsxRuntimeExports.jsxs(TooltipContent, { children: ["Navigate up", jsxRuntimeExports.jsx(Kbd, { children: "K" })] }) : null] }), jsxRuntimeExports.jsxs(Tooltip, { children: [jsxRuntimeExports.jsx(TooltipTrigger, { asChild: true, children: jsxRuntimeExports.jsx(IconButton, { "aria-label": "Navigate down", "aria-keyshortcuts": "J", onClick: handleSelectNext, disabled: !nextSpanId, children: jsxRuntimeExports.jsx(ChevronDown, { className: "w-4 h-4" }) }) }), nextSpanId ? jsxRuntimeExports.jsxs(TooltipContent, { children: ["Navigate down", jsxRuntimeExports.jsx(Kbd, { children: "J" })] }) : null] }), jsxRuntimeExports.jsx("div", { "aria-hidden": true, className: "w-px h-4 bg-gray-alpha-400 mx-1" }), jsxRuntimeExports.jsx(IconButton, { "aria-label": "Close span details", "aria-keyshortcuts": "Escape", onClick: onClose, children: jsxRuntimeExports.jsx(X, { className: "w-4 h-4" }) })] })] }), jsxRuntimeExports.jsx("div", { className: "flex-1 overflow-y-auto", children: jsxRuntimeExports.jsx(ErrorBoundary, { children: jsxRuntimeExports.jsx(EntityDetailPanel, { run: sidebar.run, onStreamClick: sidebar.onStreamClick, onRunClick: sidebar.onRunClick, fetchSpanDetail: sidebar.fetchSpanDetail, onWakeUpSleep: sidebar.onWakeUpSleep, onLoadEventData: sidebar.onLoadEventData, onResolveHook: sidebar.onResolveHook, encryptionKey: sidebar.encryptionKey, onDecrypt: sidebar.onDecrypt, isDecrypting: sidebar.isDecrypting, isDecryptDisabled: sidebar.isDecryptDisabled, decryptDisabledReason: sidebar.decryptDisabledReason, selectedSpan, showSeparateEventOccurrenceTimestamps: sidebar.showSeparateEventOccurrenceTimestamps, getModuleSourceUrl: sidebar.getModuleSourceUrl }) }) })] });
3174
3290
  }
3175
3291
  const WorkflowIcon = () => {
3176
3292
  return jsxRuntimeExports.jsx("svg", { "aria-hidden": "true", "data-testid": "geist-icon", height: "16", strokeLinejoin: "round", viewBox: "0 0 16 16", width: "16", children: jsxRuntimeExports.jsx("path", { d: "M5.75 7L6.4209 7.33594L4.85254 10.4717C5.38789 10.771 5.75 11.3431 5.75 12V14C5.75 14.9665 4.96648 15.75 4 15.75H2C1.03352 15.75 0.25 14.9665 0.25 14V12C0.25 11.0335 1.03352 10.25 2 10.25H3.28711L5.0791 6.66504L5.75 7ZM14 10.25C14.9665 10.25 15.75 11.0335 15.75 12V14C15.75 14.9665 14.9665 15.75 14 15.75H12C11.1185 15.75 10.3909 15.098 10.2695 14.25H7V12.75H10.25V12C10.25 11.0335 11.0335 10.25 12 10.25H14ZM2 11.75C1.86192 11.75 1.75 11.8619 1.75 12V14C1.75 14.1381 1.86192 14.25 2 14.25H4C4.13808 14.25 4.25 14.1381 4.25 14V12C4.25 11.8619 4.13808 11.75 4 11.75H2ZM12 11.75C11.8619 11.75 11.75 11.8619 11.75 12V14C11.75 14.1381 11.8619 14.25 12 14.25H14C14.1381 14.25 14.25 14.1381 14.25 14V12C14.25 11.8619 14.1381 11.75 14 11.75H12ZM9 0.25C9.96649 0.25 10.75 1.03351 10.75 2V4C10.75 4.44642 10.5808 4.85197 10.3057 5.16113L12.2041 8.6416L10.8877 9.36035L8.91895 5.75H7C6.03351 5.75 5.25 4.96649 5.25 4V2C5.25 1.03351 6.03351 0.25 7 0.25H9ZM7 1.75C6.86193 1.75 6.75 1.86193 6.75 2V4C6.75 4.13807 6.86193 4.25 7 4.25H9C9.13807 4.25 9.25 4.13807 9.25 4V2C9.25 1.86193 9.13807 1.75 9 1.75H7Z", fill: "currentColor" }) });
@@ -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, J as ChevronDown, Z as cn, e as cn$1, O as cva, bg as composeRefs, L as useComposedRefs, bh as useFloating, bi as offset, bj as shift, bk as limitShift, bl as flip, bm as size, bn as arrow, bo as hide, bp as autoUpdate, m as ChevronRight, C as Check, bq as VERCEL_403_ERROR_MESSAGE, br as bulkCancelRuns$1, bs as reenqueueRun$1, bt as wakeUpRun$1, bu as resumeHook$1, bv as fetchHookToken$1, bw as cancelRun$1, bx as recreateRun$1, T as Tooltip, a as TooltipTrigger, l as Copy, b as TooltipContent, z as createContextScope$1, p as useComposedRefs$1, E as createSlot, ag as formatDuration, B as Button, t as toast, w as useId$1, P as Primitive$1, q as composeEventHandlers$1, G as useControllableState$1, o as useCallbackRef$2, U as Presence$1 } from "./mermaid-3ZIDBTTL-gEw-Ch1C.js";
4
+ import { c as createLucideIcon, J as ChevronDown, $ as cn, e as cn$1, O as cva, bh as composeRefs, L as useComposedRefs, bi as useFloating, bj as offset, bk as shift, bl as limitShift, bm as flip, bn as size, bo as arrow, bp as hide, bq as autoUpdate, m as ChevronRight, C as Check, br as VERCEL_403_ERROR_MESSAGE, bs as bulkCancelRuns$1, bt as reenqueueRun$1, bu as wakeUpRun$1, bv as resumeHook$1, bw as fetchHookToken$1, bx as cancelRun$1, by as recreateRun$1, T as Tooltip, a as TooltipTrigger, l as Copy, b as TooltipContent, z as createContextScope$1, p as useComposedRefs$1, E as createSlot, ah as formatDuration, B as Button, t as toast, w as useId$1, P as Primitive$1, q as composeEventHandlers$1, G as useControllableState$1, o as useCallbackRef$2, U as Presence$1 } from "./mermaid-3ZIDBTTL-CrfHaTou.js";
5
5
  import { r as reactExports, j as jsxRuntimeExports, o as reactDomExports, R as ReactExports, H as React, D as ReactDOM, f as requireReact, I as getDefaultExportFromCjs } from "./index-PFjW8YjQ.js";
6
6
  function parseName(tag, name) {
7
7
  if (typeof name !== "string") {
@@ -1,4 +1,4 @@
1
- import { r as registerZstdDecoder, _ as __vitePreload } from "./mermaid-3ZIDBTTL-gEw-Ch1C.js";
1
+ import { r as registerZstdDecoder, _ as __vitePreload } from "./mermaid-3ZIDBTTL-CrfHaTou.js";
2
2
  import "./index-PFjW8YjQ.js";
3
3
  let registered = false;
4
4
  let modulePromise;