@nebutra/ui 0.2.2 → 0.2.3

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.
@@ -1,15 +1,15 @@
1
1
  "use client";
2
2
  import { Accordion as Accordion$1 } from '@base-ui/react/accordion';
3
- import { ChevronUpDown, Check, ChevronRight, ChevronDown, ArrowRight, MagnifyingGlass, Plus, Cross, Star, VerifiedCheck, MoreHorizontal, ArrowLeft, RotateClockwise, Copy, CheckCircle, Status, LoaderCircle, EyeOff, Eye, Warning, Hash, Code, Link as Link$1, Information, Minus, Shield, RefreshClockwise, External, Message, ArrowUpRight, ChartTrendingUp, ChartTrendingDown, LockClosed, ChevronDoubleLeft, ChevronLeft, ChevronDoubleRight, Question, ChevronUp, MoreVertical, DeviceDesktop, Sun, Moon, Sparkles, Pause, Play, SpeakerOff, SpeakerVolumeLoud, SpeakerVolumeQuiet, Trash, FolderOpen, FolderClosed, File, CrossCircle, ClockDashed, FaceHappy, FaceSmile, FaceUnhappy, FaceSad, Image, PlayFill, FileText } from '@nebutra/icons';
3
+ import { ChevronUpDown, Check, ChevronRight, ChevronDown, ArrowRight, MagnifyingGlass, Plus, Cross, Star, VerifiedCheck, MoreHorizontal, ArrowLeft, RotateClockwise, Copy, CheckCircle, Status, LoaderCircle, EyeOff, Eye, Warning, Information, Minus, Shield, RefreshClockwise, External, Message, ArrowUpRight, ChartTrendingUp, ChartTrendingDown, LockClosed, ChevronDoubleLeft, ChevronLeft, ChevronDoubleRight, Question, ChevronUp, MoreVertical, DeviceDesktop, Sun, Moon, Sparkles, Pause, Play, SpeakerOff, SpeakerVolumeLoud, SpeakerVolumeQuiet, Trash, Hash, Code, Link as Link$1, FolderOpen, FolderClosed, File, CrossCircle, ClockDashed, FaceHappy, FaceSmile, FaceUnhappy, FaceSad, Image, PlayFill, FileText } from '@nebutra/icons';
4
4
  import { clsx } from 'clsx';
5
5
  import { twMerge } from 'tailwind-merge';
6
6
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
7
7
  import * as React45 from 'react';
8
8
  import React45__default, { useState, useMemo, useEffect, createContext, memo, useId, useRef, use, useCallback, isValidElement, Children, cloneElement, useImperativeHandle, Component, useEffectEvent, createElement, Suspense } from 'react';
9
- import { useReducedMotion, AnimatePresence, motion, LayoutGroup, useMotionValue, useMotionTemplate, LazyMotion, domAnimation, m, useInView, animate, useScroll, useVelocity, useSpring, useTransform, useAnimationFrame } from 'framer-motion';
9
+ import { useReducedMotion, AnimatePresence, motion, LayoutGroup, LazyMotion, domAnimation, useMotionValue, useMotionTemplate, m, useInView, animate, useScroll, useVelocity, useSpring, useTransform, useAnimationFrame } from 'framer-motion';
10
10
  import { cva } from 'class-variance-authority';
11
11
  import { AlertDialog as AlertDialog$1 } from '@base-ui/react/alert-dialog';
12
- import { colors, flow, emerge, motionDurationSec, brandSpring } from '@nebutra/brand';
12
+ import { colors, brandSpring, flow, emerge, motionDurationSec } from '@nebutra/brand';
13
13
  export { brandSpring } from '@nebutra/brand';
14
14
  import Image4 from 'next/image';
15
15
  import { Avatar as Avatar$1 } from '@base-ui/react/avatar';
@@ -140,6 +140,10 @@ function cn(...inputs) {
140
140
  }
141
141
 
142
142
  // src/utils/primitive-props.ts
143
+ function asPlainStyle(style) {
144
+ if (style == null || typeof style === "function") return {};
145
+ return style;
146
+ }
143
147
  function withHtmlProps(Component2) {
144
148
  return Component2;
145
149
  }
