@mastra/playground-ui 7.0.0-beta.23 → 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 +23 -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.cjs.js CHANGED
@@ -6,7 +6,7 @@ require('./index.css');const jsxRuntime = require('react/jsx-runtime');
6
6
  const react = require('@assistant-ui/react');
7
7
  const lucideReact = require('lucide-react');
8
8
  const React = require('react');
9
- const tokens = require('./tokens.cjs.js');
9
+ const spacings = require('./spacings-bCnRJAUT.cjs');
10
10
  const TooltipPrimitive = require('@radix-ui/react-tooltip');
11
11
  const reactMarkdown = require('@assistant-ui/react-markdown');
12
12
  require('@assistant-ui/react-markdown/styles/dot.css');
@@ -3116,19 +3116,21 @@ const mergeArrayProperties = (baseObject, mergeObject, key) => {
3116
3116
  };
3117
3117
  const extendTailwindMerge = (configExtension, ...createConfig) => typeof configExtension === 'function' ? createTailwindMerge(getDefaultConfig, configExtension, ...createConfig) : createTailwindMerge(() => mergeConfigs(getDefaultConfig(), configExtension), ...createConfig);
3118
3118
 
3119
- const colorKeys = Object.keys({ ...tokens.Colors, ...tokens.BorderColors });
3120
- const spacingKeys = Object.keys(tokens.Spacings);
3121
- const fontSizeKeys = Object.keys(tokens.FontSizes);
3122
- const lineHeightKeys = Object.keys(tokens.LineHeights);
3123
- const borderRadiusKeys = Object.keys(tokens.BorderRadius);
3124
- const sizeKeys = Object.keys(tokens.Sizes);
3119
+ const colorKeys = Object.keys({ ...spacings.Colors, ...spacings.BorderColors });
3120
+ const spacingKeys = Object.keys(spacings.Spacings);
3121
+ const fontSizeKeys = Object.keys(spacings.FontSizes);
3122
+ const lineHeightKeys = Object.keys(spacings.LineHeights);
3123
+ const borderRadiusKeys = Object.keys(spacings.BorderRadius);
3124
+ const sizeKeys = Object.keys(spacings.Sizes);
3125
+ const shadowKeys = Object.keys(spacings.Shadows).concat(Object.keys(spacings.Glows));
3125
3126
  const twMerge = extendTailwindMerge({
3126
3127
  extend: {
3127
3128
  theme: {
3128
3129
  color: colorKeys,
3129
3130
  spacing: spacingKeys,
3130
3131
  radius: borderRadiusKeys,
3131
- leading: lineHeightKeys
3132
+ leading: lineHeightKeys,
3133
+ shadow: shadowKeys
3132
3134
  },
3133
3135
  classGroups: {
3134
3136
  "font-size": [{ text: fontSizeKeys }],
@@ -3152,47 +3154,44 @@ const formElementSizes = {
3152
3154
  md: "h-form-md",
3153
3155
  lg: "h-form-lg"
3154
3156
  };
3155
- const formElementFocus = "focus:outline focus:outline-1 focus:outline-accent1";
3156
- const formElementFocusWithin = "focus-within:outline focus-within:outline-1 focus-within:outline-accent1 focus-within:-outline-offset-2";
3157
+ const formElementFocus = "focus:outline-none focus:ring-1 focus:ring-accent1 focus:shadow-focus-ring transition-shadow duration-normal";
3158
+ const formElementFocusWithin = "focus-within:outline-none focus-within:ring-1 focus-within:ring-accent1 focus-within:shadow-focus-ring transition-shadow duration-normal";
3157
3159
  const formElementRadius = "rounded-md";
3158
3160
 
3159
- const sizeClasses$1 = {
3161
+ const sizeClasses$2 = {
3160
3162
  sm: `${formElementSizes.sm} gap-0.5`,
3161
3163
  md: `${formElementSizes.md} gap-1`,
3162
3164
  lg: `${formElementSizes.lg} gap-2`
3163
3165
  };
3164
3166
  const variantClasses$2 = {
3165
- default: "bg-surface2 hover:bg-surface4 text-neutral3 hover:text-neutral6 disabled:opacity-50",
3166
- light: "bg-surface3 hover:bg-surface5 text-neutral6 disabled:opacity-50",
3167
- outline: "bg-transparent hover:bg-surface2 text-neutral3 hover:text-neutral6 disabled:opacity-50",
3168
- ghost: "bg-transparent border-transparent hover:bg-surface2 text-neutral3 hover:text-neutral6 disabled:opacity-50"
3167
+ default: "bg-surface2 hover:bg-surface4 text-neutral3 hover:text-neutral6 disabled:opacity-50 disabled:cursor-not-allowed",
3168
+ light: "bg-surface3 hover:bg-surface5 text-neutral6 disabled:opacity-50 disabled:cursor-not-allowed",
3169
+ outline: "bg-transparent hover:bg-surface2 text-neutral3 hover:text-neutral6 disabled:opacity-50 disabled:cursor-not-allowed",
3170
+ ghost: "bg-transparent border-transparent hover:bg-surface2 text-neutral3 hover:text-neutral6 disabled:opacity-50 disabled:cursor-not-allowed",
3171
+ 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"
3169
3172
  };
3173
+ 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]";
3170
3174
  function buttonVariants(options) {
3171
3175
  const variant = options?.variant || "default";
3172
3176
  const size = options?.size || "md";
3173
- return cn(
3174
- "bg-surface2 border border-border1 px-2 text-ui-md inline-flex items-center justify-center rounded-md border",
3175
- formElementFocus,
3176
- variantClasses$2[variant],
3177
- sizeClasses$1[size]
3178
- );
3177
+ return cn(baseButtonStyles, formElementFocus, variantClasses$2[variant], sizeClasses$2[size]);
3179
3178
  }
3180
3179
  const Button = React.forwardRef(
3181
- ({ className, as, size = "md", variant = "default", ...props }, ref) => {
3180
+ ({ className, as, size = "md", variant = "default", disabled, ...props }, ref) => {
3182
3181
  const Component = as || "button";
3183
3182
  return /* @__PURE__ */ jsxRuntime.jsx(
3184
3183
  Component,
3185
3184
  {
3186
3185
  ref,
3186
+ disabled,
3187
3187
  className: cn(
3188
- "bg-surface2 border border-border1 px-2 text-ui-md inline-flex items-center justify-center rounded-md border",
3188
+ baseButtonStyles,
3189
3189
  formElementFocus,
3190
3190
  variantClasses$2[variant],
3191
- sizeClasses$1[size],
3192
- className,
3193
- {
3194
- "cursor-not-allowed": props.disabled
3195
- }
3191
+ sizeClasses$2[size],
3192
+ // Remove active scale when disabled
3193
+ disabled && "active:scale-100",
3194
+ className
3196
3195
  ),
3197
3196
  ...props
3198
3197
  }
@@ -3247,17 +3246,36 @@ const Txt = ({ as: Root = "p", className, variant = "ui-md", font, ...props }) =
3247
3246
  return /* @__PURE__ */ jsxRuntime.jsx(Root, { className: cn(variants[variant], font && fonts[font], className), ...props });
3248
3247
  };
3249
3248
 
3250
- const sizeClasses = {
3249
+ const transitions = {
3250
+ // For color changes (background, text, border)
3251
+ colors: "transition-colors duration-normal ease-out-custom",
3252
+ // For transform changes (scale, translate, rotate)
3253
+ transform: "transition-transform duration-normal ease-out-custom",
3254
+ // For all property changes
3255
+ all: "transition-all duration-normal ease-out-custom",
3256
+ // For opacity changes
3257
+ opacity: "transition-opacity duration-normal ease-out-custom"};
3258
+ const focusRing = {
3259
+ // Focus visible only (keyboard navigation)
3260
+ visible: "focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-accent1 focus-visible:shadow-focus-ring"
3261
+ };
3262
+
3263
+ const sizeClasses$1 = {
3251
3264
  sm: "h-avatar-sm w-avatar-sm",
3252
3265
  md: "h-avatar-md w-avatar-md",
3253
3266
  lg: "h-avatar-lg w-avatar-lg"
3254
3267
  };
3255
- const Avatar = ({ src, name, size = "sm" }) => {
3268
+ const Avatar = ({ src, name, size = "sm", interactive = false }) => {
3256
3269
  return /* @__PURE__ */ jsxRuntime.jsx(
3257
3270
  "div",
3258
3271
  {
3259
- className: `${sizeClasses[size]} border border-border1 bg-surface3 shrink-0 overflow-hidden rounded-full flex items-center justify-center`,
3260
- children: src ? /* @__PURE__ */ jsxRuntime.jsx("img", { src, alt: name, className: "h-full w-full object-cover" }) : /* @__PURE__ */ jsxRuntime.jsx(Txt, { variant: "ui-md", className: "text-center", children: name[0].toUpperCase() })
3272
+ className: cn(
3273
+ sizeClasses$1[size],
3274
+ "border border-border1 bg-surface3 shrink-0 overflow-hidden rounded-full flex items-center justify-center",
3275
+ transitions.all,
3276
+ interactive && "cursor-pointer hover:scale-105 hover:border-neutral2 hover:shadow-sm"
3277
+ ),
3278
+ children: src ? /* @__PURE__ */ jsxRuntime.jsx("img", { src, alt: name, className: "h-full w-full object-cover" }) : /* @__PURE__ */ jsxRuntime.jsx(Txt, { variant: "ui-md", className: "text-center text-neutral4", children: name[0].toUpperCase() })
3261
3279
  }
3262
3280
  );
3263
3281
  };
@@ -4322,21 +4340,33 @@ const AgentNetworkCoinIcon = (props) => /* @__PURE__ */ jsxRuntime.jsxs("svg", {
4322
4340
  ] });
4323
4341
 
4324
4342
  const variantClasses$1 = {
4325
- warning: "bg-yellow-900/20 border border-yellow-200 text-yellow-200",
4326
- destructive: "bg-red-900/20 border border-red-200 text-red-200",
4327
- info: "bg-blue-900/20 border border-blue-200 text-blue-200"
4343
+ warning: "bg-accent6Darker border-accent6/30 text-accent6",
4344
+ destructive: "bg-accent2Darker border-accent2/30 text-accent2",
4345
+ info: "bg-accent5Darker border-accent5/30 text-accent5"
4328
4346
  };
4329
4347
  const variantIcons = {
4330
4348
  warning: lucideReact.TriangleAlert,
4331
4349
  destructive: lucideReact.AlertCircle,
4332
4350
  info: lucideReact.InfoIcon
4333
4351
  };
4334
- const Alert = ({ children, variant = "destructive" }) => {
4352
+ const Alert = ({ children, variant = "destructive", className }) => {
4335
4353
  const Ico = variantIcons[variant];
4336
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn(variantClasses$1[variant], "p-2 rounded-md"), children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start gap-2", children: [
4337
- /* @__PURE__ */ jsxRuntime.jsx(Icon, { className: "mt-0.5", children: /* @__PURE__ */ jsxRuntime.jsx(Ico, {}) }),
4338
- /* @__PURE__ */ jsxRuntime.jsx("div", { children })
4339
- ] }) });
4354
+ return /* @__PURE__ */ jsxRuntime.jsx(
4355
+ "div",
4356
+ {
4357
+ className: cn(
4358
+ variantClasses$1[variant],
4359
+ "p-3 rounded-md border shadow-sm",
4360
+ transitions.all,
4361
+ "animate-in fade-in-0 slide-in-from-top-2 duration-200",
4362
+ className
4363
+ ),
4364
+ children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start gap-2", children: [
4365
+ /* @__PURE__ */ jsxRuntime.jsx(Icon, { className: "mt-0.5 flex-shrink-0", children: /* @__PURE__ */ jsxRuntime.jsx(Ico, {}) }),
4366
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-neutral4", children })
4367
+ ] })
4368
+ }
4369
+ );
4340
4370
  };
4341
4371
  const AlertTitle = ({ children, as: As = "h5" }) => {
4342
4372
  return /* @__PURE__ */ jsxRuntime.jsx(Txt, { as: As, variant: "ui-md", className: "font-semibold", children });
@@ -4346,24 +4376,33 @@ const AlertDescription = ({ children, as: As = "p" }) => {
4346
4376
  };
4347
4377
 
4348
4378
  const variantClasses = {
4379
+ default: "text-neutral3 bg-surface4",
4380
+ success: "text-accent1 bg-accent1Dark",
4381
+ error: "text-accent2 bg-accent2Dark",
4382
+ info: "text-accent5 bg-accent5Dark",
4383
+ warning: "text-accent6 bg-accent6Dark"
4384
+ };
4385
+ const iconClasses = {
4349
4386
  default: "text-neutral3",
4350
4387
  success: "text-accent1",
4351
4388
  error: "text-accent2",
4352
- info: "text-accent3"
4389
+ info: "text-accent5",
4390
+ warning: "text-accent6"
4353
4391
  };
4354
4392
  const Badge = ({ icon, variant = "default", className, children, ...props }) => {
4355
4393
  return /* @__PURE__ */ jsxRuntime.jsxs(
4356
4394
  "div",
4357
4395
  {
4358
4396
  className: cn(
4359
- "font-mono bg-surface4 text-ui-sm gap-1 h-badge-default inline-flex items-center rounded-md shrink-0",
4397
+ "font-mono text-ui-sm gap-1 h-badge-default inline-flex items-center rounded-md shrink-0",
4398
+ transitions.colors,
4360
4399
  icon ? "pl-1 pr-1.5" : "px-1.5",
4361
- icon || variant === "default" ? "text-neutral5" : variantClasses[variant],
4400
+ variant === "default" && icon ? "bg-surface4 text-neutral5" : variantClasses[variant],
4362
4401
  className
4363
4402
  ),
4364
4403
  ...props,
4365
4404
  children: [
4366
- icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: variantClasses[variant], children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { children: icon }) }),
4405
+ icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: iconClasses[variant], children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { children: icon }) }),
4367
4406
  children
