@workflow/web 5.0.0-beta.3 → 5.0.0-beta.4

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 (20) hide show
  1. package/build/client/assets/{highlighted-body-B3W2YXNL-Be0uLJd8.js → highlighted-body-B3W2YXNL-B7T9pqeb.js} +1 -1
  2. package/build/client/assets/{home-Ce97yLJ7.js → home-BIQJMe_Q.js} +2 -2
  3. package/build/client/assets/{manifest-923d96a0.js → manifest-77894282.js} +1 -1
  4. package/build/client/assets/{mermaid-3ZIDBTTL-BSJR0c5A.js → mermaid-3ZIDBTTL-w46Kr90n.js} +148 -164
  5. package/build/client/assets/root-C0Tu5TVN.css +1 -0
  6. package/build/client/assets/{root-DdOfCnSG.js → root-sXuXrryl.js} +1 -1
  7. package/build/client/assets/{run-detail-JQ32aJru.js → run-detail-7Pj2mQLs.js} +411 -67
  8. package/build/client/assets/server-build-DqaxIrF0.css +1 -0
  9. package/build/client/assets/{workflow-graph-viewer-DYhMo9jl.js → workflow-graph-viewer-De9JQkZc.js} +1 -1
  10. package/build/server/assets/{app-Bh_7yjpl.js → app-CtOg8_v5.js} +1 -1
  11. package/build/server/assets/{highlighted-body-B3W2YXNL-Cdb-ypB4.js → highlighted-body-B3W2YXNL-uaucauLI.js} +2 -2
  12. package/build/server/assets/{index-CNvEtg5c.js → index-D02biwxV.js} +3 -3
  13. package/build/server/assets/{mermaid-3ZIDBTTL-CE8Volk5.js → mermaid-3ZIDBTTL-DrZ5V6uv.js} +2 -2
  14. package/build/server/assets/{server-build-DztRAoMd.js → server-build-DT0Hg0Yf.js} +666 -340
  15. package/build/server/assets/{token-DMEdoEUo.js → token-D7_Lld85.js} +2 -2
  16. package/build/server/assets/{token-util-DsMisyo3.js → token-util-CfY4anoc.js} +2 -2
  17. package/build/server/index.js +1 -1
  18. package/package.json +5 -5
  19. package/build/client/assets/root-DXDFWibD.css +0 -1
  20. package/build/client/assets/server-build-pZ5ucXET.css +0 -1
@@ -1,4 +1,4 @@
1
- import { R, K as Ks, Q as Qe } from "./mermaid-3ZIDBTTL-BSJR0c5A.js";
1
+ import { R, K as Ks, Q as Qe } from "./mermaid-3ZIDBTTL-w46Kr90n.js";
2
2
  import { r as reactExports, j as jsxRuntimeExports } from "./index-DQa-BExo.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, C as ReactDOM, j as jsxRuntimeExports, z as Link, f as reactDomExports, B as useSearchParams, A as useNavigate, D as useLocation, w as withComponentProps } from "./index-DQa-BExo.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 Check, X, q as useControllableState$1, P as Primitive$1, s as composeEventHandlers$1, t as Presence, v as useSize, w as createContextScope$1, x as cancelRun, y as reenqueueRun, z as parseWorkflowName, B as StatusBadge, Z as Zap, F as CircleX, G as RunActionsDropdownItems, H as unwrapServerActionResult, I as WorkflowGraphViewer, T as Tabs, J as TabsList, K as TabsTrigger, L as TabsContent, M as ErrorBoundary } from "./workflow-graph-viewer-DYhMo9jl.js";
3
- import { g as useLayoutEffect2, P as Primitive, c as createLucideIcon, h as useToast, d as cn, D as DEFAULT_PAGE_SIZE, i as fetchRuns, j as fetchHooks, k as getPaginationDisplay, T as Tooltip, a as TooltipTrigger, B as Button, b as TooltipContent, l as fetchEvents, m as useCallbackRef, n as useComposedRefs, A as Anchor, o as composeEventHandlers, p as useId, q as createPopperScope, s as DismissableLayer, v as createContextScope, w as createSlot, C as Content$1, x as useControllableState, y as Root2$1, V as VISUALLY_HIDDEN_STYLES, z as Arrow, E as useComposedRefs$1, u as useServerConfig, t as toast, L as LoaderCircle, F as fetchRun, G as cva, H as Presence$1, I as createContext2, J as fetchWorkflowsManifest } from "./mermaid-3ZIDBTTL-BSJR0c5A.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 Check, X, q as useControllableState$1, P as Primitive$1, s as composeEventHandlers$1, t as Presence, v as useSize, w as createContextScope$1, x as cancelRun, y as reenqueueRun, z as parseWorkflowName, B as StatusBadge, Z as Zap, F as CircleX, G as RunActionsDropdownItems, H as unwrapServerActionResult, I as WorkflowGraphViewer, T as Tabs, J as TabsList, K as TabsTrigger, L as TabsContent, M as ErrorBoundary } from "./workflow-graph-viewer-De9JQkZc.js";
3
+ import { g as useLayoutEffect2, P as Primitive, c as createLucideIcon, h as useToast, d as cn, D as DEFAULT_PAGE_SIZE, i as fetchRuns, j as fetchHooks, k as getPaginationDisplay, T as Tooltip, a as TooltipTrigger, B as Button, b as TooltipContent, l as fetchEvents, m as useCallbackRef, n as useComposedRefs, A as Anchor, o as composeEventHandlers, p as useId, q as createPopperScope, s as DismissableLayer, v as createContextScope, w as createSlot, C as Content$1, x as useControllableState, y as Root2$1, V as VISUALLY_HIDDEN_STYLES, z as Arrow, E as useComposedRefs$1, u as useServerConfig, t as toast, L as LoaderCircle, F as fetchRun, G as cva, H as Presence$1, I as createContext2, J as fetchWorkflowsManifest } from "./mermaid-3ZIDBTTL-w46Kr90n.js";
4
4
  var PORTAL_NAME$2 = "Portal";
