@nebutra/ui 0.2.3 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/dist/animate-in-BlvjVh2S.d.ts +250 -0
  2. package/dist/{canonical-Drca5UMj.d.ts → canonical-DEhT4VfS.d.ts} +83 -369
  3. package/dist/card-DunB1gKE.d.ts +105 -0
  4. package/dist/chat/index.d.ts +1 -0
  5. package/dist/chat/index.js +3 -0
  6. package/dist/chat/index.js.map +1 -0
  7. package/dist/components/index.d.ts +90 -126
  8. package/dist/components/index.js +433 -182
  9. package/dist/components/index.js.map +1 -1
  10. package/dist/editorial/index.d.ts +404 -0
  11. package/dist/editorial/index.js +942 -0
  12. package/dist/editorial/index.js.map +1 -0
  13. package/dist/empty-state-bmfHCOuN.d.ts +86 -0
  14. package/dist/hooks/index.d.ts +18 -1
  15. package/dist/hooks/index.js +120 -5
  16. package/dist/hooks/index.js.map +1 -1
  17. package/dist/icons/index.d.ts +1 -0
  18. package/dist/index.d.ts +1 -1
  19. package/dist/layout/index.d.ts +17 -58
  20. package/dist/layout/index.js +368 -127
  21. package/dist/layout/index.js.map +1 -1
  22. package/dist/layouts/index.d.ts +1 -1
  23. package/dist/layouts/index.js +93 -28
  24. package/dist/layouts/index.js.map +1 -1
  25. package/dist/patterns/index.d.ts +39 -46
  26. package/dist/patterns/index.js +534 -323
  27. package/dist/patterns/index.js.map +1 -1
  28. package/dist/primitives/canonical.d.ts +5 -2
  29. package/dist/primitives/canonical.js +598 -288
  30. package/dist/primitives/canonical.js.map +1 -1
  31. package/dist/primitives/index.d.ts +165 -63
  32. package/dist/primitives/index.js +1251 -983
  33. package/dist/primitives/index.js.map +1 -1
  34. package/dist/tailwind.preset.d.ts +32 -32
  35. package/dist/tailwind.preset.js +24 -20
  36. package/dist/tailwind.preset.js.map +1 -1
  37. package/dist/theme/index.d.ts +1 -110
  38. package/dist/typography/fonts.css +8 -16
  39. package/dist/typography/index.d.ts +29 -45
  40. package/dist/typography/index.js +26 -14
  41. package/dist/typography/index.js.map +1 -1
  42. package/dist/utils/auth-surfaces.d.ts +33 -0
  43. package/dist/utils/auth-surfaces.js +9 -0
  44. package/dist/utils/auth-surfaces.js.map +1 -0
  45. package/dist/utils/index.d.ts +20 -16
  46. package/dist/utils/index.js +99 -20
  47. package/dist/utils/index.js.map +1 -1
  48. package/package.json +25 -11
  49. package/src/typography/fonts.css +8 -16
  50. package/dist/styles/brand-override.css +0 -61
  51. package/src/styles/brand-override.css +0 -61
@@ -1,12 +1,13 @@
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, 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';
3
+ import { ChevronUpDown, Check, ChevronRight, ChevronDown, ArrowRight, MagnifyingGlass, Plus, Cross, Star, VerifiedCheck, MoreHorizontal, ArrowLeft, RotateClockwise, Copy, CheckCircle, Status, LoaderCircle, EyeOff, Eye, Warning, Calendar as Calendar$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, 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
- import { twMerge } from 'tailwind-merge';
5
+ import { extendTailwindMerge } 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
9
  import { useReducedMotion, AnimatePresence, motion, LayoutGroup, LazyMotion, domAnimation, useMotionValue, useMotionTemplate, m, useInView, animate, useScroll, useVelocity, useSpring, useTransform, useAnimationFrame } from 'framer-motion';
10
+ import { tokenColor, fontStack, tokenValue } from '@nebutra/tokens/values';
10
11
  import { cva } from 'class-variance-authority';
11
12
  import { AlertDialog as AlertDialog$1 } from '@base-ui/react/alert-dialog';
12
13
  import { colors, brandSpring, flow, emerge, motionDurationSec } from '@nebutra/brand';
@@ -18,6 +19,7 @@ import Link from 'next/link';
18
19
  import { mergeProps } from '@base-ui/react/merge-props';
19
20
  import { useRender } from '@base-ui/react/use-render';
20
21
  import { Separator as Separator$1 } from '@base-ui/react/separator';
22
+ import { DayPicker, UI, DayFlag, SelectionState } from 'react-day-picker';
21
23
  import { Canvas, useThree, useFrame } from '@react-three/fiber';
22
24
  import * as THREE from 'three';
23
25
  import useEmblaCarousel from 'embla-carousel-react';
@@ -34,6 +36,7 @@ import { Input as Input$1 } from '@base-ui/react/input';
34
36
  import { ContextMenu as ContextMenu$1 } from '@base-ui/react/context-menu';
35
37
  import { toast, Toaster as Toaster$1 } from 'sonner';
36
38
  export { toast } from 'sonner';
39
+ import { parse, isValid, format, subDays, startOfWeek, eachDayOfInterval, endOfWeek, addDays, isSameDay } from 'date-fns';
37
40
  import { Dithering, GrainGradient, MeshGradient, NeuroNoise, Waves } from '@paper-design/shaders-react';
38
41
  import { createMap } from 'piri';
39
42
  import DottedMap2 from 'dotted-map';
@@ -42,7 +45,6 @@ import { OTPInput, OTPInputContext } from 'input-otp';
42
45
  import { useOnClickOutside, useDebounceValue } from 'usehooks-ts';
43
46
  import { Select as Select$1 } from '@base-ui/react/select';
44
47
  import { FormProvider, Controller, useFormContext } from 'react-hook-form';
45
- import { subDays, startOfWeek, eachDayOfInterval, endOfWeek, addDays, format, isSameDay } from 'date-fns';
46
48
  import createGlobe from 'cobe';
47
49
  import { annotate } from 'rough-notation';
48
50
  import useMeasure from 'react-use-measure';
@@ -89,7 +91,7 @@ var skipLinkStyle = {
89
91
  whiteSpace: "normal",
90
92
  backgroundColor: "canvas.default",
91
93
  color: "fg.default",
92
- zIndex: 9999,
94
+ zIndex: "var(--layer-devtools)",
93
95
  ...focusRing
94
96
  }
95
97
  };
@@ -135,6 +137,80 @@ var contrastRequirements = {
135
137
  /** WCAG AAA for large text */
136
138
  largeTextAAA: 4.5
137
139
  };
140
+
141
+ // src/utils/tw-merge-theme.generated.ts
142
+ var TW_MERGE_THEME = {
143
+ breakpoint: ["3xl", "shell", "tight", "xs"],
144
+ container: ["content", "text", "wide"],
145
+ ease: ["brand", "in", "in-out", "out", "spring"],
146
+ font: ["cn", "display", "heading", "mono", "sans"],
147
+ leading: ["display", "heading"],
148
+ radius: ["2xl", "3xl", "button", "card", "full", "lg", "md", "none", "panel", "sm", "xl", "xs"],
149
+ shadow: [
150
+ "2xl",
151
+ "ambient-glow",
152
+ "ambient-lg",
153
+ "ambient-md",
154
+ "ambient-sm",
155
+ "brand",
156
+ "brand-lg",
157
+ "glass-lg",
158
+ "glass-md",
159
+ "glass-sm",
160
+ "glow-accent",
161
+ "glow-accent-lg",
162
+ "glow-accent-sm",
163
+ "glow-primary",
164
+ "lg",
165
+ "md",
166
+ "sheen",
167
+ "sm",
168
+ "xl",
169
+ "xs"
170
+ ],
171
+ text: [
172
+ "2xl",
173
+ "2xs",
174
+ "3xl",
175
+ "4xl",
176
+ "5xl",
177
+ "6xl",
178
+ "7xl",
179
+ "8xl",
180
+ "9xl",
181
+ "base",
182
+ "body",
183
+ "display",
184
+ "label",
185
+ "lg",
186
+ "meta",
187
+ "sm",
188
+ "ui",
189
+ "xl",
190
+ "xs"
191
+ ],
192
+ tracking: ["display", "heading", "label", "tight"]
193
+ };
194
+ var TW_MERGE_CLASS_GROUPS = {
195
+ duration: [{ duration: ["cinematic", "flow", "micro", "reveal"] }]
196
+ };
197
+
198
+ // src/utils/cn.ts
199
+ var twMerge = extendTailwindMerge({
200
+ extend: {
201
+ theme: Object.fromEntries(
202
+ Object.entries(TW_MERGE_THEME).map(([key, values]) => [key, [...values]])
203
+ ),
204
+ classGroups: Object.fromEntries(
205
+ Object.entries(TW_MERGE_CLASS_GROUPS).map(([key, groups]) => [
206
+ key,
207
+ groups.map(
208
+ (group) => Object.fromEntries(Object.entries(group).map(([k, v]) => [k, [...v]]))
209
+ )
210
+ ])
211
+ )
212
+ }
213
+ });
138
214
  function cn(...inputs) {
139
215
  return twMerge(clsx(inputs));
140
216
  }