4368
4407
  ]
4369
4408
  }
@@ -4466,20 +4505,34 @@ function CopyButton({
4466
4505
  iconSize = "default",
4467
4506
  className
4468
4507
  }) {
4469
- const { handleCopy } = useCopyToClipboard({
4508
+ const [copied, setCopied] = React.useState(false);
4509
+ const { handleCopy: originalHandleCopy } = useCopyToClipboard({
4470
4510
  text: content,
4471
4511
  copyMessage
4472
4512
  });
4513
+ const handleCopy = () => {
4514
+ originalHandleCopy();
4515
+ setCopied(true);
4516
+ setTimeout(() => setCopied(false), 2e3);
4517
+ };
4473
4518
  return /* @__PURE__ */ jsxRuntime.jsxs(Tooltip, { children: [
4474
- /* @__PURE__ */ jsxRuntime.jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx("button", { onClick: handleCopy, type: "button", className, children: /* @__PURE__ */ jsxRuntime.jsx(
4475
- Icon,
4519
+ /* @__PURE__ */ jsxRuntime.jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
4520
+ "button",
4476
4521
  {
4477
- className: "transition-colors hover:bg-surface4 rounded-lg text-neutral3 hover:text-neutral6",
4478
- size: iconSize,
4479
- children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.CopyIcon, {})
4522
+ onClick: handleCopy,
4523
+ type: "button",
4524
+ className: cn("rounded-lg p-1", transitions.all, focusRing.visible, "hover:bg-surface4", className),
4525
+ children: /* @__PURE__ */ jsxRuntime.jsx(
4526
+ Icon,
4527
+ {
4528
+ className: cn("text-neutral3", transitions.all, "hover:text-neutral6", copied && "text-accent1"),
4529
+ size: iconSize,
4530
+ children: copied ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.CheckIcon, {}) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.CopyIcon, {})
4531
+ }
4532
+ )
4480
4533
  }
4481
- ) }) }),
4482
- /* @__PURE__ */ jsxRuntime.jsx(TooltipContent, { children: tooltip })
4534
+ ) }),
4535
+ /* @__PURE__ */ jsxRuntime.jsx(TooltipContent, { children: copied ? "Copied!" : tooltip })
4483
4536
  ] });
4484
4537
  }
4485
4538
 
@@ -4582,7 +4635,9 @@ const DialogOverlay = React__namespace.forwardRef(({ className, ...props }, ref)
4582
4635
  {
4583
4636
  ref,
4584
4637
  className: cn(
4585
- "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",
4638
+ "fixed inset-0 z-50 bg-overlay backdrop-blur-sm",
4639
+ "data-[state=open]:animate-in data-[state=closed]:animate-out",
4640
+ "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
4586
4641
  className
4587
4642
  ),
4588
4643
  ...props
@@ -4596,16 +4651,35 @@ const DialogContent = React__namespace.forwardRef(({ className, children, ...pro
4596
4651
  {
4597
4652
  ref,
4598
4653
  className: cn(
4599
- "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%]",
4654
+ "fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%]",
4655
+ "gap-4 border border-border1 bg-surface3 py-6 shadow-dialog rounded-lg",
4656
+ "duration-slow",
4657
+ "data-[state=open]:animate-in data-[state=closed]:animate-out",
4658
+ "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
4659
+ "data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95",
4660
+ "data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%]",
4661
+ "data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%]",
4600
4662
  className
4601
4663
  ),
4602
4664
  ...props,
4603
4665
  children: [
4604
4666
  children,
4605
- /* @__PURE__ */ jsxRuntime.jsxs(DialogPrimitive__namespace.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: [
4606
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { className: "h-4 w-4" }),
4607
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: "Close" })
4608
- ] })
4667
+ /* @__PURE__ */ jsxRuntime.jsxs(
4668
+ DialogPrimitive__namespace.Close,
4669
+ {
4670
+ className: cn(
4671
+ "absolute right-4 top-4 rounded-md p-1",
4672
+ "text-neutral3 hover:text-neutral6 hover:bg-surface4",
4673
+ "transition-all duration-normal ease-out-custom",
4674
+ "focus:outline-none focus:ring-1 focus:ring-accent1 focus:shadow-focus-ring",
4675
+ "disabled:pointer-events-none"
4676
+ ),
4677
+ children: [
4678
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { className: "h-4 w-4" }),
4679
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: "Close" })
4680
+ ]
4681
+ }
4682
+ )
4609
4683
  ]
4610
4684
  }
4611
4685
  )
@@ -5817,7 +5891,21 @@ function WorkflowRunProvider({
5817
5891
  }
5818
5892
 
5819
5893
  function Skeleton({ className, ...props }) {
5820
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("animate-pulse rounded-md bg-surface4/50", className), ...props });
5894
+ return /* @__PURE__ */ jsxRuntime.jsx(
5895
+ "div",
5896
+ {
5897
+ className: cn(
5898
+ "rounded-md bg-surface4 relative overflow-hidden",
5899
+ // Shimmer effect using pseudo-element
5900
+ "before:absolute before:inset-0",
5901
+ "before:translate-x-[-100%]",
5902
+ "before:animate-[shimmer_2s_infinite]",
5903
+ "before:bg-gradient-to-r before:from-transparent before:via-surface5/20 before:to-transparent",
5904
+ className
5905
+ ),
5906
+ ...props
5907
+ }
5908
+ );
5821
5909
  }
