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

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-BQ1pmB9V.js → highlighted-body-B3W2YXNL-QKf7Yrcl.js} +1 -1
  2. package/build/client/assets/{home-DmsdVk2U.js → home-C2tAadK2.js} +2 -2
  3. package/build/client/assets/{manifest-67209c1f.js → manifest-96e6bcc7.js} +1 -1
  4. package/build/client/assets/{mermaid-3ZIDBTTL-BMWEihLr.js → mermaid-3ZIDBTTL-DQJ4rkIZ.js} +933 -276
  5. package/build/client/assets/root-D1iC2mNY.css +1 -0
  6. package/build/client/assets/{root-BABNjrUh.js → root-QCHdCGTF.js} +1 -1
  7. package/build/client/assets/{run-detail-9xQOGhVk.js → run-detail-D4mcR51B.js} +201 -222
  8. package/build/client/assets/server-build-6KQbeuD8.css +1 -0
  9. package/build/client/assets/{workflow-graph-viewer-fgQ2XQ5R.js → workflow-graph-viewer-BEhdopGj.js} +4918 -4917
  10. package/build/server/assets/{app-DM9e_6xn.js → app-BEmI6bFe.js} +1 -1
  11. package/build/server/assets/{highlighted-body-B3W2YXNL-tYGHwGrY.js → highlighted-body-B3W2YXNL-B_a6Jc52.js} +2 -2
  12. package/build/server/assets/{index-8Fb8OEQ2.js → index-Bg5S_1qh.js} +3 -3
  13. package/build/server/assets/{mermaid-3ZIDBTTL-EN1JYLRP.js → mermaid-3ZIDBTTL-C7y9g953.js} +2 -2
  14. package/build/server/assets/{server-build-CZXlov2m.js → server-build-B3KD951q.js} +76683 -75841
  15. package/build/server/assets/{token-CDoC3gHn.js → token-B95VJmzW.js} +2 -2
  16. package/build/server/assets/{token-util-C02bLOPS.js → token-util-q0eyRDZK.js} +2 -2
  17. package/build/server/index.js +1 -1
  18. package/package.json +7 -7
  19. package/build/client/assets/root-Bqr5evzw.css +0 -1
  20. package/build/client/assets/server-build-Ik-p0gUh.css +0 -1
@@ -1,4 +1,4 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/encryption-g14N5vQl.js","assets/index-B6-SzLmT.js","assets/index-BXZSIDEp.js","assets/highlighted-body-B3W2YXNL-BQ1pmB9V.js"])))=>i.map(i=>d[i]);
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/encryption-g14N5vQl.js","assets/index-B6-SzLmT.js","assets/index-BXZSIDEp.js","assets/highlighted-body-B3W2YXNL-QKf7Yrcl.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);
@@ -2376,7 +2376,7 @@ var Arrow$2 = reactExports.forwardRef((props, forwardedRef) => {
2376
2376
  );
2377
2377
  });
2378
2378
  Arrow$2.displayName = NAME$1;