@@ -147,17 +223,17 @@ function asPlainStyle(style) {
147
223
  function withHtmlProps(Component2) {
148
224
  return Component2;
149
225
  }
150
- var RadixItem = withHtmlProps(Accordion$1.Item);
151
- var RadixHeader = withHtmlProps(Accordion$1.Header);
152
- var RadixTrigger = withHtmlProps(Accordion$1.Trigger);
153
- var RadixContent = withHtmlProps(Accordion$1.Panel);
226
+ var AccordionItemBase = withHtmlProps(Accordion$1.Item);
227
+ var AccordionHeaderBase = withHtmlProps(Accordion$1.Header);
228
+ var AccordionTriggerBase = withHtmlProps(Accordion$1.Trigger);
229
+ var AccordionPanelBase = withHtmlProps(Accordion$1.Panel);
154
230
  var Accordion = Accordion$1.Root;
155
231
  var AccordionItem = ({
156
232
  className,
157
233
  ref,
158
234
  ...props
159
235
  }) => /* @__PURE__ */ jsx(
160
- RadixItem,
236
+ AccordionItemBase,
161
237
  {
162
238
  ref,
163
239
  className: cn("border-b border-border/70 last:border-b-0", className),
@@ -171,8 +247,8 @@ var AccordionTrigger = ({
171
247
  size = "default",
172
248
  ref,
173
249
  ...props
174
- }) => /* @__PURE__ */ jsx(RadixHeader, { className: "flex", children: /* @__PURE__ */ jsxs(
175
- RadixTrigger,
250
+ }) => /* @__PURE__ */ jsx(AccordionHeaderBase, { className: "flex", children: /* @__PURE__ */ jsxs(
251
+ AccordionTriggerBase,
176
252
  {
177
253
  ref,
178
254
  className: cn(
@@ -204,11 +280,11 @@ var AccordionContent = ({
204
280
  ref,
205
281
  ...props
206
282
  }) => /* @__PURE__ */ jsx(
207
- RadixContent,
283
+ AccordionPanelBase,
208
284
  {
209
285
  ref,
210
286
  ...keepMounted ? { keepMounted: true } : {},
211
- className: "text-sm leading-relaxed data-[ending-style]:animate-accordion-up data-[open]:animate-accordion-down overflow-hidden text-muted-foreground transition-[height,opacity] duration-flow ease-out",
287
+ className: "text-sm leading-relaxed h-[var(--accordion-panel-height,auto)] data-[starting-style]:h-0 data-[ending-style]:h-0 overflow-hidden text-muted-foreground transition-[height,opacity] duration-flow ease-out",
212
288
  ...props,
213
289
  children: /* @__PURE__ */ jsx("div", { className: cn(size === "small" ? "pb-2.5 pt-0" : "pb-4 pt-0", className), children })
214
290
  }
@@ -225,14 +301,14 @@ var motionDurations = {
225
301
  cinematic: 500
226
302
  };
227
303
  var easings = {
228
- easeOut: [0, 0, 0.2, 1],
304
+ easeOut: [0.16, 1, 0.3, 1],
229
305
  easeInOut: [0.4, 0, 0.2, 1],
230
306
  spring: [0.34, 1.56, 0.64, 1]};
231
307
  var motionVariants = {
232
308
  fadeInUp: {
233
- initial: { opacity: 0, y: 20 },
234
- animate: { opacity: 1, y: 0 },
235
- exit: { opacity: 0, y: 10 }
309
+ initial: { opacity: 0, transform: "translateY(20px)" },
310
+ animate: { opacity: 1, transform: "translateY(0px)" },
311
+ exit: { opacity: 0, transform: "translateY(10px)" }
236
312
  },
237
313
  scaleIn: {
238
314
  initial: { opacity: 0, scale: 0.95 },
@@ -242,30 +318,35 @@ var motionVariants = {
242
318
  var staggerContainers = {
243
319
  fast: {
244
320
  initial: {},
245
- animate: { transition: { staggerChildren: 0.05, delayChildren: 0.1 } }
321
+ animate: { transition: { staggerChildren: 0.04, delayChildren: 0 } }
246
322
  },
247
323
  normal: {
248
324
  initial: {},
249
- animate: { transition: { staggerChildren: 0.1, delayChildren: 0.2 } }
325
+ animate: { transition: { staggerChildren: 0.06, delayChildren: 0.04 } }
250
326
  },
251
327
  slow: {
252
328
  initial: {},
253
- animate: { transition: { staggerChildren: 0.15, delayChildren: 0.3 } }
329
+ animate: { transition: { staggerChildren: 0.08, delayChildren: 0.05 } }
254
330
  }
255
331
  };
256
332
  var viewportSettings = {
257
333
  once: { once: true, margin: "-100px" }};
258
-
259
- // src/utils/brand-colors.ts
260
334
  var BRAND_FALLBACK = {
261
335
  /** VI 云毓蓝 — identity only */
262
- primary: "#0033FE",
263
- accent: "#0BF1C3",
264
- tertiary: "#5c7cfa",
265
- primaryDark: "#002ad4",
266
- backDark: "#000830",
267
- /** Soft product action (matches themes/light --primary ≈ #254bfa) */
268
- productPrimary: "#254bfa"};
336
+ primary: tokenColor("--brand-primary"),
337
+ accent: tokenColor("--brand-accent"),
338
+ tertiary: tokenColor("--brand-tertiary"),
339
+ primaryDark: tokenColor("--nebutra-blue-600"),
340
+ backDark: tokenColor("--nebutra-blue-950"),
341
+ /** Product action — semantic --primary */
342
+ productPrimary: tokenColor("--primary"),
343
+ /**
344
+ * Brand mark fallback (= product action: the factory recipe sets
345
+ * --brand-mark: var(--primary)). Skins may diverge.
346
+ */
347
+ brandMark: tokenColor("--primary"),
348
+ brandMarkForeground: tokenColor("--primary-foreground")
349
+ };
269
350
  function readCssVar(name, fallback) {
270
351
  if (typeof window === "undefined" || typeof document === "undefined") {
271
352
  return fallback;
@@ -281,7 +362,10 @@ function asCssColor(value, fallback) {
281
362
  return `hsl(${v})`;
282
363
  }
283
364
  function getProductPrimary() {
284
- return asCssColor(readCssVar("--primary", "228 85% 56%"), BRAND_FALLBACK.productPrimary);
365
+ return asCssColor(
366
+ readCssVar("--primary", tokenValue("--primary")),
367
+ BRAND_FALLBACK.productPrimary
368
+ );
285
369
  }
286
370
  function getBrandPrimary() {
287
371
  return asCssVarColor("--brand-primary", BRAND_FALLBACK.primary);
@@ -302,23 +386,23 @@ var StatusIcon = ({
302
386
  const sizeClass = size === "sm" ? "h-3.5 w-3.5" : "h-4.5 w-4.5";
303
387
  switch (status) {
304
388
  case "completed":
305
- return /* @__PURE__ */ jsx(CheckCircle, { className: cn(sizeClass, "text-green-500") });
389
+ return /* @__PURE__ */ jsx(CheckCircle, { className: cn(sizeClass, "text-success-strong") });
306
390
  case "in-progress":
307
391
  return /* @__PURE__ */ jsx(ClockDashed, { className: cn(sizeClass, "text-primary") });
308
392
  case "need-help":
309
- return /* @__PURE__ */ jsx(Warning, { className: cn(sizeClass, "text-yellow-500") });
393
+ return /* @__PURE__ */ jsx(Warning, { className: cn(sizeClass, "text-warning-strong") });
310
394
  case "failed":
311
- return /* @__PURE__ */ jsx(CrossCircle, { className: cn(sizeClass, "text-red-500") });
395
+ return /* @__PURE__ */ jsx(CrossCircle, { className: cn(sizeClass, "text-destructive-strong") });
312
396
  default:
313
397
  return /* @__PURE__ */ jsx(Status, { className: cn(sizeClass, "text-muted-foreground") });
314
398
  }
315
399
  };
316
400
  var StatusBadge = ({ status }) => {
317
401
  const colorClasses = {
318
- completed: "bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400",
402
+ completed: "bg-success/15 text-success-strong",
319
403
  "in-progress": "bg-primary/10 text-primary",
320
- "need-help": "bg-yellow-100 text-yellow-700 dark:bg-yellow-900/30 dark:text-yellow-400",
321
- failed: "bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400",
404
+ "need-help": "bg-warning/15 text-warning-strong",
405
+ failed: "bg-destructive/15 text-destructive-strong",
322
406
  pending: "bg-muted text-muted-foreground"
323
407
  };
324
408
  return /* @__PURE__ */ jsx(
@@ -712,7 +796,7 @@ var alertVariants = cva("flex items-stretch w-full gap-2 group-[.toaster]:w-(--w
712
796
  {
713
797
  variant: "destructive",
714
798
  appearance: "outline",
715
- className: "border border-border bg-background text-destructive [&_[data-slot=alert-close]]:text-foreground"
799
+ className: "border border-border bg-background text-destructive-strong [&_[data-slot=alert-close]]:text-foreground"
716
800
  },
717
801
  {
718
802
  variant: "success",
@@ -782,7 +866,7 @@ var alertVariants = cva("flex items-stretch w-full gap-2 group-[.toaster]:w-(--w
782
866
  {
783
867
  variant: "mono",
784
868
  icon: "destructive",
785
- className: "[&_[data-slot=alert-icon]]:text-destructive"
869
+ className: "[&_[data-slot=alert-icon]]:text-destructive-strong"
786
870
  },
787
871
  {
788
872
  variant: "mono",
@@ -804,6 +888,7 @@ function Alert({
804
888
  appearance,
805
889
  close = false,
806
890
  onClose,
891
+ closeLabel = "Dismiss",
807
892
  children,
808
893
  ...props
809
894
  }) {
@@ -821,7 +906,7 @@ function Alert({
821
906
  {
822
907
  type: "button",
823
908
  onClick: onClose,
824
- "aria-label": "Dismiss",
909
+ "aria-label": closeLabel,
825
910
  "data-slot": "alert-close",
826
911
  className: cn(
827
912
  "group shrink-0 size-4 inline-flex items-center justify-center rounded-[var(--radius-sm)]",
@@ -865,7 +950,7 @@ function AlertContent({ className, ...props }) {
865
950
  );
866
951
  }
867
952
  ({
868
- // Nebutra Blue (云毓蓝) — technology & trust — VI: #0033FE
953
+ // Nebutra Blue (云毓蓝) — technology & trust
869
954
  blue50: colors.primary[50],
870
955
  blue100: colors.primary[100],
871
956
  blue200: colors.primary[200],
@@ -878,7 +963,7 @@ function AlertContent({ className, ...props }) {
878
963
  blue800: colors.primary[800],
879
964
  blue900: colors.primary[900],
880
965
  blue950: colors.primary[950],
881
- // Nebutra Cyan (云毓青) — data flow & intelligence — VI: #0BF1C3
966
+ // Nebutra Cyan (云毓青) — data flow & intelligence
882
967
  cyan50: colors.accent[50],
883
968
  cyan100: colors.accent[100],
884
969
  cyan200: colors.accent[200],
@@ -903,6 +988,13 @@ function AlertContent({ className, ...props }) {
903
988
  neutral800: colors.neutral[800],
904
989
  neutral900: colors.neutral[900],
905
990
  neutral950: colors.neutral[950],
991
+ // deepest — used as dark background
992
+ // Semantic raw colors — VI §Color Specifications. The 500s are the status
993
+ // tokens; the 600 hover steps have no token of their own.
994
+ // NOTE: info = brand blue, not sky/teal
995
+ red500: tokenColor("--status-danger"),
996
+ green500: tokenColor("--status-success"),
997
+ amber500: tokenColor("--status-warning"),
906
998
  white: colors.white,
907
999
  black: colors.black
908
1000
  });
@@ -958,6 +1050,18 @@ var primitiveFontWeight = {
958
1050
  normal: 400,
959
1051
  medium: 500,
960
1052
  semibold: 600};
1053
+ ({
1054
+ /** Default body/UI stack — Geist with CJK falling through to MiSans */
1055
+ sans: fontStack("--font-sans"),
1056
+ /** CJK-locale stack (same order as sans, minus Latin-only system faces) */
1057
+ cnSans: fontStack("--font-cn"),
1058
+ /** Display / hero headlines */
1059
+ display: fontStack("--font-display"),
1060
+ /** Headings */
1061
+ heading: fontStack("--font-heading"),
1062
+ /** Code / monospace */
1063
+ mono: fontStack("--font-mono")
1064
+ });
961
1065
  var primitiveShadow = {
962
1066
  sm: "0 1px 2px 0 rgb(0 0 0 / 0.05)",
963
1067
  md: "0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)",
@@ -975,7 +1079,7 @@ var primitiveTransition = {
975
1079
  // hero entrance, big delight moments
976
1080
  },
977
1081
  easing: {
978
- default: "ease-out",
1082
+ default: "var(--ease-brand)",
979
1083
  inOut: "cubic-bezier(0.4, 0, 0.2, 1)"
980
1084
  }
981
1085
  };
@@ -1009,80 +1113,85 @@ var overlayTokens = {
1009
1113
  }};
1010
1114
  var overlayClassNames = {
1011
1115
  focusRing: overlayFocusRingClassName,
1012
- backdrop: "fixed inset-0 bg-black/40 backdrop-blur-sm transition-[opacity,display] duration-[var(--motion-duration-flow)] ease-[var(--ease-out)] data-ending-style:opacity-0 data-starting-style:opacity-0 motion-reduce:transition-none",
1116
+ backdrop: (
1117
+ // allow-palette: dialog backdrop dims arbitrary app content behind it, must stay dark in both themes
1118
+ "fixed inset-0 bg-black/40 transition-[opacity] duration-[var(--motion-duration-flow)] ease-[var(--ease-brand)] data-ending-style:opacity-0 data-starting-style:opacity-0 data-ending-style:duration-[var(--motion-duration-micro)] motion-reduce:transition-none"
1119
+ ),
1013
1120
  modalSurface: [
1014
1121
  "fixed left-1/2 top-1/2 grid w-full max-w-lg -translate-x-1/2 -translate-y-1/2 gap-4",
1015
- "border border-border/60 bg-background/95 p-6 text-foreground backdrop-blur-xl",
1122
+ "bg-background p-6 text-foreground",
1016
1123
  "rounded-[var(--radius-xl)]",
1017
- shadowClasses["2xl"],
1124
+ "shadow-[0_0_0_1px_var(--edge-soft),var(--elevation-overlay)]",
1018
1125
  "outline-none",
1019
- "transition-[opacity,transform,display] duration-[var(--motion-duration-flow)] ease-[var(--ease-out)]",
1020
- "data-starting-style:scale-95 data-starting-style:opacity-0 data-ending-style:scale-95 data-ending-style:opacity-0",
1126
+ "transition-[opacity,transform] duration-[var(--motion-duration-flow)] ease-[var(--ease-brand)]",
1127
+ "data-starting-style:scale-95 data-starting-style:opacity-0 data-ending-style:scale-95 data-ending-style:opacity-0 data-ending-style:duration-[var(--motion-duration-micro)]",
1021
1128
  "motion-reduce:transition-none motion-reduce:data-starting-style:transform-none motion-reduce:data-ending-style:transform-none"
1022
1129
  ].join(" "),
1023
1130
  commandSurface: [
1024
1131
  "fixed left-1/2 top-[18vh] w-[calc(100vw-2rem)] max-w-xl -translate-x-1/2 overflow-hidden",
1025
1132
  "rounded-[var(--radius-lg)] border border-border/70 bg-popover text-popover-foreground",
1026
- shadowClasses["2xl"],
1027
- "transition-[opacity,transform,display] duration-[var(--motion-duration-flow)] ease-[var(--ease-out)]",
1028
- "data-starting-style:translate-y-[-0.5rem] data-starting-style:scale-95 data-starting-style:opacity-0",
1029
- "data-ending-style:translate-y-[-0.5rem] data-ending-style:scale-95 data-ending-style:opacity-0",
1030
- "motion-reduce:transition-none motion-reduce:data-starting-style:transform-none motion-reduce:data-ending-style:transform-none"
1133
+ shadowClasses["2xl"]
1031
1134
  ].join(" "),
1032
1135
  menuSurface: [
1033
- "min-w-32 overflow-hidden rounded-[var(--radius-lg)] border border-border/70 bg-popover/95 p-1 text-popover-foreground backdrop-blur-md",
1136
+ "min-w-32 origin-[var(--transform-origin)] overflow-hidden rounded-[var(--radius-lg)] border border-border/70 bg-popover/95 p-1 text-popover-foreground backdrop-blur-md",
1034
1137
  shadowClasses.xl,
1035
- "outline-none transition-[opacity,transform,display] duration-[var(--motion-duration-flow)] ease-[var(--ease-out)]",
1036
- "data-[starting-style]:scale-95 data-[starting-style]:opacity-0 data-[ending-style]:scale-95 data-[ending-style]:opacity-0",
1138
+ "outline-none transition-[opacity,transform] duration-[var(--motion-duration-flow)] ease-[var(--ease-brand)]",
1139
+ "data-[starting-style]:scale-[0.97] data-[starting-style]:opacity-0 data-ending-style:scale-[0.97] data-ending-style:opacity-0 data-ending-style:duration-[var(--motion-duration-micro)]",
1037
1140
  "motion-reduce:transition-none motion-reduce:data-[starting-style]:transform-none motion-reduce:data-[ending-style]:transform-none"
1038
1141
  ].join(" "),
1039
1142
  selectSurface: [
1040
- "max-h-[var(--select-content-max-height)] min-w-[var(--select-content-min-width)] overflow-hidden",
1143
+ "max-h-[var(--select-content-max-height)] min-w-[var(--select-content-min-width)] origin-[var(--transform-origin)] overflow-hidden",
1041
1144
  "rounded-[var(--select-content-radius)] border border-border/70 bg-popover/95 text-popover-foreground backdrop-blur-md",
1042
1145
  "shadow-[var(--select-content-shadow)] outline-none",
1043
- "transition-[opacity,transform,display] duration-[var(--select-duration)] ease-[var(--select-easing)]",
1044
- "data-starting-style:scale-95 data-starting-style:opacity-0 data-ending-style:scale-95 data-ending-style:opacity-0",
1146
+ "transition-[opacity,transform] duration-[var(--select-duration)] ease-[var(--ease-brand)]",
1147
+ "data-starting-style:scale-[0.97] data-starting-style:opacity-0 data-ending-style:scale-[0.97] data-ending-style:opacity-0",
1045
1148
  "motion-reduce:transition-none motion-reduce:data-starting-style:transform-none motion-reduce:data-ending-style:transform-none"
1046
1149
  ].join(" "),
1047
1150
  navigationMenuSurface: [
1048
- "min-w-32 overflow-hidden rounded-[var(--radius-xl)] border border-border/70 bg-popover/95 text-popover-foreground backdrop-blur-md",
1151
+ "min-w-32 origin-[var(--transform-origin)] overflow-hidden rounded-[var(--radius-xl)] border border-border/70 bg-popover/95 text-popover-foreground backdrop-blur-md",
1049
1152
  shadowClasses.xl,
1050
- "outline-none transition-[opacity,transform,display] duration-[var(--motion-duration-flow)] ease-[var(--ease-out)]",
1051
- "data-[starting-style]:scale-95 data-[starting-style]:opacity-0 data-[ending-style]:scale-95 data-[ending-style]:opacity-0",
1153
+ "outline-none transition-[opacity,transform] duration-[var(--motion-duration-flow)] ease-[var(--ease-brand)]",
1154
+ "data-[starting-style]:scale-[0.97] data-[starting-style]:opacity-0 data-ending-style:scale-[0.97] data-ending-style:opacity-0 data-ending-style:duration-[var(--motion-duration-micro)]",
1052
1155
  "motion-reduce:transition-none motion-reduce:data-[starting-style]:transform-none motion-reduce:data-[ending-style]:transform-none"
1053
1156
  ].join(" "),
1054
1157
  popoverSurface: [
1055
- "w-72 rounded-[var(--radius-lg)] border border-border/70 bg-popover/95 p-4 text-popover-foreground backdrop-blur-md",
1158
+ "w-72 origin-[var(--transform-origin)] rounded-[var(--radius-lg)] border border-border/70 bg-popover/95 p-4 text-popover-foreground backdrop-blur-md",
1056
1159
  shadowClasses.xl,
1057
- "outline-none transition-[opacity,transform,display] duration-[var(--motion-duration-flow)] ease-[var(--ease-out)]",
1058
- "data-[open]:opacity-100 data-[closed]:opacity-0 data-[closed]:scale-95 data-[open]:scale-100",
1160
+ "outline-none transition-[opacity,transform] duration-[var(--motion-duration-flow)] ease-[var(--ease-brand)]",
1161
+ "data-[open]:opacity-100 data-[closed]:opacity-0 data-[closed]:scale-[0.97] data-[open]:scale-100 data-[closed]:duration-[var(--motion-duration-micro)]",
1059
1162
  "motion-reduce:transition-none motion-reduce:data-[closed]:transform-none motion-reduce:data-[open]:transform-none"
1060
1163
  ].join(" "),
1061
1164
  tooltipSurface: [
1062
- "overflow-hidden rounded-[var(--radius-md)] border border-border/70 bg-popover/95 px-3 py-1.5 text-sm text-popover-foreground backdrop-blur-md",
1165
+ "origin-[var(--transform-origin)] overflow-hidden rounded-[var(--radius-md)] border border-border/70 bg-popover/95 px-3 py-1.5 text-sm text-popover-foreground backdrop-blur-md",
1063
1166
  shadowClasses.md,
1064
- "transition-[opacity,transform,display] duration-[var(--motion-duration-flow)] ease-[var(--ease-out)]",
1065
- "data-starting-style:scale-95 data-starting-style:opacity-0 data-ending-style:scale-95 data-ending-style:opacity-0",
1167
+ "transition-[opacity,transform] duration-[var(--motion-duration-flow)] ease-[var(--ease-brand)]",
1168
+ "data-starting-style:scale-[0.97] data-starting-style:opacity-0 data-ending-style:scale-[0.97] data-ending-style:opacity-0 data-ending-style:duration-[var(--motion-duration-micro)]",
1169
+ "data-[instant]:duration-0",
1066
1170
  "motion-reduce:transition-none motion-reduce:data-starting-style:transform-none motion-reduce:data-ending-style:transform-none"
1067
1171
  ].join(" "),
1068
1172
  sheetBackdrop: [
1069
1173
  "fixed inset-0 bg-[var(--sheet-overlay-background)] backdrop-blur-[var(--sheet-overlay-blur)]",
1070
- "transition-[opacity,backdrop-filter,display] duration-[var(--motion-duration-flow)] ease-[var(--ease-out)]",
1071
- "data-ending-style:opacity-0 data-starting-style:opacity-0 motion-reduce:transition-none"
1174
+ "transition-[opacity] duration-[var(--motion-duration-flow)] ease-[var(--ease-brand)]",
1175
+ "data-ending-style:opacity-0 data-starting-style:opacity-0 data-ending-style:duration-[var(--motion-duration-micro)] motion-reduce:transition-none"
1072
1176
  ].join(" "),
1073
1177
  sheetSurface: [
1074
1178
  "fixed flex flex-col overflow-hidden border border-border bg-[var(--sheet-background)] text-foreground shadow-[var(--sheet-shadow)]",
1075
- "outline-none transition-[opacity,transform,display] duration-[var(--motion-duration-flow)] ease-[var(--ease-out)]",
1076
- "data-ending-style:opacity-0 data-starting-style:opacity-0 motion-reduce:transition-none"
1179
+ "outline-none transition-[opacity,transform] duration-[var(--motion-duration-flow)] ease-[var(--ease-brand)]",
1180
+ "data-ending-style:opacity-0 data-starting-style:opacity-0 data-ending-style:duration-[var(--motion-duration-micro)] motion-reduce:transition-none"
1077
1181
  ].join(" "),
1078
- closeButton: `absolute right-4 top-4 rounded-[var(--radius-sm)] opacity-70 ring-offset-background ${overlayFocusRingClassName} transition-opacity duration-[var(--motion-duration-micro)] ease-[var(--ease-out)] hover:opacity-100 disabled:pointer-events-none data-[open]:bg-accent data-[open]:text-muted-foreground motion-reduce:transition-none`
1182
+ closeButton: `absolute right-4 top-4 rounded-[var(--radius-sm)] opacity-70 ring-offset-background ${overlayFocusRingClassName} transition-opacity duration-[var(--motion-duration-micro)] ease-[var(--ease-brand)] hover:opacity-100 disabled:pointer-events-none data-[open]:bg-accent data-[open]:text-muted-foreground motion-reduce:transition-none`
1079
1183
  };
1080
1184
  var buttonVariants = cva(
1081
1185
  [
1082
1186
  "inline-flex items-center justify-center gap-2 whitespace-nowrap",
1083
1187
  "rounded-[var(--btn-default-radius,var(--radius-md))]",
1084
1188
  "text-[length:var(--control-font-size-md,0.875rem)] font-[number:var(--font-weight-medium,500)]",
1085
- "transition-colors duration-micro ease-out",
1189
+ // `transform` is in the property list on purpose: without it the
1190
+ // active:scale-[0.97] press snapped instantly and the button felt dead
1191
+ // under the finger. Duration/ease stay on the flow rail — motion
1192
+ // governance pins them (primitives/__tests__/motion-governance.test.ts).
1193
+ "transition-[color,background-color,border-color,box-shadow,transform] duration-flow ease-[var(--ease-brand)]",
1194
+ "active:scale-[0.97] motion-reduce:active:scale-100 motion-reduce:transition-none",
1086
1195
  "disabled:pointer-events-none disabled:opacity-50",
1087
1196
  "aria-busy:cursor-wait"
1088
1197
  ].join(" "),
@@ -1091,7 +1200,7 @@ var buttonVariants = cva(
1091
1200
  variant: {
1092
1201
  // Recipe-driven via packages/design/tokens/recipe.css (.btn-brand-default)
1093
1202
  default: "btn-brand-default",
1094
- ink: "bg-[var(--neutral-12)] text-[var(--neutral-1)] ring-1 ring-inset ring-[color:var(--neutral-1)]/5 hover:bg-[var(--neutral-11)] hover:-translate-y-px active:translate-y-0 transition-[transform,background-color] duration-micro",
1203
+ ink: "bg-neutral-12 text-neutral-1 ring-1 ring-inset ring-neutral-1/5 hover:bg-neutral-11 hover:-translate-y-px active:translate-y-0 transition-[transform,background-color] duration-micro",
1095
1204
  destructive: "bg-destructive text-destructive-foreground hover:bg-destructive/90",
1096
1205
  outline: "border border-input bg-background hover:bg-accent hover:text-accent-foreground",
1097
1206
  secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80",
@@ -1371,37 +1480,37 @@ var PRESETS = {
1371
1480
  * Pair with `AnimateSwap`.
1372
1481
  */
1373
1482
  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)" },
1483
+ initial: { opacity: 0, transform: "translateY(10px)", filter: "blur(4px)" },
1484
+ animate: { opacity: 1, transform: "translateY(0px)", filter: "blur(0px)" },
1485
+ exit: { opacity: 0, transform: "translateY(-10px)", filter: "blur(4px)" },
1377
1486
  transition: { duration: motionDurations.reveal / 1e3 }
1378
1487
  },
1379
1488
  /** Off-canvas panel entering from the right edge (drawer, sheet). */
1380
1489
  slideFromRight: {
1381
- initial: { x: "100%" },
1382
- animate: { x: 0 },
1383
- exit: { x: "100%" },
1490
+ initial: { transform: "translateX(100%)" },
1491
+ animate: { transform: "translateX(0%)" },
1492
+ exit: { transform: "translateX(100%)" },
1384
1493
  transition: brandSpring.default
1385
1494
  },
1386
1495
  /** Off-canvas panel entering from the left edge. */
1387
1496
  slideFromLeft: {
1388
- initial: { x: "-100%" },
1389
- animate: { x: 0 },
1390
- exit: { x: "-100%" },
1497
+ initial: { transform: "translateX(-100%)" },
1498
+ animate: { transform: "translateX(0%)" },
1499
+ exit: { transform: "translateX(-100%)" },
1391
1500
  transition: brandSpring.default
1392
1501
  },
1393
1502
  /** Off-canvas panel entering from the top edge (banner, command bar). */
1394
1503
  slideFromTop: {
1395
- initial: { y: "-100%" },
1396
- animate: { y: 0 },
1397
- exit: { y: "-100%" },
1504
+ initial: { transform: "translateY(-100%)" },
1505
+ animate: { transform: "translateY(0%)" },
1506
+ exit: { transform: "translateY(-100%)" },
1398
1507
  transition: brandSpring.default
1399
1508
  },
1400
1509
  /** Off-canvas panel entering from the bottom edge (mobile action sheet). */
1401
1510
  slideFromBottom: {
1402
- initial: { y: "100%" },
1403
- animate: { y: 0 },
1404
- exit: { y: "100%" },
1511
+ initial: { transform: "translateY(100%)" },
1512
+ animate: { transform: "translateY(0%)" },
1513
+ exit: { transform: "translateY(100%)" },
1405
1514
  transition: brandSpring.default
1406
1515
  }
1407
1516
  };
@@ -1411,7 +1520,7 @@ function MotionDiv(props) {
1411
1520
  function AnimateIn(props) {
1412
1521
  const {
1413
1522
  children,
1414
- preset = "emerge",
1523
+ preset = "fade",
1415
1524
  delay = 0,
1416
1525
  duration,
1417
1526
  inView = false,
@@ -1419,7 +1528,7 @@ function AnimateIn(props) {
1419
1528
  ...rest
1420
1529
  } = props;
1421
1530
  const shouldReduce = useReducedMotion();
1422
- const base = PRESETS[preset] || PRESETS.emerge;
1531
+ const base = PRESETS[preset] || PRESETS.fade;
1423
1532
  const initial = shouldReduce ? { opacity: 0 } : base.initial;
1424
1533
  const animate2 = shouldReduce ? { opacity: 1 } : base.animate;
1425
1534
  const exit = shouldReduce ? { opacity: 0 } : "exit" in base ? base.exit : void 0;
@@ -2078,7 +2187,7 @@ function AnimatedShinyText({
2078
2187
  className: cn(
2079
2188
  "mx-auto max-w-md text-muted-foreground/70",
2080
2189
  // Shine gradient
2081
- "bg-gradient-to-r from-transparent via-black/80 via-50% to-transparent dark:via-white/80",
2190
+ "bg-gradient-to-r from-transparent via-foreground/80 via-50% to-transparent",
2082
2191
  className
2083
2192
  ),
2084
2193
  ...props,
@@ -2131,8 +2240,14 @@ var badgeVariants = cva(
2131
2240
  "teal-subtle": "bg-info/10 text-info fill-current border-transparent",
2132
2241
  inverted: "bg-foreground text-background fill-current",
2133
2242
  // Special visual treatments (intentional product design, not brand hex)
2134
- trial: "bg-gradient-to-br from-trial-start to-trial-end text-primary-foreground fill-current",
2135
- turbo: "bg-gradient-to-br from-turbo-start to-turbo-end text-primary-foreground fill-current",
2243
+ trial: (
2244
+ // allow-palette: the trial gradient is fixed and vivid in both themes, so its ink is fixed white
2245
+ "bg-gradient-to-br from-trial-start to-trial-end text-white fill-current"
2246
+ ),
2247
+ turbo: (
2248
+ // allow-palette: the turbo gradient is fixed and vivid in both themes, so its ink is fixed white
2249
+ "bg-gradient-to-br from-turbo-start to-turbo-end text-white fill-current"
2250
+ ),
2136
2251
  pill: "bg-background text-foreground fill-foreground border-border hover:bg-muted/50 focus-visible:bg-muted/50",
2137
2252
  beta: "border-transparent bg-muted text-muted-foreground",
2138
2253
  new: "border-transparent bg-primary/10 text-primary",
@@ -2295,62 +2410,66 @@ function AppleLiquidGlassSwitcher({
2295
2410
  setInternalValue(newValue);
2296
2411
  }
2297
2412
  };
2298
- return /* @__PURE__ */ jsxs("fieldset", { className: "relative inline-flex items-center p-1.5 rounded-full bg-black/40 dark:bg-black/60 border border-white/10 shadow-[0_8px_32px_0_rgba(0,0,0,0.3)] backdrop-blur-[20px] overflow-hidden", children: [
2299
- /* @__PURE__ */ jsx("legend", { className: "sr-only", children: "Choose theme" }),
2300
- /* @__PURE__ */ jsx("div", { className: "pointer-events-none absolute inset-0 z-0 opacity-[0.15] mix-blend-overlay", children: /* @__PURE__ */ jsxs("svg", { "aria-hidden": "true", className: "w-full h-full", xmlns: "http://www.w3.org/2000/svg", children: [
2301
- /* @__PURE__ */ jsx("filter", { id: "noise", children: /* @__PURE__ */ jsx(
2302
- "feTurbulence",
2303
- {
2304
- type: "fractalNoise",
2305
- baseFrequency: "0.8",
2306
- numOctaves: "4",
2307
- stitchTiles: "stitch"
2308
- }
2309
- ) }),
2310
- /* @__PURE__ */ jsx("rect", { width: "100%", height: "100%", filter: "url(#noise)" })
2311
- ] }) }),
2312
- /* @__PURE__ */ jsx("div", { className: "relative z-10 flex w-full", children: themeOptions.map((option) => {
2313
- const isActive = activeValue === option.value;
2314
- return /* @__PURE__ */ jsxs(
2315
- "label",
2316
- {
2317
- htmlFor: `theme-switch-${option.value}`,
2318
- className: `relative cursor-pointer p-3 rounded-full transition-colors duration-300 ease-in-out ${isActive ? "text-white" : "text-white/50 hover:text-white/80"}`,
2319
- title: option.label,
2320
- children: [
2321
- /* @__PURE__ */ jsx("span", { className: "sr-only", children: option.label }),
2322
- /* @__PURE__ */ jsx(
2323
- "input",
2324
- {
2325
- id: `theme-switch-${option.value}`,
2326
- className: "sr-only",
2327
- type: "radio",
2328
- name: "theme",
2329
- value: option.value,
2330
- checked: isActive,
2331
- onChange: () => handleChange(option.value)
2332
- }
2333
- ),
2334
- isActive && /* @__PURE__ */ jsx(
2335
- motion.div,
2336
- {
2337
- ...shouldReduceMotion ? {} : { layoutId: "apple-glass-switcher-active" },
2338
- className: "absolute inset-0 rounded-full bg-white/20 shadow-[inset_0_1px_1px_rgba(255,255,255,0.4),0_2px_10px_rgba(0,0,0,0.2)] backdrop-blur-md",
2339
- initial: false,
2340
- transition: shouldReduceMotion ? { duration: 0 } : {
2341
- type: "spring",
2342
- stiffness: 400,
2343
- damping: 30
2413
+ return (
2414
+ // allow-palette: fixed dark liquid-glass pill, deliberately identical across themes
2415
+ /* @__PURE__ */ jsxs("fieldset", { className: "relative inline-flex items-center p-1.5 rounded-full bg-black/40 dark:bg-black/60 border border-white/10 shadow-[0_8px_32px_0_rgba(0,0,0,0.3)] backdrop-blur-[20px] overflow-hidden", children: [
2416
+ /* @__PURE__ */ jsx("legend", { className: "sr-only", children: "Choose theme" }),
2417
+ /* @__PURE__ */ jsx("div", { className: "pointer-events-none absolute inset-0 z-0 opacity-[0.15] mix-blend-overlay", children: /* @__PURE__ */ jsxs("svg", { "aria-hidden": "true", className: "w-full h-full", xmlns: "http://www.w3.org/2000/svg", children: [
2418
+ /* @__PURE__ */ jsx("filter", { id: "noise", children: /* @__PURE__ */ jsx(
2419
+ "feTurbulence",
2420
+ {
2421
+ type: "fractalNoise",
2422
+ baseFrequency: "0.8",
2423
+ numOctaves: "4",
2424
+ stitchTiles: "stitch"
2425
+ }
2426
+ ) }),
2427
+ /* @__PURE__ */ jsx("rect", { width: "100%", height: "100%", filter: "url(#noise)" })
2428
+ ] }) }),
2429
+ /* @__PURE__ */ jsx("div", { className: "relative z-10 flex w-full", children: themeOptions.map((option) => {
2430
+ const isActive = activeValue === option.value;
2431
+ return /* @__PURE__ */ jsxs(
2432
+ "label",
2433
+ {
2434
+ htmlFor: `theme-switch-${option.value}`,
2435
+ className: `relative cursor-pointer p-3 rounded-full transition-colors duration-300 ease-in-out ${// allow-palette: fixed dark liquid-glass pill, deliberately identical across themes
2436
+ isActive ? "text-white" : "text-white/50 hover:text-white/80"}`,
2437
+ title: option.label,
2438
+ children: [
2439
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: option.label }),
2440
+ /* @__PURE__ */ jsx(
2441
+ "input",
2442
+ {
2443
+ id: `theme-switch-${option.value}`,
2444
+ className: "sr-only",
2445
+ type: "radio",
2446
+ name: "theme",
2447
+ value: option.value,
2448
+ checked: isActive,
2449
+ onChange: () => handleChange(option.value)
2344
2450
  }
2345
- }
2346
- ),
2347
- /* @__PURE__ */ jsx("span", { className: "relative z-10 flex items-center justify-center", children: option.icon })
2348
- ]
2349
- },
2350
- option.value
2351
- );
2352
- }) })
2353
- ] });
2451
+ ),
2452
+ isActive && /* @__PURE__ */ jsx(
2453
+ motion.div,
2454
+ {
2455
+ ...shouldReduceMotion ? {} : { layoutId: "apple-glass-switcher-active" },
2456
+ className: "absolute inset-0 rounded-full bg-white/20 shadow-[inset_0_1px_1px_rgba(255,255,255,0.4),0_2px_10px_rgba(0,0,0,0.2)] backdrop-blur-md",
2457
+ initial: false,
2458
+ transition: shouldReduceMotion ? { duration: 0 } : {
2459
+ type: "spring",
2460
+ stiffness: 400,
2461
+ damping: 30
2462
+ }
2463
+ }
2464
+ ),
2465
+ /* @__PURE__ */ jsx("span", { className: "relative z-10 flex items-center justify-center", children: option.icon })
2466
+ ]
2467
+ },
2468
+ option.value
2469
+ );
2470
+ }) })
2471
+ ] })
2472
+ );
2354
2473
  }
2355
2474
  var AspectRatio = ({
2356
2475
  ratio = 1,
@@ -2376,7 +2495,8 @@ function AssistedPasswordConfirmation({
2376
2495
  onConfirmChange,
2377
2496
  onMatch,
2378
2497
  className,
2379
- showHint = true
2498
+ showHint = true,
2499
+ inputLabel = "Confirm password"
2380
2500
  }) {
2381
2501
  const [confirmPassword, setConfirmPassword] = useState("");
2382
2502
  const [shake, setShake] = useState(false);
@@ -2403,7 +2523,7 @@ function AssistedPasswordConfirmation({
2403
2523
  }, [passwordsMatch, confirmPassword.length, onMatch]);
2404
2524
  const getLetterStatus = (letter, index) => {
2405
2525
  if (!confirmPassword[index]) return "";
2406
- return confirmPassword[index] === letter ? "bg-emerald-500/20" : "bg-red-500/20";
2526
+ return confirmPassword[index] === letter ? "bg-success/20" : "bg-destructive/20";
2407
2527
  };
2408
2528
  const bounceAnimation = {
2409
2529
  x: shouldReduceMotion ? 0 : shake ? [-10, 10, -10, 10, 0] : 0,
@@ -2475,7 +2595,7 @@ function AssistedPasswordConfirmation({
2475
2595
  value: confirmPassword,
2476
2596
  onChange: handleConfirmPasswordChange,
2477
2597
  animate: borderAnimation,
2478
- "aria-label": "Confirm password"
2598
+ "aria-label": inputLabel
2479
2599
  }
2480
2600
  )
2481
2601
  }
@@ -2850,7 +2970,7 @@ function AvatarCircles({
2850
2970
  children: /* @__PURE__ */ jsx(
2851
2971
  Image4,
2852
2972
  {
2853
- className: "rounded-full border-2 border-white",
2973
+ className: "rounded-full border-2 border-background",
2854
2974
  src: avatar.imageUrl,
2855
2975
  width: size,
2856
2976
  height: size,
@@ -2886,7 +3006,7 @@ var GitHubIcon = () => /* @__PURE__ */ jsx("svg", { className: "h-3.5 w-3.5 fill
2886
3006
  var GitLabIcon = () => /* @__PURE__ */ jsxs(
2887
3007
  "svg",
2888
3008
  {
2889
- "aria-label": "gitlab",
3009
+ "aria-label": "GitLab",
2890
3010
  height: "14",
2891
3011
  viewBox: "0 0 24 22",
2892
3012
  width: "14",
@@ -3041,20 +3161,65 @@ function DiceBearAvatar({
3041
3161
  /* @__PURE__ */ jsx(AvatarFallback, { size, children: getAvatarInitials(seed) })
3042
3162
  ] });
3043
3163
  }
3044
- var DEFAULT_TOOLTIP_DELAY_MS = 150;
3164
+
3165
+ // src/tokens/components/interaction.ts
3166
+ var interaction = {
3167
+ /**
3168
+ * Tooltips. The first one waits so a sweeping pointer does not strobe;
3169
+ * once one is open, its neighbours open instantly if the pointer arrives
3170
+ * within the skip window. Radix Tooltip defaults: delayDuration 700,
3171
+ * skipDelayDuration 300. Vercel/Kowalski: "delay the first tooltip only".
3172
+ */
3173
+ tooltip: { delayMs: 700, skipWindowMs: 300 }};
3174
+ var DEFAULT_TOOLTIP_DELAY_MS = interaction.tooltip.delayMs;
3175
+ var SKIP_DELAY_WINDOW_MS = interaction.tooltip.skipWindowMs;
3176
+ var lastTooltipOpenAt = 0;
3177
+ var skipDelayListeners = /* @__PURE__ */ new Set();
3178
+ function markTooltipOpened() {
3179
+ lastTooltipOpenAt = Date.now();
3180
+ for (const listener of skipDelayListeners) listener();
3181
+ }
3182
+ function shouldSkipDelay() {
3183
+ return Date.now() - lastTooltipOpenAt < SKIP_DELAY_WINDOW_MS;
3184
+ }
3185
+ function useSkipDelay() {
3186
+ const [, tick] = React45.useReducer((count) => count + 1, 0);
3187
+ React45.useEffect(() => {
3188
+ skipDelayListeners.add(tick);
3189
+ return () => {
3190
+ skipDelayListeners.delete(tick);
3191
+ };
3192
+ }, []);
3193
+ return shouldSkipDelay();
3194
+ }
3195
+ var TooltipInstantContext = React45.createContext(false);
3045
3196
  var TooltipProvider = ({
3046
3197
  children,
3047
3198
  delayDuration = DEFAULT_TOOLTIP_DELAY_MS
3048
3199
  }) => {
3049
- return /* @__PURE__ */ jsx(Tooltip$1.Provider, { delay: delayDuration, children });
3200
+ const skipDelay = useSkipDelay();
3201
+ return /* @__PURE__ */ jsx(Tooltip$1.Provider, { delay: skipDelay ? 0 : delayDuration, children });
3050
3202
  };
3051
3203
  var Tooltip = ({
3052
3204
  delayDuration,
3053
3205
  children,
3206
+ onOpenChange,
3054
3207
  ...props
3055
3208
  }) => {
3056
- const delay = delayDuration ?? DEFAULT_TOOLTIP_DELAY_MS;
3057
- return /* @__PURE__ */ jsx(Tooltip$1.Provider, { delay, children: /* @__PURE__ */ jsx(Tooltip$1.Root, { ...props, children }) });
3209
+ const skipDelay = useSkipDelay();
3210
+ const instant2 = delayDuration == null && skipDelay;
3211
+ const delay = delayDuration ?? (instant2 ? 0 : DEFAULT_TOOLTIP_DELAY_MS);
3212
+ return /* @__PURE__ */ jsx(TooltipInstantContext.Provider, { value: instant2, children: /* @__PURE__ */ jsx(Tooltip$1.Provider, { delay, children: /* @__PURE__ */ jsx(
3213
+ Tooltip$1.Root,
3214
+ {
3215
+ ...props,
3216
+ onOpenChange: (open, eventDetails) => {
3217
+ if (open) markTooltipOpened();
3218
+ onOpenChange?.(open, eventDetails);
3219
+ },
3220
+ children
3221
+ }
3222
+ ) }) });
3058
3223
  };
3059
3224
  var TooltipTrigger = ({
3060
3225
  asChild,
@@ -3084,25 +3249,29 @@ var TooltipContent = ({
3084
3249
  alignOffset = 0,
3085
3250
  ref,
3086
3251
  ...props
3087
- }) => /* @__PURE__ */ jsx(Tooltip$1.Portal, { children: /* @__PURE__ */ jsx(
3088
- Tooltip$1.Positioner,
3089
- {
3090
- side,
3091
- align,
3092
- sideOffset,
3093
- alignOffset,
3094
- style: { zIndex: overlayZIndex.tooltip },
3095
- children: /* @__PURE__ */ jsx(
3096
- Tooltip$1.Popup,
3097
- {
3098
- ref,
3099
- className: cn(overlayClassNames.tooltipSurface, className),
3100
- style: { zIndex: overlayZIndex.tooltip, ...style },
3101
- ...props
3102
- }
3103
- )
3104
- }
3105
- ) });
3252
+ }) => {
3253
+ const instant2 = React45.use(TooltipInstantContext);
3254
+ return /* @__PURE__ */ jsx(Tooltip$1.Portal, { children: /* @__PURE__ */ jsx(
3255
+ Tooltip$1.Positioner,
3256
+ {
3257
+ side,
3258
+ align,
3259
+ sideOffset,
3260
+ alignOffset,
3261
+ style: { zIndex: overlayZIndex.tooltip },
3262
+ children: /* @__PURE__ */ jsx(
3263
+ Tooltip$1.Popup,
3264
+ {
3265
+ ref,
3266
+ className: cn(overlayClassNames.tooltipSurface, className),
3267
+ "data-instant": instant2 || void 0,
3268
+ style: { zIndex: overlayZIndex.tooltip, ...style },
3269
+ ...props
3270
+ }
3271
+ )
3272
+ }
3273
+ ) });
3274
+ };
3106
3275
  TooltipContent.displayName = "TooltipContent";
3107
3276
  function getAvatarUserKey(user) {
3108
3277
  return [user.name, user.role ?? "member", user.image ?? "no-image"].join("|");
@@ -3176,10 +3345,17 @@ function AvatarSmartGroup({
3176
3345
  ) });
3177
3346
  }
3178
3347
  var levelColors = {
3179
- bronze: "from-amber-600 to-amber-800",
3180
- silver: "from-gray-400 to-gray-600",
3181
- gold: "from-yellow-400 to-yellow-600",
3182
- platinum: "from-muted to-muted-foreground"
3348
+ // Bronze, silver and gold are materials, not brand roles: a Brand Package
3349
+ // must not turn a gold medal indigo, so these stay literal.
3350
+ // Each material carries its own ink: the pill used text-primary-foreground,
3351
+ // which flips to near-black with the House ink in dark mode.
3352
+ // allow-palette: medal material colour (bronze) and its ink, not a themeable role
3353
+ bronze: "from-amber-600 to-amber-800 text-white",
3354
+ // allow-palette: medal material colour (silver) and its ink, not a themeable role
3355
+ silver: "from-gray-500 to-gray-700 text-white",
3356
+ // allow-palette: medal material colour (gold) and its ink, not a themeable role
3357
+ gold: "from-yellow-400 to-yellow-600 text-amber-950",
3358
+ platinum: "from-muted to-muted-foreground text-foreground"
3183
3359
  };
3184
3360
  function Awards({
3185
3361
  variant = "badge",
@@ -3244,7 +3420,7 @@ function Awards({
3244
3420
  {
3245
3421
  d: createSerratedPath(),
3246
3422
  strokeWidth: "0.2",
3247
- className: "fill-white stroke-black dark:fill-black"
3423
+ className: "fill-background stroke-foreground"
3248
3424
  }
3249
3425
  ),
3250
3426
  /* @__PURE__ */ jsx(
@@ -3253,17 +3429,17 @@ function Awards({
3253
3429
  cx: "96",
3254
3430
  cy: "96",
3255
3431
  r: "78",
3256
- className: "fill-white stroke-black dark:fill-black",
3432
+ className: "fill-background stroke-foreground",
3257
3433
  strokeWidth: "0.2"
3258
3434
  }
3259
3435
  ),
3260
- /* @__PURE__ */ jsx("text", { className: "fill-white text-xl font-bold", children: /* @__PURE__ */ jsx(
3436
+ /* @__PURE__ */ jsx("text", { className: "fill-background text-xl font-bold", children: /* @__PURE__ */ jsx(
3261
3437
  "textPath",
3262
3438
  {
3263
3439
  href: "#top-curve",
3264
3440
  startOffset: "50%",
3265
3441
  textAnchor: "middle",
3266
- className: "fill-black",
3442
+ className: "fill-foreground",
3267
3443
  children: title
3268
3444
  }
3269
3445
  ) }),
@@ -3273,7 +3449,7 @@ function Awards({
3273
3449
  href: "#bottom-curve",
3274
3450
  startOffset: "50%",
3275
3451
  textAnchor: "middle",
3276
- className: "fill-black",
3452
+ className: "fill-foreground",
3277
3453
  children: subtitle
3278
3454
  }
3279
3455
  ) })
@@ -3318,7 +3494,7 @@ function Awards({
3318
3494
  "div",
3319
3495
  {
3320
3496
  className: cn(
3321
- "mt-6 mb-2 inline-block rounded-[var(--radius-md)] px-4 py-1 tracking-wider text-white",
3497
+ "mt-6 mb-2 inline-block rounded-[var(--radius-md)] px-4 py-1 tracking-wider",
3322
3498
  `bg-gradient-to-r ${levelColors[level]}`
3323
3499
  ),
3324
3500
  children: level.toUpperCase()
@@ -3824,7 +4000,7 @@ var baseBadgeVariants = cva(
3824
4000
  {
3825
4001
  variant: "destructive",
3826
4002
  appearance: "ghost",
3827
- className: "text-destructive"
4003
+ className: "text-destructive-strong"
3828
4004
  },
3829
4005
  { size: "lg", appearance: "ghost", className: "px-0" },
3830
4006
  { size: "md", appearance: "ghost", className: "px-0" },
@@ -3942,379 +4118,6 @@ function BaseBadge({
3942
4118
  });
3943
4119
  return element;
3944
4120
  }
3945
- var baseButtonVariants = cva(
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",
3947
- {
3948
- variants: {
3949
- variant: {
3950
- primary: "bg-primary text-primary-foreground hover:bg-primary/90 data-[state=open]:bg-primary/90",
3951
- mono: "bg-foreground text-background hover:bg-foreground/90 data-[state=open]:bg-foreground/90",
3952
- destructive: "bg-destructive text-destructive-foreground hover:bg-destructive/90 data-[state=open]:bg-destructive/90",
3953
- secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/90 data-[state=open]:bg-secondary/90",
3954
- outline: "bg-background text-accent-foreground border border-input hover:bg-accent data-[state=open]:bg-accent",
3955
- dashed: "text-accent-foreground border border-input border-dashed bg-background hover:bg-accent hover:text-accent-foreground data-[state=open]:text-accent-foreground",
3956
- ghost: "text-accent-foreground hover:bg-accent hover:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground",
3957
- dim: "text-muted-foreground hover:text-foreground data-[state=open]:text-foreground",
3958
- foreground: "",
3959
- inverse: ""
3960
- },
3961
- appearance: {
3962
- default: "",
3963
- ghost: ""
3964
- },
3965
- underline: {
3966
- solid: "",
3967
- dashed: ""
3968
- },
3969
- underlined: {
3970
- solid: "",
3971
- dashed: ""
3972
- },
3973
- size: {
3974
- lg: "h-10 rounded-[var(--radius-md)] px-4 text-sm gap-1.5 [&_svg:not([class*=size-])]:size-4",
3975
- md: "h-8.5 rounded-[var(--radius-md)] px-3 gap-1.5 text-[0.8125rem] leading-(--text-sm--line-height) [&_svg:not([class*=size-])]:size-4",
3976
- sm: "h-7 rounded-[var(--radius-md)] px-2.5 gap-1.25 text-xs [&_svg:not([class*=size-])]:size-3.5",
3977
- icon: "size-8.5 rounded-[var(--radius-md)] [&_svg:not([class*=size-])]:size-4 shrink-0"
3978
- },
3979
- autoHeight: {
3980
- true: "",
3981
- false: ""
3982
- },
3983
- shape: {
3984
- default: "",
3985
- circle: "rounded-full"
3986
- },
3987
- mode: {
3988
- default: "",
3989
- icon: "",
3990
- link: "text-primary h-auto p-0 bg-transparent rounded-none hover:bg-transparent data-[state=open]:bg-transparent",
3991
- input: `
3992
- justify-start font-normal hover:bg-background [&_svg]:transition-colors [&_svg]:hover:text-foreground data-[state=open]:bg-background
3993
- focus-visible:border-ring
3994
- [[data-state=open]>&]:border-ring [[data-state=open]>&]:outline-none [[data-state=open]>&]:ring-[3px]
3995
- [[data-state=open]>&]:ring-ring/30
3996
- aria-invalid:border-destructive/60 aria-invalid:ring-destructive/10 dark:aria-invalid:border-destructive dark:aria-invalid:ring-destructive/20
3997
- in-data-[invalid=true]:border-destructive/60 in-data-[invalid=true]:ring-destructive/10 dark:in-data-[invalid=true]:border-destructive dark:in-data-[invalid=true]:ring-destructive/20
3998
- `
3999
- },
4000
- placeholder: {
4001
- true: "text-muted-foreground",
4002
- false: ""
4003
- }
4004
- },
4005
- compoundVariants: [
4006
- {
4007
- variant: "ghost",
4008
- mode: "default",
4009
- className: "[&_svg:not([role=img]):not([class*=text-]):not([class*=opacity-])]:opacity-60"
4010
- },
4011
- {
4012
- variant: "outline",
4013
- mode: "default",
4014
- className: "[&_svg:not([role=img]):not([class*=text-]):not([class*=opacity-])]:opacity-60"
4015
- },
4016
- {
4017
- variant: "dashed",
4018
- mode: "default",
4019
- className: "[&_svg:not([role=img]):not([class*=text-]):not([class*=opacity-])]:opacity-60"
4020
- },
4021
- {
4022
- variant: "secondary",
4023
- mode: "default",
4024
- className: "[&_svg:not([role=img]):not([class*=text-]):not([class*=opacity-])]:opacity-60"
4025
- },
4026
- {
4027
- variant: "outline",
4028
- mode: "input",
4029
- className: "[&_svg:not([role=img]):not([class*=text-]):not([class*=opacity-])]:opacity-60"
4030
- },
4031
- {
4032
- variant: "outline",
4033
- mode: "icon",
4034
- className: "[&_svg:not([role=img]):not([class*=text-]):not([class*=opacity-])]:opacity-60"
4035
- },
4036
- {
4037
- size: "md",
4038
- autoHeight: true,
4039
- className: "h-auto min-h-8.5"
4040
- },
4041
- {
4042
- size: "sm",
4043
- autoHeight: true,
4044
- className: "h-auto min-h-7"
4045
- },
4046
- {
4047
- size: "lg",
4048
- autoHeight: true,
4049
- className: "h-auto min-h-10"
4050
- },
4051
- {
4052
- variant: "primary",
4053
- mode: "default",
4054
- appearance: "default",
4055
- className: "shadow-xs"
4056
- },
4057
- {
4058
- variant: "mono",
4059
- mode: "default",
4060
- appearance: "default",
4061
- className: "shadow-xs"
4062
- },
4063
- {
4064
- variant: "secondary",
4065
- mode: "default",
4066
- appearance: "default",
4067
- className: "shadow-xs"
4068
- },
4069
- {
4070
- variant: "outline",
4071
- mode: "default",
4072
- appearance: "default",
4073
- className: "shadow-xs"
4074
- },
4075
- {
4076
- variant: "dashed",
4077
- mode: "default",
4078
- appearance: "default",
4079
- className: "shadow-xs"
4080
- },
4081
- {
4082
- variant: "destructive",
4083
- mode: "default",
4084
- appearance: "default",
4085
- className: "shadow-xs"
4086
- },
4087
- {
4088
- variant: "primary",
4089
- mode: "icon",
4090
- appearance: "default",
4091
- className: "shadow-xs"
4092
- },
4093
- {
4094
- variant: "mono",
4095
- mode: "icon",
4096
- appearance: "default",
4097
- className: "shadow-xs"
4098
- },
4099
- {
4100
- variant: "secondary",
4101
- mode: "icon",
4102
- appearance: "default",
4103
- className: "shadow-xs"
4104
- },
4105
- {
4106
- variant: "outline",
4107
- mode: "icon",
4108
- appearance: "default",
4109
- className: "shadow-xs"
4110
- },
4111
- {
4112
- variant: "dashed",
4113
- mode: "icon",
4114
- appearance: "default",
4115
- className: "shadow-xs"
4116
- },
4117
- {
4118
- variant: "destructive",
4119
- mode: "icon",
4120
- appearance: "default",
4121
- className: "shadow-xs"
4122
- },
4123
- {
4124
- variant: "primary",
4125
- mode: "link",
4126
- underline: "solid",
4127
- className: "font-medium text-primary hover:text-primary/90 [&_svg:not([role=img]):not([class*=text-])]:opacity-60 hover:underline hover:underline-offset-4 hover:decoration-solid"
4128
- },
4129
- {
4130
- variant: "primary",
4131
- mode: "link",
4132
- underline: "dashed",
4133
- className: "font-medium text-primary hover:text-primary/90 [&_svg]:opacity-60 hover:underline hover:underline-offset-4 hover:decoration-dashed decoration-1"
4134
- },
4135
- {
4136
- variant: "primary",
4137
- mode: "link",
4138
- underlined: "solid",
4139
- className: "font-medium text-primary hover:text-primary/90 [&_svg:not([role=img]):not([class*=text-])]:opacity-60 underline underline-offset-4 decoration-solid"
4140
- },
4141
- {
4142
- variant: "primary",
4143
- mode: "link",
4144
- underlined: "dashed",
4145
- className: "font-medium text-primary hover:text-primary/90 [&_svg]:opacity-60 underline underline-offset-4 decoration-dashed decoration-1"
4146
- },
4147
- {
4148
- variant: "inverse",
4149
- mode: "link",
4150
- underline: "solid",
4151
- className: "font-medium text-inherit [&_svg:not([role=img]):not([class*=text-])]:opacity-60 hover:underline hover:underline-offset-4 hover:decoration-solid"
4152
- },
4153
- {
4154
- variant: "inverse",
4155
- mode: "link",
4156
- underline: "dashed",
4157
- className: "font-medium text-inherit [&_svg:not([role=img]):not([class*=text-])]:opacity-60 hover:underline hover:underline-offset-4 hover:decoration-dashed decoration-1"
4158
- },
4159
- {
4160
- variant: "inverse",
4161
- mode: "link",
4162
- underlined: "solid",
4163
- className: "font-medium text-inherit [&_svg:not([role=img]):not([class*=text-])]:opacity-60 underline underline-offset-4 decoration-solid"
4164
- },
4165
- {
4166
- variant: "inverse",
4167
- mode: "link",
4168
- underlined: "dashed",
4169
- className: "font-medium text-inherit [&_svg:not([role=img]):not([class*=text-])]:opacity-60 underline underline-offset-4 decoration-dashed decoration-1"
4170
- },
4171
- {
4172
- variant: "foreground",
4173
- mode: "link",
4174
- underline: "solid",
4175
- className: "font-medium text-foreground [&_svg:not([role=img]):not([class*=text-])]:opacity-60 hover:underline hover:underline-offset-4 hover:decoration-solid"
4176
- },
4177
- {
4178
- variant: "foreground",
4179
- mode: "link",
4180
- underline: "dashed",
4181
- className: "font-medium text-foreground [&_svg:not([role=img]):not([class*=text-])]:opacity-60 hover:underline hover:underline-offset-4 hover:decoration-dashed decoration-1"
4182
- },
4183
- {
4184
- variant: "foreground",
4185
- mode: "link",
4186
- underlined: "solid",
4187
- className: "font-medium text-foreground [&_svg:not([role=img]):not([class*=text-])]:opacity-60 underline underline-offset-4 decoration-solid"
4188
- },
4189
- {
4190
- variant: "foreground",
4191
- mode: "link",
4192
- underlined: "dashed",
4193
- className: "font-medium text-foreground [&_svg:not([role=img]):not([class*=text-])]:opacity-60 underline underline-offset-4 decoration-dashed decoration-1"
4194
- },
4195
- {
4196
- variant: "primary",
4197
- appearance: "ghost",
4198
- className: "bg-transparent text-primary/90 hover:bg-primary/5 data-[state=open]:bg-primary/5"
4199
- },
4200
- {
4201
- variant: "destructive",
4202
- appearance: "ghost",
4203
- className: "bg-transparent text-destructive/90 hover:bg-destructive/5 data-[state=open]:bg-destructive/5"
4204
- },
4205
- {
4206
- variant: "ghost",
4207
- mode: "icon",
4208
- className: "text-muted-foreground"
4209
- },
4210
- {
4211
- size: "sm",
4212
- mode: "icon",
4213
- className: "w-7 h-7 p-0 [[&_svg:not([class*=size-])]:size-3.5"
4214
- },
4215
- {
4216
- size: "md",
4217
- mode: "icon",
4218
- className: "w-8.5 h-8.5 p-0 [&_svg:not([class*=size-])]:size-4"
4219
- },
4220
- {
4221
- size: "icon",
4222
- className: "w-8.5 h-8.5 p-0 [&_svg:not([class*=size-])]:size-4"
4223
- },
4224
- {
4225
- size: "lg",
4226
- mode: "icon",
4227
- className: "w-10 h-10 p-0 [&_svg:not([class*=size-])]:size-4"
4228
- },
4229
- {
4230
- mode: "input",
4231
- placeholder: true,
4232
- variant: "outline",
4233
- className: "font-normal text-muted-foreground"
4234
- },
4235
- {
4236
- mode: "input",
4237
- variant: "outline",
4238
- size: "sm",
4239
- className: "gap-1.25"
4240
- },
4241
- {
4242
- mode: "input",
4243
- variant: "outline",
4244
- size: "md",
4245
- className: "gap-1.5"
4246
- },
4247
- {
4248
- mode: "input",
4249
- variant: "outline",
4250
- size: "lg",
4251
- className: "gap-1.5"
4252
- }
4253
- ],
4254
- defaultVariants: {
4255
- variant: "primary",
4256
- mode: "default",
4257
- size: "md",
4258
- shape: "default",
4259
- appearance: "default"
4260
- }
4261
- }
4262
- );
4263
- function BaseButton({
4264
- render,
4265
- asChild = false,
4266
- children,
4267
- className,
4268
- selected,
4269
- variant,
4270
- shape,
4271
- appearance,
4272
- mode,
4273
- size,
4274
- autoHeight,
4275
- underlined,
4276
- underline,
4277
- placeholder = false,
4278
- ...props
4279
- }) {
4280
- const controlLabelProps = getControlLabelProps({
4281
- children,
4282
- fallbackLabel: "Button",
4283
- label: props["aria-label"],
4284
- labelledBy: props["aria-labelledby"],
4285
- title: props.title
4286
- });
4287
- const defaultProps = {
4288
- ...controlLabelProps,
4289
- "data-slot": "button",
4290
- className: cn(
4291
- baseButtonVariants({
4292
- variant,
4293
- size,
4294
- shape,
4295
- appearance,
4296
- mode,
4297
- autoHeight,
4298
- placeholder,
4299
- underlined,
4300
- underline,
4301
- className
4302
- }),
4303
- asChild && props.disabled && "pointer-events-none opacity-50"
4304
- ),
4305
- ...selected && { "data-state": "open" }
4306
- };
4307
- const renderElement = asChild && React45.isValidElement(children) ? children : render || /* @__PURE__ */ jsx("button", { type: "button", "aria-label": controlLabelProps["aria-label"] });
4308
- const finalProps = asChild && React45.isValidElement(children) ? mergeProps(defaultProps, props) : mergeProps(defaultProps, { ...props, children });
4309
- const element = useRender({
4310
- render: renderElement,
4311
- props: finalProps
4312
- });
4313
- return element;
4314
- }
4315
- function BaseButtonArrow({ icon: Icon = ChevronDown, className, ...props }) {
4316
- return /* @__PURE__ */ jsx(Icon, { "data-slot": "button-arrow", className: cn("ms-auto -me-1", className), ...props });
4317
- }
4318
4121
  var Slot = React45.forwardRef(
4319
4122
  ({ children, className, style, ...props }, ref) => {
4320
4123
  const childArray = React45.Children.toArray(children);
@@ -4359,10 +4162,10 @@ function Spinner({ className }) {
4359
4162
  }
4360
4163
  );
4361
4164
  }
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";
4165
+ function getIconSizeClass(size, iconSize3) {
4166
+ if (iconSize3 === "sm") return "[&>svg]:size-3.5";
4167
+ if (iconSize3 === "md") return "[&>svg]:size-3.5";
4168
+ if (iconSize3 === "lg") return "[&>svg]:size-4";
4366
4169
  switch (size) {
4367
4170
  case "tiny":
4368
4171
  return "[&>svg]:size-3";
@@ -4377,10 +4180,10 @@ function getIconSizeClass(size, iconSize2) {
4377
4180
  return "[&>svg]:size-4";
4378
4181
  }
4379
4182
  }
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";
4183
+ function getSpinnerSizeClass(size, iconSize3) {
4184
+ if (iconSize3 === "sm") return "size-3.5";
4185
+ if (iconSize3 === "md") return "size-3.5";
4186
+ if (iconSize3 === "lg") return "size-4";
4384
4187
  switch (size) {
4385
4188
  case "tiny":
4386
4189
  return "size-3";
@@ -4405,10 +4208,10 @@ function resolveShadowClass(shadow) {
4405
4208
  const level = shadow === true ? "md" : shadow;
4406
4209
  return SHADOW_CLASSES[level];
4407
4210
  }
4408
- function ButtonContent({ loading, prefix, suffix, size, iconSize: iconSize2, children }) {
4409
- const iconSizeClass = getIconSizeClass(size, iconSize2);
4211
+ function ButtonContent({ loading, prefix, suffix, size, iconSize: iconSize3, children }) {
4212
+ const iconSizeClass = getIconSizeClass(size, iconSize3);
4410
4213
  return /* @__PURE__ */ jsxs(Fragment, { children: [
4411
- loading && /* @__PURE__ */ jsx(Spinner, { className: getSpinnerSizeClass(size, iconSize2) }),
4214
+ loading && /* @__PURE__ */ jsx(Spinner, { className: getSpinnerSizeClass(size, iconSize3) }),
4412
4215
  prefix != null && /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: cn("shrink-0", iconSizeClass), children: prefix }),
4413
4216
  children,
4414
4217
  suffix != null && /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: cn("shrink-0", iconSizeClass), children: suffix })
@@ -4419,7 +4222,7 @@ var Button = ({
4419
4222
  variant,
4420
4223
  size,
4421
4224
  shape,
4422
- iconSize: iconSize2,
4225
+ iconSize: iconSize3,
4423
4226
  asChild = false,
4424
4227
  loading = false,
4425
4228
  disabled,
@@ -4437,7 +4240,7 @@ var Button = ({
4437
4240
  Comp,
4438
4241
  {
4439
4242
  ref,
4440
- className: cn(buttonVariants({ variant, size, shape, iconSize: iconSize2 }), shadowClass, className),
4243
+ className: cn(buttonVariants({ variant, size, shape, iconSize: iconSize3 }), shadowClass, className),
4441
4244
  disabled: isDisabled,
4442
4245
  "aria-busy": loading || void 0,
4443
4246
  ...props,
@@ -4448,7 +4251,7 @@ var Button = ({
4448
4251
  prefix,
4449
4252
  suffix,
4450
4253
  size,
4451
- iconSize: iconSize2,
4254
+ iconSize: iconSize3,
4452
4255
  children
4453
4256
  }
4454
4257
  )
@@ -4461,7 +4264,7 @@ var ButtonLink = ({
4461
4264
  variant,
4462
4265
  size,
4463
4266
  shape,
4464
- iconSize: iconSize2,
4267
+ iconSize: iconSize3,
4465
4268
  prefix,
4466
4269
  suffix,
4467
4270
  shadow,
@@ -4481,7 +4284,7 @@ var ButtonLink = ({
4481
4284
  {
4482
4285
  ref,
4483
4286
  className: cn(
4484
- buttonVariants({ variant, size, shape, iconSize: iconSize2 }),
4287
+ buttonVariants({ variant, size, shape, iconSize: iconSize3 }),
4485
4288
  shadowClass,
4486
4289
  loading && "pointer-events-none opacity-50",
4487
4290
  className
@@ -4495,7 +4298,7 @@ var ButtonLink = ({
4495
4298
  prefix,
4496
4299
  suffix,
4497
4300
  size,
4498
- iconSize: iconSize2,
4301
+ iconSize: iconSize3,
4499
4302
  children
4500
4303
  }
4501
4304
  )
@@ -4542,21 +4345,21 @@ var BentoCard = ({
4542
4345
  children: [
4543
4346
  /* @__PURE__ */ jsx("div", { children: background }),
4544
4347
  /* @__PURE__ */ jsxs("div", { className: "p-4", children: [
4545
- /* @__PURE__ */ jsxs("div", { className: "pointer-events-none z-10 flex transform-gpu flex-col gap-1 transition-[background-color,border-color,box-shadow,color,opacity,transform] duration-300 lg:group-hover:-translate-y-10", children: [
4546
- /* @__PURE__ */ jsx(IconComponent, { className: "h-12 w-12 origin-left transform-gpu text-muted-foreground transition-[background-color,border-color,box-shadow,color,opacity,transform] duration-300 ease-in-out group-hover:scale-75" }),
4348
+ /* @__PURE__ */ jsxs("div", { className: "pointer-events-none z-10 flex transform-gpu flex-col gap-1 transition-[background-color,border-color,box-shadow,color,opacity,transform] duration-reveal lg:group-hover:-translate-y-10", children: [
4349
+ /* @__PURE__ */ jsx(IconComponent, { className: "h-12 w-12 origin-left transform-gpu text-muted-foreground transition-[background-color,border-color,box-shadow,color,opacity,transform] duration-reveal ease-[var(--ease-brand)] group-hover:scale-75" }),
4547
4350
  /* @__PURE__ */ jsx("h3", { className: "text-xl font-semibold text-foreground", children: name }),
4548
4351
  /* @__PURE__ */ jsx("p", { className: "max-w-lg text-muted-foreground", children: description })
4549
4352
  ] }),
4550
- href && /* @__PURE__ */ jsx("div", { className: "pointer-events-none flex w-full translate-y-0 transform-gpu flex-row items-center transition-[background-color,border-color,box-shadow,color,opacity,transform] duration-300 group-hover:translate-y-0 group-hover:opacity-100 lg:hidden", children: /* @__PURE__ */ jsx(Button, { variant: "link", asChild: true, size: "sm", className: "pointer-events-auto p-0", children: /* @__PURE__ */ jsxs("a", { href, children: [
4353
+ href && /* @__PURE__ */ jsx("div", { className: "pointer-events-none flex w-full translate-y-0 transform-gpu flex-row items-center transition-[background-color,border-color,box-shadow,color,opacity,transform] duration-reveal group-hover:translate-y-0 group-hover:opacity-100 lg:hidden", children: /* @__PURE__ */ jsx(Button, { variant: "link", asChild: true, size: "sm", className: "pointer-events-auto p-0", children: /* @__PURE__ */ jsxs("a", { href, children: [
4551
4354
  cta,
4552
4355
  /* @__PURE__ */ jsx(ArrowRight, { className: "ms-2 h-4 w-4 rtl:rotate-180" })
4553
4356
  ] }) }) })
4554
4357
  ] }),
4555
- href && /* @__PURE__ */ jsx("div", { className: "pointer-events-none absolute bottom-0 hidden w-full translate-y-10 transform-gpu flex-row items-center p-4 opacity-0 transition-[background-color,border-color,box-shadow,color,opacity,transform] duration-300 group-hover:translate-y-0 group-hover:opacity-100 lg:flex", children: /* @__PURE__ */ jsx(Button, { variant: "link", asChild: true, size: "sm", className: "pointer-events-auto p-0", children: /* @__PURE__ */ jsxs("a", { href, children: [
4358
+ href && /* @__PURE__ */ jsx("div", { className: "pointer-events-none absolute bottom-0 hidden w-full translate-y-10 transform-gpu flex-row items-center p-4 opacity-0 transition-[background-color,border-color,box-shadow,color,opacity,transform] duration-reveal group-hover:translate-y-0 group-hover:opacity-100 lg:flex", children: /* @__PURE__ */ jsx(Button, { variant: "link", asChild: true, size: "sm", className: "pointer-events-auto p-0", children: /* @__PURE__ */ jsxs("a", { href, children: [
4556
4359
  cta,
4557
4360
  /* @__PURE__ */ jsx(ArrowRight, { className: "ms-2 h-4 w-4 rtl:rotate-180" })
4558
4361
  ] }) }) }),
4559
- /* @__PURE__ */ jsx("div", { className: "pointer-events-none absolute inset-0 transform-gpu transition-[background-color,border-color,box-shadow,color,opacity,transform] duration-300 group-hover:bg-black/[.03] group-hover:dark:bg-muted/50" })
4362
+ /* @__PURE__ */ jsx("div", { className: "pointer-events-none absolute inset-0 transform-gpu transition-[background-color,border-color,box-shadow,color,opacity,transform] duration-reveal group-hover:bg-foreground/[.03]" })
4560
4363
  ]
4561
4364
  }
4562
4365
  );
@@ -4975,8 +4778,9 @@ function DefaultGlyph({ className }) {
4975
4778
  }
4976
4779
  var Breadcrumb = ({
4977
4780
  ref,
4781
+ "aria-label": ariaLabel = "breadcrumb",
4978
4782
  ...props
4979
- }) => /* @__PURE__ */ jsx("nav", { ref, "aria-label": "breadcrumb", ...props });
4783
+ }) => /* @__PURE__ */ jsx("nav", { ref, "aria-label": ariaLabel, ...props });
4980
4784
  Breadcrumb.displayName = "Breadcrumb";
4981
4785
  var BreadcrumbList = ({
4982
4786
  className,
@@ -5586,6 +5390,128 @@ function useBulkSelection({
5586
5390
  selectItems
5587
5391
  };
5588
5392
  }
5393
+
5394
+ // src/tokens/components/calendar.ts
5395
+ var calendarTokens = {
5396
+ /** Square day cell. Matches the `sm` control height so a month reads as a form row grid. */
5397
+ cellSize: primitiveSizing.sm,
5398
+ cellRadius: primitiveRadius.md,
5399
+ cellFontSize: primitiveFontSize.sm,
5400
+ weekdayFontSize: primitiveFontSize.xs,
5401
+ captionFontSize: primitiveFontSize.sm,
5402
+ navButtonSize: primitiveSizing.tiny,
5403
+ navIconSize: primitiveFontSize.base,
5404
+ padding: primitiveSpacing[3],
5405
+ /** Gap between side-by-side months when `numberOfMonths > 1`. */
5406
+ monthGap: primitiveSpacing[4],
5407
+ captionGap: primitiveSpacing[2]
5408
+ };
5409
+ function getCalendarStyle(style) {
5410
+ return {
5411
+ "--calendar-cell-size": `${calendarTokens.cellSize}px`,
5412
+ "--calendar-cell-radius": `${calendarTokens.cellRadius}px`,
5413
+ "--calendar-cell-font-size": `${calendarTokens.cellFontSize}px`,
5414
+ "--calendar-weekday-font-size": `${calendarTokens.weekdayFontSize}px`,
5415
+ "--calendar-caption-font-size": `${calendarTokens.captionFontSize}px`,
5416
+ "--calendar-nav-button-size": `${calendarTokens.navButtonSize}px`,
5417
+ "--calendar-nav-icon-size": `${calendarTokens.navIconSize}px`,
5418
+ "--calendar-padding": `${calendarTokens.padding}px`,
5419
+ "--calendar-month-gap": `${calendarTokens.monthGap}px`,
5420
+ "--calendar-caption-gap": `${calendarTokens.captionGap}px`,
5421
+ ...style
5422
+ };
5423
+ }
5424
+ var navButtonClassName = cn(
5425
+ "inline-flex size-[var(--calendar-nav-button-size)] items-center justify-center",
5426
+ "rounded-[var(--calendar-cell-radius)] text-muted-foreground",
5427
+ "transition-colors duration-micro ease-out",
5428
+ "hover:bg-accent hover:text-accent-foreground",
5429
+ "aria-disabled:pointer-events-none aria-disabled:opacity-40",
5430
+ "[&_svg]:size-[var(--calendar-nav-icon-size)]"
5431
+ );
5432
+ function CalendarDayButton({ day: _day, modifiers, className, ...props }) {
5433
+ const isRangeMiddle = Boolean(modifiers.range_middle);
5434
+ const isEndpoint = Boolean(modifiers.range_start) || Boolean(modifiers.range_end);
5435
+ const isPill = Boolean(modifiers.selected) && !isRangeMiddle;
5436
+ return /* @__PURE__ */ jsx(
5437
+ "button",
5438
+ {
5439
+ type: "button",
5440
+ "data-slot": "calendar-day-button",
5441
+ className: cn(
5442
+ "relative flex size-[var(--calendar-cell-size)] items-center justify-center",
5443
+ "text-[length:var(--calendar-cell-font-size)] font-normal tabular-nums",
5444
+ "transition-colors duration-micro ease-out",
5445
+ // No focus ring here: the unlayered global `:focus-visible` rule in
5446
+ // design-tokens/static/base.css already outranks Tailwind utilities.
5447
+ "disabled:pointer-events-none disabled:opacity-40",
5448
+ // A middle day must not round, or the band it sits in breaks into beads.
5449
+ isRangeMiddle ? "rounded-none" : "rounded-[var(--calendar-cell-radius)]",
5450
+ isPill && "bg-primary font-medium text-primary-foreground hover:bg-primary",
5451
+ isRangeMiddle && "bg-transparent text-accent-foreground hover:bg-accent/60",
5452
+ !isPill && !isRangeMiddle && "text-foreground hover:bg-accent hover:text-accent-foreground",
5453
+ // Today reads as an outline so it survives being selected on top of it.
5454
+ Boolean(modifiers.today) && !isPill && "font-medium text-primary",
5455
+ Boolean(modifiers.outside) && !isPill && "text-muted-foreground/60",
5456
+ isEndpoint && "z-10",
5457
+ className
5458
+ ),
5459
+ ...props
5460
+ }
5461
+ );
5462
+ }
5463
+ function CalendarChevron({ orientation, className, ...props }) {
5464
+ const Icon = orientation === "left" ? ChevronLeft : ChevronRight;
5465
+ return /* @__PURE__ */ jsx(Icon, { "aria-hidden": "true", className: cn("shrink-0", className), ...props });
5466
+ }
5467
+ function Calendar({
5468
+ className,
5469
+ classNames,
5470
+ showOutsideDays = true,
5471
+ style,
5472
+ ...props
5473
+ }) {
5474
+ return /* @__PURE__ */ jsx(
5475
+ DayPicker,
5476
+ {
5477
+ "data-slot": "calendar",
5478
+ showOutsideDays,
5479
+ className: cn("p-[var(--calendar-padding)] text-foreground", className),
5480
+ style: getCalendarStyle(style),
5481
+ classNames: {
5482
+ [UI.Months]: "relative flex flex-col gap-[var(--calendar-month-gap)] sm:flex-row",
5483
+ [UI.Month]: "flex flex-col gap-[var(--calendar-caption-gap)]",
5484
+ [UI.MonthCaption]: "flex h-[var(--calendar-nav-button-size)] items-center justify-center",
5485
+ [UI.CaptionLabel]: "select-none text-[length:var(--calendar-caption-font-size)] font-medium text-foreground",
5486
+ [UI.Nav]: "absolute inset-x-0 top-0 z-10 flex items-center justify-between",
5487
+ [UI.PreviousMonthButton]: navButtonClassName,
5488
+ [UI.NextMonthButton]: navButtonClassName,
5489
+ [UI.MonthGrid]: "w-full border-collapse",
5490
+ [UI.Weekdays]: "flex",
5491
+ [UI.Weekday]: "w-[var(--calendar-cell-size)] select-none pb-1 text-[length:var(--calendar-weekday-font-size)] font-normal text-muted-foreground",
5492
+ [UI.Week]: "mt-0.5 flex w-full",
5493
+ // The cell carries the connective band; the button carries the pill.
5494
+ [UI.Day]: "relative p-0 text-center",
5495
+ [SelectionState.range_start]: "rounded-l-[var(--calendar-cell-radius)] bg-accent [&:has(+td[data-selected])]:rounded-r-none",
5496
+ [SelectionState.range_middle]: "bg-accent",
5497
+ [SelectionState.range_end]: "rounded-r-[var(--calendar-cell-radius)] bg-accent",
5498
+ [DayFlag.outside]: "text-muted-foreground/60",
5499
+ [DayFlag.disabled]: "opacity-40",
5500
+ [DayFlag.hidden]: "invisible",
5501
+ [UI.WeekNumber]: "w-[var(--calendar-cell-size)] select-none text-[length:var(--calendar-weekday-font-size)] text-muted-foreground",
5502
+ [UI.WeekNumberHeader]: "w-[var(--calendar-cell-size)]",
5503
+ [UI.Footer]: "pt-2 text-center text-xs text-muted-foreground",
5504
+ ...classNames
5505
+ },
5506
+ components: {
5507
+ Chevron: CalendarChevron,
5508
+ DayButton: CalendarDayButton
5509
+ },
5510
+ ...props
5511
+ }
5512
+ );
5513
+ }
5514
+ Calendar.displayName = "Calendar";
5589
5515
  function CanvasRevealEffect({
5590
5516
  animationSpeed = 0.4,
5591
5517
  opacities = [0.3, 0.3, 0.3, 0.5, 0.5, 0.5, 0.8, 0.8, 0.8, 1],
@@ -5594,7 +5520,7 @@ function CanvasRevealEffect({
5594
5520
  dotSize = 3,
5595
5521
  showGradient = true
5596
5522
  }) {
5597
- return /* @__PURE__ */ jsxs("div", { className: cn("h-full relative bg-white w-full", containerClassName), children: [
5523
+ return /* @__PURE__ */ jsxs("div", { className: cn("h-full relative bg-background w-full", containerClassName), children: [
5598
5524
  /* @__PURE__ */ jsx("div", { className: "h-full w-full", children: /* @__PURE__ */ jsx(
5599
5525
  DotMatrix,
5600
5526
  {
@@ -5610,7 +5536,7 @@ function CanvasRevealEffect({
5610
5536
  center: ["x", "y"]
5611
5537
  }
5612
5538
  ) }),
5613
- showGradient && /* @__PURE__ */ jsx("div", { className: "absolute inset-0 bg-gradient-to-t from-gray-950 to-[84%]" })
5539
+ showGradient && /* @__PURE__ */ jsx("div", { className: "absolute inset-0 bg-gradient-to-t from-background to-[84%]" })
5614
5540
  ] });
5615
5541
  }
5616
5542
  CanvasRevealEffect.displayName = "CanvasRevealEffect";
@@ -5780,68 +5706,119 @@ function ShaderMaterial2({ source, uniforms, maxFps = 60 }) {
5780
5706
  function Shader({ source, uniforms, maxFps = 60 }) {
5781
5707
  return /* @__PURE__ */ jsx(Canvas, { className: "absolute inset-0 h-full w-full", children: /* @__PURE__ */ jsx(ShaderMaterial2, { source, uniforms, maxFps }) });
5782
5708
  }
5783
- var Card = ({
5709
+ var cardVariants = cva(
5710
+ "rounded-[var(--radius-card,var(--radius-lg))] text-card-foreground transition-[box-shadow,background-color] duration-micro",
5711
+ {
5712
+ variants: {
5713
+ variant: {
5714
+ default: "bg-card shadow-[var(--elevation-card)] ring-1 ring-[var(--edge-soft)]",
5715
+ elevated: "bg-card shadow-ambient-md ring-1 ring-[var(--edge-soft)]",
5716
+ outline: "bg-transparent ring-1 ring-border",
5717
+ ghost: "bg-transparent"
5718
+ },
5719
+ padding: {
5720
+ none: "",
5721
+ sm: "p-4",
5722
+ md: "p-6",
5723
+ lg: "p-8"
5724
+ },
5725
+ interactive: {
5726
+ true: "cursor-pointer hover:shadow-ambient-md",
5727
+ false: ""
5728
+ }
5729
+ },
5730
+ defaultVariants: { variant: "default", padding: "none", interactive: false }
5731
+ }
5732
+ );
5733
+ var CardPaddedContext = React45.createContext(false);
5734
+ var CardRoot = ({
5784
5735
  className,
5736
+ variant,
5737
+ padding = "none",
5738
+ interactive,
5785
5739
  ref,
5786
5740
  ...props
5787
- }) => /* @__PURE__ */ jsx(
5741
+ }) => /* @__PURE__ */ jsx(CardPaddedContext.Provider, { value: padding !== "none", children: /* @__PURE__ */ jsx(
5788
5742
  "div",
5789
5743
  {
5790
5744
  ref,
5791
- className: cn(
5792
- "rounded-[var(--radius-lg)] border border-border bg-card text-card-foreground shadow-sm",
5793
- className
5794
- ),
5745
+ className: cn(cardVariants({ variant, padding, interactive }), className),
5795
5746
  ...props
5796
5747
  }
5797
- );
5798
- Card.displayName = "Card";
5799
- var CardHeader = ({
5800
- className,
5801
- ref,
5802
- ...props
5803
- }) => /* @__PURE__ */ jsx("div", { ref, className: cn("flex flex-col space-y-1.5 p-6", className), ...props });
5748
+ ) });
5749
+ CardRoot.displayName = "Card";
5750
+ var CardHeader = ({ className, ref, ...props }) => {
5751
+ const padded = React45.use(CardPaddedContext);
5752
+ return /* @__PURE__ */ jsx(
5753
+ "div",
5754
+ {
5755
+ ref,
5756
+ className: cn("flex flex-col gap-1.5", !padded && "p-6", className),
5757
+ ...props
5758
+ }
5759
+ );
5760
+ };
5804
5761
  CardHeader.displayName = "CardHeader";
5805
- var CardTitle = ({
5806
- className,
5807
- children,
5808
- ref,
5809
- ...props
5810
- }) => /* @__PURE__ */ jsx(
5811
- "h3",
5762
+ var CardTitle = ({ className, as: Tag = "h3", ref, ...props }) => /* @__PURE__ */ jsx(
5763
+ Tag,
5812
5764
  {
5813
5765
  ref,
5814
- className: cn("text-2xl font-semibold leading-none tracking-tight", className),
5815
- ...props,
5816
- children
5766
+ className: cn("text-lg font-semibold leading-tight tracking-tight text-foreground", className),
5767
+ ...props
5817
5768
  }
5818
5769
  );
5819
5770
  CardTitle.displayName = "CardTitle";
5820
- var CardDescription = ({
5821
- className,
5822
- as: Tag = "p",
5771
+ var CardDescription = ({ className, as: Tag = "p", ref, ...props }) => React45.createElement(Tag, {
5823
5772
  ref,
5773
+ className: cn("text-sm leading-relaxed text-muted-foreground", className),
5824
5774
  ...props
5825
- }) => {
5826
- return React45.createElement(Tag, {
5827
- ref,
5828
- className: cn("text-sm text-muted-foreground", className),
5829
- ...props
5830
- });
5775
+ });
5776
+ CardDescription.displayName = "CardDescription";
5777
+ var CardContent = ({ className, ref, ...props }) => {
5778
+ const padded = React45.use(CardPaddedContext);
5779
+ return /* @__PURE__ */ jsx("div", { ref, className: cn(padded ? "mt-4 first:mt-0" : "p-6 pt-0", className), ...props });
5780
+ };
5781
+ CardContent.displayName = "CardContent";
5782
+ var CardFooter = ({ className, ref, ...props }) => {
5783
+ const padded = React45.use(CardPaddedContext);
5784
+ return /* @__PURE__ */ jsx(
5785
+ "div",
5786
+ {
5787
+ ref,
5788
+ className: cn(
5789
+ "flex items-center",
5790
+ padded ? "mt-6 border-t border-border/50 pt-4 first:mt-0" : "p-6 pt-0",
5791
+ className
5792
+ ),
5793
+ ...props
5794
+ }
5795
+ );
5831
5796
  };
5832
- CardDescription.displayName = "CardDescription";
5833
- var CardContent = ({
5834
- className,
5835
- ref,
5836
- ...props
5837
- }) => /* @__PURE__ */ jsx("div", { ref, className: cn("p-6 pt-0", className), ...props });
5838
- CardContent.displayName = "CardContent";
5839
- var CardFooter = ({
5840
- className,
5841
- ref,
5842
- ...props
5843
- }) => /* @__PURE__ */ jsx("div", { ref, className: cn("flex items-center p-6 pt-0", className), ...props });
5844
5797
  CardFooter.displayName = "CardFooter";
5798
+ var iconSize = { sm: "size-8", md: "size-10", lg: "size-12" };
5799
+ var CardIcon = ({ className, size = "md", ref, ...props }) => /* @__PURE__ */ jsx(
5800
+ "div",
5801
+ {
5802
+ ref,
5803
+ className: cn(
5804
+ "flex shrink-0 items-center justify-center rounded-[var(--radius-lg)] bg-muted/50",
5805
+ iconSize[size],
5806
+ className
5807
+ ),
5808
+ ...props
5809
+ }
5810
+ );
5811
+ CardIcon.displayName = "CardIcon";
5812
+ var Card = Object.assign(CardRoot, {
5813
+ Header: CardHeader,
5814
+ Title: CardTitle,
5815
+ Description: CardDescription,
5816
+ Content: CardContent,
5817
+ Body: CardContent,
5818
+ Footer: CardFooter,
5819
+ Icon: CardIcon
5820
+ });
5821
+ var CardBody = CardContent;
5845
5822
  function CardSpotlight({
5846
5823
  children,
5847
5824
  radius = 350,
@@ -6415,35 +6392,36 @@ function IndeterminateGlyph({
6415
6392
  }
6416
6393
  );
6417
6394
  }
6418
- var getInputClasses = (checked, disabled, indeterminate) => {
6419
- let className = "relative border w-4 h-4 duration-micro rounded inline-flex items-center justify-center";
6420
- if (disabled) {
6421
- if (!checked || indeterminate) {
6422
- className += " bg-geist-gray-100 border-geist-gray-500";
6423
- className += indeterminate ? " stroke-geist-gray-500" : " fill-geist-gray-100 stroke-geist-gray-100";
6424
- } else {
6425
- className += " bg-geist-gray-600 border-geist-gray-600 fill-geist-gray-600 stroke-geist-gray-100";
6426
- }
6427
- } else {
6428
- if (!checked || indeterminate) {
6429
- className += " bg-geist-background-100 border-geist-gray-700 group-hover:bg-geist-gray-200";
6430
- className += indeterminate ? " stroke-geist-gray-700" : " fill-geist-background-100 stroke-geist-background-100 group-hover:stroke-geist-gray-200 group-hover:fill-geist-gray-200";
6431
- } else {
6432
- className += " bg-geist-gray-1000 border-geist-gray-1000 fill-geist-gray-1000 stroke-geist-gray-100";
6433
- }
6434
- }
6435
- return className;
6395
+
6396
+ // src/primitives/form-control.ts
6397
+ var formControlFocusClassNames = {
6398
+ input: "outline-none focus:border-ring focus:ring-[length:var(--input-focus-ring-width)] focus:ring-ring/30",
6399
+ textarea: "outline-none focus:border-ring focus:ring-[length:var(--textarea-focus-ring-width)] focus:ring-ring/30",
6400
+ select: "outline-none focus:border-ring focus:ring-[length:var(--select-focus-ring-width)] focus:ring-ring/30"
6436
6401
  };
6402
+ var formControlInvalidClassNames = {
6403
+ input: "aria-invalid:border-destructive/60 aria-invalid:focus:border-destructive aria-invalid:focus:ring-destructive/20",
6404
+ textarea: "aria-invalid:border-destructive/60 aria-invalid:focus:border-destructive aria-invalid:focus:ring-destructive/20",
6405
+ select: "aria-invalid:border-destructive/60 aria-invalid:focus:border-destructive aria-invalid:focus:ring-destructive/20"
6406
+ };
6407
+ var controlFocusProxyClassName = "peer-focus-visible:outline-2 peer-focus-visible:outline-offset-2 peer-focus-visible:outline-[hsl(var(--ring))]";
6408
+ var boxClassName = (on) => cn(
6409
+ "relative inline-flex size-4 shrink-0 items-center justify-center rounded-[4px] border",
6410
+ "stroke-current fill-none transition-[background-color,border-color,color] duration-micro",
6411
+ on ? "border-primary bg-primary text-primary-foreground" : "border-[var(--control-border)] bg-background text-transparent group-hover:border-muted-foreground",
6412
+ "peer-disabled:opacity-50",
6413
+ controlFocusProxyClassName
6414
+ );
6437
6415
  var Checkbox = ({
6438
6416
  checked: controlledChecked,
6439
6417
  defaultChecked = false,
6440
- onChange,
6418
+ onChange: legacyOnChange,
6419
+ onCheckedChange: onChange = legacyOnChange,
6441
6420
  disabled = false,
6442
6421
  indeterminate = false,
6443
6422
  children,
6444
6423
  className,
6445
- id,
6446
- name
6424
+ ...inputProps
6447
6425
  }) => {
6448
6426
  const [internalChecked, setInternalChecked] = React45__default.useState(defaultChecked);
6449
6427
  const isControlled = controlledChecked !== void 0;
@@ -6452,34 +6430,28 @@ var Checkbox = ({
6452
6430
  "label",
6453
6431
  {
6454
6432
  className: cn(
6455
- "flex items-center text-[13px] font-sans group",
6456
- disabled ? "text-geist-gray-500 cursor-not-allowed" : "text-geist-gray-1000 cursor-pointer",
6433
+ "group flex items-center text-[13px] font-sans",
6434
+ disabled ? "cursor-not-allowed text-muted-foreground" : "cursor-pointer text-foreground",
6457
6435
  className
6458
6436
  ),
6459
6437
  children: [
6460
6438
  /* @__PURE__ */ jsx(
6461
6439
  "input",
6462
6440
  {
6463
- id,
6464
- name,
6441
+ ...inputProps,
6465
6442
  disabled,
6466
6443
  type: "checkbox",
6467
6444
  checked,
6445
+ "aria-checked": indeterminate ? "mixed" : void 0,
6468
6446
  onChange: (e) => {
6469
- if (!indeterminate) {
6470
- if (!isControlled) {
6471
- setInternalChecked(e.target.checked);
6472
- }
6473
- if (onChange) {
6474
- onChange(e.target.checked);
6475
- }
6476
- }
6447
+ if (indeterminate) return;
6448
+ if (!isControlled) setInternalChecked(e.target.checked);
6449
+ onChange?.(e.target.checked);
6477
6450
  },
6478
- "aria-label": typeof children === "string" ? children : "checkbox",
6479
- className: "sr-only"
6451
+ className: "peer sr-only"
6480
6452
  }
6481
6453
  ),
6482
- /* @__PURE__ */ jsx("span", { className: getInputClasses(checked, disabled, indeterminate), children: indeterminate ? /* @__PURE__ */ jsx(IndeterminateGlyph, {}) : /* @__PURE__ */ jsx(CheckGlyph, {}) }),
6454
+ /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: boxClassName(checked || indeterminate), children: indeterminate ? /* @__PURE__ */ jsx(IndeterminateGlyph, {}) : /* @__PURE__ */ jsx(CheckGlyph, {}) }),
6483
6455
  children && /* @__PURE__ */ jsx("span", { className: "ml-2", children })
6484
6456
  ]
6485
6457
  }
@@ -6779,7 +6751,8 @@ function ChoiceboxGroupRoot({
6779
6751
  showLabel = false,
6780
6752
  value: controlledValue,
6781
6753
  defaultValue,
6782
- onChange,
6754
+ onChange: legacyOnChange,
6755
+ onValueChange: onChange = legacyOnChange,
6783
6756
  disabled = false,
6784
6757
  className,
6785
6758
  children
@@ -7094,9 +7067,9 @@ var overlayPrimitiveClassNames = {
7094
7067
  menuItemBaseClassName,
7095
7068
  "min-h-8 gap-2",
7096
7069
  menuHighlightedClassName,
7097
- "data-[variant=destructive]:text-destructive",
7070
+ "data-[variant=destructive]:text-destructive-strong",
7098
7071
  "data-[variant=destructive]:data-[highlighted]:bg-destructive/10",
7099
- "data-[variant=destructive]:data-[highlighted]:text-destructive"
7072
+ "data-[variant=destructive]:data-[highlighted]:text-destructive-strong"
7100
7073
  ].join(" "),
7101
7074
  menuItem: [menuItemBaseClassName, menuHighlightedClassName].join(" "),
7102
7075
  menuSubTrigger: [
@@ -7220,7 +7193,7 @@ var DropdownMenuSubContent = ({
7220
7193
  style,
7221
7194
  ref,
7222
7195
  ...props
7223
- }) => /* @__PURE__ */ jsx(Menu$1.Portal, { children: /* @__PURE__ */ jsx(Menu$1.Positioner, { children: /* @__PURE__ */ jsx(
7196
+ }) => /* @__PURE__ */ jsx(Menu$1.Portal, { children: /* @__PURE__ */ jsx(Menu$1.Positioner, { style: { zIndex: overlayZIndex.popover }, children: /* @__PURE__ */ jsx(
7224
7197
  Menu$1.Popup,
7225
7198
  {
7226
7199
  ref,
@@ -7250,6 +7223,7 @@ var DropdownMenuContent = ({
7250
7223
  align,
7251
7224
  alignOffset,
7252
7225
  side,
7226
+ style: { zIndex: overlayZIndex.popover },
7253
7227
  children: /* @__PURE__ */ jsx(
7254
7228
  Menu$1.Popup,
7255
7229
  {
@@ -7550,7 +7524,8 @@ function CodeBlock(props) {
7550
7524
  onLineReference,
7551
7525
  languageIcons,
7552
7526
  showLanguageIcon = true,
7553
- "aria-label": ariaLabel
7527
+ "aria-label": ariaLabel,
7528
+ copyLabel = "Copy code"
7554
7529
  } = props;
7555
7530
  const resolvedHide = props.hideLineNumbers;
7556
7531
  const resolvedShow = props.showLineNumbers;
@@ -7772,7 +7747,9 @@ function CodeBlock(props) {
7772
7747
  /* @__PURE__ */ jsx(DropdownMenuContent, { align: "end", className: "max-h-60 overflow-y-auto", children: controlledSwitcher.options.map((opt) => /* @__PURE__ */ jsxs(
7773
7748
  DropdownMenuItem,
7774
7749
  {
7775
- onClick: () => controlledSwitcher.onChange(opt.value),
7750
+ onClick: () => (controlledSwitcher.onValueChange ?? controlledSwitcher.onChange)?.(
7751
+ opt.value
7752
+ ),
7776
7753
  className: cn(
7777
7754
  "text-xs",
7778
7755
  opt.value === controlledSwitcher.value && "bg-accent font-medium"
@@ -7844,7 +7821,7 @@ function CodeBlock(props) {
7844
7821
  type: "button",
7845
7822
  onClick: () => copyToClipboard(code),
7846
7823
  className: "inline-flex h-8 w-8 items-center justify-center rounded-[var(--radius-md)] hover:bg-accent hover:text-accent-foreground",
7847
- "aria-label": "Copy code",
7824
+ "aria-label": copyLabel,
7848
7825
  children: copied ? /* @__PURE__ */ jsx(
7849
7826
  motion.div,
7850
7827
  {
@@ -8078,25 +8055,33 @@ var CollapsibleContent = ({
8078
8055
  };
8079
8056
  CollapsibleContent.displayName = "CollapsibleContent";
8080
8057
  var colorBadgeVariants = {
8081
- gray: "bg-muted text-white fill-white",
8082
- "gray-subtle": "bg-muted text-muted-foreground fill-gray-900",
8083
- blue: "bg-blue-700 text-white fill-white",
8084
- "blue-subtle": "bg-blue-200 text-blue-900 fill-blue-900",
8058
+ gray: "bg-muted text-muted-foreground fill-muted-foreground",
8059
+ "gray-subtle": "bg-muted text-muted-foreground fill-muted-foreground",
8060
+ blue: "bg-info text-info-foreground fill-info-foreground",
8061
+ "blue-subtle": "bg-blue-3 text-blue-11 fill-blue-11",
8062
+ // allow-palette: categorical hue with no token equivalent (purple/violet has no semantic slot; --category-N is too desaturated for a solid badge fill)
8085
8063
  purple: "bg-purple-700 text-white fill-white",
8064
+ // allow-palette: categorical hue with no token equivalent (purple/violet has no semantic slot)
8086
8065
  "purple-subtle": "bg-purple-200 text-purple-900 fill-purple-900",
8087
- amber: "bg-amber-600 text-black fill-black",
8088
- "amber-subtle": "bg-amber-200 text-amber-900 fill-amber-900",
8089
- red: "bg-red-700 text-white fill-white",
8090
- "red-subtle": "bg-red-200 text-red-900 fill-red-900",
8066
+ amber: "bg-warning text-warning-foreground fill-warning-foreground",
8067
+ "amber-subtle": "bg-warning/15 text-warning-strong fill-warning-strong",
8068
+ red: "bg-destructive text-destructive-foreground fill-destructive-foreground",
8069
+ "red-subtle": "bg-destructive/15 text-destructive-strong fill-destructive-strong",
8070
+ // allow-palette: categorical hue with no token equivalent (pink has no semantic slot)
8091
8071
  pink: "bg-pink-700 text-white fill-white",
8072
+ // allow-palette: categorical hue with no token equivalent (pink has no semantic slot)
8092
8073
  "pink-subtle": "bg-pink-300 text-pink-900 fill-pink-900",
8093
- green: "bg-green-700 text-white fill-white",
8094
- "green-subtle": "bg-green-200 text-green-900 fill-green-900",
8095
- teal: "bg-teal-700 text-white fill-white",
8096
- "teal-subtle": "bg-teal-300 text-teal-900 fill-teal-900",
8097
- inverted: "bg-muted text-muted-foreground fill-gray-100 dark:fill-gray-900",
8098
- trial: "bg-gradient-to-br from-blue-500 to-pink-500 text-white fill-white",
8099
- turbo: "bg-gradient-to-br from-rose-500 to-blue-500 text-white fill-white",
8074
+ green: "bg-success text-success-foreground fill-success-foreground",
8075
+ "green-subtle": "bg-success/15 text-success-strong fill-success-strong",
8076
+ teal: "bg-cyan-11 text-cyan-1 fill-cyan-1",
8077
+ "teal-subtle": "bg-cyan-3 text-cyan-11 fill-cyan-11",
8078
+ inverted: "bg-muted text-muted-foreground fill-background dark:fill-foreground",
8079
+ // The same trial / turbo gradients Badge uses (--ds-trial-*, --ds-turbo-*),
8080
+ // not a second hand-picked pair. Fixed and vivid in both themes: white ink.
8081
+ // allow-palette: fixed vivid gradient, white ink in both themes
8082
+ trial: "bg-gradient-to-br from-trial-start to-trial-end text-white fill-white",
8083
+ // allow-palette: fixed vivid gradient, white ink in both themes
8084
+ turbo: "bg-gradient-to-br from-turbo-start to-turbo-end text-white fill-white",
8100
8085
  pill: "bg-background text-foreground fill-foreground border border-border"
8101
8086
  };
8102
8087
  var colorBadgeSizes = {
@@ -8152,11 +8137,7 @@ var commandFrameClassName = cn(
8152
8137
  "[&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-2.5",
8153
8138
  "[&_[cmdk-item]_svg]:h-4 [&_[cmdk-item]_svg]:w-4"
8154
8139
  );
8155
- var commandInputWrapperClassName = cn(
8156
- "flex items-center border-b border-border px-3",
8157
- "transition-[border-color] duration-micro ease-out",
8158
- "has-[:focus-visible]:border-ring/60"
8159
- );
8140
+ var commandInputWrapperClassName = cn("flex items-center border-b border-border px-3");
8160
8141
  var commandInputClassName = cn(
8161
8142
  "flex h-11 w-full appearance-none border-0 bg-transparent py-3 text-sm text-foreground shadow-none outline-none",
8162
8143
  "placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50",
@@ -8587,6 +8568,7 @@ function PopoverContent({
8587
8568
  return /* @__PURE__ */ jsx(Popover$1.Portal, { children: /* @__PURE__ */ jsx(
8588
8569
  Popover$1.Positioner,
8589
8570
  {
8571
+ style: { zIndex: overlayZIndex.popover },
8590
8572
  "data-slot": "popover-positioner",
8591
8573
  sideOffset,
8592
8574
  align,
@@ -8601,7 +8583,7 @@ function PopoverContent({
8601
8583
  overlayPrimitiveClassNames.popoverSurface,
8602
8584
  className
8603
8585
  ),
8604
- style: { zIndex: overlayZIndex.popover, ...style },
8586
+ style,
8605
8587
  ...props,
8606
8588
  children: [
8607
8589
  children,
@@ -8677,7 +8659,11 @@ var comboboxSizeTokens = {
8677
8659
  var comboboxTriggerVariants = cva(
8678
8660
  [
8679
8661
  "flex w-full items-center justify-between gap-2 whitespace-nowrap",
8680
- "h-[var(--combobox-trigger-height)] rounded-[var(--radius-md)] border border-input bg-background px-[var(--combobox-trigger-padding-x)]",
8662
+ // --input-radius, not the generic md step: this trigger is a form control and
8663
+ // should round like Input and Select do. Reading the scale step meant it
8664
+ // tracked whatever a language did to medium surfaces instead of what it
8665
+ // decided for its fields.
8666
+ "h-[var(--combobox-trigger-height)] rounded-[var(--input-radius,var(--radius-md))] border border-input bg-background px-[var(--combobox-trigger-padding-x)]",
8681
8667
  "text-[length:var(--combobox-font-size)] ring-offset-background",
8682
8668
  "transition-colors duration-micro ease-out",
8683
8669
  "placeholder:text-muted-foreground",
@@ -8789,7 +8775,8 @@ function toCssLength(value) {
8789
8775
  function ComboboxRoot({
8790
8776
  options,
8791
8777
  value: controlledValue,
8792
- onChange,
8778
+ onChange: legacyOnChange,
8779
+ onValueChange: onChange = legacyOnChange,
8793
8780
  defaultValue = null,
8794
8781
  disabled = false,
8795
8782
  errored,
@@ -9163,18 +9150,6 @@ var inputTokens = {
9163
9150
  },
9164
9151
  focusRingWidth: 3,
9165
9152
  fieldGap: primitiveSpacing[2] - primitiveSpacing[1] / 2};
9166
-
9167
- // src/primitives/form-control.ts
9168
- var formControlFocusClassNames = {
9169
- input: "outline-none focus:border-ring focus:ring-[length:var(--input-focus-ring-width)] focus:ring-ring/30",
9170
- textarea: "outline-none focus:border-ring focus:ring-[length:var(--textarea-focus-ring-width)] focus:ring-ring/30",
9171
- select: "outline-none focus:border-ring focus:ring-[length:var(--select-focus-ring-width)] focus:ring-ring/30"
9172
- };
9173
- var formControlInvalidClassNames = {
9174
- input: "aria-invalid:border-destructive/60 aria-invalid:focus:border-destructive aria-invalid:focus:ring-destructive/20",
9175
- textarea: "aria-invalid:border-destructive/60 aria-invalid:focus:border-destructive aria-invalid:focus:ring-destructive/20",
9176
- select: "aria-invalid:border-destructive/60 aria-invalid:focus:border-destructive aria-invalid:focus:ring-destructive/20"
9177
- };
9178
9153
  var inputVariants = cva(
9179
9154
  [
9180
9155
  "flex h-[var(--input-height)] w-full rounded-[var(--input-radius)]",
@@ -9221,7 +9196,7 @@ var inputVariants = cva(
9221
9196
  * the ring surrounds the whole group rather than a box inside it.
9222
9197
  */
9223
9198
  tone: {
9224
- bordered: `border border-input bg-background shadow-xs ${formControlFocusClassNames.input}`,
9199
+ bordered: `border border-input bg-background ${formControlFocusClassNames.input}`,
9225
9200
  bare: "border-0 bg-transparent shadow-none"
9226
9201
  }
9227
9202
  },
@@ -9250,7 +9225,7 @@ var inputControlButtonVariants = cva(
9250
9225
  [
9251
9226
  "absolute right-[var(--input-control-inset)] top-1/2 flex size-[var(--input-control-size)] -translate-y-1/2 items-center justify-center",
9252
9227
  "rounded-[var(--radius-sm)] text-muted-foreground transition-colors duration-micro ease-out",
9253
- "hover:bg-accent hover:text-foreground",
9228
+ "hover:bg-accent hover:text-accent-foreground",
9254
9229
  "focus-visible:outline-none",
9255
9230
  "disabled:pointer-events-none disabled:opacity-50",
9256
9231
  "[&_svg]:size-[var(--input-control-icon-size)]"
@@ -9260,7 +9235,7 @@ var fieldMessageVariants = cva("text-xs", {
9260
9235
  variants: {
9261
9236
  tone: {
9262
9237
  description: "text-muted-foreground",
9263
- error: "font-medium text-destructive"
9238
+ error: "font-medium text-destructive-strong"
9264
9239
  }
9265
9240
  }
9266
9241
  });
@@ -9327,6 +9302,7 @@ var Input = ({
9327
9302
  revealable,
9328
9303
  revealLabel = "Show password",
9329
9304
  hideLabel = "Hide password",
9305
+ clearLabel = "Clear input",
9330
9306
  clearOnEscape,
9331
9307
  wrapperClassName,
9332
9308
  fieldClassName,
@@ -9477,7 +9453,7 @@ var Input = ({
9477
9453
  "button",
9478
9454
  {
9479
9455
  type: "button",
9480
- "aria-label": "Clear input",
9456
+ "aria-label": clearLabel,
9481
9457
  disabled,
9482
9458
  className: inputControlButtonVariants(),
9483
9459
  style: getInputStyle(size, void 0),
@@ -9582,13 +9558,13 @@ function ConfirmDialog({
9582
9558
  confirmVariant: "default"
9583
9559
  },
9584
9560
  destructive: {
9585
- icon: /* @__PURE__ */ jsx(Trash, { className: "size-6 text-destructive" }),
9561
+ icon: /* @__PURE__ */ jsx(Trash, { className: "size-6 text-destructive-strong" }),
9586
9562
  iconBg: "bg-destructive/10",
9587
9563
  confirmVariant: "destructive"
9588
9564
  },
9589
9565
  warning: {
9590
- icon: /* @__PURE__ */ jsx(Warning, { className: "size-6 text-amber-600" }),
9591
- iconBg: "bg-amber-100 dark:bg-amber-900/30",
9566
+ icon: /* @__PURE__ */ jsx(Warning, { className: "size-6 text-warning-strong" }),
9567
+ iconBg: "bg-warning/10",
9592
9568
  confirmVariant: "default"
9593
9569
  }
9594
9570
  };
@@ -9734,7 +9710,7 @@ function DestructiveActionModalContent({
9734
9710
  verificationLabel,
9735
9711
  " "
9736
9712
  ] }) : null,
9737
- /* @__PURE__ */ jsxs("span", { className: "font-mono text-destructive", children: [
9713
+ /* @__PURE__ */ jsxs("span", { className: "font-mono text-destructive-strong", children: [
9738
9714
  '"',
9739
9715
  verificationPhrase,
9740
9716
  '"'
@@ -9758,7 +9734,7 @@ function DestructiveActionModalContent({
9758
9734
  value
9759
9735
  }
9760
9736
  ),
9761
- errorMessage2 ? /* @__PURE__ */ jsx("p", { id: errorId, className: "text-sm text-destructive", role: "alert", children: errorMessage2 }) : null
9737
+ errorMessage2 ? /* @__PURE__ */ jsx("p", { id: errorId, className: "text-sm text-destructive-strong", role: "alert", children: errorMessage2 }) : null
9762
9738
  ] }),
9763
9739
  /* @__PURE__ */ jsxs("div", { className: "flex flex-col-reverse gap-2 sm:flex-row sm:justify-end", children: [
9764
9740
  /* @__PURE__ */ jsx(Button, { disabled: loading, onClick: onCancel, type: "button", variant: "outline", children: cancelLabel }),
@@ -9779,7 +9755,7 @@ function DestructiveActionModalContent({
9779
9755
  {
9780
9756
  id: irreversibleId,
9781
9757
  className: cn(
9782
- "flex items-start gap-2 border-t border-destructive/20 px-6 py-3 text-sm text-destructive",
9758
+ "flex items-start gap-2 border-t border-destructive/20 px-6 py-3 text-sm text-destructive-strong",
9783
9759
  "bg-[repeating-linear-gradient(-45deg,hsl(var(--destructive)/0.08),hsl(var(--destructive)/0.08)_1px,transparent_1px,transparent_7px)]"
9784
9760
  ),
9785
9761
  children: [
@@ -9871,12 +9847,12 @@ function BulkActionConfirmDialogContent({
9871
9847
  iconBg: "bg-primary/10"
9872
9848
  },
9873
9849
  destructive: {
9874
- icon: /* @__PURE__ */ jsx(Trash, { className: "size-6 text-destructive" }),
9850
+ icon: /* @__PURE__ */ jsx(Trash, { className: "size-6 text-destructive-strong" }),
9875
9851
  iconBg: "bg-destructive/10"
9876
9852
  },
9877
9853
  warning: {
9878
- icon: /* @__PURE__ */ jsx(Warning, { className: "size-6 text-amber-600" }),
9879
- iconBg: "bg-amber-100 dark:bg-amber-900/30"
9854
+ icon: /* @__PURE__ */ jsx(Warning, { className: "size-6 text-warning-strong" }),
9855
+ iconBg: "bg-warning/10"
9880
9856
  }
9881
9857
  };
9882
9858
  const styles = variantStyles[variant];
@@ -9899,7 +9875,7 @@ function BulkActionConfirmDialogContent({
9899
9875
  " ",
9900
9876
  itemType,
9901
9877
  ".",
9902
- variant === "destructive" && /* @__PURE__ */ jsxs("span", { className: "font-semibold text-destructive", children: [
9878
+ variant === "destructive" && /* @__PURE__ */ jsxs("span", { className: "font-semibold text-destructive-strong", children: [
9903
9879
  " ",
9904
9880
  "This action cannot be undone."
9905
9881
  ] })
@@ -10128,7 +10104,7 @@ var ContextCardTrigger = ({
10128
10104
  align,
10129
10105
  sideOffset,
10130
10106
  alignOffset,
10131
- className: "z-50",
10107
+ style: { zIndex: overlayZIndex.popover },
10132
10108
  children: /* @__PURE__ */ jsx(
10133
10109
  Popover$1.Popup,
10134
10110
  {
@@ -10150,7 +10126,7 @@ var ContextCardTrigger = ({
10150
10126
  "rounded-[var(--context-card-radius)] border border-border bg-popover",
10151
10127
  "px-[var(--context-card-padding-x)] py-[var(--context-card-padding-y)]",
10152
10128
  "text-[length:var(--context-card-body-size)] text-popover-foreground shadow-md outline-none",
10153
- "transition-[opacity,transform,display] duration-[var(--context-card-duration)] ease-[var(--context-card-easing)]",
10129
+ "transition-[opacity,transform] duration-[var(--context-card-duration)] ease-[var(--context-card-easing)]",
10154
10130
  "data-starting-style:opacity-0 data-ending-style:opacity-0 data-starting-style:scale-[0.98] data-ending-style:scale-[0.98]",
10155
10131
  "motion-reduce:transition-none motion-reduce:data-starting-style:scale-100 motion-reduce:data-ending-style:scale-100",
10156
10132
  "",
@@ -10248,6 +10224,7 @@ var ContextMenuContent = ({
10248
10224
  }) => /* @__PURE__ */ jsx(ContextMenu$1.Portal, { children: /* @__PURE__ */ jsx(
10249
10225
  ContextMenu$1.Positioner,
10250
10226
  {
10227
+ style: { zIndex: overlayZIndex.popover },
10251
10228
  alignOffset,
10252
10229
  align,
10253
10230
  sideOffset,
@@ -10700,7 +10677,7 @@ var iconToneClassName = {
10700
10677
  "no-results": "text-muted-foreground",
10701
10678
  cleared: "text-muted-foreground",
10702
10679
  permission: "text-muted-foreground",
10703
- error: "text-destructive"
10680
+ error: "text-destructive-strong"
10704
10681
  };
10705
10682
  var emptyStateCssVars = (size) => ({
10706
10683
  "--empty-state-min-height": `${emptyStateTokens.root.minHeight[size]}px`,
@@ -10800,10 +10777,41 @@ var EmptyStateRoot = ({
10800
10777
  );
10801
10778
  };
10802
10779
  EmptyStateRoot.displayName = "EmptyState.Root";
10803
- var EmptyState = {
10780
+ var toneVariant = {
10781
+ default: "blank-slate",
10782
+ branded: "informational",
10783
+ subtle: "guide"
10784
+ };
10785
+ function EmptyStateSimple({
10786
+ title,
10787
+ description,
10788
+ mascot,
10789
+ icon,
10790
+ action,
10791
+ secondaryAction,
10792
+ tone = "default",
10793
+ size = "md",
10794
+ className
10795
+ }) {
10796
+ const visual = mascot ?? icon ?? (tone === "branded" ? /* @__PURE__ */ jsx(BrandMark, { size: size === "lg" ? "lg" : "md" }) : null);
10797
+ return /* @__PURE__ */ jsx(
10798
+ EmptyStateRoot,
10799
+ {
10800
+ action,
10801
+ className: cn(tone === "subtle" && "border-0 bg-transparent", className),
10802
+ description,
10803
+ icon: visual ? /* @__PURE__ */ jsx(EmptyStateIcon, { icon: visual }) : void 0,
10804
+ link: secondaryAction,
10805
+ size,
10806
+ title,
10807
+ variant: toneVariant[tone]
10808
+ }
10809
+ );
10810
+ }
10811
+ var EmptyState = Object.assign(EmptyStateSimple, {
10804
10812
  Root: EmptyStateRoot,
10805
10813
  Icon: EmptyStateIcon
10806
- };
10814
+ });
10807
10815
  function asCssLength(value) {
10808
10816
  if (value === void 0) return void 0;
10809
10817
  return typeof value === "number" ? `${value}px` : value;
@@ -11283,6 +11291,189 @@ function DataList({
11283
11291
  );
11284
11292
  }
11285
11293
  DataList.displayName = "DataList";
11294
+ var ISO_DATE_FORMAT = "yyyy-MM-dd";
11295
+ function parseIsoDate(value) {
11296
+ if (!value) return void 0;
11297
+ const parsed = parse(value, ISO_DATE_FORMAT, /* @__PURE__ */ new Date());
11298
+ return isValid(parsed) ? parsed : void 0;
11299
+ }
11300
+ function toIsoDate(date) {
11301
+ return format(date, ISO_DATE_FORMAT);
11302
+ }
11303
+ function getFieldStyle(size, style) {
11304
+ const token = inputTokens.sizes[size];
11305
+ return {
11306
+ "--input-height": `${token.height}px`,
11307
+ "--input-padding-x": `${token.paddingX}px`,
11308
+ "--input-padding-left": `${token.affixWidth}px`,
11309
+ "--input-padding-right": `${token.affixWidth}px`,
11310
+ "--input-font-size": `${token.fontSize}px`,
11311
+ "--input-radius": `${token.radius}px`,
11312
+ "--input-affix-inset": `${token.affixInset}px`,
11313
+ "--input-control-inset": `${token.controlInset}px`,
11314
+ "--input-control-size": `${token.controlSize}px`,
11315
+ "--input-control-icon-size": `${token.controlIconSize}px`,
11316
+ "--input-icon-size": `${token.iconSize}px`,
11317
+ "--input-focus-ring-width": `${inputTokens.focusRingWidth}px`,
11318
+ borderRadius: "var(--input-radius)",
11319
+ outline: "none",
11320
+ ...style
11321
+ };
11322
+ }
11323
+ function joinIds(...ids) {
11324
+ return ids.filter(Boolean).join(" ") || void 0;
11325
+ }
11326
+ function DatePicker({
11327
+ value,
11328
+ defaultValue,
11329
+ onValueChange,
11330
+ label,
11331
+ id,
11332
+ name,
11333
+ placeholder,
11334
+ description,
11335
+ error,
11336
+ size = "md",
11337
+ disabled,
11338
+ required,
11339
+ min,
11340
+ max,
11341
+ displayFormat = ISO_DATE_FORMAT,
11342
+ triggerLabel = "Open calendar",
11343
+ className,
11344
+ fieldClassName,
11345
+ wrapperClassName,
11346
+ locale,
11347
+ weekStartsOn,
11348
+ numberOfMonths,
11349
+ fixedWeeks,
11350
+ showOutsideDays,
11351
+ dir,
11352
+ ...fieldProps
11353
+ }) {
11354
+ const isControlled = value !== void 0;
11355
+ const generatedId = React45.useId();
11356
+ const fieldId = id ?? generatedId;
11357
+ const [internalValue, setInternalValue] = React45.useState(defaultValue ?? "");
11358
+ const currentValue = isControlled ? value : internalValue;
11359
+ const selected = parseIsoDate(currentValue);
11360
+ const minDate = parseIsoDate(min);
11361
+ const maxDate = parseIsoDate(max);
11362
+ const [draft, setDraft] = React45.useState(null);
11363
+ const [open, setOpen] = React45.useState(false);
11364
+ const displayValue = draft ?? (selected ? format(selected, displayFormat) : currentValue ?? "");
11365
+ const descriptionId = description ? `${fieldId}-description` : void 0;
11366
+ const errorId = typeof error === "string" ? `${fieldId}-error` : void 0;
11367
+ const invalid = error === true || typeof error === "string";
11368
+ const commit = React45.useCallback(
11369
+ (next) => {
11370
+ if (!isControlled) setInternalValue(next);
11371
+ onValueChange?.(next);
11372
+ },
11373
+ [isControlled, onValueChange]
11374
+ );
11375
+ const handleTextChange = (event) => {
11376
+ const text = event.target.value;
11377
+ setDraft(text);
11378
+ if (text === "") {
11379
+ commit("");
11380
+ return;
11381
+ }
11382
+ const parsed = parse(text, displayFormat, /* @__PURE__ */ new Date());
11383
+ if (isValid(parsed)) commit(toIsoDate(parsed));
11384
+ };
11385
+ const handleBlur = () => setDraft(null);
11386
+ const handleSelect = (next) => {
11387
+ setDraft(null);
11388
+ commit(next ? toIsoDate(next) : "");
11389
+ setOpen(false);
11390
+ };
11391
+ const disabledMatcher = [
11392
+ ...minDate ? [{ before: minDate }] : [],
11393
+ ...maxDate ? [{ after: maxDate }] : []
11394
+ ];
11395
+ const control = /* @__PURE__ */ jsxs(
11396
+ "div",
11397
+ {
11398
+ "data-slot": "date-picker",
11399
+ className: cn("relative flex items-center", wrapperClassName),
11400
+ style: getFieldStyle(size, void 0),
11401
+ children: [
11402
+ /* @__PURE__ */ jsx(
11403
+ "input",
11404
+ {
11405
+ type: "text",
11406
+ inputMode: "numeric",
11407
+ autoComplete: "off",
11408
+ "data-slot": "date-picker-input",
11409
+ "aria-invalid": invalid || void 0,
11410
+ "aria-describedby": joinIds(descriptionId, errorId),
11411
+ ...fieldProps,
11412
+ id: fieldId,
11413
+ name,
11414
+ className: cn(inputVariants({ size, affix: "suffix", tone: "bordered" }), className),
11415
+ style: getFieldStyle(size, void 0),
11416
+ placeholder: placeholder ?? displayFormat,
11417
+ value: displayValue,
11418
+ onChange: handleTextChange,
11419
+ onBlur: handleBlur,
11420
+ disabled,
11421
+ required
11422
+ }
11423
+ ),
11424
+ /* @__PURE__ */ jsxs(Popover, { open, onOpenChange: setOpen, children: [
11425
+ /* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsx(
11426
+ "button",
11427
+ {
11428
+ type: "button",
11429
+ "aria-label": triggerLabel,
11430
+ disabled,
11431
+ className: inputControlButtonVariants(),
11432
+ style: getFieldStyle(size, void 0),
11433
+ children: /* @__PURE__ */ jsx(Calendar$1, { "aria-hidden": "true" })
11434
+ }
11435
+ ) }),
11436
+ /* @__PURE__ */ jsx(PopoverContent, { align: "start", className: "w-auto p-0", children: /* @__PURE__ */ jsx(
11437
+ Calendar,
11438
+ {
11439
+ mode: "single",
11440
+ ...selected ? { selected, defaultMonth: selected } : {},
11441
+ onSelect: handleSelect,
11442
+ ...disabledMatcher.length > 0 ? { disabled: disabledMatcher } : {},
11443
+ ...minDate ? { startMonth: minDate } : {},
11444
+ ...maxDate ? { endMonth: maxDate } : {},
11445
+ ...locale ? { locale } : {},
11446
+ ...weekStartsOn !== void 0 ? { weekStartsOn } : {},
11447
+ ...numberOfMonths !== void 0 ? { numberOfMonths } : {},
11448
+ ...fixedWeeks !== void 0 ? { fixedWeeks } : {},
11449
+ ...showOutsideDays !== void 0 ? { showOutsideDays } : {},
11450
+ ...dir !== void 0 ? { dir } : {},
11451
+ autoFocus: true
11452
+ }
11453
+ ) })
11454
+ ] })
11455
+ ]
11456
+ }
11457
+ );
11458
+ if (!label && !description && typeof error !== "string") {
11459
+ return control;
11460
+ }
11461
+ return /* @__PURE__ */ jsxs(
11462
+ "div",
11463
+ {
11464
+ "data-slot": "date-picker-field",
11465
+ className: cn("grid gap-[var(--input-field-gap)]", fieldClassName),
11466
+ style: { "--input-field-gap": `${inputTokens.fieldGap}px` },
11467
+ children: [
11468
+ label && /* @__PURE__ */ jsx("label", { htmlFor: fieldId, className: "text-sm font-medium text-foreground", children: label }),
11469
+ control,
11470
+ description && !error && /* @__PURE__ */ jsx("p", { id: descriptionId, className: "text-xs text-muted-foreground", children: description }),
11471
+ typeof error === "string" && /* @__PURE__ */ jsx("p", { id: errorId, role: "alert", className: "text-xs font-medium text-destructive-strong", children: error })
11472
+ ]
11473
+ }
11474
+ );
11475
+ }
11476
+ DatePicker.displayName = "DatePicker";
11286
11477
  var Description = function Description2({
11287
11478
  ref,
11288
11479
  title,
@@ -11300,25 +11491,25 @@ var Description = function Description2({
11300
11491
  };
11301
11492
  function DisplayCard({
11302
11493
  className,
11303
- icon = /* @__PURE__ */ jsx(Sparkles, { className: "size-4 text-blue-300" }),
11494
+ icon = /* @__PURE__ */ jsx(Sparkles, { className: "size-4 text-blue-11" }),
11304
11495
  title = "Featured",
11305
11496
  description = "Discover amazing content",
11306
11497
  date = "Just now",
11307
- titleClassName = "text-blue-500"
11498
+ titleClassName = "text-blue-11"
11308
11499
  }) {
11309
11500
  return /* @__PURE__ */ jsxs(
11310
11501
  "div",
11311
11502
  {
11312
11503
  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",
11504
+ "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-cinematic",
11314
11505
  "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-['']",
11315
- "hover:border-white/20 hover:bg-muted",
11506
+ "hover:border-foreground/20 hover:bg-muted",
11316
11507
  "[&>*]:flex [&>*]:items-center [&>*]:gap-2",
11317
11508
  className
11318
11509
  ),
11319
11510
  children: [
11320
11511
  /* @__PURE__ */ jsxs("div", { children: [
11321
- /* @__PURE__ */ jsx("span", { className: "relative inline-block rounded-full bg-blue-800 p-1", children: icon }),
11512
+ /* @__PURE__ */ jsx("span", { className: "relative inline-block rounded-full bg-blue-4 p-1", children: icon }),
11322
11513
  /* @__PURE__ */ jsx("p", { className: cn("text-lg font-medium", titleClassName), children: title })
11323
11514
  ] }),
11324
11515
  /* @__PURE__ */ jsx("p", { className: "whitespace-nowrap text-lg", children: description }),
@@ -11329,10 +11520,10 @@ function DisplayCard({
11329
11520
  }
11330
11521
  var DEFAULT_CARDS = [
11331
11522
  {
11332
- className: "[grid-area:stack] hover:-translate-y-10 before:absolute before:w-[100%] before:outline-1 before:rounded-[var(--radius-xl)] before:outline-border before:h-[100%] before:content-[''] before:bg-blend-overlay before:bg-background/50 grayscale-[100%] hover:before:opacity-0 before:transition-opacity before:duration-700 hover:grayscale-0 before:left-0 before:top-0"
11523
+ className: "[grid-area:stack] hover:-translate-y-10 before:absolute before:w-[100%] before:outline-1 before:rounded-[var(--radius-xl)] before:outline-border before:h-[100%] before:content-[''] before:bg-blend-overlay before:bg-background/50 grayscale-[100%] hover:before:opacity-0 before:transition-opacity before:duration-cinematic hover:grayscale-0 before:left-0 before:top-0"
11333
11524
  },
11334
11525
  {
11335
- className: "[grid-area:stack] translate-x-16 translate-y-10 hover:-translate-y-1 before:absolute before:w-[100%] before:outline-1 before:rounded-[var(--radius-xl)] before:outline-border before:h-[100%] before:content-[''] before:bg-blend-overlay before:bg-background/50 grayscale-[100%] hover:before:opacity-0 before:transition-opacity before:duration-700 hover:grayscale-0 before:left-0 before:top-0"
11526
+ className: "[grid-area:stack] translate-x-16 translate-y-10 hover:-translate-y-1 before:absolute before:w-[100%] before:outline-1 before:rounded-[var(--radius-xl)] before:outline-border before:h-[100%] before:content-[''] before:bg-blend-overlay before:bg-background/50 grayscale-[100%] hover:before:opacity-0 before:transition-opacity before:duration-cinematic hover:grayscale-0 before:left-0 before:top-0"
11336
11527
  },
11337
11528
  {
11338
11529
  className: "[grid-area:stack] translate-x-32 translate-y-20 hover:translate-y-10"
@@ -11344,7 +11535,7 @@ function DisplayCards({ cards, className }) {
11344
11535
  "div",
11345
11536
  {
11346
11537
  className: cn(
11347
- "grid [grid-template-areas:'stack'] place-items-center opacity-100 animate-in fade-in-0 duration-700",
11538
+ "grid [grid-template-areas:'stack'] place-items-center opacity-100 animate-in fade-in-0 duration-cinematic",
11348
11539
  className
11349
11540
  ),
11350
11541
  children: displayCards.map((cardProps, index) => /* @__PURE__ */ jsx(DisplayCard, { ...cardProps }, index))
@@ -11536,7 +11727,7 @@ function DitheringBackground({
11536
11727
  pxSize: config.pxSize,
11537
11728
  scale: config.scale,
11538
11729
  style: {
11539
- height: "100vh",
11730
+ height: "100dvh",
11540
11731
  width: "100vw"
11541
11732
  }
11542
11733
  }
@@ -12497,7 +12688,8 @@ function TocExpandedMenu({
12497
12688
  firstMenuItemRef,
12498
12689
  onClose,
12499
12690
  onHover,
12500
- onJump
12691
+ onJump,
12692
+ closeLabel = "Close table of contents"
12501
12693
  }) {
12502
12694
  return /* @__PURE__ */ jsxs(
12503
12695
  m.div,
@@ -12519,7 +12711,7 @@ function TocExpandedMenu({
12519
12711
  "button",
12520
12712
  {
12521
12713
  type: "button",
12522
- "aria-label": "Close table of contents",
12714
+ "aria-label": closeLabel,
12523
12715
  onClick: onClose,
12524
12716
  className: "text-muted-foreground transition-colors duration-micro hover:text-foreground focus-visible:text-foreground focus-visible:outline-none",
12525
12717
  children: /* @__PURE__ */ jsx(Cross, { className: "h-5 w-5", "aria-hidden": "true" })
@@ -12577,7 +12769,7 @@ function TocMenuItem({
12577
12769
  className: cn(
12578
12770
  "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",
12579
12771
  "focus-visible:outline-none",
12580
- isActive && "bg-foreground/10 font-medium text-foreground",
12772
+ isActive && "bg-foreground/10 text-foreground",
12581
12773
  !isActive && isHovered && "bg-foreground/5 text-foreground/85",
12582
12774
  !isActive && !isHovered && "bg-transparent text-foreground/45"
12583
12775
  ),
@@ -12602,7 +12794,8 @@ function DynamicIslandTOC({
12602
12794
  ariaLabel = "Table of contents",
12603
12795
  menuHeading = "TABLE OF CONTENTS",
12604
12796
  emptyLabel = "Contents",
12605
- className
12797
+ className,
12798
+ closeLabel = "Close table of contents"
12606
12799
  }) {
12607
12800
  const reduceMotion = useReducedMotion() ?? false;
12608
12801
  const menuLabelId = useId();
@@ -12786,6 +12979,7 @@ function DynamicIslandTOC({
12786
12979
  {
12787
12980
  isExpanded,
12788
12981
  ariaLabel,
12982
+ closeLabel,
12789
12983
  menuLabelId,
12790
12984
  menuHeading,
12791
12985
  headings,
@@ -13079,11 +13273,11 @@ function EditTool({
13079
13273
  children: [
13080
13274
  /* @__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
13275
  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: [
13276
+ stats.added > 0 && /* @__PURE__ */ jsxs("span", { className: "text-success-strong", children: [
13083
13277
  "+",
13084
13278
  stats.added
13085
13279
  ] }),
13086
- stats.removed > 0 && /* @__PURE__ */ jsxs("span", { className: "text-destructive", children: [
13280
+ stats.removed > 0 && /* @__PURE__ */ jsxs("span", { className: "text-destructive-strong", children: [
13087
13281
  "-",
13088
13282
  stats.removed
13089
13283
  ] })
@@ -13103,8 +13297,8 @@ function EditTool({
13103
13297
  {
13104
13298
  className: cn(
13105
13299
  "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",
13300
+ op.type === "add" && "bg-[hsl(var(--success)/0.1)] text-success-strong",
13301
+ op.type === "remove" && "bg-[hsl(var(--destructive)/0.1)] text-destructive-strong",
13108
13302
  op.type === "context" && "text-foreground/80"
13109
13303
  ),
13110
13304
  children: [
@@ -13114,8 +13308,8 @@ function EditTool({
13114
13308
  "aria-hidden": "true",
13115
13309
  className: cn(
13116
13310
  "w-4 shrink-0 select-none text-center",
13117
- op.type === "add" && "text-success",
13118
- op.type === "remove" && "text-destructive",
13311
+ op.type === "add" && "text-success-strong",
13312
+ op.type === "remove" && "text-destructive-strong",
13119
13313
  op.type === "context" && "text-muted-foreground/60"
13120
13314
  ),
13121
13315
  children: op.type === "add" ? "+" : op.type === "remove" ? "-" : " "
@@ -13138,8 +13332,11 @@ var InputOTP = ({
13138
13332
  children,
13139
13333
  render,
13140
13334
  ref,
13141
- ...props
13335
+ onValueChange,
13336
+ onChange: legacyOnChange,
13337
+ ...rest
13142
13338
  }) => {
13339
+ const props = { ...rest, onChange: onValueChange ?? legacyOnChange };
13143
13340
  const otpProps = render ? { render, ...props } : { children, ...props };
13144
13341
  return /* @__PURE__ */ jsx(
13145
13342
  OTPInput,
@@ -13413,17 +13610,17 @@ function DefaultErrorFallback({
13413
13610
  )
13414
13611
  ] });
13415
13612
  case "inline":
13416
- return /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1 text-sm text-red-600 dark:text-red-400", children: [
13613
+ return /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1 text-sm text-destructive-strong", children: [
13417
13614
  /* @__PURE__ */ jsx(Warning, { className: "size-3" }),
13418
13615
  /* @__PURE__ */ jsx("span", { children: "Error" }),
13419
13616
  showRetry && /* @__PURE__ */ jsx("button", { type: "button", onClick: resetError, className: "text-primary hover:underline", children: "Retry" })
13420
13617
  ] });
13421
13618
  case "compact":
13422
- return /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3 p-3 bg-red-50 dark:bg-red-900/20 border border-red-200 dark:border-red-800 rounded-[var(--radius-lg)]", children: [
13423
- /* @__PURE__ */ jsx(Warning, { className: "size-5 text-red-600 dark:text-red-400 shrink-0" }),
13619
+ return /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3 p-3 bg-destructive/10 border border-destructive/20 rounded-[var(--radius-lg)]", children: [
13620
+ /* @__PURE__ */ jsx(Warning, { className: "size-5 text-destructive-strong shrink-0" }),
13424
13621
  /* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-0", children: [
13425
- /* @__PURE__ */ jsx("p", { className: "text-sm font-medium text-red-800 dark:text-red-200 truncate", children: componentName ? `${componentName} \u52A0\u8F7D\u5931\u8D25` : "\u7EC4\u4EF6\u52A0\u8F7D\u5931\u8D25" }),
13426
- process.env.NODE_ENV === "development" && /* @__PURE__ */ jsx("p", { className: "text-xs text-red-600 dark:text-red-400 truncate mt-0.5", children: error.message })
13622
+ /* @__PURE__ */ jsx("p", { className: "text-sm font-medium text-destructive-strong truncate", children: componentName ? `${componentName} \u52A0\u8F7D\u5931\u8D25` : "\u7EC4\u4EF6\u52A0\u8F7D\u5931\u8D25" }),
13623
+ process.env.NODE_ENV === "development" && /* @__PURE__ */ jsx("p", { className: "text-xs text-destructive-strong truncate mt-0.5", children: error.message })
13427
13624
  ] }),
13428
13625
  showRetry && /* @__PURE__ */ jsxs(Button, { size: "sm", variant: "outline", onClick: resetError, children: [
13429
13626
  /* @__PURE__ */ jsx(RefreshClockwise, { className: "size-3 mr-1" }),
@@ -13432,7 +13629,7 @@ function DefaultErrorFallback({
13432
13629
  ] });
13433
13630
  default:
13434
13631
  return /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center justify-center p-6 bg-muted/50 border border-border rounded-[var(--radius-lg)]", children: [
13435
- /* @__PURE__ */ jsx("div", { className: "size-12 rounded-full bg-red-100 dark:bg-red-900/30 flex items-center justify-center mb-4", children: /* @__PURE__ */ jsx(Warning, { className: "size-6 text-red-600 dark:text-red-400" }) }),
13632
+ /* @__PURE__ */ jsx("div", { className: "size-12 rounded-full bg-destructive/15 flex items-center justify-center mb-4", children: /* @__PURE__ */ jsx(Warning, { className: "size-6 text-destructive-strong" }) }),
13436
13633
  /* @__PURE__ */ jsx("h3", { className: "text-base font-medium text-foreground mb-1", children: componentName ? `${componentName} \u51FA\u9519\u4E86` : "\u7EC4\u4EF6\u51FA\u9519\u4E86" }),
13437
13634
  /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground mb-4 text-center", children: "\u6B64\u90E8\u5206\u6682\u65F6\u65E0\u6CD5\u52A0\u8F7D\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5" }),
13438
13635
  process.env.NODE_ENV === "development" && /* @__PURE__ */ jsx("div", { className: "w-full max-w-md p-2 bg-muted rounded mb-4", children: /* @__PURE__ */ jsx("p", { className: "text-xs font-mono text-muted-foreground break-all", children: error.message }) }),
@@ -13453,10 +13650,10 @@ function TableErrorBoundary({
13453
13650
  componentName: tableName || "\u8868\u683C",
13454
13651
  variant: "compact",
13455
13652
  fallback: ({ error, resetError }) => /* @__PURE__ */ jsxs("div", { className: "border border-border rounded-[var(--radius-lg)] overflow-hidden", children: [
13456
- /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between p-4 bg-red-50 dark:bg-red-900/20", children: [
13653
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between p-4 bg-destructive/10", children: [
13457
13654
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
13458
- /* @__PURE__ */ jsx(Warning, { className: "size-4 text-red-600 dark:text-red-400" }),
13459
- /* @__PURE__ */ jsx("span", { className: "text-sm font-medium text-red-800 dark:text-red-200", children: tableName ? `${tableName}\u52A0\u8F7D\u5931\u8D25` : "\u8868\u683C\u52A0\u8F7D\u5931\u8D25" })
13655
+ /* @__PURE__ */ jsx(Warning, { className: "size-4 text-destructive-strong" }),
13656
+ /* @__PURE__ */ jsx("span", { className: "text-sm font-medium text-destructive-strong", children: tableName ? `${tableName}\u52A0\u8F7D\u5931\u8D25` : "\u8868\u683C\u52A0\u8F7D\u5931\u8D25" })
13460
13657
  ] }),
13461
13658
  /* @__PURE__ */ jsxs(Button, { size: "sm", variant: "ghost", onClick: resetError, children: [
13462
13659
  /* @__PURE__ */ jsx(RefreshClockwise, { className: "size-3 mr-1" }),
@@ -13492,7 +13689,7 @@ var textSize = {
13492
13689
  medium: "text-sm",
13493
13690
  large: "text-base"
13494
13691
  };
13495
- var iconSize = {
13692
+ var iconSize2 = {
13496
13693
  small: 12,
13497
13694
  medium: 14,
13498
13695
  large: 16
@@ -13528,9 +13725,13 @@ var ErrorMessage = ({
13528
13725
  {
13529
13726
  ref,
13530
13727
  role: "alert",
13531
- className: cn("inline-flex items-center gap-1.5 text-destructive", textSize[sz], className),
13728
+ className: cn(
13729
+ "inline-flex items-center gap-1.5 text-destructive-strong",
13730
+ textSize[sz],
13731
+ className
13732
+ ),
13532
13733
  children: [
13533
- /* @__PURE__ */ jsx(Warning, { size: iconSize[sz], "aria-hidden": "true", className: "shrink-0" }),
13734
+ /* @__PURE__ */ jsx(Warning, { size: iconSize2[sz], "aria-hidden": "true", className: "shrink-0" }),
13534
13735
  /* @__PURE__ */ jsxs("span", { children: [
13535
13736
  label && /* @__PURE__ */ jsxs("span", { className: "font-medium", children: [
13536
13737
  label,
@@ -13602,12 +13803,12 @@ var ErrorSurface = ({
13602
13803
  "span",
13603
13804
  {
13604
13805
  "aria-hidden": "true",
13605
- className: "mt-0.5 flex size-7 shrink-0 items-center justify-center rounded-[var(--radius-sm)] border border-destructive/20 bg-background text-destructive",
13806
+ className: "mt-0.5 flex size-7 shrink-0 items-center justify-center rounded-[var(--radius-sm)] border border-destructive/20 bg-background text-destructive-strong",
13606
13807
  children: /* @__PURE__ */ jsx(Warning, { size: surfaceIconSize[size] })
13607
13808
  }
13608
13809
  ),
13609
13810
  /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
13610
- label && showLabel ? /* @__PURE__ */ jsx("p", { className: "mb-1 text-xs font-medium uppercase tracking-normal text-destructive", children: label }) : null,
13811
+ label && showLabel ? /* @__PURE__ */ jsx("p", { className: "mb-1 text-xs font-medium uppercase tracking-normal text-destructive-strong", children: label }) : null,
13611
13812
  resolvedTitle ? /* @__PURE__ */ jsx("p", { className: "font-semibold leading-6 text-foreground", children: resolvedTitle }) : null,
13612
13813
  message ? /* @__PURE__ */ jsx("p", { className: cn("leading-5 text-muted-foreground", resolvedTitle && "mt-1"), children: message }) : null,
13613
13814
  resolvedErrorId ? /* @__PURE__ */ jsxs("details", { className: "mt-3 text-xs text-muted-foreground", children: [
@@ -13727,6 +13928,7 @@ var ExpandableGallery = function ExpandableGallery2({
13727
13928
  transition: activeTransition,
13728
13929
  className: cn(
13729
13930
  "relative w-full",
13931
+ // allow-state-shift: open and closed are two different layouts — the expansion is the point
13730
13932
  isOpen ? "grid grid-cols-2 gap-6 px-4 md:gap-8 lg:grid-cols-3" : "flex flex-col items-center justify-start pt-4"
13731
13933
  ),
13732
13934
  children: [
@@ -13746,6 +13948,7 @@ var ExpandableGallery = function ExpandableGallery2({
13746
13948
  const z = photo.zIndex ?? index;
13747
13949
  const sharedClass = cn(
13748
13950
  "overflow-hidden bg-muted",
13951
+ // allow-state-shift: the tile resizes as the gallery opens — the expansion is the point
13749
13952
  isOpen ? "relative aspect-square rounded-[2rem] border-4 border-background shadow-lg md:rounded-[3rem] md:border-[6px]" : "absolute h-44 w-44 cursor-pointer rounded-[2.5rem] border-[6px] border-background shadow-[0_20px_50px_rgba(0,0,0,0.15)] md:h-60 md:w-60 md:rounded-[3rem]"
13750
13953
  );
13751
13954
  const inner = /* @__PURE__ */ jsx(
@@ -13800,14 +14003,14 @@ var ExpandableGallery = function ExpandableGallery2({
13800
14003
  scale: 1.05,
13801
14004
  y: y - 15,
13802
14005
  rotate: rotation * 0.8,
13803
- zIndex: 50,
14006
+ zIndex: 20,
13804
14007
  transition: hoverTransition
13805
14008
  },
13806
14009
  whileFocus: {
13807
14010
  scale: 1.05,
13808
14011
  y: y - 15,
13809
14012
  rotate: rotation * 0.8,
13810
- zIndex: 50,
14013
+ zIndex: 20,
13811
14014
  transition: hoverTransition
13812
14015
  }
13813
14016
  },
@@ -13835,29 +14038,19 @@ var ExpandableGallery = function ExpandableGallery2({
13835
14038
  }
13836
14039
  ) });
13837
14040
  };
13838
- var buttonVariants2 = {
13839
- initial: {
13840
- gap: 0,
13841
- paddingLeft: ".5rem",
13842
- paddingRight: ".5rem"
13843
- },
13844
- animate: (isSelected) => ({
13845
- gap: isSelected ? ".5rem" : 0,
13846
- paddingLeft: isSelected ? "1rem" : ".5rem",
13847
- paddingRight: isSelected ? "1rem" : ".5rem"
13848
- })
13849
- };
13850
14041
  var spanVariants = {
13851
- initial: { width: 0, opacity: 0 },
13852
- animate: { width: "auto", opacity: 1 },
13853
- exit: { width: 0, opacity: 0 }
14042
+ initial: { opacity: 0, transform: "translateX(-4px)" },
14043
+ animate: { opacity: 1, transform: "translateX(0px)" },
14044
+ exit: { opacity: 0, transform: "translateX(-4px)" }
13854
14045
  };
13855
- var transition2 = { delay: 0.1, type: "spring", bounce: 0, duration: 0.6 };
14046
+ var transition2 = { duration: 0.2, ease: [0.16, 1, 0.3, 1] };
13856
14047
  function ExpandableTabs({
13857
14048
  tabs,
13858
14049
  className,
13859
14050
  activeColor = "text-primary",
13860
- onChange
14051
+ onChange: legacyOnChange,
14052
+ onValueChange: onChange = legacyOnChange,
14053
+ tabsLabel = "Navigation tabs"
13861
14054
  }) {
13862
14055
  const [selected, setSelected] = React45.useState(null);
13863
14056
  const outsideClickRef = React45.useRef(null);
@@ -13881,7 +14074,7 @@ function ExpandableTabs({
13881
14074
  className
13882
14075
  ),
13883
14076
  role: "tablist",
13884
- "aria-label": "Navigation tabs",
14077
+ "aria-label": tabsLabel,
13885
14078
  children: tabs.map((tab, index) => {
13886
14079
  if (tab.type === "separator") {
13887
14080
  return /* @__PURE__ */ jsx(TabSeparator, {}, `separator-${index}`);
@@ -13891,36 +14084,25 @@ function ExpandableTabs({
13891
14084
  const tabClassName = cn(
13892
14085
  "relative rounded-[var(--radius-xl)] py-2 text-sm font-medium transition-colors duration-flow",
13893
14086
  "focus-visible:outline-none",
13894
- isSelected ? cn("bg-muted", activeColor) : "text-muted-foreground hover:bg-muted hover:text-foreground"
14087
+ isSelected ? cn("bg-muted px-4", activeColor) : "px-2 text-muted-foreground hover:bg-muted hover:text-foreground"
13895
14088
  );
13896
14089
  const tabContent = (
13897
14090
  // biome-ignore lint/correctness/useJsxKeyInIterable: key is on the parent <button>
13898
- /* @__PURE__ */ jsxs(
13899
- motion.span,
13900
- {
13901
- variants: buttonVariants2,
13902
- initial: false,
13903
- animate: "animate",
13904
- custom: isSelected,
13905
- transition: activeTransition,
13906
- className: "flex items-center",
13907
- children: [
13908
- /* @__PURE__ */ jsx(Icon, { size: 20, "aria-hidden": "true" }),
13909
- /* @__PURE__ */ jsx(AnimatePresence, { initial: false, children: isSelected && /* @__PURE__ */ jsx(
13910
- motion.span,
13911
- {
13912
- variants: spanVariants,
13913
- initial: "initial",
13914
- animate: "animate",
13915
- exit: "exit",
13916
- transition: activeTransition,
13917
- className: "overflow-hidden",
13918
- children: tab.title
13919
- }
13920
- ) })
13921
- ]
13922
- }
13923
- )
14091
+ /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-2", children: [
14092
+ /* @__PURE__ */ jsx(Icon, { size: 20, "aria-hidden": "true" }),
14093
+ /* @__PURE__ */ jsx(AnimatePresence, { initial: false, children: isSelected && /* @__PURE__ */ jsx(
14094
+ motion.span,
14095
+ {
14096
+ variants: spanVariants,
14097
+ initial: "initial",
14098
+ animate: "animate",
14099
+ exit: "exit",
14100
+ transition: activeTransition,
14101
+ className: "overflow-hidden whitespace-nowrap",
14102
+ children: tab.title
14103
+ }
14104
+ ) })
14105
+ ] })
13924
14106
  );
13925
14107
  return isSelected ? /* @__PURE__ */ jsx(
13926
14108
  "button",
@@ -13979,7 +14161,7 @@ var textareaTokens = {
13979
14161
  focusRingWidth: 3,
13980
14162
  fieldGap: primitiveSpacing[2] - primitiveSpacing[1] / 2};
13981
14163
  var fieldMessageClassName = "text-xs text-muted-foreground";
13982
- var fieldErrorClassName = "text-xs font-medium text-destructive";
14164
+ var fieldErrorClassName = "text-xs font-medium text-destructive-strong";
13983
14165
  function getTextareaStyle(size, style) {
13984
14166
  const token = textareaTokens.sizes[size];
13985
14167
  return {
@@ -14014,6 +14196,7 @@ var Textarea = ({
14014
14196
  description,
14015
14197
  error,
14016
14198
  fieldClassName,
14199
+ tone = "bordered",
14017
14200
  id,
14018
14201
  onChange,
14019
14202
  onValueChange,
@@ -14039,10 +14222,10 @@ var Textarea = ({
14039
14222
  "textarea",
14040
14223
  {
14041
14224
  className: cn(
14042
- "flex min-h-[var(--textarea-min-height)] w-full resize-y rounded-[var(--textarea-radius)] border border-input bg-background",
14043
- "px-[var(--textarea-padding-x)] py-[var(--textarea-padding-y)] text-[length:var(--textarea-font-size)] text-foreground shadow-xs",
14225
+ "flex min-h-[var(--textarea-min-height)] w-full resize-y rounded-[var(--textarea-radius)]",
14226
+ "px-[var(--textarea-padding-x)] py-[var(--textarea-padding-y)] text-[length:var(--textarea-font-size)] text-foreground",
14044
14227
  "transition-[background-color,border-color,box-shadow,color] duration-micro ease-out placeholder:text-muted-foreground",
14045
- formControlFocusClassNames.textarea,
14228
+ tone === "bordered" ? `border border-input bg-background ${formControlFocusClassNames.textarea}` : "border-0 bg-transparent shadow-none",
14046
14229
  "disabled:cursor-not-allowed disabled:opacity-50 read-only:cursor-default read-only:bg-muted/70",
14047
14230
  formControlInvalidClassNames.textarea,
14048
14231
  className
@@ -14357,6 +14540,7 @@ function FeatureArrowCard({
14357
14540
  cardContent,
14358
14541
  onArrowClick,
14359
14542
  className,
14543
+ arrowLabel = "Go to feature",
14360
14544
  ...props
14361
14545
  }) {
14362
14546
  return /* @__PURE__ */ jsxs(
@@ -14383,7 +14567,7 @@ function FeatureArrowCard({
14383
14567
  type: "button",
14384
14568
  onClick: onArrowClick,
14385
14569
  className: "absolute bottom-2 right-2 z-10 flex items-center gap-2 rounded-full border bg-background p-3 transition hover:-rotate-45",
14386
- "aria-label": "Go to feature",
14570
+ "aria-label": arrowLabel,
14387
14571
  children: /* @__PURE__ */ jsx(ArrowRight, { className: "size-4 text-primary" })
14388
14572
  }
14389
14573
  )
@@ -14484,7 +14668,7 @@ function CircularUI({ label, circles, className }) {
14484
14668
  "border-primary": circle.pattern === "none",
14485
14669
  "border-primary bg-[repeating-linear-gradient(-45deg,hsl(var(--border)),hsl(var(--border))_1px,transparent_1px,transparent_4px)]": circle.pattern === "border",
14486
14670
  "border-primary bg-background bg-[repeating-linear-gradient(-45deg,hsl(var(--primary)),hsl(var(--primary))_1px,transparent_1px,transparent_4px)]": circle.pattern === "primary",
14487
- "z-[1] border-blue-500 bg-background bg-[repeating-linear-gradient(-45deg,theme(colors.blue.500),theme(colors.blue.500)_1px,transparent_1px,transparent_4px)]": circle.pattern === "blue"
14671
+ "z-[1] border-info bg-background bg-[repeating-linear-gradient(-45deg,hsl(var(--info)),hsl(var(--info))_1px,transparent_1px,transparent_4px)]": circle.pattern === "blue"
14488
14672
  }),
14489
14673
  "aria-hidden": "true"
14490
14674
  },
@@ -14782,7 +14966,7 @@ function NativeSelect({
14782
14966
  style: { borderRadius: "var(--select-radius)" },
14783
14967
  className: cn(
14784
14968
  "h-[var(--select-height)] w-full appearance-none rounded-[var(--select-radius)] border font-sans",
14785
- "bg-background text-[length:var(--select-font-size)] text-foreground shadow-xs outline-none",
14969
+ "bg-background text-[length:var(--select-font-size)] text-foreground outline-none",
14786
14970
  "transition-[background-color,border-color,box-shadow,color] duration-[var(--select-duration)] ease-[var(--select-easing)]",
14787
14971
  formControlFocusClassNames.select,
14788
14972
  "disabled:cursor-not-allowed disabled:bg-muted disabled:text-muted-foreground",
@@ -14966,7 +15150,7 @@ var SelectTrigger = ({
14966
15150
  ref,
14967
15151
  className: cn(
14968
15152
  "flex h-[var(--select-height)] w-full items-center justify-between whitespace-nowrap rounded-[var(--select-radius)] border border-input bg-background",
14969
- "px-[var(--select-padding-x)] text-[length:var(--select-font-size)] text-foreground shadow-xs",
15153
+ "px-[var(--select-padding-x)] text-[length:var(--select-font-size)] text-foreground",
14970
15154
  "transition-[background-color,border-color,box-shadow,color] duration-micro ease-out placeholder:text-muted-foreground",
14971
15155
  formControlFocusClassNames.select,
14972
15156
  "disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",
@@ -15000,6 +15184,7 @@ var SelectContent = ({
15000
15184
  }) => /* @__PURE__ */ jsx(Select$1.Portal, { children: /* @__PURE__ */ jsx(
15001
15185
  Select$1.Positioner,
15002
15186
  {
15187
+ style: { zIndex: overlayZIndex.popover },
15003
15188
  alignItemWithTrigger: position === "item-aligned",
15004
15189
  sideOffset: selectTokens.content.sideOffset,
15005
15190
  children: /* @__PURE__ */ jsx(
@@ -15144,7 +15329,8 @@ function FeedbackForm({
15144
15329
  dryRun,
15145
15330
  disabled,
15146
15331
  initialEmotion,
15147
- onDone
15332
+ onDone,
15333
+ topicLabel = "Feedback topic"
15148
15334
  }) {
15149
15335
  const promptId = React45.useId();
15150
15336
  const emotionName = React45.useId();
@@ -15205,7 +15391,7 @@ function FeedbackForm({
15205
15391
  onValueChange: (nextTopic) => setTopic(typeof nextTopic === "string" ? nextTopic : ""),
15206
15392
  disabled: disabled || submitting,
15207
15393
  children: [
15208
- /* @__PURE__ */ jsx(SelectTrigger, { "aria-label": "Feedback topic", children: /* @__PURE__ */ jsx(SelectValue, { placeholder: "Select a topic..." }) }),
15394
+ /* @__PURE__ */ jsx(SelectTrigger, { "aria-label": topicLabel, children: /* @__PURE__ */ jsx(SelectValue, { placeholder: "Select a topic..." }) }),
15209
15395
  /* @__PURE__ */ jsx(SelectContent, { children: topics.map((item) => /* @__PURE__ */ jsx(SelectItem, { value: item.value, children: item.label }, item.value)) })
15210
15396
  ]
15211
15397
  }
@@ -15227,7 +15413,7 @@ function FeedbackForm({
15227
15413
  ),
15228
15414
  /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-[var(--feedback-row-gap)]", children: [
15229
15415
  /* @__PURE__ */ jsx(MarkdownHint, {}),
15230
- error ? /* @__PURE__ */ jsx("p", { className: "text-destructive text-xs", id: errorId, role: "alert", children: error }) : null
15416
+ error ? /* @__PURE__ */ jsx("p", { className: "text-destructive-strong text-xs", id: errorId, role: "alert", children: error }) : null
15231
15417
  ] })
15232
15418
  ] }),
15233
15419
  /* @__PURE__ */ jsx("div", { className: "flex justify-end border-border border-t pt-[var(--feedback-padding)]", children: /* @__PURE__ */ jsx(Button, { disabled: !canSubmit, loading: submitting, size: "sm", type: "submit", children: "Send" }) })
@@ -15243,7 +15429,9 @@ function FeedbackDefault({
15243
15429
  dryRun,
15244
15430
  disabled,
15245
15431
  defaultOpen = false,
15246
- className
15432
+ className,
15433
+ topicLabel,
15434
+ closeLabel = "Close feedback"
15247
15435
  }) {
15248
15436
  const triggerRef = React45.useRef(null);
15249
15437
  const [open, setOpen] = React45.useState(defaultOpen);
@@ -15281,7 +15469,7 @@ function FeedbackDefault({
15281
15469
  /* @__PURE__ */ jsx(
15282
15470
  "button",
15283
15471
  {
15284
- "aria-label": "Close feedback",
15472
+ "aria-label": closeLabel,
15285
15473
  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",
15286
15474
  onClick: closeAndReturnFocus,
15287
15475
  type: "button",
@@ -15299,6 +15487,7 @@ function FeedbackDefault({
15299
15487
  ...onSubmit ? { onSubmit } : {},
15300
15488
  ...dryRun !== void 0 ? { dryRun } : {},
15301
15489
  ...disabled !== void 0 ? { disabled } : {},
15490
+ ...topicLabel !== void 0 ? { topicLabel } : {},
15302
15491
  onDone: closeAndReturnFocus
15303
15492
  }
15304
15493
  )
@@ -15317,7 +15506,8 @@ function FeedbackInline({
15317
15506
  dryRun,
15318
15507
  disabled,
15319
15508
  defaultExpanded = false,
15320
- className
15509
+ className,
15510
+ topicLabel
15321
15511
  }) {
15322
15512
  const rootRef = React45.useRef(null);
15323
15513
  const emotionName = React45.useId();
@@ -15344,7 +15534,6 @@ function FeedbackInline({
15344
15534
  ref: rootRef,
15345
15535
  className: cn(
15346
15536
  "m-0 min-w-0 w-fit overflow-hidden rounded-[var(--feedback-panel-radius)] border border-border bg-card p-0 text-card-foreground shadow-sm",
15347
- "transition-[max-height,width] duration-[var(--feedback-duration)] ease-[var(--feedback-easing)] motion-reduce:transition-none",
15348
15537
  expanded ? "w-[var(--feedback-width)]" : "max-w-full",
15349
15538
  className
15350
15539
  ),
@@ -15384,6 +15573,7 @@ function FeedbackInline({
15384
15573
  ...onSubmit ? { onSubmit } : {},
15385
15574
  ...dryRun !== void 0 ? { dryRun } : {},
15386
15575
  ...disabled !== void 0 ? { disabled } : {},
15576
+ ...topicLabel !== void 0 ? { topicLabel } : {},
15387
15577
  onDone: () => {
15388
15578
  setExpanded(false);
15389
15579
  setSelectedEmotion(void 0);
@@ -15412,10 +15602,10 @@ var Field = ({
15412
15602
  ...props
15413
15603
  }) => {
15414
15604
  return /* @__PURE__ */ jsxs("div", { ref, className: cn("grid gap-2", className), ...props, children: [
15415
- /* @__PURE__ */ jsx(Label, { htmlFor, className: cn(error && "text-destructive"), children: label }),
15605
+ /* @__PURE__ */ jsx(Label, { htmlFor, className: cn(error && "text-destructive-strong"), children: label }),
15416
15606
  children,
15417
15607
  description && !error && /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground", children: description }),
15418
- error && /* @__PURE__ */ jsx("p", { className: "text-sm font-medium text-destructive", children: error })
15608
+ error && /* @__PURE__ */ jsx("p", { className: "text-sm font-medium text-destructive-strong", children: error })
15419
15609
  ] });
15420
15610
  };
15421
15611
  Field.displayName = "Field";
@@ -15540,32 +15730,32 @@ function FileAttachment({
15540
15730
  );
15541
15731
  }
15542
15732
  var BANNER_COLOR = {
15543
- doc: "bg-blue-500 text-white",
15544
- pdf: "bg-red-500 text-white",
15545
- md: "bg-neutral-600 text-white",
15546
- mdx: "bg-neutral-600 text-white",
15547
- txt: "bg-gray-500 text-white",
15548
- csv: "bg-teal-700 text-white",
15549
- xls: "bg-emerald-600 text-white",
15550
- xlsx: "bg-emerald-600 text-white",
15551
- ppt: "bg-orange-500 text-white",
15552
- pptx: "bg-orange-500 text-white",
15553
- zip: "bg-purple-500 text-white",
15554
- rar: "bg-purple-600 text-white",
15555
- tar: "bg-yellow-600 text-white",
15556
- gz: "bg-yellow-700 text-white",
15557
- html: "bg-orange-600 text-white",
15558
- js: "bg-yellow-600 text-white",
15559
- jsx: "bg-blue-600 text-white",
15560
- css: "bg-blue-600 text-white",
15561
- json: "bg-yellow-500 text-white",
15562
- tsx: "bg-blue-600 text-white",
15563
- code: "bg-orange-600 text-white",
15564
- img: "bg-pink-500 text-white",
15565
- png: "bg-neutral-600 text-white",
15566
- jpg: "bg-green-700 text-white",
15567
- jpeg: "bg-green-700 text-white",
15568
- video: "bg-green-700 text-white"
15733
+ doc: "bg-blue-11 text-blue-1",
15734
+ pdf: "bg-neutral-10 text-neutral-1",
15735
+ md: "bg-neutral-10 text-neutral-1",
15736
+ mdx: "bg-neutral-10 text-neutral-1",
15737
+ txt: "bg-neutral-10 text-neutral-1",
15738
+ csv: "bg-cyan-11 text-cyan-1",
15739
+ xls: "bg-cyan-11 text-cyan-1",
15740
+ xlsx: "bg-cyan-11 text-cyan-1",
15741
+ ppt: "bg-blue-11 text-blue-1",
15742
+ pptx: "bg-blue-11 text-blue-1",
15743
+ zip: "bg-neutral-10 text-neutral-1",
15744
+ rar: "bg-neutral-10 text-neutral-1",
15745
+ tar: "bg-neutral-10 text-neutral-1",
15746
+ gz: "bg-neutral-10 text-neutral-1",
15747
+ html: "bg-cyan-11 text-cyan-1",
15748
+ js: "bg-blue-11 text-blue-1",
15749
+ jsx: "bg-blue-11 text-blue-1",
15750
+ css: "bg-cyan-11 text-cyan-1",
15751
+ json: "bg-cyan-11 text-cyan-1",
15752
+ tsx: "bg-blue-11 text-blue-1",
15753
+ code: "bg-blue-11 text-blue-1",
15754
+ img: "bg-neutral-10 text-neutral-1",
15755
+ png: "bg-neutral-10 text-neutral-1",
15756
+ jpg: "bg-neutral-10 text-neutral-1",
15757
+ jpeg: "bg-neutral-10 text-neutral-1",
15758
+ video: "bg-neutral-10 text-neutral-1"
15569
15759
  };
15570
15760
  function DefaultPlaceholder() {
15571
15761
  return /* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
@@ -15663,7 +15853,7 @@ function ArchivePlaceholder() {
15663
15853
  function SlidePlaceholder() {
15664
15854
  return /* @__PURE__ */ jsxs(Fragment, { children: [
15665
15855
  /* @__PURE__ */ jsxs("div", { className: "bg-foreground/5 mb-1.5 space-y-1 rounded border p-1", children: [
15666
- /* @__PURE__ */ jsx("div", { className: "flex justify-center gap-1", children: /* @__PURE__ */ jsx("div", { className: "size-3 rounded-[var(--radius-sm)] bg-orange-400/40" }) }),
15856
+ /* @__PURE__ */ jsx("div", { className: "flex justify-center gap-1", children: /* @__PURE__ */ jsx("div", { className: "size-3 rounded-[var(--radius-sm)] bg-[var(--category-3)]/40" }) }),
15667
15857
  /* @__PURE__ */ jsx("div", { className: "bg-foreground/15 mx-auto h-0.75 w-8 rounded-full" })
15668
15858
  ] }),
15669
15859
  /* @__PURE__ */ jsxs("div", { className: "mb-1 flex justify-center gap-1", children: [
@@ -15678,14 +15868,14 @@ function SlidePlaceholder() {
15678
15868
  }
15679
15869
  function ImagePlaceholder() {
15680
15870
  return /* @__PURE__ */ jsxs("div", { className: "bg-foreground/5 mb-1.5 space-y-1 rounded border p-1", children: [
15681
- /* @__PURE__ */ jsx("div", { className: "flex justify-center gap-1", children: /* @__PURE__ */ jsx("div", { className: "size-3 rounded-[var(--radius-sm)] bg-yellow-400/40" }) }),
15871
+ /* @__PURE__ */ jsx("div", { className: "flex justify-center gap-1", children: /* @__PURE__ */ jsx("div", { className: "size-3 rounded-[var(--radius-sm)] bg-[var(--category-4)]/40" }) }),
15682
15872
  /* @__PURE__ */ jsx("div", { className: "bg-foreground/15 mx-auto mt-1 h-0.75 w-4 rounded-full" }),
15683
15873
  /* @__PURE__ */ jsx("div", { className: "bg-foreground/15 mx-auto h-0.75 w-8 rounded-full" })
15684
15874
  ] });
15685
15875
  }
15686
15876
  function VideoPlaceholder() {
15687
15877
  return /* @__PURE__ */ jsxs("div", { className: "bg-foreground/5 mb-1.5 space-y-1 rounded border p-1", children: [
15688
- /* @__PURE__ */ jsx("div", { className: "flex justify-center gap-1", children: /* @__PURE__ */ jsx(PlayFill, { className: "size-3 text-green-400/70", "aria-hidden": "true" }) }),
15878
+ /* @__PURE__ */ jsx("div", { className: "flex justify-center gap-1", children: /* @__PURE__ */ jsx(PlayFill, { className: "size-3 text-chart-5/70", "aria-hidden": "true" }) }),
15689
15879
  /* @__PURE__ */ jsx("div", { className: "bg-foreground/15 mx-auto mt-1 h-0.75 w-4 rounded-full" }),
15690
15880
  /* @__PURE__ */ jsx("div", { className: "bg-foreground/15 mx-auto h-0.75 w-8 rounded-full" })
15691
15881
  ] });
@@ -15694,22 +15884,22 @@ function HtmlCodePlaceholder() {
15694
15884
  return /* @__PURE__ */ jsxs("div", { className: "space-y-1", children: [
15695
15885
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-0.5", children: [
15696
15886
  /* @__PURE__ */ jsx("div", { className: "text-foreground/30 font-mono text-[5px]", children: "<" }),
15697
- /* @__PURE__ */ jsx("div", { className: "h-0.75 w-3 rounded-full bg-emerald-400/60" }),
15887
+ /* @__PURE__ */ jsx("div", { className: "h-0.75 w-3 rounded-full bg-chart-2/60" }),
15698
15888
  /* @__PURE__ */ jsx("div", { className: "text-foreground/30 font-mono text-[5px]", children: ">" })
15699
15889
  ] }),
15700
15890
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-0.5 pl-1", children: [
15701
15891
  /* @__PURE__ */ jsx("div", { className: "text-foreground/30 font-mono text-[5px]", children: "<" }),
15702
- /* @__PURE__ */ jsx("div", { className: "h-0.75 w-2.5 rounded-full bg-sky-400/60" }),
15892
+ /* @__PURE__ */ jsx("div", { className: "h-0.75 w-2.5 rounded-full bg-chart-2/60" }),
15703
15893
  /* @__PURE__ */ jsx("div", { className: "text-foreground/30 font-mono text-[5px]", children: ">" })
15704
15894
  ] }),
15705
15895
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-0.5 pl-1", children: [
15706
15896
  /* @__PURE__ */ jsx("div", { className: "text-foreground/30 font-mono text-[5px]", children: "</" }),
15707
- /* @__PURE__ */ jsx("div", { className: "h-0.75 w-2.5 rounded-full bg-sky-400/60" }),
15897
+ /* @__PURE__ */ jsx("div", { className: "h-0.75 w-2.5 rounded-full bg-chart-2/60" }),
15708
15898
  /* @__PURE__ */ jsx("div", { className: "text-foreground/30 font-mono text-[5px]", children: ">" })
15709
15899
  ] }),
15710
15900
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-0.5", children: [
15711
15901
  /* @__PURE__ */ jsx("div", { className: "text-foreground/30 font-mono text-[5px]", children: "<" }),
15712
- /* @__PURE__ */ jsx("div", { className: "h-0.75 w-1 rounded-full bg-emerald-400/60" }),
15902
+ /* @__PURE__ */ jsx("div", { className: "h-0.75 w-1 rounded-full bg-chart-2/60" }),
15713
15903
  /* @__PURE__ */ jsx("div", { className: "text-foreground/30 font-mono text-[5px]", children: "/>" })
15714
15904
  ] })
15715
15905
  ] });
@@ -15718,16 +15908,16 @@ function CssPlaceholder() {
15718
15908
  return /* @__PURE__ */ jsxs("div", { className: "space-y-1", children: [
15719
15909
  /* @__PURE__ */ jsx("div", { className: "flex items-center gap-1", children: /* @__PURE__ */ jsx("div", { className: "text-foreground/40 font-mono text-[6px]", children: "{" }) }),
15720
15910
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1 pl-1.5", children: [
15721
- /* @__PURE__ */ jsx("div", { className: "h-0.75 w-3 rounded-full bg-sky-400/60" }),
15722
- /* @__PURE__ */ jsx("div", { className: "h-0.75 w-4 rounded-full bg-sky-400/60" })
15911
+ /* @__PURE__ */ jsx("div", { className: "h-0.75 w-3 rounded-full bg-chart-2/60" }),
15912
+ /* @__PURE__ */ jsx("div", { className: "h-0.75 w-4 rounded-full bg-chart-2/60" })
15723
15913
  ] }),
15724
15914
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1 pl-1.5", children: [
15725
- /* @__PURE__ */ jsx("div", { className: "h-0.75 w-4 rounded-full bg-sky-400/60" }),
15726
- /* @__PURE__ */ jsx("div", { className: "h-0.75 w-2 rounded-full bg-sky-400/60" })
15915
+ /* @__PURE__ */ jsx("div", { className: "h-0.75 w-4 rounded-full bg-chart-2/60" }),
15916
+ /* @__PURE__ */ jsx("div", { className: "h-0.75 w-2 rounded-full bg-chart-2/60" })
15727
15917
  ] }),
15728
15918
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1 pl-1.5", children: [
15729
- /* @__PURE__ */ jsx("div", { className: "h-0.75 w-3 rounded-full bg-sky-400/60" }),
15730
- /* @__PURE__ */ jsx("div", { className: "h-0.75 w-4 rounded-full bg-sky-400/60" })
15919
+ /* @__PURE__ */ jsx("div", { className: "h-0.75 w-3 rounded-full bg-chart-2/60" }),
15920
+ /* @__PURE__ */ jsx("div", { className: "h-0.75 w-4 rounded-full bg-chart-2/60" })
15731
15921
  ] }),
15732
15922
  /* @__PURE__ */ jsx("div", { className: "flex items-center gap-1", children: /* @__PURE__ */ jsx("div", { className: "text-foreground/40 font-mono text-[6px]", children: "}" }) })
15733
15923
  ] });
@@ -15779,11 +15969,11 @@ var PLACEHOLDER = {
15779
15969
  };
15780
15970
  var FileCard = function FileCard2({
15781
15971
  ref,
15782
- format: format2,
15972
+ format: format3,
15783
15973
  className
15784
15974
  }) {
15785
- const Renderer = PLACEHOLDER[format2] ?? DefaultPlaceholder;
15786
- const bannerCls = BANNER_COLOR[format2];
15975
+ const Renderer = PLACEHOLDER[format3] ?? DefaultPlaceholder;
15976
+ const bannerCls = BANNER_COLOR[format3];
15787
15977
  return /* @__PURE__ */ jsxs("div", { ref, "aria-hidden": "true", className: cn("relative size-fit", className), children: [
15788
15978
  /* @__PURE__ */ jsx(
15789
15979
  "div",
@@ -15792,7 +15982,7 @@ var FileCard = function FileCard2({
15792
15982
  "absolute -right-2 bottom-1.5 z-2 rounded px-1.5 py-0.5 text-[8px] font-medium uppercase",
15793
15983
  bannerCls
15794
15984
  ),
15795
- children: format2
15985
+ children: format3
15796
15986
  }
15797
15987
  ),
15798
15988
  /* @__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, {}) })
@@ -16155,64 +16345,97 @@ var sizeMap = {
16155
16345
  }
16156
16346
  };
16157
16347
  var colorMap = {
16348
+ // "blue" and "grey"/"black" have a real 12-step token scale (blue-N,
16349
+ // neutral-N) to draw from, so they use it. Yellow/orange/red have no
16350
+ // design-token equivalent -- the scale only covers blue, cyan and neutral --
16351
+ // so those keep the Tailwind default palette (allow-palette per line) to
16352
+ // stay a genuine "red/orange/yellow folder", not a brand-tinted one.
16158
16353
  blue: {
16159
- folder: "from-blue-400 to-blue-500",
16160
- flap: "bg-blue-300/50",
16161
- paperBack: "bg-blue-100/60",
16162
- paperFront: "bg-blue-50",
16163
- paperLine: "bg-blue-300/40",
16164
- paperBorder: "border-blue-200",
16165
- labelBg: "bg-blue-800/20",
16354
+ folder: "from-blue-7 to-blue-8",
16355
+ flap: "bg-blue-6/50",
16356
+ paperBack: "bg-blue-3/60",
16357
+ paperFront: "bg-blue-2",
16358
+ paperLine: "bg-blue-6/40",
16359
+ paperBorder: "border-blue-4",
16360
+ labelBg: "bg-blue-8/20",
16361
+ // allow-palette: glossy paper-material highlight on the folder edge -- same fixed sheen for every color variant, not brand chrome
16166
16362
  folderBorder: "border-white/30"
16167
16363
  },
16168
16364
  black: {
16169
- folder: "from-neutral-800 to-neutral-900",
16170
- flap: "bg-neutral-600/50",
16171
- paperBack: "bg-neutral-500/60",
16172
- paperFront: "bg-neutral-100",
16173
- paperLine: "bg-neutral-300",
16174
- paperBorder: "border-neutral-500",
16365
+ folder: "from-neutral-8 to-neutral-9",
16366
+ flap: "bg-neutral-6/50",
16367
+ paperBack: "bg-neutral-5/60",
16368
+ paperFront: "bg-neutral-2",
16369
+ paperLine: "bg-neutral-4",
16370
+ paperBorder: "border-neutral-5",
16371
+ // allow-palette: label chip needs a light translucent tint against a near-black folder body regardless of brand or dark mode
16175
16372
  labelBg: "bg-white/10",
16373
+ // allow-palette: glossy paper-material highlight on the folder edge -- same fixed sheen for every color variant, not brand chrome
16176
16374
  folderBorder: "border-white/10"
16177
16375
  },
16178
16376
  yellow: {
16377
+ // allow-palette: categorical folder colour ("yellow folder") -- no yellow step exists in the blue/cyan/neutral token scale
16179
16378
  folder: "from-yellow-400 to-yellow-500",
16379
+ // allow-palette: categorical folder colour, see above
16180
16380
  flap: "bg-yellow-200/50",
16381
+ // allow-palette: categorical folder colour, see above
16181
16382
  paperBack: "bg-yellow-100/60",
16383
+ // allow-palette: categorical folder colour, see above
16182
16384
  paperFront: "bg-yellow-50",
16385
+ // allow-palette: categorical folder colour, see above
16183
16386
  paperLine: "bg-yellow-400/40",
16387
+ // allow-palette: categorical folder colour, see above
16184
16388
  paperBorder: "border-yellow-200",
16389
+ // allow-palette: categorical folder colour, see above
16185
16390
  labelBg: "bg-yellow-800/20",
16391
+ // allow-palette: glossy paper-material highlight on the folder edge -- same fixed sheen for every color variant, not brand chrome
16186
16392
  folderBorder: "border-white/30"
16187
16393
  },
16188
16394
  orange: {
16395
+ // allow-palette: categorical folder colour ("orange folder") -- no orange step exists in the blue/cyan/neutral token scale
16189
16396
  folder: "from-orange-400 to-orange-500",
16397
+ // allow-palette: categorical folder colour, see above
16190
16398
  flap: "bg-orange-300/50",
16399
+ // allow-palette: categorical folder colour, see above
16191
16400
  paperBack: "bg-orange-100/60",
16401
+ // allow-palette: categorical folder colour, see above
16192
16402
  paperFront: "bg-orange-50",
16403
+ // allow-palette: categorical folder colour, see above
16193
16404
  paperLine: "bg-orange-400/40",
16405
+ // allow-palette: categorical folder colour, see above
16194
16406
  paperBorder: "border-orange-200",
16407
+ // allow-palette: categorical folder colour, see above
16195
16408
  labelBg: "bg-orange-900/20",
16409
+ // allow-palette: glossy paper-material highlight on the folder edge -- same fixed sheen for every color variant, not brand chrome
16196
16410
  folderBorder: "border-white/30"
16197
16411
  },
16198
16412
  red: {
16413
+ // allow-palette: categorical folder colour ("red folder") -- no red step exists in the blue/cyan/neutral token scale
16199
16414
  folder: "from-red-400 to-red-500",
16415
+ // allow-palette: categorical folder colour, see above
16200
16416
  flap: "bg-red-300/50",
16417
+ // allow-palette: categorical folder colour, see above
16201
16418
  paperBack: "bg-red-100/60",
16419
+ // allow-palette: categorical folder colour, see above
16202
16420
  paperFront: "bg-red-50",
16421
+ // allow-palette: categorical folder colour, see above
16203
16422
  paperLine: "bg-red-400/40",
16423
+ // allow-palette: categorical folder colour, see above
16204
16424
  paperBorder: "border-red-200",
16425
+ // allow-palette: categorical folder colour, see above
16205
16426
  labelBg: "bg-red-900/20",
16427
+ // allow-palette: glossy paper-material highlight on the folder edge -- same fixed sheen for every color variant, not brand chrome
16206
16428
  folderBorder: "border-white/30"
16207
16429
  },
16208
16430
  grey: {
16209
- folder: "from-gray-400 to-gray-500",
16210
- flap: "bg-gray-300/50",
16211
- paperBack: "bg-gray-200/60",
16212
- paperFront: "bg-gray-100",
16213
- paperLine: "bg-gray-400/40",
16214
- paperBorder: "border-gray-300",
16215
- labelBg: "bg-gray-800/20",
16431
+ folder: "from-neutral-6 to-neutral-7",
16432
+ flap: "bg-neutral-5/50",
16433
+ paperBack: "bg-neutral-4/60",
16434
+ paperFront: "bg-neutral-2",
16435
+ paperLine: "bg-neutral-6/40",
16436
+ paperBorder: "border-neutral-5",
16437
+ labelBg: "bg-neutral-9/20",
16438
+ // allow-palette: glossy paper-material highlight on the folder edge -- same fixed sheen for every color variant, not brand chrome
16216
16439
  folderBorder: "border-white/40"
16217
16440
  }
16218
16441
  };
@@ -16395,7 +16618,7 @@ var FormLabel = ({
16395
16618
  Label,
16396
16619
  {
16397
16620
  ref,
16398
- className: cn(error && "text-destructive", className),
16621
+ className: cn(error && "text-destructive-strong", className),
16399
16622
  htmlFor: formItemId,
16400
16623
  ...props
16401
16624
  }
@@ -16452,7 +16675,7 @@ var FormMessage = ({
16452
16675
  {
16453
16676
  ref,
16454
16677
  id: formMessageId,
16455
- className: cn("text-sm font-medium text-destructive", className),
16678
+ className: cn("text-sm font-medium text-destructive-strong", className),
16456
16679
  ...props,
16457
16680
  children: body
16458
16681
  }
@@ -16678,8 +16901,7 @@ var typeStyles = {
16678
16901
  success: "bg-success text-success-foreground",
16679
16902
  warning: "bg-warning text-warning-foreground",
16680
16903
  error: "bg-destructive text-destructive-foreground",
16681
- violet: "bg-violet text-white"
16682
- // Violet is often custom in Geist
16904
+ violet: "bg-info text-info-foreground"
16683
16905
  };
16684
16906
  var getBaseAlign = (boxAlign) => {
16685
16907
  switch (boxAlign) {
@@ -16718,6 +16940,7 @@ var GeistTooltip = ({
16718
16940
  /* @__PURE__ */ jsx(LazyMotion, { features: domAnimation, children: /* @__PURE__ */ jsx(AnimatePresence, { children: open && /* @__PURE__ */ jsx(Tooltip$1.Portal, { children: /* @__PURE__ */ jsx(
16719
16941
  Tooltip$1.Positioner,
16720
16942
  {
16943
+ style: { zIndex: overlayZIndex.tooltip },
16721
16944
  side: position,
16722
16945
  align: getBaseAlign(boxAlign),
16723
16946
  sideOffset: tip ? 5 : 8,
@@ -16757,10 +16980,10 @@ var GeistTooltip = ({
16757
16980
  className: cn(
16758
16981
  "w-2.5 h-2.5 rotate-45 border-none",
16759
16982
  type === "default" && "bg-primary text-primary",
16760
- type === "success" && "bg-success text-success",
16761
- type === "warning" && "bg-warning text-warning",
16762
- type === "error" && "bg-destructive text-destructive",
16763
- type === "violet" && "bg-violet text-violet"
16983
+ type === "success" && "bg-success text-success-strong",
16984
+ type === "warning" && "bg-warning text-warning-strong",
16985
+ type === "error" && "bg-destructive text-destructive-strong",
16986
+ type === "violet" && "bg-info text-info"
16764
16987
  ),
16765
16988
  style: {
16766
16989
  // Base UI naturally positions the arrow, but we add visual flair
@@ -16913,13 +17136,19 @@ var GitHubCalendar = ({
16913
17136
  }
16914
17137
  );
16915
17138
  };
17139
+ var DEFAULT_GITHUB_INLINE_DIFF_LABELS = {
17140
+ diff: (fileName) => `Diff of ${fileName}`,
17141
+ addComment: "Add inline comment",
17142
+ closeThread: "Close thread"
17143
+ };
16916
17144
  function InlineThread({
16917
17145
  comments,
16918
17146
  resolved,
16919
17147
  onToggleResolve,
16920
17148
  onClose,
16921
17149
  onAddComment,
16922
- currentUser
17150
+ currentUser,
17151
+ closeLabel
16923
17152
  }) {
16924
17153
  const [draft, setDraft] = useState("");
16925
17154
  const textRef = useRef(null);
@@ -16952,7 +17181,7 @@ function InlineThread({
16952
17181
  {
16953
17182
  className: cn(
16954
17183
  "h-5 gap-1 px-1.5 text-[11px]",
16955
- resolved ? "bg-emerald-600 text-white hover:bg-emerald-600/90 dark:bg-emerald-500 dark:hover:bg-emerald-500/90" : "bg-secondary text-foreground dark:bg-muted dark:text-foreground"
17184
+ resolved ? "bg-success text-success-foreground hover:bg-success/90" : "bg-secondary text-foreground"
16956
17185
  ),
16957
17186
  children: [
16958
17187
  resolved ? /* @__PURE__ */ jsx(CheckCircle, { className: "h-3.5 w-3.5" }) : null,
@@ -16977,7 +17206,7 @@ function InlineThread({
16977
17206
  {
16978
17207
  variant: "ghost",
16979
17208
  size: "icon",
16980
- "aria-label": "Close thread",
17209
+ "aria-label": closeLabel,
16981
17210
  onClick: onClose,
16982
17211
  className: "h-7 w-7",
16983
17212
  children: /* @__PURE__ */ jsx(Cross, { className: "h-4 w-4" })
@@ -17034,8 +17263,10 @@ function GithubInlineDiff({
17034
17263
  onAddComment,
17035
17264
  onResolveChange,
17036
17265
  currentUser = { name: "You", initials: "YO" },
17266
+ labels: labelOverrides,
17037
17267
  className
17038
17268
  }) {
17269
+ const labels = { ...DEFAULT_GITHUB_INLINE_DIFF_LABELS, ...labelOverrides };
17039
17270
  const rows = Array.isArray(diff) ? diff : [];
17040
17271
  const [openThreadAt, setOpenThreadAt] = useState(null);
17041
17272
  const [resolvedMap, setResolvedMap] = useState({});
@@ -17056,12 +17287,12 @@ function GithubInlineDiff({
17056
17287
  "div",
17057
17288
  {
17058
17289
  role: "table",
17059
- "aria-label": `Diff of ${fileName}`,
17290
+ "aria-label": labels.diff(fileName),
17060
17291
  className: cn("rounded-[var(--radius-md)] border bg-card", className),
17061
17292
  children: [
17062
17293
  /* @__PURE__ */ jsx("div", { className: "flex items-center justify-between border-b px-2 py-1", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
17063
17294
  /* @__PURE__ */ jsx("span", { className: "text-[13px] font-medium", children: fileName }),
17064
- /* @__PURE__ */ jsx(Badge, { variant: "secondary", "aria-label": "File status", className: "h-5 px-1.5 text-[11px]", children: fileStatus })
17295
+ /* @__PURE__ */ jsx(Badge, { variant: "secondary", className: "h-5 px-1.5 text-[11px]", children: fileStatus })
17065
17296
  ] }) }),
17066
17297
  /* @__PURE__ */ jsx("ol", { role: "rowgroup", className: "divide-y", children: rows.map((line, idx) => {
17067
17298
  const isChange = line.kind === "add" || line.kind === "del";
@@ -17074,8 +17305,8 @@ function GithubInlineDiff({
17074
17305
  className: cn(
17075
17306
  "group relative flex items-stretch text-[13px]",
17076
17307
  line.kind === "hunk" && "bg-muted/50 text-muted-foreground",
17077
- line.kind === "add" && "bg-emerald-50/60 dark:bg-emerald-950/20",
17078
- line.kind === "del" && "bg-rose-50/60 dark:bg-rose-950/20"
17308
+ line.kind === "add" && "bg-success/10",
17309
+ line.kind === "del" && "bg-destructive/10"
17079
17310
  ),
17080
17311
  children: [
17081
17312
  /* @__PURE__ */ jsx("div", { className: "absolute -left-4 top-1/2 -translate-y-1/2 opacity-0 transition-opacity group-hover:opacity-100 focus-within:opacity-100", children: line.kind !== "hunk" && /* @__PURE__ */ jsxs(Tooltip, { children: [
@@ -17084,7 +17315,7 @@ function GithubInlineDiff({
17084
17315
  {
17085
17316
  size: "icon",
17086
17317
  variant: "secondary",
17087
- "aria-label": "Add inline comment",
17318
+ "aria-label": labels.addComment,
17088
17319
  className: "h-5 w-5 rounded-full shadow-sm",
17089
17320
  onClick: () => setOpenThreadAt(isOpen ? null : idx),
17090
17321
  children: /* @__PURE__ */ jsx(Message, { className: "h-3 w-3" })
@@ -17121,8 +17352,8 @@ function GithubInlineDiff({
17121
17352
  "aria-hidden": true,
17122
17353
  className: cn(
17123
17354
  "mr-1 inline-block w-2 text-center font-semibold",
17124
- line.kind === "add" && "text-emerald-600",
17125
- line.kind === "del" && "text-rose-600"
17355
+ line.kind === "add" && "text-success-strong",
17356
+ line.kind === "del" && "text-destructive-strong"
17126
17357
  ),
17127
17358
  children: line.kind === "add" ? "+" : line.kind === "del" ? "-" : " "
17128
17359
  }
@@ -17139,7 +17370,8 @@ function GithubInlineDiff({
17139
17370
  onToggleResolve: () => toggleResolve(idx),
17140
17371
  onClose: () => setOpenThreadAt(null),
17141
17372
  onAddComment: (comment) => handleAddComment(idx, comment),
17142
- currentUser
17373
+ currentUser,
17374
+ closeLabel: labels.closeThread
17143
17375
  }
17144
17376
  ) })
17145
17377
  ] })
@@ -18106,20 +18338,29 @@ var HoverCardContent = ({
18106
18338
  style,
18107
18339
  ref,
18108
18340
  ...props
18109
- }) => /* @__PURE__ */ jsx(Popover$1.Portal, { children: /* @__PURE__ */ jsx(Popover$1.Positioner, { side, align, sideOffset, children: /* @__PURE__ */ jsx(
18110
- Popover$1.Popup,
18341
+ }) => /* @__PURE__ */ jsx(Popover$1.Portal, { children: /* @__PURE__ */ jsx(
18342
+ Popover$1.Positioner,
18111
18343
  {
18112
- ref,
18113
- className: cn(
18114
- overlayClassNames.popoverSurface,
18115
- overlayPrimitiveClassNames.popoverSurface,
18116
- "w-64",
18117
- className
18118
- ),
18119
- style: { zIndex: overlayZIndex.popover, ...style },
18120
- ...props
18344
+ style: { zIndex: overlayZIndex.popover },
18345
+ side,
18346
+ align,
18347
+ sideOffset,
18348
+ children: /* @__PURE__ */ jsx(
18349
+ Popover$1.Popup,
18350
+ {
18351
+ ref,
18352
+ className: cn(
18353
+ overlayClassNames.popoverSurface,
18354
+ overlayPrimitiveClassNames.popoverSurface,
18355
+ "w-64",
18356
+ className
18357
+ ),
18358
+ style: { zIndex: overlayZIndex.popover, ...style },
18359
+ ...props
18360
+ }
18361
+ )
18121
18362
  }
18122
- ) }) });
18363
+ ) });
18123
18364
  HoverCardContent.displayName = "HoverCardContent";
18124
18365
  var HoverCardTrigger = ({
18125
18366
  asChild,
@@ -18446,9 +18687,15 @@ function InteractiveFrostedGlassCard({
18446
18687
  element.removeEventListener("pointerleave", handlePointerLeave);
18447
18688
  };
18448
18689
  }, []);
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)]`;
18690
+ 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` : (
18691
+ // allow-palette: fixed frosted-glass surface, same design category as shadow-glow-accent
18692
+ `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)]`
18693
+ );
18450
18694
  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";
18695
+ 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" : (
18696
+ // allow-palette: fixed frosted-glass surface, same design category as shadow-glow-accent
18697
+ "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"
18698
+ );
18452
18699
  const noiseFilterId = `cardNoise_${variant}`;
18453
18700
  return /* @__PURE__ */ jsxs(
18454
18701
  "div",
@@ -18809,8 +19056,8 @@ function KpiCard({ title, value, icon, trend, description, className }) {
18809
19056
  /* @__PURE__ */ jsx("p", { className: "mt-2 text-3xl font-bold text-foreground", children: typeof value === "number" ? value.toLocaleString() : value }),
18810
19057
  trend && /* @__PURE__ */ jsxs("div", { className: "mt-2 flex items-center gap-1", children: [
18811
19058
  trend.isPositive ? /* @__PURE__ */ jsxs(Fragment, { children: [
18812
- /* @__PURE__ */ jsx(ChartTrendingUp, { className: "size-4 text-green-600" }),
18813
- /* @__PURE__ */ jsxs("span", { className: "text-sm font-medium text-green-600", children: [
19059
+ /* @__PURE__ */ jsx(ChartTrendingUp, { className: "size-4 text-success-strong" }),
19060
+ /* @__PURE__ */ jsxs("span", { className: "text-sm font-medium text-success-strong", children: [
18814
19061
  "+",
18815
19062
  Math.abs(trend.value),
18816
19063
  "%"
@@ -18819,8 +19066,8 @@ function KpiCard({ title, value, icon, trend, description, className }) {
18819
19066
  /* @__PURE__ */ jsx(Minus, { className: "size-4 text-muted-foreground" }),
18820
19067
  /* @__PURE__ */ jsx("span", { className: "text-sm font-medium text-muted-foreground", children: "0%" })
18821
19068
  ] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
18822
- /* @__PURE__ */ jsx(ChartTrendingDown, { className: "size-4 text-red-600" }),
18823
- /* @__PURE__ */ jsxs("span", { className: "text-sm font-medium text-red-600", children: [
19069
+ /* @__PURE__ */ jsx(ChartTrendingDown, { className: "size-4 text-destructive-strong" }),
19070
+ /* @__PURE__ */ jsxs("span", { className: "text-sm font-medium text-destructive-strong", children: [
18824
19071
  trend.value,
18825
19072
  "%"
18826
19073
  ] })
@@ -19608,7 +19855,8 @@ function McpTool({
19608
19855
  maxArgsShown = MCP_DEFAULT_MAX_ARGS_SHOWN,
19609
19856
  maxArgValueChars = MCP_DEFAULT_MAX_ARG_VALUE_CHARS,
19610
19857
  maxOutputChars = MCP_DEFAULT_MAX_OUTPUT_CHARS,
19611
- className
19858
+ className,
19859
+ outputLabel = "Tool output"
19612
19860
  }) {
19613
19861
  const outputId = useId();
19614
19862
  const humanized = humanizeToolName(name);
@@ -19682,7 +19930,7 @@ function McpTool({
19682
19930
  expandable && isOpen && /* @__PURE__ */ jsx(
19683
19931
  "section",
19684
19932
  {
19685
- "aria-label": "Tool output",
19933
+ "aria-label": outputLabel,
19686
19934
  className: "overflow-hidden rounded-[var(--radius-lg)] border border-border bg-card",
19687
19935
  children: /* @__PURE__ */ jsx(
19688
19936
  "pre",
@@ -19834,7 +20082,7 @@ var MenuItem = function MenuItem2({
19834
20082
  /* @__PURE__ */ jsx("span", { className: "flex-1 truncate", children }),
19835
20083
  suffix && /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: "inline-flex shrink-0 [&_svg]:size-4", children: suffix })
19836
20084
  ] });
19837
- const errorClass = type === "error" ? "text-destructive data-[highlighted]:bg-destructive/10 data-[highlighted]:text-destructive" : "";
20085
+ const errorClass = type === "error" ? "text-destructive-strong data-[highlighted]:bg-destructive/10 data-[highlighted]:text-destructive-strong" : "";
19838
20086
  const passthrough = {};
19839
20087
  if (onClick !== void 0) passthrough.onClick = onClick;
19840
20088
  if (disabled !== void 0) passthrough.disabled = disabled;
@@ -20867,6 +21115,7 @@ var MultiSelectContent = ({
20867
21115
  alignOffset = 0,
20868
21116
  width = "md",
20869
21117
  onKeyDown,
21118
+ "aria-label": ariaLabel = "Multi select options",
20870
21119
  ref,
20871
21120
  ...props
20872
21121
  }) => {
@@ -20882,7 +21131,7 @@ var MultiSelectContent = ({
20882
21131
  {
20883
21132
  align,
20884
21133
  alignOffset,
20885
- className: "z-50",
21134
+ style: { zIndex: overlayZIndex.popover },
20886
21135
  side,
20887
21136
  sideOffset,
20888
21137
  children: /* @__PURE__ */ jsx(
@@ -20890,11 +21139,11 @@ var MultiSelectContent = ({
20890
21139
  {
20891
21140
  ref: composeRefs2(contentRef, ref),
20892
21141
  role: "dialog",
20893
- "aria-label": "Multi select options",
21142
+ "aria-label": ariaLabel,
20894
21143
  className: cn(
20895
21144
  "z-50 max-h-[var(--multi-select-content-max-height)] w-[var(--multi-select-width)] overflow-y-auto",
20896
21145
  "rounded-[var(--multi-select-content-radius)] border border-border bg-popover p-[var(--multi-select-content-padding)] text-popover-foreground shadow-md outline-none",
20897
- "transition-[opacity,transform,display] duration-[var(--multi-select-popover-duration)] ease-[var(--multi-select-easing)]",
21146
+ "transition-[opacity,transform] duration-[var(--multi-select-popover-duration)] ease-[var(--multi-select-easing)]",
20898
21147
  "data-starting-style:translate-y-1 data-starting-style:opacity-0 data-ending-style:translate-y-1 data-ending-style:opacity-0",
20899
21148
  "motion-reduce:transition-none motion-reduce:data-starting-style:translate-y-0 motion-reduce:data-ending-style:translate-y-0",
20900
21149
  className
@@ -21120,7 +21369,8 @@ CommandEmpty2.displayName = "CommandEmpty";
21120
21369
  var MultipleSelector = ({
21121
21370
  ref,
21122
21371
  value,
21123
- onChange,
21372
+ onChange: legacyOnChange,
21373
+ onValueChange: onChange = legacyOnChange,
21124
21374
  placeholder,
21125
21375
  defaultOptions: arrayDefaultOptions = [],
21126
21376
  options: arrayOptions,
@@ -21141,7 +21391,9 @@ var MultipleSelector = ({
21141
21391
  triggerSearchOnFocus = false,
21142
21392
  commandProps,
21143
21393
  inputProps,
21144
- hideClearAllButton = false
21394
+ hideClearAllButton = false,
21395
+ removeLabel = (optionLabel) => `Remove ${optionLabel}`,
21396
+ clearAllLabel = "Clear all"
21145
21397
  }) => {
21146
21398
  const inputRef = React45.useRef(null);
21147
21399
  const [open, setOpen] = React45.useState(false);
@@ -21354,7 +21606,7 @@ var MultipleSelector = ({
21354
21606
  e.stopPropagation();
21355
21607
  },
21356
21608
  onClick: () => handleUnselect(option),
21357
- "aria-label": "Remove",
21609
+ "aria-label": removeLabel(option.label),
21358
21610
  children: /* @__PURE__ */ jsx(Cross, { size: 14, strokeWidth: 2, "aria-hidden": "true" })
21359
21611
  }
21360
21612
  )
@@ -21406,7 +21658,7 @@ var MultipleSelector = ({
21406
21658
  "absolute end-0 top-0 flex size-9 items-center justify-center rounded-[var(--radius-lg)] border border-transparent text-muted-foreground/80 transition-colors hover:text-foreground focus-visible:outline focus-visible:outline-2 focus-visible:outline-ring/70",
21407
21659
  (hideClearAllButton || disabled || selected.length < 1 || selected.filter((s) => s.fixed).length === selected.length) && "hidden"
21408
21660
  ),
21409
- "aria-label": "Clear all",
21661
+ "aria-label": clearAllLabel,
21410
21662
  children: /* @__PURE__ */ jsx(Cross, { size: 16, strokeWidth: 2, "aria-hidden": "true" })
21411
21663
  }
21412
21664
  )
@@ -21425,7 +21677,7 @@ var MultipleSelector = ({
21425
21677
  children: open && /* @__PURE__ */ jsx(
21426
21678
  CommandList,
21427
21679
  {
21428
- className: "bg-popover text-popover-foreground shadow-lg shadow-black/5 outline-none",
21680
+ className: "bg-popover text-popover-foreground shadow-lg shadow-foreground/5 outline-none",
21429
21681
  onMouseLeave: () => setOnScrollbar(false),
21430
21682
  onMouseEnter: () => setOnScrollbar(true),
21431
21683
  onMouseUp: () => inputRef?.current?.focus(),
@@ -23022,16 +23274,16 @@ function ProgressiveBlur({
23022
23274
  }
23023
23275
  var variantMap = {
23024
23276
  success: {
23025
- container: "border-success/40 bg-success/10 text-success fill-success",
23026
- cta: "text-success decoration-success/50 hover:text-success hover:decoration-success"
23277
+ container: "border-success/40 bg-success/10 text-success-strong fill-success-strong",
23278
+ cta: "text-success-strong decoration-success/50 hover:text-success-strong hover:decoration-success"
23027
23279
  },
23028
23280
  warning: {
23029
- container: "border-warning/40 bg-warning/10 text-warning fill-warning",
23030
- cta: "text-warning decoration-warning/50 hover:text-warning hover:decoration-warning"
23281
+ container: "border-warning/40 bg-warning/10 text-warning-strong fill-warning-strong",
23282
+ cta: "text-warning-strong decoration-warning/50 hover:text-warning-strong hover:decoration-warning"
23031
23283
  },
23032
23284
  error: {
23033
- container: "border-destructive/40 bg-destructive/10 text-destructive fill-destructive",
23034
- cta: "text-destructive decoration-destructive/50 hover:text-destructive hover:decoration-destructive"
23285
+ container: "border-destructive/40 bg-destructive/10 text-destructive-strong fill-destructive-strong",
23286
+ cta: "text-destructive-strong decoration-destructive/50 hover:text-destructive-strong hover:decoration-destructive"
23035
23287
  },
23036
23288
  info: {
23037
23289
  container: "border-border bg-muted text-foreground fill-foreground",
@@ -23510,6 +23762,8 @@ function QuestionToolState({
23510
23762
  onSubmitAnswer,
23511
23763
  output,
23512
23764
  headerLabel = "Question",
23765
+ previousQuestionLabel = "Previous question",
23766
+ nextQuestionLabel = "Next question",
23513
23767
  className
23514
23768
  }) {
23515
23769
  const totalQuestions = totalQuestionsProp ?? questions.length;
@@ -23570,7 +23824,7 @@ function QuestionToolState({
23570
23824
  onClick: goPrev,
23571
23825
  disabled: !canGoPrev,
23572
23826
  className: "inline-flex size-5 items-center justify-center rounded-[var(--radius-sm)] transition-colors duration-micro hover:bg-accent disabled:pointer-events-none disabled:opacity-40",
23573
- "aria-label": "Previous question",
23827
+ "aria-label": previousQuestionLabel,
23574
23828
  children: /* @__PURE__ */ jsx(ChevronUp, { className: "h-3.5 w-3.5", "aria-hidden": "true" })
23575
23829
  }
23576
23830
  ),
@@ -23586,7 +23840,7 @@ function QuestionToolState({
23586
23840
  onClick: goNext,
23587
23841
  disabled: !canGoNext,
23588
23842
  className: "inline-flex size-5 items-center justify-center rounded-[var(--radius-sm)] transition-colors duration-micro hover:bg-accent disabled:pointer-events-none disabled:opacity-40",
23589
- "aria-label": "Next question",
23843
+ "aria-label": nextQuestionLabel,
23590
23844
  children: /* @__PURE__ */ jsx(ChevronDown, { className: "h-3.5 w-3.5", "aria-hidden": "true" })
23591
23845
  }
23592
23846
  )
@@ -23640,13 +23894,15 @@ var itemStyle = {
23640
23894
  "--radio-motion-easing": radioTokens.motion.easing
23641
23895
  };
23642
23896
  var radioControlClassName = cn(
23643
- "relative inline-flex shrink-0 items-center justify-center rounded-[var(--radius-full)] border-[length:var(--radio-border-width)] border-border bg-background text-foreground",
23897
+ "relative inline-flex shrink-0 items-center justify-center rounded-[var(--radius-full)] border-[length:var(--radio-border-width)] border-[var(--control-border)] bg-background text-foreground",
23644
23898
  "size-[var(--radio-control-size)]",
23645
23899
  "transition-[background-color,border-color,box-shadow] duration-[var(--radio-motion-duration)] ease-[var(--radio-motion-easing)]",
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-['']",
23647
- "peer-checked:border-[var(--neutral-12)] peer-checked:after:scale-100 peer-checked:after:opacity-100",
23648
- "peer-focus-visible:outline-none",
23649
- "peer-disabled:border-[var(--neutral-5)] peer-disabled:bg-muted peer-disabled:text-[var(--neutral-8)]"
23900
+ "after:size-[var(--radio-dot-size)] after:scale-95 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-['']",
23901
+ // "On" is the action colour, as for checkbox / toggle / slider / choicebox —
23902
+ // it was --neutral-12, which only matched the House ink by coincidence.
23903
+ "peer-checked:border-primary peer-checked:text-primary peer-checked:after:scale-100 peer-checked:after:opacity-100",
23904
+ controlFocusProxyClassName,
23905
+ "peer-disabled:border-neutral-5 peer-disabled:bg-muted peer-disabled:text-neutral-8"
23650
23906
  );
23651
23907
  function useRadioGroupContext() {
23652
23908
  return use(RadioGroupContext);
@@ -23908,7 +24164,8 @@ function ReactionChip({
23908
24164
  onSelect,
23909
24165
  className,
23910
24166
  emojis = ["\u{1F44D}", "\u2764\uFE0F", "\u{1F602}", "\u{1F389}"],
23911
- selected
24167
+ selected,
24168
+ addReactionLabel = "Add reaction"
23912
24169
  }) {
23913
24170
  return (
23914
24171
  // biome-ignore lint/a11y/useSemanticElements: ARIA pattern
@@ -23922,7 +24179,7 @@ function ReactionChip({
23922
24179
  className
23923
24180
  ),
23924
24181
  role: "group",
23925
- "aria-label": "Add reaction",
24182
+ "aria-label": addReactionLabel,
23926
24183
  children: emojis.map((em) => {
23927
24184
  const isActive = selected === em;
23928
24185
  const btnClassName = cn(
@@ -24948,7 +25205,8 @@ function SearchTool({
24948
25205
  expanded,
24949
25206
  onExpandedChange,
24950
25207
  maxResultsHeightPx = SEARCH_DEFAULT_MAX_HEIGHT_PX,
24951
- className
25208
+ className,
25209
+ resultsLabel = "Search results"
24952
25210
  }) {
24953
25211
  const panelId = useId();
24954
25212
  const [internalOpen, setInternalOpen] = useState(defaultOpen);
@@ -25013,7 +25271,7 @@ function SearchTool({
25013
25271
  "\u201D"
25014
25272
  ] })
25015
25273
  ] }),
25016
- /* @__PURE__ */ jsx("div", { className: "overflow-y-auto bg-card", style: { maxHeight: `${maxResultsHeightPx}px` }, children: /* @__PURE__ */ jsx("ul", { "aria-label": "Search results", className: "flex flex-col gap-1 p-1", children: results.map((result) => /* @__PURE__ */ jsx(SearchResultRow, { result }, getSearchResultKey(result))) }) })
25274
+ /* @__PURE__ */ jsx("div", { className: "overflow-y-auto bg-card", style: { maxHeight: `${maxResultsHeightPx}px` }, children: /* @__PURE__ */ jsx("ul", { "aria-label": resultsLabel, className: "flex flex-col gap-1 p-1", children: results.map((result) => /* @__PURE__ */ jsx(SearchResultRow, { result }, getSearchResultKey(result))) }) })
25017
25275
  ]
25018
25276
  }
25019
25277
  )
@@ -25139,6 +25397,7 @@ var SheetContent = ({
25139
25397
  noOverlay = false,
25140
25398
  showClose,
25141
25399
  close,
25400
+ closeLabel = "Close",
25142
25401
  style,
25143
25402
  ref,
25144
25403
  ...props
@@ -25160,7 +25419,7 @@ var SheetContent = ({
25160
25419
  shouldRenderClose ? /* @__PURE__ */ jsxs(
25161
25420
  SheetClose,
25162
25421
  {
25163
- "aria-label": "Close",
25422
+ "aria-label": closeLabel,
25164
25423
  className: cn(
25165
25424
  "absolute right-[var(--sheet-close-offset)] top-[var(--sheet-close-offset)] inline-flex size-[var(--sheet-close-size)] items-center justify-center rounded-[var(--sheet-close-radius)] text-muted-foreground",
25166
25425
  "transition-[background-color,color,box-shadow] duration-[var(--motion-duration-micro)] ease-[var(--ease-out)] hover:bg-muted hover:text-foreground",
@@ -25169,7 +25428,7 @@ var SheetContent = ({
25169
25428
  ),
25170
25429
  children: [
25171
25430
  /* @__PURE__ */ jsx(Cross, { "aria-hidden": "true", className: "size-[var(--sheet-close-icon-size)]" }),
25172
- /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Close" })
25431
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: closeLabel })
25173
25432
  ]
25174
25433
  }
25175
25434
  ) : null
@@ -25396,13 +25655,7 @@ var ShowMore = ({
25396
25655
  style: cssVars,
25397
25656
  ...props,
25398
25657
  children: [
25399
- !noBorder && /* @__PURE__ */ jsx(
25400
- "div",
25401
- {
25402
- "aria-hidden": "true",
25403
- className: cn("h-px flex-1 bg-[var(--neutral-7)]", dividerClassName)
25404
- }
25405
- ),
25658
+ !noBorder && /* @__PURE__ */ jsx("div", { "aria-hidden": "true", className: cn("h-px flex-1 bg-neutral-7", dividerClassName) }),
25406
25659
  /* @__PURE__ */ jsx("div", { className: "shrink-0 bg-background px-[var(--show-more-gap)]", children: /* @__PURE__ */ jsxs(
25407
25660
  "button",
25408
25661
  {
@@ -25436,13 +25689,7 @@ var ShowMore = ({
25436
25689
  ]
25437
25690
  }
25438
25691
  ) }),
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
- )
25692
+ !noBorder && /* @__PURE__ */ jsx("div", { "aria-hidden": "true", className: cn("h-px flex-1 bg-neutral-7", dividerClassName) })
25446
25693
  ]
25447
25694
  }
25448
25695
  );
@@ -25618,6 +25865,8 @@ var SliderNumberFlow = ({
25618
25865
  className,
25619
25866
  value,
25620
25867
  ref,
25868
+ /** Accessible name for the slider thumb. Pass a translated string. */
25869
+ valueLabel = "Slider Value",
25621
25870
  ...props
25622
25871
  }) => /* @__PURE__ */ jsxs(
25623
25872
  Slider$1.Root,
@@ -25632,7 +25881,7 @@ var SliderNumberFlow = ({
25632
25881
  Slider$1.Thumb,
25633
25882
  {
25634
25883
  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",
25635
- "aria-label": "Slider Value",
25884
+ "aria-label": valueLabel,
25636
25885
  children: (Array.isArray(value) ? value[0] : value) != null && /* @__PURE__ */ jsx(
25637
25886
  NumberFlow,
25638
25887
  {
@@ -26282,7 +26531,7 @@ function Stepper({
26282
26531
  className: cn(
26283
26532
  "relative flex items-center justify-center rounded-full border-2 transition-[background-color,border-color,box-shadow,color,opacity,transform]",
26284
26533
  config.icon,
26285
- status === "completed" && "border-primary bg-primary text-white",
26534
+ status === "completed" && "border-primary bg-primary text-primary-foreground",
26286
26535
  status === "current" && "border-primary bg-background text-primary",
26287
26536
  status === "pending" && "border-neutral-6 bg-background text-muted-foreground",
26288
26537
  status === "error" && "border-destructive bg-destructive text-destructive-foreground",
@@ -26421,7 +26670,17 @@ function ProgressStepper({
26421
26670
  style: { width: `${progress}%` }
26422
26671
  }
26423
26672
  ) }),
26424
- labels && labels.length > 0 && /* @__PURE__ */ jsx("div", { className: "flex justify-between text-xs text-muted-foreground", children: labels.map((label, index) => /* @__PURE__ */ jsx("span", { className: cn(index <= currentStep && "text-primary/90 font-medium"), children: label }, index)) }),
26673
+ labels && labels.length > 0 && /* @__PURE__ */ jsx("div", { className: "flex justify-between text-xs text-muted-foreground", children: labels.map((label, index) => /* @__PURE__ */ jsx(
26674
+ "span",
26675
+ {
26676
+ className: cn(
26677
+ "font-medium",
26678
+ index <= currentStep ? "text-primary/90" : "text-muted-foreground"
26679
+ ),
26680
+ children: label
26681
+ },
26682
+ index
26683
+ )) }),
26425
26684
  /* @__PURE__ */ jsxs("p", { className: "text-center text-sm text-muted-foreground", children: [
26426
26685
  "\u6B65\u9AA4 ",
26427
26686
  currentStep + 1,
@@ -26608,6 +26867,7 @@ var SwitchControl = function SwitchControl2({
26608
26867
  "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)]",
26609
26868
  "text-muted-foreground transition-[background-color,box-shadow,color] duration-[var(--switch-duration)] ease-[var(--switch-easing)]",
26610
26869
  "peer-checked:bg-background peer-checked:text-foreground peer-checked:shadow-sm",
26870
+ controlFocusProxyClassName,
26611
26871
  "",
26612
26872
  "peer-disabled:pointer-events-none peer-disabled:text-muted-foreground/60",
26613
26873
  "[&_svg]:size-[var(--switch-icon-size)]"
@@ -27294,7 +27554,8 @@ function isThemeSwitcherValue(value) {
27294
27554
  var ThemeSwitcher = ({
27295
27555
  value,
27296
27556
  defaultValue = "system",
27297
- onChange,
27557
+ onChange: legacyOnChange,
27558
+ onValueChange: onChange = legacyOnChange,
27298
27559
  disabled = false,
27299
27560
  size = "medium",
27300
27561
  name,
@@ -27437,7 +27698,8 @@ function playToggleSound(lastPlayedAt) {
27437
27698
  var ThemeToggle = ({
27438
27699
  value,
27439
27700
  defaultValue,
27440
- onChange,
27701
+ onChange: legacyOnChange,
27702
+ onValueChange: onChange = legacyOnChange,
27441
27703
  size = "md",
27442
27704
  sound = false,
27443
27705
  applyToDocument = false,
@@ -27784,7 +28046,8 @@ var TodoTool = memo(function TodoTool2({
27784
28046
  mode = "updating",
27785
28047
  todos = [],
27786
28048
  dimmed = false,
27787
- className
28049
+ className,
28050
+ listLabel = "To-dos"
27788
28051
  }) {
27789
28052
  if (state === "loading") {
27790
28053
  return /* @__PURE__ */ jsx("div", { className: cn("text-sm leading-relaxed", className), children: /* @__PURE__ */ jsx(TextShimmer, { as: "span", className: "text-sm", children: LOADING_LABEL[mode] }) });
@@ -27793,7 +28056,7 @@ var TodoTool = memo(function TodoTool2({
27793
28056
  return /* @__PURE__ */ jsx(
27794
28057
  "ol",
27795
28058
  {
27796
- "aria-label": "To-dos",
28059
+ "aria-label": listLabel,
27797
28060
  className: cn("flex flex-col gap-2 text-sm leading-relaxed", className),
27798
28061
  children: todos.map((todo, idx) => {
27799
28062
  const key = todo.id ?? `${idx}-${todo.content.slice(0, 16)}`;
@@ -27899,6 +28162,7 @@ var Toggle = ({
27899
28162
  "aria-hidden": "true",
27900
28163
  className: cn(
27901
28164
  "relative inline-flex h-[var(--toggle-track-height)] w-[var(--toggle-track-width)] items-center rounded-[var(--toggle-radius)] border bg-[var(--toggle-track-off)] p-px",
28165
+ controlFocusProxyClassName,
27902
28166
  "border-[var(--toggle-track-border)] transition-[background-color,border-color] duration-[var(--toggle-duration)] ease-[var(--toggle-easing)]",
27903
28167
  "peer-checked:bg-[var(--toggle-track-on)]",
27904
28168
  "peer-checked:[&>span]:translate-x-[var(--toggle-thumb-translate)] peer-checked:[&>span]:text-[var(--toggle-icon-on)]",
@@ -28448,7 +28712,8 @@ function UpgradeBanner({
28448
28712
  onDismiss,
28449
28713
  variant = "inline",
28450
28714
  secondaryAction,
28451
- className
28715
+ className,
28716
+ dismissLabel = "Dismiss"
28452
28717
  }) {
28453
28718
  const [dismissed, setDismissed] = useState(false);
28454
28719
  if (dismissed) return null;
@@ -28499,7 +28764,7 @@ function UpgradeBanner({
28499
28764
  {
28500
28765
  type: "button",
28501
28766
  onClick: handleDismiss,
28502
- "aria-label": "Dismiss",
28767
+ "aria-label": dismissLabel,
28503
28768
  className: "rounded-[var(--radius-md)] p-1 text-neutral-10 transition-colors hover:bg-neutral-3 hover:text-neutral-12",
28504
28769
  children: /* @__PURE__ */ jsx(Cross, { className: "h-3.5 w-3.5" })
28505
28770
  }
@@ -28516,13 +28781,13 @@ var formatTime = (seconds) => {
28516
28781
  const remainingSeconds = Math.floor(seconds % 60);
28517
28782
  return `${minutes}:${remainingSeconds.toString().padStart(2, "0")}`;
28518
28783
  };
28519
- var CustomSlider = ({ value, onChange, className }) => {
28784
+ var CustomSlider = ({ value, onValueChange, className }) => {
28520
28785
  const shouldReduceMotion = useReducedMotion() ?? false;
28521
28786
  const handleClick = (e) => {
28522
28787
  const rect = e.currentTarget.getBoundingClientRect();
28523
28788
  const x = e.clientX - rect.left;
28524
28789
  const percentage = x / rect.width * 100;
28525
- onChange(Math.min(Math.max(percentage, 0), 100));
28790
+ onValueChange(Math.min(Math.max(percentage, 0), 100));
28526
28791
  };
28527
28792
  return /* @__PURE__ */ jsx(
28528
28793
  motion.div,
@@ -28621,6 +28886,7 @@ var VideoPlayer = ({
28621
28886
  motion.div,
28622
28887
  {
28623
28888
  className: cn(
28889
+ // allow-palette: frame scrim sits over arbitrary video content, not the app surface
28624
28890
  "relative mx-auto w-full max-w-4xl overflow-hidden rounded-[var(--radius-xl)] bg-black/60 shadow-lg backdrop-blur-sm",
28625
28891
  className
28626
28892
  ),
@@ -28656,7 +28922,7 @@ var VideoPlayer = ({
28656
28922
  children: [
28657
28923
  /* @__PURE__ */ jsxs("div", { className: "mb-2 flex items-center gap-2", children: [
28658
28924
  /* @__PURE__ */ jsx("span", { className: "text-sm text-white", children: formatTime(currentTime) }),
28659
- /* @__PURE__ */ jsx(CustomSlider, { value: progress, onChange: handleSeek, className: "flex-1" }),
28925
+ /* @__PURE__ */ jsx(CustomSlider, { value: progress, onValueChange: handleSeek, className: "flex-1" }),
28660
28926
  /* @__PURE__ */ jsx("span", { className: "text-sm text-white", children: formatTime(duration) })
28661
28927
  ] }),
28662
28928
  /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
@@ -28696,7 +28962,7 @@ var VideoPlayer = ({
28696
28962
  )
28697
28963
  }
28698
28964
  ),
28699
- /* @__PURE__ */ jsx("div", { className: "w-24", children: /* @__PURE__ */ jsx(CustomSlider, { value: volume * 100, onChange: handleVolumeChange }) })
28965
+ /* @__PURE__ */ jsx("div", { className: "w-24", children: /* @__PURE__ */ jsx(CustomSlider, { value: volume * 100, onValueChange: handleVolumeChange }) })
28700
28966
  ] })
28701
28967
  ] }),
28702
28968
  /* @__PURE__ */ jsx("div", { className: "flex items-center gap-1", children: speeds.map((speed) => /* @__PURE__ */ createElement(
@@ -28712,7 +28978,9 @@ var VideoPlayer = ({
28712
28978
  variant: "ghost",
28713
28979
  size: "icon",
28714
28980
  className: cn(
28981
+ // allow-palette: control button sits on the dark video control scrim, not the app surface
28715
28982
  "text-white hover:bg-white/10 hover:text-white",
28983
+ // allow-palette: active-speed highlight sits on the dark video control scrim
28716
28984
  playbackSpeed === speed && "bg-white/20"
28717
28985
  ),
28718
28986
  "aria-label": `${speed}x speed`,
@@ -29185,6 +29453,6 @@ function XPostSkeleton({ className }) {
29185
29453
  );
29186
29454
  }
29187
29455
 
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 };
29456
+ 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, BentoCard, BentoGrid, BitbucketAvatar, Book, BorderTrail, Box, BrandMark, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Browser, BrowserMockup, BulkActionBar, BulkActionConfirmDialog, Button, ButtonLink, Calendar, CanvasRevealEffect, Card, CardBody, CardContent, CardDescription, CardErrorBoundary, CardFooter, CardHeader, CardIcon, CardRoot, 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, DEFAULT_GITHUB_INLINE_DIFF_LABELS, DITHERING_SHAPES, DITHERING_TYPES, DataList, DatePicker, 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, ISO_DATE_FORMAT, 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, breakpoints, buttonVariants, cardVariants, choiceboxItemVariants, colorBadgeSizes, colorBadgeVariants, containerWidths, contrastRequirements, fixNumberedListBreaks, flexLayouts, focusRing, formatShortRelative, getCurrentBreakpoint, getDensitySpacing, getSpacing, gridLayouts, isBreakpoint, labelVariants, mediaQueries, minTouchTarget, navigationMenuTriggerStyle, normalizeCodeBlockLanguage, normalizeCodeFenceLanguages, normalizeMessageMarkdown, parseIsoDate, prefersReducedMotion, progressIndicatorVariants, progressVariants, resolveCodeBlockLanguageIcon, responsive, responsivePatterns, skipLinkStyle, spacing, spacingPatterns, spacingToCss, statusBadgeVariants, tabsContentVariants, tabsListVariants, tabsTriggerVariants, toIsoDate, toggleGroupItemVariants, toggleGroupVariants, useBulkSelection, useCarousel, useChart, useConfirmDialog, useCopyToClipboard, useDebounce, useFeatureGate, useFormField, useStepper, useStepperContext, useToasts, visuallyHidden, withErrorBoundary, wrap, zIndex };
29189
29457
  //# sourceMappingURL=index.js.map
29190
29458
  //# sourceMappingURL=index.js.map