5822
5910
 
5823
5911
  const lodashTitleCase = (str) => {
@@ -6215,11 +6303,40 @@ const constructNodesAndEdges = ({
6215
6303
  };
6216
6304
 
6217
6305
  const Collapsible = CollapsiblePrimitive__namespace.Root;
6218
- const CollapsibleTrigger = (props) => {
6219
- const { className, ...rest } = props;
6220
- return /* @__PURE__ */ jsxRuntime.jsx(CollapsiblePrimitive__namespace.CollapsibleTrigger, { className: cn("-outline-offset-2", className), ...rest });
6221
- };
6222
- const CollapsibleContent = CollapsiblePrimitive__namespace.CollapsibleContent;
6306
+ const CollapsibleTrigger = React.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
6307
+ CollapsiblePrimitive__namespace.CollapsibleTrigger,
6308
+ {
6309
+ ref,
6310
+ className: cn(
6311
+ "-outline-offset-2",
6312
+ transitions.colors,
6313
+ focusRing.visible,
6314
+ "hover:text-neutral5",
6315
+ "[&>svg]:transition-transform [&>svg]:duration-normal [&>svg]:ease-out-custom",
6316
+ "[&[data-state=open]>svg]:rotate-90",
6317
+ className
6318
+ ),
6319
+ ...props,
6320
+ children
6321
+ }
6322
+ ));
6323
+ CollapsibleTrigger.displayName = CollapsiblePrimitive__namespace.CollapsibleTrigger.displayName;
6324
+ const CollapsibleContent = React.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
6325
+ CollapsiblePrimitive__namespace.CollapsibleContent,
6326
+ {
6327
+ ref,
6328
+ className: cn(
6329
+ "overflow-hidden",
6330
+ "data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:slide-in-from-top-1",
6331
+ "data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:slide-out-to-top-1",
6332
+ "duration-normal ease-out-custom",
6333
+ className
6334
+ ),
6335
+ ...props,
6336
+ children
6337
+ }
6338
+ ));
6339
+ CollapsibleContent.displayName = CollapsiblePrimitive__namespace.CollapsibleContent.displayName;
6223
6340
 
6224
6341
  const BADGE_COLORS = {
6225
6342
  sleep: "#A855F7",
@@ -6369,13 +6486,14 @@ const ScrollBar = React__namespace.forwardRef(({ className, orientation = "verti
6369
6486
  ref,
6370
6487
  orientation,
6371
6488
  className: cn(
6372
- "flex touch-none select-none transition-colors",
6489
+ "flex touch-none select-none transition-all duration-normal ease-out-custom",
6490
+ "opacity-0 hover:opacity-100 data-[state=visible]:opacity-100",
6373
6491
  orientation === "vertical" && "h-full w-2.5 border-l border-l-transparent p-px",
6374
6492
  orientation === "horizontal" && "h-2.5 flex-col border-t border-t-transparent p-px",
6375
6493
  className
6376
6494
  ),
6377
6495
  ...props,
6378
- children: /* @__PURE__ */ jsxRuntime.jsx(ScrollAreaPrimitive__namespace.ScrollAreaThumb, { className: "relative flex-1 rounded-full bg-border1" })
6496
+ children: /* @__PURE__ */ jsxRuntime.jsx(ScrollAreaPrimitive__namespace.ScrollAreaThumb, { className: "relative flex-1 rounded-full bg-neutral2 hover:bg-neutral3 transition-colors duration-normal" })
6379
6497
  }
6380
6498
  ));
6381
6499
  ScrollBar.displayName = ScrollAreaPrimitive__namespace.ScrollAreaScrollbar.displayName;
@@ -6512,16 +6630,22 @@ const cva = (base, config)=>(props)=>{
6512
6630
 
6513
6631
  const inputVariants = cva(
6514
6632
  cn(
6515
- "flex w-full text-neutral6 border bg-transparent shadow-sm transition-colors disabled:cursor-not-allowed disabled:opacity-50",
6633
+ // Base styles with enhanced transitions
6634
+ "flex w-full text-neutral6 border bg-transparent",
6635
+ "transition-all duration-normal ease-out-custom",
6636
+ "disabled:cursor-not-allowed disabled:opacity-50",
6637
+ // Better placeholder styling
6638
+ "placeholder:text-neutral2 placeholder:transition-opacity placeholder:duration-normal",
6639
+ "focus:placeholder:opacity-70",
6516
6640
  formElementRadius,
6517
6641
  formElementFocus
6518
6642
  ),
6519
6643
  {
6520
6644
  variants: {
6521
6645
  variant: {
6522
- default: "border border-border1 placeholder:text-neutral3",
6523
- filled: "border bg-inputFill border-border1 placeholder:text-neutral3",
6524
- unstyled: "border-0 bg-transparent placeholder:text-neutral3"
6646
+ default: "border border-border1 hover:border-border2",
6647
+ filled: "border bg-surface2 border-border1 hover:border-border2",
6648
+ unstyled: "border-0 bg-transparent shadow-none focus:shadow-none focus:ring-0"
6525
6649
  },
6526
6650
  size: {
6527
6651
  sm: `${formElementSizes.sm} px-2 text-ui-sm`,
@@ -6536,14 +6660,20 @@ const inputVariants = cva(
6536
6660
  }
6537
6661
  );
6538
6662
  const Input = React__namespace.forwardRef(
6539
- ({ className, size, testId, variant, type, ...props }, ref) => {
6663
+ ({ className, size, testId, variant, type, error, ...props }, ref) => {
6540
6664
  return /* @__PURE__ */ jsxRuntime.jsx(
6541
6665
  "input",
6542
6666
  {
6543
6667
  type,
6544
- className: cn(className, inputVariants({ variant, size, className })),
6668
+ className: cn(
6669
+ inputVariants({ variant, size }),
6670
+ // Error state styling
6671
+ error && "border-error focus:ring-error focus:shadow-glow-accent2",
6672
+ className
6673
+ ),
6545
6674
  "data-testid": testId,
6546
6675
  ref,
6676
+ "aria-invalid": error,
6547
6677
  ...props
6548
6678
  }
6549
6679
  );
@@ -6591,11 +6721,27 @@ const Checkbox = React__namespace.forwardRef(({ className, ...props }, ref) => /
6591
6721
  {
6592
6722
  ref,
6593
6723
  className: cn(
6594
- "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",
6724
+ "peer h-4 w-4 shrink-0 rounded-sm border border-neutral3",
6725
+ "shadow-sm",
6726
+ transitions.all,
6727
+ "hover:border-neutral5 hover:shadow-md",
6728
+ formElementFocus,
6729
+ "disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:border-neutral3 disabled:hover:shadow-sm",
6730
+ "data-[state=checked]:bg-accent1 data-[state=checked]:border-accent1 data-[state=checked]:text-surface1",
6731
+ "data-[state=checked]:shadow-glow-accent1",
6595
6732
  className
6596
6733
  ),
6597
6734
  ...props,
6598
- children: /* @__PURE__ */ jsxRuntime.jsx(CheckboxPrimitive__namespace.Indicator, { className: cn("flex items-center justify-center text-current"), children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { className: "h-4 w-4" }) })
6735
+ children: /* @__PURE__ */ jsxRuntime.jsx(
6736
+ CheckboxPrimitive__namespace.Indicator,
6737
+ {
6738
+ className: cn(
6739
+ "flex items-center justify-center text-current",
6740
+ "data-[state=checked]:animate-in data-[state=checked]:zoom-in-50 data-[state=checked]:duration-150"
6741
+ ),
6742
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { className: "h-3.5 w-3.5 stroke-[3]" })
6743
+ }
6744
+ )
6599
6745
  }
6600
6746
  ));
6601
6747
  Checkbox.displayName = CheckboxPrimitive__namespace.Root.displayName;
@@ -6698,13 +6844,15 @@ const SelectTrigger = React__namespace.forwardRef(
6698
6844
  "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",
6699
6845
  formElementRadius,
6700
6846
  formElementFocus,
6847
+ transitions.all,
6848
+ "hover:border-neutral2",
6701
6849
  selectTriggerSizeClasses[size],
6702
6850
  className
6703
6851
  ),
6704
6852
  ...props,
6705
6853
  children: [
6706
6854
  children,
6707
- /* @__PURE__ */ jsxRuntime.jsx(SelectPrimitive__namespace.Icon, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDown, { className: "h-4 w-4 opacity-50" }) })
6855
+ /* @__PURE__ */ jsxRuntime.jsx(SelectPrimitive__namespace.Icon, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDown, { className: cn("h-4 w-4 text-neutral3", transitions.colors) }) })
6708
6856
  ]
6709
6857
  }
6710
6858
  )
@@ -6739,12 +6887,17 @@ const SelectItem = React__namespace.forwardRef(({ className, children, ...props
6739
6887
  {
6740
6888
  ref,
6741
6889
  className: cn(
6742
- "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",
6890
+ "relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-2 pr-8 text-neutral5 text-sm",
6891
+ transitions.colors,
6892
+ "hover:bg-surface5 hover:text-neutral5",
6893
+ "focus:bg-surface5 focus:text-neutral5",
6894
+ "data-[state=checked]:bg-accent1Dark data-[state=checked]:text-accent1",
6895
+ "data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
6743
6896
  className
6744
6897
  ),
6745
6898
  ...props,
6746
6899
  children: [
6747
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute right-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(SelectPrimitive__namespace.ItemIndicator, { children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { className: "h-4 w-4" }) }) }),
6900
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute right-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(SelectPrimitive__namespace.ItemIndicator, { children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { className: "h-4 w-4 text-accent1" }) }) }),
6748
6901
  /* @__PURE__ */ jsxRuntime.jsx(SelectPrimitive__namespace.ItemText, { children })