2379
- var Root$1 = Arrow$2;
2379
+ var Root$2 = Arrow$2;
2380
2380
  function useSize(element2) {
2381
2381
  const [size2, setSize] = reactExports.useState(void 0);
2382
2382
  useLayoutEffect2(() => {
@@ -2623,7 +2623,7 @@ var PopperArrow = reactExports.forwardRef(function PopperArrow2(props, forwarded
2623
2623
  visibility: contentContext.shouldHideArrow ? "hidden" : void 0
2624
2624
  },
2625
2625
  children: /* @__PURE__ */ jsxRuntimeExports.jsx(
2626
- Root$1,
2626
+ Root$2,
2627
2627
  {
2628
2628
  ...arrowProps,
2629
2629
  ref: forwardedRef,
@@ -2908,7 +2908,7 @@ var VisuallyHidden = reactExports.forwardRef(
2908
2908
  }
2909
2909
  );
2910
2910
  VisuallyHidden.displayName = NAME;
2911
- var Root = VisuallyHidden;
2911
+ var Root$1 = VisuallyHidden;
2912
2912
  var [createTooltipContext] = createContextScope("Tooltip", [
2913
2913
  createPopperScope
2914
2914
  ]);
@@ -3240,7 +3240,7 @@ var TooltipContentImpl = reactExports.forwardRef(
3240
3240
  },
3241
3241
  children: [
3242
3242
  /* @__PURE__ */ jsxRuntimeExports.jsx(Slottable$1, { children: children2 }),
3243
- /* @__PURE__ */ jsxRuntimeExports.jsx(VisuallyHiddenContentContextProvider, { scope: __scopeTooltip, isInside: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Root, { id: context.contentId, role: "tooltip", children: ariaLabel || children2 }) })
3243
+ /* @__PURE__ */ jsxRuntimeExports.jsx(VisuallyHiddenContentContextProvider, { scope: __scopeTooltip, isInside: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Root$1, { id: context.contentId, role: "tooltip", children: ariaLabel || children2 }) })
3244
3244
  ]
3245
3245
  }
3246
3246
  )
@@ -15311,6 +15311,7 @@ function _instanceof(cls, params = {}) {
15311
15311
  function date(params) {
15312
15312
  return /* @__PURE__ */ _coercedDate(ZodDate, params);
15313
15313
  }
15314
+ const RESERVED_ATTRIBUTE_KEY_PREFIX = "$";
15314
15315
  const AttributeChangeSchema = object({
15315
15316
  key: string$2(),
15316
15317
  value: union([string$2(), _null()])
@@ -15598,7 +15599,13 @@ const RunInputSchema = object({
15598
15599
  specVersion: number$2(),
15599
15600
  executionContext: record(string$2(), any()).optional(),
15600
15601
  /** Initial plaintext run attributes, for resilient run creation. */
15601
- attributes: record(string$2(), string$2()).optional()
15602
+ attributes: record(string$2(), string$2()).optional(),
15603
+ /**
15604
+ * Permits reserved `$`-prefixed keys in `attributes`, mirrored from the
15605
+ * `start()` option so resilient run creation validates the same way as
15606
+ * the original `run_created` attempt.
15607
+ */
15608
+ allowReservedAttributes: literal(true).optional()
15602
15609
  });
15603
15610
  const WorkflowInvokePayloadSchema = object({
15604
15611
  runId: string$2(),
@@ -17248,6 +17255,87 @@ const ToastContext = reactExports.createContext(defaultAdapter);
17248
17255
  function useToast() {
17249
17256
  return reactExports.useContext(ToastContext);
17250
17257
  }
17258
+ const falsyToString = (value) => typeof value === "boolean" ? `${value}` : value === 0 ? "0" : value;
17259
+ const cx = clsx;
17260
+ const cva = (base, config2) => (props) => {
17261
+ var _config_compoundVariants;
17262
+ if ((config2 === null || config2 === void 0 ? void 0 : config2.variants) == null) return cx(base, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);
17263
+ const { variants, defaultVariants } = config2;
17264
+ const getVariantClassNames = Object.keys(variants).map((variant) => {
17265
+ const variantProp = props === null || props === void 0 ? void 0 : props[variant];
17266
+ const defaultVariantProp = defaultVariants === null || defaultVariants === void 0 ? void 0 : defaultVariants[variant];
17267
+ if (variantProp === null) return null;
17268
+ const variantKey = falsyToString(variantProp) || falsyToString(defaultVariantProp);
17269
+ return variants[variant][variantKey];
17270
+ });
17271
+ const propsWithoutUndefined = props && Object.entries(props).reduce((acc, param) => {
17272
+ let [key, value] = param;
17273
+ if (value === void 0) {
17274
+ return acc;
17275
+ }
17276
+ acc[key] = value;
17277
+ return acc;
17278
+ }, {});
17279
+ const getCompoundVariantClassNames = config2 === null || config2 === void 0 ? void 0 : (_config_compoundVariants = config2.compoundVariants) === null || _config_compoundVariants === void 0 ? void 0 : _config_compoundVariants.reduce((acc, param) => {
17280
+ let { class: cvClass, className: cvClassName, ...compoundVariantOptions } = param;
17281
+ return Object.entries(compoundVariantOptions).every((param2) => {
17282
+ let [key, value] = param2;
17283
+ return Array.isArray(value) ? value.includes({
17284
+ ...defaultVariants,
17285
+ ...propsWithoutUndefined
17286
+ }[key]) : {
17287
+ ...defaultVariants,
17288
+ ...propsWithoutUndefined
17289
+ }[key] === value;
17290
+ }) ? [
17291
+ ...acc,
17292
+ cvClass,
17293
+ cvClassName
17294
+ ] : acc;
17295
+ }, []);
17296
+ return cx(base, getVariantClassNames, getCompoundVariantClassNames, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);
17297
+ };
17298
+ const buttonVariants$1 = cva([
17299
+ "outline-none m-0 border-0 align-baseline no-underline group/trigger",
17300
+ "relative cursor-pointer select-none transform translate-z-0",
17301
+ "inline-flex max-w-full items-center justify-center gap-x-1 whitespace-nowrap rounded-md font-medium",
17302
+ "!text-gray-100",
17303
+ "bg-gray-1000",
17304
+ "transition-[border-color,background,color,transform,box-shadow] duration-150 ease-in-out",
17305
+ // Geist invert hover: literal fallbacks (no token dep, so it resolves in any
17306
+ // consuming app), darkened via ancestor theme class without a registered variant.
17307
+ "hover:bg-[var(--themed-hover-bg,_hsl(0,_0%,_22%))]",
17308
+ "[.dark-theme_&]:hover:bg-[var(--themed-hover-bg,_hsl(0,_0%,_80%))]",
17309
+ "[[data-theme=dark]_&]:hover:bg-[var(--themed-hover-bg,_hsl(0,_0%,_80%))]",
17310
+ // Geist focus ring as arbitrary properties (no bare `outline`/ambiguous
17311
+ // arbitrary-color utilities, which differ between Tailwind v3 and v4).
17312
+ "focus-visible:[outline:2px_solid_var(--ds-focus-color)] focus-visible:[outline-offset:2px]",
17313
+ // disabled styles
17314
+ "disabled:cursor-not-allowed aria-disabled:cursor-not-allowed",
17315
+ "disabled:bg-gray-100 disabled:!text-gray-700 disabled:hover:bg-gray-100",
17316
+ "aria-disabled:bg-gray-100 aria-disabled:text-gray-700 aria-disabled:hover:bg-gray-100"
17317
+ ], {
17318
+ variants: {
17319
+ variant: {
17320
+ default: "",
17321
+ secondary: "border border-gray-alpha-400 [--themed-bg:_var(--ds-background-100)] [--themed-fg:_var(--ds-gray-1000)] [--themed-hover-bg:_var(--ds-gray-alpha-200)]",
17322
+ ghost: "[--themed-bg:_transparent] [--themed-fg:_var(--ds-gray-1000)] [--themed-hover-bg:_var(--ds-gray-alpha-100)]"
17323
+ },
17324
+ size: {
17325
+ default: "h-10 px-4 text-[14px]",
17326
+ sm: "h-8 px-3 text-[14px]",
17327
+ xs: "h-6 px-1.5 py-0.5 text-button-12 rounded-[4px]",
17328
+ icon: "h-8 w-8"
17329
+ }
17330
+ },
17331
+ defaultVariants: {
17332
+ variant: "default",
17333
+ size: "default"
17334
+ }
17335
+ });
17336
+ function Button$1({ className, variant, size: size2, type = "button", ...props }) {
17337
+ return jsxRuntimeExports.jsx("button", { type, className: cn$4(buttonVariants$1({ variant, size: size2, className })), ...props });
17338
+ }
17251
17339
  var __create = Object.create;
17252
17340
  var __defProp2 = Object.defineProperty;
17253
17341
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -18114,87 +18202,6 @@ const geistTheme = {
18114
18202
  };
18115
18203
  const inspectorThemeLight = geistTheme;
18116
18204
  const inspectorThemeDark = geistTheme;
18117
- const falsyToString = (value) => typeof value === "boolean" ? `${value}` : value === 0 ? "0" : value;
18118
- const cx = clsx;
18119
- const cva = (base, config2) => (props) => {
18120
- var _config_compoundVariants;
18121
- if ((config2 === null || config2 === void 0 ? void 0 : config2.variants) == null) return cx(base, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);
18122
- const { variants, defaultVariants } = config2;
18123
- const getVariantClassNames = Object.keys(variants).map((variant) => {
18124
- const variantProp = props === null || props === void 0 ? void 0 : props[variant];
18125
- const defaultVariantProp = defaultVariants === null || defaultVariants === void 0 ? void 0 : defaultVariants[variant];
18126
- if (variantProp === null) return null;
18127
- const variantKey = falsyToString(variantProp) || falsyToString(defaultVariantProp);
18128
- return variants[variant][variantKey];
18129
- });
18130
- const propsWithoutUndefined = props && Object.entries(props).reduce((acc, param) => {
18131
- let [key, value] = param;
18132
- if (value === void 0) {
18133
- return acc;
18134
- }
18135
- acc[key] = value;
18136
- return acc;
18137
- }, {});
18138
- const getCompoundVariantClassNames = config2 === null || config2 === void 0 ? void 0 : (_config_compoundVariants = config2.compoundVariants) === null || _config_compoundVariants === void 0 ? void 0 : _config_compoundVariants.reduce((acc, param) => {
18139
- let { class: cvClass, className: cvClassName, ...compoundVariantOptions } = param;
18140
- return Object.entries(compoundVariantOptions).every((param2) => {
18141
- let [key, value] = param2;
18142
- return Array.isArray(value) ? value.includes({
18143
- ...defaultVariants,
18144
- ...propsWithoutUndefined
18145
- }[key]) : {
18146
- ...defaultVariants,
18147
- ...propsWithoutUndefined
18148
- }[key] === value;
18149
- }) ? [
18150
- ...acc,
18151
- cvClass,
18152
- cvClassName
18153
- ] : acc;
18154
- }, []);
18155
- return cx(base, getVariantClassNames, getCompoundVariantClassNames, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);
18156
- };
18157
- const buttonVariants$1 = cva([
18158
- "outline-none m-0 border-0 align-baseline no-underline group/trigger",
18159
- "relative cursor-pointer select-none transform translate-z-0",
18160
- "inline-flex max-w-full items-center justify-center gap-x-1 whitespace-nowrap rounded-md font-medium",
18161
- "!text-gray-100",
18162
- "bg-gray-1000",
18163
- "transition-[border-color,background,color,transform,box-shadow] duration-150 ease-in-out",
18164
- // Geist invert hover: literal fallbacks (no token dep, so it resolves in any
18165
- // consuming app), darkened via ancestor theme class without a registered variant.
18166
- "hover:bg-[var(--themed-hover-bg,_hsl(0,_0%,_22%))]",
18167
- "[.dark-theme_&]:hover:bg-[var(--themed-hover-bg,_hsl(0,_0%,_80%))]",
18168
- "[[data-theme=dark]_&]:hover:bg-[var(--themed-hover-bg,_hsl(0,_0%,_80%))]",
18169
- // Geist focus ring as arbitrary properties (no bare `outline`/ambiguous
18170
- // arbitrary-color utilities, which differ between Tailwind v3 and v4).
18171
- "focus-visible:[outline:2px_solid_var(--ds-focus-color)] focus-visible:[outline-offset:2px]",
18172
- // disabled styles
18173
- "disabled:cursor-not-allowed aria-disabled:cursor-not-allowed",
18174
- "disabled:bg-gray-100 disabled:!text-gray-700 disabled:hover:bg-gray-100",
18175
- "aria-disabled:bg-gray-100 aria-disabled:text-gray-700 aria-disabled:hover:bg-gray-100"
18176
- ], {
18177
- variants: {
18178
- variant: {
18179
- default: "",
18180
- secondary: "border border-gray-alpha-400 [--themed-bg:_var(--ds-background-100)] [--themed-fg:_var(--ds-gray-1000)] [--themed-hover-bg:_var(--ds-gray-alpha-200)]",
18181
- ghost: "[--themed-bg:_transparent] [--themed-fg:_var(--ds-gray-1000)] [--themed-hover-bg:_var(--ds-gray-alpha-100)]"
18182
- },
18183
- size: {
18184
- default: "h-10 px-4 text-[14px]",
18185
- sm: "h-8 px-3 text-[14px]",
18186
- xs: "h-6 px-1.5 py-0.5 text-button-12 rounded-[4px]",
18187
- icon: "h-8 w-8"
18188
- }
18189
- },
18190
- defaultVariants: {
18191
- variant: "default",
18192
- size: "default"
18193
- }
18194
- });
18195
- function Button$1({ className, variant, size: size2, type = "button", ...props }) {
18196
- return jsxRuntimeExports.jsx("button", { type, className: cn$4(buttonVariants$1({ variant, size: size2, className })), ...props });
18197
- }
18198
18205
  const KEYFRAMES = `@keyframes wf-spinner-fade{0%{opacity:1}100%{opacity:.15}}`;
18199
18206
  function Spinner({ size: size2 = 14, color: color5 }) {
18200
18207
  const config2 = size2 <= 12 ? {
@@ -18547,6 +18554,735 @@ function isDeepEqual(a2, b2, seen2 = /* @__PURE__ */ new WeakMap()) {
18547
18554
  }
18548
18555
  return true;
18549
18556
  }
18557
+ function setRef(ref, value) {
18558
+ if (typeof ref === "function") {
18559
+ return ref(value);
18560
+ } else if (ref !== null && ref !== void 0) {
18561
+ ref.current = value;
18562
+ }
18563
+ }
18564
+ function composeRefs(...refs) {
18565
+ return (node2) => {
18566
+ let hasCleanup = false;
18567
+ const cleanups = refs.map((ref) => {
18568
+ const cleanup = setRef(ref, node2);
18569
+ if (!hasCleanup && typeof cleanup == "function") {
18570
+ hasCleanup = true;
18571
+ }
18572
+ return cleanup;
18573
+ });
18574
+ if (hasCleanup) {
18575
+ return () => {
18576
+ for (let i = 0; i < cleanups.length; i++) {
18577
+ const cleanup = cleanups[i];
18578
+ if (typeof cleanup == "function") {
18579
+ cleanup();
18580
+ } else {
18581
+ setRef(refs[i], null);
18582
+ }
18583
+ }
18584
+ };
18585
+ }
18586
+ };
18587
+ }
18588
+ function useComposedRefs(...refs) {
18589
+ return reactExports.useCallback(composeRefs(...refs), refs);
18590
+ }
18591
+ var Slot = reactExports.forwardRef((props, forwardedRef) => {
18592
+ const { children: children2, ...slotProps } = props;
18593
+ const childrenArray = reactExports.Children.toArray(children2);
18594
+ const slottable = childrenArray.find(isSlottable);
18595
+ if (slottable) {
18596
+ const newElement = slottable.props.children;
18597
+ const newChildren = childrenArray.map((child) => {
18598
+ if (child === slottable) {
18599
+ if (reactExports.Children.count(newElement) > 1) return reactExports.Children.only(null);
18600
+ return reactExports.isValidElement(newElement) ? newElement.props.children : null;
18601
+ } else {
18602
+ return child;
18603
+ }
18604
+ });
18605
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(SlotClone, { ...slotProps, ref: forwardedRef, children: reactExports.isValidElement(newElement) ? reactExports.cloneElement(newElement, void 0, newChildren) : null });
18606
+ }
18607
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(SlotClone, { ...slotProps, ref: forwardedRef, children: children2 });
18608
+ });
18609
+ Slot.displayName = "Slot";
18610
+ var SlotClone = reactExports.forwardRef((props, forwardedRef) => {
18611
+ const { children: children2, ...slotProps } = props;
18612
+ if (reactExports.isValidElement(children2)) {
18613
+ const childrenRef = getElementRef(children2);
18614
+ return reactExports.cloneElement(children2, {
18615
+ ...mergeProps(slotProps, children2.props),
18616
+ // @ts-ignore
18617
+ ref: forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef
18618
+ });
18619
+ }
18620
+ return reactExports.Children.count(children2) > 1 ? reactExports.Children.only(null) : null;
18621
+ });
18622
+ SlotClone.displayName = "SlotClone";
18623
+ var Slottable = ({ children: children2 }) => {
18624
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment, { children: children2 });
18625
+ };
18626
+ function isSlottable(child) {
18627
+ return reactExports.isValidElement(child) && child.type === Slottable;
18628
+ }
18629
+ function mergeProps(slotProps, childProps) {
18630
+ const overrideProps = { ...childProps };
18631
+ for (const propName in childProps) {
18632
+ const slotPropValue = slotProps[propName];
18633
+ const childPropValue = childProps[propName];
18634
+ const isHandler = /^on[A-Z]/.test(propName);
18635
+ if (isHandler) {
18636
+ if (slotPropValue && childPropValue) {
18637
+ overrideProps[propName] = (...args) => {
18638
+ childPropValue(...args);
18639
+ slotPropValue(...args);
18640
+ };
18641
+ } else if (slotPropValue) {
18642
+ overrideProps[propName] = slotPropValue;
18643
+ }
18644
+ } else if (propName === "style") {
18645
+ overrideProps[propName] = { ...slotPropValue, ...childPropValue };
18646
+ } else if (propName === "className") {
18647
+ overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(" ");
18648
+ }
18649
+ }
18650
+ return { ...slotProps, ...overrideProps };
18651
+ }
18652
+ function getElementRef(element2) {
18653
+ var _a3, _b2;
18654
+ let getter = (_a3 = Object.getOwnPropertyDescriptor(element2.props, "ref")) == null ? void 0 : _a3.get;
18655
+ let mayWarn = getter && "isReactWarning" in getter && getter.isReactWarning;
18656
+ if (mayWarn) {
18657
+ return element2.ref;
18658
+ }
18659
+ getter = (_b2 = Object.getOwnPropertyDescriptor(element2, "ref")) == null ? void 0 : _b2.get;
18660
+ mayWarn = getter && "isReactWarning" in getter && getter.isReactWarning;
18661
+ if (mayWarn) {
18662
+ return element2.props.ref;
18663
+ }
18664
+ return element2.props.ref || element2.ref;
18665
+ }
18666
+ var Root = Slot;
18667
+ var debounce_1;
18668
+ var hasRequiredDebounce;
18669
+ function requireDebounce() {
18670
+ if (hasRequiredDebounce) return debounce_1;
18671
+ hasRequiredDebounce = 1;
18672
+ function debounce(func, wait, immediate) {
18673
+ var timeout, args, context, timestamp, result;
18674
+ if (null == wait) wait = 100;
18675
+ function later() {
18676
+ var last = Date.now() - timestamp;
18677
+ if (last < wait && last >= 0) {
18678
+ timeout = setTimeout(later, wait - last);
18679
+ } else {
18680
+ timeout = null;
18681
+ if (!immediate) {
18682
+ result = func.apply(context, args);
18683
+ context = args = null;
18684
+ }
18685
+ }
18686
+ }
18687
+ var debounced = function() {
18688
+ context = this;
18689
+ args = arguments;
18690
+ timestamp = Date.now();
18691
+ var callNow = immediate && !timeout;
18692
+ if (!timeout) timeout = setTimeout(later, wait);
18693
+ if (callNow) {
18694
+ result = func.apply(context, args);
18695
+ context = args = null;
18696
+ }
18697
+ return result;
18698
+ };
18699
+ debounced.clear = function() {
18700
+ if (timeout) {
18701
+ clearTimeout(timeout);
18702
+ timeout = null;
18703
+ }
18704
+ };
18705
+ debounced.flush = function() {
18706
+ if (timeout) {
18707
+ result = func.apply(context, args);
18708
+ context = args = null;
18709
+ clearTimeout(timeout);
18710
+ timeout = null;
18711
+ }
18712
+ };
18713
+ return debounced;
18714
+ }
18715
+ debounce.debounce = debounce;
18716
+ debounce_1 = debounce;
18717
+ return debounce_1;
18718
+ }
18719
+ var debounceExports = requireDebounce();
18720
+ const createDebounce = /* @__PURE__ */ getDefaultExportFromCjs(debounceExports);
18721
+ function useMeasure(_temp) {
18722
+ let {
18723
+ debounce,
18724
+ scroll,
18725
+ polyfill,
18726
+ offsetSize
18727
+ } = {
18728
+ debounce: 0,
18729
+ scroll: false,
18730
+ offsetSize: false
18731
+ };
18732
+ const ResizeObserver2 = polyfill || (typeof window === "undefined" ? class ResizeObserver {
18733
+ } : window.ResizeObserver);
18734
+ if (!ResizeObserver2) {
18735
+ throw new Error("This browser does not support ResizeObserver out of the box. See: https://github.com/react-spring/react-use-measure/#resize-observer-polyfills");
18736
+ }
18737
+ const [bounds, set] = reactExports.useState({
18738
+ left: 0,
18739
+ top: 0,
18740
+ width: 0,
18741
+ height: 0,
18742
+ bottom: 0,
18743
+ right: 0,
18744
+ x: 0,
18745
+ y: 0
18746
+ });
18747
+ const state = reactExports.useRef({
18748
+ element: null,
18749
+ scrollContainers: null,
18750
+ resizeObserver: null,
18751
+ lastBounds: bounds
18752
+ });
18753
+ const scrollDebounce = debounce ? typeof debounce === "number" ? debounce : debounce.scroll : null;
18754
+ const resizeDebounce = debounce ? typeof debounce === "number" ? debounce : debounce.resize : null;
18755
+ const mounted = reactExports.useRef(false);
18756
+ reactExports.useEffect(() => {
18757
+ mounted.current = true;
18758
+ return () => void (mounted.current = false);
18759
+ });
18760
+ const [forceRefresh, resizeChange, scrollChange] = reactExports.useMemo(() => {
18761
+ const callback = () => {
18762
+ if (!state.current.element) return;
18763
+ const {
18764
+ left,
18765
+ top,
18766
+ width,
18767
+ height,
18768
+ bottom,
18769
+ right,
18770
+ x: x2,
18771
+ y: y2
18772
+ } = state.current.element.getBoundingClientRect();
18773
+ const size2 = {
18774
+ left,
18775
+ top,
18776
+ width,
18777
+ height,
18778
+ bottom,
18779
+ right,
18780
+ x: x2,
18781
+ y: y2
18782
+ };
18783
+ if (state.current.element instanceof HTMLElement && offsetSize) {
18784
+ size2.height = state.current.element.offsetHeight;
18785
+ size2.width = state.current.element.offsetWidth;
18786
+ }
18787
+ Object.freeze(size2);
18788
+ if (mounted.current && !areBoundsEqual(state.current.lastBounds, size2)) set(state.current.lastBounds = size2);
18789
+ };
18790
+ return [callback, resizeDebounce ? createDebounce(callback, resizeDebounce) : callback, scrollDebounce ? createDebounce(callback, scrollDebounce) : callback];
18791
+ }, [set, offsetSize, scrollDebounce, resizeDebounce]);
18792
+ function removeListeners() {
18793
+ if (state.current.scrollContainers) {
18794
+ state.current.scrollContainers.forEach((element2) => element2.removeEventListener("scroll", scrollChange, true));
18795
+ state.current.scrollContainers = null;
18796
+ }
18797
+ if (state.current.resizeObserver) {
18798
+ state.current.resizeObserver.disconnect();
18799
+ state.current.resizeObserver = null;
18800
+ }
18801
+ }
18802
+ function addListeners() {
18803
+ if (!state.current.element) return;
18804
+ state.current.resizeObserver = new ResizeObserver2(scrollChange);
18805
+ state.current.resizeObserver.observe(state.current.element);
18806
+ if (scroll && state.current.scrollContainers) {
18807
+ state.current.scrollContainers.forEach((scrollContainer) => scrollContainer.addEventListener("scroll", scrollChange, {
18808
+ capture: true,
18809
+ passive: true
18810
+ }));
18811
+ }
18812
+ }
18813
+ const ref = (node2) => {
18814
+ if (!node2 || node2 === state.current.element) return;
18815
+ removeListeners();
18816
+ state.current.element = node2;
18817
+ state.current.scrollContainers = findScrollContainers(node2);
18818
+ addListeners();
18819
+ };
18820
+ useOnWindowScroll(scrollChange, Boolean(scroll));
18821
+ useOnWindowResize(resizeChange);
18822
+ reactExports.useEffect(() => {
18823
+ removeListeners();
18824
+ addListeners();
18825
+ }, [scroll, scrollChange, resizeChange]);
18826
+ reactExports.useEffect(() => removeListeners, []);
18827
+ return [ref, bounds, forceRefresh];
18828
+ }
18829
+ function useOnWindowResize(onWindowResize) {
18830
+ reactExports.useEffect(() => {
18831
+ const cb = onWindowResize;
18832
+ window.addEventListener("resize", cb);
18833
+ return () => void window.removeEventListener("resize", cb);
18834
+ }, [onWindowResize]);
18835
+ }
18836
+ function useOnWindowScroll(onScroll, enabled) {
18837
+ reactExports.useEffect(() => {
18838
+ if (enabled) {
18839
+ const cb = onScroll;
18840
+ window.addEventListener("scroll", cb, {
18841
+ capture: true,
18842
+ passive: true
18843
+ });
18844
+ return () => void window.removeEventListener("scroll", cb, true);
18845
+ }
18846
+ }, [onScroll, enabled]);
18847
+ }
18848
+ function findScrollContainers(element2) {
18849
+ const result = [];
18850
+ if (!element2 || element2 === document.body) return result;
18851
+ const {
18852
+ overflow,
18853
+ overflowX,
18854
+ overflowY
18855
+ } = window.getComputedStyle(element2);
18856
+ if ([overflow, overflowX, overflowY].some((prop) => prop === "auto" || prop === "scroll")) result.push(element2);
18857
+ return [...result, ...findScrollContainers(element2.parentElement)];
18858
+ }
18859
+ const keys$1 = ["x", "y", "top", "bottom", "left", "right", "width", "height"];
18860
+ const areBoundsEqual = (a2, b2) => keys$1.every((key) => a2[key] === b2[key]);
18861
+ const QUERY = "(prefers-reduced-motion: reduce)";
18862
+ const useReducedMotion = () => {
18863
+ const [reduced, setReduced] = reactExports.useState(() => {
18864
+ if (typeof window === "undefined" || !window.matchMedia)
18865
+ return false;
18866
+ return window.matchMedia(QUERY).matches;
18867
+ });
18868
+ reactExports.useEffect(() => {
18869
+ if (typeof window === "undefined" || !window.matchMedia)
18870
+ return;
18871
+ const media = window.matchMedia(QUERY);
18872
+ const onChange = () => setReduced(media.matches);
18873
+ media.addEventListener("change", onChange);
18874
+ onChange();
18875
+ return () => media.removeEventListener("change", onChange);
18876
+ }, []);
18877
+ return reduced;
18878
+ };
18879
+ const INACTIVE_TIMEOUT_MS = 250;
18880
+ const ENTER_DELAY_MS = 0;
18881
+ const OPEN_DELAY_MS = 150;
18882
+ const MAX_TRANSITION_DISTANCE_PX = 150;
18883
+ const MAX_OVERLAP_FOR_TRANSITION_PERCENT = 100;
18884
+ const PERSIST_TIMEOUT_MS = 1e3;
18885
+ const ContextCardContext = reactExports.createContext({
18886
+ rootOrigin: { x: 0, y: 0 },
18887
+ rootBounds: { width: 0, height: 0 },
18888
+ portalRef: null,
18889
+ activeId: null,
18890
+ setActiveId: () => void 0,
18891
+ hoveredId: null,
18892
+ setHoveredId: () => void 0,
18893
+ updateActiveContextCard: () => void 0,
18894
+ skipTransition: false,
18895
+ rootVisible: false,
18896
+ distanceFromLast: 0,
18897
+ lastOrigin: null,
18898
+ isProvided: false
18899
+ });
18900
+ ContextCardContext.displayName = "ContextCardContext";
18901
+ function useHasContextCardProvider() {
18902
+ return reactExports.useContext(ContextCardContext).isProvided;
18903
+ }
18904
+ function usePrevious(value) {
18905
+ const ref = reactExports.useRef(null);
18906
+ reactExports.useEffect(() => {
18907
+ ref.current = value;
18908
+ });
18909
+ return ref.current;
18910
+ }
18911
+ function isRefObject(value) {
18912
+ return value !== null && value !== void 0 && "current" in value;
18913
+ }
18914
+ function ContextCardProvider({ children: children2, portalTarget }) {
18915
+ const [isMounted, setIsMounted] = reactExports.useState(false);
18916
+ reactExports.useEffect(() => setIsMounted(true), []);
18917
+ const resolvedPortalTarget = isRefObject(portalTarget) ? portalTarget.current : portalTarget;
18918
+ const [ref, bounds] = useMeasure();
18919
+ const portalRef = reactExports.useRef(null);
18920
+ const [activeContextCard, setActiveContextCard] = reactExports.useState(null);
18921
+ const [visible, setVisible] = reactExports.useState(false);
18922
+ const [hoveredId, setHoveredId] = reactExports.useState(null);
18923
+ const activeId = reactExports.useRef(null);
18924
+ function setActiveId(id) {
18925
+ activeId.current = id;
18926
+ setVisible(id !== null);
18927
+ }
18928
+ const updateActiveContextCard = (update) => {
18929
+ if ((update == null ? void 0 : update.id) !== activeId.current && update !== null)
18930
+ return;
18931
+ setActiveContextCard(update);
18932
+ };
18933
+ const BORDER_WIDTH = 1;
18934
+ const activeBounds = reactExports.useMemo(() => {
18935
+ if (!activeContextCard)
18936
+ return {
18937
+ width: 0,
18938
+ height: 0,
18939
+ x: 0,
18940
+ y: 0,
18941
+ side: "top",
18942
+ arrowOffset: { x: 0, y: 0 }
18943
+ };
18944
+ return {
18945
+ width: activeContextCard.contentSize.width + BORDER_WIDTH * 2,
18946
+ height: activeContextCard.contentSize.height + BORDER_WIDTH * 2,
18947
+ x: activeContextCard.origin.x,
18948
+ y: activeContextCard.origin.y,
18949
+ side: activeContextCard.side,
18950
+ arrowOffset: activeContextCard.arrowOffset
18951
+ };
18952
+ }, [activeContextCard]);
18953
+ const lastBounds = usePrevious(activeBounds);
18954
+ const lastId = usePrevious(activeId.current);
18955
+ const percentOverlapFromLast = reactExports.useMemo(() => {
18956
+ if (!lastBounds)
18957
+ return 0;
18958
+ const overlapLeft = Math.max(activeBounds.x, lastBounds.x);
18959
+ const overlapRight = Math.min(activeBounds.x + activeBounds.width, lastBounds.x + lastBounds.width);
18960
+ const overlapTop = Math.max(activeBounds.y, lastBounds.y);
18961
+ const overlapBottom = Math.min(activeBounds.y + activeBounds.height, lastBounds.y + lastBounds.height);
18962
+ if (overlapLeft < overlapRight && overlapTop < overlapBottom) {
18963
+ const overlapArea = (overlapRight - overlapLeft) * (overlapBottom - overlapTop);
18964
+ const activeBoundsArea = activeBounds.width * activeBounds.height;
18965
+ if (activeBoundsArea === 0)
18966
+ return 0;
18967
+ return overlapArea / activeBoundsArea * 100;
18968
+ }
18969
+ return 0;
18970
+ }, [activeBounds, lastBounds]);
18971
+ const distanceFromLast = reactExports.useMemo(() => Math.sqrt((((lastBounds == null ? void 0 : lastBounds.x) ?? 0) - activeBounds.x) ** 2 + (((lastBounds == null ? void 0 : lastBounds.y) ?? 0) - activeBounds.y) ** 2), [activeBounds.x, activeBounds.y, lastBounds == null ? void 0 : lastBounds.x, lastBounds == null ? void 0 : lastBounds.y]);
18972
+ const lastOrigin = reactExports.useMemo(() => {
18973
+ if (!lastBounds)
18974
+ return null;
18975
+ return {
18976
+ x: lastBounds.x - activeBounds.x,
18977
+ y: lastBounds.y - activeBounds.y
18978
+ };
18979
+ }, [activeBounds, lastBounds]);
18980
+ const [isScrolling, setIsScrolling] = reactExports.useState(false);
18981
+ const skipTransition = reactExports.useMemo(() => distanceFromLast > MAX_TRANSITION_DISTANCE_PX || percentOverlapFromLast > MAX_OVERLAP_FOR_TRANSITION_PERCENT || lastId === null || isScrolling, [distanceFromLast, isScrolling, lastId, percentOverlapFromLast]);
18982
+ reactExports.useEffect(() => {
18983
+ let isScrollingTimeout = null;
18984
+ const onScroll = () => {
18985
+ if (isScrollingTimeout)
18986
+ window.clearTimeout(isScrollingTimeout);
18987
+ isScrollingTimeout = setTimeout(() => {
18988
+ setIsScrolling(false);
18989
+ }, 66);
18990
+ if (!isScrolling) {
18991
+ setIsScrolling(true);
18992
+ }
18993
+ };
18994
+ document.addEventListener("scroll", onScroll, true);
18995
+ return () => {
18996
+ document.removeEventListener("scroll", onScroll, true);
18997
+ };
18998
+ }, [isScrolling]);
18999
+ const contextValue = reactExports.useMemo(() => ({
19000
+ updateActiveContextCard,
19001
+ rootOrigin: { ...activeBounds },
19002
+ rootBounds: bounds,
19003
+ portalRef,
19004
+ setActiveId,
19005
+ activeId,
19006
+ setHoveredId,
19007
+ hoveredId,
19008
+ skipTransition,
19009
+ rootVisible: visible,
19010
+ distanceFromLast,
19011
+ lastOrigin,
19012
+ isProvided: true
19013
+ }), [
19014
+ activeBounds,
19015
+ bounds,
19016
+ hoveredId,
19017
+ skipTransition,
19018
+ visible,
19019
+ distanceFromLast,
19020
+ lastOrigin
19021
+ ]);
19022
+ return jsxRuntimeExports.jsxs(ContextCardContext.Provider, { value: contextValue, children: [children2, isMounted ? reactDomExports.createPortal(jsxRuntimeExports.jsx("div", { className: "w-full h-full inset-0 fixed pointer-events-none z-[100000]", ref, children: jsxRuntimeExports.jsx("div", { className: "min-w-max transition-all duration-150 ease-[easing-function:cubic-bezier(0.3,_0.57,_0.07,_0.95)] will-change-[transform,width,height] motion-reduce:!transition-none", style: {
19023
+ opacity: visible ? 1 : 0
19024
+ }, children: jsxRuntimeExports.jsxs("div", { className: cn$4("absolute bg-background-100 bg-clip-padding rounded-[6px] overflow-visible pointer-events-none z-[1000000] shadow-[var(--ds-shadow-tooltip),0_0_0_1px_var(--ds-background-100)] w-fit [--context-card-tip-stroke:#DBDBDB] dark-theme:[--context-card-tip-stroke:#252525]", skipTransition ? "!transition-none" : "transition-[transform,width,height] duration-250 ease-[easing-function:cubic-bezier(0.29,0.31,0.05,0.96)] will-change-[transform,width,height] motion-reduce:!transition-none"), "data-skip-transition": skipTransition, style: {
19025
+ transform: `translate(${activeBounds.x}px,${activeBounds.y}px)`,
19026
+ width: activeBounds.width,
19027
+ height: activeBounds.height
19028
+ }, children: [jsxRuntimeExports.jsx("div", { className: cn$4("w-[14px] h-[7px] absolute grid place-content-center z-[999999999] origin-center", {
19029
+ "top-full -translate-x-1/2 rotate-0": activeBounds.side === "top",
19030
+ "right-full -translate-y-1/2 rotate-90 -mr-[3.5px]": activeBounds.side === "right",
19031
+ "bottom-full -translate-x-1/2 rotate-180": activeBounds.side === "bottom",
19032
+ "left-full -translate-y-1/2 rotate-[270deg] -ml-[3.5px]": activeBounds.side === "left"
19033
+ }, skipTransition ? "!transition-none" : "transition-[transform,width,height] duration-250 ease-[easing-function:cubic-bezier(0.29,0.31,0.05,0.96)] will-change-[transform,width,height] motion-reduce:!transition-none"), style: {
19034
+ ...activeBounds.side === "top" || activeBounds.side === "bottom" ? {
19035
+ left: `calc(50% + ${activeBounds.arrowOffset.x}px)`
19036
+ } : {
19037
+ top: `calc(50% + ${activeBounds.arrowOffset.y}px)`
19038
+ }
19039
+ }, "data-skip-transition": skipTransition, "data-side": activeBounds.side, children: jsxRuntimeExports.jsxs("svg", { width: "14", height: "7", viewBox: "0 0 14 7", fill: "none", xmlns: "http://www.w3.org/2000/svg", "aria-hidden": "true", children: [jsxRuntimeExports.jsx("g", { clipPath: "url(#context-card-tip-clip)", children: jsxRuntimeExports.jsx("path", { d: "M15 -0.5V0.5H12.9834L12.8184 0.508789C12.4377 0.550822 12.0853 0.738056 11.8359 1.03418L8.53027 4.95996C7.73114 5.90893 6.26886 5.90892 5.46973 4.95996L2.16406 1.03418C1.87905 0.695733 1.45907 0.5 1.0166 0.5H-1V-0.5H15Z", fill: "var(--ds-background-100)", style: {
19040
+ fill: "var(--ds-background-100)",
19041
+ fillOpacity: 1,
19042
+ stroke: "var(--context-card-tip-stroke)",
19043
+ strokeOpacity: 1
19044
+ } }) }), jsxRuntimeExports.jsx("defs", { children: jsxRuntimeExports.jsx("clipPath", { id: "context-card-tip-clip", children: jsxRuntimeExports.jsx("rect", { width: "14", height: "7", fill: "white", style: { fill: "white", fillOpacity: 1 } }) }) })] }) }), jsxRuntimeExports.jsx("div", { ref: portalRef })] }) }) }), resolvedPortalTarget ?? document.body) : null] });
19045
+ }
19046
+ function ContextCardTrigger({ content: content2, children: children2, side = "right", align = "center", sideOffset = 16, alignOffset = 0, ignoreCardPointerEvents = false, noPadding, asChild, className, hide: hide2, inactiveTimeoutMs = INACTIVE_TIMEOUT_MS }) {
19047
+ const triggerRef = reactExports.useRef(null);
19048
+ const contentRef = reactExports.useRef(null);
19049
+ const [contentMeasureRef, contentMeasureBounds] = useMeasure();
19050
+ const { portalRef, updateActiveContextCard, activeId, setActiveId, hoveredId, setHoveredId, skipTransition, rootVisible } = reactExports.useContext(ContextCardContext);
19051
+ const id = reactExports.useId();
19052
+ reactExports.useEffect(() => {
19053
+ return () => {
19054
+ if (activeId.current === id) {
19055
+ setActiveId(null);
19056
+ }
19057
+ };
19058
+ }, []);
19059
+ const reduceMotion = useReducedMotion();
19060
+ const [localHover, setLocalHover] = reactExports.useState(false);
19061
+ const [persisting, setPersisting] = reactExports.useState(false);
19062
+ const [visible, setVisible] = reactExports.useState(false);
19063
+ const activeTimeout = reactExports.useRef(null);
19064
+ const persistingTimeout = reactExports.useRef(null);
19065
+ const openTimeout = reactExports.useRef(null);
19066
+ reactExports.useEffect(() => {
19067
+ if (localHover && contentMeasureBounds.width > 0 && contentMeasureBounds.height > 0) {
19068
+ if (openTimeout.current)
19069
+ clearTimeout(openTimeout.current);
19070
+ openTimeout.current = setTimeout(() => {
19071
+ setActiveId(id);
19072
+ updateBounds();
19073
+ }, rootVisible ? 0 : OPEN_DELAY_MS);
19074
+ }
19075
+ return () => {
19076
+ if (openTimeout.current)
19077
+ clearTimeout(openTimeout.current);
19078
+ };
19079
+ }, [localHover, contentMeasureBounds]);
19080
+ const enterTimeout = reactExports.useRef(null);
19081
+ reactExports.useEffect(() => {
19082
+ if (enterTimeout.current)
19083
+ clearTimeout(enterTimeout.current);
19084
+ if (hoveredId !== id) {
19085
+ setVisible(false);
19086
+ } else {
19087
+ enterTimeout.current = setTimeout(() => {
19088
+ setVisible(true);
19089
+ }, reduceMotion || skipTransition ? 0 : ENTER_DELAY_MS);
19090
+ }
19091
+ }, [hoveredId, id, reduceMotion, skipTransition]);
19092
+ function updateBounds() {
19093
+ if (!contentRef.current)
19094
+ return;
19095
+ const bounds = computeBounds();
19096
+ updateActiveContextCard({ id, ...bounds });
19097
+ }
19098
+ function computeBounds(sideOverride) {
19099
+ if (!triggerRef.current)
19100
+ throw new Error("Trigger not found");
19101
+ if (!contentRef.current)
19102
+ throw new Error("Content not found");
19103
+ const appliedSide = sideOverride ?? side;
19104
+ const triggerRect = triggerRef.current.getBoundingClientRect();
19105
+ const contentRect = contentRef.current.getBoundingClientRect();
19106
+ contentRef.current.style.width = "max-content";
19107
+ contentRef.current.style.position = "absolute";
19108
+ const contentSize = {
19109
+ width: Math.max(contentRect.width, contentRef.current.offsetWidth),
19110
+ height: contentRect.height
19111
+ };
19112
+ let origin;
19113
+ const arrowWidth = 14;
19114
+ const halfArrowWidth = arrowWidth / 2;
19115
+ const halfTriggerWidth = triggerRect.width / 2;
19116
+ const halfTriggerHeight = triggerRect.height / 2;
19117
+ const halfContentWidth = contentSize.width / 2;
19118
+ const halfContentHeight = contentSize.height / 2;
19119
+ const top = triggerRect.top;
19120
+ const left = triggerRect.left;
19121
+ let alignX = left + halfTriggerWidth - halfContentWidth + alignOffset;
19122
+ if (align === "start")
19123
+ alignX = left + alignOffset;
19124
+ if (align === "end")
19125
+ alignX = left + triggerRect.width - contentRect.width + alignOffset;
19126
+ let alignY = top + halfTriggerHeight - halfContentHeight + alignOffset;
19127
+ if (align === "start")
19128
+ alignY = top + alignOffset;
19129
+ if (align === "end")
19130
+ alignY = top + triggerRect.height - contentRect.height + alignOffset;
19131
+ switch (appliedSide) {
19132
+ case "top":
19133
+ origin = {
19134
+ x: alignX,
19135
+ y: top - contentRect.height - sideOffset
19136
+ };
19137
+ break;
19138
+ case "right":
19139
+ origin = {
19140
+ x: left + triggerRect.width + sideOffset,
19141
+ y: alignY
19142
+ };
19143
+ break;
19144
+ case "bottom":
19145
+ origin = {
19146
+ x: alignX,
19147
+ y: top + triggerRect.height + sideOffset
19148
+ };
19149
+ break;
19150
+ case "left":
19151
+ origin = {
19152
+ x: left - contentRect.width - sideOffset,
19153
+ y: alignY
19154
+ };
19155
+ break;
19156
+ default: {
19157
+ const _exhaustive = appliedSide;
19158
+ throw new Error(`Unknown side: ${String(_exhaustive)}`);
19159
+ }
19160
+ }
19161
+ const viewportWidth = document.documentElement.clientWidth;
19162
+ const viewportHeight = document.documentElement.clientHeight;
19163
+ const isOffscreenLeft = origin.x < 0;
19164
+ const isOffscreenRight = origin.x + contentRect.width > viewportWidth;
19165
+ const isOffscreenTop = origin.y < 0;
19166
+ const isOffscreenBottom = origin.y + contentRect.height > viewportHeight;
19167
+ if (!sideOverride) {
19168
+ const spaceAbove = top;
19169
+ const spaceBelow = viewportHeight - (top + triggerRect.height);
19170
+ const spaceLeft = left;
19171
+ const spaceRight = viewportWidth - (left + triggerRect.width);
19172
+ if (side === "top" && isOffscreenTop && spaceBelow > spaceAbove) {
19173
+ return computeBounds("bottom");
19174
+ }
19175
+ if (side === "bottom" && isOffscreenBottom && spaceAbove > spaceBelow) {
19176
+ return computeBounds("top");
19177
+ }
19178
+ if (side === "right" && isOffscreenRight && spaceLeft > spaceRight) {
19179
+ return computeBounds("left");
19180
+ }
19181
+ if (side === "left" && isOffscreenLeft && spaceRight > spaceLeft) {
19182
+ return computeBounds("right");
19183
+ }
19184
+ if ((side === "top" || side === "bottom") && isOffscreenLeft && spaceRight > contentRect.width) {
19185
+ return computeBounds("right");
19186
+ }
19187
+ if ((side === "top" || side === "bottom") && isOffscreenRight && spaceLeft > contentRect.width) {
19188
+ return computeBounds("left");
19189
+ }
19190
+ if ((side === "left" || side === "right") && isOffscreenTop && spaceBelow > contentRect.height) {
19191
+ return computeBounds("bottom");
19192
+ }
19193
+ if ((side === "left" || side === "right") && isOffscreenBottom && spaceAbove > contentRect.height) {
19194
+ return computeBounds("top");
19195
+ }
19196
+ }
19197
+ const viewportPadding = 8;
19198
+ if (appliedSide === "left" || appliedSide === "right") {
19199
+ origin.y = Math.max(viewportPadding, Math.min(origin.y, viewportHeight - contentSize.height - viewportPadding));
19200
+ } else {
19201
+ origin.x = Math.max(viewportPadding, Math.min(origin.x, viewportWidth - contentSize.width - viewportPadding));
19202
+ }
19203
+ origin.y = Math.max(viewportPadding, Math.min(origin.y, viewportHeight - contentSize.height - viewportPadding));
19204
+ const triggerCenterX = left + halfTriggerWidth;
19205
+ const triggerCenterY = top + halfTriggerHeight;
19206
+ const cardCenterX = origin.x + contentSize.width / 2;
19207
+ const cardCenterY = origin.y + contentSize.height / 2;
19208
+ let arrowOffsetX = triggerCenterX - cardCenterX;
19209
+ let arrowOffsetY = triggerCenterY - cardCenterY;
19210
+ const maxArrowOffsetX = halfContentWidth - halfArrowWidth;
19211
+ const maxArrowOffsetY = halfContentHeight - halfArrowWidth;
19212
+ if (appliedSide === "top" || appliedSide === "bottom") {
19213
+ arrowOffsetX = Math.max(-maxArrowOffsetX, Math.min(arrowOffsetX, maxArrowOffsetX));
19214
+ }
19215
+ if (appliedSide === "left" || appliedSide === "right") {
19216
+ arrowOffsetY = Math.max(-maxArrowOffsetY, Math.min(arrowOffsetY, maxArrowOffsetY));
19217
+ }
19218
+ const arrowOffset = {
19219
+ x: arrowOffsetX,
19220
+ y: arrowOffsetY
19221
+ };
19222
+ return { origin, contentSize, side: appliedSide, arrowOffset };
19223
+ }
19224
+ reactExports.useEffect(() => {
19225
+ document.addEventListener("scroll", updateBounds, true);
19226
+ window.addEventListener("resize", updateBounds);
19227
+ return () => {
19228
+ document.removeEventListener("scroll", updateBounds, true);
19229
+ window.removeEventListener("resize", updateBounds);
19230
+ };
19231
+ }, []);
19232
+ function resetDestructiveTimeouts() {
19233
+ if (activeTimeout.current)
19234
+ clearTimeout(activeTimeout.current);
19235
+ if (persistingTimeout.current)
19236
+ clearTimeout(persistingTimeout.current);
19237
+ if (openTimeout.current)
19238
+ clearTimeout(openTimeout.current);
19239
+ }
19240
+ function attemptDeactivate() {
19241
+ if (activeTimeout.current)
19242
+ clearTimeout(activeTimeout.current);
19243
+ activeTimeout.current = setTimeout(() => {
19244
+ if (activeId.current !== id)
19245
+ return;
19246
+ setActiveId(null);
19247
+ }, inactiveTimeoutMs);
19248
+ }
19249
+ function attemptPersist() {
19250
+ setPersisting(true);
19251
+ if (persistingTimeout.current)
19252
+ clearTimeout(persistingTimeout.current);
19253
+ persistingTimeout.current = setTimeout(() => {
19254
+ setPersisting(false);
19255
+ }, PERSIST_TIMEOUT_MS);
19256
+ }
19257
+ function onMouseEnter() {
19258
+ resetDestructiveTimeouts();
19259
+ setHoveredId(id);
19260
+ setLocalHover(true);
19261
+ }
19262
+ function onMouseLeave() {
19263
+ setLocalHover(false);
19264
+ attemptDeactivate();
19265
+ attemptPersist();
19266
+ }
19267
+ reactExports.useEffect(() => {
19268
+ if (hide2) {
19269
+ setLocalHover(false);
19270
+ setActiveId(null);
19271
+ }
19272
+ }, [hide2, setActiveId]);
19273
+ function handleClick(e) {
19274
+ if (e.target instanceof HTMLElement && e.target.closest("a[href]")) {
19275
+ onMouseLeave();
19276
+ }
19277
+ }
19278
+ const Comp = asChild ? Root : "div";
19279
+ return jsxRuntimeExports.jsxs(Comp, { className: cn$4("inline-flex cursor-pointer flex-[0_1_auto] overflow-hidden", className), onMouseEnter, onMouseLeave, onClick: handleClick, ref: triggerRef, children: [jsxRuntimeExports.jsx(Slottable, { children: children2 }), (portalRef == null ? void 0 : portalRef.current) && (localHover || persisting) ? reactDomExports.createPortal(jsxRuntimeExports.jsx("div", { className: cn$4("absolute top-0 p-3 left-0 max-w-max transition-[transform,width,height] duration-250 ease-[easing-function:cubic-bezier(0.29,0.31,0.05,0.96)] will-change-[transform,width,height] motion-reduce:!transition-none", skipTransition && "!transition-none"), ref: contentRef, style: {
19280
+ ...noPadding ? { padding: 0 } : {},
19281
+ pointerEvents: rootVisible && visible && !ignoreCardPointerEvents ? "all" : "none"
19282
+ }, children: jsxRuntimeExports.jsx("div", { className: cn$4("min-w-max transition-all duration-150 ease-[easing-function:cubic-bezier(0.3,_0.57,_0.07,_0.95)] will-change-[transform,width,height] motion-reduce:!transition-none", skipTransition ? "!transition-none" : "transition-[transform,width,height] duration-250 ease-[easing-function:cubic-bezier(0.29,0.31,0.05,0.96)] will-change-[transform,width,height] motion-reduce:!transition-none"), ref: contentMeasureRef, style: {
19283
+ opacity: Number(visible)
19284
+ }, children: content2 }) }, id), portalRef.current) : null] });
19285
+ }
18550
19286
  function Skeleton$1({ className, style: style2, ...props }) {
18551
19287
  return jsxRuntimeExports.jsx("div", { ...props, className: cn$4("rounded-md", className), style: { backgroundColor: "var(--ds-gray-200)", ...style2 } });
18552
19288
  }
@@ -43312,7 +44048,7 @@ var tn = f("block", "before:content-[counter(line)]", "before:inline-block", "be
43312
44048
  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 });
43313
44049
  var Se = reactExports.createContext({ code: "" }), de = () => reactExports.useContext(Se);
43314
44050
  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 }) });
43315
- var cn$1 = /\n+$/, dn = reactExports.lazy(() => __vitePreload(() => import("./highlighted-body-B3W2YXNL-BQ1pmB9V.js"), true ? __vite__mapDeps([3,2]) : void 0).then((e) => ({ default: e.HighlightedCodeBlockBody }))), rt = ({ code: e, language: t, className: o, children: n, isIncomplete: s2 = false, ...r2 }) => {
44051
+ var cn$1 = /\n+$/, dn = reactExports.lazy(() => __vitePreload(() => import("./highlighted-body-B3W2YXNL-QKf7Yrcl.js"), true ? __vite__mapDeps([3,2]) : void 0).then((e) => ({ default: e.HighlightedCodeBlockBody }))), rt = ({ code: e, language: t, className: o, children: n, isIncomplete: s2 = false, ...r2 }) => {
43316
44052
  let i = reactExports.useMemo(() => e.replace(cn$1, ""), [e]), c = reactExports.useMemo(() => ({ bg: "transparent", fg: "inherit", tokens: i.split(`
43317
44053
  `).map((a2) => [{ content: a2, color: "inherit", bgColor: "transparent", htmlStyle: {}, offset: 0 }]) }), [i]);
43318
44054
  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 }) })] }) });