@@ -172,7 +176,7 @@ var AccordionTrigger = ({
172
176
  {
173
177
  ref,
174
178
  className: cn(
175
- "font-medium flex flex-1 items-center justify-between transition-[color,box-shadow] duration-flow ease-out hover:text-muted-foreground focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:outline-none [&[data-panel-open]>svg]:rotate-45",
179
+ "font-medium flex flex-1 items-center justify-between transition-[color,box-shadow] duration-flow ease-out hover:text-muted-foreground focus-visible:outline-none [&[data-panel-open]>svg]:rotate-45",
176
180
  size === "small" ? "py-2.5 text-sm" : "py-4 text-[15px]",
177
181
  className
178
182
  ),
@@ -211,6 +215,47 @@ var AccordionContent = ({
211
215
  );
212
216
  AccordionContent.displayName = "AccordionContent";
213
217
 
218
+ // src/tokens/motion.ts
219
+ var motionDurations = {
220
+ /** 200ms — state flow (modal, dropdown, tab — default) */
221
+ flow: 200,
222
+ /** 300ms — content unveil (slide, expand, accordion, drawer) */
223
+ reveal: 300,
224
+ /** 500ms — hero-grade cinematic (landing entrance, big delight) */
225
+ cinematic: 500
226
+ };
227
+ var easings = {
228
+ easeOut: [0, 0, 0.2, 1],
229
+ easeInOut: [0.4, 0, 0.2, 1],
230
+ spring: [0.34, 1.56, 0.64, 1]};
231
+ var motionVariants = {
232
+ fadeInUp: {
233
+ initial: { opacity: 0, y: 20 },
234
+ animate: { opacity: 1, y: 0 },
235
+ exit: { opacity: 0, y: 10 }
236
+ },
237
+ scaleIn: {
238
+ initial: { opacity: 0, scale: 0.95 },
239
+ animate: { opacity: 1, scale: 1 },
240
+ exit: { opacity: 0, scale: 0.95 }
241
+ }};
242
+ var staggerContainers = {
243
+ fast: {
244
+ initial: {},
245
+ animate: { transition: { staggerChildren: 0.05, delayChildren: 0.1 } }
246
+ },
247
+ normal: {
248
+ initial: {},
249
+ animate: { transition: { staggerChildren: 0.1, delayChildren: 0.2 } }
250
+ },
251
+ slow: {
252
+ initial: {},
253
+ animate: { transition: { staggerChildren: 0.15, delayChildren: 0.3 } }
254
+ }
255
+ };
256
+ var viewportSettings = {
257
+ once: { once: true, margin: "-100px" }};
258
+
214
259
  // src/utils/brand-colors.ts
215
260
  var BRAND_FALLBACK = {
216
261
  /** VI 云毓蓝 — identity only */
@@ -282,7 +327,7 @@ var StatusBadge = ({ status }) => {
282
327
  className: cn("rounded px-1.5 py-0.5 text-xs", colorClasses[status]),
283
328
  initial: { scale: 1 },
284
329
  animate: { scale: [1, 1.08, 1] },
285
- transition: { duration: 0.35, ease: [0.34, 1.56, 0.64, 1] },
330
+ transition: { duration: 0.35, ease: easings.spring },
286
331
  children: status
287
332
  },
288
333
  status
@@ -381,7 +426,7 @@ var AgentPlan = ({
381
426
  opacity: 1,
382
427
  overflow: "visible",
383
428
  transition: {
384
- duration: 0.25,
429
+ duration: motionDurations.reveal / 1e3,
385
430
  staggerChildren: prefersReducedMotion2 ? 0 : 0.05,
386
431
  ease: [0.2, 0.65, 0.3, 0.9]
387
432
  }
@@ -400,7 +445,7 @@ var AgentPlan = ({
400
445
  {
401
446
  className: "overflow-hidden rounded-[var(--radius-lg)] border border-border bg-card shadow",
402
447
  initial: { opacity: 0, y: 10 },
403
- animate: { opacity: 1, y: 0, transition: { duration: 0.3 } },
448
+ animate: { opacity: 1, y: 0, transition: { duration: motionDurations.reveal / 1e3 } },
404
449
  children: /* @__PURE__ */ jsx(LayoutGroup, { children: /* @__PURE__ */ jsx("div", { className: "overflow-hidden p-4", children: /* @__PURE__ */ jsx("ul", { className: "space-y-1 overflow-hidden", children: tasks.map((task, index) => {
405
450
  const isExpanded = expandedTasks.includes(task.id);
406
451
  const isCompleted = task.status === "completed";
@@ -781,7 +826,7 @@ function Alert({
781
826
  className: cn(
782
827
  "group shrink-0 size-4 inline-flex items-center justify-center rounded-[var(--radius-sm)]",
783
828
  "opacity-70 hover:opacity-100 transition-opacity",
784
- "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2"
829
+ "focus-visible:outline-none"
785
830
  ),
786
831
  children: /* @__PURE__ */ jsx(Cross, { className: "size-4" })
787
832
  }
@@ -948,7 +993,7 @@ var shadowClasses = {
948
993
  "2xl": "shadow-2xl"};
949
994
 
950
995
  // src/tokens/components/overlay.ts
951
- var overlayFocusRingClassName = "outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2";
996
+ var overlayFocusRingClassName = "outline-none";
952
997
  var overlayZIndex = {
953
998
  backdrop: 1040,
954
999
  modal: 1050,
@@ -1038,7 +1083,6 @@ var buttonVariants = cva(
1038
1083
  "rounded-[var(--btn-default-radius,var(--radius-md))]",
1039
1084
  "text-[length:var(--control-font-size-md,0.875rem)] font-[number:var(--font-weight-medium,500)]",
1040
1085
  "transition-colors duration-micro ease-out",
1041
- "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
1042
1086
  "disabled:pointer-events-none disabled:opacity-50",
1043
1087
  "aria-busy:cursor-wait"
1044
1088
  ].join(" "),
@@ -1065,8 +1109,30 @@ var buttonVariants = cva(
1065
1109
  },
1066
1110
  shape: {
1067
1111
  default: "",
1068
- square: "",
1069
- circle: ""
1112
+ // Radius from --btn-default-radius / --radius-md — brand-switchable.
1113
+ // Do not hardcode rounded-md here; a language must be able to retarget
1114
+ // the corner treatment of every icon trigger at once.
1115
+ square: "rounded-[var(--btn-default-radius,var(--radius-md))]",
1116
+ // Pill radius token, not Tailwind rounded-full — same 9999px default,
1117
+ // but a brand that ships a softer "circle" can override --radius-pill.
1118
+ circle: "rounded-[var(--radius-pill,9999px)]",
1119
+ pill: "rounded-[var(--radius-pill,9999px)]"
1120
+ },
1121
+ // Icon-only box size — orthogonal to `size` (which tunes text-button
1122
+ // height/padding/font together) and to `shape` (which picks the
1123
+ // corner treatment). Only takes effect combined with shape="square"
1124
+ // or shape="circle" (see compoundVariants below); every other
1125
+ // combination ignores it. 28/32/36 cover the icon-trigger sizes that
1126
+ // actually occur in the app — 24/40/48 are already reachable via
1127
+ // shape + size (tiny/default/lg). Heights read --control-height-icon-*
1128
+ // so density-aware Brand Packages can scale them with the ladder.
1129
+ iconSize: {
1130
+ sm: "",
1131
+ // 28px default
1132
+ md: "",
1133
+ // 32px default
1134
+ lg: ""
1135
+ // 36px default
1070
1136
  }
1071
1137
  },
1072
1138
  compoundVariants: [
@@ -1077,22 +1143,56 @@ var buttonVariants = cva(
1077
1143
  {
1078
1144
  shape: "circle",
1079
1145
  size: "tiny",
1080
- className: "w-[var(--control-height-tiny,1.5rem)] px-0 rounded-full"
1146
+ className: "w-[var(--control-height-tiny,1.5rem)] px-0"
1081
1147
  },
1082
1148
  {
1083
1149
  shape: "circle",
1084
1150
  size: "sm",
1085
- className: "w-[var(--control-height-sm,2rem)] px-0 rounded-full"
1151
+ className: "w-[var(--control-height-sm,2rem)] px-0"
1086
1152
  },
1087
1153
  {
1088
1154
  shape: "circle",
1089
1155
  size: "default",
1090
- className: "w-[var(--control-height-md,2.5rem)] px-0 rounded-full"
1156
+ className: "w-[var(--control-height-md,2.5rem)] px-0"
1091
1157
  },
1092
1158
  {
1093
1159
  shape: "circle",
1094
1160
  size: "lg",
1095
- className: "w-[var(--control-height-lg,3rem)] px-0 rounded-full"
1161
+ className: "w-[var(--control-height-lg,3rem)] px-0"
1162
+ },
1163
+ // iconSize wins over the size-driven box above — matched on shape +
1164
+ // iconSize only, so it applies regardless of whatever `size` was
1165
+ // passed (or left at its "default" fallback). Corner treatment stays
1166
+ // on the shape variant (token-backed); only the box is set here.
1167
+ {
1168
+ shape: "square",
1169
+ iconSize: "sm",
1170
+ className: "h-[var(--control-height-icon-sm,1.75rem)] w-[var(--control-height-icon-sm,1.75rem)] px-0"
1171
+ },
1172
+ {
1173
+ shape: "square",
1174
+ iconSize: "md",
1175
+ className: "h-[var(--control-height-icon-md,2rem)] w-[var(--control-height-icon-md,2rem)] px-0"
1176
+ },
1177
+ {
1178
+ shape: "square",
1179
+ iconSize: "lg",
1180
+ className: "h-[var(--control-height-icon-lg,2.25rem)] w-[var(--control-height-icon-lg,2.25rem)] px-0"
1181
+ },
1182
+ {
1183
+ shape: "circle",
1184
+ iconSize: "sm",
1185
+ className: "h-[var(--control-height-icon-sm,1.75rem)] w-[var(--control-height-icon-sm,1.75rem)] px-0"
1186
+ },
1187
+ {
1188
+ shape: "circle",
1189
+ iconSize: "md",
1190
+ className: "h-[var(--control-height-icon-md,2rem)] w-[var(--control-height-icon-md,2rem)] px-0"
1191
+ },
1192
+ {
1193
+ shape: "circle",
1194
+ iconSize: "lg",
1195
+ className: "h-[var(--control-height-icon-lg,2.25rem)] w-[var(--control-height-icon-lg,2.25rem)] px-0"
1096
1196
  }
1097
1197
  ],
1098
1198
  defaultVariants: {
@@ -1237,46 +1337,6 @@ var AlertDialogCancel = ({
1237
1337
  );
1238
1338
  };
1239
1339
  AlertDialogCancel.displayName = "AlertDialogCancel";
1240
-
1241
- // src/tokens/motion.ts
1242
- var motionDurations = {
1243
- /** 200ms — state flow (modal, dropdown, tab — default) */
1244
- flow: 200,
1245
- /** 300ms — content unveil (slide, expand, accordion, drawer) */
1246
- reveal: 300,
1247
- /** 500ms — hero-grade cinematic (landing entrance, big delight) */
1248
- cinematic: 500
1249
- };
1250
- var easings = {
1251
- easeOut: [0, 0, 0.2, 1],
1252
- easeInOut: [0.4, 0, 0.2, 1]};
1253
- var motionVariants = {
1254
- fadeInUp: {
1255
- initial: { opacity: 0, y: 20 },
1256
- animate: { opacity: 1, y: 0 },
1257
- exit: { opacity: 0, y: 10 }
1258
- },
1259
- scaleIn: {
1260
- initial: { opacity: 0, scale: 0.95 },
1261
- animate: { opacity: 1, scale: 1 },
1262
- exit: { opacity: 0, scale: 0.95 }
1263
- }};
1264
- var staggerContainers = {
1265
- fast: {
1266
- initial: {},
1267
- animate: { transition: { staggerChildren: 0.05, delayChildren: 0.1 } }
1268
- },
1269
- normal: {
1270
- initial: {},
1271
- animate: { transition: { staggerChildren: 0.1, delayChildren: 0.2 } }
1272
- },
1273
- slow: {
1274
- initial: {},
1275
- animate: { transition: { staggerChildren: 0.15, delayChildren: 0.3 } }
1276
- }
1277
- };
1278
- var viewportSettings = {
1279
- once: { once: true, margin: "-100px" }};
1280
1340
  var fadeInVariant = {
1281
1341
  initial: { opacity: 0 },
1282
1342
  animate: { opacity: 1 },
@@ -1303,13 +1363,61 @@ var PRESETS = {
1303
1363
  /** Fade + rise */
1304
1364
  fadeUp: motionVariants.fadeInUp,
1305
1365
  /** Scale in */
1306
- scale: motionVariants.scaleIn
1366
+ scale: motionVariants.scaleIn,
1367
+ /**
1368
+ * Keyed content swap — short, symmetric, blur-softened. Rises in, sinks out.
1369
+ * Shorter and shallower than `emerge` on purpose: a swap replaces content the
1370
+ * reader is already looking at, so it must resolve inside the reveal rail.
1371
+ * Pair with `AnimateSwap`.
1372
+ */
1373
+ swap: {
1374
+ initial: { opacity: 0, y: 10, filter: "blur(4px)" },
1375
+ animate: { opacity: 1, y: 0, filter: "blur(0px)" },
1376
+ exit: { opacity: 0, y: -10, filter: "blur(4px)" },
1377
+ transition: { duration: motionDurations.reveal / 1e3 }
1378
+ },
1379
+ /** Off-canvas panel entering from the right edge (drawer, sheet). */
1380
+ slideFromRight: {
1381
+ initial: { x: "100%" },
1382
+ animate: { x: 0 },
1383
+ exit: { x: "100%" },
1384
+ transition: brandSpring.default
1385
+ },
1386
+ /** Off-canvas panel entering from the left edge. */
1387
+ slideFromLeft: {
1388
+ initial: { x: "-100%" },
1389
+ animate: { x: 0 },
1390
+ exit: { x: "-100%" },
1391
+ transition: brandSpring.default
1392
+ },
1393
+ /** Off-canvas panel entering from the top edge (banner, command bar). */
1394
+ slideFromTop: {
1395
+ initial: { y: "-100%" },
1396
+ animate: { y: 0 },
1397
+ exit: { y: "-100%" },
1398
+ transition: brandSpring.default
1399
+ },
1400
+ /** Off-canvas panel entering from the bottom edge (mobile action sheet). */
1401
+ slideFromBottom: {
1402
+ initial: { y: "100%" },
1403
+ animate: { y: 0 },
1404
+ exit: { y: "100%" },
1405
+ transition: brandSpring.default
1406
+ }
1307
1407
  };
1308
1408
  function MotionDiv(props) {
1309
1409
  return /* @__PURE__ */ jsx(LazyMotion, { features: domAnimation, children: /* @__PURE__ */ jsx(m.div, { ...props }) });
1310
1410
  }
1311
1411
  function AnimateIn(props) {
1312
- const { children, preset = "emerge", delay = 0, duration, inView = false, className } = props;
1412
+ const {
1413
+ children,
1414
+ preset = "emerge",
1415
+ delay = 0,
1416
+ duration,
1417
+ inView = false,
1418
+ className,
1419
+ ...rest
1420
+ } = props;
1313
1421
  const shouldReduce = useReducedMotion();
1314
1422
  const base = PRESETS[preset] || PRESETS.emerge;
1315
1423
  const initial = shouldReduce ? { opacity: 0 } : base.initial;
@@ -1324,6 +1432,7 @@ function AnimateIn(props) {
1324
1432
  return /* @__PURE__ */ jsx(
1325
1433
  MotionDiv,
1326
1434
  {
1435
+ ...rest,
1327
1436
  className,
1328
1437
  initial,
1329
1438
  whileInView: animate2,
@@ -1337,6 +1446,7 @@ function AnimateIn(props) {
1337
1446
  return /* @__PURE__ */ jsx(
1338
1447
  MotionDiv,
1339
1448
  {
1449
+ ...rest,
1340
1450
  className,
1341
1451
  initial,
1342
1452
  animate: animate2,
@@ -1346,6 +1456,10 @@ function AnimateIn(props) {
1346
1456
  }
1347
1457
  );
1348
1458
  }
1459
+ function AnimateSwap(props) {
1460
+ const { swapKey, ...animateInProps } = props;
1461
+ return /* @__PURE__ */ jsx(LazyMotion, { features: domAnimation, children: /* @__PURE__ */ jsx(AnimatePresence, { mode: "wait", children: /* @__PURE__ */ jsx(AnimateIn, { ...animateInProps }, swapKey) }) });
1462
+ }
1349
1463
  function AnimateInGroup(props) {
1350
1464
  const { children, stagger = "normal", inView = false, className } = props;
1351
1465
  const shouldReduce = useReducedMotion();
@@ -1973,7 +2087,7 @@ function AnimatedShinyText({
1973
2087
  );
1974
2088
  }
1975
2089
  var badgeVariants = cva(
1976
- "inline-flex justify-center items-center align-middle shrink-0 rounded-full font-sans font-medium whitespace-nowrap tabular-nums transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 border border-transparent",
2090
+ "inline-flex justify-center items-center align-middle shrink-0 rounded-full font-sans font-medium whitespace-nowrap tabular-nums transition-colors focus-visible:outline-none border border-transparent",
1977
2091
  {
1978
2092
  variants: {
1979
2093
  variant: {
@@ -1995,15 +2109,26 @@ var badgeVariants = cva(
1995
2109
  purple: "bg-secondary text-secondary-foreground fill-current",
1996
2110
  "purple-subtle": "bg-secondary/40 text-secondary-foreground fill-current border-transparent",
1997
2111
  amber: "bg-warning text-warning-foreground fill-current",
1998
- "amber-subtle": "bg-warning/15 text-warning fill-current border-transparent",
2112
+ "amber-subtle": (
2113
+ // --warning is a FILL (2.13:1). As ink on its own tint it measured 1.91:1.
2114
+ // --warning-strong is the AA-safe amber foreground: 5.01:1 light / 6.20:1 dark.
2115
+ "bg-warning/10 text-[hsl(var(--warning-strong))] fill-current border-transparent"
2116
+ ),
1999
2117
  red: "bg-destructive text-destructive-foreground fill-current",
2000
- "red-subtle": "bg-destructive/15 text-destructive fill-current border-transparent",
2118
+ "red-subtle": (
2119
+ // --destructive is fill-only in dark (2.01:1 as ink on its own tint).
2120
+ // --destructive-strong: 4.58:1 light / 4.97:1 dark.
2121
+ "bg-destructive/10 text-[hsl(var(--destructive-strong))] fill-current border-transparent"
2122
+ ),
2001
2123
  pink: "bg-accent text-accent-foreground fill-current",
2002
2124
  "pink-subtle": "bg-accent/40 text-accent-foreground fill-current border-transparent",
2003
2125
  green: "bg-success text-success-foreground fill-current",
2004
- "green-subtle": "bg-success/15 text-success fill-current border-transparent",
2126
+ "green-subtle": (
2127
+ // --success-strong closes the 4.49:1 light gap: 4.99:1 light / 4.83:1 dark.
2128
+ "bg-success/10 text-[hsl(var(--success-strong))] fill-current border-transparent"
2129
+ ),
2005
2130
  teal: "bg-info text-info-foreground fill-current",
2006
- "teal-subtle": "bg-info/15 text-info fill-current border-transparent",
2131
+ "teal-subtle": "bg-info/10 text-info fill-current border-transparent",
2007
2132
  inverted: "bg-foreground text-background fill-current",
2008
2133
  // Special visual treatments (intentional product design, not brand hex)
2009
2134
  trial: "bg-gradient-to-br from-trial-start to-trial-end text-primary-foreground fill-current",
@@ -2344,7 +2469,7 @@ function AssistedPasswordConfirmation({
2344
2469
  children: /* @__PURE__ */ jsx(
2345
2470
  motion.input,
2346
2471
  {
2347
- className: "h-full w-full rounded-[var(--radius-xl)] border-2 border-border bg-background px-3.5 py-3 tracking-[0.4em] text-foreground outline-none transition-colors placeholder:tracking-normal focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/30",
2472
+ className: "h-full w-full rounded-[var(--radius-xl)] border-2 border-border bg-background px-3.5 py-3 tracking-[0.4em] text-foreground outline-none transition-colors placeholder:tracking-normal focus-visible:border-ring",
2348
2473
  type: "password",
2349
2474
  placeholder,
2350
2475
  value: confirmPassword,
@@ -2528,9 +2653,18 @@ function getAvatarFallbackClass(size) {
2528
2653
  }
2529
2654
  function getAvatarStyle(size, style) {
2530
2655
  if (typeof size !== "number") return style;
2531
- return {
2656
+ const numericVars = {
2532
2657
  "--avatar-size": `${size}px`,
2533
- "--avatar-font-size": `${Math.max(10, Math.round(size * 0.375))}px`,
2658
+ "--avatar-font-size": `${Math.max(10, Math.round(size * 0.375))}px`
2659
+ };
2660
+ if (typeof style === "function") {
2661
+ return (state) => ({
2662
+ ...numericVars,
2663
+ ...style(state)
2664
+ });
2665
+ }
2666
+ return {
2667
+ ...numericVars,
2534
2668
  ...style
2535
2669
  };
2536
2670
  }
@@ -3000,7 +3134,7 @@ function AvatarSmartGroup({
3000
3134
  {
3001
3135
  type: "button",
3002
3136
  "aria-label": user.role ? `${user.name}, ${user.role}` : user.name,
3003
- className: `rounded-full ring-2 ${ringColor} transition-transform duration-200 cursor-pointer border-none bg-transparent p-0 outline-none`,
3137
+ className: `rounded-full ring-2 ${ringColor} transition-transform duration-micro cursor-pointer border-none bg-transparent p-0 outline-none`,
3004
3138
  style: {
3005
3139
  marginLeft: index > 0 && overlap < 0 ? `${overlap}px` : void 0,
3006
3140
  transform: activeKey === userKey ? `scale(${hoverScale})` : "scale(1)",
@@ -3574,7 +3708,7 @@ var Badge1 = ({
3574
3708
  return /* @__PURE__ */ jsx(Badge, { className: badgeClassName, icon, size, variant, ...props, children });
3575
3709
  };
3576
3710
  var baseBadgeVariants = cva(
3577
- "inline-flex items-center justify-center border border-transparent font-medium focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 [&_svg]:-ms-px [&_svg]:shrink-0",
3711
+ "inline-flex items-center justify-center border border-transparent font-medium focus-visible:outline-none [&_svg]:-ms-px [&_svg]:shrink-0",
3578
3712
  {
3579
3713
  variants: {
3580
3714
  variant: {
@@ -3809,7 +3943,7 @@ function BaseBadge({
3809
3943
  return element;
3810
3944
  }
3811
3945
  var baseButtonVariants = cva(
3812
- "cursor-pointer group whitespace-nowrap focus-visible:outline-none inline-flex items-center justify-center has-data-[arrow=true]:justify-between whitespace-nowrap text-sm font-medium ring-offset-background transition-[color,box-shadow] disabled:pointer-events-none disabled:opacity-60 [&_svg]:shrink-0",
3946
+ "cursor-pointer group whitespace-nowrap inline-flex items-center justify-center has-data-[arrow=true]:justify-between whitespace-nowrap text-sm font-medium ring-offset-background transition-[color,box-shadow] disabled:pointer-events-none disabled:opacity-60 [&_svg]:shrink-0",
3813
3947
  {
3814
3948
  variants: {
3815
3949
  variant: {
@@ -3851,12 +3985,12 @@ var baseButtonVariants = cva(
3851
3985
  circle: "rounded-full"
3852
3986
  },
3853
3987
  mode: {
3854
- default: "focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
3855
- icon: "focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
3988
+ default: "",
3989
+ icon: "",
3856
3990
  link: "text-primary h-auto p-0 bg-transparent rounded-none hover:bg-transparent data-[state=open]:bg-transparent",
3857
3991
  input: `
3858
3992
  justify-start font-normal hover:bg-background [&_svg]:transition-colors [&_svg]:hover:text-foreground data-[state=open]:bg-background
3859
- focus-visible:border-ring focus-visible:outline-none focus-visible:ring-[3px] focus-visible:ring-ring/30
3993
+ focus-visible:border-ring
3860
3994
  [[data-state=open]>&]:border-ring [[data-state=open]>&]:outline-none [[data-state=open]>&]:ring-[3px]
3861
3995
  [[data-state=open]>&]:ring-ring/30
3862
3996
  aria-invalid:border-destructive/60 aria-invalid:ring-destructive/10 dark:aria-invalid:border-destructive dark:aria-invalid:ring-destructive/20
@@ -4225,7 +4359,10 @@ function Spinner({ className }) {
4225
4359
  }
4226
4360
  );
4227
4361
  }
4228
- function getIconSizeClass(size) {
4362
+ function getIconSizeClass(size, iconSize2) {
4363
+ if (iconSize2 === "sm") return "[&>svg]:size-3.5";
4364
+ if (iconSize2 === "md") return "[&>svg]:size-3.5";
4365
+ if (iconSize2 === "lg") return "[&>svg]:size-4";
4229
4366
  switch (size) {
4230
4367
  case "tiny":
4231
4368
  return "[&>svg]:size-3";
@@ -4240,7 +4377,10 @@ function getIconSizeClass(size) {
4240
4377
  return "[&>svg]:size-4";
4241
4378
  }
4242
4379
  }
4243
- function getSpinnerSizeClass(size) {
4380
+ function getSpinnerSizeClass(size, iconSize2) {
4381
+ if (iconSize2 === "sm") return "size-3.5";
4382
+ if (iconSize2 === "md") return "size-3.5";
4383
+ if (iconSize2 === "lg") return "size-4";
4244
4384
  switch (size) {
4245
4385
  case "tiny":
4246
4386
  return "size-3";
@@ -4265,10 +4405,10 @@ function resolveShadowClass(shadow) {
4265
4405
  const level = shadow === true ? "md" : shadow;
4266
4406
  return SHADOW_CLASSES[level];
4267
4407
  }
4268
- function ButtonContent({ loading, prefix, suffix, size, children }) {
4269
- const iconSizeClass = getIconSizeClass(size);
4408
+ function ButtonContent({ loading, prefix, suffix, size, iconSize: iconSize2, children }) {
4409
+ const iconSizeClass = getIconSizeClass(size, iconSize2);
4270
4410
  return /* @__PURE__ */ jsxs(Fragment, { children: [
4271
- loading && /* @__PURE__ */ jsx(Spinner, { className: getSpinnerSizeClass(size) }),
4411
+ loading && /* @__PURE__ */ jsx(Spinner, { className: getSpinnerSizeClass(size, iconSize2) }),
4272
4412
  prefix != null && /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: cn("shrink-0", iconSizeClass), children: prefix }),
4273
4413
  children,
4274
4414
  suffix != null && /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: cn("shrink-0", iconSizeClass), children: suffix })
@@ -4279,6 +4419,7 @@ var Button = ({
4279
4419
  variant,
4280
4420
  size,
4281
4421
  shape,
4422
+ iconSize: iconSize2,
4282
4423
  asChild = false,
4283
4424
  loading = false,
4284
4425
  disabled,
@@ -4296,11 +4437,21 @@ var Button = ({
4296
4437
  Comp,
4297
4438
  {
4298
4439
  ref,
4299
- className: cn(buttonVariants({ variant, size, shape }), shadowClass, className),
4440
+ className: cn(buttonVariants({ variant, size, shape, iconSize: iconSize2 }), shadowClass, className),
4300
4441
  disabled: isDisabled,
4301
4442
  "aria-busy": loading || void 0,
4302
4443
  ...props,
4303
- children: asChild ? children : /* @__PURE__ */ jsx(ButtonContent, { loading, prefix, suffix, size, children })
4444
+ children: asChild ? children : /* @__PURE__ */ jsx(
4445
+ ButtonContent,
4446
+ {
4447
+ loading,
4448
+ prefix,
4449
+ suffix,
4450
+ size,
4451
+ iconSize: iconSize2,
4452
+ children
4453
+ }
4454
+ )
4304
4455
  }
4305
4456
  );
4306
4457
  };
@@ -4310,6 +4461,7 @@ var ButtonLink = ({
4310
4461
  variant,
4311
4462
  size,
4312
4463
  shape,
4464
+ iconSize: iconSize2,
4313
4465
  prefix,
4314
4466
  suffix,
4315
4467
  shadow,
@@ -4329,14 +4481,24 @@ var ButtonLink = ({
4329
4481
  {
4330
4482
  ref,
4331
4483
  className: cn(
4332
- buttonVariants({ variant, size, shape }),
4484
+ buttonVariants({ variant, size, shape, iconSize: iconSize2 }),
4333
4485
  shadowClass,
4334
4486
  loading && "pointer-events-none opacity-50",
4335
4487
  className
4336
4488
  ),
4337
4489
  ...loadingProps,
4338
4490
  ...props,
4339
- children: /* @__PURE__ */ jsx(ButtonContent, { loading, prefix, suffix, size, children })
4491
+ children: /* @__PURE__ */ jsx(
4492
+ ButtonContent,
4493
+ {
4494
+ loading,
4495
+ prefix,
4496
+ suffix,
4497
+ size,
4498
+ iconSize: iconSize2,
4499
+ children
4500
+ }
4501
+ )
4340
4502
  }
4341
4503
  );
4342
4504
  };
@@ -5140,7 +5302,7 @@ function Browser(props) {
5140
5302
  type: "button",
5141
5303
  onClick: handleCopy,
5142
5304
  "aria-label": copied ? "Address copied" : "Copy address",
5143
- className: "flex-shrink-0 rounded p-0.5 text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
5305
+ className: "flex-shrink-0 rounded p-0.5 text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-none",
5144
5306
  children: copied ? /* @__PURE__ */ jsx(Check, { className: "size-3" }) : /* @__PURE__ */ jsx(Copy, { className: "size-3" })
5145
5307
  }
5146
5308
  )
@@ -5307,7 +5469,7 @@ function BulkActionBar({
5307
5469
  {
5308
5470
  className: cn(
5309
5471
  "z-50 flex items-center gap-3 rounded-[var(--radius-lg)] border bg-background/95 px-4 py-2.5 shadow-lg backdrop-blur-sm",
5310
- "animate-in slide-in-from-bottom-2 duration-200",
5472
+ "animate-in slide-in-from-bottom-2 duration-reveal",
5311
5473
  fixed && position === "bottom" && "fixed bottom-4 left-1/2 -translate-x-1/2",
5312
5474
  fixed && position === "top" && "fixed top-4 left-1/2 -translate-x-1/2",
5313
5475
  !fixed && "relative",
@@ -5724,7 +5886,7 @@ function CardSpotlight({
5724
5886
  /* @__PURE__ */ jsx(
5725
5887
  motion.div,
5726
5888
  {
5727
- className: "pointer-events-none absolute z-0 -inset-px rounded-[var(--radius-md)] opacity-0 transition duration-300 motion-reduce:transition-none group-hover/spotlight:opacity-100",
5889
+ className: "pointer-events-none absolute z-0 -inset-px rounded-[var(--radius-md)] opacity-0 transition duration-reveal motion-reduce:transition-none group-hover/spotlight:opacity-100",
5728
5890
  style: {
5729
5891
  backgroundColor: color,
5730
5892
  maskImage: useMotionTemplate`
@@ -6193,8 +6355,68 @@ function getPayloadConfigFromPayload(config, payload, key) {
6193
6355
  }
6194
6356
  return configLabelKey in config ? config[configLabelKey] : config[key];
6195
6357
  }
6358
+ var DEFAULT_STROKE_WIDTH = 1.6;
6359
+ function CheckGlyph({
6360
+ size = 16,
6361
+ width,
6362
+ height,
6363
+ strokeWidth = DEFAULT_STROKE_WIDTH,
6364
+ ...props
6365
+ }) {
6366
+ return /* @__PURE__ */ jsx(
6367
+ "svg",
6368
+ {
6369
+ "aria-hidden": "true",
6370
+ className: "shrink-0",
6371
+ viewBox: "0 0 16 16",
6372
+ width: width ?? size,
6373
+ height: height ?? size,
6374
+ ...props,
6375
+ children: /* @__PURE__ */ jsx(
6376
+ "path",
6377
+ {
6378
+ d: "M11.2 5.6L6.8 10L4.8 8",
6379
+ strokeLinecap: "round",
6380
+ strokeLinejoin: "round",
6381
+ strokeWidth
6382
+ }
6383
+ )
6384
+ }
6385
+ );
6386
+ }
6387
+ function IndeterminateGlyph({
6388
+ size = 16,
6389
+ width,
6390
+ height,
6391
+ strokeWidth = DEFAULT_STROKE_WIDTH,
6392
+ ...props
6393
+ }) {
6394
+ return /* @__PURE__ */ jsx(
6395
+ "svg",
6396
+ {
6397
+ "aria-hidden": "true",
6398
+ className: "shrink-0",
6399
+ viewBox: "0 0 16 16",
6400
+ width: width ?? size,
6401
+ height: height ?? size,
6402
+ ...props,
6403
+ children: /* @__PURE__ */ jsx(
6404
+ "line",
6405
+ {
6406
+ x1: "4",
6407
+ x2: "12",
6408
+ y1: "8",
6409
+ y2: "8",
6410
+ strokeLinecap: "round",
6411
+ strokeLinejoin: "round",
6412
+ strokeWidth
6413
+ }
6414
+ )
6415
+ }
6416
+ );
6417
+ }
6196
6418
  var getInputClasses = (checked, disabled, indeterminate) => {
6197
- let className = "relative border w-4 h-4 duration-200 rounded inline-flex items-center justify-center";
6419
+ let className = "relative border w-4 h-4 duration-micro rounded inline-flex items-center justify-center";
6198
6420
  if (disabled) {
6199
6421
  if (!checked || indeterminate) {
6200
6422
  className += " bg-geist-gray-100 border-geist-gray-500";
@@ -6257,26 +6479,7 @@ var Checkbox = ({
6257
6479
  className: "sr-only"
6258
6480
  }
6259
6481
  ),
6260
- /* @__PURE__ */ jsx("span", { className: getInputClasses(checked, disabled, indeterminate), children: /* @__PURE__ */ jsx("svg", { "aria-hidden": "true", className: "shrink-0", height: "16", viewBox: "0 0 20 20", width: "16", children: indeterminate ? /* @__PURE__ */ jsx(
6261
- "line",
6262
- {
6263
- strokeLinecap: "round",
6264
- strokeLinejoin: "round",
6265
- strokeWidth: "2",
6266
- x1: "5",
6267
- x2: "15",
6268
- y1: "10",
6269
- y2: "10"
6270
- }
6271
- ) : /* @__PURE__ */ jsx(
6272
- "path",
6273
- {
6274
- d: "M14 7L8.5 12.5L6 10",
6275
- strokeLinecap: "round",
6276
- strokeLinejoin: "round",
6277
- strokeWidth: "2"
6278
- }
6279
- ) }) }),
6482
+ /* @__PURE__ */ jsx("span", { className: getInputClasses(checked, disabled, indeterminate), children: indeterminate ? /* @__PURE__ */ jsx(IndeterminateGlyph, {}) : /* @__PURE__ */ jsx(CheckGlyph, {}) }),
6280
6483
  children && /* @__PURE__ */ jsx("span", { className: "ml-2", children })
6281
6484
  ]
6282
6485
  }
@@ -6321,8 +6524,8 @@ var choiceboxItemVariants = cva(
6321
6524
  [
6322
6525
  "relative flex flex-1 flex-col gap-1 rounded-[var(--radius-lg)] border p-4",
6323
6526
  "cursor-pointer select-none",
6324
- "transition-colors duration-150 ease-out",
6325
- "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2"
6527
+ "transition-colors duration-micro ease-out",
6528
+ "focus-visible:outline-none"
6326
6529
  ].join(" "),
6327
6530
  {
6328
6531
  variants: {
@@ -6901,6 +7104,11 @@ var overlayPrimitiveClassNames = {
6901
7104
  "data-[highlighted]:bg-accent data-[popup-open]:bg-accent"
6902
7105
  ].join(" "),
6903
7106
  menuCheckboxItem: [menuItemBaseClassName, menuHighlightedClassName, "pl-8"].join(" "),
7107
+ menuFilterInput: [
7108
+ "h-7 w-full rounded-[var(--radius-sm)] bg-muted px-2 text-sm text-foreground",
7109
+ "placeholder:text-muted-foreground outline-none"
7110
+ ].join(" "),
7111
+ menuEmpty: "px-2 py-3 text-center text-sm text-muted-foreground",
6904
7112
  menuIndicator: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center text-muted-foreground",
6905
7113
  menubarRoot: "flex h-10 items-center space-x-1 rounded-[var(--radius-md)] border border-border bg-background p-1 outline-none",
6906
7114
  menubarTrigger: [
@@ -7110,6 +7318,40 @@ var DropdownMenuRadioItem = ({
7110
7318
  }
7111
7319
  );
7112
7320
  DropdownMenuRadioItem.displayName = "DropdownMenuRadioItem";
7321
+ var MENU_RESERVED_KEYS = /* @__PURE__ */ new Set(["ArrowUp", "ArrowDown", "Enter", "Tab"]);
7322
+ var DropdownMenuFilterInput = ({
7323
+ className,
7324
+ onKeyDown,
7325
+ ref,
7326
+ ...props
7327
+ }) => /* @__PURE__ */ jsx(
7328
+ "input",
7329
+ {
7330
+ ref,
7331
+ type: "search",
7332
+ className: cn(overlayPrimitiveClassNames.menuFilterInput, className),
7333
+ onKeyDown: (event) => {
7334
+ onKeyDown?.(event);
7335
+ if (!MENU_RESERVED_KEYS.has(event.key)) {
7336
+ event.stopPropagation();
7337
+ }
7338
+ },
7339
+ ...props
7340
+ }
7341
+ );
7342
+ DropdownMenuFilterInput.displayName = "DropdownMenuFilterInput";
7343
+ var DropdownMenuEmpty = ({
7344
+ className,
7345
+ ...props
7346
+ }) => /* @__PURE__ */ jsx(
7347
+ "div",
7348
+ {
7349
+ role: "presentation",
7350
+ className: cn(overlayPrimitiveClassNames.menuEmpty, className),
7351
+ ...props
7352
+ }
7353
+ );
7354
+ DropdownMenuEmpty.displayName = "DropdownMenuEmpty";
7113
7355
  var DropdownMenuLabel = ({
7114
7356
  className,
7115
7357
  inset,
@@ -8439,7 +8681,6 @@ var comboboxTriggerVariants = cva(
8439
8681
  "text-[length:var(--combobox-font-size)] ring-offset-background",
8440
8682
  "transition-colors duration-micro ease-out",
8441
8683
  "placeholder:text-muted-foreground",
8442
- "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
8443
8684
  "disabled:cursor-not-allowed disabled:opacity-50",
8444
8685
  "[&>span]:line-clamp-1 [&>span]:text-left"
8445
8686
  ].join(" "),
@@ -8451,7 +8692,7 @@ var comboboxTriggerVariants = cva(
8451
8692
  large: ""
8452
8693
  },
8453
8694
  error: {
8454
- true: "border-destructive focus-visible:ring-destructive",
8695
+ true: "border-destructive",
8455
8696
  false: ""
8456
8697
  }
8457
8698
  },
@@ -8936,11 +9177,11 @@ var formControlInvalidClassNames = {
8936
9177
  };
8937
9178
  var inputVariants = cva(
8938
9179
  [
8939
- "flex h-[var(--input-height)] w-full rounded-[var(--input-radius)] border border-input bg-background",
8940
- "px-[var(--input-padding-x)] text-[length:var(--input-font-size)] text-foreground shadow-xs",
9180
+ "flex h-[var(--input-height)] w-full rounded-[var(--input-radius)]",
9181
+ "px-[var(--input-padding-x)] text-[length:var(--input-font-size)] text-foreground",
8941
9182
  "transition-[background-color,border-color,box-shadow,color] duration-micro ease-out",
8942
9183
  "placeholder:text-muted-foreground",
8943
- formControlFocusClassNames.input,
9184
+ "outline-none",
8944
9185
  "disabled:cursor-not-allowed disabled:opacity-50",
8945
9186
  "read-only:bg-muted/70 read-only:cursor-default",
8946
9187
  "file:h-full file:border-0 file:border-e file:border-solid file:border-input file:bg-transparent",
@@ -8963,11 +9204,31 @@ var inputVariants = cva(
8963
9204
  prefix: "pl-[var(--input-padding-left)]",
8964
9205
  suffix: "pr-[var(--input-padding-right)]",
8965
9206
  both: "pl-[var(--input-padding-left)] pr-[var(--input-padding-right)]"
9207
+ },
9208
+ /**
9209
+ * `bare` drops the field's own stroke, fill and lift so it can sit inside
9210
+ * a container that already provides them — a footer subscribe group, a
9211
+ * search well, a segmented composer. Those surfaces were each being built
9212
+ * by hand with a raw <input>, because overriding the bordered look from
9213
+ * outside is not reliable: `border-transparent` passed via className and
9214
+ * `border-input` from the base are both border-color utilities, so which
9215
+ * one wins depends on their order in the generated stylesheet rather than
9216
+ * on the order they were written. That is why the stroke, fill and shadow
9217
+ * live in this variant instead of the base — the two tones now never emit
9218
+ * a competing declaration.
9219
+ *
9220
+ * A bare field draws no focus ring of its own. The container owns it, so
9221
+ * the ring surrounds the whole group rather than a box inside it.
9222
+ */
9223
+ tone: {
9224
+ bordered: `border border-input bg-background shadow-xs ${formControlFocusClassNames.input}`,
9225
+ bare: "border-0 bg-transparent shadow-none"
8966
9226
  }
8967
9227
  },
8968
9228
  defaultVariants: {
8969
9229
  size: "md",
8970
- affix: "none"
9230
+ affix: "none",
9231
+ tone: "bordered"
8971
9232
  }
8972
9233
  }
8973
9234
  );
@@ -8990,7 +9251,7 @@ var inputControlButtonVariants = cva(
8990
9251
  "absolute right-[var(--input-control-inset)] top-1/2 flex size-[var(--input-control-size)] -translate-y-1/2 items-center justify-center",
8991
9252
  "rounded-[var(--radius-sm)] text-muted-foreground transition-colors duration-micro ease-out",
8992
9253
  "hover:bg-accent hover:text-foreground",
8993
- "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1",
9254
+ "focus-visible:outline-none",
8994
9255
  "disabled:pointer-events-none disabled:opacity-50",
8995
9256
  "[&_svg]:size-[var(--input-control-icon-size)]"
8996
9257
  ].join(" ")
@@ -9029,7 +9290,7 @@ function getInputStyle(size, style) {
9029
9290
  "--input-focus-ring-width": `${inputTokens.focusRingWidth}px`,
9030
9291
  borderRadius: "var(--input-radius)",
9031
9292
  outline: "none",
9032
- ...style
9293
+ ...asPlainStyle(style)
9033
9294
  };
9034
9295
  }
9035
9296
  function getAffixMode(prefix, hasRightAdornment) {
@@ -9055,6 +9316,7 @@ var Input = ({
9055
9316
  className,
9056
9317
  type = "text",
9057
9318
  size = "md",
9319
+ tone = "bordered",
9058
9320
  prefix,
9059
9321
  suffix,
9060
9322
  clearable,
@@ -9174,7 +9436,7 @@ var Input = ({
9174
9436
  "aria-describedby": describedBy,
9175
9437
  "aria-busy": loading || void 0,
9176
9438
  className: cn(
9177
- inputVariants({ size, affix }),
9439
+ inputVariants({ size, affix, tone }),
9178
9440
  type === "file" && "p-0 pr-[var(--input-padding-x)] text-muted-foreground",
9179
9441
  className
9180
9442
  ),
@@ -9891,7 +10153,7 @@ var ContextCardTrigger = ({
9891
10153
  "transition-[opacity,transform,display] duration-[var(--context-card-duration)] ease-[var(--context-card-easing)]",
9892
10154
  "data-starting-style:opacity-0 data-ending-style:opacity-0 data-starting-style:scale-[0.98] data-ending-style:scale-[0.98]",
9893
10155
  "motion-reduce:transition-none motion-reduce:data-starting-style:scale-100 motion-reduce:data-ending-style:scale-100",
9894
- "focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
10156
+ "",
9895
10157
  "data-[side=bottom]:origin-top data-[side=left]:origin-right data-[side=right]:origin-left data-[side=top]:origin-bottom",
9896
10158
  className
9897
10159
  ),
@@ -10195,20 +10457,27 @@ var ContextMenu = Object.assign(ContextMenuRoot, {
10195
10457
  SubTrigger: ContextMenuSubTrigger,
10196
10458
  SubContent: ContextMenuSubContent
10197
10459
  });
10460
+ var COPIED_TINT = "text-[hsl(var(--success-strong))]";
10461
+ function CopiedAnnouncement({ copied, message }) {
10462
+ return /* @__PURE__ */ jsx("span", { "aria-live": "polite", className: "sr-only", children: copied ? message : "" });
10463
+ }
10198
10464
  function CopyButton({
10199
10465
  value,
10200
10466
  label,
10467
+ copiedLabel = "Copied",
10201
10468
  successMessage = "Copied to clipboard",
10202
10469
  tooltipText = "Copy",
10203
10470
  iconType = "copy",
10471
+ iconPosition = "leading",
10204
10472
  showToast = true,
10473
+ timeout = 2e3,
10205
10474
  onCopied,
10206
10475
  variant = "ghost",
10207
10476
  size = "icon",
10208
10477
  className,
10209
10478
  ...props
10210
10479
  }) {
10211
- const [copied, setCopied] = React45.useState(false);
10480
+ const { copied, copy } = useCopyToClipboard({ successMessage, showToast, timeout });
10212
10481
  const IconComponent = {
10213
10482
  copy: Copy,
10214
10483
  link: Link$1,
@@ -10216,38 +10485,30 @@ function CopyButton({
10216
10485
  hash: Hash
10217
10486
  }[iconType];
10218
10487
  const handleCopy = async () => {
10219
- try {
10220
- await navigator.clipboard.writeText(value);
10221
- setCopied(true);
10222
- if (showToast) {
10223
- toast.success(successMessage);
10224
- }
10225
- onCopied?.(value);
10226
- setTimeout(() => setCopied(false), 2e3);
10227
- } catch (error) {
10228
- console.error("Failed to copy:", error);
10229
- toast.error("Failed to copy to clipboard");
10230
- }
10488
+ if (await copy(value)) onCopied?.(value);
10231
10489
  };
10490
+ const icon = copied ? /* @__PURE__ */ jsx(Check, { className: COPIED_TINT }) : /* @__PURE__ */ jsx(IconComponent, {});
10491
+ const iconSlot = iconPosition === "trailing" ? { suffix: icon } : { prefix: icon };
10232
10492
  const button = /* @__PURE__ */ jsxs(
10233
10493
  Button,
10234
10494
  {
10235
10495
  variant,
10236
10496
  size,
10237
10497
  onClick: handleCopy,
10238
- className: cn("transition-colors", copied && "text-green-600 dark:text-green-400", className),
10498
+ className: cn("transition-colors", className),
10499
+ ...iconSlot,
10239
10500
  ...props,
10240
10501
  children: [
10241
- copied ? /* @__PURE__ */ jsx(Check, { className: "size-4" }) : /* @__PURE__ */ jsx(IconComponent, { className: "size-4" }),
10242
- label && /* @__PURE__ */ jsx("span", { className: "ml-1.5", children: label }),
10243
- /* @__PURE__ */ jsx("span", { className: "sr-only", children: tooltipText })
10502
+ label && /* @__PURE__ */ jsx("span", { className: "min-w-0 truncate", children: copied && copiedLabel ? copiedLabel : label }),
10503
+ !label && /* @__PURE__ */ jsx("span", { className: "sr-only", children: tooltipText }),
10504
+ /* @__PURE__ */ jsx(CopiedAnnouncement, { copied, message: successMessage })
10244
10505
  ]
10245
10506
  }
10246
10507
  );
10247
10508
  if (!label) {
10248
10509
  return /* @__PURE__ */ jsxs(Tooltip, { children: [
10249
10510
  /* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: button }),
10250
- /* @__PURE__ */ jsx(TooltipContent, { children: /* @__PURE__ */ jsx("p", { children: copied ? "Copied!" : tooltipText }) })
10511
+ /* @__PURE__ */ jsx(TooltipContent, { children: /* @__PURE__ */ jsx("p", { children: copied ? "Copied" : tooltipText }) })
10251
10512
  ] });
10252
10513
  }
10253
10514
  return button;
@@ -10303,6 +10564,36 @@ function CopyCodeButton({
10303
10564
  }
10304
10565
  );
10305
10566
  }
10567
+ function CopyMenuItem({
10568
+ value,
10569
+ children,
10570
+ successMessage = "Copied to clipboard",
10571
+ showToast = false,
10572
+ timeout = 2e3,
10573
+ closeOnCopy = false,
10574
+ onCopied,
10575
+ className,
10576
+ ...props
10577
+ }) {
10578
+ const { copied, copy } = useCopyToClipboard({ successMessage, showToast, timeout });
10579
+ const handleCopy = async () => {
10580
+ if (await copy(value)) onCopied?.(value);
10581
+ };
10582
+ return /* @__PURE__ */ jsxs(
10583
+ DropdownMenuItem,
10584
+ {
10585
+ closeOnClick: closeOnCopy,
10586
+ onClick: handleCopy,
10587
+ className: cn("cursor-pointer", className),
10588
+ ...props,
10589
+ children: [
10590
+ /* @__PURE__ */ jsx("span", { className: "flex-1", children }),
10591
+ copied ? /* @__PURE__ */ jsx(Check, { "aria-hidden": "true", className: cn("size-4", COPIED_TINT) }) : /* @__PURE__ */ jsx(Copy, { "aria-hidden": "true", className: "size-4 text-muted-foreground" }),
10592
+ /* @__PURE__ */ jsx(CopiedAnnouncement, { copied, message: successMessage })
10593
+ ]
10594
+ }
10595
+ );
10596
+ }
10306
10597
  function CopyableField({ value, label, truncate = true, className }) {
10307
10598
  return /* @__PURE__ */ jsxs("div", { className: cn("flex items-center gap-2", className), children: [
10308
10599
  label && /* @__PURE__ */ jsxs("span", { className: "text-sm text-muted-foreground shrink-0", children: [
@@ -10343,35 +10634,684 @@ function useCopyToClipboard(options = {}) {
10343
10634
  );
10344
10635
  return { copied, copy };
10345
10636
  }
10346
- var Description = function Description2({
10347
- ref,
10348
- title,
10349
- content,
10350
- tooltip,
10351
- className
10352
- }) {
10353
- return /* @__PURE__ */ jsxs("dl", { ref, className: cn("font-sans", className), children: [
10354
- /* @__PURE__ */ jsxs("dt", { className: "flex items-center gap-1 text-muted-foreground text-sm capitalize", children: [
10355
- title,
10356
- tooltip && /* @__PURE__ */ jsx(ContextCard.Trigger, { content: tooltip, side: "top", sideOffset: 6, children: /* @__PURE__ */ jsx(Information, { "aria-hidden": "true", className: "size-3.5 shrink-0 text-muted-foreground" }) })
10357
- ] }),
10358
- /* @__PURE__ */ jsx("dd", { className: "mt-1 font-medium text-foreground text-sm", children: content })
10359
- ] });
10360
- };
10361
- function DisplayCard({
10362
- className,
10363
- icon = /* @__PURE__ */ jsx(Sparkles, { className: "size-4 text-blue-300" }),
10364
- title = "Featured",
10365
- description = "Discover amazing content",
10366
- date = "Just now",
10367
- titleClassName = "text-blue-500"
10368
- }) {
10369
- return /* @__PURE__ */ jsxs(
10370
- "div",
10371
- {
10372
- className: cn(
10373
- "relative flex h-36 w-[22rem] -skew-y-[8deg] select-none flex-col justify-between rounded-[var(--radius-xl)] border-2 bg-muted/70 backdrop-blur-sm px-4 py-3 transition-[background-color,border-color,box-shadow,color,opacity,transform] duration-700",
10374
- "after:absolute after:-right-1 after:top-[-5%] after:h-[110%] after:w-[20rem] after:bg-gradient-to-l after:from-background after:to-transparent after:content-['']",
10637
+
10638
+ // src/tokens/components/empty-state.ts
10639
+ var emptyStateTokens = {
10640
+ root: {
10641
+ minHeight: {
10642
+ sm: primitiveSpacing[16] * 2,
10643
+ md: primitiveSpacing[24] * 2,
10644
+ lg: primitiveSpacing[16] * 4
10645
+ },
10646
+ paddingX: {
10647
+ sm: primitiveSpacing[4],
10648
+ md: primitiveSpacing[6],
10649
+ lg: primitiveSpacing[8]
10650
+ },
10651
+ paddingY: {
10652
+ sm: primitiveSpacing[8],
10653
+ md: primitiveSpacing[10],
10654
+ lg: primitiveSpacing[14]
10655
+ },
10656
+ radius: primitiveRadius.lg
10657
+ },
10658
+ content: {
10659
+ maxWidth: primitiveSpacing[14] * 8,
10660
+ descriptionMaxWidth: primitiveSpacing[12] * 8,
10661
+ stackGap: primitiveSpacing[4],
10662
+ copyGap: primitiveSpacing[2],
10663
+ actionsGap: primitiveSpacing[2]
10664
+ },
10665
+ icon: {
10666
+ size: primitiveSizing.lg,
10667
+ radius: primitiveRadius.lg
10668
+ },
10669
+ typography: {
10670
+ title: {
10671
+ sm: primitiveFontSize.sm,
10672
+ md: primitiveFontSize.base,
10673
+ lg: primitiveFontSize.lg
10674
+ },
10675
+ description: {
10676
+ sm: primitiveFontSize.xs,
10677
+ md: primitiveFontSize.sm,
10678
+ lg: primitiveFontSize.sm
10679
+ },
10680
+ titleWeight: primitiveFontWeight.semibold,
10681
+ titleLineHeight: primitiveSpacing[6],
10682
+ descriptionLineHeight: primitiveSpacing[6]
10683
+ }
10684
+ };
10685
+ var variantClassName = {
10686
+ "blank-slate": "border border-dashed border-border bg-background",
10687
+ informational: "border border-border bg-card",
10688
+ educational: "border border-border bg-card",
10689
+ guide: "border border-border bg-muted/30",
10690
+ "no-results": "border border-dashed border-border bg-background",
10691
+ cleared: "border border-dashed border-border bg-muted/20",
10692
+ permission: "border border-border bg-card",
10693
+ error: "border border-destructive/25 bg-destructive/5"
10694
+ };
10695
+ var iconToneClassName = {
10696
+ "blank-slate": "text-muted-foreground",
10697
+ informational: "text-primary",
10698
+ educational: "text-primary",
10699
+ guide: "text-primary",
10700
+ "no-results": "text-muted-foreground",
10701
+ cleared: "text-muted-foreground",
10702
+ permission: "text-muted-foreground",
10703
+ error: "text-destructive"
10704
+ };
10705
+ var emptyStateCssVars = (size) => ({
10706
+ "--empty-state-min-height": `${emptyStateTokens.root.minHeight[size]}px`,
10707
+ "--empty-state-padding-x": `${emptyStateTokens.root.paddingX[size]}px`,
10708
+ "--empty-state-padding-y": `${emptyStateTokens.root.paddingY[size]}px`,
10709
+ "--empty-state-radius": `${emptyStateTokens.root.radius}px`,
10710
+ "--empty-state-content-max-width": `${emptyStateTokens.content.maxWidth}px`,
10711
+ "--empty-state-description-max-width": `${emptyStateTokens.content.descriptionMaxWidth}px`,
10712
+ "--empty-state-stack-gap": `${emptyStateTokens.content.stackGap}px`,
10713
+ "--empty-state-copy-gap": `${emptyStateTokens.content.copyGap}px`,
10714
+ "--empty-state-actions-gap": `${emptyStateTokens.content.actionsGap}px`,
10715
+ "--empty-state-icon-size": `${emptyStateTokens.icon.size}px`,
10716
+ "--empty-state-icon-radius": `${emptyStateTokens.icon.radius}px`,
10717
+ "--empty-state-title-size": `${emptyStateTokens.typography.title[size]}px`,
10718
+ "--empty-state-description-size": `${emptyStateTokens.typography.description[size]}px`,
10719
+ "--empty-state-title-weight": `${emptyStateTokens.typography.titleWeight}`,
10720
+ "--empty-state-title-line-height": `${emptyStateTokens.typography.titleLineHeight}px`,
10721
+ "--empty-state-description-line-height": `${emptyStateTokens.typography.descriptionLineHeight}px`
10722
+ });
10723
+ var EmptyStateIcon = ({
10724
+ className,
10725
+ icon,
10726
+ ref,
10727
+ ...props
10728
+ }) => /* @__PURE__ */ jsx(
10729
+ "div",
10730
+ {
10731
+ ref,
10732
+ "aria-hidden": "true",
10733
+ className: cn(
10734
+ "flex size-[var(--empty-state-icon-size)] shrink-0 items-center justify-center rounded-[var(--empty-state-icon-radius)] bg-muted",
10735
+ className
10736
+ ),
10737
+ ...props,
10738
+ children: icon
10739
+ }
10740
+ );
10741
+ EmptyStateIcon.displayName = "EmptyState.Icon";
10742
+ var EmptyStateRoot = ({
10743
+ className,
10744
+ title,
10745
+ description,
10746
+ icon,
10747
+ children,
10748
+ action,
10749
+ link,
10750
+ style,
10751
+ variant = "blank-slate",
10752
+ size = "md",
10753
+ align = "center",
10754
+ live = false,
10755
+ ref,
10756
+ ...props
10757
+ }) => {
10758
+ const actions = children ?? [action, link].filter(Boolean);
10759
+ const hasActions = React45.Children.toArray(actions).length > 0;
10760
+ return /* @__PURE__ */ jsx(
10761
+ "section",
10762
+ {
10763
+ ref,
10764
+ "aria-live": live ? "polite" : void 0,
10765
+ className: cn(
10766
+ "flex min-h-[var(--empty-state-min-height)] w-full flex-col justify-center rounded-[var(--empty-state-radius)] px-[var(--empty-state-padding-x)] py-[var(--empty-state-padding-y)]",
10767
+ variantClassName[variant],
10768
+ align === "center" ? "items-center text-center" : "items-start text-left",
10769
+ className
10770
+ ),
10771
+ style: { ...emptyStateCssVars(size), ...style },
10772
+ ...props,
10773
+ children: /* @__PURE__ */ jsxs(
10774
+ "div",
10775
+ {
10776
+ className: cn(
10777
+ "flex max-w-[var(--empty-state-content-max-width)] flex-col gap-[var(--empty-state-stack-gap)]",
10778
+ align === "center" ? "items-center" : "items-start"
10779
+ ),
10780
+ children: [
10781
+ icon ? /* @__PURE__ */ jsx("div", { className: cn("[&>div]:bg-muted", iconToneClassName[variant]), children: icon }) : null,
10782
+ /* @__PURE__ */ jsxs("div", { className: "space-y-[var(--empty-state-copy-gap)]", children: [
10783
+ /* @__PURE__ */ jsx("h3", { className: "font-[var(--empty-state-title-weight)] text-[length:var(--empty-state-title-size)] leading-[var(--empty-state-title-line-height)] text-foreground", children: title }),
10784
+ description ? /* @__PURE__ */ jsx("p", { className: "max-w-[var(--empty-state-description-max-width)] text-[length:var(--empty-state-description-size)] leading-[var(--empty-state-description-line-height)] text-muted-foreground", children: description }) : null
10785
+ ] }),
10786
+ hasActions ? /* @__PURE__ */ jsx(
10787
+ "div",
10788
+ {
10789
+ className: cn(
10790
+ "flex flex-wrap gap-[var(--empty-state-actions-gap)]",
10791
+ align === "center" ? "justify-center" : "justify-start"
10792
+ ),
10793
+ children: actions
10794
+ }
10795
+ ) : null
10796
+ ]
10797
+ }
10798
+ )
10799
+ }
10800
+ );
10801
+ };
10802
+ EmptyStateRoot.displayName = "EmptyState.Root";
10803
+ var EmptyState = {
10804
+ Root: EmptyStateRoot,
10805
+ Icon: EmptyStateIcon
10806
+ };
10807
+ function asCssLength(value) {
10808
+ if (value === void 0) return void 0;
10809
+ return typeof value === "number" ? `${value}px` : value;
10810
+ }
10811
+ function shapeRadiusClass(props) {
10812
+ if (props.pill) return "rounded-full";
10813
+ if (props.squared) return "rounded-[var(--radius-sm)]";
10814
+ return "rounded-[var(--radius-md)]";
10815
+ }
10816
+ function Skeleton(props) {
10817
+ const {
10818
+ width,
10819
+ height,
10820
+ boxHeight,
10821
+ pill: _pill,
10822
+ rounded: _rounded,
10823
+ squared: _squared,
10824
+ animated: animatedProp,
10825
+ show: showProp,
10826
+ children,
10827
+ isLoaded,
10828
+ disableAnimation,
10829
+ className,
10830
+ style,
10831
+ ...rest
10832
+ } = props;
10833
+ const show = showProp !== void 0 ? showProp : !isLoaded;
10834
+ const animated = animatedProp !== void 0 ? animatedProp : !disableAnimation;
10835
+ if (!show && children) {
10836
+ return /* @__PURE__ */ jsx(Fragment, { children });
10837
+ }
10838
+ const sizeStyle = {
10839
+ width: asCssLength(width),
10840
+ height: asCssLength(height),
10841
+ minHeight: asCssLength(boxHeight)
10842
+ };
10843
+ return /* @__PURE__ */ jsx(
10844
+ "div",
10845
+ {
10846
+ "aria-busy": "true",
10847
+ "aria-hidden": "true",
10848
+ "data-loaded": !show,
10849
+ className: cn(
10850
+ "bg-muted",
10851
+ shapeRadiusClass(props),
10852
+ animated && "animate-pulse motion-reduce:animate-none",
10853
+ className
10854
+ ),
10855
+ style: { ...sizeStyle, ...style },
10856
+ ...rest,
10857
+ children: children && // biome-ignore lint/a11y/useSemanticElements: this <div> isn't a landmark; `inert` is the relevant a11y signal.
10858
+ /* @__PURE__ */ jsx("div", { className: "invisible", inert: true, "aria-hidden": "true", children })
10859
+ }
10860
+ );
10861
+ }
10862
+ function SkeletonText({
10863
+ lines = 3,
10864
+ className,
10865
+ ...props
10866
+ }) {
10867
+ return /* @__PURE__ */ jsx("div", { className: cn("space-y-2", className), ...props, children: Array.from({ length: lines }).map((_, i) => /* @__PURE__ */ jsx(
10868
+ Skeleton,
10869
+ {
10870
+ height: 16,
10871
+ className: cn(i === lines - 1 ? "w-[60%]" : i === 0 ? "w-full" : "w-[80%]")
10872
+ },
10873
+ i
10874
+ )) });
10875
+ }
10876
+ function SkeletonAvatar({
10877
+ size = "md",
10878
+ className,
10879
+ ...props
10880
+ }) {
10881
+ const px = size === "sm" ? 32 : size === "lg" ? 48 : 40;
10882
+ return /* @__PURE__ */ jsx(Skeleton, { pill: true, width: px, height: px, className, ...props });
10883
+ }
10884
+ function SkeletonCard({ className, ...props }) {
10885
+ return /* @__PURE__ */ jsxs("div", { className: cn("space-y-4 p-4", className), ...props, children: [
10886
+ /* @__PURE__ */ jsx(Skeleton, { height: 128, className: "w-full" }),
10887
+ /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
10888
+ /* @__PURE__ */ jsx(Skeleton, { height: 16, className: "w-3/4" }),
10889
+ /* @__PURE__ */ jsx(Skeleton, { height: 16, className: "w-1/2" })
10890
+ ] })
10891
+ ] });
10892
+ }
10893
+
10894
+ // src/tokens/components/table.ts
10895
+ var tableTokens = {
10896
+ wrapper: {
10897
+ minWidth: 248,
10898
+ padding: primitiveSpacing[6],
10899
+ radius: primitiveRadius.lg
10900
+ },
10901
+ row: {
10902
+ radius: primitiveRadius.sm
10903
+ },
10904
+ cell: {
10905
+ paddingX: primitiveSpacing[2],
10906
+ paddingY: 10
10907
+ },
10908
+ header: {
10909
+ height: primitiveSpacing[10]
10910
+ },
10911
+ typography: {
10912
+ size: primitiveFontSize.sm,
10913
+ headingWeight: primitiveFontWeight.medium,
10914
+ bodyWeight: primitiveFontWeight.normal
10915
+ },
10916
+ spacer: {
10917
+ bodyTop: primitiveSpacing[3]
10918
+ },
10919
+ motion: {
10920
+ duration: primitiveTransition.duration.micro,
10921
+ easing: primitiveTransition.easing.default
10922
+ }
10923
+ };
10924
+ var ALIGNMENT_CLASS = {
10925
+ start: "text-left",
10926
+ center: "text-center",
10927
+ end: "text-right"
10928
+ };
10929
+ function createTableVars(style, bare) {
10930
+ return {
10931
+ "--table-min-width": `${tableTokens.wrapper.minWidth}px`,
10932
+ "--table-padding": `${tableTokens.wrapper.padding}px`,
10933
+ "--table-radius": `${tableTokens.wrapper.radius}px`,
10934
+ "--table-row-radius": `${tableTokens.row.radius}px`,
10935
+ "--table-cell-padding-x": `${tableTokens.cell.paddingX}px`,
10936
+ "--table-cell-padding-y": `${tableTokens.cell.paddingY}px`,
10937
+ "--table-header-height": `${tableTokens.header.height}px`,
10938
+ "--table-font-size": `${tableTokens.typography.size}px`,
10939
+ "--table-heading-weight": tableTokens.typography.headingWeight,
10940
+ "--table-body-weight": tableTokens.typography.bodyWeight,
10941
+ "--table-body-spacer": bare ? "0px" : `${tableTokens.spacer.bodyTop}px`,
10942
+ "--table-motion-duration": `${tableTokens.motion.duration}ms`,
10943
+ "--table-motion-easing": tableTokens.motion.easing,
10944
+ ...style
10945
+ };
10946
+ }
10947
+ var TableRoot = ({
10948
+ className,
10949
+ wrapperClassName,
10950
+ wrapperStyle,
10951
+ style,
10952
+ bare = false,
10953
+ ref,
10954
+ ...props
10955
+ }) => /* @__PURE__ */ jsx(
10956
+ "div",
10957
+ {
10958
+ className: cn(
10959
+ "relative w-full overflow-auto",
10960
+ !bare && "min-w-[var(--table-min-width)] rounded-[var(--table-radius)] border border-border bg-card p-[var(--table-padding)]",
10961
+ wrapperClassName
10962
+ ),
10963
+ style: createTableVars(wrapperStyle, bare),
10964
+ children: /* @__PURE__ */ jsx(
10965
+ "table",
10966
+ {
10967
+ ref,
10968
+ className: cn(
10969
+ "w-full border-collapse caption-bottom text-[length:var(--table-font-size)] font-[var(--table-body-weight)] text-foreground",
10970
+ className
10971
+ ),
10972
+ style,
10973
+ ...props
10974
+ }
10975
+ )
10976
+ }
10977
+ );
10978
+ TableRoot.displayName = "Table";
10979
+ var TableColgroup = ({
10980
+ className,
10981
+ ref,
10982
+ ...props
10983
+ }) => /* @__PURE__ */ jsx("colgroup", { ref, className, ...props });
10984
+ TableColgroup.displayName = "TableColgroup";
10985
+ var TableCol = ({
10986
+ className,
10987
+ ref,
10988
+ ...props
10989
+ }) => /* @__PURE__ */ jsx("col", { ref, className, ...props });
10990
+ TableCol.displayName = "TableCol";
10991
+ var TableHeader = ({
10992
+ className,
10993
+ ref,
10994
+ ...props
10995
+ }) => /* @__PURE__ */ jsx("thead", { ref, className: cn("border-b border-border", className), ...props });
10996
+ TableHeader.displayName = "TableHeader";
10997
+ var TableBody = ({
10998
+ className,
10999
+ striped = false,
11000
+ bordered = false,
11001
+ interactive = false,
11002
+ virtualize = false,
11003
+ ref,
11004
+ ...props
11005
+ }) => /* @__PURE__ */ jsxs(Fragment, { children: [
11006
+ /* @__PURE__ */ jsx("tbody", { "aria-hidden": "true", className: "table-row h-[var(--table-body-spacer)]" }),
11007
+ /* @__PURE__ */ jsx(
11008
+ "tbody",
11009
+ {
11010
+ ref,
11011
+ "data-virtualized": virtualize ? "" : void 0,
11012
+ className: cn(
11013
+ "[&_tr:last-child]:border-b-0",
11014
+ striped && "[&_tr:where(:nth-child(odd))]:bg-muted/45",
11015
+ bordered && "[&_tr]:border-b [&_tr]:border-border",
11016
+ interactive && "[&_tr]:cursor-default [&_tr:hover]:bg-muted/70 [&_tr:focus-within]:bg-muted/70",
11017
+ className
11018
+ ),
11019
+ ...props
11020
+ }
11021
+ )
11022
+ ] });
11023
+ TableBody.displayName = "TableBody";
11024
+ var TableFooter = ({
11025
+ className,
11026
+ ref,
11027
+ ...props
11028
+ }) => /* @__PURE__ */ jsx("tfoot", { ref, className: cn("border-t border-border", className), ...props });
11029
+ TableFooter.displayName = "TableFooter";
11030
+ var TableRow = ({
11031
+ className,
11032
+ ref,
11033
+ ...props
11034
+ }) => /* @__PURE__ */ jsx(
11035
+ "tr",
11036
+ {
11037
+ ref,
11038
+ className: cn(
11039
+ "[&_td:first-child]:rounded-l-[var(--table-row-radius)] [&_td:last-child]:rounded-r-[var(--table-row-radius)] transition-colors duration-[var(--table-motion-duration)] ease-[var(--table-motion-easing)] motion-reduce:transition-none",
11040
+ className
11041
+ ),
11042
+ ...props
11043
+ }
11044
+ );
11045
+ TableRow.displayName = "TableRow";
11046
+ var TableHead = ({
11047
+ className,
11048
+ numeric = false,
11049
+ alignment,
11050
+ scope = "col",
11051
+ ref,
11052
+ ...props
11053
+ }) => /* @__PURE__ */ jsx(
11054
+ "th",
11055
+ {
11056
+ ref,
11057
+ scope,
11058
+ className: cn(
11059
+ "h-[var(--table-header-height)] px-[var(--table-cell-padding-x)] text-left align-middle font-[var(--table-heading-weight)] text-muted-foreground",
11060
+ "[&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-px",
11061
+ !alignment && "last:text-right",
11062
+ numeric && "text-right font-mono tabular-nums",
11063
+ alignment && ALIGNMENT_CLASS[alignment],
11064
+ className
11065
+ ),
11066
+ ...props
11067
+ }
11068
+ );
11069
+ TableHead.displayName = "TableHead";
11070
+ var TableCell = ({
11071
+ className,
11072
+ numeric = false,
11073
+ alignment,
11074
+ ref,
11075
+ ...props
11076
+ }) => /* @__PURE__ */ jsx(
11077
+ "td",
11078
+ {
11079
+ ref,
11080
+ className: cn(
11081
+ "px-[var(--table-cell-padding-x)] py-[var(--table-cell-padding-y)] align-middle",
11082
+ "[&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-px",
11083
+ !alignment && "last:text-right",
11084
+ numeric && "text-right font-mono tabular-nums",
11085
+ alignment && ALIGNMENT_CLASS[alignment],
11086
+ className
11087
+ ),
11088
+ ...props
11089
+ }
11090
+ );
11091
+ TableCell.displayName = "TableCell";
11092
+ var TableCaption = ({
11093
+ className,
11094
+ ref,
11095
+ ...props
11096
+ }) => /* @__PURE__ */ jsx("caption", { ref, className: cn("mt-4 text-sm text-muted-foreground", className), ...props });
11097
+ TableCaption.displayName = "TableCaption";
11098
+ var Table = TableRoot;
11099
+ Table.Body = TableBody;
11100
+ Table.Caption = TableCaption;
11101
+ Table.Cell = TableCell;
11102
+ Table.Col = TableCol;
11103
+ Table.Colgroup = TableColgroup;
11104
+ Table.Footer = TableFooter;
11105
+ Table.Head = TableHead;
11106
+ Table.Header = TableHeader;
11107
+ Table.Row = TableRow;
11108
+ var DEFAULT_MIN_BODY_ROWS = 5;
11109
+ var DEFAULT_ROW_HEIGHT = 44;
11110
+ var alignClassName = {
11111
+ start: "justify-start text-left",
11112
+ center: "justify-center text-center",
11113
+ end: "justify-end text-right"
11114
+ };
11115
+ function AlignedCellContent({
11116
+ align,
11117
+ className,
11118
+ children
11119
+ }) {
11120
+ return /* @__PURE__ */ jsx("div", { className: cn("flex min-w-0 items-center gap-2", alignClassName[align], className), children });
11121
+ }
11122
+ function hasError(error) {
11123
+ return error !== void 0 && error !== null && error !== false && error !== "";
11124
+ }
11125
+ function resolveStatus(status, error, rows) {
11126
+ if (status === "error" || hasError(error)) return "error";
11127
+ if (status === "loading") return "loading";
11128
+ if (status === "empty" || rows.length === 0) return "empty";
11129
+ return "idle";
11130
+ }
11131
+ function DataList({
11132
+ columns,
11133
+ rows,
11134
+ getRowKey,
11135
+ status,
11136
+ isRefreshing = false,
11137
+ error,
11138
+ errorTitle = "Something went wrong",
11139
+ onRetry,
11140
+ retryLabel = "Try again",
11141
+ emptyTitle = "Nothing here",
11142
+ emptyDescription,
11143
+ emptyIcon,
11144
+ emptyAction,
11145
+ minBodyRows = DEFAULT_MIN_BODY_ROWS,
11146
+ rowHeight = DEFAULT_ROW_HEIGHT,
11147
+ pagination,
11148
+ striped = false,
11149
+ interactive = false,
11150
+ onRowClick,
11151
+ label,
11152
+ className,
11153
+ scrollClassName,
11154
+ style,
11155
+ "data-testid": dataTestId
11156
+ }) {
11157
+ const resolved = resolveStatus(status, error, rows);
11158
+ const columnCount = Math.max(columns.length, 1);
11159
+ const reservedFloor = Math.max(minBodyRows, 0) * rowHeight;
11160
+ const skeletonRowCount = Math.max(minBodyRows, 1);
11161
+ const rowsAreInteractive = interactive || onRowClick !== void 0;
11162
+ const busy = resolved === "loading" || isRefreshing;
11163
+ const handleRowKeyDown = (event, row, index) => {
11164
+ if (onRowClick === void 0) return;
11165
+ if (event.key !== "Enter" && event.key !== " ") return;
11166
+ event.preventDefault();
11167
+ onRowClick(row, index);
11168
+ };
11169
+ const header = /* @__PURE__ */ jsx(
11170
+ TableHeader,
11171
+ {
11172
+ className: "border-b-0",
11173
+ children: /* @__PURE__ */ jsx(TableRow, { children: columns.map((column) => /* @__PURE__ */ jsx(
11174
+ TableHead,
11175
+ {
11176
+ numeric: column.numeric ?? false,
11177
+ style: column.width === void 0 ? void 0 : { width: column.width },
11178
+ className: cn(
11179
+ // Cell x-padding is 8px in the primitive, which is tight once the
11180
+ // card padding is zeroed. 12px restores the rhythm.
11181
+ "bg-muted/45 px-3 text-xs uppercase tracking-[0.04em] text-muted-foreground",
11182
+ "first:rounded-l-[var(--table-row-radius)] last:rounded-r-[var(--table-row-radius)]",
11183
+ column.headClassName
11184
+ ),
11185
+ children: /* @__PURE__ */ jsx(AlignedCellContent, { align: column.align ?? "start", children: column.header })
11186
+ },
11187
+ column.id
11188
+ )) })
11189
+ }
11190
+ );
11191
+ let body;
11192
+ if (resolved === "error") {
11193
+ body = /* @__PURE__ */ jsx(TableRow, { children: /* @__PURE__ */ jsx(TableCell, { colSpan: columnCount, className: "px-3", style: { height: reservedFloor }, children: /* @__PURE__ */ jsx(
11194
+ EmptyStateRoot,
11195
+ {
11196
+ live: true,
11197
+ variant: "error",
11198
+ size: "sm",
11199
+ className: "min-h-0 border-0 bg-destructive/5 px-4 py-4",
11200
+ title: errorTitle,
11201
+ description: error,
11202
+ ...onRetry === void 0 ? {} : {
11203
+ action: /* @__PURE__ */ jsx(Button, { type: "button", variant: "secondary", size: "sm", onClick: onRetry, children: retryLabel })
11204
+ }
11205
+ }
11206
+ ) }) });
11207
+ } else if (resolved === "loading") {
11208
+ body = Array.from({ length: skeletonRowCount }).map((_, rowIndex) => /* @__PURE__ */ jsx(TableRow, { "aria-hidden": "true", children: columns.map((column) => /* @__PURE__ */ jsx(TableCell, { className: "px-3", style: { height: rowHeight }, children: /* @__PURE__ */ jsx(AlignedCellContent, { align: column.align ?? "start", children: /* @__PURE__ */ jsx(Skeleton, { height: 12, style: { width: column.loadingWidth ?? "60%", minWidth: 40 } }) }) }, column.id)) }, `data-list-skeleton-${rowIndex}`));
11209
+ } else if (resolved === "empty") {
11210
+ body = /* @__PURE__ */ jsx(TableRow, { children: /* @__PURE__ */ jsx(TableCell, { colSpan: columnCount, className: "px-3", style: { height: reservedFloor }, children: /* @__PURE__ */ jsx(
11211
+ EmptyStateRoot,
11212
+ {
11213
+ live: true,
11214
+ variant: "no-results",
11215
+ size: "sm",
11216
+ className: "min-h-0 border-0 bg-transparent px-4 py-4",
11217
+ title: emptyTitle,
11218
+ ...emptyDescription === void 0 ? {} : { description: emptyDescription },
11219
+ ...emptyIcon === void 0 ? {} : { icon: emptyIcon },
11220
+ ...emptyAction === void 0 ? {} : { action: emptyAction }
11221
+ }
11222
+ ) }) });
11223
+ } else {
11224
+ body = rows.map((row, rowIndex) => /* @__PURE__ */ jsx(
11225
+ TableRow,
11226
+ {
11227
+ ...onRowClick === void 0 ? {} : {
11228
+ tabIndex: 0,
11229
+ onClick: () => onRowClick(row, rowIndex),
11230
+ onKeyDown: (event) => handleRowKeyDown(event, row, rowIndex)
11231
+ },
11232
+ className: cn(onRowClick !== void 0 && "cursor-pointer"),
11233
+ children: columns.map((column) => /* @__PURE__ */ jsx(
11234
+ TableCell,
11235
+ {
11236
+ numeric: column.numeric ?? false,
11237
+ className: cn("px-3", column.cellClassName),
11238
+ style: { height: rowHeight },
11239
+ children: /* @__PURE__ */ jsx(AlignedCellContent, { align: column.align ?? "start", children: column.cell(row, rowIndex) })
11240
+ },
11241
+ column.id
11242
+ ))
11243
+ },
11244
+ getRowKey(row, rowIndex)
11245
+ ));
11246
+ }
11247
+ return /* @__PURE__ */ jsxs(
11248
+ "div",
11249
+ {
11250
+ className: cn("relative w-full min-w-0", className),
11251
+ style,
11252
+ "data-status": resolved,
11253
+ "data-refreshing": isRefreshing ? "" : void 0,
11254
+ "data-testid": dataTestId,
11255
+ "aria-busy": busy || void 0,
11256
+ children: [
11257
+ isRefreshing ? /* @__PURE__ */ jsx(
11258
+ "div",
11259
+ {
11260
+ "aria-hidden": "true",
11261
+ className: "pointer-events-none absolute inset-x-0 top-0 z-10 h-0.5 overflow-hidden rounded-full",
11262
+ children: /* @__PURE__ */ jsx("div", { className: "h-full w-full animate-pulse bg-primary/70 motion-reduce:animate-none" })
11263
+ }
11264
+ ) : null,
11265
+ /* @__PURE__ */ jsxs(
11266
+ Table,
11267
+ {
11268
+ "aria-label": label,
11269
+ wrapperClassName: cn(
11270
+ "min-w-0 rounded-none border-0 bg-transparent p-0",
11271
+ resolved === "idle" && isRefreshing && "opacity-70 transition-opacity motion-reduce:transition-none",
11272
+ scrollClassName
11273
+ ),
11274
+ children: [
11275
+ header,
11276
+ /* @__PURE__ */ jsx(TableBody, { striped, interactive: rowsAreInteractive, children: body })
11277
+ ]
11278
+ }
11279
+ ),
11280
+ pagination === void 0 ? null : /* @__PURE__ */ jsx("div", { className: "mt-3 rounded-[var(--radius-md)] bg-muted/35 px-3 py-2", children: pagination })
11281
+ ]
11282
+ }
11283
+ );
11284
+ }
11285
+ DataList.displayName = "DataList";
11286
+ var Description = function Description2({
11287
+ ref,
11288
+ title,
11289
+ content,
11290
+ tooltip,
11291
+ className
11292
+ }) {
11293
+ return /* @__PURE__ */ jsxs("dl", { ref, className: cn("font-sans", className), children: [
11294
+ /* @__PURE__ */ jsxs("dt", { className: "flex items-center gap-1 text-muted-foreground text-sm capitalize", children: [
11295
+ title,
11296
+ tooltip && /* @__PURE__ */ jsx(ContextCard.Trigger, { content: tooltip, side: "top", sideOffset: 6, children: /* @__PURE__ */ jsx(Information, { "aria-hidden": "true", className: "size-3.5 shrink-0 text-muted-foreground" }) })
11297
+ ] }),
11298
+ /* @__PURE__ */ jsx("dd", { className: "mt-1 font-medium text-foreground text-sm", children: content })
11299
+ ] });
11300
+ };
11301
+ function DisplayCard({
11302
+ className,
11303
+ icon = /* @__PURE__ */ jsx(Sparkles, { className: "size-4 text-blue-300" }),
11304
+ title = "Featured",
11305
+ description = "Discover amazing content",
11306
+ date = "Just now",
11307
+ titleClassName = "text-blue-500"
11308
+ }) {
11309
+ return /* @__PURE__ */ jsxs(
11310
+ "div",
11311
+ {
11312
+ className: cn(
11313
+ "relative flex h-36 w-[22rem] -skew-y-[8deg] select-none flex-col justify-between rounded-[var(--radius-xl)] border-2 bg-muted/70 backdrop-blur-sm px-4 py-3 transition-[background-color,border-color,box-shadow,color,opacity,transform] duration-700",
11314
+ "after:absolute after:-right-1 after:top-[-5%] after:h-[110%] after:w-[20rem] after:bg-gradient-to-l after:from-background after:to-transparent after:content-['']",
10375
11315
  "hover:border-white/20 hover:bg-muted",
10376
11316
  "[&>*]:flex [&>*]:items-center [&>*]:gap-2",
10377
11317
  className
@@ -11425,7 +12365,7 @@ function CircleProgress({ percentage, reduceMotion }) {
11425
12365
  cy: size / 2,
11426
12366
  r: radius,
11427
12367
  fill: "none",
11428
- stroke: "var(--muted)",
12368
+ stroke: "hsl(var(--muted))",
11429
12369
  strokeWidth
11430
12370
  }
11431
12371
  ),
@@ -11436,7 +12376,7 @@ function CircleProgress({ percentage, reduceMotion }) {
11436
12376
  cy: size / 2,
11437
12377
  r: radius,
11438
12378
  fill: "none",
11439
- stroke: "var(--foreground)",
12379
+ stroke: "hsl(var(--foreground))",
11440
12380
  strokeWidth,
11441
12381
  strokeDasharray: circumference,
11442
12382
  initial: false,
@@ -11519,7 +12459,7 @@ function TocClosedPill({
11519
12459
  },
11520
12460
  transition: reduceMotion ? { duration: 0 } : { ...islandTween, delay: isExpanded ? 0 : motionDurationSec.micro },
11521
12461
  className: cn(
11522
- "absolute inset-0 flex w-full items-center gap-4 border-0 bg-transparent px-4 text-left text-foreground outline-none focus-visible:ring-2 focus-visible:ring-foreground/40 sm:px-5",
12462
+ "absolute inset-0 flex w-full items-center gap-4 border-0 bg-transparent px-4 text-left text-foreground outline-none sm:px-5",
11523
12463
  isExpanded && "pointer-events-none"
11524
12464
  ),
11525
12465
  children: [
@@ -11636,7 +12576,7 @@ function TocMenuItem({
11636
12576
  style: { paddingLeft: `${paddingLeft}px` },
11637
12577
  className: cn(
11638
12578
  "group flex w-full shrink-0 cursor-pointer items-center rounded-[var(--radius-lg)] border-none py-2 pr-3 text-left text-sm transition-[background-color,border-color,box-shadow,color,opacity,transform] duration-reveal ease-out",
11639
- "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-foreground/40",
12579
+ "focus-visible:outline-none",
11640
12580
  isActive && "bg-foreground/10 font-medium text-foreground",
11641
12581
  !isActive && isHovered && "bg-foreground/5 text-foreground/85",
11642
12582
  !isActive && !isHovered && "bg-transparent text-foreground/45"
@@ -12075,293 +13015,123 @@ function ApprovalFooter({ isPending, approval }) {
12075
13015
  "button",
12076
13016
  {
12077
13017
  type: "button",
12078
- onClick: handleReject,
12079
- className: "h-7 rounded-[var(--radius-sm)] border border-border bg-transparent px-2 text-xs font-medium text-foreground transition-colors duration-micro hover:bg-accent",
12080
- children: rejectLabel
12081
- }
12082
- ),
12083
- /* @__PURE__ */ jsx(
12084
- "button",
12085
- {
12086
- type: "button",
12087
- onClick: handleApprove,
12088
- className: "h-7 rounded-[var(--radius-sm)] bg-primary px-2 text-xs font-medium text-primary-foreground transition-colors duration-micro hover:bg-primary/90",
12089
- children: approveLabel
12090
- }
12091
- )
12092
- ] })
12093
- ] });
12094
- }
12095
- function EditTool({
12096
- state = "completed",
12097
- variant = "edit",
12098
- filePath,
12099
- oldContent,
12100
- newContent,
12101
- approval,
12102
- maxDiffLines = 2e3,
12103
- className
12104
- }) {
12105
- const isPending = state === "pending";
12106
- const isWaiting = state === "waiting";
12107
- const isWrite = variant === "write";
12108
- const fileName = filePath?.split("/").pop();
12109
- const diffOps = getDiffOps({ isWaiting, isWrite, oldContent, newContent, maxDiffLines });
12110
- const exceededCap = !isWaiting && diffOps === null && (oldContent !== void 0 || newContent !== void 0);
12111
- const stats = diffOps ? countDiffStats(diffOps) : null;
12112
- const diffLineCounts = /* @__PURE__ */ new Map();
12113
- useEffect(() => {
12114
- if (!isPending || !approval) return;
12115
- const onKey = (e) => {
12116
- if (e.key === "Escape") approval.onReject?.();
12117
- };
12118
- window.addEventListener("keydown", onKey);
12119
- return () => window.removeEventListener("keydown", onKey);
12120
- }, [isPending, approval]);
12121
- const headerLabel = isWaiting ? "Generating..." : isPending ? `${isWrite ? "Creating" : "Editing"}${fileName ? ` ${fileName}` : ""}` : `${isWrite ? "Created" : "Edited"}${fileName ? ` ${fileName}` : ""}`;
12122
- const hasBody = diffOps && diffOps.length > 0 || exceededCap;
12123
- return /* @__PURE__ */ jsxs(
12124
- "section",
12125
- {
12126
- "aria-label": fileName ? `${headerLabel} (${fileName})` : headerLabel,
12127
- className: cn(
12128
- "w-full overflow-hidden rounded-[var(--radius-lg)] border border-border bg-card",
12129
- className
12130
- ),
12131
- children: [
12132
- /* @__PURE__ */ jsxs(
12133
- "header",
12134
- {
12135
- className: cn(
12136
- "flex h-7 items-center justify-between bg-muted px-2.5",
12137
- hasBody || approval ? "border-b border-border" : ""
12138
- ),
12139
- children: [
12140
- /* @__PURE__ */ jsx("div", { className: "flex min-w-0 items-center gap-1.5", children: isPending || isWaiting ? /* @__PURE__ */ jsx(TextShimmer, { as: "span", className: "text-xs", children: headerLabel }) : /* @__PURE__ */ jsx("span", { className: "truncate text-xs text-muted-foreground", children: headerLabel }) }),
12141
- stats && !isPending && !isWaiting && (stats.added > 0 || stats.removed > 0) && /* @__PURE__ */ jsxs("span", { className: "inline-flex shrink-0 gap-2 font-mono text-[11px] text-muted-foreground", children: [
12142
- stats.added > 0 && /* @__PURE__ */ jsxs("span", { className: "text-success", children: [
12143
- "+",
12144
- stats.added
12145
- ] }),
12146
- stats.removed > 0 && /* @__PURE__ */ jsxs("span", { className: "text-destructive", children: [
12147
- "-",
12148
- stats.removed
12149
- ] })
12150
- ] })
12151
- ]
12152
- }
12153
- ),
12154
- exceededCap && /* @__PURE__ */ jsxs("div", { className: "bg-background p-3 text-xs text-muted-foreground", children: [
12155
- "Diff exceeds ",
12156
- maxDiffLines.toLocaleString(),
12157
- " lines: open the file to view changes."
12158
- ] }),
12159
- diffOps && diffOps.length > 0 && /* @__PURE__ */ jsx("div", { className: "overflow-x-auto bg-background font-mono text-[12px] leading-[1.5]", children: diffOps.map((op) => {
12160
- const stableKey = getDiffLineKey(op, diffLineCounts);
12161
- return /* @__PURE__ */ jsxs(
12162
- "div",
12163
- {
12164
- className: cn(
12165
- "flex min-w-0 items-start",
12166
- op.type === "add" && "bg-[hsl(var(--success)/0.1)] text-success",
12167
- op.type === "remove" && "bg-[hsl(var(--destructive)/0.1)] text-destructive",
12168
- op.type === "context" && "text-foreground/80"
12169
- ),
12170
- children: [
12171
- /* @__PURE__ */ jsx(
12172
- "span",
12173
- {
12174
- "aria-hidden": "true",
12175
- className: cn(
12176
- "w-4 shrink-0 select-none text-center",
12177
- op.type === "add" && "text-success",
12178
- op.type === "remove" && "text-destructive",
12179
- op.type === "context" && "text-muted-foreground/60"
12180
- ),
12181
- children: op.type === "add" ? "+" : op.type === "remove" ? "-" : " "
12182
- }
12183
- ),
12184
- /* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 whitespace-pre pr-2", children: op.text || " " })
12185
- ]
12186
- },
12187
- stableKey
12188
- );
12189
- }) }),
12190
- approval && /* @__PURE__ */ jsx(ApprovalFooter, { isPending, approval })
12191
- ]
12192
- }
12193
- );
12194
- }
12195
-
12196
- // src/tokens/components/empty-state.ts
12197
- var emptyStateTokens = {
12198
- root: {
12199
- minHeight: {
12200
- sm: primitiveSpacing[16] * 2,
12201
- md: primitiveSpacing[24] * 2,
12202
- lg: primitiveSpacing[16] * 4
12203
- },
12204
- paddingX: {
12205
- sm: primitiveSpacing[4],
12206
- md: primitiveSpacing[6],
12207
- lg: primitiveSpacing[8]
12208
- },
12209
- paddingY: {
12210
- sm: primitiveSpacing[8],
12211
- md: primitiveSpacing[10],
12212
- lg: primitiveSpacing[14]
12213
- },
12214
- radius: primitiveRadius.lg
12215
- },
12216
- content: {
12217
- maxWidth: primitiveSpacing[14] * 8,
12218
- descriptionMaxWidth: primitiveSpacing[12] * 8,
12219
- stackGap: primitiveSpacing[4],
12220
- copyGap: primitiveSpacing[2],
12221
- actionsGap: primitiveSpacing[2]
12222
- },
12223
- icon: {
12224
- size: primitiveSizing.lg,
12225
- radius: primitiveRadius.lg
12226
- },
12227
- typography: {
12228
- title: {
12229
- sm: primitiveFontSize.sm,
12230
- md: primitiveFontSize.base,
12231
- lg: primitiveFontSize.lg
12232
- },
12233
- description: {
12234
- sm: primitiveFontSize.xs,
12235
- md: primitiveFontSize.sm,
12236
- lg: primitiveFontSize.sm
12237
- },
12238
- titleWeight: primitiveFontWeight.semibold,
12239
- titleLineHeight: primitiveSpacing[6],
12240
- descriptionLineHeight: primitiveSpacing[6]
12241
- }
12242
- };
12243
- var variantClassName = {
12244
- "blank-slate": "border border-dashed border-border bg-background",
12245
- informational: "border border-border bg-card",
12246
- educational: "border border-border bg-card",
12247
- guide: "border border-border bg-muted/30",
12248
- "no-results": "border border-dashed border-border bg-background",
12249
- cleared: "border border-dashed border-border bg-muted/20",
12250
- permission: "border border-border bg-card",
12251
- error: "border border-destructive/25 bg-destructive/5"
12252
- };
12253
- var iconToneClassName = {
12254
- "blank-slate": "text-muted-foreground",
12255
- informational: "text-primary",
12256
- educational: "text-primary",
12257
- guide: "text-primary",
12258
- "no-results": "text-muted-foreground",
12259
- cleared: "text-muted-foreground",
12260
- permission: "text-muted-foreground",
12261
- error: "text-destructive"
12262
- };
12263
- var emptyStateCssVars = (size) => ({
12264
- "--empty-state-min-height": `${emptyStateTokens.root.minHeight[size]}px`,
12265
- "--empty-state-padding-x": `${emptyStateTokens.root.paddingX[size]}px`,
12266
- "--empty-state-padding-y": `${emptyStateTokens.root.paddingY[size]}px`,
12267
- "--empty-state-radius": `${emptyStateTokens.root.radius}px`,
12268
- "--empty-state-content-max-width": `${emptyStateTokens.content.maxWidth}px`,
12269
- "--empty-state-description-max-width": `${emptyStateTokens.content.descriptionMaxWidth}px`,
12270
- "--empty-state-stack-gap": `${emptyStateTokens.content.stackGap}px`,
12271
- "--empty-state-copy-gap": `${emptyStateTokens.content.copyGap}px`,
12272
- "--empty-state-actions-gap": `${emptyStateTokens.content.actionsGap}px`,
12273
- "--empty-state-icon-size": `${emptyStateTokens.icon.size}px`,
12274
- "--empty-state-icon-radius": `${emptyStateTokens.icon.radius}px`,
12275
- "--empty-state-title-size": `${emptyStateTokens.typography.title[size]}px`,
12276
- "--empty-state-description-size": `${emptyStateTokens.typography.description[size]}px`,
12277
- "--empty-state-title-weight": `${emptyStateTokens.typography.titleWeight}`,
12278
- "--empty-state-title-line-height": `${emptyStateTokens.typography.titleLineHeight}px`,
12279
- "--empty-state-description-line-height": `${emptyStateTokens.typography.descriptionLineHeight}px`
12280
- });
12281
- var EmptyStateIcon = ({
12282
- className,
12283
- icon,
12284
- ref,
12285
- ...props
12286
- }) => /* @__PURE__ */ jsx(
12287
- "div",
12288
- {
12289
- ref,
12290
- "aria-hidden": "true",
12291
- className: cn(
12292
- "flex size-[var(--empty-state-icon-size)] shrink-0 items-center justify-center rounded-[var(--empty-state-icon-radius)] bg-muted",
12293
- className
12294
- ),
12295
- ...props,
12296
- children: icon
12297
- }
12298
- );
12299
- EmptyStateIcon.displayName = "EmptyState.Icon";
12300
- var EmptyStateRoot = ({
12301
- className,
12302
- title,
12303
- description,
12304
- icon,
12305
- children,
12306
- action,
12307
- link,
12308
- style,
12309
- variant = "blank-slate",
12310
- size = "md",
12311
- align = "center",
12312
- live = false,
12313
- ref,
12314
- ...props
12315
- }) => {
12316
- const actions = children ?? [action, link].filter(Boolean);
12317
- const hasActions = React45.Children.toArray(actions).length > 0;
12318
- return /* @__PURE__ */ jsx(
13018
+ onClick: handleReject,
13019
+ className: "h-7 rounded-[var(--radius-sm)] border border-border bg-transparent px-2 text-xs font-medium text-foreground transition-colors duration-micro hover:bg-accent",
13020
+ children: rejectLabel
13021
+ }
13022
+ ),
13023
+ /* @__PURE__ */ jsx(
13024
+ "button",
13025
+ {
13026
+ type: "button",
13027
+ onClick: handleApprove,
13028
+ className: "h-7 rounded-[var(--radius-sm)] bg-primary px-2 text-xs font-medium text-primary-foreground transition-colors duration-micro hover:bg-primary/90",
13029
+ children: approveLabel
13030
+ }
13031
+ )
13032
+ ] })
13033
+ ] });
13034
+ }
13035
+ function EditTool({
13036
+ state = "completed",
13037
+ variant = "edit",
13038
+ filePath,
13039
+ oldContent,
13040
+ newContent,
13041
+ approval,
13042
+ maxDiffLines = 2e3,
13043
+ className
13044
+ }) {
13045
+ const isPending = state === "pending";
13046
+ const isWaiting = state === "waiting";
13047
+ const isWrite = variant === "write";
13048
+ const fileName = filePath?.split("/").pop();
13049
+ const diffOps = getDiffOps({ isWaiting, isWrite, oldContent, newContent, maxDiffLines });
13050
+ const exceededCap = !isWaiting && diffOps === null && (oldContent !== void 0 || newContent !== void 0);
13051
+ const stats = diffOps ? countDiffStats(diffOps) : null;
13052
+ const diffLineCounts = /* @__PURE__ */ new Map();
13053
+ useEffect(() => {
13054
+ if (!isPending || !approval) return;
13055
+ const onKey = (e) => {
13056
+ if (e.key === "Escape") approval.onReject?.();
13057
+ };
13058
+ window.addEventListener("keydown", onKey);
13059
+ return () => window.removeEventListener("keydown", onKey);
13060
+ }, [isPending, approval]);
13061
+ const headerLabel = isWaiting ? "Generating..." : isPending ? `${isWrite ? "Creating" : "Editing"}${fileName ? ` ${fileName}` : ""}` : `${isWrite ? "Created" : "Edited"}${fileName ? ` ${fileName}` : ""}`;
13062
+ const hasBody = diffOps && diffOps.length > 0 || exceededCap;
13063
+ return /* @__PURE__ */ jsxs(
12319
13064
  "section",
12320
13065
  {
12321
- ref,
12322
- "aria-live": live ? "polite" : void 0,
13066
+ "aria-label": fileName ? `${headerLabel} (${fileName})` : headerLabel,
12323
13067
  className: cn(
12324
- "flex min-h-[var(--empty-state-min-height)] w-full flex-col justify-center rounded-[var(--empty-state-radius)] px-[var(--empty-state-padding-x)] py-[var(--empty-state-padding-y)]",
12325
- variantClassName[variant],
12326
- align === "center" ? "items-center text-center" : "items-start text-left",
13068
+ "w-full overflow-hidden rounded-[var(--radius-lg)] border border-border bg-card",
12327
13069
  className
12328
13070
  ),
12329
- style: { ...emptyStateCssVars(size), ...style },
12330
- ...props,
12331
- children: /* @__PURE__ */ jsxs(
12332
- "div",
12333
- {
12334
- className: cn(
12335
- "flex max-w-[var(--empty-state-content-max-width)] flex-col gap-[var(--empty-state-stack-gap)]",
12336
- align === "center" ? "items-center" : "items-start"
12337
- ),
12338
- children: [
12339
- icon ? /* @__PURE__ */ jsx("div", { className: cn("[&>div]:bg-muted", iconToneClassName[variant]), children: icon }) : null,
12340
- /* @__PURE__ */ jsxs("div", { className: "space-y-[var(--empty-state-copy-gap)]", children: [
12341
- /* @__PURE__ */ jsx("h3", { className: "font-[var(--empty-state-title-weight)] text-[length:var(--empty-state-title-size)] leading-[var(--empty-state-title-line-height)] text-foreground", children: title }),
12342
- description ? /* @__PURE__ */ jsx("p", { className: "max-w-[var(--empty-state-description-max-width)] text-[length:var(--empty-state-description-size)] leading-[var(--empty-state-description-line-height)] text-muted-foreground", children: description }) : null
12343
- ] }),
12344
- hasActions ? /* @__PURE__ */ jsx(
12345
- "div",
12346
- {
12347
- className: cn(
12348
- "flex flex-wrap gap-[var(--empty-state-actions-gap)]",
12349
- align === "center" ? "justify-center" : "justify-start"
13071
+ children: [
13072
+ /* @__PURE__ */ jsxs(
13073
+ "header",
13074
+ {
13075
+ className: cn(
13076
+ "flex h-7 items-center justify-between bg-muted px-2.5",
13077
+ hasBody || approval ? "border-b border-border" : ""
13078
+ ),
13079
+ children: [
13080
+ /* @__PURE__ */ jsx("div", { className: "flex min-w-0 items-center gap-1.5", children: isPending || isWaiting ? /* @__PURE__ */ jsx(TextShimmer, { as: "span", className: "text-xs", children: headerLabel }) : /* @__PURE__ */ jsx("span", { className: "truncate text-xs text-muted-foreground", children: headerLabel }) }),
13081
+ stats && !isPending && !isWaiting && (stats.added > 0 || stats.removed > 0) && /* @__PURE__ */ jsxs("span", { className: "inline-flex shrink-0 gap-2 font-mono text-[11px] text-muted-foreground", children: [
13082
+ stats.added > 0 && /* @__PURE__ */ jsxs("span", { className: "text-success", children: [
13083
+ "+",
13084
+ stats.added
13085
+ ] }),
13086
+ stats.removed > 0 && /* @__PURE__ */ jsxs("span", { className: "text-destructive", children: [
13087
+ "-",
13088
+ stats.removed
13089
+ ] })
13090
+ ] })
13091
+ ]
13092
+ }
13093
+ ),
13094
+ exceededCap && /* @__PURE__ */ jsxs("div", { className: "bg-background p-3 text-xs text-muted-foreground", children: [
13095
+ "Diff exceeds ",
13096
+ maxDiffLines.toLocaleString(),
13097
+ " lines: open the file to view changes."
13098
+ ] }),
13099
+ diffOps && diffOps.length > 0 && /* @__PURE__ */ jsx("div", { className: "overflow-x-auto bg-background font-mono text-[12px] leading-[1.5]", children: diffOps.map((op) => {
13100
+ const stableKey = getDiffLineKey(op, diffLineCounts);
13101
+ return /* @__PURE__ */ jsxs(
13102
+ "div",
13103
+ {
13104
+ className: cn(
13105
+ "flex min-w-0 items-start",
13106
+ op.type === "add" && "bg-[hsl(var(--success)/0.1)] text-success",
13107
+ op.type === "remove" && "bg-[hsl(var(--destructive)/0.1)] text-destructive",
13108
+ op.type === "context" && "text-foreground/80"
13109
+ ),
13110
+ children: [
13111
+ /* @__PURE__ */ jsx(
13112
+ "span",
13113
+ {
13114
+ "aria-hidden": "true",
13115
+ className: cn(
13116
+ "w-4 shrink-0 select-none text-center",
13117
+ op.type === "add" && "text-success",
13118
+ op.type === "remove" && "text-destructive",
13119
+ op.type === "context" && "text-muted-foreground/60"
13120
+ ),
13121
+ children: op.type === "add" ? "+" : op.type === "remove" ? "-" : " "
13122
+ }
12350
13123
  ),
12351
- children: actions
12352
- }
12353
- ) : null
12354
- ]
12355
- }
12356
- )
13124
+ /* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 whitespace-pre pr-2", children: op.text || " " })
13125
+ ]
13126
+ },
13127
+ stableKey
13128
+ );
13129
+ }) }),
13130
+ approval && /* @__PURE__ */ jsx(ApprovalFooter, { isPending, approval })
13131
+ ]
12357
13132
  }
12358
13133
  );
12359
- };
12360
- EmptyStateRoot.displayName = "EmptyState.Root";
12361
- var EmptyState = {
12362
- Root: EmptyStateRoot,
12363
- Icon: EmptyStateIcon
12364
- };
13134
+ }
12365
13135
  var InputOTP = ({
12366
13136
  className,
12367
13137
  containerClassName,
@@ -12506,6 +13276,7 @@ function EntityRoot({
12506
13276
  as,
12507
13277
  left,
12508
13278
  right,
13279
+ chevron = false,
12509
13280
  children,
12510
13281
  className,
12511
13282
  ...props
@@ -12518,8 +13289,9 @@ function EntityRoot({
12518
13289
  {
12519
13290
  className: cn(
12520
13291
  "flex w-full items-center gap-3 px-4 py-3 text-left",
12521
- // Clickable rows get hover + focus-visible affordance.
12522
- isButton && "cursor-pointer transition-colors hover:bg-accent/40 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-inset",
13292
+ // Clickable rows get hover + focus-visible affordance, plus `group`
13293
+ // so trailing affordances (the chevron below) can react to hover.
13294
+ isButton && "group cursor-pointer transition-colors hover:bg-accent/40 focus-visible:outline-none",
12523
13295
  className
12524
13296
  ),
12525
13297
  ...buttonDefaults,
@@ -12527,7 +13299,16 @@ function EntityRoot({
12527
13299
  children: [
12528
13300
  left && /* @__PURE__ */ jsx("div", { className: "flex shrink-0 items-center", children: left }),
12529
13301
  /* @__PURE__ */ jsx("div", { className: "flex min-w-0 flex-1 items-center gap-3", children }),
12530
- right && /* @__PURE__ */ jsx("div", { className: "flex shrink-0 items-center", children: right })
13302
+ (right || isButton && chevron) && /* @__PURE__ */ jsxs("div", { className: "flex shrink-0 items-center gap-2", children: [
13303
+ right,
13304
+ isButton && chevron && /* @__PURE__ */ jsx(
13305
+ ChevronRight,
13306
+ {
13307
+ className: "h-3.5 w-3.5 shrink-0 text-neutral-10 transition-transform group-hover:translate-x-0.5",
13308
+ "aria-hidden": "true"
13309
+ }
13310
+ )
13311
+ ] })
12531
13312
  ]
12532
13313
  }
12533
13314
  );
@@ -13108,8 +13889,8 @@ function ExpandableTabs({
13108
13889
  const Icon = tab.icon;
13109
13890
  const isSelected = selected === index;
13110
13891
  const tabClassName = cn(
13111
- "relative rounded-[var(--radius-xl)] py-2 text-sm font-medium transition-colors duration-300",
13112
- "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
13892
+ "relative rounded-[var(--radius-xl)] py-2 text-sm font-medium transition-colors duration-flow",
13893
+ "focus-visible:outline-none",
13113
13894
  isSelected ? cn("bg-muted", activeColor) : "text-muted-foreground hover:bg-muted hover:text-foreground"
13114
13895
  );
13115
13896
  const tabContent = (
@@ -13210,7 +13991,7 @@ function getTextareaStyle(size, style) {
13210
13991
  "--textarea-focus-ring-width": `${textareaTokens.focusRingWidth}px`,
13211
13992
  borderRadius: "var(--textarea-radius)",
13212
13993
  outline: "none",
13213
- ...style
13994
+ ...asPlainStyle(style)
13214
13995
  };
13215
13996
  }
13216
13997
  function getTextareaFieldStyle() {
@@ -13851,7 +14632,7 @@ function getSelectTriggerStyle(size, style) {
13851
14632
  "--select-focus-ring-width": `${selectTokens.focusRingWidth}px`,
13852
14633
  borderRadius: "var(--select-radius)",
13853
14634
  outline: "none",
13854
- ...style
14635
+ ...asPlainStyle(style)
13855
14636
  };
13856
14637
  }
13857
14638
  function getNativeSelectStyle(size, style) {
@@ -13870,7 +14651,7 @@ function getNativeSelectStyle(size, style) {
13870
14651
  "--select-message-gap": `${selectTokens.messageGap}px`,
13871
14652
  "--select-duration": `${selectTokens.motion.duration}ms`,
13872
14653
  "--select-easing": selectTokens.motion.easing,
13873
- ...style
14654
+ ...asPlainStyle(style)
13874
14655
  };
13875
14656
  }
13876
14657
  function getSelectContentStyle(style) {
@@ -13890,7 +14671,7 @@ function getSelectContentStyle(style) {
13890
14671
  "--select-item-indicator-size": `${selectTokens.item.indicatorSize}px`,
13891
14672
  "--select-item-indicator-icon-size": `${selectTokens.item.indicatorIconSize}px`,
13892
14673
  zIndex: overlayZIndex.popover,
13893
- ...style
14674
+ ...asPlainStyle(style)
13894
14675
  };
13895
14676
  }
13896
14677
  function textOf(node) {
@@ -14501,7 +15282,7 @@ function FeedbackDefault({
14501
15282
  "button",
14502
15283
  {
14503
15284
  "aria-label": "Close feedback",
14504
- className: "inline-flex size-7 items-center justify-center rounded-[var(--feedback-radius)] text-muted-foreground transition-[background-color,color] duration-[var(--feedback-duration)] ease-[var(--feedback-easing)] hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
15285
+ className: "inline-flex size-7 items-center justify-center rounded-[var(--feedback-radius)] text-muted-foreground transition-[background-color,color] duration-[var(--feedback-duration)] ease-[var(--feedback-easing)] hover:bg-accent hover:text-accent-foreground focus-visible:outline-none",
14505
15286
  onClick: closeAndReturnFocus,
14506
15287
  type: "button",
14507
15288
  children: /* @__PURE__ */ jsx(Cross, { "aria-hidden": "true", size: 14 })
@@ -14747,7 +15528,7 @@ function FileAttachment({
14747
15528
  className: cn(
14748
15529
  "absolute -right-1.5 -top-1.5 z-10 flex size-4 items-center justify-center",
14749
15530
  "rounded-full border border-border bg-background text-muted-foreground",
14750
- "opacity-0 transition-opacity duration-150 ease-out",
15531
+ "opacity-0 transition-opacity duration-micro ease-out",
14751
15532
  "group-hover:opacity-100 group-focus-within:opacity-100 focus-visible:opacity-100",
14752
15533
  "hover:text-foreground active:scale-[0.97]"
14753
15534
  ),
@@ -15017,7 +15798,7 @@ var FileCard = function FileCard2({
15017
15798
  /* @__PURE__ */ jsx("div", { className: "ring-border relative z-1 h-18 w-14 space-y-3 rounded-[var(--radius-md)] bg-card p-2 ring-1", children: /* @__PURE__ */ jsx(Renderer, {}) })
15018
15799
  ] });
15019
15800
  };
15020
- var pillBaseClass = "inline-flex items-center justify-center shrink-0 whitespace-nowrap rounded-full font-medium border transition-colors duration-150 cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2";
15801
+ var pillBaseClass = "inline-flex items-center justify-center shrink-0 whitespace-nowrap rounded-full font-medium border transition-colors duration-flow cursor-pointer focus-visible:outline-none";
15021
15802
  var pillSizeClass = {
15022
15803
  sm: "h-8 px-3 text-xs gap-1.5",
15023
15804
  md: "h-9 px-4 text-sm gap-1.5"
@@ -17665,9 +18446,9 @@ function InteractiveFrostedGlassCard({
17665
18446
  element.removeEventListener("pointerleave", handlePointerLeave);
17666
18447
  };
17667
18448
  }, []);
17668
- const cardClasses = isElevated ? `group relative w-full overflow-hidden rounded-[var(--radius-3xl)] border border-cyan/25 bg-neutral-950/60 p-8 backdrop-blur-3xl transition-[background-color,border-color,box-shadow,color,opacity,transform] duration-500 hover:border-cyan/40 shadow-[0_8px_32px_rgba(0,0,0,0.4),0_0_60px_rgba(11,241,195,0.08)] hover:shadow-[0_12px_48px_rgba(0,0,0,0.5),0_0_80px_rgba(11,241,195,0.12)]` : `group relative w-full overflow-hidden rounded-[var(--radius-3xl)] border border-white/10 bg-white/5 p-8 backdrop-blur-2xl transition-[background-color,border-color,box-shadow,color,opacity,transform] duration-500 hover:border-white/20 shadow-none hover:shadow-[0_4px_16px_rgba(255,255,255,0.05)]`;
17669
- const glowColor = isElevated ? `radial-gradient(600px circle at ${mousePosition.x}px ${mousePosition.y}px, rgba(11,241,195,0.15), transparent 40%)` : `radial-gradient(600px circle at ${mousePosition.x}px ${mousePosition.y}px, rgba(255,255,255,0.06), transparent 40%)`;
17670
- const iconBgClass = isElevated ? "flex h-12 w-12 items-center justify-center rounded-[var(--radius-2xl)] bg-cyan/10 text-cyan backdrop-blur-md border border-cyan/20 shadow-[0_0_20px_rgba(11,241,195,0.1)]" : "flex h-12 w-12 items-center justify-center rounded-[var(--radius-2xl)] bg-white/5 text-white/80 backdrop-blur-md border border-white/10";
18449
+ const cardClasses = isElevated ? `group relative w-full overflow-hidden rounded-[var(--radius-3xl)] border border-cyan/25 bg-neutral-950/60 p-8 backdrop-blur-3xl transition-[background-color,border-color,box-shadow,color,opacity,transform] duration-500 hover:border-cyan/40 shadow-glow-accent hover:shadow-glow-accent-lg` : `group relative w-full overflow-hidden rounded-[var(--radius-3xl)] border border-white/10 bg-white/5 p-8 backdrop-blur-2xl transition-[background-color,border-color,box-shadow,color,opacity,transform] duration-500 hover:border-white/20 shadow-none hover:shadow-[0_4px_16px_rgba(255,255,255,0.05)]`;
18450
+ const glowColor = isElevated ? `radial-gradient(600px circle at ${mousePosition.x}px ${mousePosition.y}px, color-mix(in srgb, var(--brand-accent) 15%, transparent), transparent 40%)` : `radial-gradient(600px circle at ${mousePosition.x}px ${mousePosition.y}px, rgba(255,255,255,0.06), transparent 40%)`;
18451
+ const iconBgClass = isElevated ? "flex h-12 w-12 items-center justify-center rounded-[var(--radius-2xl)] bg-cyan/10 text-cyan backdrop-blur-md border border-cyan/20 shadow-glow-accent-sm" : "flex h-12 w-12 items-center justify-center rounded-[var(--radius-2xl)] bg-white/5 text-white/80 backdrop-blur-md border border-white/10";
17671
18452
  const noiseFilterId = `cardNoise_${variant}`;
17672
18453
  return /* @__PURE__ */ jsxs(
17673
18454
  "div",
@@ -18317,7 +19098,7 @@ function getSpinnerStyle(size, style) {
18317
19098
  "--spinner-bar-radius": `${spinnerTokens.barRadius}px`,
18318
19099
  "--spinner-duration": `${spinnerTokens.motion.duration}ms`,
18319
19100
  "--spinner-easing": spinnerTokens.motion.easing,
18320
- ...style
19101
+ ...asPlainStyle(style)
18321
19102
  };
18322
19103
  }
18323
19104
  function getBarOpacity(index) {
@@ -18615,7 +19396,7 @@ function MagicCard({
18615
19396
  radial-gradient(${gradientSize}px circle at ${mouseX}px ${mouseY}px,
18616
19397
  ${gradientFrom},
18617
19398
  ${gradientTo},
18618
- var(--border) 100%
19399
+ hsl(var(--border)) 100%
18619
19400
  )
18620
19401
  `;
18621
19402
  const spotlightGradient = useMotionTemplate`
@@ -18668,9 +19449,9 @@ function MagicCard({
18668
19449
  /* @__PURE__ */ jsx(
18669
19450
  motion.div,
18670
19451
  {
18671
- className: "bg-border pointer-events-none absolute inset-0 rounded-[inherit] duration-300 group-hover:opacity-100",
19452
+ className: "bg-border pointer-events-none absolute inset-0 rounded-[inherit] duration-reveal group-hover:opacity-100",
18672
19453
  style: {
18673
- background: shouldReduceMotion ? `linear-gradient(135deg, ${gradientFrom}, ${gradientTo}, var(--border) 100%)` : borderGradient
19454
+ background: shouldReduceMotion ? `linear-gradient(135deg, ${gradientFrom}, ${gradientTo}, hsl(var(--border)) 100%)` : borderGradient
18674
19455
  }
18675
19456
  }
18676
19457
  ),
@@ -18678,7 +19459,7 @@ function MagicCard({
18678
19459
  /* @__PURE__ */ jsx(
18679
19460
  motion.div,
18680
19461
  {
18681
- className: "pointer-events-none absolute inset-px rounded-[inherit] opacity-0 transition-opacity duration-300 group-hover:opacity-100",
19462
+ className: "pointer-events-none absolute inset-px rounded-[inherit] opacity-0 transition-opacity duration-reveal group-hover:opacity-100",
18682
19463
  style: {
18683
19464
  background: shouldReduceMotion ? "transparent" : spotlightGradient,
18684
19465
  opacity: gradientOpacity
@@ -18890,7 +19671,7 @@ function McpTool({
18890
19671
  {
18891
19672
  "aria-hidden": "true",
18892
19673
  className: cn(
18893
- "size-3 shrink-0 text-muted-foreground transition-transform duration-150 ease-out",
19674
+ "size-3 shrink-0 text-muted-foreground transition-transform duration-flow ease-out",
18894
19675
  isOpen ? "rotate-90" : "rotate-0"
18895
19676
  )
18896
19677
  }
@@ -19563,7 +20344,7 @@ function getMessageContentStyle(density, style) {
19563
20344
  "--message-content-paragraph-margin": `${densityToken.paragraphMargin}px`,
19564
20345
  "--message-content-heading-margin": `${densityToken.headingMargin}px`,
19565
20346
  "--message-content-pre-margin": `${densityToken.preMargin}px`,
19566
- ...style
20347
+ ...asPlainStyle(style)
19567
20348
  };
19568
20349
  }
19569
20350
  function MessageContent({
@@ -19630,8 +20411,8 @@ function MetricCard({
19630
20411
  }
19631
20412
  };
19632
20413
  const trendColors = {
19633
- up: "text-emerald-600 dark:text-emerald-400",
19634
- down: "text-red-600 dark:text-red-400",
20414
+ up: "text-[hsl(var(--success-strong))]",
20415
+ down: "text-[hsl(var(--destructive-strong))]",
19635
20416
  neutral: "text-muted-foreground"
19636
20417
  };
19637
20418
  const TrendIcon = trend === "up" ? ChartTrendingUp : trend === "down" ? ChartTrendingDown : Minus;
@@ -19669,9 +20450,9 @@ function MetricCardBordered({ className, ...props }) {
19669
20450
  }
19670
20451
  function StatItem({ label, value, color = "neutral", className }) {
19671
20452
  const colorClasses = {
19672
- success: "bg-emerald-500",
19673
- warning: "bg-amber-500",
19674
- error: "bg-red-500",
20453
+ success: "bg-success",
20454
+ warning: "bg-warning",
20455
+ error: "bg-destructive",
19675
20456
  info: "bg-info",
19676
20457
  neutral: "bg-muted-foreground"
19677
20458
  };
@@ -20052,7 +20833,7 @@ var MultiSelectTrigger = ({
20052
20833
  "gap-[var(--multi-select-trigger-gap)] rounded-[var(--multi-select-trigger-radius)] border border-input bg-background",
20053
20834
  "px-[var(--multi-select-trigger-padding-x)] text-left text-[length:var(--multi-select-trigger-font-size)] text-foreground shadow-xs",
20054
20835
  "transition-[background-color,border-color,box-shadow,color] duration-[var(--multi-select-duration)] ease-[var(--multi-select-easing)]",
20055
- "hover:bg-accent/60 focus-visible:border-ring focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
20836
+ "hover:bg-accent/60 focus-visible:border-ring focus-visible:outline-none",
20056
20837
  "disabled:cursor-not-allowed disabled:opacity-50",
20057
20838
  className
20058
20839
  ),
@@ -20243,7 +21024,7 @@ var MultiSelectRow = ({
20243
21024
  "peer size-[var(--multi-select-checkbox-size)] appearance-none rounded-[var(--radius-sm)] border border-input bg-background",
20244
21025
  "transition-[background-color,border-color,box-shadow] duration-[var(--multi-select-duration)] ease-[var(--multi-select-easing)]",
20245
21026
  "hover:border-ring checked:border-primary checked:bg-primary",
20246
- "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2"
21027
+ "focus-visible:outline-none"
20247
21028
  )
20248
21029
  }
20249
21030
  ),
@@ -20273,7 +21054,7 @@ var MultiSelectRow = ({
20273
21054
  className: cn(
20274
21055
  "min-w-[var(--multi-select-action-min-width)] shrink-0 rounded-[var(--radius-sm)] px-2 py-1 text-right text-[length:var(--multi-select-row-description-size)] font-medium text-muted-foreground",
20275
21056
  "opacity-0 transition-[background-color,color,opacity] duration-[var(--multi-select-duration)] ease-[var(--multi-select-easing)]",
20276
- "hover:bg-background hover:text-foreground focus-visible:bg-background focus-visible:text-foreground focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
21057
+ "hover:bg-background hover:text-foreground focus-visible:bg-background focus-visible:text-foreground focus-visible:opacity-100 focus-visible:outline-none",
20277
21058
  "group-hover:opacity-100 group-focus-within:opacity-100"
20278
21059
  ),
20279
21060
  children: action.label
@@ -21233,37 +22014,6 @@ var switchTokens = {
21233
22014
  }
21234
22015
  };
21235
22016
 
21236
- // src/tokens/components/table.ts
21237
- var tableTokens = {
21238
- wrapper: {
21239
- minWidth: 248,
21240
- padding: primitiveSpacing[6],
21241
- radius: primitiveRadius.lg
21242
- },
21243
- row: {
21244
- radius: primitiveRadius.sm
21245
- },
21246
- cell: {
21247
- paddingX: primitiveSpacing[2],
21248
- paddingY: 10
21249
- },
21250
- header: {
21251
- height: primitiveSpacing[10]
21252
- },
21253
- typography: {
21254
- size: primitiveFontSize.sm,
21255
- headingWeight: primitiveFontWeight.medium,
21256
- bodyWeight: primitiveFontWeight.normal
21257
- },
21258
- spacer: {
21259
- bodyTop: primitiveSpacing[3]
21260
- },
21261
- motion: {
21262
- duration: primitiveTransition.duration.micro,
21263
- easing: primitiveTransition.easing.default
21264
- }
21265
- };
21266
-
21267
22017
  // src/tokens/components/tabs.ts
21268
22018
  var tabsSizes = {
21269
22019
  xs: {
@@ -21662,7 +22412,7 @@ function NotificationMessageList({
21662
22412
  /* @__PURE__ */ jsx("div", { className: "relative z-0 space-y-2", children: messages.map((msg, i) => /* @__PURE__ */ jsxs(
21663
22413
  "div",
21664
22414
  {
21665
- className: "notification-animate-scale-up flex cursor-pointer items-start gap-3 rounded-[var(--radius-lg)] border p-3 transition duration-300 ease-in-out hover:bg-muted/50",
22415
+ className: "notification-animate-scale-up flex cursor-pointer items-start gap-3 rounded-[var(--radius-lg)] border p-3 transition duration-reveal ease-in-out hover:bg-muted/50",
21666
22416
  style: { animationDelay: `${i * animationDelay}ms` },
21667
22417
  children: [
21668
22418
  /* @__PURE__ */ jsx(
@@ -21726,7 +22476,7 @@ function PaginationRail({
21726
22476
  "group flex min-h-[var(--pagination-min-height)] min-w-0 items-center gap-[var(--pagination-gap)] rounded-[var(--pagination-radius)] border border-border bg-background",
21727
22477
  "px-[var(--pagination-padding-x)] py-[var(--pagination-padding-y)] text-foreground shadow-xs",
21728
22478
  "transition-[background-color,border-color,box-shadow,color,transform] duration-[var(--pagination-duration)] ease-[var(--pagination-easing)]",
21729
- "hover:border-ring hover:bg-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
22479
+ "hover:border-ring hover:bg-accent focus-visible:outline-none",
21730
22480
  "motion-reduce:transition-none",
21731
22481
  isPrevious ? "justify-start text-left" : "justify-end text-right"
21732
22482
  ),
@@ -22288,7 +23038,7 @@ var variantMap = {
22288
23038
  cta: "text-foreground decoration-border hover:text-foreground hover:decoration-foreground"
22289
23039
  }
22290
23040
  };
22291
- var ctaBase = "font-medium underline underline-offset-[5px] transition-colors duration-100";
23041
+ var ctaBase = "font-medium underline underline-offset-[5px] transition-colors duration-micro";
22292
23042
  function ProjectBanner({
22293
23043
  variant = "info",
22294
23044
  label,
@@ -22895,7 +23645,7 @@ var radioControlClassName = cn(
22895
23645
  "transition-[background-color,border-color,box-shadow] duration-[var(--radio-motion-duration)] ease-[var(--radio-motion-easing)]",
22896
23646
  "after:size-[var(--radio-dot-size)] after:scale-0 after:rounded-[var(--radius-full)] after:bg-current after:opacity-0 after:transition-[opacity,transform] after:duration-[var(--radio-motion-duration)] after:ease-[var(--radio-motion-easing)] after:content-['']",
22897
23647
  "peer-checked:border-[var(--neutral-12)] peer-checked:after:scale-100 peer-checked:after:opacity-100",
22898
- "peer-focus-visible:outline-none peer-focus-visible:ring-2 peer-focus-visible:ring-ring peer-focus-visible:ring-offset-2",
23648
+ "peer-focus-visible:outline-none",
22899
23649
  "peer-disabled:border-[var(--neutral-5)] peer-disabled:bg-muted peer-disabled:text-[var(--neutral-8)]"
22900
23650
  );
22901
23651
  function useRadioGroupContext() {
@@ -23109,7 +23859,10 @@ var RadioGroupCardItem = ({
23109
23859
  {
23110
23860
  ref,
23111
23861
  className: cn(
23112
- "relative flex flex-col items-center justify-center rounded-[var(--radius-lg)] border-2 border-muted bg-popover p-4 hover:bg-accent outline-none hover:text-accent-foreground peer-data-state-checked:border-primary data-state-checked:border-primary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
23862
+ // Base UI radio emits `data-checked` / `data-unchecked`. The Radix-era
23863
+ // `data-state-checked:` selectors this shipped with never matched, so the
23864
+ // selected card had no visual state at all.
23865
+ "relative flex flex-col items-center justify-center rounded-[var(--radius-lg)] border-2 border-muted bg-popover p-4 hover:bg-accent outline-none hover:text-accent-foreground data-[checked]:border-primary focus-visible:outline-none",
23113
23866
  className
23114
23867
  ),
23115
23868
  ...props,
@@ -23137,7 +23890,9 @@ var RadioGroupStackedItem = ({
23137
23890
  {
23138
23891
  ref,
23139
23892
  className: cn(
23140
- "relative flex w-full flex-row items-center justify-between rounded-[var(--radius-lg)] border px-4 py-3 text-left hover:bg-accent outline-none focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 peer-data-state-checked:border-primary peer-data-state-checked:bg-primary/5 data-state-checked:border-primary data-state-checked:bg-primary/5",
23893
+ // Base UI radio emits `data-checked` / `data-unchecked`; the Radix-era
23894
+ // `data-state-checked:` selectors never matched.
23895
+ "relative flex w-full flex-row items-center justify-between rounded-[var(--radius-lg)] border px-4 py-3 text-left hover:bg-accent outline-none focus-visible:outline-none data-[checked]:border-primary data-[checked]:bg-primary/5",
23141
23896
  className
23142
23897
  ),
23143
23898
  ...props,
@@ -23172,8 +23927,8 @@ function ReactionChip({
23172
23927
  const isActive = selected === em;
23173
23928
  const btnClassName = cn(
23174
23929
  "rounded-full p-1 text-base leading-none",
23175
- "transition-transform duration-150 ease-out",
23176
- "hover:scale-110 focus-visible:scale-110 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/40",
23930
+ "transition-transform duration-micro ease-out",
23931
+ "hover:scale-110 focus-visible:scale-110 focus-visible:outline-none",
23177
23932
  isActive && "bg-muted ring-1 ring-border dark:bg-muted/70"
23178
23933
  );
23179
23934
  const handleMouseDown = (evt) => evt.preventDefault();
@@ -23222,7 +23977,7 @@ function ReactionBadge({ emoji, count, bump = false, className }) {
23222
23977
  className: cn(
23223
23978
  "inline-flex items-center gap-1 rounded-full",
23224
23979
  "bg-muted px-2 py-0.5 text-xs text-foreground/80 ring-1 ring-border",
23225
- "transition-transform duration-200 ease-out",
23980
+ "transition-transform duration-micro ease-out",
23226
23981
  bump ? "scale-110" : "scale-100",
23227
23982
  className
23228
23983
  ),
@@ -23270,7 +24025,7 @@ function MessageWithReactions({
23270
24025
  className
23271
24026
  ),
23272
24027
  children: [
23273
- children || /* @__PURE__ */ jsx("p", { className: "text-pretty", children: text }),
24028
+ children ?? (text ? /* @__PURE__ */ jsx("p", { className: "text-pretty", children: text }) : null),
23274
24029
  activeReactions.length > 0 && /* @__PURE__ */ jsx(
23275
24030
  "div",
23276
24031
  {
@@ -23286,7 +24041,7 @@ function MessageWithReactions({
23286
24041
  className: cn(
23287
24042
  "pointer-events-none absolute -top-3 right-0 z-10",
23288
24043
  "translate-y-1 opacity-0",
23289
- "transition-[background-color,border-color,box-shadow,color,opacity,transform] duration-200 ease-out",
24044
+ "transition-[background-color,border-color,box-shadow,color,opacity,transform] duration-micro ease-out",
23290
24045
  "group-hover:pointer-events-auto group-hover:translate-y-0 group-hover:opacity-100",
23291
24046
  "focus-within:pointer-events-auto focus-within:translate-y-0 focus-within:opacity-100"
23292
24047
  ),
@@ -23466,7 +24221,7 @@ var ResizableHandle = ({
23466
24221
  Separator$2,
23467
24222
  {
23468
24223
  className: cn(
23469
- "relative flex w-px items-center justify-center bg-border after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-1 data-[panel-group-direction=vertical]:h-px data-[panel-group-direction=vertical]:w-full data-[panel-group-direction=vertical]:after:left-0 data-[panel-group-direction=vertical]:after:h-1 data-[panel-group-direction=vertical]:after:w-full data-[panel-group-direction=vertical]:after:-translate-y-1/2 data-[panel-group-direction=vertical]:after:translate-x-0 [&[data-panel-group-direction=vertical]>div]:rotate-90",
24224
+ "relative flex w-px items-center justify-center bg-border after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:outline-none data-[panel-group-direction=vertical]:h-px data-[panel-group-direction=vertical]:w-full data-[panel-group-direction=vertical]:after:left-0 data-[panel-group-direction=vertical]:after:h-1 data-[panel-group-direction=vertical]:after:w-full data-[panel-group-direction=vertical]:after:-translate-y-1/2 data-[panel-group-direction=vertical]:after:translate-x-0 [&[data-panel-group-direction=vertical]>div]:rotate-90",
23470
24225
  className
23471
24226
  ),
23472
24227
  ...props,
@@ -24014,7 +24769,7 @@ function ScrollerButton({
24014
24769
  "absolute z-20 grid size-[var(--scroller-button-size)] place-items-center rounded-[var(--scroller-button-radius)]",
24015
24770
  "border border-border bg-background text-muted-foreground shadow-[var(--scroller-button-shadow)]",
24016
24771
  "transition-[background-color,border-color,color,opacity,transform] duration-[var(--scroller-duration)] ease-[var(--scroller-easing)]",
24017
- "hover:border-ring hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
24772
+ "hover:border-ring hover:text-foreground focus-visible:outline-none",
24018
24773
  "disabled:pointer-events-none disabled:opacity-0 motion-reduce:transition-none",
24019
24774
  axis === "x" && direction === "previous" && "left-[var(--scroller-button-offset)] top-1/2 -translate-y-1/2",
24020
24775
  axis === "x" && direction === "next" && "right-[var(--scroller-button-offset)] top-1/2 -translate-y-1/2",
@@ -24109,7 +24864,7 @@ function Scroller({
24109
24864
  onScroll: updateEdgeState,
24110
24865
  className: cn(
24111
24866
  "h-[var(--scroller-height)] rounded-[var(--scroller-radius)] outline-none",
24112
- "scroll-smooth overscroll-contain focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 motion-reduce:scroll-auto",
24867
+ "scroll-smooth overscroll-contain motion-reduce:scroll-auto",
24113
24868
  resolveScrollClasses(overflow)
24114
24869
  ),
24115
24870
  children: /* @__PURE__ */ jsx(
@@ -24236,7 +24991,7 @@ function SearchTool({
24236
24991
  {
24237
24992
  "aria-hidden": "true",
24238
24993
  className: cn(
24239
- "size-3 shrink-0 text-muted-foreground transition-transform duration-150 ease-out",
24994
+ "size-3 shrink-0 text-muted-foreground transition-transform duration-flow ease-out",
24240
24995
  isOpen ? "rotate-90" : "rotate-0"
24241
24996
  )
24242
24997
  }
@@ -24288,7 +25043,7 @@ function getSheetStyle(style) {
24288
25043
  "--sheet-shadow": sheetTokens.surface.shadow,
24289
25044
  "--sheet-duration": `${overlayTokens.motion.duration}ms`,
24290
25045
  "--sheet-easing": overlayTokens.motion.easing,
24291
- ...style
25046
+ ...asPlainStyle(style)
24292
25047
  };
24293
25048
  }
24294
25049
  function Sheet({ modal = "trap-focus", disablePointerDismissal = true, ...props }) {
@@ -24660,7 +25415,7 @@ var ShowMore = ({
24660
25415
  "h-[var(--show-more-trigger-height)] rounded-[var(--show-more-radius)] px-[var(--show-more-trigger-padding-x)]",
24661
25416
  "transition-[background-color,border-color,color] duration-[var(--show-more-duration)] ease-[var(--show-more-easing)]",
24662
25417
  "hover:border-border hover:bg-muted",
24663
- "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
25418
+ "focus-visible:outline-none",
24664
25419
  "disabled:pointer-events-none disabled:opacity-50",
24665
25420
  "motion-reduce:transition-none",
24666
25421
  buttonClassName
@@ -24679,106 +25434,20 @@ var ShowMore = ({
24679
25434
  }
24680
25435
  )
24681
25436
  ]
24682
- }
24683
- ) }),
24684
- !noBorder && /* @__PURE__ */ jsx(
24685
- "div",
24686
- {
24687
- "aria-hidden": "true",
24688
- className: cn("h-px flex-1 bg-[var(--neutral-7)]", dividerClassName)
24689
- }
24690
- )
24691
- ]
24692
- }
24693
- );
24694
- };
24695
- ShowMore.displayName = "ShowMore";
24696
- function asCssLength(value) {
24697
- if (value === void 0) return void 0;
24698
- return typeof value === "number" ? `${value}px` : value;
24699
- }
24700
- function shapeRadiusClass(props) {
24701
- if (props.pill) return "rounded-full";
24702
- if (props.squared) return "rounded-[var(--radius-sm)]";
24703
- return "rounded-[var(--radius-md)]";
24704
- }
24705
- function Skeleton(props) {
24706
- const {
24707
- width,
24708
- height,
24709
- boxHeight,
24710
- pill: _pill,
24711
- rounded: _rounded,
24712
- squared: _squared,
24713
- animated: animatedProp,
24714
- show: showProp,
24715
- children,
24716
- isLoaded,
24717
- disableAnimation,
24718
- className,
24719
- style,
24720
- ...rest
24721
- } = props;
24722
- const show = showProp !== void 0 ? showProp : !isLoaded;
24723
- const animated = animatedProp !== void 0 ? animatedProp : !disableAnimation;
24724
- if (!show && children) {
24725
- return /* @__PURE__ */ jsx(Fragment, { children });
24726
- }
24727
- const sizeStyle = {
24728
- width: asCssLength(width),
24729
- height: asCssLength(height),
24730
- minHeight: asCssLength(boxHeight)
24731
- };
24732
- return /* @__PURE__ */ jsx(
24733
- "div",
24734
- {
24735
- "aria-busy": "true",
24736
- "aria-hidden": "true",
24737
- "data-loaded": !show,
24738
- className: cn(
24739
- "bg-muted",
24740
- shapeRadiusClass(props),
24741
- animated && "animate-pulse motion-reduce:animate-none",
24742
- className
24743
- ),
24744
- style: { ...sizeStyle, ...style },
24745
- ...rest,
24746
- children: children && // biome-ignore lint/a11y/useSemanticElements: this <div> isn't a landmark; `inert` is the relevant a11y signal.
24747
- /* @__PURE__ */ jsx("div", { className: "invisible", inert: true, "aria-hidden": "true", children })
25437
+ }
25438
+ ) }),
25439
+ !noBorder && /* @__PURE__ */ jsx(
25440
+ "div",
25441
+ {
25442
+ "aria-hidden": "true",
25443
+ className: cn("h-px flex-1 bg-[var(--neutral-7)]", dividerClassName)
25444
+ }
25445
+ )
25446
+ ]
24748
25447
  }
24749
25448
  );
24750
- }
24751
- function SkeletonText({
24752
- lines = 3,
24753
- className,
24754
- ...props
24755
- }) {
24756
- return /* @__PURE__ */ jsx("div", { className: cn("space-y-2", className), ...props, children: Array.from({ length: lines }).map((_, i) => /* @__PURE__ */ jsx(
24757
- Skeleton,
24758
- {
24759
- height: 16,
24760
- className: cn(i === lines - 1 ? "w-[60%]" : i === 0 ? "w-full" : "w-[80%]")
24761
- },
24762
- i
24763
- )) });
24764
- }
24765
- function SkeletonAvatar({
24766
- size = "md",
24767
- className,
24768
- ...props
24769
- }) {
24770
- const px = size === "sm" ? 32 : size === "lg" ? 48 : 40;
24771
- return /* @__PURE__ */ jsx(Skeleton, { pill: true, width: px, height: px, className, ...props });
24772
- }
24773
- function SkeletonCard({ className, ...props }) {
24774
- return /* @__PURE__ */ jsxs("div", { className: cn("space-y-4 p-4", className), ...props, children: [
24775
- /* @__PURE__ */ jsx(Skeleton, { height: 128, className: "w-full" }),
24776
- /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
24777
- /* @__PURE__ */ jsx(Skeleton, { height: 16, className: "w-3/4" }),
24778
- /* @__PURE__ */ jsx(Skeleton, { height: 16, className: "w-1/2" })
24779
- ] })
24780
- ] });
24781
- }
25449
+ };
25450
+ ShowMore.displayName = "ShowMore";
24782
25451
  function isArraySliderProps(props) {
24783
25452
  return props.valueMode === "array" || Array.isArray(props.value) || Array.isArray(props.defaultValue);
24784
25453
  }
@@ -24813,7 +25482,7 @@ function getSliderStyle(progress, style) {
24813
25482
  "--slider-duration": `${sliderTokens.motion.duration}ms`,
24814
25483
  "--slider-easing": sliderTokens.motion.easing,
24815
25484
  "--slider-progress": `${progress}%`,
24816
- ...style
25485
+ ...asPlainStyle(style)
24817
25486
  };
24818
25487
  }
24819
25488
  function formatSliderValue(value, unit) {
@@ -24929,7 +25598,7 @@ var Slider = ({
24929
25598
  onBlur,
24930
25599
  className: cn(
24931
25600
  "h-[var(--slider-height)] w-full cursor-pointer appearance-none rounded-[var(--slider-radius)] bg-[linear-gradient(to_right,var(--slider-track-fill)_0,var(--slider-track-fill)_var(--slider-progress),var(--slider-track-background)_var(--slider-progress),var(--slider-track-background)_100%)] bg-[length:100%_var(--slider-track-height)] bg-center bg-no-repeat outline-none",
24932
- "focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",
25601
+ "disabled:cursor-not-allowed disabled:opacity-50",
24933
25602
  "[&::-moz-range-thumb]:size-[var(--slider-thumb-size)] [&::-moz-range-thumb]:appearance-none [&::-moz-range-thumb]:rounded-full [&::-moz-range-thumb]:border [&::-moz-range-thumb]:border-border [&::-moz-range-thumb]:bg-[var(--slider-thumb-background)] [&::-moz-range-thumb]:shadow-[var(--slider-thumb-shadow)]",
24934
25603
  "[&::-webkit-slider-thumb]:size-[var(--slider-thumb-size)] [&::-webkit-slider-thumb]:appearance-none [&::-webkit-slider-thumb]:rounded-full [&::-webkit-slider-thumb]:border [&::-webkit-slider-thumb]:border-border [&::-webkit-slider-thumb]:bg-[var(--slider-thumb-background)] [&::-webkit-slider-thumb]:shadow-[var(--slider-thumb-shadow)]",
24935
25604
  "[&::-moz-range-thumb]:transition-transform [&::-moz-range-thumb]:duration-[var(--slider-duration)] [&::-moz-range-thumb]:ease-[var(--slider-easing)]",
@@ -24962,7 +25631,7 @@ var SliderNumberFlow = ({
24962
25631
  /* @__PURE__ */ jsx(
24963
25632
  Slider$1.Thumb,
24964
25633
  {
24965
- className: "relative block h-5 w-5 rounded-full border border-border bg-background shadow-xs ring-1 ring-border/40 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",
25634
+ className: "relative block h-5 w-5 rounded-full border border-border bg-background shadow-xs ring-1 ring-border/40 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50",
24966
25635
  "aria-label": "Slider Value",
24967
25636
  children: (Array.isArray(value) ? value[0] : value) != null && /* @__PURE__ */ jsx(
24968
25637
  NumberFlow,
@@ -25406,10 +26075,10 @@ function StatusBadge2({
25406
26075
  ...props
25407
26076
  }) {
25408
26077
  const iconColorClasses = {
25409
- success: "text-emerald-600 dark:text-emerald-500",
25410
- error: "text-red-600 dark:text-red-500",
25411
- warning: "text-amber-600 dark:text-amber-500",
25412
- info: "text-blue-600 dark:text-blue-500",
26078
+ success: "text-[hsl(var(--success-strong))]",
26079
+ error: "text-[hsl(var(--destructive-strong))]",
26080
+ warning: "text-[hsl(var(--warning-strong))]",
26081
+ info: "text-info",
25413
26082
  default: "text-muted-foreground"
25414
26083
  };
25415
26084
  return /* @__PURE__ */ jsxs("span", { className: cn(statusBadgeVariants({ status }), className), ...props, children: [
@@ -25614,9 +26283,9 @@ function Stepper({
25614
26283
  "relative flex items-center justify-center rounded-full border-2 transition-[background-color,border-color,box-shadow,color,opacity,transform]",
25615
26284
  config.icon,
25616
26285
  status === "completed" && "border-primary bg-primary text-white",
25617
- status === "current" && "border-primary bg-white text-primary dark:bg-slate-900",
25618
- status === "pending" && "border-slate-300 bg-white text-slate-400 dark:border-slate-600 dark:bg-slate-900",
25619
- status === "error" && "border-red-500 bg-red-500 text-white",
26286
+ status === "current" && "border-primary bg-background text-primary",
26287
+ status === "pending" && "border-neutral-6 bg-background text-muted-foreground",
26288
+ status === "error" && "border-destructive bg-destructive text-destructive-foreground",
25620
26289
  clickable && "cursor-pointer hover:scale-105"
25621
26290
  ),
25622
26291
  children: status === "completed" ? /* @__PURE__ */ jsx(Check, { className: "h-4 w-4" }) : /* @__PURE__ */ jsx("span", { className: cn("font-medium", config.text), children: index + 1 })
@@ -25628,7 +26297,7 @@ function Stepper({
25628
26297
  className: cn(
25629
26298
  "transition-colors",
25630
26299
  orientation === "horizontal" ? cn(config.connector, "mx-2") : "my-2 h-8 w-0.5",
25631
- index < currentStep ? "bg-primary" : "bg-slate-200 dark:bg-slate-700"
26300
+ index < currentStep ? "bg-primary" : "bg-neutral-4"
25632
26301
  )
25633
26302
  }
25634
26303
  )
@@ -25643,8 +26312,8 @@ function Stepper({
25643
26312
  "font-medium",
25644
26313
  config.text,
25645
26314
  status === "completed" && "text-primary",
25646
- status === "current" && "text-slate-900 dark:text-slate-100",
25647
- status === "pending" && "text-slate-400 dark:text-slate-500"
26315
+ status === "current" && "text-foreground",
26316
+ status === "pending" && "text-muted-foreground"
25648
26317
  ),
25649
26318
  children: [
25650
26319
  step.title,
@@ -25745,7 +26414,7 @@ function ProgressStepper({
25745
26414
  }) {
25746
26415
  const progress = (currentStep + 1) / totalSteps * 100;
25747
26416
  return /* @__PURE__ */ jsxs("div", { className: cn("space-y-2", className), children: [
25748
- /* @__PURE__ */ jsx("div", { className: "h-2 w-full overflow-hidden rounded-full bg-slate-200 dark:bg-slate-700", children: /* @__PURE__ */ jsx(
26417
+ /* @__PURE__ */ jsx("div", { className: "h-2 w-full overflow-hidden rounded-full bg-neutral-4", children: /* @__PURE__ */ jsx(
25749
26418
  "div",
25750
26419
  {
25751
26420
  className: "h-full rounded-full bg-primary transition-[background-color,border-color,box-shadow,color,opacity,transform] duration-300",
@@ -25818,7 +26487,7 @@ function getSwitchStyle(size, style) {
25818
26487
  "--switch-control-radius": `${switchTokens.controlRadius}px`,
25819
26488
  "--switch-duration": `${switchTokens.motion.duration}ms`,
25820
26489
  "--switch-easing": switchTokens.motion.easing,
25821
- ...style
26490
+ ...asPlainStyle(style)
25822
26491
  };
25823
26492
  }
25824
26493
  function getSwitchControlStyle(size, style) {
@@ -25829,7 +26498,7 @@ function getSwitchControlStyle(size, style) {
25829
26498
  "--switch-control-padding-x": `${sizeTokens.paddingX}px`,
25830
26499
  "--switch-icon-size": `${sizeTokens.iconSize}px`,
25831
26500
  "--switch-font-size": `${sizeTokens.fontSize}px`,
25832
- ...style
26501
+ ...asPlainStyle(style)
25833
26502
  };
25834
26503
  }
25835
26504
  var SwitchRoot = function SwitchRoot2({
@@ -25939,7 +26608,7 @@ var SwitchControl = function SwitchControl2({
25939
26608
  "inline-flex h-full w-full items-center justify-center gap-1.5 whitespace-nowrap rounded-[var(--switch-control-radius)] px-[var(--switch-control-padding-x)] font-medium text-[length:var(--switch-font-size)]",
25940
26609
  "text-muted-foreground transition-[background-color,box-shadow,color] duration-[var(--switch-duration)] ease-[var(--switch-easing)]",
25941
26610
  "peer-checked:bg-background peer-checked:text-foreground peer-checked:shadow-sm",
25942
- "peer-focus-visible:ring-2 peer-focus-visible:ring-ring peer-focus-visible:ring-offset-2 peer-focus-visible:ring-offset-background",
26611
+ "",
25943
26612
  "peer-disabled:pointer-events-none peer-disabled:text-muted-foreground/60",
25944
26613
  "[&_svg]:size-[var(--switch-icon-size)]"
25945
26614
  ),
@@ -25958,177 +26627,6 @@ SwitchControl.displayName = "Switch.Control";
25958
26627
  var Switch = Object.assign(SwitchRoot, {
25959
26628
  Control: SwitchControl
25960
26629
  });
25961
- function createTableVars(style) {
25962
- return {
25963
- "--table-min-width": `${tableTokens.wrapper.minWidth}px`,
25964
- "--table-padding": `${tableTokens.wrapper.padding}px`,
25965
- "--table-radius": `${tableTokens.wrapper.radius}px`,
25966
- "--table-row-radius": `${tableTokens.row.radius}px`,
25967
- "--table-cell-padding-x": `${tableTokens.cell.paddingX}px`,
25968
- "--table-cell-padding-y": `${tableTokens.cell.paddingY}px`,
25969
- "--table-header-height": `${tableTokens.header.height}px`,
25970
- "--table-font-size": `${tableTokens.typography.size}px`,
25971
- "--table-heading-weight": tableTokens.typography.headingWeight,
25972
- "--table-body-weight": tableTokens.typography.bodyWeight,
25973
- "--table-body-spacer": `${tableTokens.spacer.bodyTop}px`,
25974
- "--table-motion-duration": `${tableTokens.motion.duration}ms`,
25975
- "--table-motion-easing": tableTokens.motion.easing,
25976
- ...style
25977
- };
25978
- }
25979
- var TableRoot = ({
25980
- className,
25981
- wrapperClassName,
25982
- wrapperStyle,
25983
- style,
25984
- ref,
25985
- ...props
25986
- }) => /* @__PURE__ */ jsx(
25987
- "div",
25988
- {
25989
- className: cn(
25990
- "relative w-full min-w-[var(--table-min-width)] overflow-auto rounded-[var(--table-radius)] border border-border bg-card p-[var(--table-padding)]",
25991
- wrapperClassName
25992
- ),
25993
- style: createTableVars(wrapperStyle),
25994
- children: /* @__PURE__ */ jsx(
25995
- "table",
25996
- {
25997
- ref,
25998
- className: cn(
25999
- "w-full border-collapse caption-bottom text-[length:var(--table-font-size)] font-[var(--table-body-weight)] text-foreground",
26000
- className
26001
- ),
26002
- style,
26003
- ...props
26004
- }
26005
- )
26006
- }
26007
- );
26008
- TableRoot.displayName = "Table";
26009
- var TableColgroup = ({
26010
- className,
26011
- ref,
26012
- ...props
26013
- }) => /* @__PURE__ */ jsx("colgroup", { ref, className, ...props });
26014
- TableColgroup.displayName = "TableColgroup";
26015
- var TableCol = ({
26016
- className,
26017
- ref,
26018
- ...props
26019
- }) => /* @__PURE__ */ jsx("col", { ref, className, ...props });
26020
- TableCol.displayName = "TableCol";
26021
- var TableHeader = ({
26022
- className,
26023
- ref,
26024
- ...props
26025
- }) => /* @__PURE__ */ jsx("thead", { ref, className: cn("border-b border-border", className), ...props });
26026
- TableHeader.displayName = "TableHeader";
26027
- var TableBody = ({
26028
- className,
26029
- striped = false,
26030
- bordered = false,
26031
- interactive = false,
26032
- virtualize = false,
26033
- ref,
26034
- ...props
26035
- }) => /* @__PURE__ */ jsxs(Fragment, { children: [
26036
- /* @__PURE__ */ jsx("tbody", { "aria-hidden": "true", className: "table-row h-[var(--table-body-spacer)]" }),
26037
- /* @__PURE__ */ jsx(
26038
- "tbody",
26039
- {
26040
- ref,
26041
- "data-virtualized": virtualize ? "" : void 0,
26042
- className: cn(
26043
- "[&_tr:last-child]:border-b-0",
26044
- striped && "[&_tr:where(:nth-child(odd))]:bg-muted/45",
26045
- bordered && "[&_tr]:border-b [&_tr]:border-border",
26046
- interactive && "[&_tr]:cursor-default [&_tr:hover]:bg-muted/70 [&_tr:focus-within]:bg-muted/70",
26047
- className
26048
- ),
26049
- ...props
26050
- }
26051
- )
26052
- ] });
26053
- TableBody.displayName = "TableBody";
26054
- var TableFooter = ({
26055
- className,
26056
- ref,
26057
- ...props
26058
- }) => /* @__PURE__ */ jsx("tfoot", { ref, className: cn("border-t border-border", className), ...props });
26059
- TableFooter.displayName = "TableFooter";
26060
- var TableRow = ({
26061
- className,
26062
- ref,
26063
- ...props
26064
- }) => /* @__PURE__ */ jsx(
26065
- "tr",
26066
- {
26067
- ref,
26068
- className: cn(
26069
- "[&_td:first-child]:rounded-l-[var(--table-row-radius)] [&_td:last-child]:rounded-r-[var(--table-row-radius)] transition-colors duration-[var(--table-motion-duration)] ease-[var(--table-motion-easing)] motion-reduce:transition-none",
26070
- className
26071
- ),
26072
- ...props
26073
- }
26074
- );
26075
- TableRow.displayName = "TableRow";
26076
- var TableHead = ({
26077
- className,
26078
- numeric = false,
26079
- scope = "col",
26080
- ref,
26081
- ...props
26082
- }) => /* @__PURE__ */ jsx(
26083
- "th",
26084
- {
26085
- ref,
26086
- scope,
26087
- className: cn(
26088
- "h-[var(--table-header-height)] px-[var(--table-cell-padding-x)] text-left align-middle font-[var(--table-heading-weight)] text-muted-foreground",
26089
- "last:text-right [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-px",
26090
- numeric && "text-right font-mono tabular-nums",
26091
- className
26092
- ),
26093
- ...props
26094
- }
26095
- );
26096
- TableHead.displayName = "TableHead";
26097
- var TableCell = ({
26098
- className,
26099
- numeric = false,
26100
- ref,
26101
- ...props
26102
- }) => /* @__PURE__ */ jsx(
26103
- "td",
26104
- {
26105
- ref,
26106
- className: cn(
26107
- "px-[var(--table-cell-padding-x)] py-[var(--table-cell-padding-y)] align-middle",
26108
- "last:text-right [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-px",
26109
- numeric && "text-right font-mono tabular-nums",
26110
- className
26111
- ),
26112
- ...props
26113
- }
26114
- );
26115
- TableCell.displayName = "TableCell";
26116
- var TableCaption = ({
26117
- className,
26118
- ref,
26119
- ...props
26120
- }) => /* @__PURE__ */ jsx("caption", { ref, className: cn("mt-4 text-sm text-muted-foreground", className), ...props });
26121
- TableCaption.displayName = "TableCaption";
26122
- var Table = TableRoot;
26123
- Table.Body = TableBody;
26124
- Table.Caption = TableCaption;
26125
- Table.Cell = TableCell;
26126
- Table.Col = TableCol;
26127
- Table.Colgroup = TableColgroup;
26128
- Table.Footer = TableFooter;
26129
- Table.Head = TableHead;
26130
- Table.Header = TableHeader;
26131
- Table.Row = TableRow;
26132
26630
  var BaseRoot = withHtmlProps(Tabs$1.Root);
26133
26631
  var BaseList = withHtmlProps(Tabs$1.List);
26134
26632
  var BaseTrigger = withHtmlProps(Tabs$1.Tab);
@@ -26173,7 +26671,7 @@ var tabsListVariants = cva(
26173
26671
  }
26174
26672
  );
26175
26673
  var tabsTriggerVariants = cva(
26176
- "relative inline-flex h-[calc(var(--tabs-height)-var(--tabs-padding)*2)] min-w-[var(--tabs-trigger-min-width)] shrink-0 cursor-pointer items-center justify-center gap-[var(--tabs-trigger-gap)] whitespace-nowrap rounded-[var(--tabs-trigger-radius)] px-[var(--tabs-trigger-padding-x)] font-medium text-[length:var(--tabs-font-size)] outline-none transition-[background-color,border-color,box-shadow,color,opacity] duration-[var(--tabs-duration)] ease-[var(--tabs-easing)] focus-visible:ring-[length:var(--tabs-focus-ring-width)] focus-visible:ring-ring focus-visible:ring-offset-[length:var(--tabs-focus-ring-offset)] focus-visible:ring-offset-background disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 data-[disabled]:pointer-events-none data-[disabled]:cursor-not-allowed data-[disabled]:opacity-50 [&_svg]:size-[var(--tabs-icon-size)] [&_svg]:shrink-0",
26674
+ "relative inline-flex h-[calc(var(--tabs-height)-var(--tabs-padding)*2)] min-w-[var(--tabs-trigger-min-width)] shrink-0 cursor-pointer items-center justify-center gap-[var(--tabs-trigger-gap)] whitespace-nowrap rounded-[var(--tabs-trigger-radius)] px-[var(--tabs-trigger-padding-x)] font-medium text-[length:var(--tabs-font-size)] outline-none transition-[background-color,border-color,box-shadow,color,opacity] duration-[var(--tabs-duration)] ease-[var(--tabs-easing)] disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 data-[disabled]:pointer-events-none data-[disabled]:cursor-not-allowed data-[disabled]:opacity-50 [&_svg]:size-[var(--tabs-icon-size)] [&_svg]:shrink-0",
26177
26675
  {
26178
26676
  variants: {
26179
26677
  variant: {
@@ -26210,7 +26708,7 @@ var tabsIndicatorVariants = cva(
26210
26708
  }
26211
26709
  );
26212
26710
  var tabsContentVariants = cva(
26213
- "mt-[var(--tabs-panel-gap)] text-[length:var(--tabs-font-size)] text-muted-foreground focus-visible:outline-none focus-visible:ring-[length:var(--tabs-focus-ring-width)] focus-visible:ring-ring focus-visible:ring-offset-[length:var(--tabs-focus-ring-offset)] focus-visible:ring-offset-background",
26711
+ "mt-[var(--tabs-panel-gap)] text-[length:var(--tabs-font-size)] text-muted-foreground focus-visible:outline-none",
26214
26712
  {
26215
26713
  variants: {
26216
26714
  variant: {
@@ -26252,7 +26750,7 @@ function getTabsStyle(size, style) {
26252
26750
  "--tabs-badge-font-size": `${tabsTokens.badgeFontSize}px`,
26253
26751
  "--tabs-duration": `${tabsTokens.motion.duration}ms`,
26254
26752
  "--tabs-easing": tabsTokens.motion.easing,
26255
- ...style
26753
+ ...asPlainStyle(style)
26256
26754
  };
26257
26755
  }
26258
26756
  function getFirstEnabledValue(tabs) {
@@ -26787,7 +27285,7 @@ function getThemeSwitcherStyle(size, style) {
26787
27285
  "--theme-switcher-focus-ring-offset": `${themeSwitcherTokens.focusRingOffset}px`,
26788
27286
  "--theme-switcher-duration": `${themeSwitcherTokens.motion.duration}ms`,
26789
27287
  "--theme-switcher-easing": themeSwitcherTokens.motion.easing,
26790
- ...style
27288
+ ...asPlainStyle(style)
26791
27289
  };
26792
27290
  }
26793
27291
  function isThemeSwitcherValue(value) {
@@ -26881,7 +27379,7 @@ function getThemeToggleStyle(size, style) {
26881
27379
  "--theme-toggle-radius": `${token.radius}px`,
26882
27380
  "--theme-toggle-duration": `${themeToggleTokens.motion.duration}ms`,
26883
27381
  "--theme-toggle-easing": themeToggleTokens.motion.easing,
26884
- ...style
27382
+ ...asPlainStyle(style)
26885
27383
  };
26886
27384
  }
26887
27385
  function readDocumentTheme() {
@@ -27006,7 +27504,6 @@ var ThemeToggle = ({
27006
27504
  "inline-flex size-[var(--theme-toggle-size)] shrink-0 items-center justify-center rounded-[var(--theme-toggle-radius)] p-[var(--theme-toggle-padding)] text-foreground",
27007
27505
  "transition-[background-color,color,box-shadow] duration-[var(--theme-toggle-duration)] ease-[var(--theme-toggle-easing)]",
27008
27506
  "hover:bg-accent hover:text-accent-foreground",
27009
- "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
27010
27507
  "disabled:pointer-events-none disabled:opacity-50",
27011
27508
  "motion-reduce:transition-none",
27012
27509
  className
@@ -27331,7 +27828,7 @@ function getToggleStyle(size, color, style) {
27331
27828
  "--toggle-thumb": colorTokens.thumb,
27332
27829
  "--toggle-icon-on": colorTokens.iconOn,
27333
27830
  "--toggle-icon-off": colorTokens.iconOff,
27334
- ...style
27831
+ ...asPlainStyle(style)
27335
27832
  };
27336
27833
  }
27337
27834
  var Toggle = ({
@@ -27405,7 +27902,7 @@ var Toggle = ({
27405
27902
  "border-[var(--toggle-track-border)] transition-[background-color,border-color] duration-[var(--toggle-duration)] ease-[var(--toggle-easing)]",
27406
27903
  "peer-checked:bg-[var(--toggle-track-on)]",
27407
27904
  "peer-checked:[&>span]:translate-x-[var(--toggle-thumb-translate)] peer-checked:[&>span]:text-[var(--toggle-icon-on)]",
27408
- "peer-focus-visible:ring-2 peer-focus-visible:ring-ring peer-focus-visible:ring-offset-2 peer-focus-visible:ring-offset-background",
27905
+ "",
27409
27906
  "peer-disabled:cursor-not-allowed peer-disabled:opacity-60",
27410
27907
  "motion-reduce:transition-none"
27411
27908
  ),
@@ -27458,7 +27955,10 @@ var toggleGroupVariants = cva(
27458
27955
  variants: {
27459
27956
  variant: {
27460
27957
  default: "",
27461
- outline: "bg-transparent border"
27958
+ outline: "bg-transparent border",
27959
+ // Segmented pill look — theme-toggle / mode-pills style. Rounded-full
27960
+ // track with a rounded-full active segment (see toggleGroupItemVariants).
27961
+ pill: "rounded-full bg-neutral-2 p-0.5"
27462
27962
  }
27463
27963
  },
27464
27964
  defaultVariants: {
@@ -27467,12 +27967,13 @@ var toggleGroupVariants = cva(
27467
27967
  }
27468
27968
  );
27469
27969
  var toggleGroupItemVariants = cva(
27470
- "inline-flex items-center justify-center whitespace-nowrap rounded-[var(--radius-md)] px-3 py-1.5 text-sm font-medium ring-offset-background transition-[background-color,box-shadow,color,opacity] duration-flow ease-out motion-reduce:transition-none focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-background data-[state=on]:text-foreground data-[state=on]:shadow-sm",
27970
+ "inline-flex items-center justify-center gap-1.5 whitespace-nowrap rounded-[var(--radius-md)] px-3 py-1.5 text-sm font-medium ring-offset-background transition-[background-color,box-shadow,color,opacity] duration-flow ease-out motion-reduce:transition-none disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-background data-[state=on]:text-foreground data-[state=on]:shadow-sm",
27471
27971
  {
27472
27972
  variants: {
27473
27973
  variant: {
27474
27974
  default: "",
27475
- outline: "border border-input bg-transparent hover:bg-accent hover:text-accent-foreground data-[state=on]:bg-accent data-[state=on]:text-accent-foreground"
27975
+ outline: "border border-input bg-transparent hover:bg-accent hover:text-accent-foreground data-[state=on]:bg-accent data-[state=on]:text-accent-foreground",
27976
+ pill: "rounded-full text-neutral-11 hover:text-neutral-12 data-[state=on]:bg-primary/5 data-[state=on]:text-primary data-[state=on]:shadow-none"
27476
27977
  },
27477
27978
  size: {
27478
27979
  default: "h-9 px-3",
@@ -27530,7 +28031,17 @@ var ToggleGroup = ({
27530
28031
  }
27531
28032
  onValueChange?.(newValue);
27532
28033
  }
27533
- return /* @__PURE__ */ jsx("div", { ref, className: cn(toggleGroupVariants({ variant }), className), ...props, children: /* @__PURE__ */ jsx(ToggleGroupTypeContext.Provider, { value: type, children: /* @__PURE__ */ jsx(ToggleGroupValueContext.Provider, { value, children: /* @__PURE__ */ jsx(ToggleGroupChangeContext.Provider, { value: changeToggleGroupValue, children: /* @__PURE__ */ jsx(ToggleGroupDisabledContext.Provider, { value: disabled, children: /* @__PURE__ */ jsx(ToggleGroupVariantContext.Provider, { value: variant, children: /* @__PURE__ */ jsx(ToggleGroupSizeContext.Provider, { value: size, children }) }) }) }) }) }) });
28034
+ return /* @__PURE__ */ jsx(
28035
+ "div",
28036
+ {
28037
+ ref,
28038
+ role: type === "single" ? "radiogroup" : "group",
28039
+ "data-toggle-group-root": "",
28040
+ className: cn(toggleGroupVariants({ variant }), className),
28041
+ ...props,
28042
+ children: /* @__PURE__ */ jsx(ToggleGroupTypeContext.Provider, { value: type, children: /* @__PURE__ */ jsx(ToggleGroupValueContext.Provider, { value, children: /* @__PURE__ */ jsx(ToggleGroupChangeContext.Provider, { value: changeToggleGroupValue, children: /* @__PURE__ */ jsx(ToggleGroupDisabledContext.Provider, { value: disabled, children: /* @__PURE__ */ jsx(ToggleGroupVariantContext.Provider, { value: variant, children: /* @__PURE__ */ jsx(ToggleGroupSizeContext.Provider, { value: size, children }) }) }) }) }) })
28043
+ }
28044
+ );
27534
28045
  };
27535
28046
  ToggleGroup.displayName = "ToggleGroup";
27536
28047
  var ToggleGroupItem = ({
@@ -27548,7 +28059,8 @@ var ToggleGroupItem = ({
27548
28059
  function toggleItemSelection(event) {
27549
28060
  if (isDisabled) return;
27550
28061
  if (context.type === "single") {
27551
- context.onValueChange(isSelected ? "" : value);
28062
+ if (isSelected) return;
28063
+ context.onValueChange(value);
27552
28064
  } else {
27553
28065
  const currentArray = Array.isArray(context.value) ? context.value : [];
27554
28066
  context.onValueChange(
@@ -27557,26 +28069,75 @@ var ToggleGroupItem = ({
27557
28069
  }
27558
28070
  props.onClick?.(event);
27559
28071
  }
27560
- return /* @__PURE__ */ jsx(
27561
- "button",
27562
- {
27563
- ref,
27564
- type: "button",
27565
- disabled: isDisabled,
27566
- "data-state": isSelected ? "on" : "off",
27567
- "aria-pressed": isSelected,
27568
- className: cn(
27569
- toggleGroupItemVariants({
27570
- variant: variant ?? context.variant,
27571
- size: size ?? context.size
27572
- }),
27573
- className,
27574
- "focus-visible:z-10"
27575
- ),
27576
- onClick: toggleItemSelection,
27577
- ...props,
27578
- children
28072
+ function handleItemKeyDown(event) {
28073
+ props.onKeyDown?.(event);
28074
+ if (context.type !== "single" || event.defaultPrevented) return;
28075
+ const container = event.currentTarget.closest("[data-toggle-group-root]");
28076
+ if (!container) return;
28077
+ const items = Array.from(
28078
+ container.querySelectorAll("[data-toggle-item]:not(:disabled)")
28079
+ );
28080
+ const currentIndex = items.indexOf(event.currentTarget);
28081
+ if (currentIndex === -1 || items.length === 0) return;
28082
+ const focusAndSelect = (targetIndex) => {
28083
+ const wrapped = (targetIndex % items.length + items.length) % items.length;
28084
+ const target = items[wrapped];
28085
+ if (!target) return;
28086
+ target.focus();
28087
+ const targetValue = target.dataset.toggleValue;
28088
+ if (targetValue !== void 0) context.onValueChange(targetValue);
28089
+ };
28090
+ switch (event.key) {
28091
+ case "ArrowRight":
28092
+ case "ArrowDown":
28093
+ event.preventDefault();
28094
+ focusAndSelect(currentIndex + 1);
28095
+ break;
28096
+ case "ArrowLeft":
28097
+ case "ArrowUp":
28098
+ event.preventDefault();
28099
+ focusAndSelect(currentIndex - 1);
28100
+ break;
28101
+ case "Home":
28102
+ event.preventDefault();
28103
+ focusAndSelect(0);
28104
+ break;
28105
+ case "End":
28106
+ event.preventDefault();
28107
+ focusAndSelect(items.length - 1);
28108
+ break;
27579
28109
  }
28110
+ }
28111
+ const rovingTabIndex = context.type === "single" ? isSelected || context.value === "" ? 0 : -1 : void 0;
28112
+ return (
28113
+ // biome-ignore lint/a11y/useAriaPropsSupportedByRole: see comment above.
28114
+ /* @__PURE__ */ jsx(
28115
+ "button",
28116
+ {
28117
+ ref,
28118
+ type: "button",
28119
+ disabled: isDisabled,
28120
+ "data-state": isSelected ? "on" : "off",
28121
+ "data-toggle-item": "",
28122
+ "data-toggle-value": value,
28123
+ role: context.type === "single" ? "radio" : void 0,
28124
+ "aria-checked": context.type === "single" ? isSelected : void 0,
28125
+ "aria-pressed": context.type === "multiple" ? isSelected : void 0,
28126
+ tabIndex: rovingTabIndex,
28127
+ className: cn(
28128
+ toggleGroupItemVariants({
28129
+ variant: variant ?? context.variant,
28130
+ size: size ?? context.size
28131
+ }),
28132
+ className,
28133
+ "focus-visible:z-10"
28134
+ ),
28135
+ onClick: toggleItemSelection,
28136
+ ...props,
28137
+ onKeyDown: handleItemKeyDown,
28138
+ children
28139
+ }
28140
+ )
27580
28141
  );
27581
28142
  };
27582
28143
  ToggleGroupItem.displayName = "ToggleGroupItem";
@@ -28247,9 +28808,13 @@ var Beam = ({ seed, width, x, delay, duration }) => {
28247
28808
  "--x": `${x}`,
28248
28809
  "--width": `${width}`,
28249
28810
  "--aspect-ratio": `${aspectRatio}`,
28250
- "--background": `linear-gradient(hsl(${hue} 80% 60%), transparent)`
28811
+ // Not `--background`. That is the core semantic surface token, and
28812
+ // setting it here overrides it for the whole subtree — any descendant
28813
+ // resolving hsl(var(--background)) would get hsl(a gradient) and lose
28814
+ // its declaration entirely.
28815
+ "--beam-fill": `linear-gradient(hsl(${hue} 80% 60%), transparent)`
28251
28816
  },
28252
- className: "absolute left-[var(--x)] top-0 [aspect-ratio:1/var(--aspect-ratio)] [background:var(--background)] [width:var(--width)]",
28817
+ className: "absolute left-[var(--x)] top-0 [aspect-ratio:1/var(--aspect-ratio)] [background:var(--beam-fill)] [width:var(--width)]",
28253
28818
  initial: { y: "100cqmax", x: "-50%" },
28254
28819
  animate: { y: "-100%", x: "-50%" },
28255
28820
  transition: {
@@ -28270,7 +28835,10 @@ var WarpBackground = ({
28270
28835
  beamDelayMax = 3,
28271
28836
  beamDelayMin = 0,
28272
28837
  beamDuration = 3,
28273
- gridColor = "var(--border)",
28838
+ // hsl(), because this lands in a gradient colour stop and --border holds bare
28839
+ // HSL channels. Unwrapped it invalidates the whole background shorthand and
28840
+ // the grid does not draw at all.
28841
+ gridColor = "hsl(var(--border))",
28274
28842
  ...props
28275
28843
  }) => {
28276
28844
  const shouldReduceMotion = useReducedMotion();
@@ -28617,6 +29185,6 @@ function XPostSkeleton({ className }) {
28617
29185
  );
28618
29186
  }
28619
29187
 
28620
- export { ANIMATED_GRADIENT_CSS, Accordion, AccordionContent, AccordionItem, AccordionTrigger, AgentPlan, Alert, AlertContent, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertIcon, AlertTitle, AlertToolbar, AnimateIn, AnimateInGroup, AnimatedBeam, AnimatedCircularProgressBar, AnimatedExportIcon, AnimatedGradientText, AnimatedGroup, AnimatedHikeCard, AnimatedList, AnimatedListItem, AnimatedShinyText, AnimatedSpan, AnimatedThemeToggler, Announcement, AnnouncementTag, AnnouncementTitle, AppleLiquidGlassSwitcher, AspectRatio, AssistedPasswordConfirmation, AuroraBackground, AuroraText, Avatar, AvatarCircles, AvatarFallback, AvatarGroup, AvatarImage, AvatarSmartGroup, AvatarWithIcon, Awards, Badge, Badge1, BarsLoader, BaseBadge, BaseBadgeButton, BaseBadgeDot, BaseButton, BaseButtonArrow, BentoCard, BentoGrid, BitbucketAvatar, Book, BorderTrail, Box, BrandMark, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Browser, BrowserMockup, BulkActionBar, BulkActionConfirmDialog, Button, ButtonLink, CanvasRevealEffect, Card, CardContent, CardDescription, CardErrorBoundary, CardFooter, CardHeader, CardSpotlight, CardTitle, Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, ChartContainer, ChartLegend, ChartLegendContent, ChartTooltip, ChartTooltipContent, Checkbox, CheckboxGroup, ChoiceboxGroup, CircularLoader, CircularUI, ClassicLoader, ClientXPostCard, CodeBlock, CodeBlockLanguageIcon, Collapse, CollapseGroup, Collapsible, CollapsibleContent, CollapsibleTrigger, ColorBadge, Combobox, ComboboxEmpty, ComboboxGroupSub, ComboboxInput, ComboboxList, ComboboxOptionItem, ComboboxRoot, ComboboxSeparator, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandMenu, CommandMenuEmpty, CommandMenuGroup, CommandMenuInput, CommandMenuItem, CommandMenuList, CommandMenuResults, CommandMenuRoot, CommandMenuSeparator, CommandMenuShortcut, CommandResults, CommandSeparator, CommandShortcut, CompactBulkActionBar, Confetti, ConfettiButton, ConfirmDeleteDialog, ConfirmDialog, ContextCard, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuRoot, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, CopyButton, CopyCodeButton, CopyIdButton, CopyLinkButton, CopyableField, DITHERING_SHAPES, DITHERING_TYPES, Description, DestructiveActionModal, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DiceBearAvatar, DisplayCards, DitheringBackground, DitheringShader, DotPattern, DotsLoader, DottedMap, DottedWorldMap, Drawer, DrawerBody, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, DualModeImage, DynamicIslandTOC, EditTool, EmptyState, EmptyStateIcon, EmptyStateRoot, Enable2FACard, Entity, ErrorSurface as Error, ErrorBoundary, ErrorMessage, ExpandableGallery, ExpandableTabs, ExpandingTextarea, FallbackCard, FeatureArrowCard, FeatureCard, CardContent as FeatureCardContent, FeatureCardDecorator, FeatureCardHeader, FeatureCheckItem, FeatureGate, FeatureIconItem, Feedback, Field, FileAttachment, FileCard, FilterPills, Flex, FlickeringGrid, FloatingBulkActionBar, Folder, Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, Gauge, GeistTooltip, GitHubAvatar, GitHubCalendar, GitLabAvatar, GithubInlineDiff, Globe, GradientAnimatedText, GrainCloudsBackground, GrainGradientBackground, Grid, GridCell, GridFeatureCard, GridPatternCard, GridPatternCardBody, GridRoot, GridSystem, Heading, HexGrid, Highlighter, HoverCard, HoverCardContent, HoverCardTrigger, InfiniteSlider, Input, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, InteractiveCard, InteractiveFrostedGlassCard, IphoneMockup, Kbd, KpiCard, LINE_SHADOW_CSS, Label, LetterGlitch, LightRays, LineShadowText, Loader, LoadingDots, MCP_DEFAULT_MAX_ARGS_SHOWN, MCP_DEFAULT_MAX_ARG_VALUE_CHARS, MCP_DEFAULT_MAX_OUTPUT_CHARS, MacbookPro, MagicCard, Material, McpTool, Menu, MenuButton, MenuContainer, MenuItem, MenuItemLocked, MenuLink, MenuSection, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, MeshGradientBg, MessageContent, MessageWithReactions, MetricCard, MetricCardBordered, MetricGrid, MiddleTruncate, Modal, MultiSelectContent, MultiSelectRoot, MultiSelectRow, MultiSelectTrigger, MultipleSelector, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, NeuroNoiseBg, NoisePatternCard, NoisePatternCardBody, Note, NotificationMessageList, Pagination, PaginationControl, PanelErrorBoundary, Phone, Popover, PopoverAnchor, PopoverContent, PopoverPositioner, PopoverTrigger, PricingCard, PricingCardBadge, PricingCardBody, PricingCardDescription, PricingCardHeader, PricingCardList, PricingCardListItem, PricingCardMainPrice, PricingCardOriginalPrice, PricingCardPeriod, PricingCardPlan, PricingCardPlanName, PricingCardPrice, PricingCardRoot, PricingCardSeparator, Progress, ProgressStepper, ProgressiveBlur, ProjectBanner, PulseDotLoader, PulseLoader, QuestionPrompt, QuestionTool, RadioGroup, RadioGroupCard, RadioGroupCardItem, RadioGroupItem, RadioGroupStacked, RadioGroupStackedItem, ReactionBadge, ReactionChip, RelativeTimeCard, ResizableHandle, ResizablePanel, ResizablePanelGroup, SEARCH_DEFAULT_MAX_HEIGHT_PX, Safari, ScrollVelocityContainer, ScrollVelocityRow, Scroller, SearchTool, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetBody, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, ShineBorder, ShowMore, Skeleton, SkeletonAvatar, SkeletonCard, SkeletonText, Slider, SliderNumberFlow, Spinner2 as Spinner, SplitButton, SplitButtonMenuItem, Stack, StarsCanvas, StatItem, StatusBadge2 as StatusBadge, StatusDot, Stepper, StepperContent, StepperNavigation, StepperProvider, SubagentTool, Switch, Table, TableBody, TableCaption, TableCell, TableCol, TableColgroup, TableErrorBoundary, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Terminal, TerminalLoader, Text, TextBlinkLoader, TextDotsLoader, TextLoop, TextScramble, TextShimmer, TextShimmerLoader, Textarea, ThemeSwitcher, ThemeToggle, Toaster, TodoTool, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TreeExpander, TreeIcon, TreeLabel, TreeLines, TreeNode, TreeNodeContent, TreeNodeTrigger, TreeProvider, TreeView, TypingAnimation, TypingLoader, UpgradeBanner, VideoPlayer, VideoText, WarpBackground, WaveAnimation, WaveLoader, WavesBg, WordFadeIn, XPostCard, XPostSkeleton, alertVariants, ariaPatterns, badgeVariants, baseBadgeVariants, baseButtonVariants, breakpoints, buttonVariants, choiceboxItemVariants, colorBadgeSizes, colorBadgeVariants, containerWidths, contrastRequirements, fixNumberedListBreaks, flexLayouts, focusRing, formatShortRelative, getCurrentBreakpoint, getDensitySpacing, getSpacing, gridLayouts, isBreakpoint, labelVariants, mediaQueries, minTouchTarget, navigationMenuTriggerStyle, normalizeCodeBlockLanguage, normalizeCodeFenceLanguages, normalizeMessageMarkdown, prefersReducedMotion, progressIndicatorVariants, progressVariants, resolveCodeBlockLanguageIcon, responsive, responsivePatterns, skipLinkStyle, spacing, spacingPatterns, spacingToCss, statusBadgeVariants, tabsContentVariants, tabsListVariants, tabsTriggerVariants, toggleGroupItemVariants, toggleGroupVariants, useBulkSelection, useCarousel, useChart, useConfirmDialog, useCopyToClipboard, useDebounce, useFeatureGate, useFormField, useStepper, useStepperContext, useToasts, visuallyHidden, withErrorBoundary, wrap, zIndex };
29188
+ export { ANIMATED_GRADIENT_CSS, Accordion, AccordionContent, AccordionItem, AccordionTrigger, AgentPlan, Alert, AlertContent, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertIcon, AlertTitle, AlertToolbar, AnimateIn, AnimateInGroup, AnimateSwap, AnimatedBeam, AnimatedCircularProgressBar, AnimatedExportIcon, AnimatedGradientText, AnimatedGroup, AnimatedHikeCard, AnimatedList, AnimatedListItem, AnimatedShinyText, AnimatedSpan, AnimatedThemeToggler, Announcement, AnnouncementTag, AnnouncementTitle, AppleLiquidGlassSwitcher, AspectRatio, AssistedPasswordConfirmation, AuroraBackground, AuroraText, Avatar, AvatarCircles, AvatarFallback, AvatarGroup, AvatarImage, AvatarSmartGroup, AvatarWithIcon, Awards, Badge, Badge1, BarsLoader, BaseBadge, BaseBadgeButton, BaseBadgeDot, BaseButton, BaseButtonArrow, BentoCard, BentoGrid, BitbucketAvatar, Book, BorderTrail, Box, BrandMark, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Browser, BrowserMockup, BulkActionBar, BulkActionConfirmDialog, Button, ButtonLink, CanvasRevealEffect, Card, CardContent, CardDescription, CardErrorBoundary, CardFooter, CardHeader, CardSpotlight, CardTitle, Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, ChartContainer, ChartLegend, ChartLegendContent, ChartTooltip, ChartTooltipContent, CheckGlyph, Checkbox, CheckboxGroup, ChoiceboxGroup, CircularLoader, CircularUI, ClassicLoader, ClientXPostCard, CodeBlock, CodeBlockLanguageIcon, Collapse, CollapseGroup, Collapsible, CollapsibleContent, CollapsibleTrigger, ColorBadge, Combobox, ComboboxEmpty, ComboboxGroupSub, ComboboxInput, ComboboxList, ComboboxOptionItem, ComboboxRoot, ComboboxSeparator, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandMenu, CommandMenuEmpty, CommandMenuGroup, CommandMenuInput, CommandMenuItem, CommandMenuList, CommandMenuResults, CommandMenuRoot, CommandMenuSeparator, CommandMenuShortcut, CommandResults, CommandSeparator, CommandShortcut, CompactBulkActionBar, Confetti, ConfettiButton, ConfirmDeleteDialog, ConfirmDialog, ContextCard, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuRoot, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, CopyButton, CopyCodeButton, CopyIdButton, CopyLinkButton, CopyMenuItem, CopyableField, DITHERING_SHAPES, DITHERING_TYPES, DataList, Description, DestructiveActionModal, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DiceBearAvatar, DisplayCards, DitheringBackground, DitheringShader, DotPattern, DotsLoader, DottedMap, DottedWorldMap, Drawer, DrawerBody, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuEmpty, DropdownMenuFilterInput, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, DualModeImage, DynamicIslandTOC, EditTool, EmptyState, EmptyStateIcon, EmptyStateRoot, Enable2FACard, Entity, ErrorSurface as Error, ErrorBoundary, ErrorMessage, ExpandableGallery, ExpandableTabs, ExpandingTextarea, FallbackCard, FeatureArrowCard, FeatureCard, CardContent as FeatureCardContent, FeatureCardDecorator, FeatureCardHeader, FeatureCheckItem, FeatureGate, FeatureIconItem, Feedback, Field, FileAttachment, FileCard, FilterPills, Flex, FlickeringGrid, FloatingBulkActionBar, Folder, Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, Gauge, GeistTooltip, GitHubAvatar, GitHubCalendar, GitLabAvatar, GithubInlineDiff, Globe, GradientAnimatedText, GrainCloudsBackground, GrainGradientBackground, Grid, GridCell, GridFeatureCard, GridPatternCard, GridPatternCardBody, GridRoot, GridSystem, Heading, HexGrid, Highlighter, HoverCard, HoverCardContent, HoverCardTrigger, IndeterminateGlyph, InfiniteSlider, Input, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, InteractiveCard, InteractiveFrostedGlassCard, IphoneMockup, Kbd, KpiCard, LINE_SHADOW_CSS, Label, LetterGlitch, LightRays, LineShadowText, Loader, LoadingDots, MCP_DEFAULT_MAX_ARGS_SHOWN, MCP_DEFAULT_MAX_ARG_VALUE_CHARS, MCP_DEFAULT_MAX_OUTPUT_CHARS, MacbookPro, MagicCard, Material, McpTool, Menu, MenuButton, MenuContainer, MenuItem, MenuItemLocked, MenuLink, MenuSection, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, MeshGradientBg, MessageContent, MessageWithReactions, MetricCard, MetricCardBordered, MetricGrid, MiddleTruncate, Modal, MultiSelectContent, MultiSelectRoot, MultiSelectRow, MultiSelectTrigger, MultipleSelector, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, NeuroNoiseBg, NoisePatternCard, NoisePatternCardBody, Note, NotificationMessageList, Pagination, PaginationControl, PanelErrorBoundary, Phone, Popover, PopoverAnchor, PopoverContent, PopoverPositioner, PopoverTrigger, PricingCard, PricingCardBadge, PricingCardBody, PricingCardDescription, PricingCardHeader, PricingCardList, PricingCardListItem, PricingCardMainPrice, PricingCardOriginalPrice, PricingCardPeriod, PricingCardPlan, PricingCardPlanName, PricingCardPrice, PricingCardRoot, PricingCardSeparator, Progress, ProgressStepper, ProgressiveBlur, ProjectBanner, PulseDotLoader, PulseLoader, QuestionPrompt, QuestionTool, RadioGroup, RadioGroupCard, RadioGroupCardItem, RadioGroupItem, RadioGroupStacked, RadioGroupStackedItem, ReactionBadge, ReactionChip, RelativeTimeCard, ResizableHandle, ResizablePanel, ResizablePanelGroup, SEARCH_DEFAULT_MAX_HEIGHT_PX, Safari, ScrollVelocityContainer, ScrollVelocityRow, Scroller, SearchTool, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetBody, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, ShineBorder, ShowMore, Skeleton, SkeletonAvatar, SkeletonCard, SkeletonText, Slider, SliderNumberFlow, Spinner2 as Spinner, SplitButton, SplitButtonMenuItem, Stack, StarsCanvas, StatItem, StatusBadge2 as StatusBadge, StatusDot, Stepper, StepperContent, StepperNavigation, StepperProvider, SubagentTool, Switch, Table, TableBody, TableCaption, TableCell, TableCol, TableColgroup, TableErrorBoundary, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Terminal, TerminalLoader, Text, TextBlinkLoader, TextDotsLoader, TextLoop, TextScramble, TextShimmer, TextShimmerLoader, Textarea, ThemeSwitcher, ThemeToggle, Toaster, TodoTool, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TreeExpander, TreeIcon, TreeLabel, TreeLines, TreeNode, TreeNodeContent, TreeNodeTrigger, TreeProvider, TreeView, TypingAnimation, TypingLoader, UpgradeBanner, VideoPlayer, VideoText, WarpBackground, WaveAnimation, WaveLoader, WavesBg, WordFadeIn, XPostCard, XPostSkeleton, alertVariants, ariaPatterns, badgeVariants, baseBadgeVariants, baseButtonVariants, breakpoints, buttonVariants, choiceboxItemVariants, colorBadgeSizes, colorBadgeVariants, containerWidths, contrastRequirements, fixNumberedListBreaks, flexLayouts, focusRing, formatShortRelative, getCurrentBreakpoint, getDensitySpacing, getSpacing, gridLayouts, isBreakpoint, labelVariants, mediaQueries, minTouchTarget, navigationMenuTriggerStyle, normalizeCodeBlockLanguage, normalizeCodeFenceLanguages, normalizeMessageMarkdown, prefersReducedMotion, progressIndicatorVariants, progressVariants, resolveCodeBlockLanguageIcon, responsive, responsivePatterns, skipLinkStyle, spacing, spacingPatterns, spacingToCss, statusBadgeVariants, tabsContentVariants, tabsListVariants, tabsTriggerVariants, toggleGroupItemVariants, toggleGroupVariants, useBulkSelection, useCarousel, useChart, useConfirmDialog, useCopyToClipboard, useDebounce, useFeatureGate, useFormField, useStepper, useStepperContext, useToasts, visuallyHidden, withErrorBoundary, wrap, zIndex };
28621
29189
  //# sourceMappingURL=index.js.map
28622
29190
  //# sourceMappingURL=index.js.map