6749
6902
  ]
6750
6903
  }
@@ -6925,7 +7078,13 @@ function SearchField({ onReset, ...props }) {
6925
7078
  {
6926
7079
  type: "button",
6927
7080
  onClick: onReset,
6928
- className: cn("absolute top-1/2 right-2 -translate-y-1/2 p-1", "[&:hover>svg]:text-neutral5"),
7081
+ className: cn(
7082
+ "absolute top-1/2 right-2 -translate-y-1/2 p-1 rounded",
7083
+ transitions.all,
7084
+ "hover:bg-surface4",
7085
+ "[&>svg]:transition-colors [&>svg]:duration-normal",
7086
+ "[&:hover>svg]:text-neutral5"
7087
+ ),
6929
7088
  children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.XIcon, { className: "text-neutral3 w-[1rem] h-[1rem]" })
6930
7089
  }
6931
7090
  )
@@ -7979,11 +8138,26 @@ const RadioGroupItem = React__namespace.forwardRef(({ className, ...props }, ref
7979
8138
  {
7980
8139
  ref,
7981
8140
  className: cn(
7982
- "aspect-square h-4 w-4 rounded-full border border-neutral6 text-neutral6 disabled:cursor-not-allowed disabled:opacity-50",
8141
+ "aspect-square h-4 w-4 rounded-full border border-neutral3 text-neutral6",
8142
+ "shadow-sm",
8143
+ transitions.all,
8144
+ "hover:border-neutral5 hover:shadow-md",
8145
+ formElementFocus,
8146
+ "disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:border-neutral3 disabled:hover:shadow-sm",
8147
+ "data-[state=checked]:border-accent1 data-[state=checked]:shadow-glow-accent1",
7983
8148
  className
7984
8149
  ),
7985
8150
  ...props,
7986
- children: /* @__PURE__ */ jsxRuntime.jsx(RadioGroupPrimitive__namespace.Indicator, { className: "flex items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Circle, { className: "h-2.5 w-2.5 fill-current text-current" }) })
8151
+ children: /* @__PURE__ */ jsxRuntime.jsx(
8152
+ RadioGroupPrimitive__namespace.Indicator,
8153
+ {
8154
+ className: cn(
8155
+ "flex items-center justify-center",
8156
+ "data-[state=checked]:animate-in data-[state=checked]:zoom-in-50 data-[state=checked]:duration-150"
8157
+ ),
8158
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Circle, { className: "h-2 w-2 fill-accent1 text-accent1" })
8159
+ }
8160
+ )
7987
8161
  }
7988
8162
  );
7989
8163
  });
@@ -9132,11 +9306,29 @@ const Slider = React__namespace.forwardRef(({ className, ...props }, ref) => /*
9132
9306
  SliderPrimitive__namespace.Root,
9133
9307
  {
9134
9308
  ref,
9135
- className: cn("relative flex w-full touch-none select-none items-center", className),
9309
+ className: cn("relative flex w-full touch-none select-none items-center group", className),
9136
9310
  ...props,
9137
9311
  children: [
9138
- /* @__PURE__ */ jsxRuntime.jsx(SliderPrimitive__namespace.Track, { className: "relative h-1.5 w-full grow overflow-hidden rounded-full bg-neutral6/20", children: /* @__PURE__ */ jsxRuntime.jsx(SliderPrimitive__namespace.Range, { className: "absolute h-full bg-neutral6/50" }) }),
9139
- /* @__PURE__ */ jsxRuntime.jsx(SliderPrimitive__namespace.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" })
9312
+ /* @__PURE__ */ jsxRuntime.jsx(
9313
+ SliderPrimitive__namespace.Track,
9314
+ {
9315
+ className: cn("relative h-1.5 w-full grow overflow-hidden rounded-full bg-neutral2", transitions.colors),
9316
+ children: /* @__PURE__ */ jsxRuntime.jsx(SliderPrimitive__namespace.Range, { className: cn("absolute h-full bg-accent1", transitions.all) })
9317
+ }
9318
+ ),
9319
+ /* @__PURE__ */ jsxRuntime.jsx(
9320
+ SliderPrimitive__namespace.Thumb,
9321
+ {
9322
+ className: cn(
9323
+ "block h-4 w-4 rounded-full border-2 border-accent1 bg-white shadow-md",
9324
+ "transition-all duration-normal ease-out-custom",
9325
+ formElementFocus,
9326
+ "hover:scale-110 hover:shadow-lg",
9327
+ "active:scale-95",
9328
+ "disabled:pointer-events-none disabled:opacity-50"
9329
+ )
9330
+ }
9331
+ )
9140
9332
  ]
9141
9333
  }
9142
9334
  ));
@@ -9601,20 +9793,31 @@ const WorkflowRunDetail = ({
9601
9793
  }
9602
9794
  };
9603
9795
 
9604
- const EmptyState = ({
9796
+ function EmptyState({
9605
9797
  iconSlot,
9606
9798
  titleSlot,
9607
9799
  descriptionSlot,
9608
9800
  actionSlot,
9609
- as: Component = "div"
9610
- }) => {
9611
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex w-[340px] flex-col items-center justify-center text-center", children: [
9612
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-auto [&>svg]:w-[126px]", children: iconSlot }),
9613
- /* @__PURE__ */ jsxRuntime.jsx(Component, { className: "text-neutral6 pt-8 font-serif text-header-xl font-semibold", children: titleSlot }),
9614
- /* @__PURE__ */ jsxRuntime.jsx(Txt, { variant: "ui-lg", className: "text-neutral3 pb-8", children: descriptionSlot }),
9615
- actionSlot
9616
- ] });
9617
- };
9801
+ className,
9802
+ as: HeadingTag = "h3"
9803
+ }) {
9804
+ return /* @__PURE__ */ jsxRuntime.jsxs(
9805
+ "div",
9806
+ {
9807
+ className: cn(
9808
+ "flex flex-col items-center justify-center text-center py-10 px-6",
9809
+ "transition-opacity duration-normal ease-out-custom",
9810
+ className
9811
+ ),
9812
+ children: [
9813
+ iconSlot && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-4", children: iconSlot }),
9814
+ /* @__PURE__ */ jsxRuntime.jsx(HeadingTag, { className: "font-medium text-neutral5 text-ui-md", children: titleSlot }),
9815
+ descriptionSlot && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1.5 text-neutral3 text-ui-sm max-w-md", children: descriptionSlot }),
9816
+ actionSlot && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-5", children: actionSlot })
9817
+ ]
9818
+ }
9819
+ );
9820
+ }
9618
9821
 