@@ -45042,7 +45778,8 @@ const BOUNDARY_LABELS = {
45042
45778
  run_started: "Started",
45043
45779
  run_completed: "Completed",
45044
45780
  run_failed: "Run failed",
45045
- step_completed: "Completed"
45781
+ step_completed: "Completed",
45782
+ attr_set: "Attributes set"
45046
45783
  };
45047
45784
  const SpanEventComponent = reactExports.memo(function SpanEventComponent2({ event, node: node2, root: root2, scale, customSpanEventClassNameFunc, asBoundary = false }) {
45048
45785
  const ref = reactExports.useRef(null);
@@ -45378,6 +46115,11 @@ const iconButtonVariants = cva([
45378
46115
  });
45379
46116
  const IconButton = reactExports.forwardRef(({ className, variant, size: size2, type = "button", ...props }, ref) => jsxRuntimeExports.jsx("button", { ref, type, className: cn$4(iconButtonVariants({ variant, size: size2, className })), ...props }));
45380
46117
  IconButton.displayName = "IconButton";
46118
+ const TooltipProvider = Provider;
46119
+ const Tooltip$1 = Root3;
46120
+ const TooltipTrigger$1 = Trigger;
46121
+ const TooltipContent$1 = reactExports.forwardRef(({ className, sideOffset = 8, showArrow = true, children: children2, ...props }, ref) => jsxRuntimeExports.jsx(Portal, { children: jsxRuntimeExports.jsxs(Content2, { ref, sideOffset, className: cn$4("z-[99999] flex items-center gap-1 rounded-[10px] bg-gray-1000 px-2 py-1.5 !text-label-13 text-background-100 shadow-md select-none", className), ...props, children: [children2, showArrow ? jsxRuntimeExports.jsx(Arrow2, { width: 11, height: 5, className: "fill-gray-1000" }) : null] }) }));
46122
+ TooltipContent$1.displayName = Content2.displayName;
45381
46123
  const ATTR_FILTER_REGEX = /(?:^|\s)(?<pair>(?<key>[\w.]+):(?<value>\S*))/g;
45382
46124
  function parseSpanSearchQuery(rawQuery) {
45383
46125
  var _a3, _b2, _c;
@@ -46002,6 +46744,30 @@ function SegmentBar({ segments }) {
46002
46744
  }, children: [ACTIVE_SEGMENT_STATUSES.has(seg.status) ? jsxRuntimeExports.jsx(RunningStripes, {}) : null, showLabel ? jsxRuntimeExports.jsx(DurationLabel, { label }) : null] }, i);
46003
46745
  }) });
