@mastra/playground-ui 7.0.0-beta.22 → 7.0.0-beta.24

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 (40) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/dist/index.cjs.js +591 -238
  3. package/dist/index.cjs.js.map +1 -1
  4. package/dist/index.css +10 -10
  5. package/dist/index.es.js +584 -231
  6. package/dist/index.es.js.map +1 -1
  7. package/dist/spacings-Ddc7umGk.js +196 -0
  8. package/dist/spacings-Ddc7umGk.js.map +1 -0
  9. package/dist/spacings-bCnRJAUT.cjs +206 -0
  10. package/dist/spacings-bCnRJAUT.cjs.map +1 -0
  11. package/dist/src/ds/components/Alert/Alert.d.ts +2 -1
  12. package/dist/src/ds/components/Avatar/Avatar.d.ts +2 -1
  13. package/dist/src/ds/components/Badge/Badge.d.ts +1 -1
  14. package/dist/src/ds/components/Button/Button.d.ts +1 -1
  15. package/dist/src/ds/components/Card/Card.d.ts +26 -0
  16. package/dist/src/ds/components/Card/index.d.ts +2 -0
  17. package/dist/src/ds/components/Collapsible/collapsible.d.ts +4 -3
  18. package/dist/src/ds/components/EmptyState/EmptyState.d.ts +10 -9
  19. package/dist/src/ds/components/EmptyState/index.d.ts +2 -1
  20. package/dist/src/ds/components/Input/input.d.ts +2 -0
  21. package/dist/src/ds/components/Kbd/kbd.d.ts +2 -1
  22. package/dist/src/ds/components/Notification/notification.d.ts +1 -1
  23. package/dist/src/ds/components/Spinner/spinner.d.ts +2 -1
  24. package/dist/src/ds/components/StatusBadge/StatusBadge.d.ts +13 -0
  25. package/dist/src/ds/components/StatusBadge/index.d.ts +2 -0
  26. package/dist/src/ds/primitives/form-element.d.ts +3 -2
  27. package/dist/src/ds/primitives/transitions.d.ts +22 -0
  28. package/dist/src/ds/tokens/animations.d.ts +5 -0
  29. package/dist/src/ds/tokens/colors.d.ts +2 -1
  30. package/dist/src/ds/tokens/index.d.ts +2 -0
  31. package/dist/src/ds/tokens/shadows.d.ts +14 -0
  32. package/dist/tailwind.preset.cjs.js +38 -10
  33. package/dist/tailwind.preset.cjs.js.map +1 -1
  34. package/dist/tailwind.preset.es.js +29 -1
  35. package/dist/tailwind.preset.es.js.map +1 -1
  36. package/dist/tokens.cjs.js +17 -175
  37. package/dist/tokens.cjs.js.map +1 -1
  38. package/dist/tokens.es.js +8 -169
  39. package/dist/tokens.es.js.map +1 -1
  40. package/package.json +8 -8