5
5
  var Portal$2 = reactExports.forwardRef((props, forwardedRef) => {
6
6
  var _a;
@@ -1 +1 @@
1
- window.__reactRouterManifest={"entry":{"module":"/assets/entry.client-BWsSsWQm.js","imports":["/assets/index-DQa-BExo.js"],"css":[]},"routes":{"root":{"id":"root","path":"","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasDefaultExport":true,"hasErrorBoundary":true,"module":"/assets/root-DdOfCnSG.js","imports":["/assets/index-DQa-BExo.js","/assets/mermaid-3ZIDBTTL-BSJR0c5A.js"],"css":["/assets/root-DXDFWibD.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-Ce97yLJ7.js","imports":["/assets/index-DQa-BExo.js","/assets/workflow-graph-viewer-DYhMo9jl.js","/assets/mermaid-3ZIDBTTL-BSJR0c5A.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-JQ32aJru.js","imports":["/assets/index-DQa-BExo.js","/assets/workflow-graph-viewer-DYhMo9jl.js","/assets/mermaid-3ZIDBTTL-BSJR0c5A.js","/assets/encryption-80GMP4r0.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-923d96a0.js","version":"923d96a0"};
1
+ window.__reactRouterManifest={"entry":{"module":"/assets/entry.client-BWsSsWQm.js","imports":["/assets/index-DQa-BExo.js"],"css":[]},"routes":{"root":{"id":"root","path":"","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasDefaultExport":true,"hasErrorBoundary":true,"module":"/assets/root-sXuXrryl.js","imports":["/assets/index-DQa-BExo.js","/assets/mermaid-3ZIDBTTL-w46Kr90n.js"],"css":["/assets/root-C0Tu5TVN.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-BIQJMe_Q.js","imports":["/assets/index-DQa-BExo.js","/assets/workflow-graph-viewer-De9JQkZc.js","/assets/mermaid-3ZIDBTTL-w46Kr90n.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-7Pj2mQLs.js","imports":["/assets/index-DQa-BExo.js","/assets/workflow-graph-viewer-De9JQkZc.js","/assets/mermaid-3ZIDBTTL-w46Kr90n.js","/assets/encryption-80GMP4r0.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-77894282.js","version":"77894282"};
@@ -1,4 +1,4 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/highlighted-body-B3W2YXNL-Be0uLJd8.js","assets/index-DQa-BExo.js"])))=>i.map(i=>d[i]);
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/highlighted-body-B3W2YXNL-B7T9pqeb.js","assets/index-DQa-BExo.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);
@@ -6673,6 +6673,28 @@ const createLucideIcon = (iconName, iconNode) => {
6673
6673
  Component.displayName = toPascalCase(iconName);
6674
6674
  return Component;
6675
6675
  };
6676
+ /**
6677
+ * @license lucide-react v0.575.0 - ISC
6678
+ *
6679
+ * This source code is licensed under the ISC license.
6680
+ * See the LICENSE file in the root directory of this source tree.
6681
+ */
6682
+ const __iconNode$3 = [
6683
+ ["path", { d: "m12 19-7-7 7-7", key: "1l729n" }],
6684
+ ["path", { d: "M19 12H5", key: "x3x0zl" }]
6685
+ ];
6686
+ const ArrowLeft = createLucideIcon("arrow-left", __iconNode$3);
6687
+ /**
6688
+ * @license lucide-react v0.575.0 - ISC
6689
+ *
6690
+ * This source code is licensed under the ISC license.
6691
+ * See the LICENSE file in the root directory of this source tree.
6692
+ */
6693
+ const __iconNode$2 = [
6694
+ ["path", { d: "M5 12h14", key: "1ays0h" }],
6695
+ ["path", { d: "m12 5 7 7-7 7", key: "xquz4c" }]
6696
+ ];
6697
+ const ArrowRight = createLucideIcon("arrow-right", __iconNode$2);
6676
6698
  /**
6677
6699
  * @license lucide-react v0.575.0 - ISC
6678
6700
  *
@@ -6695,10 +6717,6 @@ const Lock = createLucideIcon("lock", __iconNode);
6695
6717
  function cn$4(...inputs) {
6696
6718
  return twMerge(clsx(inputs));
6697
6719
  }
6698
- const secondsFormatter = new Intl.NumberFormat(void 0, {
6699
- minimumFractionDigits: 2,
6700
- maximumFractionDigits: 2
6701
- });
6702
6720
  const MS_IN_SECOND = 1e3;
6703
6721
  const MS_IN_MINUTE = 60 * MS_IN_SECOND;
6704
6722
  const MS_IN_HOUR = 60 * MS_IN_MINUTE;
@@ -6707,23 +6725,28 @@ function formatDuration(ms, compact = false) {
6707
6725
  if (ms === 0) {
6708
6726
  return "0s";
6709
6727
  }
6710
- if (ms < MS_IN_MINUTE) {
6711
- return `${secondsFormatter.format(ms / MS_IN_SECOND)}s`;
6728
+ if (ms < MS_IN_SECOND) {
6729
+ const roundedMs2 = Math.round(ms);
6730
+ return roundedMs2 < MS_IN_SECOND ? `${roundedMs2}ms` : "1s";
6731
+ }
6732
+ const roundedMs = Math.round(ms / MS_IN_SECOND) * MS_IN_SECOND;
6733
+ if (roundedMs < MS_IN_MINUTE) {
6734
+ return `${Math.floor(roundedMs / MS_IN_SECOND)}s`;
6712
6735
  }
6713
6736
  if (compact) {
6714
- if (ms < MS_IN_HOUR) {
6715
- const m3 = Math.floor(ms / MS_IN_MINUTE);
6716
- const s2 = Math.floor(ms % MS_IN_MINUTE / MS_IN_SECOND);
6737
+ if (roundedMs < MS_IN_HOUR) {
6738
+ const m3 = Math.floor(roundedMs / MS_IN_MINUTE);
6739
+ const s2 = Math.floor(roundedMs % MS_IN_MINUTE / MS_IN_SECOND);
6717
6740
  return s2 > 0 ? `${m3}m ${s2}s` : `${m3}m`;
6718
6741
  }
6719
- const h2 = Math.floor(ms / MS_IN_HOUR);
6720
- const m2 = Math.floor(ms % MS_IN_HOUR / MS_IN_MINUTE);
6742
+ const h2 = Math.floor(roundedMs / MS_IN_HOUR);
6743
+ const m2 = Math.floor(roundedMs % MS_IN_HOUR / MS_IN_MINUTE);
6721
6744
  return m2 > 0 ? `${h2}h ${m2}m` : `${h2}h`;
6722
6745
  }
6723
- const days = Math.floor(ms / MS_IN_DAY);
6724
- const hours = Math.floor(ms % MS_IN_DAY / MS_IN_HOUR);
6725
- const minutes = Math.floor(ms % MS_IN_HOUR / MS_IN_MINUTE);
6726
- const seconds = ms % MS_IN_MINUTE / MS_IN_SECOND;
6746
+ const days = Math.floor(roundedMs / MS_IN_DAY);
6747
+ const hours = Math.floor(roundedMs % MS_IN_DAY / MS_IN_HOUR);
6748
+ const minutes = Math.floor(roundedMs % MS_IN_HOUR / MS_IN_MINUTE);
6749
+ const seconds = Math.floor(roundedMs % MS_IN_MINUTE / MS_IN_SECOND);
6727
6750
  const parts = [];
6728
6751
  if (days > 0) {
6729
6752
  parts.push(`${days}d`);
@@ -6734,7 +6757,7 @@ function formatDuration(ms, compact = false) {
6734
6757
  if (minutes > 0) {
6735
6758
  parts.push(`${minutes}m`);
6736
6759
  }
6737
- parts.push(`${secondsFormatter.format(seconds)}s`);
6760
+ parts.push(`${seconds}s`);
6738
6761
  return parts.join(" ");
6739
6762
  }
6740
6763
  function isDoStreamStep(stepName) {
@@ -42941,7 +42964,7 @@ var tn = f("block", "before:content-[counter(line)]", "before:inline-block", "be
42941
42964
  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 });
42942
42965
  var Se = reactExports.createContext({ code: "" }), de = () => reactExports.useContext(Se);
42943
42966
  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 }) });
42944
- var cn$1 = /\n+$/, dn = reactExports.lazy(() => __vitePreload(() => import("./highlighted-body-B3W2YXNL-Be0uLJd8.js"), true ? __vite__mapDeps([0,1]) : void 0).then((e) => ({ default: e.HighlightedCodeBlockBody }))), rt = ({ code: e, language: t, className: o, children: n, isIncomplete: s2 = false, ...r2 }) => {
42967
+ var cn$1 = /\n+$/, dn = reactExports.lazy(() => __vitePreload(() => import("./highlighted-body-B3W2YXNL-B7T9pqeb.js"), true ? __vite__mapDeps([0,1]) : void 0).then((e) => ({ default: e.HighlightedCodeBlockBody }))), rt = ({ code: e, language: t, className: o, children: n, isIncomplete: s2 = false, ...r2 }) => {
42945
42968
  let i = reactExports.useMemo(() => e.replace(cn$1, ""), [e]), c = reactExports.useMemo(() => ({ bg: "transparent", fg: "inherit", tokens: i.split(`
42946
42969
  `).map((a2) => [{ content: a2, color: "inherit", bgColor: "transparent", htmlStyle: {}, offset: 0 }]) }), [i]);
42947
42970
  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 }) })] }) });
@@ -44994,19 +45017,8 @@ function computeRootBounds(spans) {
44994
45017
  const duration2 = Math.max(maxEnd - minStart, 1);
44995
45018
  return { startTime: minStart, endTime: maxEnd, duration: duration2 };
44996
45019
  }
44997
- function buildTimeCompression(_spans, viewStart, viewEnd) {
44998
- const range = viewEnd - viewStart;
44999
- return {
45000
- isCompressed: false,
45001
- toVisual(time2) {
45002
- if (range <= 0)
45003
- return 0;
45004
- return Math.min(Math.max((time2 - viewStart) / range, 0), 1);
45005
- },
45006
- fromVisual(fraction) {
45007
- return viewStart + fraction * range;
45008
- }
45009
- };
45020
+ function getSpanDurationMs(span) {
45021
+ return Math.max(0, getHighResInMs(span.endTime) - getHighResInMs(span.startTime));
45010
45022
  }
45011
45023
  const NICE_INTERVALS = [
45012
45024
  1,
@@ -45061,37 +45073,18 @@ function computeTimeMarkers(viewDuration, offset2) {
45061
45073
  continue;
45062
45074
  markers2.push({
45063
45075
  position: Math.min(Math.max(position2, 0), 1),
45064
- label: formatDuration(Math.abs(t), true)
45076
+ label: formatDuration(Math.abs(t), true),
45077
+ value: t
45065
45078
  });
45066
45079
  if (markers2.length >= MAX_MARKERS)
45067
45080
  break;
45068
45081
  }
45069
45082
  return markers2;
45070
45083
  }
45071
- function computeCompressedTimeMarkers(compression, viewStart, viewEnd, rootStart) {
45072
- const viewDuration = viewEnd - viewStart;
45073
- if (viewDuration <= 0)
45084
+ function computeSpanGaps(spans, viewStart, viewEnd) {
45085
+ const range = viewEnd - viewStart;
45086
+ if (range <= 0)
45074
45087
  return [];
45075
- const maxTicks = 6;
45076
- const interval = pickInterval(viewDuration, maxTicks);
45077
- const offset2 = viewStart - rootStart;
45078
- const firstTick = Math.ceil(offset2 / interval) * interval;
45079
- const markers2 = [];
45080
- for (let t = firstTick; t <= offset2 + viewDuration; t += interval) {
45081
- const absTime = rootStart + t;
45082
- const position2 = compression.toVisual(absTime);
45083
- if (position2 < -0.01 || position2 > 1.01)
45084
- continue;
45085
- markers2.push({
45086
- position: Math.min(Math.max(position2, 0), 1),
45087
- label: formatDuration(Math.abs(t), true)
45088
- });
45089
- if (markers2.length >= MAX_MARKERS)
45090
- break;
45091
- }
45092
- return markers2;
45093
- }
45094
- function computeSpanGaps(spans, compression) {
45095
45088
  const gaps = [];
45096
45089
  for (let i = 0; i < spans.length - 1; i++) {
45097
45090
  const endTime = getHighResInMs(spans[i].endTime);
@@ -45099,8 +45092,8 @@ function computeSpanGaps(spans, compression) {
45099
45092
  const gapMs = startTime - endTime;
45100
45093
  if (gapMs <= 0)
45101
45094
  continue;
45102
- const leftFrac = compression.toVisual(endTime);
45103
- const rightFrac = compression.toVisual(startTime);
45095
+ const leftFrac = Math.min(Math.max((endTime - viewStart) / range, 0), 1);
45096
+ const rightFrac = Math.min(Math.max((startTime - viewStart) / range, 0), 1);
45104
45097
  if (rightFrac - leftFrac < 1e-3)
45105
45098
  continue;
45106
45099
  gaps.push({ gapMs, leftFrac, rightFrac, rowIndex: i });
@@ -45231,29 +45224,10 @@ function computeHookSegmentsFromSpan(startMs, duration2, events) {
45231
45224
  }
45232
45225
  return segments;
45233
45226
  }
45234
- function computeSleepSegmentsFromSpan(startMs, duration2, events) {
45235
- const segments = [];
45227
+ function computeSleepSegmentsFromSpan(_startMs, duration2, _events) {
45236
45228
  if (duration2 <= 0)
45237
- return segments;
45238
- const completedTime = events.filter((e) => e.name === "wait_completed").map((e) => getHighResInMs(e.timestamp)).sort((a2, b2) => a2 - b2)[0];
45239
- if (completedTime === void 0) {
45240
- segments.push({ startFraction: 0, endFraction: 1, status: "sleeping" });
45241
- return segments;
45242
- }
45243
- const completedFrac = timeToFraction(completedTime, startMs, duration2);
45244
- if (completedFrac > 1e-3) {
45245
- segments.push({
45246
- startFraction: 0,
45247
- endFraction: completedFrac,
45248
- status: "sleeping"
45249
- });
45250
- }
45251
- segments.push({
45252
- startFraction: completedFrac,
45253
- endFraction: 1,
45254
- status: "succeeded"
45255
- });
45256
- return segments;
45229
+ return [];
45230
+ return [{ startFraction: 0, endFraction: 1, status: "sleeping" }];
45257
45231
  }
45258
45232
  function computeRunSegmentsFromSpan(startMs, duration2, activeStartMs, events, attributes) {
45259
45233
  const segments = [];
@@ -45309,8 +45283,7 @@ function computeV1RunSegments(startMs, duration2, activeStartMs, runStatus) {
45309
45283
  }
45310
45284
  function computeSpanSegments(span) {
45311
45285
  const startMs = getHighResInMs(span.startTime);
45312
- const endMs = getHighResInMs(span.endTime);
45313
- const duration2 = endMs - startMs;
45286
+ const duration2 = getSpanDurationMs(span);
45314
45287
  const activeStartMs = span.activeStartTime ? getHighResInMs(span.activeStartTime) : void 0;
45315
45288
  switch (span.resource) {
45316
45289
  case "step":
@@ -45325,25 +45298,27 @@ function computeSpanSegments(span) {
45325
45298
  return [];
45326
45299
  }
45327
45300
  }
45328
- const QUEUED_BACKGROUND = "radial-gradient(circle, var(--ds-gray-400) 2px, transparent 2px) center / 20px 20px space no-repeat, var(--ds-gray-500)";
45329
- const HATCHED_BACKGROUND = "repeating-linear-gradient(-45deg, var(--ds-gray-400) 0px, var(--ds-gray-400) 3px, var(--ds-gray-500) 3px, var(--ds-gray-500) 6px)";
45330
45301
  const SEGMENT_CONFIG = {
45331
- queued: { style: { background: QUEUED_BACKGROUND } },
45302
+ queued: { className: "bg-gray-500" },
45332
45303
  retrying: {
45333
45304
  className: "box-border bg-gray-500"
45334
45305
  },
45335
- waiting: { style: { background: HATCHED_BACKGROUND } },
45306
+ waiting: { className: "bg-gray-500" },
45336
45307
  running: { className: "bg-blue-700" },
45337
45308
  failed: { className: "bg-red-700" },
45338
45309
  succeeded: { className: "bg-green-700" },
45339
- sleeping: { className: "bg-amber-700" },
45310
+ sleeping: { className: "bg-gray-500" },
45340
45311
  received: { className: "bg-blue-700" }
45341
45312
  };
45342
- const FIXED_BAR_WIDTH_PX = 4;
45313
+ const BAR_HEIGHT_PX = 24;
45314
+ const TINY_BAR_BOX_SIZE_PX = 24;
45315
+ const TINY_BAR_WIDTH_PX = 4;
45343
45316
  const SEGMENT_GAP_PX = 1;
45344
- const ROW_HEIGHT = 34;
45317
+ const ROW_HEIGHT = 40;
45345
45318
  const CONTAINER_PAD_Y = 8;
45346
45319
  const END_CAP_HEIGHT = 8;
45320
+ const TIMELINE_PADDING_PX = 16;
45321
+ const ORIGIN_MARKER_EPSILON = 1e-6;
45347
45322
  const DeltaIndicator = reactExports.memo(function DeltaIndicator2({ leftFrac, rightFrac, label, rowIndex }) {
45348
45323
  const centerY = CONTAINER_PAD_Y + (rowIndex + 1) * ROW_HEIGHT;
45349
45324
  return jsxRuntimeExports.jsxs("div", { className: "absolute pointer-events-none", style: {
@@ -45353,38 +45328,34 @@ const DeltaIndicator = reactExports.memo(function DeltaIndicator2({ leftFrac, ri
45353
45328
  height: END_CAP_HEIGHT
45354
45329
  }, children: [jsxRuntimeExports.jsx("div", { className: "absolute left-0 top-0 w-px h-full bg-amber-800" }), jsxRuntimeExports.jsx("div", { className: "absolute left-0 right-0 top-1/2 h-px bg-amber-800" }), jsxRuntimeExports.jsx("div", { className: "absolute right-0 top-0 w-px h-full bg-amber-800" }), jsxRuntimeExports.jsx("span", { className: "absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 text-label-12 leading-none whitespace-nowrap rounded-xs px-1 py-0.5 text-gray-100 bg-amber-800", children: label })] });
45355
45330
  });
45356
- const TimelineBar = reactExports.memo(function TimelineBar2({ span, compression, containerWidth, isSelected, onClick }) {
45331
+ const TimelineBar = reactExports.memo(function TimelineBar2({ span, viewStart, viewDuration, containerWidth, isSelected, onClick }) {
45357
45332
  var _a3;
45358
45333
  const startTime = getHighResInMs(span.startTime);
45359
45334
  const endTime = getHighResInMs(span.endTime);
45360
- const totalDurationMs = endTime - startTime;
45361
- const leftFrac = compression.toVisual(startTime);
45362
- const rightFrac = compression.toVisual(endTime);
45363
- const widthFrac = rightFrac - leftFrac;
45364
- const leftPct = leftFrac * 100;
45335
+ const totalDurationMs = getSpanDurationMs(span);
45336
+ const leftFracRaw = viewDuration > 0 ? (startTime - viewStart) / viewDuration : 0;
45337
+ const rightFracRaw = viewDuration > 0 ? (endTime - viewStart) / viewDuration : 0;
45338
+ const widthFrac = rightFracRaw - leftFracRaw;
45339
+ const leftPct = leftFracRaw * 100;
45365
45340
  const widthPct = widthFrac * 100;
45366
45341
  const pixelWidth = widthFrac * containerWidth;
45367
- const isCompressed = containerWidth > 0 && pixelWidth < FIXED_BAR_WIDTH_PX;
45342
+ const visibleLeftFrac = Math.max(0, Math.min(1, leftFracRaw));
45343
+ const visibleRightFrac = Math.max(0, Math.min(1, rightFracRaw));
45344
+ const visiblePixelWidth = Math.max(0, visibleRightFrac - visibleLeftFrac) * containerWidth;
45345
+ const isTinyBar = containerWidth > 0 && visiblePixelWidth < TINY_BAR_BOX_SIZE_PX;
45368
45346
  const [isRowHovered, setIsRowHovered] = reactExports.useState(false);
45369
45347
  const segments = reactExports.useMemo(() => computeSpanSegments(span), [span]);
45370
- const finalSegment = segments[segments.length - 1];
45371
45348
  const workflowStatus = (_a3 = span.attributes.data) == null ? void 0 : _a3.status;
45372
45349
  const isErrored = span.status.code === 2 || workflowStatus === "failed";
45373
45350
  const colors = getResourceColor(span.resource);
45374
45351
  const fallbackColor = isErrored ? colors.errorBar ?? "var(--ds-red-700)" : colors.bar;
45375
- const compressedSegmentStatus = isErrored ? "failed" : span.resource === "hook" ? "received" : finalSegment == null ? void 0 : finalSegment.status;
45376
- const compressedSegmentStyle = compressedSegmentStatus === "queued" ? { background: "var(--ds-gray-500)" } : compressedSegmentStatus ? SEGMENT_CONFIG[compressedSegmentStatus].style : void 0;
45377
- const compressedSegmentClassName = compressedSegmentStatus ? SEGMENT_CONFIG[compressedSegmentStatus].className : void 0;
45378
- const hasCompressedStatus = Boolean(compressedSegmentClassName || compressedSegmentStyle);
45379
45352
  const renderDurationLabel = (label) => jsxRuntimeExports.jsx("span", { className: "pointer-events-none absolute inset-0 flex items-center justify-start overflow-hidden px-1 text-[10px] font-mono font-medium leading-none whitespace-nowrap text-left text-white tabular-nums", style: { textShadow: "0 1px 1px rgba(0, 0, 0, 0.45)" }, children: label });
45380
45353
  const getMinDurationLabelWidthPx = (label) => Math.max(40, label.length * 6 + 12);
45381
45354
  const totalDurationLabel = formatDuration(totalDurationMs);
45382
45355
  const showBarDurationLabel = isRowHovered && pixelWidth >= getMinDurationLabelWidthPx(totalDurationLabel);
45383
- const barContent = isCompressed ? jsxRuntimeExports.jsx("div", { className: cn$4("relative h-4 rounded-[0.25rem] top-[3px]", compressedSegmentClassName), style: {
45384
- width: "100%",
45385
- background: hasCompressedStatus ? void 0 : fallbackColor,
45386
- ...compressedSegmentStyle
45387
- }, children: showBarDurationLabel ? renderDurationLabel(totalDurationLabel) : null }) : segments.length > 0 ? jsxRuntimeExports.jsx("div", { className: "relative w-full h-4 top-[3px]", children: segments.map((seg, i) => {
45356
+ const showBoundaryArrow = isTinyBar && (leftFracRaw < 0 || rightFracRaw > 1);
45357
+ const BoundaryArrow = leftFracRaw < 0.5 ? ArrowLeft : ArrowRight;
45358
+ const barContent = showBoundaryArrow ? jsxRuntimeExports.jsx("div", { className: "flex h-6 w-6 items-center justify-center rounded-[0.25rem]", children: jsxRuntimeExports.jsx(BoundaryArrow, { className: "size-3 text-gray-900" }) }) : isTinyBar ? jsxRuntimeExports.jsx("div", { className: "h-6 rounded-[0.25rem]", style: { background: fallbackColor } }) : segments.length > 0 ? jsxRuntimeExports.jsx("div", { className: "relative h-6 w-full", children: segments.map((seg, i) => {
45388
45359
  const segPixelWidth = (seg.endFraction - seg.startFraction) * pixelWidth;
45389
45360
  const segDurationLabel = formatDuration((seg.endFraction - seg.startFraction) * totalDurationMs);
45390
45361
  const showSegmentDurationLabel = isRowHovered && segPixelWidth >= getMinDurationLabelWidthPx(segDurationLabel);
@@ -45395,24 +45366,28 @@ const TimelineBar = reactExports.memo(function TimelineBar2({ span, compression,
45395
45366
  minWidth: 1,
45396
45367
  ...segStyle
45397
45368
  }, children: showSegmentDurationLabel ? renderDurationLabel(segDurationLabel) : null }, `${seg.status}-${i}`);
45398
- }) }) : jsxRuntimeExports.jsx("div", { className: "relative h-4 rounded-[0.25rem] top-[3px]", style: {
45369
+ }) }) : jsxRuntimeExports.jsx("div", { className: "relative h-6 rounded-[0.25rem]", style: {
45399
45370
  width: "100%",
45400
45371
  minWidth: 4,
45401
45372
  background: fallbackColor
45402
45373
  }, children: showBarDurationLabel ? renderDurationLabel(totalDurationLabel) : null });
45403
- return jsxRuntimeExports.jsx("div", { role: "treeitem", "aria-selected": isSelected, "aria-expanded": isSelected, "aria-level": 1, className: cn$4("h-[34px] relative flex items-center hover:bg-gray-100 aria-selected:bg-gray-100 rounded-sm aria-selected:hover:bg-gray-200"), onMouseEnter: () => setIsRowHovered(true), onMouseLeave: () => setIsRowHovered(false), onClick, children: jsxRuntimeExports.jsx("div", { className: "absolute top-1.5 h-[22px] rounded-sm", style: {
45404
- left: isCompressed ? `min(${leftPct}%, calc(100% - ${FIXED_BAR_WIDTH_PX}px))` : `${leftPct}%`,
45405
- width: isCompressed ? `${FIXED_BAR_WIDTH_PX}px` : `max(${widthPct}%, 4px)`
45406
- }, children: barContent }) });
45374
+ return jsxRuntimeExports.jsx("div", { role: "treeitem", "aria-selected": isSelected, "aria-expanded": isSelected, "aria-level": 1, className: cn$4("h-10 relative flex items-center hover:bg-gray-100 aria-selected:bg-gray-100 aria-selected:hover:bg-gray-200"), onMouseEnter: () => setIsRowHovered(true), onMouseLeave: () => setIsRowHovered(false), onClick, children: jsxRuntimeExports.jsx("div", { className: "absolute inset-y-0", style: {
45375
+ left: TIMELINE_PADDING_PX,
45376
+ right: TIMELINE_PADDING_PX
45377
+ }, children: jsxRuntimeExports.jsx("div", { className: "absolute top-1/2 -translate-y-1/2", style: {
45378
+ left: showBoundaryArrow ? `min(max(${leftPct}%, 0px), calc(100% - ${TINY_BAR_BOX_SIZE_PX}px))` : isTinyBar ? `min(${leftPct}%, calc(100% - ${TINY_BAR_WIDTH_PX}px))` : `${leftPct}%`,
45379
+ width: showBoundaryArrow ? `${TINY_BAR_BOX_SIZE_PX}px` : isTinyBar ? `${TINY_BAR_WIDTH_PX}px` : `max(${widthPct}%, 4px)`,
45380
+ height: BAR_HEIGHT_PX
45381
+ }, children: barContent }) }) });
45407
45382
  });
45408
- function TimelineHeader({ viewStart, viewDuration, rootStart, compression, isZoomed, onResetZoom, hoverInfo: hoverInfo2 }) {
45409
- const viewEnd = viewStart + viewDuration;
45410
- const markers2 = reactExports.useMemo(() => compression.isCompressed ? computeCompressedTimeMarkers(compression, viewStart, viewEnd, rootStart) : computeTimeMarkers(viewDuration, viewStart - rootStart), [compression, viewStart, viewEnd, viewDuration, rootStart]);
45411
- return jsxRuntimeExports.jsxs("div", { className: "relative bg-background-100 border-b border-gray-alpha-400 h-10 min-h-10 flex items-end px-2 pb-1", children: [jsxRuntimeExports.jsxs("div", { className: "relative h-full flex-1", children: [markers2.map((m2, i) => jsxRuntimeExports.jsx("span", { className: "absolute bottom-1 font-mono text-xs font-normal leading-4 text-gray-900 whitespace-nowrap", style: { left: `${m2.position * 100}%` }, children: m2.label }, i)), hoverInfo2 && jsxRuntimeExports.jsx("span", { className: "absolute top-1 pointer-events-none z-10 font-mono text-[11px] leading-4 text-gray-1000 whitespace-nowrap bg-background-100 border border-gray-alpha-400 rounded px-1 -translate-x-1/2", style: { left: `${hoverInfo2.fraction * 100}%` }, children: hoverInfo2.label })] }), isZoomed && jsxRuntimeExports.jsx("button", { type: "button", className: "absolute right-2 top-1/2 -translate-y-1/2 z-[5] flex items-center py-0.5 px-2 border border-gray-alpha-400 rounded-md bg-background-100 font-sans text-[11px] font-medium text-gray-900 cursor-pointer whitespace-nowrap transition-[color,border-color] duration-[120ms] ease-in-out hover:text-gray-1000 hover:border-gray-600", onClick: onResetZoom, children: "Reset zoom" })] });
45383
+ function TimelineHeader({ markers: markers2, hoverInfo: hoverInfo2 }) {
45384
+ return jsxRuntimeExports.jsx("div", { className: "relative bg-background-100 border-b border-gray-alpha-400 h-10 min-h-10 flex items-end px-4 pb-1", children: jsxRuntimeExports.jsxs("div", { className: "relative h-full flex-1", children: [markers2.map((m2) => jsxRuntimeExports.jsx("span", { className: "absolute bottom-1 font-mono text-xs font-normal leading-4 text-gray-900 whitespace-nowrap", style: { left: `${m2.position * 100}%` }, children: m2.label }, `${m2.position}-${m2.label}`)), hoverInfo2 && jsxRuntimeExports.jsx("span", { className: "absolute top-1 pointer-events-none z-10 font-mono text-[11px] leading-4 text-gray-1000 whitespace-nowrap bg-background-100 border border-gray-alpha-400 rounded px-1 -translate-x-1/2", style: { left: `${hoverInfo2.fraction * 100}%` }, children: hoverInfo2.label })] }) });
45412
45385
  }
45413
- function Timeline({ spans, compression, selectedId, onSelect, hoverFraction, altHeld = false }) {
45386
+ function Timeline({ spans, viewStart, viewEnd, markers: markers2, selectedId, onSelect, hoverFraction, altHeld = false }) {
45414
45387
  const containerRef = reactExports.useRef(null);
45415
45388
  const [containerWidth, setContainerWidth] = reactExports.useState(0);
45389
+ const viewDuration = viewEnd - viewStart;
45390
+ const timelineWidth = Math.max(0, containerWidth - TIMELINE_PADDING_PX * 2);
45416
45391
  reactExports.useEffect(() => {
45417
45392
  const el = containerRef.current;
45418
45393
  if (!el)
@@ -45423,8 +45398,17 @@ function Timeline({ spans, compression, selectedId, onSelect, hoverFraction, alt
45423
45398
  ro2.observe(el);
45424
45399
  return () => ro2.disconnect();
45425
45400
  }, []);
45426
- const gaps = reactExports.useMemo(() => computeSpanGaps(spans, compression), [spans, compression]);
45427
- return jsxRuntimeExports.jsxs("div", { ref: containerRef, className: "relative py-2", children: [hoverFraction != null && jsxRuntimeExports.jsx("div", { className: "absolute top-0 bottom-0 w-px bg-gray-alpha-400 pointer-events-none z-10", style: { left: `${hoverFraction * 100}%` } }), spans.map((span) => jsxRuntimeExports.jsx(TimelineBar, { span, compression, containerWidth, isSelected: selectedId === span.spanId, onClick: () => onSelect(span.spanId) }, span.spanId)), altHeld && jsxRuntimeExports.jsx("div", { "aria-hidden": true, className: "absolute inset-0 pointer-events-none", children: gaps.map((gap) => jsxRuntimeExports.jsx(DeltaIndicator, { leftFrac: gap.leftFrac, rightFrac: gap.rightFrac, label: formatDuration(gap.gapMs, true), rowIndex: gap.rowIndex }, gap.rowIndex)) })] });
45401
+ const gaps = reactExports.useMemo(() => computeSpanGaps(spans, viewStart, viewEnd), [spans, viewStart, viewEnd]);
45402
+ return jsxRuntimeExports.jsxs("div", { ref: containerRef, className: "relative h-full overflow-hidden", children: [jsxRuntimeExports.jsx("div", { "aria-hidden": true, className: "absolute inset-y-0 pointer-events-none", style: {
45403
+ left: TIMELINE_PADDING_PX,
45404
+ right: TIMELINE_PADDING_PX
45405
+ }, children: markers2.map((marker2) => Math.abs(marker2.value) > ORIGIN_MARKER_EPSILON ? jsxRuntimeExports.jsx("div", { className: "absolute top-0 bottom-0 w-px bg-gray-alpha-300", style: { left: `${marker2.position * 100}%` } }, `${marker2.position}-${marker2.label}`) : null) }), hoverFraction != null && jsxRuntimeExports.jsx("div", { className: "absolute inset-y-0 pointer-events-none z-10", style: {
45406
+ left: TIMELINE_PADDING_PX,
45407
+ right: TIMELINE_PADDING_PX
45408
+ }, children: jsxRuntimeExports.jsx("div", { className: "absolute top-0 bottom-0 w-px bg-gray-alpha-400", style: { left: `${hoverFraction * 100}%` } }) }), spans.map((span) => jsxRuntimeExports.jsx(TimelineBar, { span, viewStart, viewDuration, containerWidth: timelineWidth, isSelected: selectedId === span.spanId, onClick: () => onSelect(span.spanId) }, span.spanId)), altHeld && jsxRuntimeExports.jsx("div", { "aria-hidden": true, className: "absolute inset-y-0 pointer-events-none", style: {
45409
+ left: TIMELINE_PADDING_PX,
45410
+ right: TIMELINE_PADDING_PX
45411
+ }, children: gaps.map((gap) => jsxRuntimeExports.jsx(DeltaIndicator, { leftFrac: gap.leftFrac, rightFrac: gap.rightFrac, label: formatDuration(gap.gapMs, true), rowIndex: gap.rowIndex }, gap.rowIndex)) })] });
45428
45412
  }
45429
45413
  const ActiveSpanContext = reactExports.createContext(null);
45430
45414
  ActiveSpanContext.displayName = "ActiveSpanContext";
@@ -45433,16 +45417,14 @@ function ActiveSpanProvider({ spans, children: children2 }) {
45433
45417
  const [activeSpanId, setActiveSpanId] = reactExports.useState(((_a3 = spans[0]) == null ? void 0 : _a3.spanId) ?? null);
45434
45418
  reactExports.useEffect(() => {
45435
45419
  setActiveSpanId((currentSpanId) => {
45436
- if (spans.length === 0) {
45420
+ if (!currentSpanId) {
45437
45421
  return null;
45438
45422
  }
45439
- if (currentSpanId) {
45440
- const hasCurrentSpan = spans.some((span) => span.spanId === currentSpanId);
45441
- if (hasCurrentSpan) {
45442
- return currentSpanId;
45443
- }
45423
+ const hasCurrentSpan = spans.some((span) => span.spanId === currentSpanId);
45424
+ if (hasCurrentSpan) {
45425
+ return currentSpanId;
45444
45426
  }
45445
- return spans[0].spanId;
45427
+ return null;
45446
45428
  });
45447
45429
  }, [spans]);
45448
45430
  const activeSpan = reactExports.useMemo(() => {
@@ -48049,46 +48031,48 @@ export {
48049
48031
  EVENT_DATA_REF_FIELDS as a4,
48050
48032
  clsx as a5,
48051
48033
  cn$4 as a6,
48052
- getHighResInMs as a7,
48053
- ActiveSpanProvider as a8,
48054
- useActiveSpan as a9,
48055
- limitShift as aA,
48056
- flip as aB,
48057
- size as aC,
48058
- arrow as aD,
48059
- hide as aE,
48060
- autoUpdate as aF,
48061
- cancelRun as aG,
48062
- reenqueueRun as aH,
48063
- wakeUpRun as aI,
48064
- resumeHook as aJ,
48065
- recreateRun as aK,
48066
- useSidebarDataOptional as aa,
48067
- computeRootBounds as ab,
48068
- buildTimeCompression as ac,
48069
- Timeline as ad,
48070
- TimelineHeader as ae,
48071
- SidebarDataProvider as af,
48072
- hydrateResourceIOWithKey as ag,
48073
- hydrateResourceIO as ah,
48074
- fetchHook as ai,
48075
- fetchStep as aj,
48076
- hasEncryptedFields as ak,
48077
- fetchStreams as al,
48078
- Slot as am,
48079
- Slottable as an,
48080
- buttonVariants as ao,
48081
- isEncryptedData as ap,
48082
- hydrateData as aq,
48083
- getWebRevivers as ar,
48084
- LIVE_UPDATE_INTERVAL_MS as as,
48085
- fetchEvent as at,
48086
- getEncryptionKeyForRun as au,
48087
- StreamViewer as av,
48088
- composeRefs as aw,
48089
- useFloating as ax,
48090
- offset as ay,
48091
- shift as az,
48034
+ getSpanDurationMs as a7,
48035
+ getHighResInMs as a8,
48036
+ ActiveSpanProvider as a9,
48037
+ offset as aA,
48038
+ shift as aB,
48039
+ limitShift as aC,
48040
+ flip as aD,
48041
+ size as aE,
48042
+ arrow as aF,
48043
+ hide as aG,
48044
+ autoUpdate as aH,
48045
+ cancelRun as aI,
48046
+ reenqueueRun as aJ,
48047
+ wakeUpRun as aK,
48048
+ resumeHook as aL,
48049
+ recreateRun as aM,
48050
+ useActiveSpan as aa,
48051
+ useSidebarDataOptional as ab,
48052
+ computeRootBounds as ac,
48053
+ computeTimeMarkers as ad,
48054
+ TIMELINE_PADDING_PX as ae,
48055
+ Timeline as af,
48056
+ TimelineHeader as ag,
48057
+ SidebarDataProvider as ah,
48058
+ hydrateResourceIOWithKey as ai,
48059
+ hydrateResourceIO as aj,
48060
+ fetchHook as ak,
48061
+ fetchStep as al,
48062
+ hasEncryptedFields as am,
48063
+ fetchStreams as an,
48064
+ Slot as ao,
48065
+ Slottable as ap,
48066
+ buttonVariants as aq,
48067
+ isEncryptedData as ar,
48068
+ hydrateData as as,
48069
+ getWebRevivers as at,
48070
+ LIVE_UPDATE_INTERVAL_MS as au,
48071
+ fetchEvent as av,
48072
+ getEncryptionKeyForRun as aw,
48073
+ StreamViewer as ax,
48074
+ composeRefs as ay,
48075
+ useFloating as az,
48092
48076
  TooltipContent as b,
48093
48077
  createLucideIcon as c,
48094
48078
  cn as d,