46004
46746
  }
46747
+ function formatMarkerTime(ms) {
46748
+ const date2 = new Date(ms);
46749
+ return date2.toLocaleTimeString("en-US", {
46750
+ hour: "2-digit",
46751
+ minute: "2-digit",
46752
+ second: "2-digit",
46753
+ hour12: false
46754
+ }) + "." + date2.getMilliseconds().toString().padStart(3, "0");
46755
+ }
46756
+ function AttrSetMarkers({ span, viewStart, viewDuration }) {
46757
+ const markers2 = reactExports.useMemo(() => span.events.filter((e) => e.name === "attr_set"), [span.events]);
46758
+ if (markers2.length === 0 || viewDuration <= 0)
46759
+ return null;
46760
+ return jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment, { children: markers2.map((event, index2) => {
46761
+ const timeMs = getHighResInMs(event.timestamp);
46762
+ const frac = (timeMs - viewStart) / viewDuration;
46763
+ if (frac < 0 || frac > 1)
46764
+ return null;
46765
+ return jsxRuntimeExports.jsxs(Tooltip$1, { children: [jsxRuntimeExports.jsx(TooltipTrigger$1, { asChild: true, children: jsxRuntimeExports.jsx("div", { "aria-label": "Attributes set", className: "absolute top-1/2 z-10 flex h-4 w-4 -translate-x-1/2 -translate-y-1/2 cursor-pointer items-center justify-center", style: { left: `${frac * 100}%` }, children: jsxRuntimeExports.jsx("div", { className: "h-2 w-2 rotate-45 rounded-[1px] border", style: {
46766
+ backgroundColor: "var(--ds-teal-400)",
46767
+ borderColor: "var(--ds-teal-900)"
46768
+ } }) }) }), jsxRuntimeExports.jsxs(TooltipContent$1, { children: ["Attributes set · ", formatMarkerTime(timeMs)] })] }, `attr-set-${index2}`);
46769
+ }) });
46770
+ }
46005
46771
  const TimelineBar = reactExports.memo(function TimelineBar2({ span, viewStart, viewDuration, containerWidth, isSelected, isDimmed, onSelect }) {
46006
46772
  var _a3;
46007
46773
  const startMs = getHighResInMs(span.startTime);
@@ -46020,7 +46786,7 @@ const TimelineBar = reactExports.memo(function TimelineBar2({ span, viewStart, v
46020
46786
  const handleClick = reactExports.useCallback(() => {
46021
46787
  onSelect(span.spanId);
46022
46788
  }, [onSelect, span.spanId]);
46023
- return jsxRuntimeExports.jsx("div", { role: "treeitem", "aria-selected": isSelected, "aria-expanded": isSelected, "aria-level": 1, className: cn$4("group/timeline-row h-10 relative flex items-center hover:bg-gray-100 aria-selected:bg-gray-100 aria-selected:hover:bg-gray-200 transition-opacity", isDimmed && "opacity-35"), onClick: handleClick, children: jsxRuntimeExports.jsx("div", { className: "absolute inset-y-0", style: TIMELINE_INSET_STYLE, children: jsxRuntimeExports.jsx("div", { className: "absolute top-1/2 h-6 -translate-y-1/2 rounded-[0.25rem]", style: getBarPositionStyle(geometry), children: geometry.mode.kind === "arrow" ? jsxRuntimeExports.jsx(BoundaryArrow, { direction: geometry.mode.direction }) : geometry.mode.kind === "tiny" ? jsxRuntimeExports.jsx("div", { className: "h-6 rounded-[0.25rem] border", style: { background: fallbackBg, borderColor: fallbackBorder } }) : segments.length > 0 ? jsxRuntimeExports.jsx(SegmentBar, { segments }) : jsxRuntimeExports.jsx(PlainBar, { bg: fallbackBg, border: fallbackBorder, label: showTotalLabel ? totalLabel : null }) }) }) });
46789
+ return jsxRuntimeExports.jsx("div", { role: "treeitem", "aria-selected": isSelected, "aria-expanded": isSelected, "aria-level": 1, className: cn$4("group/timeline-row h-10 relative flex items-center hover:bg-gray-100 aria-selected:bg-gray-100 aria-selected:hover:bg-gray-200 transition-opacity", isDimmed && "opacity-35"), onClick: handleClick, children: jsxRuntimeExports.jsxs("div", { className: "absolute inset-y-0", style: TIMELINE_INSET_STYLE, children: [jsxRuntimeExports.jsx("div", { className: "absolute top-1/2 h-6 -translate-y-1/2 rounded-[0.25rem]", style: getBarPositionStyle(geometry), children: geometry.mode.kind === "arrow" ? jsxRuntimeExports.jsx(BoundaryArrow, { direction: geometry.mode.direction }) : geometry.mode.kind === "tiny" ? jsxRuntimeExports.jsx("div", { className: "h-6 rounded-[0.25rem] border", style: { background: fallbackBg, borderColor: fallbackBorder } }) : segments.length > 0 ? jsxRuntimeExports.jsx(SegmentBar, { segments }) : jsxRuntimeExports.jsx(PlainBar, { bg: fallbackBg, border: fallbackBorder, label: showTotalLabel ? totalLabel : null }) }), jsxRuntimeExports.jsx(AttrSetMarkers, { span, viewStart, viewDuration })] }) });
46024
46790
  });
46025
46791
  const DELTA_CAP_HEIGHT_PX = 8;
46026
46792
  const DELTA_ROW_OFFSET_PX = 8;
@@ -46058,11 +46824,6 @@ function Timeline({ spans, viewStart, viewEnd, markers: markers2, selectedId, se
46058
46824
  Math.abs(marker2.value) > 1e-6 ? jsxRuntimeExports.jsx("div", { className: "absolute top-0 bottom-0 w-px bg-gray-alpha-300", style: { left: `${marker2.position * 100}%` } }, String(marker2.value)) : null
46059
46825
  )) }), hoverFraction != null && jsxRuntimeExports.jsx("div", { className: "absolute inset-y-0 pointer-events-none z-10", style: TIMELINE_INSET_STYLE, children: jsxRuntimeExports.jsx("div", { className: "absolute top-0 bottom-0 w-px bg-gray-alpha-500", style: { left: `${hoverFraction * 100}%` } }) }), jsxRuntimeExports.jsx("div", { style: { transform: `translateY(${start * ROW_HEIGHT_PX}px)` }, children: spans.slice(start, end).map((span) => jsxRuntimeExports.jsx(TimelineBar, { span, viewStart, viewDuration, containerWidth: timelineWidth, isSelected: selectedId === span.spanId, isDimmed: isSpanDimmedBySearch(span.spanId, searchResult), onSelect }, span.spanId)) }), altHeld && jsxRuntimeExports.jsx("div", { "aria-hidden": true, className: "absolute inset-y-0 pointer-events-none", style: TIMELINE_INSET_STYLE, children: gaps.map((gap) => jsxRuntimeExports.jsx(DeltaIndicator, { leftFrac: gap.leftFrac, rightFrac: gap.rightFrac, label: formatDuration(gap.gapMs, true), rowIndex: gap.rowIndex }, gap.rowIndex)) })] });