package/dist/index.es.js CHANGED
@@ -3,7 +3,7 @@ import { useAssistantState, useMessage, MessagePrimitive, ActionBarPrimitive, us
3
3
  import { CheckIcon as CheckIcon$1, CopyIcon, ShieldAlert, ChevronDown, ChevronRight, RefreshCw, Tag, InfoIcon as InfoIcon$1, AlertCircle, TriangleAlert, ChevronUpIcon, CheckCircleIcon, X, Share2, Check, Clock as Clock$1, PlayCircle, Workflow, Layers, List, CalendarClock, Timer, CornerDownRight, GitBranch, Repeat, Repeat1, Network, TriangleAlertIcon, XIcon, CalendarIcon, CircleAlertIcon, Braces, ChevronDownIcon, Brackets, PlusIcon, TrashIcon, Plus, Loader2, Circle, EyeOffIcon, EyeIcon, PauseIcon, HourglassIcon, CircleDashed, Footprints, CircleCheck, CircleX, Minus, Maximize, AlertCircleIcon, CirclePause, StopCircle, Cpu, SearchIcon, ChevronsUpDown, Search, ArrowRight, ArrowLeft, BrainIcon, AudioLinesIcon, StopCircleIcon, FileText, CircleXIcon, Link, CloudUpload, Mic, ArrowUp, SaveIcon, Info, ExternalLink, ArrowLeftIcon, ArrowRightIcon, ChevronsRightIcon, AlignLeftIcon, AlignJustifyIcon, ArrowUpIcon, ArrowDownIcon, ChevronRightIcon, GaugeIcon, ChevronsLeftRightEllipsisIcon, CalculatorIcon, HashIcon, FileInputIcon, FileOutputIcon, ReceiptText, RotateCcw, GripVertical, RefreshCcwIcon, AlertTriangleIcon, Copy, NetworkIcon, WorkflowIcon as WorkflowIcon$1, PackageIcon, GitBranchIcon, PackageOpenIcon, OctagonXIcon, FrownIcon, CircleChevronUpIcon, CircleChevronDownIcon, FileIcon, ChevronsUpIcon, ChevronsDownIcon, TimerIcon, ChevronsLeftRightIcon, ChevronFirstIcon, ChevronLastIcon, CircleDashedIcon, ArrowRightToLineIcon, CoinsIcon, BracesIcon, CircleGaugeIcon, PanelTopIcon, ListTreeIcon, PanelLeftIcon, PanelRightIcon, KeyboardIcon, CircleSlash, Trash, Link2, MoveRight } from 'lucide-react';
4
4
  import * as React from 'react';
5
5
  import React__default, { forwardRef, memo, useState, useEffect, useRef, useCallback, useMemo, createContext, useContext, Fragment as Fragment$1, useId, useEffectEvent, Suspense, useLayoutEffect } from 'react';
6
- import { BorderColors, Colors, Sizes, FontSizes, LineHeights, BorderRadius, Spacings } from './tokens.es.js';
6
+ import { S as Shadows, G as Glows, B as BorderColors, C as Colors, a as Sizes, F as FontSizes, L as LineHeights, b as BorderRadius, c as Spacings } from './spacings-Ddc7umGk.js';
7
7
  import * as TooltipPrimitive from '@radix-ui/react-tooltip';
8
8
  import { TooltipProvider as TooltipProvider$1 } from '@radix-ui/react-tooltip';
9
9
  import { unstable_memoizeMarkdownComponents, useIsMarkdownCodeBlock, MarkdownTextPrimitive } from '@assistant-ui/react-markdown';
@@ -3089,13 +3089,15 @@ const fontSizeKeys = Object.keys(FontSizes);
3089
3089
  const lineHeightKeys = Object.keys(LineHeights);
3090
3090
  const borderRadiusKeys = Object.keys(BorderRadius);
3091
3091
  const sizeKeys = Object.keys(Sizes);
3092
+ const shadowKeys = Object.keys(Shadows).concat(Object.keys(Glows));
3092
3093
  const twMerge = extendTailwindMerge({
3093
3094
  extend: {
3094
3095
  theme: {
3095
3096
  color: colorKeys,
3096
3097
  spacing: spacingKeys,
3097
3098
  radius: borderRadiusKeys,
3098
- leading: lineHeightKeys
3099
+ leading: lineHeightKeys,
3100
+ shadow: shadowKeys
3099
3101
  },
3100
3102
  classGroups: {
3101
3103
  "font-size": [{ text: fontSizeKeys }],
@@ -3119,47 +3121,44 @@ const formElementSizes = {
3119
3121
  md: "h-form-md",
3120
3122
  lg: "h-form-lg"
3121
3123
  };
3122
- const formElementFocus = "focus:outline focus:outline-1 focus:outline-accent1";
3123
- const formElementFocusWithin = "focus-within:outline focus-within:outline-1 focus-within:outline-accent1 focus-within:-outline-offset-2";
3124
+ const formElementFocus = "focus:outline-none focus:ring-1 focus:ring-accent1 focus:shadow-focus-ring transition-shadow duration-normal";
3125
+ const formElementFocusWithin = "focus-within:outline-none focus-within:ring-1 focus-within:ring-accent1 focus-within:shadow-focus-ring transition-shadow duration-normal";
3124
3126
  const formElementRadius = "rounded-md";
3125
3127
 
3126
- const sizeClasses$1 = {
3128
+ const sizeClasses$2 = {
3127
3129
  sm: `${formElementSizes.sm} gap-0.5`,
3128
3130
  md: `${formElementSizes.md} gap-1`,
3129
3131
  lg: `${formElementSizes.lg} gap-2`
3130
3132
  };
3131
3133
  const variantClasses$2 = {
3132
- default: "bg-surface2 hover:bg-surface4 text-neutral3 hover:text-neutral6 disabled:opacity-50",
3133
- light: "bg-surface3 hover:bg-surface5 text-neutral6 disabled:opacity-50",
3134
- outline: "bg-transparent hover:bg-surface2 text-neutral3 hover:text-neutral6 disabled:opacity-50",
3135
- ghost: "bg-transparent border-transparent hover:bg-surface2 text-neutral3 hover:text-neutral6 disabled:opacity-50"
3134
+ default: "bg-surface2 hover:bg-surface4 text-neutral3 hover:text-neutral6 disabled:opacity-50 disabled:cursor-not-allowed",
3135
+ light: "bg-surface3 hover:bg-surface5 text-neutral6 disabled:opacity-50 disabled:cursor-not-allowed",
3136
+ outline: "bg-transparent hover:bg-surface2 text-neutral3 hover:text-neutral6 disabled:opacity-50 disabled:cursor-not-allowed",
3137
+ ghost: "bg-transparent border-transparent hover:bg-surface2 text-neutral3 hover:text-neutral6 disabled:opacity-50 disabled:cursor-not-allowed",
3138
+ primary: "bg-accent1 hover:bg-accent1/90 text-surface1 font-medium hover:shadow-glow-accent1 disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:shadow-none"
3136
3139
  };
3140
+ const baseButtonStyles = "border border-border1 px-2 text-ui-md inline-flex items-center justify-center rounded-md transition-all duration-normal ease-out-custom active:scale-[0.98]";
3137
3141
  function buttonVariants(options) {
3138
3142
  const variant = options?.variant || "default";
3139
3143
  const size = options?.size || "md";
3140
- return cn(
3141
- "bg-surface2 border border-border1 px-2 text-ui-md inline-flex items-center justify-center rounded-md border",
3142
- formElementFocus,
3143
- variantClasses$2[variant],
3144
- sizeClasses$1[size]
3145
- );
3144
+ return cn(baseButtonStyles, formElementFocus, variantClasses$2[variant], sizeClasses$2[size]);
3146
3145
  }
3147
3146
  const Button = React__default.forwardRef(
3148
- ({ className, as, size = "md", variant = "default", ...props }, ref) => {
3147
+ ({ className, as, size = "md", variant = "default", disabled, ...props }, ref) => {
3149
3148
  const Component = as || "button";
3150
3149
  return /* @__PURE__ */ jsx(
3151
3150
  Component,
3152
3151
  {
3153
3152
  ref,
3153
+ disabled,
3154
3154
  className: cn(
3155
- "bg-surface2 border border-border1 px-2 text-ui-md inline-flex items-center justify-center rounded-md border",
3155
+ baseButtonStyles,
3156
3156
  formElementFocus,
3157
3157
  variantClasses$2[variant],
3158
- sizeClasses$1[size],
3159
- className,
3160
- {
3161
- "cursor-not-allowed": props.disabled
3162
- }
3158
+ sizeClasses$2[size],
3159
+ // Remove active scale when disabled
3160
+ disabled && "active:scale-100",
3161
+ className
3163
3162
  ),
3164
3163
  ...props
3165
3164
  }
@@ -3214,17 +3213,36 @@ const Txt = ({ as: Root = "p", className, variant = "ui-md", font, ...props }) =
3214
3213
  return /* @__PURE__ */ jsx(Root, { className: cn(variants[variant], font && fonts[font], className), ...props });
3215
3214
  };
3216
3215
 
3217
- const sizeClasses = {
3216
+ const transitions = {
3217
+ // For color changes (background, text, border)
3218
+ colors: "transition-colors duration-normal ease-out-custom",
3219
+ // For transform changes (scale, translate, rotate)
3220
+ transform: "transition-transform duration-normal ease-out-custom",
3221
+ // For all property changes
3222
+ all: "transition-all duration-normal ease-out-custom",
3223
+ // For opacity changes
3224
+ opacity: "transition-opacity duration-normal ease-out-custom"};
3225
+ const focusRing = {
3226
+ // Focus visible only (keyboard navigation)
3227
+ visible: "focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-accent1 focus-visible:shadow-focus-ring"
3228
+ };
3229
+
3230
+ const sizeClasses$1 = {
3218
3231
  sm: "h-avatar-sm w-avatar-sm",
3219
3232
  md: "h-avatar-md w-avatar-md",
3220
3233
  lg: "h-avatar-lg w-avatar-lg"
3221
3234
  };
3222
- const Avatar = ({ src, name, size = "sm" }) => {
3235
+ const Avatar = ({ src, name, size = "sm", interactive = false }) => {
3223
3236
  return /* @__PURE__ */ jsx(
3224
3237
  "div",
3225
3238
  {
3226
- className: `${sizeClasses[size]} border border-border1 bg-surface3 shrink-0 overflow-hidden rounded-full flex items-center justify-center`,
3227
- children: src ? /* @__PURE__ */ jsx("img", { src, alt: name, className: "h-full w-full object-cover" }) : /* @__PURE__ */ jsx(Txt, { variant: "ui-md", className: "text-center", children: name[0].toUpperCase() })
3239
+ className: cn(
3240
+ sizeClasses$1[size],
3241
+ "border border-border1 bg-surface3 shrink-0 overflow-hidden rounded-full flex items-center justify-center",
3242
+ transitions.all,
3243
+ interactive && "cursor-pointer hover:scale-105 hover:border-neutral2 hover:shadow-sm"
3244
+ ),
3245
+ children: src ? /* @__PURE__ */ jsx("img", { src, alt: name, className: "h-full w-full object-cover" }) : /* @__PURE__ */ jsx(Txt, { variant: "ui-md", className: "text-center text-neutral4", children: name[0].toUpperCase() })
3228
3246
  }
3229
3247
  );
3230
3248
  };
@@ -4289,21 +4307,33 @@ const AgentNetworkCoinIcon = (props) => /* @__PURE__ */ jsxs("svg", { width: "12
4289
4307
  ] });
4290
4308
 
4291
4309
  const variantClasses$1 = {
4292
- warning: "bg-yellow-900/20 border border-yellow-200 text-yellow-200",
4293
- destructive: "bg-red-900/20 border border-red-200 text-red-200",
4294
- info: "bg-blue-900/20 border border-blue-200 text-blue-200"
4310
+ warning: "bg-accent6Darker border-accent6/30 text-accent6",
4311
+ destructive: "bg-accent2Darker border-accent2/30 text-accent2",
4312
+ info: "bg-accent5Darker border-accent5/30 text-accent5"
4295
4313
  };
4296
4314
  const variantIcons = {
4297
4315
  warning: TriangleAlert,
4298
4316
  destructive: AlertCircle,
4299
4317
  info: InfoIcon$1
4300
4318
  };
4301
- const Alert = ({ children, variant = "destructive" }) => {
4319
+ const Alert = ({ children, variant = "destructive", className }) => {
4302
4320
  const Ico = variantIcons[variant];
4303
- return /* @__PURE__ */ jsx("div", { className: cn(variantClasses$1[variant], "p-2 rounded-md"), children: /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-2", children: [
4304
- /* @__PURE__ */ jsx(Icon, { className: "mt-0.5", children: /* @__PURE__ */ jsx(Ico, {}) }),
4305
- /* @__PURE__ */ jsx("div", { children })
4306
- ] }) });
4321
+ return /* @__PURE__ */ jsx(
4322
+ "div",
4323
+ {
4324
+ className: cn(
4325
+ variantClasses$1[variant],
4326
+ "p-3 rounded-md border shadow-sm",
4327
+ transitions.all,
4328
+ "animate-in fade-in-0 slide-in-from-top-2 duration-200",
4329
+ className
4330
+ ),
4331
+ children: /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-2", children: [
4332
+ /* @__PURE__ */ jsx(Icon, { className: "mt-0.5 flex-shrink-0", children: /* @__PURE__ */ jsx(Ico, {}) }),
4333
+ /* @__PURE__ */ jsx("div", { className: "text-neutral4", children })
4334
+ ] })
4335
+ }
4336
+ );
4307
4337
  };
4308
4338
  const AlertTitle = ({ children, as: As = "h5" }) => {
4309
4339
  return /* @__PURE__ */ jsx(Txt, { as: As, variant: "ui-md", className: "font-semibold", children });
@@ -4313,24 +4343,33 @@ const AlertDescription = ({ children, as: As = "p" }) => {
4313
4343
  };
4314
4344
 
4315
4345
  const variantClasses = {
4346
+ default: "text-neutral3 bg-surface4",
4347
+ success: "text-accent1 bg-accent1Dark",
4348
+ error: "text-accent2 bg-accent2Dark",
4349
+ info: "text-accent5 bg-accent5Dark",
4350
+ warning: "text-accent6 bg-accent6Dark"
4351
+ };
4352
+ const iconClasses = {
4316
4353
  default: "text-neutral3",
4317
4354
  success: "text-accent1",
4318
4355
  error: "text-accent2",
4319
- info: "text-accent3"
4356
+ info: "text-accent5",
4357
+ warning: "text-accent6"
4320
4358
  };
4321
4359
  const Badge = ({ icon, variant = "default", className, children, ...props }) => {
4322
4360
  return /* @__PURE__ */ jsxs(
4323
4361
  "div",
4324
4362
  {
4325
4363
  className: cn(
4326
- "font-mono bg-surface4 text-ui-sm gap-1 h-badge-default inline-flex items-center rounded-md shrink-0",
4364
+ "font-mono text-ui-sm gap-1 h-badge-default inline-flex items-center rounded-md shrink-0",
4365
+ transitions.colors,
4327
4366
  icon ? "pl-1 pr-1.5" : "px-1.5",
4328
- icon || variant === "default" ? "text-neutral5" : variantClasses[variant],
4367
+ variant === "default" && icon ? "bg-surface4 text-neutral5" : variantClasses[variant],
4329
4368
  className
4330
4369
  ),
4331
4370
  ...props,
4332
4371
  children: [
4333
- icon && /* @__PURE__ */ jsx("span", { className: variantClasses[variant], children: /* @__PURE__ */ jsx(Icon, { children: icon }) }),
4372
+ icon && /* @__PURE__ */ jsx("span", { className: iconClasses[variant], children: /* @__PURE__ */ jsx(Icon, { children: icon }) }),
4334
4373
  children
4335
4374
  ]
4336
4375
  }
@@ -4433,20 +4472,34 @@ function CopyButton({
4433
4472
  iconSize = "default",
4434
4473
  className
4435
4474
  }) {
4436
- const { handleCopy } = useCopyToClipboard({
4475
+ const [copied, setCopied] = useState(false);
4476
+ const { handleCopy: originalHandleCopy } = useCopyToClipboard({
4437
4477
  text: content,
4438
4478
  copyMessage
4439
4479
  });
4480
+ const handleCopy = () => {
4481
+ originalHandleCopy();
4482
+ setCopied(true);
4483
+ setTimeout(() => setCopied(false), 2e3);
4484
+ };
4440
4485
  return /* @__PURE__ */ jsxs(Tooltip, { children: [
4441
- /* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx("button", { onClick: handleCopy, type: "button", className, children: /* @__PURE__ */ jsx(
4442
- Icon,
4486
+ /* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx(
4487
+ "button",
4443
4488
  {
4444
- className: "transition-colors hover:bg-surface4 rounded-lg text-neutral3 hover:text-neutral6",
4445
- size: iconSize,
4446
- children: /* @__PURE__ */ jsx(CopyIcon, {})
4489
+ onClick: handleCopy,
4490
+ type: "button",
4491
+ className: cn("rounded-lg p-1", transitions.all, focusRing.visible, "hover:bg-surface4", className),
4492
+ children: /* @__PURE__ */ jsx(
4493
+ Icon,
4494
+ {
4495
+ className: cn("text-neutral3", transitions.all, "hover:text-neutral6", copied && "text-accent1"),
4496
+ size: iconSize,
4497
+ children: copied ? /* @__PURE__ */ jsx(CheckIcon$1, {}) : /* @__PURE__ */ jsx(CopyIcon, {})
4498
+ }
4499
+ )
4447
4500
  }
4448
- ) }) }),
4449
- /* @__PURE__ */ jsx(TooltipContent, { children: tooltip })
4501
+ ) }),
4502
+ /* @__PURE__ */ jsx(TooltipContent, { children: copied ? "Copied!" : tooltip })
4450
4503
  ] });
4451
4504
  }
4452
4505
 
@@ -4549,7 +4602,9 @@ const DialogOverlay = React.forwardRef(({ className, ...props }, ref) => /* @__P
4549
4602
  {
4550
4603
  ref,
4551
4604
  className: cn(
4552
- "fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
4605
+ "fixed inset-0 z-50 bg-overlay backdrop-blur-sm",
4606
+ "data-[state=open]:animate-in data-[state=closed]:animate-out",
4607
+ "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
4553
4608
  className
4554
4609
  ),
4555
4610
  ...props
@@ -4563,16 +4618,35 @@ const DialogContent = React.forwardRef(({ className, children, ...props }, ref)
4563
4618
  {
4564
4619
  ref,
4565
4620
  className: cn(
4566
- "fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border border-border1 bg-surface3 py-6 shadow-lg duration-200 rounded-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%]",
4621
+ "fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%]",
4622
+ "gap-4 border border-border1 bg-surface3 py-6 shadow-dialog rounded-lg",
4623
+ "duration-slow",
4624
+ "data-[state=open]:animate-in data-[state=closed]:animate-out",
4625
+ "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
4626
+ "data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95",
4627
+ "data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%]",
4628
+ "data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%]",
4567
4629
  className
4568
4630
  ),
4569
4631
  ...props,
4570
4632
  children: [
4571
4633
  children,
4572
- /* @__PURE__ */ jsxs(DialogPrimitive.Close, { className: "absolute right-4 top-4 rounded-sm opacity-70 transition-opacity hover:opacity-100 disabled:pointer-events-none data-[state=open]:bg-surface5 data-[state=open]:text-neutral3", children: [
4573
- /* @__PURE__ */ jsx(X, { className: "h-4 w-4" }),
4574
- /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Close" })
4575
- ] })
4634
+ /* @__PURE__ */ jsxs(
4635
+ DialogPrimitive.Close,
4636
+ {
4637
+ className: cn(
4638
+ "absolute right-4 top-4 rounded-md p-1",
4639
+ "text-neutral3 hover:text-neutral6 hover:bg-surface4",
4640
+ "transition-all duration-normal ease-out-custom",
4641
+ "focus:outline-none focus:ring-1 focus:ring-accent1 focus:shadow-focus-ring",
4642
+ "disabled:pointer-events-none"
4643
+ ),
4644
+ children: [
4645
+ /* @__PURE__ */ jsx(X, { className: "h-4 w-4" }),
4646
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Close" })
4647
+ ]
4648
+ }
4649
+ )
4576
4650
  ]
4577
4651
  }
4578
4652
  )