9619
9822
  const rowSize = {
9620
9823
  default: "[&>tbody>tr]:h-table-row",
@@ -9624,14 +9827,14 @@ const Table = ({ className, children, size = "default", style }) => {
9624
9827
  return /* @__PURE__ */ jsxRuntime.jsx("table", { className: cn("w-full", rowSize[size], className), style, children });
9625
9828
  };
9626
9829
  const Thead = ({ className, children }) => {
9627
- return /* @__PURE__ */ jsxRuntime.jsx("thead", { children: /* @__PURE__ */ jsxRuntime.jsx("tr", { className: cn("h-table-header border-b border-border1 bg-surface2", className), children }) });
9830
+ return /* @__PURE__ */ jsxRuntime.jsx("thead", { children: /* @__PURE__ */ jsxRuntime.jsx("tr", { className: cn("h-table-header border-b border-border1 bg-surface2/80", className), children }) });
9628
9831
  };
9629
9832
  const Th = ({ className, children, ...props }) => {
9630
9833
  return /* @__PURE__ */ jsxRuntime.jsx(
9631
9834
  "th",
9632
9835
  {
9633
9836
  className: cn(
9634
- "text-neutral3 text-ui-sm h-full whitespace-nowrap text-left font-normal uppercase first:pl-3 last:pr-3",
9837
+ "text-neutral2 text-ui-xs h-full whitespace-nowrap text-left font-medium uppercase tracking-wide first:pl-3 last:pr-3",
9635
9838
  className
9636
9839
  ),
9637
9840
  ...props,
@@ -9653,7 +9856,12 @@ const Row = React.forwardRef(
9653
9856
  "tr",
9654
9857
  {
9655
9858
  className: cn(
9656
- "border-b border-border1 hover:bg-surface3 focus:bg-surface3 -outline-offset-2",
9859
+ "border-b border-border1",
9860
+ // Smooth hover transition
9861
+ "transition-colors duration-normal ease-out-custom",
9862
+ "hover:bg-surface3",
9863
+ // Focus state
9864
+ "focus:bg-surface3 focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent1/50",
9657
9865
  selected && "bg-surface4",
9658
9866
  onClick && "cursor-pointer",
9659
9867
  className
@@ -9966,10 +10174,12 @@ const Searchbar = ({ onSearch, label, placeholder, debounceMs = 300, size = "md"
9966
10174
  "border border-border1 flex w-full items-center gap-2 overflow-hidden pl-2 pr-1",
9967
10175
  formElementRadius,
9968
10176
  formElementFocusWithin,
10177
+ transitions.all,
10178
+ "hover:border-neutral2",
9969
10179
  searchbarSizeClasses[size]
9970
10180
  ),
9971
10181
  children: [
9972
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.SearchIcon, { className: "text-neutral3 h-4 w-4" }),
10182
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.SearchIcon, { className: cn("text-neutral3 h-4 w-4", transitions.colors) }),
9973
10183
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1", children: [
9974
10184
  /* @__PURE__ */ jsxRuntime.jsx("label", { htmlFor: id, className: "sr-only", children: label }),
9975
10185
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -9979,7 +10189,7 @@ const Searchbar = ({ onSearch, label, placeholder, debounceMs = 300, size = "md"
9979
10189
  type: "text",
9980
10190
  placeholder,
9981
10191
  className: cn(
9982
- "bg-surface2 text-ui-md placeholder:text-icon-3 block w-full px-2 outline-none",
10192
+ "bg-transparent text-ui-md placeholder:text-neutral3 block w-full px-2 outline-none",
9983
10193
  searchbarSizeClasses[size]
9984
10194
  ),
9985
10195
  name: id,
@@ -10092,16 +10302,18 @@ const TabList = ({ children, variant = "default", className }) => {
10092
10302
  RadixTabs__namespace.List,
10093
10303
  {
10094
10304
  className: cn(
10095
- "flex items-center",
10305
+ "flex items-center relative",
10096
10306
  {
10097
10307
  // variant: default
10098
10308
  "text-ui-lg": variant === "default",
10099
10309
  "[&>button]:py-2 [&>button]:px-6 [&>button]:font-normal [&>button]:text-neutral3 [&>button]:flex-1 [&>button]:border-b [&>button]:border-border1": variant === "default",
10100
- "[&>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",
10310
+ [`[&>button]:${transitions.colors} [&>button]:hover:text-neutral4`]: variant === "default",
10311
+ "[&>button[data-state=active]]:text-neutral5 [&>button[data-state=active]]:border-accent1": variant === "default",
10101
10312
  // variant: buttons
10102
10313
  "border border-border1 flex justify-stretch rounded-md overflow-hidden text-ui-md min-h-[2.5rem]": variant === "buttons",
10103
- "[&>button]:flex-1 [&>button]:py-2 [&>button]:px-4 [&>button]:text-neutral3": variant === "buttons",
10104
- "[&>button[data-state=active]]:text-neutral5 [&>button[data-state=active]]:bg-surface4": variant === "buttons"
10314
+ [`[&>button]:flex-1 [&>button]:py-2 [&>button]:px-4 [&>button]:text-neutral3 [&>button]:${transitions.all}`]: variant === "buttons",
10315
+ "[&>button]:hover:text-neutral4 [&>button]:hover:bg-surface3": variant === "buttons",
10316
+ "[&>button[data-state=active]]:text-neutral5 [&>button[data-state=active]]:bg-surface4 [&>button[data-state=active]]:shadow-inner": variant === "buttons"
10105
10317
  },
10106
10318
  className
10107
10319
  ),
@@ -10116,7 +10328,11 @@ const Tab = ({ children, value, onClick, onClose, className }) => {
10116
10328
  {
10117
10329
  value,
10118
10330
  className: cn(
10119
- "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",
10331
+ "text-xs p-3 text-neutral3 whitespace-nowrap flex-shrink-0 flex items-center justify-center gap-1.5",
10332
+ transitions.all,
10333
+ focusRing.visible,
10334
+ "hover:text-neutral4",
10335
+ "data-[state=active]:text-neutral5 data-[state=active]:border-b-2 data-[state=active]:border-accent1",
10120
10336
  className
10121
10337
  ),
10122
10338
  onClick,
@@ -10129,7 +10345,7 @@ const Tab = ({ children, value, onClick, onClose, className }) => {
10129
10345
  e.stopPropagation();
10130
10346
  onClose();
10131
10347
  },
10132
- className: "p-0.5 hover:bg-surface3 rounded transition-colors",
10348
+ className: cn("p-0.5 hover:bg-surface4 rounded", transitions.colors, "hover:text-neutral5"),
10133
10349
  "aria-label": "Close tab",
10134
10350
  children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { className: "w-3 h-3" })
10135
10351
  }
@@ -10145,7 +10361,10 @@ const TabContent = ({ children, value, className }) => {
10145
10361
  {
10146
10362
  value,
10147
10363
  className: cn(
10148
- "grid py-3 overflow-y-auto ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:none",
10364
+ "grid py-3 overflow-y-auto ring-offset-background",
10365
+ focusRing.visible,
10366
+ "data-[state=active]:animate-in data-[state=active]:fade-in-0 data-[state=active]:duration-200",
10367
+ "data-[state=inactive]:animate-out data-[state=inactive]:fade-out-0 data-[state=inactive]:duration-150",
10149
10368
  className
10150
10369
  ),
10151
10370
  children
@@ -10197,21 +10416,27 @@ const TracingRunOptions = () => {
10197
10416
  ] });
10198
10417
  };
10199
10418
 
10200
- function Spinner({ color = "#fff", className }) {
10419
+ const sizeClasses = {
10420
+ sm: "w-4 h-4",
10421
+ md: "w-6 h-6",
10422
+ lg: "w-8 h-8"
10423
+ };
10424
+ function Spinner({ color, className, size = "md" }) {
10201
10425
  return /* @__PURE__ */ jsxRuntime.jsx(
10202
10426
  "svg",
10203
10427
  {
10204
- className: cn("animate-spin duration-700", className),
10428
+ className: cn("animate-spin", sizeClasses[size], className),
10429
+ style: { animationDuration: "800ms", animationTimingFunction: "cubic-bezier(0.4, 0, 0.2, 1)" },
10205
10430
  xmlns: "http://www.w3.org/2000/svg",
10206
10431
  width: "24",
10207
10432
  height: "24",
10208
10433
  viewBox: "0 0 24 24",
10209
10434
  fill: "none",
10210
10435
  stroke: "currentColor",
10211
- strokeWidth: "2",
10436
+ strokeWidth: "2.5",
10212
10437
  strokeLinecap: "round",
10213
10438
  strokeLinejoin: "round",
10214
- children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M21 12a9 9 0 1 1-6.219-8.56", stroke: color })
10439
+ children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M21 12a9 9 0 1 1-6.219-8.56", stroke: color || "currentColor", className: "text-accent1" })
10215
10440
  }
10216
10441
  );
10217
10442
  }
@@ -10546,59 +10771,84 @@ function Combobox({
10546
10771
  ]
10547
10772
  }
10548
10773
  ) }),
10549
- /* @__PURE__ */ jsxRuntime.jsx(PopoverContent, { className: "p-0 w-fit", align: "start", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex h-full w-full flex-col overflow-hidden rounded-md bg-surface3 text-neutral5", children: [
10550
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center border-b px-3 py-2", children: [
10551
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Search, { className: "mr-2 h-4 w-4 shrink-0 opacity-50" }),
10552
- /* @__PURE__ */ jsxRuntime.jsx(
10553
- "input",
10554
- {
10555
- ref: inputRef,
10556
- 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",
10557
- placeholder: searchPlaceholder,
10558
- value: search,
10559
- onChange: (e) => setSearch(e.target.value),
10560
- onKeyDown: handleKeyDown,
10561
- role: "combobox",
10562
- "aria-autocomplete": "list",
10563
- "aria-controls": "combobox-options",
10564
- "aria-expanded": open
10565
- }
10566
- )
10567
- ] }),
10568
- /* @__PURE__ */ jsxRuntime.jsx(
10569
- "div",
10570
- {
10571
- ref: listRef,
10572
- id: "combobox-options",
10573
- role: "listbox",
10574
- className: "max-h-dropdown-max-height overflow-y-auto overflow-x-hidden p-1",
10575
- children: filteredOptions.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "py-6 text-center text-sm", children: emptyText }) : filteredOptions.map((option, index) => {
10576
- const isSelected = value === option.value;
10577
- const isHighlighted = index === highlightedIndex;
10578
- return /* @__PURE__ */ jsxRuntime.jsxs(
10579
- "div",
10774
+ /* @__PURE__ */ jsxRuntime.jsx(PopoverContent, { className: "p-0 w-fit", align: "start", children: /* @__PURE__ */ jsxRuntime.jsxs(
10775
+ "div",
10776
+ {
10777
+ className: cn(
10778
+ "flex h-full w-full flex-col overflow-hidden rounded-md bg-surface3 text-neutral5",
10779
+ "shadow-elevated",
10780
+ "animate-in fade-in-0 zoom-in-95 duration-150"
10781
+ ),
10782
+ children: [
10783
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex items-center border-b border-border1 px-3 py-2", transitions.colors), children: [
10784
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Search, { className: cn("mr-2 h-4 w-4 shrink-0 text-neutral3", transitions.colors) }),
10785
+ /* @__PURE__ */ jsxRuntime.jsx(
10786
+ "input",
10580
10787
  {
10581
- role: "option",
10582
- "aria-selected": isSelected,
10788
+ ref: inputRef,
10583
10789
  className: cn(
10584
- "relative flex cursor-pointer select-none items-center rounded-sm px-2 py-1.5 text-sm transition-colors",
10585
- "hover:bg-surface5 hover:text-neutral5",
10586
- isHighlighted && "bg-surface5 text-neutral5",
10587
- isSelected && !isHighlighted && "bg-surface5/50"
10790
+ "flex h-8 w-full rounded-md bg-transparent py-1 text-sm",
10791
+ "placeholder:text-neutral3 disabled:cursor-not-allowed disabled:opacity-50",
10792
+ "outline-none",
10793
+ transitions.colors
10588
10794
  ),
10589
- onClick: () => handleSelect(option.value),
10590
- onMouseEnter: () => setHighlightedIndex(index),
10591
- children: [
10592
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { className: cn("mr-2 h-4 w-4", isSelected ? "opacity-100" : "opacity-0") }),
10593
- option.label
10594
- ]
10595
- },
10596
- option.value
10597
- );
10598
- })
10599
- }
10600
- )
10601
- ] }) })
10795
+ placeholder: searchPlaceholder,
10796
+ value: search,
10797
+ onChange: (e) => setSearch(e.target.value),
10798
+ onKeyDown: handleKeyDown,
10799
+ role: "combobox",
10800
+ "aria-autocomplete": "list",
10801
+ "aria-controls": "combobox-options",
10802
+ "aria-expanded": open
10803
+ }
10804
+ )
10805
+ ] }),
10806
+ /* @__PURE__ */ jsxRuntime.jsx(
10807
+ "div",
10808
+ {
10809
+ ref: listRef,
10810
+ id: "combobox-options",
10811
+ role: "listbox",
10812
+ className: "max-h-dropdown-max-height overflow-y-auto overflow-x-hidden p-1",
10813
+ children: filteredOptions.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "py-6 text-center text-sm text-neutral3", children: emptyText }) : filteredOptions.map((option, index) => {
10814
+ const isSelected = value === option.value;
10815
+ const isHighlighted = index === highlightedIndex;
10816
+ return /* @__PURE__ */ jsxRuntime.jsxs(
10817
+ "div",
10818
+ {
10819
+ role: "option",
10820
+ "aria-selected": isSelected,
10821
+ className: cn(
10822
+ "relative flex cursor-pointer select-none items-center rounded-sm px-2 py-1.5 text-sm",
10823
+ transitions.colors,
10824
+ "hover:bg-surface5 hover:text-neutral5",
10825
+ isHighlighted && "bg-surface5 text-neutral5",
10826
+ isSelected && !isHighlighted && "bg-accent1Dark text-accent1"
10827
+ ),
10828
+ onClick: () => handleSelect(option.value),
10829
+ onMouseEnter: () => setHighlightedIndex(index),
10830
+ children: [
10831
+ /* @__PURE__ */ jsxRuntime.jsx(
10832
+ lucideReact.Check,
10833
+ {
10834
+ className: cn(
10835
+ "mr-2 h-4 w-4",
10836
+ transitions.opacity,
10837
+ isSelected ? "opacity-100 text-accent1" : "opacity-0"
10838
+ )
10839
+ }
10840
+ ),
10841
+ option.label
10842
+ ]
10843
+ },
10844
+ option.value
10845
+ );
10846
+ })
10847
+ }
10848
+ )
10849
+ ]
10850
+ }
10851
+ ) })
10602
10852
  ] });