46060
46826
  }
46061
- const TooltipProvider = Provider;
46062
- const Tooltip$1 = Root3;
46063
- const TooltipTrigger$1 = Trigger;
46064
- const TooltipContent$1 = reactExports.forwardRef(({ className, sideOffset = 8, showArrow = true, children: children2, ...props }, ref) => jsxRuntimeExports.jsx(Portal, { children: jsxRuntimeExports.jsxs(Content2, { ref, sideOffset, className: cn$4("z-[99999] flex items-center gap-1 rounded-[10px] bg-gray-1000 px-2 py-1.5 !text-label-13 text-background-100 shadow-md select-none", className), ...props, children: [children2, showArrow ? jsxRuntimeExports.jsx(Arrow2, { width: 11, height: 5, className: "fill-gray-1000" }) : null] }) }));
46065
- TooltipContent$1.displayName = Content2.displayName;
46066
46827
  const ActiveSpanContext = reactExports.createContext(null);
46067
46828
  ActiveSpanContext.displayName = "ActiveSpanContext";
46068
46829
  function ActiveSpanProvider({ spans, children: children2 }) {
@@ -46153,115 +46914,6 @@ function useServerConfig() {
46153
46914
  }
46154
46915
  return context;
46155
46916
  }
46156
- function setRef(ref, value) {
46157
- if (typeof ref === "function") {
46158
- return ref(value);
46159
- } else if (ref !== null && ref !== void 0) {
46160
- ref.current = value;
46161
- }
46162
- }
46163
- function composeRefs(...refs) {
46164
- return (node2) => {
46165
- let hasCleanup = false;
46166
- const cleanups = refs.map((ref) => {
46167
- const cleanup = setRef(ref, node2);
46168
- if (!hasCleanup && typeof cleanup == "function") {
46169
- hasCleanup = true;
46170
- }
46171
- return cleanup;
46172
- });
46173
- if (hasCleanup) {
46174
- return () => {
46175
- for (let i = 0; i < cleanups.length; i++) {
46176
- const cleanup = cleanups[i];
46177
- if (typeof cleanup == "function") {
46178
- cleanup();
46179
- } else {
46180
- setRef(refs[i], null);
46181
- }
46182
- }
46183
- };
46184
- }
46185
- };
46186
- }
46187
- function useComposedRefs(...refs) {
46188
- return reactExports.useCallback(composeRefs(...refs), refs);
46189
- }
46190
- var Slot = reactExports.forwardRef((props, forwardedRef) => {
46191
- const { children: children2, ...slotProps } = props;
46192
- const childrenArray = reactExports.Children.toArray(children2);
46193
- const slottable = childrenArray.find(isSlottable);
46194
- if (slottable) {
46195
- const newElement = slottable.props.children;
46196
- const newChildren = childrenArray.map((child) => {
46197
- if (child === slottable) {
46198
- if (reactExports.Children.count(newElement) > 1) return reactExports.Children.only(null);
46199
- return reactExports.isValidElement(newElement) ? newElement.props.children : null;
46200
- } else {
46201
- return child;
46202
- }
46203
- });
46204
- return /* @__PURE__ */ jsxRuntimeExports.jsx(SlotClone, { ...slotProps, ref: forwardedRef, children: reactExports.isValidElement(newElement) ? reactExports.cloneElement(newElement, void 0, newChildren) : null });
46205
- }
46206
- return /* @__PURE__ */ jsxRuntimeExports.jsx(SlotClone, { ...slotProps, ref: forwardedRef, children: children2 });
46207
- });
46208
- Slot.displayName = "Slot";
46209
- var SlotClone = reactExports.forwardRef((props, forwardedRef) => {
46210
- const { children: children2, ...slotProps } = props;
46211
- if (reactExports.isValidElement(children2)) {
46212
- const childrenRef = getElementRef(children2);
46213
- return reactExports.cloneElement(children2, {
46214
- ...mergeProps(slotProps, children2.props),
46215
- // @ts-ignore
46216
- ref: forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef
46217
- });
46218
- }
46219
- return reactExports.Children.count(children2) > 1 ? reactExports.Children.only(null) : null;
46220
- });
46221
- SlotClone.displayName = "SlotClone";
46222
- var Slottable = ({ children: children2 }) => {
46223
- return /* @__PURE__ */ jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment, { children: children2 });
46224
- };
46225
- function isSlottable(child) {
46226
- return reactExports.isValidElement(child) && child.type === Slottable;
46227
- }
46228
- function mergeProps(slotProps, childProps) {
46229
- const overrideProps = { ...childProps };
46230
- for (const propName in childProps) {
46231
- const slotPropValue = slotProps[propName];
46232
- const childPropValue = childProps[propName];
46233
- const isHandler = /^on[A-Z]/.test(propName);
46234
- if (isHandler) {
46235
- if (slotPropValue && childPropValue) {
46236
- overrideProps[propName] = (...args) => {
46237
- childPropValue(...args);
46238
- slotPropValue(...args);
46239
- };
46240
- } else if (slotPropValue) {
46241
- overrideProps[propName] = slotPropValue;
46242
- }
46243
- } else if (propName === "style") {
46244
- overrideProps[propName] = { ...slotPropValue, ...childPropValue };
46245
- } else if (propName === "className") {
46246
- overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(" ");
46247
- }
46248
- }
46249
- return { ...slotProps, ...overrideProps };
46250
- }
46251
- function getElementRef(element2) {
46252
- var _a3, _b2;
46253
- let getter = (_a3 = Object.getOwnPropertyDescriptor(element2.props, "ref")) == null ? void 0 : _a3.get;
46254
- let mayWarn = getter && "isReactWarning" in getter && getter.isReactWarning;
46255
- if (mayWarn) {
46256
- return element2.ref;
46257
- }
46258
- getter = (_b2 = Object.getOwnPropertyDescriptor(element2, "ref")) == null ? void 0 : _b2.get;
46259
- mayWarn = getter && "isReactWarning" in getter && getter.isReactWarning;
46260
- if (mayWarn) {
46261
- return element2.props.ref;
46262
- }
46263
- return element2.props.ref || element2.ref;
46264
- }
46265
46917
  const buttonVariants = cva(
46266
46918
  "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
46267
46919
  {
@@ -48614,7 +49266,7 @@ const mermaid3ZIDBTTL = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.def
48614
49266
  Mermaid: Nt
48615
49267
  }, Symbol.toStringTag, { value: "Module" }));