@@ -5784,7 +5858,21 @@ function WorkflowRunProvider({
5784
5858
  }
5785
5859
 
5786
5860
  function Skeleton({ className, ...props }) {
5787
- return /* @__PURE__ */ jsx("div", { className: cn("animate-pulse rounded-md bg-surface4/50", className), ...props });
5861
+ return /* @__PURE__ */ jsx(
5862
+ "div",
5863
+ {
5864
+ className: cn(
5865
+ "rounded-md bg-surface4 relative overflow-hidden",
5866
+ // Shimmer effect using pseudo-element
5867
+ "before:absolute before:inset-0",
5868
+ "before:translate-x-[-100%]",
5869
+ "before:animate-[shimmer_2s_infinite]",
5870
+ "before:bg-gradient-to-r before:from-transparent before:via-surface5/20 before:to-transparent",
5871
+ className
5872
+ ),
5873
+ ...props
5874
+ }
5875
+ );
5788
5876
  }
5789
5877
 
5790
5878
  const lodashTitleCase = (str) => {
@@ -6182,11 +6270,40 @@ const constructNodesAndEdges = ({
6182
6270
  };
6183
6271
 
6184
6272
  const Collapsible = CollapsiblePrimitive.Root;
6185
- const CollapsibleTrigger = (props) => {
6186
- const { className, ...rest } = props;
6187
- return /* @__PURE__ */ jsx(CollapsiblePrimitive.CollapsibleTrigger, { className: cn("-outline-offset-2", className), ...rest });
6188
- };
6189
- const CollapsibleContent = CollapsiblePrimitive.CollapsibleContent;
6273
+ const CollapsibleTrigger = React__default.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsx(
6274
+ CollapsiblePrimitive.CollapsibleTrigger,
6275
+ {
6276
+ ref,
6277
+ className: cn(
6278
+ "-outline-offset-2",
6279
+ transitions.colors,
6280
+ focusRing.visible,
6281
+ "hover:text-neutral5",
6282
+ "[&>svg]:transition-transform [&>svg]:duration-normal [&>svg]:ease-out-custom",
6283
+ "[&[data-state=open]>svg]:rotate-90",
6284
+ className
6285
+ ),
6286
+ ...props,
6287
+ children
6288
+ }
6289
+ ));
6290
+ CollapsibleTrigger.displayName = CollapsiblePrimitive.CollapsibleTrigger.displayName;
6291
+ const CollapsibleContent = React__default.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsx(
6292
+ CollapsiblePrimitive.CollapsibleContent,
6293
+ {
6294
+ ref,
6295
+ className: cn(
6296
+ "overflow-hidden",
6297
+ "data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:slide-in-from-top-1",
6298
+ "data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:slide-out-to-top-1",
6299
+ "duration-normal ease-out-custom",
6300
+ className
6301
+ ),
6302
+ ...props,
6303
+ children
6304
+ }
6305
+ ));
6306
+ CollapsibleContent.displayName = CollapsiblePrimitive.CollapsibleContent.displayName;
6190
6307
 
6191
6308
  const BADGE_COLORS = {
6192
6309
  sleep: "#A855F7",
@@ -6336,13 +6453,14 @@ const ScrollBar = React.forwardRef(({ className, orientation = "vertical", ...pr
6336
6453
  ref,
6337
6454
  orientation,
6338
6455
  className: cn(
6339
- "flex touch-none select-none transition-colors",
6456
+ "flex touch-none select-none transition-all duration-normal ease-out-custom",
6457
+ "opacity-0 hover:opacity-100 data-[state=visible]:opacity-100",
6340
6458
  orientation === "vertical" && "h-full w-2.5 border-l border-l-transparent p-px",
6341
6459
  orientation === "horizontal" && "h-2.5 flex-col border-t border-t-transparent p-px",
6342
6460
  className
6343
6461
  ),
6344
6462
  ...props,
6345
- children: /* @__PURE__ */ jsx(ScrollAreaPrimitive.ScrollAreaThumb, { className: "relative flex-1 rounded-full bg-border1" })
6463
+ children: /* @__PURE__ */ jsx(ScrollAreaPrimitive.ScrollAreaThumb, { className: "relative flex-1 rounded-full bg-neutral2 hover:bg-neutral3 transition-colors duration-normal" })
6346
6464
  }
6347
6465
  ));
6348
6466
  ScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName;
@@ -6479,16 +6597,22 @@ const cva = (base, config)=>(props)=>{
6479
6597
 
6480
6598
  const inputVariants = cva(
6481
6599
  cn(
6482
- "flex w-full text-neutral6 border bg-transparent shadow-sm transition-colors disabled:cursor-not-allowed disabled:opacity-50",
6600
+ // Base styles with enhanced transitions
6601
+ "flex w-full text-neutral6 border bg-transparent",
6602
+ "transition-all duration-normal ease-out-custom",
6603
+ "disabled:cursor-not-allowed disabled:opacity-50",
6604
+ // Better placeholder styling
6605
+ "placeholder:text-neutral2 placeholder:transition-opacity placeholder:duration-normal",
6606
+ "focus:placeholder:opacity-70",
6483
6607
  formElementRadius,
6484
6608
  formElementFocus
6485
6609
  ),
6486
6610
  {
6487
6611
  variants: {
6488
6612
  variant: {
6489
- default: "border border-border1 placeholder:text-neutral3",
6490
- filled: "border bg-inputFill border-border1 placeholder:text-neutral3",
6491
- unstyled: "border-0 bg-transparent placeholder:text-neutral3"
6613
+ default: "border border-border1 hover:border-border2",
6614
+ filled: "border bg-surface2 border-border1 hover:border-border2",
6615
+ unstyled: "border-0 bg-transparent shadow-none focus:shadow-none focus:ring-0"
6492
6616
  },
6493
6617
  size: {
6494
6618
  sm: `${formElementSizes.sm} px-2 text-ui-sm`,
@@ -6503,14 +6627,20 @@ const inputVariants = cva(
6503
6627
  }
6504
6628
  );
6505
6629
  const Input = React.forwardRef(
6506
- ({ className, size, testId, variant, type, ...props }, ref) => {
6630
+ ({ className, size, testId, variant, type, error, ...props }, ref) => {
6507
6631
  return /* @__PURE__ */ jsx(
6508
6632
  "input",
6509
6633
  {
6510
6634
  type,
6511
- className: cn(className, inputVariants({ variant, size, className })),
6635
+ className: cn(
6636
+ inputVariants({ variant, size }),
6637
+ // Error state styling
6638
+ error && "border-error focus:ring-error focus:shadow-glow-accent2",
6639
+ className
6640
+ ),
6512
6641
  "data-testid": testId,
6513
6642
  ref,
6643
+ "aria-invalid": error,
6514
6644
  ...props
6515
6645
  }
6516
6646
  );
@@ -6558,11 +6688,27 @@ const Checkbox = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__
6558
6688
  {
6559
6689
  ref,
6560
6690
  className: cn(
6561
- "peer h-4 w-4 shrink-0 rounded-sm border border-neutral6 shadow disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-neutral6 data-[state=checked]:text-surface2",
6691
+ "peer h-4 w-4 shrink-0 rounded-sm border border-neutral3",
6692
+ "shadow-sm",
6693
+ transitions.all,
6694
+ "hover:border-neutral5 hover:shadow-md",
6695
+ formElementFocus,
6696
+ "disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:border-neutral3 disabled:hover:shadow-sm",
6697
+ "data-[state=checked]:bg-accent1 data-[state=checked]:border-accent1 data-[state=checked]:text-surface1",
6698
+ "data-[state=checked]:shadow-glow-accent1",
6562
6699
  className
6563
6700
  ),
6564
6701
  ...props,
6565
- children: /* @__PURE__ */ jsx(CheckboxPrimitive.Indicator, { className: cn("flex items-center justify-center text-current"), children: /* @__PURE__ */ jsx(Check, { className: "h-4 w-4" }) })
6702
+ children: /* @__PURE__ */ jsx(
6703
+ CheckboxPrimitive.Indicator,
6704
+ {
6705
+ className: cn(
6706
+ "flex items-center justify-center text-current",
6707
+ "data-[state=checked]:animate-in data-[state=checked]:zoom-in-50 data-[state=checked]:duration-150"
6708
+ ),
6709
+ children: /* @__PURE__ */ jsx(Check, { className: "h-3.5 w-3.5 stroke-[3]" })
6710
+ }
6711
+ )
6566
6712
  }
6567
6713
  ));
6568
6714
  Checkbox.displayName = CheckboxPrimitive.Root.displayName;
@@ -6665,13 +6811,15 @@ const SelectTrigger = React.forwardRef(
6665
6811
  "flex w-full items-center justify-between border border-border1 bg-transparent py-2 shadow-sm placeholder:text-neutral3 disabled:cursor-not-allowed disabled:opacity-50",
6666
6812
  formElementRadius,
6667
6813
  formElementFocus,
6814
+ transitions.all,
6815
+ "hover:border-neutral2",
6668
6816
  selectTriggerSizeClasses[size],
6669
6817
  className
6670
6818
  ),
6671
6819
  ...props,
6672
6820
  children: [
6673
6821
  children,
6674
- /* @__PURE__ */ jsx(SelectPrimitive.Icon, { asChild: true, children: /* @__PURE__ */ jsx(ChevronDown, { className: "h-4 w-4 opacity-50" }) })
6822
+ /* @__PURE__ */ jsx(SelectPrimitive.Icon, { asChild: true, children: /* @__PURE__ */ jsx(ChevronDown, { className: cn("h-4 w-4 text-neutral3", transitions.colors) }) })
6675
6823
  ]
6676
6824
  }
6677
6825
  )
@@ -6706,12 +6854,17 @@ const SelectItem = React.forwardRef(({ className, children, ...props }, ref) =>
6706
6854
  {
6707
6855
  ref,
6708
6856
  className: cn(
6709
- "relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-2 pr-8 text-neutral5 text-sm focus:bg-surface5 focus:text-neutral5 data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
6857
+ "relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-2 pr-8 text-neutral5 text-sm",
6858
+ transitions.colors,
6859
+ "hover:bg-surface5 hover:text-neutral5",
6860
+ "focus:bg-surface5 focus:text-neutral5",
6861
+ "data-[state=checked]:bg-accent1Dark data-[state=checked]:text-accent1",
6862
+ "data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
6710
6863
  className
6711
6864
  ),
6712
6865
  ...props,
6713
6866
  children: [
6714
- /* @__PURE__ */ jsx("span", { className: "absolute right-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx(SelectPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(Check, { className: "h-4 w-4" }) }) }),
6867
+ /* @__PURE__ */ jsx("span", { className: "absolute right-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx(SelectPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(Check, { className: "h-4 w-4 text-accent1" }) }) }),
6715
6868
  /* @__PURE__ */ jsx(SelectPrimitive.ItemText, { children })
6716
6869
  ]
6717
6870
  }
@@ -6892,7 +7045,13 @@ function SearchField({ onReset, ...props }) {
6892
7045
  {
6893
7046
  type: "button",
6894
7047
  onClick: onReset,
6895
- className: cn("absolute top-1/2 right-2 -translate-y-1/2 p-1", "[&:hover>svg]:text-neutral5"),
7048
+ className: cn(
7049
+ "absolute top-1/2 right-2 -translate-y-1/2 p-1 rounded",
7050
+ transitions.all,
7051
+ "hover:bg-surface4",
7052
+ "[&>svg]:transition-colors [&>svg]:duration-normal",
7053
+ "[&:hover>svg]:text-neutral5"
7054
+ ),
6896
7055
  children: /* @__PURE__ */ jsx(XIcon, { className: "text-neutral3 w-[1rem] h-[1rem]" })
6897
7056
  }
6898
7057
  )
@@ -7946,11 +8105,26 @@ const RadioGroupItem = React.forwardRef(({ className, ...props }, ref) => {
7946
8105
  {
7947
8106
  ref,
7948
8107
  className: cn(
7949
- "aspect-square h-4 w-4 rounded-full border border-neutral6 text-neutral6 disabled:cursor-not-allowed disabled:opacity-50",
8108
+ "aspect-square h-4 w-4 rounded-full border border-neutral3 text-neutral6",
8109
+ "shadow-sm",
8110
+ transitions.all,
8111
+ "hover:border-neutral5 hover:shadow-md",
8112
+ formElementFocus,
8113
+ "disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:border-neutral3 disabled:hover:shadow-sm",
8114
+ "data-[state=checked]:border-accent1 data-[state=checked]:shadow-glow-accent1",
7950
8115
  className
7951
8116
  ),
7952
8117
  ...props,
7953
- children: /* @__PURE__ */ jsx(RadioGroupPrimitive.Indicator, { className: "flex items-center justify-center", children: /* @__PURE__ */ jsx(Circle, { className: "h-2.5 w-2.5 fill-current text-current" }) })
8118
+ children: /* @__PURE__ */ jsx(
8119
+ RadioGroupPrimitive.Indicator,
8120
+ {
8121
+ className: cn(
8122
+ "flex items-center justify-center",
8123
+ "data-[state=checked]:animate-in data-[state=checked]:zoom-in-50 data-[state=checked]:duration-150"
8124
+ ),
8125
+ children: /* @__PURE__ */ jsx(Circle, { className: "h-2 w-2 fill-accent1 text-accent1" })
8126
+ }
8127
+ )
7954
8128
  }
7955
8129
  );
7956
8130
  });
@@ -9099,11 +9273,29 @@ const Slider = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ *
9099
9273
  SliderPrimitive.Root,
9100
9274
  {
9101
9275
  ref,
9102
- className: cn("relative flex w-full touch-none select-none items-center", className),
9276
+ className: cn("relative flex w-full touch-none select-none items-center group", className),
9103
9277
  ...props,
9104
9278
  children: [
9105
- /* @__PURE__ */ jsx(SliderPrimitive.Track, { className: "relative h-1.5 w-full grow overflow-hidden rounded-full bg-neutral6/20", children: /* @__PURE__ */ jsx(SliderPrimitive.Range, { className: "absolute h-full bg-neutral6/50" }) }),
9106
- /* @__PURE__ */ jsx(SliderPrimitive.Thumb, { className: "block h-4 w-4 rounded-full border border-neutral6/50 bg-white shadow transition-colors disabled:pointer-events-none disabled:opacity-50" })
9279
+ /* @__PURE__ */ jsx(
9280
+ SliderPrimitive.Track,
9281
+ {
9282
+ className: cn("relative h-1.5 w-full grow overflow-hidden rounded-full bg-neutral2", transitions.colors),
9283
+ children: /* @__PURE__ */ jsx(SliderPrimitive.Range, { className: cn("absolute h-full bg-accent1", transitions.all) })
9284
+ }
9285
+ ),
9286
+ /* @__PURE__ */ jsx(
9287
+ SliderPrimitive.Thumb,
9288
+ {
9289
+ className: cn(
9290
+ "block h-4 w-4 rounded-full border-2 border-accent1 bg-white shadow-md",
9291
+ "transition-all duration-normal ease-out-custom",
9292
+ formElementFocus,
9293
+ "hover:scale-110 hover:shadow-lg",
9294
+ "active:scale-95",
9295
+ "disabled:pointer-events-none disabled:opacity-50"
9296
+ )
9297
+ }
9298
+ )
9107
9299
  ]
9108
9300
  }
9109
9301
  ));
@@ -9568,20 +9760,31 @@ const WorkflowRunDetail = ({
9568
9760
  }
9569
9761
  };
9570
9762
 
9571
- const EmptyState = ({
9763
+ function EmptyState({
9572
9764
  iconSlot,
9573
9765
  titleSlot,
9574
9766
  descriptionSlot,
9575
9767
  actionSlot,
9576
- as: Component = "div"
9577
- }) => {
9578
- return /* @__PURE__ */ jsxs("div", { className: "flex w-[340px] flex-col items-center justify-center text-center", children: [
9579
- /* @__PURE__ */ jsx("div", { className: "h-auto [&>svg]:w-[126px]", children: iconSlot }),
9580
- /* @__PURE__ */ jsx(Component, { className: "text-neutral6 pt-8 font-serif text-header-xl font-semibold", children: titleSlot }),
9581
- /* @__PURE__ */ jsx(Txt, { variant: "ui-lg", className: "text-neutral3 pb-8", children: descriptionSlot }),
9582
- actionSlot
9583
- ] });
9584
- };
9768
+ className,
9769
+ as: HeadingTag = "h3"
9770
+ }) {
9771
+ return /* @__PURE__ */ jsxs(
9772
+ "div",
9773
+ {
9774
+ className: cn(
9775
+ "flex flex-col items-center justify-center text-center py-10 px-6",
9776
+ "transition-opacity duration-normal ease-out-custom",
9777
+ className
9778
+ ),
9779
+ children: [
9780
+ iconSlot && /* @__PURE__ */ jsx("div", { className: "mb-4", children: iconSlot }),
9781
+ /* @__PURE__ */ jsx(HeadingTag, { className: "font-medium text-neutral5 text-ui-md", children: titleSlot }),
9782
+ descriptionSlot && /* @__PURE__ */ jsx("p", { className: "mt-1.5 text-neutral3 text-ui-sm max-w-md", children: descriptionSlot }),
9783
+ actionSlot && /* @__PURE__ */ jsx("div", { className: "mt-5", children: actionSlot })
9784
+ ]
9785
+ }
9786
+ );
9787
+ }
9585
9788
 
9586
9789
  const rowSize = {
9587
9790
  default: "[&>tbody>tr]:h-table-row",
@@ -9591,14 +9794,14 @@ const Table = ({ className, children, size = "default", style }) => {
9591
9794
  return /* @__PURE__ */ jsx("table", { className: cn("w-full", rowSize[size], className), style, children });
9592
9795
  };
9593
9796
  const Thead = ({ className, children }) => {
9594
- return /* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsx("tr", { className: cn("h-table-header border-b border-border1 bg-surface2", className), children }) });
9797
+ return /* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsx("tr", { className: cn("h-table-header border-b border-border1 bg-surface2/80", className), children }) });
9595
9798
  };
9596
9799
  const Th = ({ className, children, ...props }) => {
9597
9800
  return /* @__PURE__ */ jsx(
9598
9801
  "th",
9599
9802
  {
9600
9803
  className: cn(
9601
- "text-neutral3 text-ui-sm h-full whitespace-nowrap text-left font-normal uppercase first:pl-3 last:pr-3",
9804
+ "text-neutral2 text-ui-xs h-full whitespace-nowrap text-left font-medium uppercase tracking-wide first:pl-3 last:pr-3",
9602
9805
  className
9603
9806
  ),
9604
9807
  ...props,
@@ -9620,7 +9823,12 @@ const Row = forwardRef(
9620
9823
  "tr",
9621
9824
  {
9622
9825
  className: cn(
9623
- "border-b border-border1 hover:bg-surface3 focus:bg-surface3 -outline-offset-2",
9826
+ "border-b border-border1",
9827
+ // Smooth hover transition
9828
+ "transition-colors duration-normal ease-out-custom",
9829
+ "hover:bg-surface3",
9830
+ // Focus state
9831
+ "focus:bg-surface3 focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent1/50",
9624
9832
  selected && "bg-surface4",
9625
9833
  onClick && "cursor-pointer",
9626
9834
  className
@@ -9933,10 +10141,12 @@ const Searchbar = ({ onSearch, label, placeholder, debounceMs = 300, size = "md"
9933
10141
  "border border-border1 flex w-full items-center gap-2 overflow-hidden pl-2 pr-1",
9934
10142
  formElementRadius,
9935
10143
  formElementFocusWithin,
10144
+ transitions.all,
10145
+ "hover:border-neutral2",
9936
10146
  searchbarSizeClasses[size]
9937
10147
  ),
9938
10148
  children: [
9939
- /* @__PURE__ */ jsx(SearchIcon, { className: "text-neutral3 h-4 w-4" }),
10149
+ /* @__PURE__ */ jsx(SearchIcon, { className: cn("text-neutral3 h-4 w-4", transitions.colors) }),
9940
10150
  /* @__PURE__ */ jsxs("div", { className: "flex-1", children: [
9941
10151
  /* @__PURE__ */ jsx("label", { htmlFor: id, className: "sr-only", children: label }),
9942
10152
  /* @__PURE__ */ jsx(
@@ -9946,7 +10156,7 @@ const Searchbar = ({ onSearch, label, placeholder, debounceMs = 300, size = "md"
9946
10156
  type: "text",
9947
10157
  placeholder,
9948
10158
  className: cn(
9949
- "bg-surface2 text-ui-md placeholder:text-icon-3 block w-full px-2 outline-none",
10159
+ "bg-transparent text-ui-md placeholder:text-neutral3 block w-full px-2 outline-none",
9950
10160
  searchbarSizeClasses[size]
9951
10161
  ),
9952
10162
  name: id,
@@ -10059,16 +10269,18 @@ const TabList = ({ children, variant = "default", className }) => {
10059
10269
  RadixTabs.List,
10060
10270
  {
10061
10271
  className: cn(
10062
- "flex items-center",
10272
+ "flex items-center relative",
10063
10273
  {
10064
10274
  // variant: default
10065
10275
  "text-ui-lg": variant === "default",
10066
10276
  "[&>button]:py-2 [&>button]:px-6 [&>button]:font-normal [&>button]:text-neutral3 [&>button]:flex-1 [&>button]:border-b [&>button]:border-border1": variant === "default",
10067
- "[&>button[data-state=active]]:text-neutral5 [&>button[data-state=active]]:transition-colors [&>button[data-state=active]]:duration-200 [&>button[data-state=active]]:border-neutral3": variant === "default",
10277
+ [`[&>button]:${transitions.colors} [&>button]:hover:text-neutral4`]: variant === "default",
10278
+ "[&>button[data-state=active]]:text-neutral5 [&>button[data-state=active]]:border-accent1": variant === "default",
10068
10279
  // variant: buttons
10069
10280
  "border border-border1 flex justify-stretch rounded-md overflow-hidden text-ui-md min-h-[2.5rem]": variant === "buttons",
10070
- "[&>button]:flex-1 [&>button]:py-2 [&>button]:px-4 [&>button]:text-neutral3": variant === "buttons",
10071
- "[&>button[data-state=active]]:text-neutral5 [&>button[data-state=active]]:bg-surface4": variant === "buttons"
10281
+ [`[&>button]:flex-1 [&>button]:py-2 [&>button]:px-4 [&>button]:text-neutral3 [&>button]:${transitions.all}`]: variant === "buttons",
10282
+ "[&>button]:hover:text-neutral4 [&>button]:hover:bg-surface3": variant === "buttons",
10283
+ "[&>button[data-state=active]]:text-neutral5 [&>button[data-state=active]]:bg-surface4 [&>button[data-state=active]]:shadow-inner": variant === "buttons"
10072
10284
  },
10073
10285
  className
10074
10286
  ),
@@ -10083,7 +10295,11 @@ const Tab = ({ children, value, onClick, onClose, className }) => {
10083
10295
  {
10084
10296
  value,
10085
10297
  className: cn(
10086
- "text-xs p-3 text-neutral3 data-[state=active]:text-neutral5 data-[state=active]:border-b-2 whitespace-nowrap flex-shrink-0 flex items-center justify-center gap-1.5",
10298
+ "text-xs p-3 text-neutral3 whitespace-nowrap flex-shrink-0 flex items-center justify-center gap-1.5",
10299
+ transitions.all,
10300
+ focusRing.visible,
10301
+ "hover:text-neutral4",
10302
+ "data-[state=active]:text-neutral5 data-[state=active]:border-b-2 data-[state=active]:border-accent1",
10087
10303
  className
10088
10304
  ),
10089
10305
  onClick,
@@ -10096,7 +10312,7 @@ const Tab = ({ children, value, onClick, onClose, className }) => {
10096
10312
  e.stopPropagation();
10097
10313
  onClose();
10098
10314
  },
10099
- className: "p-0.5 hover:bg-surface3 rounded transition-colors",
10315
+ className: cn("p-0.5 hover:bg-surface4 rounded", transitions.colors, "hover:text-neutral5"),
10100
10316
  "aria-label": "Close tab",
10101
10317
  children: /* @__PURE__ */ jsx(X, { className: "w-3 h-3" })
10102
10318
  }
@@ -10112,7 +10328,10 @@ const TabContent = ({ children, value, className }) => {
10112
10328
  {
10113
10329
  value,
10114
10330
  className: cn(
10115
- "grid py-3 overflow-y-auto ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:none",
10331
+ "grid py-3 overflow-y-auto ring-offset-background",
10332
+ focusRing.visible,
10333
+ "data-[state=active]:animate-in data-[state=active]:fade-in-0 data-[state=active]:duration-200",
10334
+ "data-[state=inactive]:animate-out data-[state=inactive]:fade-out-0 data-[state=inactive]:duration-150",
10116
10335
  className
10117
10336
  ),
10118
10337
  children
@@ -10164,21 +10383,27 @@ const TracingRunOptions = () => {
10164
10383
  ] });
10165
10384
  };
10166
10385
 
10167
- function Spinner({ color = "#fff", className }) {
10386
+ const sizeClasses = {
10387
+ sm: "w-4 h-4",
10388
+ md: "w-6 h-6",
10389
+ lg: "w-8 h-8"
10390
+ };
10391
+ function Spinner({ color, className, size = "md" }) {
10168
10392
  return /* @__PURE__ */ jsx(
10169
10393
  "svg",
10170
10394
  {
10171
- className: cn("animate-spin duration-700", className),
10395
+ className: cn("animate-spin", sizeClasses[size], className),
10396
+ style: { animationDuration: "800ms", animationTimingFunction: "cubic-bezier(0.4, 0, 0.2, 1)" },
10172
10397
  xmlns: "http://www.w3.org/2000/svg",
10173
10398
  width: "24",
10174
10399
  height: "24",
10175
10400
  viewBox: "0 0 24 24",
10176
10401
  fill: "none",
10177
10402
  stroke: "currentColor",
10178
- strokeWidth: "2",
10403
+ strokeWidth: "2.5",
10179
10404
  strokeLinecap: "round",
10180
10405
  strokeLinejoin: "round",
10181
- children: /* @__PURE__ */ jsx("path", { d: "M21 12a9 9 0 1 1-6.219-8.56", stroke: color })
10406
+ children: /* @__PURE__ */ jsx("path", { d: "M21 12a9 9 0 1 1-6.219-8.56", stroke: color || "currentColor", className: "text-accent1" })
10182
10407
  }
10183
10408
  );
10184
10409
  }
@@ -10513,59 +10738,84 @@ function Combobox({
10513
10738
  ]
10514
10739
  }
10515
10740
  ) }),
10516
- /* @__PURE__ */ jsx(PopoverContent, { className: "p-0 w-fit", align: "start", children: /* @__PURE__ */ jsxs("div", { className: "flex h-full w-full flex-col overflow-hidden rounded-md bg-surface3 text-neutral5", children: [
10517
- /* @__PURE__ */ jsxs("div", { className: "flex items-center border-b px-3 py-2", children: [
10518
- /* @__PURE__ */ jsx(Search, { className: "mr-2 h-4 w-4 shrink-0 opacity-50" }),
10519
- /* @__PURE__ */ jsx(
10520
- "input",
10521
- {
10522
- ref: inputRef,
10523
- className: "flex h-8 w-full rounded-md bg-transparent py-1 text-sm placeholder:text-neutral3 disabled:cursor-not-allowed disabled:opacity-50 outline-none",
10524
- placeholder: searchPlaceholder,
10525
- value: search,
10526
- onChange: (e) => setSearch(e.target.value),
10527
- onKeyDown: handleKeyDown,
10528
- role: "combobox",
10529
- "aria-autocomplete": "list",
10530
- "aria-controls": "combobox-options",
10531
- "aria-expanded": open
10532
- }
10533
- )
10534
- ] }),
10535
- /* @__PURE__ */ jsx(
10536
- "div",
10537
- {
10538
- ref: listRef,
10539
- id: "combobox-options",
10540
- role: "listbox",
10541
- className: "max-h-dropdown-max-height overflow-y-auto overflow-x-hidden p-1",
10542
- children: filteredOptions.length === 0 ? /* @__PURE__ */ jsx("div", { className: "py-6 text-center text-sm", children: emptyText }) : filteredOptions.map((option, index) => {
10543
- const isSelected = value === option.value;
10544
- const isHighlighted = index === highlightedIndex;
10545
- return /* @__PURE__ */ jsxs(
10546
- "div",
10741
+ /* @__PURE__ */ jsx(PopoverContent, { className: "p-0 w-fit", align: "start", children: /* @__PURE__ */ jsxs(
10742
+ "div",
10743
+ {
10744
+ className: cn(
10745
+ "flex h-full w-full flex-col overflow-hidden rounded-md bg-surface3 text-neutral5",
10746
+ "shadow-elevated",
10747
+ "animate-in fade-in-0 zoom-in-95 duration-150"
10748
+ ),
10749
+ children: [
10750
+ /* @__PURE__ */ jsxs("div", { className: cn("flex items-center border-b border-border1 px-3 py-2", transitions.colors), children: [
10751
+ /* @__PURE__ */ jsx(Search, { className: cn("mr-2 h-4 w-4 shrink-0 text-neutral3", transitions.colors) }),
10752
+ /* @__PURE__ */ jsx(
10753
+ "input",
10547
10754
  {
10548
- role: "option",
10549
- "aria-selected": isSelected,
10755
+ ref: inputRef,
10550
10756
  className: cn(
10551
- "relative flex cursor-pointer select-none items-center rounded-sm px-2 py-1.5 text-sm transition-colors",
10552
- "hover:bg-surface5 hover:text-neutral5",
10553
- isHighlighted && "bg-surface5 text-neutral5",
10554
- isSelected && !isHighlighted && "bg-surface5/50"
10757
+ "flex h-8 w-full rounded-md bg-transparent py-1 text-sm",
10758
+ "placeholder:text-neutral3 disabled:cursor-not-allowed disabled:opacity-50",
10759
+ "outline-none",
10760
+ transitions.colors
10555
10761
  ),
10556
- onClick: () => handleSelect(option.value),
10557
- onMouseEnter: () => setHighlightedIndex(index),
10558
- children: [
10559
- /* @__PURE__ */ jsx(Check, { className: cn("mr-2 h-4 w-4", isSelected ? "opacity-100" : "opacity-0") }),
10560
- option.label
10561
- ]
10562
- },
10563
- option.value
10564
- );
10565
- })
10566
- }
10567
- )
10568
- ] }) })
10762
+ placeholder: searchPlaceholder,
10763
+ value: search,
10764
+ onChange: (e) => setSearch(e.target.value),
10765
+ onKeyDown: handleKeyDown,
10766
+ role: "combobox",
10767
+ "aria-autocomplete": "list",
10768
+ "aria-controls": "combobox-options",
10769
+ "aria-expanded": open
10770
+ }
10771
+ )
10772
+ ] }),
10773
+ /* @__PURE__ */ jsx(
10774
+ "div",
10775
+ {
10776
+ ref: listRef,
10777
+ id: "combobox-options",
10778
+ role: "listbox",
10779
+ className: "max-h-dropdown-max-height overflow-y-auto overflow-x-hidden p-1",
10780
+ children: filteredOptions.length === 0 ? /* @__PURE__ */ jsx("div", { className: "py-6 text-center text-sm text-neutral3", children: emptyText }) : filteredOptions.map((option, index) => {
10781
+ const isSelected = value === option.value;
10782
+ const isHighlighted = index === highlightedIndex;
10783
+ return /* @__PURE__ */ jsxs(
10784
+ "div",
10785
+ {
10786
+ role: "option",
10787
+ "aria-selected": isSelected,
10788
+ className: cn(
10789
+ "relative flex cursor-pointer select-none items-center rounded-sm px-2 py-1.5 text-sm",
10790
+ transitions.colors,
10791
+ "hover:bg-surface5 hover:text-neutral5",
10792
+ isHighlighted && "bg-surface5 text-neutral5",
10793
+ isSelected && !isHighlighted && "bg-accent1Dark text-accent1"
10794
+ ),
10795
+ onClick: () => handleSelect(option.value),
10796
+ onMouseEnter: () => setHighlightedIndex(index),
10797
+ children: [
10798
+ /* @__PURE__ */ jsx(
10799
+ Check,
10800
+ {
10801
+ className: cn(
10802
+ "mr-2 h-4 w-4",
10803
+ transitions.opacity,
10804
+ isSelected ? "opacity-100 text-accent1" : "opacity-0"
10805
+ )
10806
+ }
10807
+ ),
10808
+ option.label
10809
+ ]
10810
+ },
10811
+ option.value
10812
+ );
10813
+ })
10814
+ }
10815
+ )
10816
+ ]
10817
+ }
10818
+ ) })
10569
10819
  ] });
10570
10820
  }
10571
10821
 
@@ -14087,22 +14337,19 @@ function EntryListEntry({ entry, isSelected, onClick, children, columns }) {
14087
14337
  className: cn(
14088
14338
  "border-t text-neutral5 border-border1 last:border-b-0 text-ui-md",
14089
14339
  "[&:last-child>button]:rounded-b-lg",
14340
+ transitions.colors,
14090
14341
  {
14091
- "bg-surface5": isSelected
14342
+ "bg-accent1Dark": isSelected
14092
14343
  }
14093
14344
  ),
14094
14345
  children: /* @__PURE__ */ jsx(
14095
14346
  "button",
14096
14347
  {
14097
14348
  onClick: handleClick,
14098
- className: cn(
14099
- "grid w-full px-6 gap-6 text-left items-center min-h-12",
14100
- "focus-visible:outline-none focus-visible:shadow-[inset_0_0_0_1px_rgba(24,251,111,.75)]",
14101
- {
14102
- // hover effect only not for skeleton and selected
14103
- "hover:bg-surface4": entry && !isSelected
14104
- }
14105
- ),
14349
+ className: cn("grid w-full px-6 gap-6 text-left items-center min-h-12", transitions.colors, focusRing.visible, {
14350
+ // hover effect only not for skeleton and selected
14351
+ "hover:bg-surface4": entry && !isSelected
14352
+ }),
14106
14353
  style: { gridTemplateColumns: getColumnTemplate(columns) },
14107
14354
  disabled: !entry,
14108
14355
  children
@@ -14346,18 +14593,28 @@ function SideDialogRoot({
14346
14593
  }) {
14347
14594
  const isConfirmation = variant === "confirmation";
14348
14595
  return /* @__PURE__ */ jsx(DialogPrimitive.Root, { open: isOpen, onOpenChange: onClose, children: /* @__PURE__ */ jsxs(DialogPrimitive.Portal, { children: [
14349
- !isConfirmation && /* @__PURE__ */ jsx(DialogPrimitive.Overlay, { className: cn("bg-black top-0 bottom-0 right-0 left-0 fixed z-50 opacity-40") }),
14596
+ !isConfirmation && /* @__PURE__ */ jsx(
14597
+ DialogPrimitive.Overlay,
14598
+ {
14599
+ className: cn(
14600
+ "bg-overlay backdrop-blur-sm top-0 bottom-0 right-0 left-0 fixed z-50",
14601
+ "data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:duration-200",
14602
+ "data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:duration-150"
14603
+ )
14604
+ }
14605
+ ),
14350
14606
  /* @__PURE__ */ jsxs(
14351
14607
  DialogPrimitive.Content,
14352
14608
  {
14353
14609
  className: cn(
14354
- "fixed top-0 bottom-0 right-0 border-l border-border2 z-50 bg-surface2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 ",
14610
+ "fixed top-0 bottom-0 right-0 border-l border-border2 z-50 bg-surface2",
14611
+ "data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:slide-out-to-right-1/4 data-[state=closed]:duration-200",
14355
14612
  {
14356
14613
  "w-[75vw] 2xl:w-[65vw] 4xl:w-[55vw]": level === 1,
14357
14614
  "w-[70vw] 2xl:w-[59vw] 4xl:w-[48vw]": level === 2,
14358
14615
  "w-[65vw] 2xl:w-[53vw] 4xl:w-[41vw]": level === 3,
14359
- "data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:slide-in-from-right-1/4 shadow-[-3rem_0_2rem_0_rgba(0,0,0,0.75)]": !isConfirmation,
14360
- "bg-surface2/70": isConfirmation
14616
+ "data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:slide-in-from-right-1/4 data-[state=open]:duration-300 shadow-dialog": !isConfirmation,
14617
+ "bg-surface2/70 backdrop-blur-sm": isConfirmation
14361
14618
  },
14362
14619
  className
14363
14620
  ),
@@ -14370,8 +14627,9 @@ function SideDialogRoot({
14370
14627
  "button",
14371
14628
  {
14372
14629
  className: cn(
14373
- "flex appearance-none items-center justify-center rounded-bl-lg h-[3.5rem] w-[3.5rem] absolute top-0 left-[-3.5rem] bg-surface2 text-neutral4 border-l border-b border-border2",
14374
- "hover:surface5 hover:text-neutral5"
14630
+ "flex appearance-none items-center justify-center rounded-bl-lg h-[3.5rem] w-[3.5rem] absolute top-0 left-[-3.5rem] bg-surface2 text-neutral3 border-l border-b border-border2",
14631
+ transitions.all,
14632
+ "hover:bg-surface4 hover:text-neutral5"
14375
14633
  ),
14376
14634
  "aria-label": "Close",
14377
14635
  children: /* @__PURE__ */ jsx(ChevronsRightIcon, {})
@@ -15596,7 +15854,13 @@ const Switch = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ *
15596
15854
  SwitchPrimitives.Root,
15597
15855
  {
15598
15856
  className: cn(
15599
- "peer inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent shadow-sm transition-colors disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-accent4 data-[state=unchecked]:bg-input",
15857
+ "peer inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent",
15858
+ transitions.all,
15859
+ formElementFocus,
15860
+ "hover:brightness-110",
15861
+ "disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:brightness-100",
15862
+ "data-[state=checked]:bg-accent1 data-[state=checked]:shadow-glow-accent1",
15863
+ "data-[state=unchecked]:bg-neutral2",
15600
15864
  className
15601
15865
  ),
15602
15866
  ...props,
@@ -15605,7 +15869,10 @@ const Switch = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ *
15605
15869
  SwitchPrimitives.Thumb,
15606
15870
  {
15607
15871
  className: cn(
15608
- "pointer-events-none block h-4 w-4 rounded-full bg-white shadow-lg transition-transform data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0"
15872
+ "pointer-events-none block h-4 w-4 rounded-full bg-white shadow-md",
15873
+ "transition-all duration-normal ease-out-custom",
15874
+ "data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0",
15875
+ "data-[state=checked]:shadow-lg"
15609
15876
  )
15610
15877
  }
15611
15878
  )
@@ -16040,7 +16307,11 @@ const ThreadLink = ({ children, as: Component = "a", href, className, prefetch,
16040
16307
  href,
16041
16308
  prefetch,
16042
16309
  to,
16043
- className: cn("text-ui-sm flex h-full w-full flex-col justify-center font-medium cursor-pointer", className),
16310
+ className: cn(
16311
+ "text-ui-sm flex h-full w-full flex-col justify-center font-medium cursor-pointer",
16312
+ transitions.colors,
16313
+ className
16314
+ ),
16044
16315
  children
16045
16316
  }
16046
16317
  );
@@ -16053,8 +16324,10 @@ const ThreadItem = ({ children, isActive, className }) => {
16053
16324
  "li",
16054
16325
  {
16055
16326
  className: cn(
16056
- "border-b border-border1 hover:bg-surface3 group flex h-[54px] items-center justify-between gap-2 px-3 py-2",
16057
- isActive && "bg-surface4",
16327
+ "border-b border-border1 group flex h-[54px] items-center justify-between gap-2 px-3 py-2",
16328
+ transitions.colors,
16329
+ "hover:bg-surface3",
16330
+ isActive && "bg-accent1Dark",
16058
16331
  className
16059
16332
  ),
16060
16333
  children
@@ -16065,9 +16338,15 @@ const ThreadDeleteButton = ({ onClick }) => {
16065
16338
  return /* @__PURE__ */ jsx(
16066
16339
  Button,
16067
16340
  {
16068
- className: "shrink-0 border-none bg-transparent opacity-0 transition-all group-focus-within:opacity-100 group-hover:opacity-100",
16341
+ variant: "ghost",
16342
+ className: cn(
16343
+ "shrink-0 opacity-0",
16344
+ transitions.all,
16345
+ "group-focus-within:opacity-100 group-hover:opacity-100",
16346
+ "hover:bg-surface4 hover:text-accent2"
16347
+ ),
16069
16348
  onClick,
16070
- children: /* @__PURE__ */ jsx(Icon, { children: /* @__PURE__ */ jsx(X, { "aria-label": "delete thread", className: "text-neutral3" }) })
16349
+ children: /* @__PURE__ */ jsx(Icon, { children: /* @__PURE__ */ jsx(X, { "aria-label": "delete thread", className: "text-neutral3 hover:text-accent2 transition-colors" }) })
16071
16350
  }
16072
16351
  );
16073
16352
  };
@@ -16086,7 +16365,9 @@ const AlertDialogOverlay = React.forwardRef(({ className, ...props }, ref) => /*
16086
16365
  AlertDialogPrimitive.Overlay,
16087
16366
  {
16088
16367
  className: cn(
16089
- "fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
16368
+ "fixed inset-0 z-50 bg-overlay backdrop-blur-sm",
16369
+ "data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:duration-200",
16370
+ "data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:duration-150",
16090
16371
  className
16091
16372
  ),
16092
16373
  ...props,
@@ -16101,7 +16382,9 @@ const AlertDialogContent = React.forwardRef(({ className, ...props }, ref) => /*
16101
16382
  {
16102
16383
  ref,
16103
16384
  className: cn(
16104
- "fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border border-border1 bg-surface3 p-6 shadow-lg duration-200 rounded-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%]",
16385
+ "fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border border-border1 bg-surface3 p-6 shadow-dialog rounded-md",
16386
+ "data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] data-[state=open]:duration-200",
16387
+ "data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=closed]:duration-150",
16105
16388
  className
16106
16389
  ),
16107
16390
  ...props
@@ -17893,30 +18176,53 @@ function ProcessStepListItem({ stepId, step, isActive, position }) {
17893
18176
  return /* @__PURE__ */ jsxs(
17894
18177
  "div",
17895
18178
  {
17896
- className: cn("grid gap-6 grid-cols-[1fr_auto] py-3 px-4 rounded-lg", {
17897
- "border border-dashed border-gray-500": isActive
18179
+ className: cn("grid gap-6 grid-cols-[1fr_auto] py-3 px-4 rounded-lg", transitions.all, {
18180
+ "border border-dashed border-neutral2 bg-surface3": isActive
17898
18181
  }),
17899
18182
  children: [
17900
18183
  /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-[auto_1fr] gap-2", children: [
17901
- /* @__PURE__ */ jsxs("span", { className: "text-ui-md text-neutral5 min-w-6 flex justify-end", children: [
17902
- position,
17903
- "."
17904
- ] }),
18184
+ /* @__PURE__ */ jsxs(
18185
+ "span",
18186
+ {
18187
+ className: cn("text-ui-md min-w-6 flex justify-end", transitions.colors, {
18188
+ "text-neutral5": isActive || step.status === "success",
18189
+ "text-neutral3": !isActive && step.status !== "success"
18190
+ }),
18191
+ children: [
18192
+ position,
18193
+ "."
18194
+ ]
18195
+ }
18196
+ ),
17905
18197
  /* @__PURE__ */ jsxs("div", { children: [
17906
- /* @__PURE__ */ jsx("h4", { className: "text-ui-md text-neutral5", children: formatStepTitle(stepId) }),
17907
- step.description && /* @__PURE__ */ jsx("p", { className: "text-ui-md -mt-0.5", children: step.description })
18198
+ /* @__PURE__ */ jsx(
18199
+ "h4",
18200
+ {
18201
+ className: cn("text-ui-md", transitions.colors, {
18202
+ "text-neutral5": isActive || step.status === "success",
18203
+ "text-neutral3": !isActive && step.status !== "success"
18204
+ }),
18205
+ children: formatStepTitle(stepId)
18206
+ }
18207
+ ),
18208
+ step.description && /* @__PURE__ */ jsx("p", { className: "text-ui-md text-neutral2 -mt-0.5", children: step.description })
17908
18209
  ] })
17909
18210
  ] }),
17910
18211
  /* @__PURE__ */ jsx(
17911
18212
  "div",
17912
18213
  {
17913
- className: cn("w-[1.75rem] h-[1.75rem] rounded-full flex items-center justify-center self-center", {
17914
- "border border-gray-500 border-dashed": step.status === "pending",
17915
- "[&>svg]:text-white [&>svg]:w-[1rem] [&>svg]:h-[1rem]": step.status !== "running",
17916
- "w-[1.75rem] h-[1.75rem]": step.status === "running",
17917
- "bg-green-900": step.status === "success",
17918
- "bg-red-900": step.status === "failed"
17919
- }),
18214
+ className: cn(
18215
+ "w-[1.75rem] h-[1.75rem] rounded-full flex items-center justify-center self-center",
18216
+ transitions.all,
18217
+ {
18218
+ "border border-neutral2 border-dashed": step.status === "pending",
18219
+ "[&>svg]:text-white [&>svg]:w-[1rem] [&>svg]:h-[1rem]": step.status !== "running",
18220
+ "w-[1.75rem] h-[1.75rem]": step.status === "running",
18221
+ "bg-accent1Dark shadow-glow-accent1": step.status === "success",
18222
+ "bg-accent2Dark shadow-glow-accent2": step.status === "failed",
18223
+ "scale-110": step.status === "success" || step.status === "failed"
18224
+ }
18225
+ ),
17920
18226
  children: getStatusIcon(step.status)
17921
18227
  }
17922
18228
  )
@@ -17946,19 +18252,20 @@ function ProcessStepProgressBar({ steps }) {
17946
18252
  return /* @__PURE__ */ jsx(
17947
18253
  "div",
17948
18254
  {
17949
- className: cn("flex justify-end items-center relative h-[2rem] ", {
17950
- "bg-green-900": step.status === "success" && steps?.[idx - 1]?.status === "success"
18255
+ className: cn("flex justify-end items-center relative h-[2rem]", transitions.colors, {
18256
+ "bg-accent1Dark": step.status === "success" && steps?.[idx - 1]?.status === "success"
17951
18257
  }),
17952
18258
  children: /* @__PURE__ */ jsx(
17953
18259
  "div",
17954
18260
  {
17955
18261
  className: cn(
17956
18262
  "w-[2rem] h-[2rem] rounded-full flex items-center justify-center self-center absolute right-0 translate-x-[50%] bg-surface3 z-10 text-neutral3 font-bold text-ui-sm",
18263
+ transitions.all,
17957
18264
  {
17958
- "border border-gray-500 border-dashed": step.status === "pending",
17959
- "[&>svg]:text-surface4 [&>svg]:w-[1.1rem] [&>svg]:h-[1.1rem]": step.status !== "running",
17960
- "bg-green-900 text-white": step.status === "success",
17961
- "bg-red-900 text-white": step.status === "failed"
18265
+ "border border-neutral2 border-dashed": step.status === "pending",
18266
+ "[&>svg]:text-surface1 [&>svg]:w-[1.1rem] [&>svg]:h-[1.1rem]": step.status !== "running",
18267
+ "bg-accent1Dark text-white shadow-glow-accent1 scale-110": step.status === "success",
18268
+ "bg-accent2Dark text-white shadow-glow-accent2 scale-110": step.status === "failed"
17962
18269
  }
17963
18270
  ),
17964
18271
  children: step.status === "running" ? /* @__PURE__ */ jsx(Spinner, {}) : idx + 1
@@ -17968,7 +18275,7 @@ function ProcessStepProgressBar({ steps }) {
17968
18275
  step.id
17969
18276
  );
17970
18277
  }) }),
17971
- /* @__PURE__ */ jsxs("div", { className: "text-xs text-neutral3 text-center", children: [
18278
+ /* @__PURE__ */ jsxs("div", { className: cn("text-xs text-neutral3 text-center", transitions.colors), children: [
17972
18279
  completedSteps,
17973
18280
  " of ",
17974
18281
  totalSteps,
@@ -19841,46 +20148,67 @@ function Notification({
19841
20148
  type = "info"
19842
20149
  }) {
19843
20150
  const [localIsVisible, setLocalIsVisible] = useState(isVisible);
20151
+ const [isAnimatingOut, setIsAnimatingOut] = useState(false);
19844
20152
  useEffect(() => {
19845
20153
  if (dismissible && autoDismiss && isVisible) {
19846
20154
  const timer = setTimeout(() => {
19847
- setLocalIsVisible(false);
20155
+ handleDismiss();
19848
20156
  }, dismissTime);
19849
20157
  return () => clearTimeout(timer);
19850
20158
  }
19851
- }, [autoDismiss, isVisible, dismissTime]);
20159
+ }, [autoDismiss, isVisible, dismissTime, dismissible]);
19852
20160
  useEffect(() => {
19853
- setLocalIsVisible(isVisible);
20161
+ if (isVisible) {
20162
+ setIsAnimatingOut(false);
20163
+ setLocalIsVisible(true);
20164
+ }
19854
20165
  }, [isVisible]);
20166
+ const handleDismiss = () => {
20167
+ setIsAnimatingOut(true);
20168
+ setTimeout(() => {
20169
+ setLocalIsVisible(false);
20170
+ setIsAnimatingOut(false);
20171
+ }, 200);
20172
+ };
19855
20173
  if (!localIsVisible) return null;
20174
+ const typeStyles = {
20175
+ info: "bg-surface4 border-border1",
20176
+ error: "bg-accent2Darker border-accent2/30",
20177
+ success: "bg-accent1Darker border-accent1/30",
20178
+ warning: "bg-accent6Darker border-accent6/30"
20179
+ };
20180
+ const iconStyles = {
20181
+ info: "text-accent5",
20182
+ error: "text-accent2",
20183
+ success: "text-accent1",
20184
+ warning: "text-accent6"
20185
+ };
19856
20186
  return /* @__PURE__ */ jsxs(
19857
20187
  "div",
19858
20188
  {
19859
20189
  className: cn(
19860
- "grid grid-cols-[1fr_auto] gap-2 rounded-lg bg-white/5 p-6 py-4 text-ui-md text-neutral3 items-center",
19861
- {
19862
- "bg-red-900/10 border border-red-900": type === "error"
19863
- },
20190
+ "grid grid-cols-[auto_1fr_auto] gap-3 rounded-lg border p-4 text-ui-md text-neutral4 items-start",
20191
+ "shadow-card",
20192
+ transitions.all,
20193
+ isAnimatingOut ? "animate-out fade-out-0 slide-out-to-right-2 duration-200" : "animate-in fade-in-0 slide-in-from-right-2 duration-300",
20194
+ typeStyles[type],
19864
20195
  className
19865
20196
  ),
19866
20197
  children: [
19867
- /* @__PURE__ */ jsx(
19868
- "div",
20198
+ /* @__PURE__ */ jsx("div", { className: cn("flex-shrink-0 mt-0.5", iconStyles[type]), children: type === "error" || type === "warning" ? /* @__PURE__ */ jsx(AlertTriangleIcon, { className: "h-4 w-4" }) : /* @__PURE__ */ jsx(InfoIcon$1, { className: "h-4 w-4" }) }),
20199
+ /* @__PURE__ */ jsx("div", { className: "flex gap-2 items-start min-w-0", children }),
20200
+ dismissible && /* @__PURE__ */ jsxs(
20201
+ Button,
19869
20202
  {
19870
- className: cn(
19871
- "flex gap-2 items-start",
19872
- "[&>svg]:w-[1.2em] [&>svg]:h-[1.2em] [&>svg]:opacity-70 [&>svg]:translate-y-0.5",
19873
- {
19874
- "[&>svg]:text-red-400": type === "error"
19875
- }
19876
- ),
19877
- children
20203
+ variant: "ghost",
20204
+ className: cn("h-6 w-6 p-0 flex-shrink-0", transitions.colors, "hover:bg-surface5"),
20205
+ onClick: handleDismiss,
20206
+ children: [
20207
+ /* @__PURE__ */ jsx(XIcon, { className: "h-4 w-4" }),
20208
+ /* @__PURE__ */ jsx(VisuallyHidden$1, { children: "Dismiss" })
20209
+ ]
19878
20210
  }
19879
- ),
19880
- dismissible && /* @__PURE__ */ jsxs(Button, { onClick: () => setLocalIsVisible(false), children: [
19881
- /* @__PURE__ */ jsx(XIcon, {}),
19882
- /* @__PURE__ */ jsx(VisuallyHidden$1, { children: "Dismiss" })
19883
- ] })
20211
+ )
19884
20212
  ]
19885
20213
  }
19886
20214
  );
@@ -19986,7 +20314,8 @@ const Crumb = ({ className, as, isCurrent, action, ...props }) => {
19986
20314
  "aria-current": isCurrent ? "page" : void 0,
19987
20315
  className: cn(
19988
20316
  "text-ui-md leading-ui-md flex items-center gap-2",
19989
- isCurrent ? "text-white" : "text-neutral3",
20317
+ transitions.colors,
20318
+ isCurrent ? "text-white" : "text-neutral3 hover:text-neutral5",
19990
20319
  className
19991
20320
  ),
19992
20321
  ...props
@@ -19994,7 +20323,7 @@ const Crumb = ({ className, as, isCurrent, action, ...props }) => {
19994
20323
  ),
19995
20324
  action
19996
20325
  ] }),
19997
- !isCurrent && /* @__PURE__ */ jsx("li", { role: "separator", className: "flex h-full items-center", children: /* @__PURE__ */ jsx(Icon, { className: "text-neutral3", children: /* @__PURE__ */ jsx(SlashIcon, {}) }) })
20326
+ !isCurrent && /* @__PURE__ */ jsx("li", { role: "separator", className: "flex h-full items-center", children: /* @__PURE__ */ jsx(Icon, { className: cn("text-neutral2", transitions.colors), children: /* @__PURE__ */ jsx(SlashIcon, {}) }) })
19998
20327
  ] });
19999
20328
  };
20000
20329
 
@@ -20063,12 +20392,24 @@ const LogoWithoutText = (props) => /* @__PURE__ */ jsx("svg", { xmlns: "http://w
20063
20392
  ) });
20064
20393
 
20065
20394
  const themeClasses = {
20066
- light: "bg-gray-100 border-gray-300 text-gray-700",
20067
- dark: "bg-surface4 border-border1 text-neutral6"
20395
+ light: "bg-gray-100 border-gray-300 text-gray-700 shadow-[0_1px_0_rgba(0,0,0,0.1)]",
20396
+ dark: "bg-surface4 border-border1 text-neutral5 shadow-[0_1px_0_rgba(0,0,0,0.3)]"
20068
20397
  };
20069
- const Kbd = ({ children, theme = "dark" }) => {
20398
+ const Kbd = ({ children, theme = "dark", className }) => {
20070
20399
  const themeClass = themeClasses[theme];
20071
- return /* @__PURE__ */ jsx("kbd", { className: cn("border rounded-md px-1 py-0.5 font-mono", themeClass), children });
20400
+ return /* @__PURE__ */ jsx(
20401
+ "kbd",
20402
+ {
20403
+ className: cn(
20404
+ "border rounded-md px-1.5 py-0.5 font-mono text-ui-sm inline-flex items-center justify-center min-w-[1.5rem]",
20405
+ transitions.transform,
20406
+ "active:scale-95 active:shadow-none",
20407
+ themeClass,
20408
+ className
20409
+ ),
20410
+ children
20411
+ }
20412
+ );
20072
20413
  };
20073
20414
 
20074
20415
  const SIDEBAR_COOKIE_NAME = "sidebar:state";
@@ -20138,6 +20479,8 @@ function MainSidebarRoot({ children, className }) {
20138
20479
  {
20139
20480
  className: cn(
20140
20481
  "flex flex-col h-full px-4 relative overflow-y-auto",
20482
+ // Smooth width transition for collapse/expand
20483
+ "transition-all duration-slow ease-out-custom",
20141
20484
  {
20142
20485
  "lg:min-w-52 xl:min-w-56 2xl:min-w-60 3xl:min-w-64 4xl:min-w-72": !isCollapsed
20143
20486
  },
@@ -20154,8 +20497,10 @@ function MainSidebarRoot({ children, className }) {
20154
20497
  onClick: toggleSidebar,
20155
20498
  className: cn(
20156
20499
  "inline-flex w-auto items-center text-neutral3 h-8 px-3 rounded-md ml-auto",
20157
- "hover:bg-surface4",
20158
- "[&_svg]:w-[1rem] [&_svg]:h-[1rem] [&_svg]:text-neutral3",
20500
+ "hover:bg-surface4 hover:text-neutral5",
20501
+ "transition-all duration-normal ease-out-custom",
20502
+ "focus:outline-none focus:ring-1 focus:ring-accent1 focus:shadow-focus-ring",
20503
+ "[&_svg]:w-[1rem] [&_svg]:h-[1rem] [&_svg]:text-neutral3 [&_svg]:transition-transform [&_svg]:duration-normal",
20159
20504
  {
20160
20505
  "ml-auto": !isCollapsed
20161
20506
  }
@@ -20223,15 +20568,23 @@ function MainSidebarNavLink({
20223
20568
  "li",
20224
20569
  {
20225
20570
  className: cn(
20226
- "flex",
20571
+ "flex relative",
20572
+ // Base link styles with smooth transitions
20227
20573
  "[&>a]:flex [&>a]:items-center [&>a]:min-h-8 [&>a]:gap-2.5 [&>a]:text-ui-md [&>a]:text-neutral3 [&>a]:py-1.5 [&>a]:px-3 [&>a]:w-full [&>a]:rounded-lg [&>a]:justify-center",
20228
- "[&_svg]:w-4 [&_svg]:h-4 [&_svg]:text-neutral3/60",
20574
+ "[&>a]:transition-all [&>a]:duration-normal [&>a]:ease-out-custom",
20575
+ // Icon styles with transitions
20576
+ "[&_svg]:w-4 [&_svg]:h-4 [&_svg]:text-neutral3/60 [&_svg]:transition-colors [&_svg]:duration-normal",
20577
+ // Hover states
20229
20578
  "[&>a:hover]:bg-surface4 [&>a:hover]:text-neutral5 [&>a:hover_svg]:text-neutral3",
20230
20579
  {
20580
+ // Active state with left indicator bar
20231
20581
  "[&>a]:text-neutral5 [&>a]:bg-surface3": isActive,
20232
20582
  "[&_svg]:text-neutral5": isActive,
20583
+ // Active indicator bar
20584
+ "before:absolute before:left-0 before:top-1/2 before:-translate-y-1/2 before:w-0.5 before:h-5 before:bg-accent1 before:rounded-r-full before:transition-all before:duration-normal": isActive && !isCollapsed,
20233
20585
  "[&>a]:justify-start": !isCollapsed,
20234
20586
  "[&_svg]:text-neutral3": isCollapsed,
20587
+ // Featured variant
20235
20588
  "[&>a]:rounded-md [&>a]:my-2 [&>a]:bg-accent1/75 [&>a:hover]:bg-accent1/85 [&>a]:text-black [&>a:hover]:text-black": isFeatured,
20236
20589
  "[&_svg]:text-black/75 [&>a:hover_svg]:text-black": isFeatured
20237
20590
  },