10603
10853
  }
10604
10854
 
@@ -10805,7 +11055,7 @@ const LoadingBadge = () => {
10805
11055
  return /* @__PURE__ */ jsxRuntime.jsx(
10806
11056
  BadgeWrapper,
10807
11057
  {
10808
- icon: /* @__PURE__ */ jsxRuntime.jsx(Spinner, { color: tokens.Colors.neutral3 }),
11058
+ icon: /* @__PURE__ */ jsxRuntime.jsx(Spinner, { color: spacings.Colors.neutral3 }),
10809
11059
  title: /* @__PURE__ */ jsxRuntime.jsx(Skeleton, { className: "ml-2 w-12 h-2" }),
10810
11060
  collapsible: false
10811
11061
  }
@@ -14120,22 +14370,19 @@ function EntryListEntry({ entry, isSelected, onClick, children, columns }) {
14120
14370
  className: cn(
14121
14371
  "border-t text-neutral5 border-border1 last:border-b-0 text-ui-md",
14122
14372
  "[&:last-child>button]:rounded-b-lg",
14373
+ transitions.colors,
14123
14374
  {
14124
- "bg-surface5": isSelected
14375
+ "bg-accent1Dark": isSelected
14125
14376
  }
14126
14377
  ),
14127
14378
  children: /* @__PURE__ */ jsxRuntime.jsx(
14128
14379
  "button",
14129
14380
  {
14130
14381
  onClick: handleClick,
14131
- className: cn(
14132
- "grid w-full px-6 gap-6 text-left items-center min-h-12",
14133
- "focus-visible:outline-none focus-visible:shadow-[inset_0_0_0_1px_rgba(24,251,111,.75)]",
14134
- {
14135
- // hover effect only not for skeleton and selected
14136
- "hover:bg-surface4": entry && !isSelected
14137
- }
14138
- ),
14382
+ className: cn("grid w-full px-6 gap-6 text-left items-center min-h-12", transitions.colors, focusRing.visible, {
14383
+ // hover effect only not for skeleton and selected
14384
+ "hover:bg-surface4": entry && !isSelected
14385
+ }),
14139
14386
  style: { gridTemplateColumns: getColumnTemplate(columns) },
14140
14387
  disabled: !entry,
14141
14388
  children
@@ -14379,18 +14626,28 @@ function SideDialogRoot({
14379
14626
  }) {
14380
14627
  const isConfirmation = variant === "confirmation";
14381
14628
  return /* @__PURE__ */ jsxRuntime.jsx(DialogPrimitive__namespace.Root, { open: isOpen, onOpenChange: onClose, children: /* @__PURE__ */ jsxRuntime.jsxs(DialogPrimitive__namespace.Portal, { children: [
14382
- !isConfirmation && /* @__PURE__ */ jsxRuntime.jsx(DialogPrimitive__namespace.Overlay, { className: cn("bg-black top-0 bottom-0 right-0 left-0 fixed z-50 opacity-40") }),
14629
+ !isConfirmation && /* @__PURE__ */ jsxRuntime.jsx(
14630
+ DialogPrimitive__namespace.Overlay,
14631
+ {
14632
+ className: cn(
14633
+ "bg-overlay backdrop-blur-sm top-0 bottom-0 right-0 left-0 fixed z-50",
14634
+ "data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:duration-200",
14635
+ "data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:duration-150"
14636
+ )
14637
+ }
14638
+ ),
14383
14639
  /* @__PURE__ */ jsxRuntime.jsxs(
14384
14640
  DialogPrimitive__namespace.Content,
14385
14641
  {
14386
14642
  className: cn(
14387
- "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 ",
14643
+ "fixed top-0 bottom-0 right-0 border-l border-border2 z-50 bg-surface2",
14644
+ "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",
14388
14645
  {
14389
14646
  "w-[75vw] 2xl:w-[65vw] 4xl:w-[55vw]": level === 1,
14390
14647
  "w-[70vw] 2xl:w-[59vw] 4xl:w-[48vw]": level === 2,
14391
14648
  "w-[65vw] 2xl:w-[53vw] 4xl:w-[41vw]": level === 3,
14392
- "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,
14393
- "bg-surface2/70": isConfirmation
14649
+ "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,
14650
+ "bg-surface2/70 backdrop-blur-sm": isConfirmation
14394
14651
  },
14395
14652
  className
14396
14653
  ),
@@ -14403,8 +14660,9 @@ function SideDialogRoot({
14403
14660
  "button",
14404
14661
  {
14405
14662
  className: cn(
14406
- "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",
14407
- "hover:surface5 hover:text-neutral5"
14663
+ "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",
14664
+ transitions.all,
14665
+ "hover:bg-surface4 hover:text-neutral5"
14408
14666
  ),
14409
14667
  "aria-label": "Close",
14410
14668
  children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronsRightIcon, {})
@@ -15629,7 +15887,13 @@ const Switch = React__namespace.forwardRef(({ className, ...props }, ref) => /*
15629
15887
  SwitchPrimitives__namespace.Root,
15630
15888
  {
15631
15889
  className: cn(
15632
- "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",
15890
+ "peer inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent",
15891
+ transitions.all,
15892
+ formElementFocus,
15893
+ "hover:brightness-110",
15894
+ "disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:brightness-100",
15895
+ "data-[state=checked]:bg-accent1 data-[state=checked]:shadow-glow-accent1",
15896
+ "data-[state=unchecked]:bg-neutral2",
15633
15897
  className
15634
15898
  ),
15635
15899
  ...props,
@@ -15638,7 +15902,10 @@ const Switch = React__namespace.forwardRef(({ className, ...props }, ref) => /*
15638
15902
  SwitchPrimitives__namespace.Thumb,
15639
15903
  {
15640
15904
  className: cn(
15641
- "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"
15905
+ "pointer-events-none block h-4 w-4 rounded-full bg-white shadow-md",
15906
+ "transition-all duration-normal ease-out-custom",
15907
+ "data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0",
15908
+ "data-[state=checked]:shadow-lg"
15642
15909
  )
15643
15910
  }
15644
15911
  )
@@ -16073,7 +16340,11 @@ const ThreadLink = ({ children, as: Component = "a", href, className, prefetch,
16073
16340
  href,
16074
16341
  prefetch,
16075
16342
  to,
16076
- className: cn("text-ui-sm flex h-full w-full flex-col justify-center font-medium cursor-pointer", className),
16343
+ className: cn(
16344
+ "text-ui-sm flex h-full w-full flex-col justify-center font-medium cursor-pointer",
16345
+ transitions.colors,
16346
+ className
16347
+ ),
16077
16348
  children
16078
16349
  }
16079
16350
  );
@@ -16086,8 +16357,10 @@ const ThreadItem = ({ children, isActive, className }) => {
16086
16357
  "li",
16087
16358
  {
16088
16359
  className: cn(
16089
- "border-b border-border1 hover:bg-surface3 group flex h-[54px] items-center justify-between gap-2 px-3 py-2",
16090
- isActive && "bg-surface4",
16360
+ "border-b border-border1 group flex h-[54px] items-center justify-between gap-2 px-3 py-2",
16361
+ transitions.colors,
16362
+ "hover:bg-surface3",
16363
+ isActive && "bg-accent1Dark",
16091
16364
  className
16092
16365
  ),
16093
16366
  children
@@ -16098,9 +16371,15 @@ const ThreadDeleteButton = ({ onClick }) => {
16098
16371
  return /* @__PURE__ */ jsxRuntime.jsx(
16099
16372
  Button,
16100
16373
  {
16101
- className: "shrink-0 border-none bg-transparent opacity-0 transition-all group-focus-within:opacity-100 group-hover:opacity-100",
16374
+ variant: "ghost",
16375
+ className: cn(
16376
+ "shrink-0 opacity-0",
16377
+ transitions.all,
16378
+ "group-focus-within:opacity-100 group-hover:opacity-100",
16379
+ "hover:bg-surface4 hover:text-accent2"
16380
+ ),
16102
16381
  onClick,
16103
- children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { "aria-label": "delete thread", className: "text-neutral3" }) })
16382
+ children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { "aria-label": "delete thread", className: "text-neutral3 hover:text-accent2 transition-colors" }) })
16104
16383
  }
16105
16384
  );
16106
16385
  };
@@ -16119,7 +16398,9 @@ const AlertDialogOverlay = React__namespace.forwardRef(({ className, ...props },
16119
16398
  AlertDialogPrimitive__namespace.Overlay,
16120
16399
  {
16121
16400
  className: cn(
16122
- "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",
16401
+ "fixed inset-0 z-50 bg-overlay backdrop-blur-sm",
16402
+ "data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:duration-200",
16403
+ "data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:duration-150",
16123
16404
  className
16124
16405
  ),
16125
16406
  ...props,
@@ -16134,7 +16415,9 @@ const AlertDialogContent = React__namespace.forwardRef(({ className, ...props },
16134
16415
  {
16135
16416
  ref,
16136
16417
  className: cn(
16137
- "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%]",
16418
+ "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",
16419
+ "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",
16420
+ "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",
16138
16421
  className
16139
16422
  ),
16140
16423
  ...props
@@ -17926,30 +18209,53 @@ function ProcessStepListItem({ stepId, step, isActive, position }) {
17926
18209
  return /* @__PURE__ */ jsxRuntime.jsxs(
17927
18210
  "div",
17928
18211
  {
17929
- className: cn("grid gap-6 grid-cols-[1fr_auto] py-3 px-4 rounded-lg", {
17930
- "border border-dashed border-gray-500": isActive
18212
+ className: cn("grid gap-6 grid-cols-[1fr_auto] py-3 px-4 rounded-lg", transitions.all, {
18213
+ "border border-dashed border-neutral2 bg-surface3": isActive
17931
18214
  }),
17932
18215
  children: [
17933
18216
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-[auto_1fr] gap-2", children: [
17934
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-ui-md text-neutral5 min-w-6 flex justify-end", children: [
17935
- position,
17936
- "."
17937
- ] }),
18217
+ /* @__PURE__ */ jsxRuntime.jsxs(
18218
+ "span",
18219
+ {
18220
+ className: cn("text-ui-md min-w-6 flex justify-end", transitions.colors, {
18221
+ "text-neutral5": isActive || step.status === "success",
18222
+ "text-neutral3": !isActive && step.status !== "success"
18223
+ }),
18224
+ children: [
18225
+ position,
18226
+ "."
18227
+ ]
18228
+ }
18229
+ ),
17938
18230
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
17939
- /* @__PURE__ */ jsxRuntime.jsx("h4", { className: "text-ui-md text-neutral5", children: formatStepTitle(stepId) }),
17940
- step.description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-ui-md -mt-0.5", children: step.description })
18231
+ /* @__PURE__ */ jsxRuntime.jsx(
18232
+ "h4",
18233
+ {
18234
+ className: cn("text-ui-md", transitions.colors, {
18235
+ "text-neutral5": isActive || step.status === "success",
18236
+ "text-neutral3": !isActive && step.status !== "success"
18237
+ }),
18238
+ children: formatStepTitle(stepId)
18239
+ }
18240
+ ),
18241
+ step.description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-ui-md text-neutral2 -mt-0.5", children: step.description })
17941
18242
  ] })
17942
18243
  ] }),
17943
18244
  /* @__PURE__ */ jsxRuntime.jsx(
17944
18245
  "div",
17945
18246
  {
17946
- className: cn("w-[1.75rem] h-[1.75rem] rounded-full flex items-center justify-center self-center", {
17947
- "border border-gray-500 border-dashed": step.status === "pending",
17948
- "[&>svg]:text-white [&>svg]:w-[1rem] [&>svg]:h-[1rem]": step.status !== "running",
17949
- "w-[1.75rem] h-[1.75rem]": step.status === "running",
17950
- "bg-green-900": step.status === "success",
17951
- "bg-red-900": step.status === "failed"
17952
- }),
18247
+ className: cn(
18248
+ "w-[1.75rem] h-[1.75rem] rounded-full flex items-center justify-center self-center",
18249
+ transitions.all,
18250
+ {
18251
+ "border border-neutral2 border-dashed": step.status === "pending",
18252
+ "[&>svg]:text-white [&>svg]:w-[1rem] [&>svg]:h-[1rem]": step.status !== "running",
18253
+ "w-[1.75rem] h-[1.75rem]": step.status === "running",
18254
+ "bg-accent1Dark shadow-glow-accent1": step.status === "success",
18255
+ "bg-accent2Dark shadow-glow-accent2": step.status === "failed",
18256
+ "scale-110": step.status === "success" || step.status === "failed"
18257
+ }
18258
+ ),
17953
18259
  children: getStatusIcon(step.status)
17954
18260
  }
17955
18261
  )
@@ -17979,19 +18285,20 @@ function ProcessStepProgressBar({ steps }) {
17979
18285
  return /* @__PURE__ */ jsxRuntime.jsx(
17980
18286
  "div",
17981
18287
  {
17982
- className: cn("flex justify-end items-center relative h-[2rem] ", {
17983
- "bg-green-900": step.status === "success" && steps?.[idx - 1]?.status === "success"
18288
+ className: cn("flex justify-end items-center relative h-[2rem]", transitions.colors, {
18289
+ "bg-accent1Dark": step.status === "success" && steps?.[idx - 1]?.status === "success"
17984
18290
  }),
17985
18291
  children: /* @__PURE__ */ jsxRuntime.jsx(
17986
18292
  "div",
17987
18293
  {
17988
18294
  className: cn(
17989
18295
  "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",
18296
+ transitions.all,
17990
18297
  {
17991
- "border border-gray-500 border-dashed": step.status === "pending",
17992
- "[&>svg]:text-surface4 [&>svg]:w-[1.1rem] [&>svg]:h-[1.1rem]": step.status !== "running",
17993
- "bg-green-900 text-white": step.status === "success",
17994
- "bg-red-900 text-white": step.status === "failed"
18298
+ "border border-neutral2 border-dashed": step.status === "pending",
18299
+ "[&>svg]:text-surface1 [&>svg]:w-[1.1rem] [&>svg]:h-[1.1rem]": step.status !== "running",
18300
+ "bg-accent1Dark text-white shadow-glow-accent1 scale-110": step.status === "success",
18301
+ "bg-accent2Dark text-white shadow-glow-accent2 scale-110": step.status === "failed"
17995
18302
  }
17996
18303
  ),
17997
18304
  children: step.status === "running" ? /* @__PURE__ */ jsxRuntime.jsx(Spinner, {}) : idx + 1
@@ -18001,7 +18308,7 @@ function ProcessStepProgressBar({ steps }) {
18001
18308
  step.id
18002
18309
  );
18003
18310
  }) }),
18004
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-xs text-neutral3 text-center", children: [
18311
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("text-xs text-neutral3 text-center", transitions.colors), children: [
18005
18312
  completedSteps,
18006
18313
  " of ",
18007
18314
  totalSteps,
@@ -19874,46 +20181,67 @@ function Notification({
19874
20181
  type = "info"
19875
20182
  }) {
19876
20183
  const [localIsVisible, setLocalIsVisible] = React.useState(isVisible);
20184
+ const [isAnimatingOut, setIsAnimatingOut] = React.useState(false);
19877
20185
  React.useEffect(() => {
19878
20186
  if (dismissible && autoDismiss && isVisible) {
19879
20187
  const timer = setTimeout(() => {
19880
- setLocalIsVisible(false);
20188
+ handleDismiss();
19881
20189
  }, dismissTime);
19882
20190
  return () => clearTimeout(timer);
19883
20191
  }
19884
- }, [autoDismiss, isVisible, dismissTime]);
20192
+ }, [autoDismiss, isVisible, dismissTime, dismissible]);
19885
20193
  React.useEffect(() => {
19886
- setLocalIsVisible(isVisible);
20194
+ if (isVisible) {
20195
+ setIsAnimatingOut(false);
20196
+ setLocalIsVisible(true);
20197
+ }
19887
20198
  }, [isVisible]);
20199
+ const handleDismiss = () => {
20200
+ setIsAnimatingOut(true);
20201
+ setTimeout(() => {
20202
+ setLocalIsVisible(false);
20203
+ setIsAnimatingOut(false);
20204
+ }, 200);
20205
+ };
19888
20206
  if (!localIsVisible) return null;
20207
+ const typeStyles = {
20208
+ info: "bg-surface4 border-border1",
20209
+ error: "bg-accent2Darker border-accent2/30",
20210
+ success: "bg-accent1Darker border-accent1/30",
20211
+ warning: "bg-accent6Darker border-accent6/30"
20212
+ };
20213
+ const iconStyles = {
20214
+ info: "text-accent5",
20215
+ error: "text-accent2",
20216
+ success: "text-accent1",
20217
+ warning: "text-accent6"
20218
+ };
19889
20219
  return /* @__PURE__ */ jsxRuntime.jsxs(
19890
20220
  "div",
19891
20221
  {
19892
20222
  className: cn(
19893
- "grid grid-cols-[1fr_auto] gap-2 rounded-lg bg-white/5 p-6 py-4 text-ui-md text-neutral3 items-center",
19894
- {
19895
- "bg-red-900/10 border border-red-900": type === "error"
19896
- },
20223
+ "grid grid-cols-[auto_1fr_auto] gap-3 rounded-lg border p-4 text-ui-md text-neutral4 items-start",
20224
+ "shadow-card",
20225
+ transitions.all,
20226
+ 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",
20227
+ typeStyles[type],
19897
20228
  className
19898
20229
  ),
19899
20230
  children: [
19900
- /* @__PURE__ */ jsxRuntime.jsx(
19901
- "div",
20231
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex-shrink-0 mt-0.5", iconStyles[type]), children: type === "error" || type === "warning" ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.AlertTriangleIcon, { className: "h-4 w-4" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.InfoIcon, { className: "h-4 w-4" }) }),
20232
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex gap-2 items-start min-w-0", children }),
20233
+ dismissible && /* @__PURE__ */ jsxRuntime.jsxs(
20234
+ Button,
19902
20235
  {
19903
- className: cn(
19904
- "flex gap-2 items-start",
19905
- "[&>svg]:w-[1.2em] [&>svg]:h-[1.2em] [&>svg]:opacity-70 [&>svg]:translate-y-0.5",
19906
- {
19907
- "[&>svg]:text-red-400": type === "error"
19908
- }
19909
- ),
19910
- children
20236
+ variant: "ghost",
20237
+ className: cn("h-6 w-6 p-0 flex-shrink-0", transitions.colors, "hover:bg-surface5"),
20238
+ onClick: handleDismiss,
20239
+ children: [
20240
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.XIcon, { className: "h-4 w-4" }),
20241
+ /* @__PURE__ */ jsxRuntime.jsx(VisuallyHidden.VisuallyHidden, { children: "Dismiss" })
20242
+ ]
19911
20243
  }
19912
- ),
19913
- dismissible && /* @__PURE__ */ jsxRuntime.jsxs(Button, { onClick: () => setLocalIsVisible(false), children: [
19914
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.XIcon, {}),
19915
- /* @__PURE__ */ jsxRuntime.jsx(VisuallyHidden.VisuallyHidden, { children: "Dismiss" })
19916
- ] })
20244
+ )
19917
20245
  ]
19918
20246
  }
19919
20247
  );
@@ -20019,7 +20347,8 @@ const Crumb = ({ className, as, isCurrent, action, ...props }) => {
20019
20347
  "aria-current": isCurrent ? "page" : void 0,
20020
20348
  className: cn(
20021
20349
  "text-ui-md leading-ui-md flex items-center gap-2",
20022
- isCurrent ? "text-white" : "text-neutral3",
20350
+ transitions.colors,
20351
+ isCurrent ? "text-white" : "text-neutral3 hover:text-neutral5",
20023
20352
  className
20024
20353
  ),
20025
20354
  ...props
@@ -20027,7 +20356,7 @@ const Crumb = ({ className, as, isCurrent, action, ...props }) => {
20027
20356
  ),
20028
20357
  action
20029
20358
  ] }),
20030
- !isCurrent && /* @__PURE__ */ jsxRuntime.jsx("li", { role: "separator", className: "flex h-full items-center", children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { className: "text-neutral3", children: /* @__PURE__ */ jsxRuntime.jsx(SlashIcon, {}) }) })
20359
+ !isCurrent && /* @__PURE__ */ jsxRuntime.jsx("li", { role: "separator", className: "flex h-full items-center", children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { className: cn("text-neutral2", transitions.colors), children: /* @__PURE__ */ jsxRuntime.jsx(SlashIcon, {}) }) })
20031
20360
  ] });
20032
20361
  };
20033
20362
 
@@ -20096,12 +20425,24 @@ const LogoWithoutText = (props) => /* @__PURE__ */ jsxRuntime.jsx("svg", { xmlns
20096
20425
  ) });
20097
20426
 
20098
20427
  const themeClasses = {
20099
- light: "bg-gray-100 border-gray-300 text-gray-700",
20100
- dark: "bg-surface4 border-border1 text-neutral6"
20428
+ light: "bg-gray-100 border-gray-300 text-gray-700 shadow-[0_1px_0_rgba(0,0,0,0.1)]",
20429
+ dark: "bg-surface4 border-border1 text-neutral5 shadow-[0_1px_0_rgba(0,0,0,0.3)]"
20101
20430
  };
20102
- const Kbd = ({ children, theme = "dark" }) => {
20431
+ const Kbd = ({ children, theme = "dark", className }) => {
20103
20432
  const themeClass = themeClasses[theme];
20104
- return /* @__PURE__ */ jsxRuntime.jsx("kbd", { className: cn("border rounded-md px-1 py-0.5 font-mono", themeClass), children });
20433
+ return /* @__PURE__ */ jsxRuntime.jsx(
20434
+ "kbd",
20435
+ {
20436
+ className: cn(
20437
+ "border rounded-md px-1.5 py-0.5 font-mono text-ui-sm inline-flex items-center justify-center min-w-[1.5rem]",
20438
+ transitions.transform,
20439
+ "active:scale-95 active:shadow-none",
20440
+ themeClass,
20441
+ className
20442
+ ),
20443
+ children
20444
+ }
20445
+ );
20105
20446
  };
20106
20447
 
20107
20448
  const SIDEBAR_COOKIE_NAME = "sidebar:state";
@@ -20171,6 +20512,8 @@ function MainSidebarRoot({ children, className }) {
20171
20512
  {
20172
20513
  className: cn(
20173
20514
  "flex flex-col h-full px-4 relative overflow-y-auto",
20515
+ // Smooth width transition for collapse/expand
20516
+ "transition-all duration-slow ease-out-custom",
20174
20517
  {
20175
20518
  "lg:min-w-52 xl:min-w-56 2xl:min-w-60 3xl:min-w-64 4xl:min-w-72": !isCollapsed
20176
20519
  },
@@ -20187,8 +20530,10 @@ function MainSidebarRoot({ children, className }) {
20187
20530
  onClick: toggleSidebar,
20188
20531
  className: cn(
20189
20532
  "inline-flex w-auto items-center text-neutral3 h-8 px-3 rounded-md ml-auto",
20190
- "hover:bg-surface4",
20191
- "[&_svg]:w-[1rem] [&_svg]:h-[1rem] [&_svg]:text-neutral3",
20533
+ "hover:bg-surface4 hover:text-neutral5",
20534
+ "transition-all duration-normal ease-out-custom",
20535
+ "focus:outline-none focus:ring-1 focus:ring-accent1 focus:shadow-focus-ring",
20536
+ "[&_svg]:w-[1rem] [&_svg]:h-[1rem] [&_svg]:text-neutral3 [&_svg]:transition-transform [&_svg]:duration-normal",
20192
20537
  {
20193
20538
  "ml-auto": !isCollapsed
20194
20539
  }
@@ -20256,15 +20601,23 @@ function MainSidebarNavLink({
20256
20601
  "li",
20257
20602
  {
20258
20603
  className: cn(
20259
- "flex",
20604
+ "flex relative",
20605
+ // Base link styles with smooth transitions
20260
20606
  "[&>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",
20261
- "[&_svg]:w-4 [&_svg]:h-4 [&_svg]:text-neutral3/60",
20607
+ "[&>a]:transition-all [&>a]:duration-normal [&>a]:ease-out-custom",
20608
+ // Icon styles with transitions
20609
+ "[&_svg]:w-4 [&_svg]:h-4 [&_svg]:text-neutral3/60 [&_svg]:transition-colors [&_svg]:duration-normal",
20610
+ // Hover states
20262
20611
  "[&>a:hover]:bg-surface4 [&>a:hover]:text-neutral5 [&>a:hover_svg]:text-neutral3",
20263
20612
  {
20613
+ // Active state with left indicator bar
20264
20614
  "[&>a]:text-neutral5 [&>a]:bg-surface3": isActive,
20265
20615
  "[&_svg]:text-neutral5": isActive,
20616
+ // Active indicator bar
20617
+ "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,
20266
20618
  "[&>a]:justify-start": !isCollapsed,
20267
20619
  "[&_svg]:text-neutral3": isCollapsed,
20620
+ // Featured variant
20268
20621
  "[&>a]:rounded-md [&>a]:my-2 [&>a]:bg-accent1/75 [&>a:hover]:bg-accent1/85 [&>a]:text-black [&>a:hover]:text-black": isFeatured,
20269
20622
  "[&_svg]:text-black/75 [&>a:hover_svg]:text-black": isFeatured
20270
20623
  },