48616
49268
  export {
48617
- _r as $,
49269
+ ContextCardProvider as $,
48618
49270
  Anchor as A,
48619
49271
  Button as B,
48620
49272
  Content as C,
@@ -48628,85 +49280,90 @@ export {
48628
49280
  Ks as K,
48629
49281
  LoaderCircle as L,
48630
49282
  fetchWorkflowsManifest as M,
48631
- Spinner as N,
48632
- cn$4 as O,
49283
+ cn$4 as N,
49284
+ DataInspector as O,
48633
49285
  Primitive as P,
48634
49286
  Qe as Q,
48635
49287
  R,
48636
49288
  ServerConfigProvider as S,
48637
49289
  Tooltip as T,
48638
- Skeleton$1 as U,
49290
+ DecryptClickContext as U,
48639
49291
  VISUALLY_HIDDEN_STYLES as V,
48640
- DecryptClickContext as W,
48641
- isEncryptedMarker as X,
48642
- Yr as Y,
48643
- formatDuration as Z,
48644
- DataInspector as _,
49292
+ Button$1 as W,
49293
+ Spinner as X,
49294
+ Lock as Y,
49295
+ RESERVED_ATTRIBUTE_KEY_PREFIX as Z,
49296
+ useHasContextCardProvider as _,
48645
49297
  TooltipTrigger as a,
48646
- Button$1 as a0,
48647
- Lock as a1,
48648
- RunClickContext as a2,
48649
- StreamClickContext as a3,
48650
- isExpiredMarker as a4,
48651
- isDoStreamStep as a5,
48652
- extractConversation as a6,
48653
- hasEncryptedFields as a7,
48654
- EVENT_DATA_REF_FIELDS as a8,
48655
- useSidebarDataOptional as a9,
48656
- fetchStreams as aA,
48657
- Slot as aB,
48658
- Slottable as aC,
48659
- buttonVariants as aD,
48660
- fetchEvent as aE,
48661
- fetchEventsByCorrelationId as aF,
48662
- isEncryptedData as aG,
48663
- hydrateData as aH,
48664
- getWebRevivers as aI,
48665
- LIVE_UPDATE_INTERVAL_MS as aJ,
48666
- getEncryptionKeyForRun as aK,
48667
- StreamViewer as aL,
48668
- composeRefs as aM,
48669
- useFloating as aN,
48670
- offset as aO,
48671
- shift as aP,
48672
- limitShift as aQ,
48673
- flip as aR,
48674
- size as aS,
48675
- arrow as aT,
48676
- hide as aU,
48677
- autoUpdate as aV,
48678
- cancelRun as aW,
48679
- reenqueueRun as aX,
48680
- wakeUpRun as aY,
48681
- resumeHook as aZ,
48682
- recreateRun as a_,
48683
- clsx as aa,
48684
- useRowWindow as ab,
48685
- isSpanDimmedBySearch as ac,
48686
- ROW_HEIGHT_PX as ad,
48687
- getSpanDurationMs as ae,
48688
- formatDurationPrecise as af,
48689
- TooltipProvider as ag,
48690
- ActiveSpanProvider as ah,
48691
- useActiveSpan as ai,
48692
- useSidebarData as aj,
48693
- searchSpans as ak,
48694
- computeRootBounds as al,
48695
- computeTimeMarkers as am,
48696
- getHighResInMs as an,
48697
- TIMELINE_PADDING_PX as ao,
48698
- Timeline as ap,
48699
- TimelineHeader as aq,
48700
- IconButton as ar,
48701
- Tooltip$1 as as,
48702
- TooltipTrigger$1 as at,
48703
- TooltipContent$1 as au,
48704
- SidebarDataProvider as av,
48705
- hydrateResourceIOWithKey as aw,
48706
- hydrateResourceIO as ax,
48707
- fetchHook as ay,
48708
- fetchStep as az,
49298
+ cancelRun as a$,
49299
+ ContextCardTrigger as a0,
49300
+ Skeleton$1 as a1,
49301
+ Yr as a2,
49302
+ isEncryptedMarker as a3,
49303
+ formatDuration as a4,
49304
+ _r as a5,
49305
+ RunClickContext as a6,
49306
+ StreamClickContext as a7,
49307
+ isExpiredMarker as a8,
49308
+ isDoStreamStep as a9,
49309
+ SidebarDataProvider as aA,
49310
+ hydrateResourceIOWithKey as aB,
49311
+ hydrateResourceIO as aC,
49312
+ fetchHook as aD,
49313
+ fetchStep as aE,
49314
+ fetchStreams as aF,
49315
+ Slot as aG,
49316
+ Slottable as aH,
49317
+ buttonVariants as aI,
49318
+ fetchEvent as aJ,
49319
+ fetchEventsByCorrelationId as aK,
49320
+ isEncryptedData as aL,
49321
+ hydrateData as aM,
49322
+ getWebRevivers as aN,
49323
+ LIVE_UPDATE_INTERVAL_MS as aO,
49324
+ getEncryptionKeyForRun as aP,
49325
+ StreamViewer as aQ,
49326
+ composeRefs as aR,
49327
+ useFloating as aS,
49328
+ offset as aT,
49329
+ shift as aU,
49330
+ limitShift as aV,
49331
+ flip as aW,
49332
+ size as aX,
49333
+ arrow as aY,
49334
+ hide as aZ,
49335
+ autoUpdate as a_,
49336
+ extractConversation as aa,
49337
+ hasEncryptedFields as ab,
49338
+ EVENT_DATA_REF_FIELDS as ac,
49339
+ useSidebarDataOptional as ad,
49340
+ clsx as ae,
49341
+ useRowWindow as af,
49342
+ isSpanDimmedBySearch as ag,
49343
+ ROW_HEIGHT_PX as ah,
49344
+ getSpanDurationMs as ai,
49345
+ formatDurationPrecise as aj,
49346
+ TooltipProvider as ak,
49347
+ ActiveSpanProvider as al,
49348
+ useActiveSpan as am,
49349
+ useSidebarData as an,
49350
+ searchSpans as ao,
49351
+ computeRootBounds as ap,
49352
+ computeTimeMarkers as aq,
49353
+ getHighResInMs as ar,
49354
+ TIMELINE_PADDING_PX as as,
49355
+ Timeline as at,
49356
+ TimelineHeader as au,
49357
+ IconButton as av,
49358
+ Tooltip$1 as aw,
49359
+ TooltipTrigger$1 as ax,
49360
+ TooltipContent$1 as ay,
49361
+ useReducedMotion as az,
48709
49362
  TooltipContent as b,
49363
+ reenqueueRun as b0,
49364
+ wakeUpRun as b1,
49365
+ resumeHook as b2,
49366
+ recreateRun as b3,
48710
49367
  createLucideIcon as c,
48711
49368
  cn as d,
48712
49369
  Toaster as e,