myoperator-mcp 0.2.126 → 0.2.128

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 (2) hide show
  1. package/dist/index.js +439 -358
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -22,7 +22,7 @@ const accordionVariants = cva("w-full", {
22
22
  variant: {
23
23
  default: "",
24
24
  bordered:
25
- "border border-semantic-border-layout rounded-lg divide-y divide-semantic-border-layout",
25
+ "border border-solid border-semantic-border-layout rounded-lg divide-y divide-semantic-border-layout",
26
26
  },
27
27
  },
28
28
  defaultVariants: {
@@ -139,7 +139,7 @@ export interface AccordionProps
139
139
  onValueChange?: (value: string[]) => void;
140
140
  }
141
141
 
142
- const Accordion = React.forwardRef<HTMLDivElement, AccordionProps>(
142
+ const Accordion = React.forwardRef(
143
143
  (
144
144
  {
145
145
  className,
@@ -150,8 +150,8 @@ const Accordion = React.forwardRef<HTMLDivElement, AccordionProps>(
150
150
  onValueChange,
151
151
  children,
152
152
  ...props
153
- },
154
- ref
153
+ }: AccordionProps,
154
+ ref: React.Ref<HTMLDivElement>
155
155
  ) => {
156
156
  const [internalValue, setInternalValue] =
157
157
  React.useState<string[]>(defaultValue);
@@ -207,8 +207,8 @@ export interface AccordionItemProps
207
207
  disabled?: boolean;
208
208
  }
209
209
 
210
- const AccordionItem = React.forwardRef<HTMLDivElement, AccordionItemProps>(
211
- ({ className, value, disabled, children, ...props }, ref) => {
210
+ const AccordionItem = React.forwardRef(
211
+ ({ className, value, disabled, children, ...props }: AccordionItemProps, ref: React.Ref<HTMLDivElement>) => {
212
212
  const { value: openValues, variant } = useAccordionContext();
213
213
  const isOpen = openValues.includes(value);
214
214
 
@@ -248,10 +248,7 @@ export interface AccordionTriggerProps
248
248
  showChevron?: boolean;
249
249
  }
250
250
 
251
- const AccordionTrigger = React.forwardRef<
252
- HTMLButtonElement,
253
- AccordionTriggerProps
254
- >(({ className, showChevron = true, children, ...props }, ref) => {
251
+ const AccordionTrigger = React.forwardRef(({ className, showChevron = true, children, ...props }: AccordionTriggerProps, ref: React.Ref<HTMLButtonElement>) => {
255
252
  const {
256
253
  type,
257
254
  value: openValues,
@@ -310,10 +307,7 @@ export interface AccordionContentProps
310
307
  React.HTMLAttributes<HTMLDivElement>,
311
308
  VariantProps<typeof accordionContentVariants> {}
312
309
 
313
- const AccordionContent = React.forwardRef<
314
- HTMLDivElement,
315
- AccordionContentProps
316
- >(({ className, children, ...props }, ref) => {
310
+ const AccordionContent = React.forwardRef(({ className, children, ...props }: AccordionContentProps, ref: React.Ref<HTMLDivElement>) => {
317
311
  const { variant } = useAccordionContext();
318
312
  const { isOpen } = useAccordionItemContext();
319
313
  const contentRef = React.useRef<HTMLDivElement>(null);
@@ -364,7 +358,7 @@ import { cn } from "@/lib/utils";
364
358
  * Colors are hardcoded for Bootstrap compatibility.
365
359
  */
366
360
  const alertVariants = cva(
367
- "relative w-full rounded border p-4 text-sm text-semantic-text-primary [&>svg~*]:pl-8 [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4",
361
+ "relative w-full rounded border border-solid p-4 text-sm text-semantic-text-primary [&>svg~*]:pl-8 [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4",
368
362
  {
369
363
  variants: {
370
364
  variant: {
@@ -448,7 +442,7 @@ export interface AlertProps
448
442
  defaultOpen?: boolean;
449
443
  }
450
444
 
451
- const Alert = React.forwardRef<HTMLDivElement, AlertProps>(
445
+ const Alert = React.forwardRef(
452
446
  (
453
447
  {
454
448
  className,
@@ -463,8 +457,8 @@ const Alert = React.forwardRef<HTMLDivElement, AlertProps>(
463
457
  defaultOpen = true,
464
458
  children,
465
459
  ...props
466
- },
467
- ref
460
+ }: AlertProps,
461
+ ref: React.Ref<HTMLDivElement>
468
462
  ) => {
469
463
  const [internalOpen, setInternalOpen] = React.useState(defaultOpen);
470
464
  const isControlled = controlledOpen !== undefined;
@@ -536,10 +530,7 @@ Alert.displayName = "Alert";
536
530
  /**
537
531
  * Alert title component for the heading text.
538
532
  */
539
- const AlertTitle = React.forwardRef<
540
- HTMLHeadingElement,
541
- React.HTMLAttributes<HTMLHeadingElement>
542
- >(({ className, children, ...props }, ref) => (
533
+ const AlertTitle = React.forwardRef(({ className, children, ...props }: React.HTMLAttributes<HTMLHeadingElement>, ref: React.Ref<HTMLHeadingElement>) => (
543
534
  <h5
544
535
  ref={ref}
545
536
  className={cn("font-semibold leading-tight tracking-tight", className)}
@@ -553,10 +544,7 @@ AlertTitle.displayName = "AlertTitle";
553
544
  /**
554
545
  * Alert description component for the body text.
555
546
  */
556
- const AlertDescription = React.forwardRef<
557
- HTMLParagraphElement,
558
- React.HTMLAttributes<HTMLParagraphElement>
559
- >(({ className, ...props }, ref) => (
547
+ const AlertDescription = React.forwardRef(({ className, ...props }: React.HTMLAttributes<HTMLParagraphElement>, ref: React.Ref<HTMLParagraphElement>) => (
560
548
  <p ref={ref} className={cn("m-0 mt-1 text-sm", className)} {...props} />
561
549
  ));
562
550
  AlertDescription.displayName = "AlertDescription";
@@ -608,11 +596,11 @@ const avatarVariants = cva(
608
596
  );
609
597
 
610
598
  const statusDotSizeMap = {
611
- xs: "size-2 border",
612
- sm: "size-2.5 border-[1.5px]",
613
- md: "size-3 border-2",
614
- lg: "size-3.5 border-2",
615
- xl: "size-4 border-2",
599
+ xs: "size-2 border border-solid",
600
+ sm: "size-2.5 border-[1.5px] border-solid",
601
+ md: "size-3 border-2 border-solid",
602
+ lg: "size-3.5 border-2 border-solid",
603
+ xl: "size-4 border-2 border-solid",
616
604
  } as const;
617
605
 
618
606
  const statusColorMap = {
@@ -648,7 +636,7 @@ export interface AvatarProps
648
636
  * <Avatar initials="AS" size="xs" />
649
637
  * \`\`\`
650
638
  */
651
- const Avatar = React.forwardRef<HTMLDivElement, AvatarProps>(
639
+ const Avatar = React.forwardRef(
652
640
  (
653
641
  {
654
642
  className,
@@ -661,8 +649,8 @@ const Avatar = React.forwardRef<HTMLDivElement, AvatarProps>(
661
649
  status,
662
650
  children,
663
651
  ...props
664
- },
665
- ref
652
+ }: AvatarProps,
653
+ ref: React.Ref<HTMLDivElement>
666
654
  ) => {
667
655
  const resolvedSize = size ?? "md";
668
656
  const displayInitials = initials ?? (name ? getInitials(name) : undefined);
@@ -729,7 +717,7 @@ const badgeVariants = cva(
729
717
  // shadcn-style variants (new)
730
718
  secondary: "bg-semantic-bg-ui text-semantic-text-primary",
731
719
  outline:
732
- "border border-semantic-border-layout bg-transparent text-semantic-text-primary",
720
+ "border border-solid border-semantic-border-layout bg-transparent text-semantic-text-primary",
733
721
  destructive: "bg-semantic-error-surface text-semantic-error-primary",
734
722
  },
735
723
  size: {
@@ -774,7 +762,7 @@ export interface BadgeProps
774
762
  asChild?: boolean;
775
763
  }
776
764
 
777
- const Badge = React.forwardRef<HTMLDivElement, BadgeProps>(
765
+ const Badge = React.forwardRef(
778
766
  (
779
767
  {
780
768
  className,
@@ -785,8 +773,8 @@ const Badge = React.forwardRef<HTMLDivElement, BadgeProps>(
785
773
  asChild = false,
786
774
  children,
787
775
  ...props
788
- },
789
- ref
776
+ }: BadgeProps,
777
+ ref: React.Ref<HTMLDivElement>
790
778
  ) => {
791
779
  const Comp = asChild ? Slot : "div";
792
780
 
@@ -842,12 +830,12 @@ const buttonVariants = cva(
842
830
  success:
843
831
  "bg-semantic-success-primary text-semantic-text-inverted hover:bg-semantic-success-hover",
844
832
  outline:
845
- "border border-semantic-border-layout bg-semantic-bg-primary text-semantic-text-secondary hover:bg-semantic-primary-surface",
833
+ "border border-solid border-[var(--color-neutral-300,#D5D7DA)] bg-semantic-bg-primary text-semantic-text-secondary hover:bg-semantic-primary-surface",
846
834
  secondary:
847
835
  "bg-semantic-primary-surface text-semantic-text-secondary hover:bg-semantic-bg-hover",
848
836
  ghost:
849
837
  "text-semantic-text-muted hover:bg-semantic-bg-ui hover:text-semantic-text-primary",
850
- link: "text-semantic-text-secondary underline-offset-4 hover:underline",
838
+ link: "text-semantic-text-link underline-offset-4 hover:underline",
851
839
  dashed:
852
840
  "border border-dashed border-semantic-bg-hover bg-transparent text-semantic-text-muted hover:border-semantic-border-primary hover:text-semantic-text-secondary hover:bg-[var(--color-neutral-50)]",
853
841
  },
@@ -893,7 +881,7 @@ export interface ButtonProps
893
881
  loadingText?: string;
894
882
  }
895
883
 
896
- const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(
884
+ const Button = React.forwardRef(
897
885
  (
898
886
  {
899
887
  className,
@@ -907,8 +895,8 @@ const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(
907
895
  children,
908
896
  disabled,
909
897
  ...props
910
- },
911
- ref
898
+ }: ButtonProps,
899
+ ref: React.Ref<HTMLButtonElement>
912
900
  ) => {
913
901
  const Comp = asChild ? Slot : "button";
914
902
 
@@ -950,7 +938,7 @@ import { cn } from "@/lib/utils";
950
938
  * Checkbox box variants (the outer container)
951
939
  */
952
940
  const checkboxVariants = cva(
953
- "peer inline-flex items-center justify-center shrink-0 rounded border-2 transition-colors duration-200 ease-in-out focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-semantic-primary focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-semantic-primary data-[state=checked]:border-semantic-primary data-[state=checked]:text-semantic-text-inverted data-[state=indeterminate]:bg-semantic-primary data-[state=indeterminate]:border-semantic-primary data-[state=indeterminate]:text-semantic-text-inverted data-[state=unchecked]:bg-semantic-bg-primary data-[state=unchecked]:border-semantic-border-input data-[state=unchecked]:hover:border-[var(--color-neutral-400)]",
941
+ "peer inline-flex items-center justify-center shrink-0 rounded border-2 border-solid transition-colors duration-200 ease-in-out focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-semantic-primary focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-semantic-primary data-[state=checked]:border-semantic-primary data-[state=checked]:text-semantic-text-inverted data-[state=indeterminate]:bg-semantic-primary data-[state=indeterminate]:border-semantic-primary data-[state=indeterminate]:text-semantic-text-inverted data-[state=unchecked]:bg-semantic-bg-primary data-[state=unchecked]:border-semantic-border-input data-[state=unchecked]:hover:border-[var(--color-neutral-400)]",
954
942
  {
955
943
  variants: {
956
944
  size: {
@@ -1030,10 +1018,7 @@ export interface CheckboxProps
1030
1018
  separateLabel?: boolean;
1031
1019
  }
1032
1020
 
1033
- const Checkbox = React.forwardRef<
1034
- React.ElementRef<typeof CheckboxPrimitive.Root>,
1035
- CheckboxProps
1036
- >(
1021
+ const Checkbox = React.forwardRef(
1037
1022
  (
1038
1023
  {
1039
1024
  className,
@@ -1046,8 +1031,8 @@ const Checkbox = React.forwardRef<
1046
1031
  id,
1047
1032
  disabled,
1048
1033
  ...props
1049
- },
1050
- ref
1034
+ }: CheckboxProps,
1035
+ ref: React.Ref<React.ElementRef<typeof CheckboxPrimitive.Root>>
1051
1036
  ) => {
1052
1037
  const checkbox = (
1053
1038
  <CheckboxPrimitive.Root
@@ -1221,10 +1206,7 @@ export interface ConfirmationModalProps {
1221
1206
  * />
1222
1207
  * \`\`\`
1223
1208
  */
1224
- const ConfirmationModal = React.forwardRef<
1225
- HTMLDivElement,
1226
- ConfirmationModalProps
1227
- >(
1209
+ const ConfirmationModal = React.forwardRef(
1228
1210
  (
1229
1211
  {
1230
1212
  open,
@@ -1239,8 +1221,8 @@ const ConfirmationModal = React.forwardRef<
1239
1221
  cancelButtonText = "Cancel",
1240
1222
  trigger,
1241
1223
  className,
1242
- },
1243
- ref
1224
+ }: ConfirmationModalProps,
1225
+ ref: React.Ref<HTMLDivElement>
1244
1226
  ) => {
1245
1227
  const handleConfirm = () => {
1246
1228
  onConfirm?.();
@@ -1319,7 +1301,7 @@ export interface ContactListItemProps
1319
1301
  * />
1320
1302
  * \`\`\`
1321
1303
  */
1322
- const ContactListItem = React.forwardRef<HTMLDivElement, ContactListItemProps>(
1304
+ const ContactListItem = React.forwardRef(
1323
1305
  (
1324
1306
  {
1325
1307
  name,
@@ -1330,8 +1312,8 @@ const ContactListItem = React.forwardRef<HTMLDivElement, ContactListItemProps>(
1330
1312
  onClick,
1331
1313
  className,
1332
1314
  ...props
1333
- },
1334
- ref
1315
+ }: ContactListItemProps,
1316
+ ref: React.Ref<HTMLDivElement>
1335
1317
  ) => {
1336
1318
  return (
1337
1319
  <div
@@ -1393,13 +1375,13 @@ const creatableMultiSelectTriggerVariants = cva(
1393
1375
  variants: {
1394
1376
  state: {
1395
1377
  default:
1396
- "border border-semantic-border-input hover:border-semantic-border-input-focus",
1378
+ "border border-solid border-semantic-border-input hover:border-semantic-border-input-focus",
1397
1379
  error:
1398
- "border border-semantic-error-primary/40 hover:border-semantic-error-primary",
1380
+ "border border-solid border-semantic-error-primary/40 hover:border-semantic-error-primary",
1399
1381
  focused:
1400
- "border border-semantic-border-focus shadow-[0_0_0_1px_rgba(43,188,202,0.15)]",
1382
+ "border border-solid border-semantic-border-focus shadow-[0_0_0_1px_rgba(43,188,202,0.15)]",
1401
1383
  "focused-error":
1402
- "border border-semantic-error-primary/60 shadow-[0_0_0_1px_rgba(240,68,56,0.1)]",
1384
+ "border border-solid border-semantic-error-primary/60 shadow-[0_0_0_1px_rgba(240,68,56,0.1)]",
1403
1385
  },
1404
1386
  },
1405
1387
  defaultVariants: {
@@ -1438,10 +1420,7 @@ export interface CreatableMultiSelectProps
1438
1420
  maxLengthPerItem?: number
1439
1421
  }
1440
1422
 
1441
- const CreatableMultiSelect = React.forwardRef<
1442
- HTMLDivElement,
1443
- CreatableMultiSelectProps
1444
- >(
1423
+ const CreatableMultiSelect = React.forwardRef(
1445
1424
  (
1446
1425
  {
1447
1426
  className,
@@ -1456,8 +1435,8 @@ const CreatableMultiSelect = React.forwardRef<
1456
1435
  maxItems,
1457
1436
  maxLengthPerItem,
1458
1437
  ...props
1459
- },
1460
- ref
1438
+ }: CreatableMultiSelectProps,
1439
+ ref: React.Ref<HTMLDivElement>
1461
1440
  ) => {
1462
1441
  const [isOpen, setIsOpen] = React.useState(false)
1463
1442
  const [inputValue, setInputValue] = React.useState("")
@@ -1615,15 +1594,15 @@ const CreatableMultiSelect = React.forwardRef<
1615
1594
 
1616
1595
  {/* Dropdown panel */}
1617
1596
  {isOpen && (
1618
- <div id={listboxId} role="listbox" className="absolute z-[9999] top-full mt-1 w-full bg-semantic-bg-primary border border-semantic-border-layout rounded shadow-md animate-in fade-in-0 zoom-in-95 slide-in-from-top-2 duration-200">
1597
+ <div id={listboxId} role="listbox" className="absolute z-[9999] top-full mt-1 w-full bg-semantic-bg-primary border border-solid border-semantic-border-layout rounded shadow-md animate-in fade-in-0 zoom-in-95 slide-in-from-top-2 duration-200">
1619
1598
  {/* Creatable hint \u2014 Enter key */}
1620
- <div className="flex items-center justify-between px-4 py-2 border-b border-semantic-border-layout">
1599
+ <div className="flex items-center justify-between px-4 py-2 border-b border-solid border-semantic-border-layout">
1621
1600
  <span className="text-sm text-semantic-text-muted">
1622
1601
  {canAddCustom
1623
1602
  ? \`Press enter to add "\${inputValue.trim()}"\`
1624
1603
  : creatableHint}
1625
1604
  </span>
1626
- <kbd className="inline-flex items-center gap-0.5 rounded border border-semantic-border-layout bg-semantic-bg-ui px-1.5 py-0.5 text-[10px] text-semantic-text-muted font-medium shrink-0">
1605
+ <kbd className="inline-flex items-center gap-0.5 rounded border border-solid border-semantic-border-layout bg-semantic-bg-ui px-1.5 py-0.5 text-[10px] text-semantic-text-muted font-medium shrink-0">
1627
1606
  Enter \u21B5
1628
1607
  </kbd>
1629
1608
  </div>
@@ -1697,9 +1676,9 @@ const creatableSelectTriggerVariants = cva(
1697
1676
  variants: {
1698
1677
  state: {
1699
1678
  default:
1700
- "border border-semantic-border-input focus-within:border-semantic-border-input-focus/50 focus-within:shadow-[0_0_0_1px_rgba(43,188,202,0.15)]",
1679
+ "border border-solid border-semantic-border-input focus-within:border-semantic-border-input-focus/50 focus-within:shadow-[0_0_0_1px_rgba(43,188,202,0.15)]",
1701
1680
  error:
1702
- "border border-semantic-error-primary/40 focus-within:border-semantic-error-primary/60 focus-within:shadow-[0_0_0_1px_rgba(240,68,56,0.1)]",
1681
+ "border border-solid border-semantic-error-primary/40 focus-within:border-semantic-error-primary/60 focus-within:shadow-[0_0_0_1px_rgba(240,68,56,0.1)]",
1703
1682
  },
1704
1683
  },
1705
1684
  defaultVariants: {
@@ -1733,7 +1712,7 @@ export interface CreatableSelectProps
1733
1712
  maxLength?: number
1734
1713
  }
1735
1714
 
1736
- const CreatableSelect = React.forwardRef<HTMLDivElement, CreatableSelectProps>(
1715
+ const CreatableSelect = React.forwardRef(
1737
1716
  (
1738
1717
  {
1739
1718
  className,
@@ -1746,8 +1725,8 @@ const CreatableSelect = React.forwardRef<HTMLDivElement, CreatableSelectProps>(
1746
1725
  disabled = false,
1747
1726
  maxLength,
1748
1727
  ...props
1749
- },
1750
- ref
1728
+ }: CreatableSelectProps,
1729
+ ref: React.Ref<HTMLDivElement>
1751
1730
  ) => {
1752
1731
  const [open, setOpen] = React.useState(false)
1753
1732
  const [search, setSearch] = React.useState("")
@@ -1931,13 +1910,13 @@ const CreatableSelect = React.forwardRef<HTMLDivElement, CreatableSelectProps>(
1931
1910
 
1932
1911
  {/* Dropdown */}
1933
1912
  {open && (
1934
- <div className="absolute left-0 top-full z-[9999] mt-1 w-full rounded border border-semantic-border-layout bg-semantic-bg-primary shadow-md animate-in fade-in-0 zoom-in-95 slide-in-from-top-2 duration-200">
1913
+ <div className="absolute left-0 top-full z-[9999] mt-1 w-full rounded border border-solid border-semantic-border-layout bg-semantic-bg-primary shadow-md animate-in fade-in-0 zoom-in-95 slide-in-from-top-2 duration-200">
1935
1914
  {/* Creatable hint */}
1936
- <div className="flex items-center justify-between px-4 py-2 border-b border-semantic-border-layout">
1915
+ <div className="flex items-center justify-between px-4 py-2 border-b border-solid border-semantic-border-layout">
1937
1916
  <span className="text-sm text-semantic-text-muted">
1938
1917
  {creatableHint}
1939
1918
  </span>
1940
- <kbd className="inline-flex items-center gap-0.5 rounded border border-semantic-border-layout bg-semantic-bg-ui px-1.5 py-0.5 text-[10px] text-semantic-text-muted font-medium">
1919
+ <kbd className="inline-flex items-center gap-0.5 rounded border border-solid border-semantic-border-layout bg-semantic-bg-ui px-1.5 py-0.5 text-[10px] text-semantic-text-muted font-medium">
1941
1920
  Enter \u21B5
1942
1921
  </kbd>
1943
1922
  </div>
@@ -2028,8 +2007,8 @@ export interface DateDividerProps
2028
2007
  children: React.ReactNode;
2029
2008
  }
2030
2009
 
2031
- const DateDivider = React.forwardRef<HTMLDivElement, DateDividerProps>(
2032
- ({ className, children, ...props }, ref) => (
2010
+ const DateDivider = React.forwardRef(
2011
+ ({ className, children, ...props }: DateDividerProps, ref: React.Ref<HTMLDivElement>) => (
2033
2012
  <div
2034
2013
  ref={ref}
2035
2014
  className={cn("flex items-center gap-4 my-4", className)}
@@ -2115,10 +2094,7 @@ export interface DeleteConfirmationModalProps {
2115
2094
  * />
2116
2095
  * \`\`\`
2117
2096
  */
2118
- const DeleteConfirmationModal = React.forwardRef<
2119
- HTMLDivElement,
2120
- DeleteConfirmationModalProps
2121
- >(
2097
+ const DeleteConfirmationModal = React.forwardRef(
2122
2098
  (
2123
2099
  {
2124
2100
  open,
@@ -2134,8 +2110,8 @@ const DeleteConfirmationModal = React.forwardRef<
2134
2110
  cancelButtonText = "Cancel",
2135
2111
  trigger,
2136
2112
  className,
2137
- },
2138
- ref
2113
+ }: DeleteConfirmationModalProps,
2114
+ ref: React.Ref<HTMLDivElement>
2139
2115
  ) => {
2140
2116
  const [inputValue, setInputValue] = React.useState("");
2141
2117
  const isConfirmEnabled = inputValue === confirmText;
@@ -2231,10 +2207,7 @@ const DialogPortal = DialogPrimitive.Portal;
2231
2207
 
2232
2208
  const DialogClose = DialogPrimitive.Close;
2233
2209
 
2234
- const DialogOverlay = React.forwardRef<
2235
- React.ElementRef<typeof DialogPrimitive.Overlay>,
2236
- React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>
2237
- >(({ className, ...props }, ref) => (
2210
+ const DialogOverlay = React.forwardRef(({ className, ...props }: React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>, ref: React.Ref<React.ElementRef<typeof DialogPrimitive.Overlay>>) => (
2238
2211
  <DialogPrimitive.Overlay
2239
2212
  ref={ref}
2240
2213
  className={cn(
@@ -2247,7 +2220,7 @@ const DialogOverlay = React.forwardRef<
2247
2220
  DialogOverlay.displayName = DialogPrimitive.Overlay.displayName;
2248
2221
 
2249
2222
  const dialogContentVariants = cva(
2250
- "fixed left-[50%] top-[50%] z-[9999] grid translate-x-[-50%] translate-y-[-50%] gap-4 border border-border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] rounded-lg",
2223
+ "fixed left-[50%] top-[50%] z-[9999] grid translate-x-[-50%] translate-y-[-50%] gap-4 border border-solid border-border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] rounded-lg",
2251
2224
  {
2252
2225
  variants: {
2253
2226
  size: {
@@ -2292,10 +2265,7 @@ const hasDialogDescription = (children: React.ReactNode): boolean => {
2292
2265
  return found;
2293
2266
  };
2294
2267
 
2295
- const DialogContent = React.forwardRef<
2296
- React.ElementRef<typeof DialogPrimitive.Content>,
2297
- DialogContentProps
2298
- >(({ className, children, size, hideCloseButton = false, ...props }, ref) => {
2268
+ const DialogContent = React.forwardRef(({ className, children, size, hideCloseButton = false, ...props }: DialogContentProps, ref: React.Ref<React.ElementRef<typeof DialogPrimitive.Content>>) => {
2299
2269
  const hasDescription = hasDialogDescription(children);
2300
2270
 
2301
2271
  return (
@@ -2353,10 +2323,7 @@ const DialogFooter = ({
2353
2323
  );
2354
2324
  DialogFooter.displayName = "DialogFooter";
2355
2325
 
2356
- const DialogTitle = React.forwardRef<
2357
- React.ElementRef<typeof DialogPrimitive.Title>,
2358
- React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>
2359
- >(({ className, ...props }, ref) => (
2326
+ const DialogTitle = React.forwardRef(({ className, ...props }: React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>, ref: React.Ref<React.ElementRef<typeof DialogPrimitive.Title>>) => (
2360
2327
  <DialogPrimitive.Title
2361
2328
  ref={ref}
2362
2329
  className={cn(
@@ -2368,10 +2335,7 @@ const DialogTitle = React.forwardRef<
2368
2335
  ));
2369
2336
  DialogTitle.displayName = DialogPrimitive.Title.displayName;
2370
2337
 
2371
- const DialogDescription = React.forwardRef<
2372
- React.ElementRef<typeof DialogPrimitive.Description>,
2373
- React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>
2374
- >(({ className, ...props }, ref) => (
2338
+ const DialogDescription = React.forwardRef(({ className, ...props }: React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>, ref: React.Ref<React.ElementRef<typeof DialogPrimitive.Description>>) => (
2375
2339
  <DialogPrimitive.Description
2376
2340
  ref={ref}
2377
2341
  className={cn("text-sm text-muted-foreground", className)}
@@ -2402,10 +2366,7 @@ import { cn } from "@/lib/utils";
2402
2366
 
2403
2367
  const DropdownMenu = DropdownMenuPrimitive.Root;
2404
2368
 
2405
- const DropdownMenuTrigger = React.forwardRef<
2406
- React.ElementRef<typeof DropdownMenuPrimitive.Trigger>,
2407
- React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Trigger>
2408
- >(({ className, ...props }, ref) => (
2369
+ const DropdownMenuTrigger = React.forwardRef(({ className, ...props }: React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Trigger>, ref: React.Ref<React.ElementRef<typeof DropdownMenuPrimitive.Trigger>>) => (
2409
2370
  <DropdownMenuPrimitive.Trigger
2410
2371
  ref={ref}
2411
2372
  className={cn("focus-visible:outline-none focus-visible:ring-0", className)}
@@ -2422,12 +2383,9 @@ const DropdownMenuSub = DropdownMenuPrimitive.Sub;
2422
2383
 
2423
2384
  const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;
2424
2385
 
2425
- const DropdownMenuSubTrigger = React.forwardRef<
2426
- React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,
2427
- React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {
2386
+ const DropdownMenuSubTrigger = React.forwardRef(({ className, inset, children, ...props }: React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {
2428
2387
  inset?: boolean;
2429
- }
2430
- >(({ className, inset, children, ...props }, ref) => (
2388
+ }, ref: React.Ref<React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>>) => (
2431
2389
  <DropdownMenuPrimitive.SubTrigger
2432
2390
  ref={ref}
2433
2391
  className={cn(
@@ -2444,14 +2402,11 @@ const DropdownMenuSubTrigger = React.forwardRef<
2444
2402
  DropdownMenuSubTrigger.displayName =
2445
2403
  DropdownMenuPrimitive.SubTrigger.displayName;
2446
2404
 
2447
- const DropdownMenuSubContent = React.forwardRef<
2448
- React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,
2449
- React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>
2450
- >(({ className, ...props }, ref) => (
2405
+ const DropdownMenuSubContent = React.forwardRef(({ className, ...props }: React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>, ref: React.Ref<React.ElementRef<typeof DropdownMenuPrimitive.SubContent>>) => (
2451
2406
  <DropdownMenuPrimitive.SubContent
2452
2407
  ref={ref}
2453
2408
  className={cn(
2454
- "z-[9999] min-w-[8rem] overflow-hidden rounded-md border border-semantic-border-layout bg-semantic-bg-primary p-1 text-semantic-text-primary shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
2409
+ "z-[9999] min-w-[8rem] overflow-hidden rounded-md border border-solid border-semantic-border-layout bg-semantic-bg-primary p-1 text-semantic-text-primary shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
2455
2410
  className
2456
2411
  )}
2457
2412
  {...props}
@@ -2460,16 +2415,13 @@ const DropdownMenuSubContent = React.forwardRef<
2460
2415
  DropdownMenuSubContent.displayName =
2461
2416
  DropdownMenuPrimitive.SubContent.displayName;
2462
2417
 
2463
- const DropdownMenuContent = React.forwardRef<
2464
- React.ElementRef<typeof DropdownMenuPrimitive.Content>,
2465
- React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>
2466
- >(({ className, sideOffset = 4, ...props }, ref) => (
2418
+ const DropdownMenuContent = React.forwardRef(({ className, sideOffset = 4, ...props }: React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>, ref: React.Ref<React.ElementRef<typeof DropdownMenuPrimitive.Content>>) => (
2467
2419
  <DropdownMenuPrimitive.Portal>
2468
2420
  <DropdownMenuPrimitive.Content
2469
2421
  ref={ref}
2470
2422
  sideOffset={sideOffset}
2471
2423
  className={cn(
2472
- "z-[9999] min-w-[8rem] overflow-hidden rounded-md border border-semantic-border-layout bg-semantic-bg-primary p-1 text-semantic-text-primary shadow-md",
2424
+ "z-[9999] min-w-[8rem] overflow-hidden rounded-md border border-solid border-semantic-border-layout bg-semantic-bg-primary p-1 text-semantic-text-primary shadow-md",
2473
2425
  "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
2474
2426
  className
2475
2427
  )}
@@ -2479,20 +2431,17 @@ const DropdownMenuContent = React.forwardRef<
2479
2431
  ));
2480
2432
  DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;
2481
2433
 
2482
- const DropdownMenuItem = React.forwardRef<
2483
- React.ElementRef<typeof DropdownMenuPrimitive.Item>,
2484
- React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {
2434
+ const DropdownMenuItem = React.forwardRef(({ className, inset, children, description, suffix, ...props }: React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {
2485
2435
  inset?: boolean;
2486
2436
  /** Secondary text displayed below children */
2487
2437
  description?: string;
2488
2438
  /** Content displayed at the right edge of the item */
2489
2439
  suffix?: React.ReactNode;
2490
- }
2491
- >(({ className, inset, children, description, suffix, ...props }, ref) => (
2440
+ }, ref: React.Ref<React.ElementRef<typeof DropdownMenuPrimitive.Item>>) => (
2492
2441
  <DropdownMenuPrimitive.Item
2493
2442
  ref={ref}
2494
2443
  className={cn(
2495
- "relative flex cursor-pointer select-none items-center rounded-sm px-2 py-2 text-sm text-semantic-text-secondary outline-none transition-colors focus:bg-semantic-bg-ui focus:text-semantic-text-primary data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
2444
+ "relative flex cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-2 text-sm text-semantic-text-secondary outline-none transition-colors focus:bg-semantic-bg-ui focus:text-semantic-text-primary data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
2496
2445
  inset && "pl-8",
2497
2446
  className
2498
2447
  )}
@@ -2513,15 +2462,12 @@ const DropdownMenuItem = React.forwardRef<
2513
2462
  ));
2514
2463
  DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;
2515
2464
 
2516
- const DropdownMenuCheckboxItem = React.forwardRef<
2517
- React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,
2518
- React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem> & {
2465
+ const DropdownMenuCheckboxItem = React.forwardRef(({ className, children, checked, description, suffix, ...props }: React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem> & {
2519
2466
  /** Secondary text displayed below children */
2520
2467
  description?: string;
2521
2468
  /** Content displayed at the right edge of the item */
2522
2469
  suffix?: React.ReactNode;
2523
- }
2524
- >(({ className, children, checked, description, suffix, ...props }, ref) => (
2470
+ }, ref: React.Ref<React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>>) => (
2525
2471
  <DropdownMenuPrimitive.CheckboxItem
2526
2472
  ref={ref}
2527
2473
  className={cn(
@@ -2552,15 +2498,12 @@ const DropdownMenuCheckboxItem = React.forwardRef<
2552
2498
  DropdownMenuCheckboxItem.displayName =
2553
2499
  DropdownMenuPrimitive.CheckboxItem.displayName;
2554
2500
 
2555
- const DropdownMenuRadioItem = React.forwardRef<
2556
- React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,
2557
- React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem> & {
2501
+ const DropdownMenuRadioItem = React.forwardRef(({ className, children, description, suffix, ...props }: React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem> & {
2558
2502
  /** Secondary text displayed below children */
2559
2503
  description?: string;
2560
2504
  /** Content displayed at the right edge of the item */
2561
2505
  suffix?: React.ReactNode;
2562
- }
2563
- >(({ className, children, description, suffix, ...props }, ref) => (
2506
+ }, ref: React.Ref<React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>>) => (
2564
2507
  <DropdownMenuPrimitive.RadioItem
2565
2508
  ref={ref}
2566
2509
  className={cn(
@@ -2589,12 +2532,9 @@ const DropdownMenuRadioItem = React.forwardRef<
2589
2532
  ));
2590
2533
  DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName;
2591
2534
 
2592
- const DropdownMenuLabel = React.forwardRef<
2593
- React.ElementRef<typeof DropdownMenuPrimitive.Label>,
2594
- React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {
2535
+ const DropdownMenuLabel = React.forwardRef(({ className, inset, ...props }: React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {
2595
2536
  inset?: boolean;
2596
- }
2597
- >(({ className, inset, ...props }, ref) => (
2537
+ }, ref: React.Ref<React.ElementRef<typeof DropdownMenuPrimitive.Label>>) => (
2598
2538
  <DropdownMenuPrimitive.Label
2599
2539
  ref={ref}
2600
2540
  className={cn(
@@ -2607,10 +2547,7 @@ const DropdownMenuLabel = React.forwardRef<
2607
2547
  ));
2608
2548
  DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName;
2609
2549
 
2610
- const DropdownMenuSeparator = React.forwardRef<
2611
- React.ElementRef<typeof DropdownMenuPrimitive.Separator>,
2612
- React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>
2613
- >(({ className, ...props }, ref) => (
2550
+ const DropdownMenuSeparator = React.forwardRef(({ className, ...props }: React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>, ref: React.Ref<React.ElementRef<typeof DropdownMenuPrimitive.Separator>>) => (
2614
2551
  <DropdownMenuPrimitive.Separator
2615
2552
  ref={ref}
2616
2553
  className={cn("-mx-1 my-1 h-px bg-semantic-border-layout", className)}
@@ -2777,7 +2714,7 @@ export interface FormModalProps {
2777
2714
  * </FormModal>
2778
2715
  * \`\`\`
2779
2716
  */
2780
- const FormModal = React.forwardRef<HTMLDivElement, FormModalProps>(
2717
+ const FormModal = React.forwardRef(
2781
2718
  (
2782
2719
  {
2783
2720
  open,
@@ -2793,8 +2730,8 @@ const FormModal = React.forwardRef<HTMLDivElement, FormModalProps>(
2793
2730
  disableSave = false,
2794
2731
  className,
2795
2732
  size = "sm",
2796
- },
2797
- ref
2733
+ }: FormModalProps,
2734
+ ref: React.Ref<HTMLDivElement>
2798
2735
  ) => {
2799
2736
  const handleSave = () => {
2800
2737
  onSave?.();
@@ -2868,8 +2805,8 @@ export interface ImageMediaProps extends React.HTMLAttributes<HTMLDivElement> {
2868
2805
  maxHeight?: number | string;
2869
2806
  }
2870
2807
 
2871
- const ImageMedia = React.forwardRef<HTMLDivElement, ImageMediaProps>(
2872
- ({ className, src, alt = "Image", maxHeight = 280, ...props }, ref) => {
2808
+ const ImageMedia = React.forwardRef(
2809
+ ({ className, src, alt = "Image", maxHeight = 280, ...props }: ImageMediaProps, ref: React.Ref<HTMLDivElement>) => {
2873
2810
  const maxHeightStyle =
2874
2811
  typeof maxHeight === "number" ? \`\${maxHeight}px\` : maxHeight;
2875
2812
 
@@ -2904,9 +2841,9 @@ const inputVariants = cva(
2904
2841
  variants: {
2905
2842
  state: {
2906
2843
  default:
2907
- "border border-semantic-border-input hover:border-semantic-border-input-focus focus:outline-none focus:border-semantic-border-input-focus focus:shadow-[0_0_0_1px_rgba(43,188,202,0.15)]",
2844
+ "border border-solid border-semantic-border-input focus:outline-none focus:border-semantic-border-input-focus focus:shadow-[0_0_0_1px_rgba(43,188,202,0.15)]",
2908
2845
  error:
2909
- "border border-semantic-error-primary/40 hover:border-semantic-error-primary focus:outline-none focus:border-semantic-error-primary focus:shadow-[0_0_0_1px_rgba(240,68,56,0.1)]",
2846
+ "border border-solid border-semantic-error-primary/40 focus:outline-none focus:border-semantic-error-primary focus:shadow-[0_0_0_1px_rgba(240,68,56,0.1)]",
2910
2847
  },
2911
2848
  },
2912
2849
  defaultVariants: {
@@ -2933,8 +2870,8 @@ export interface InputProps
2933
2870
  showCheckIcon?: boolean;
2934
2871
  }
2935
2872
 
2936
- const Input = React.forwardRef<HTMLInputElement, InputProps>(
2937
- ({ className, state, type, showCheckIcon, onFocus, onBlur, onWheel, ...props }, ref) => {
2873
+ const Input = React.forwardRef(
2874
+ ({ className, state, type, showCheckIcon, onFocus, onBlur, onWheel, ...props }: InputProps, ref: React.Ref<HTMLInputElement>) => {
2938
2875
  const [isFocused, setIsFocused] = React.useState(false);
2939
2876
 
2940
2877
  const inputEl = (
@@ -2998,9 +2935,9 @@ const multiSelectTriggerVariants = cva(
2998
2935
  variants: {
2999
2936
  state: {
3000
2937
  default:
3001
- "border border-semantic-border-input focus:outline-none focus:border-semantic-border-input-focus/50 focus:shadow-[0_0_0_1px_rgba(43,188,202,0.15)]",
2938
+ "border border-solid border-semantic-border-input focus:outline-none focus:border-semantic-border-input-focus/50 focus:shadow-[0_0_0_1px_rgba(43,188,202,0.15)]",
3002
2939
  error:
3003
- "border border-semantic-error-primary/40 focus:outline-none focus:border-semantic-error-primary/60 focus:shadow-[0_0_0_1px_rgba(240,68,56,0.1)]",
2940
+ "border border-solid border-semantic-error-primary/40 focus:outline-none focus:border-semantic-error-primary/60 focus:shadow-[0_0_0_1px_rgba(240,68,56,0.1)]",
3004
2941
  },
3005
2942
  },
3006
2943
  defaultVariants: {
@@ -3078,7 +3015,7 @@ export interface MultiSelectProps extends VariantProps<
3078
3015
  * />
3079
3016
  * \`\`\`
3080
3017
  */
3081
- const MultiSelect = React.forwardRef<HTMLButtonElement, MultiSelectProps>(
3018
+ const MultiSelect = React.forwardRef(
3082
3019
  (
3083
3020
  {
3084
3021
  label,
@@ -3101,8 +3038,8 @@ const MultiSelect = React.forwardRef<HTMLButtonElement, MultiSelectProps>(
3101
3038
  state,
3102
3039
  id,
3103
3040
  name,
3104
- },
3105
- ref
3041
+ }: MultiSelectProps,
3042
+ ref: React.Ref<HTMLButtonElement>
3106
3043
  ) => {
3107
3044
  // Internal state for selected values (uncontrolled mode)
3108
3045
  const [internalValue, setInternalValue] =
@@ -3321,7 +3258,7 @@ const MultiSelect = React.forwardRef<HTMLButtonElement, MultiSelectProps>(
3321
3258
  <div
3322
3259
  id={listboxId}
3323
3260
  className={cn(
3324
- "absolute z-50 mt-1 w-full rounded bg-semantic-bg-primary border border-semantic-border-layout shadow-md",
3261
+ "absolute z-50 mt-1 w-full rounded bg-semantic-bg-primary border border-solid border-semantic-border-layout shadow-md",
3325
3262
  "top-full"
3326
3263
  )}
3327
3264
  role="listbox"
@@ -3329,13 +3266,13 @@ const MultiSelect = React.forwardRef<HTMLButtonElement, MultiSelectProps>(
3329
3266
  >
3330
3267
  {/* Search input */}
3331
3268
  {searchable && (
3332
- <div className="p-2 border-b border-semantic-border-layout">
3269
+ <div className="p-2 border-b border-solid border-semantic-border-layout">
3333
3270
  <input
3334
3271
  type="text"
3335
3272
  placeholder={searchPlaceholder}
3336
3273
  value={searchQuery}
3337
3274
  onChange={(e) => setSearchQuery(e.target.value)}
3338
- className="w-full h-8 px-3 text-sm border border-semantic-border-input rounded bg-semantic-bg-primary placeholder:text-semantic-text-placeholder focus:outline-none focus:border-semantic-border-input-focus/50"
3275
+ className="w-full h-8 px-3 text-sm border border-solid border-semantic-border-input rounded bg-semantic-bg-primary placeholder:text-semantic-text-placeholder focus:outline-none focus:border-semantic-border-input-focus/50"
3339
3276
  onClick={(e) => e.stopPropagation()}
3340
3277
  />
3341
3278
  </div>
@@ -3386,7 +3323,7 @@ const MultiSelect = React.forwardRef<HTMLButtonElement, MultiSelectProps>(
3386
3323
 
3387
3324
  {/* Footer with count */}
3388
3325
  {maxSelections && (
3389
- <div className="p-2 border-t border-semantic-border-layout text-xs text-semantic-text-muted">
3326
+ <div className="p-2 border-t border-solid border-semantic-border-layout text-xs text-semantic-text-muted">
3390
3327
  {selectedValues.length} / {maxSelections} selected
3391
3328
  </div>
3392
3329
  )}
@@ -3500,7 +3437,7 @@ export interface PageHeaderProps
3500
3437
  mobileOverflowLimit?: number;
3501
3438
  }
3502
3439
 
3503
- const PageHeader = React.forwardRef<HTMLDivElement, PageHeaderProps>(
3440
+ const PageHeader = React.forwardRef(
3504
3441
  (
3505
3442
  {
3506
3443
  className,
@@ -3516,8 +3453,8 @@ const PageHeader = React.forwardRef<HTMLDivElement, PageHeaderProps>(
3516
3453
  layout = "responsive",
3517
3454
  mobileOverflowLimit = 2,
3518
3455
  ...props
3519
- },
3520
- ref
3456
+ }: PageHeaderProps,
3457
+ ref: React.Ref<HTMLDivElement>
3521
3458
  ) => {
3522
3459
  // State for overflow expansion (moved to top level)
3523
3460
  const [isOverflowExpanded, setIsOverflowExpanded] = React.useState(false);
@@ -3681,7 +3618,7 @@ const PageHeader = React.forwardRef<HTMLDivElement, PageHeaderProps>(
3681
3618
  "flex w-full bg-semantic-bg-primary px-4",
3682
3619
  layoutClasses[layout],
3683
3620
  heightClasses[layout],
3684
- showBorder && "border-b border-semantic-border-layout",
3621
+ showBorder && "border-b border-solid border-semantic-border-layout",
3685
3622
  className
3686
3623
  )}
3687
3624
  {...props}
@@ -4035,7 +3972,7 @@ import { Button } from "./button";
4035
3972
  * Panel root variants
4036
3973
  */
4037
3974
  const panelVariants = cva(
4038
- "border-l border-semantic-border-layout bg-semantic-bg-primary flex flex-col overflow-hidden transition-all duration-300 ease-in-out shrink-0",
3975
+ "border-l border-solid border-semantic-border-layout bg-semantic-bg-primary flex flex-col overflow-hidden transition-all duration-300 ease-in-out shrink-0",
4039
3976
  {
4040
3977
  variants: {
4041
3978
  size: {
@@ -4083,7 +4020,7 @@ export interface PanelProps
4083
4020
  * </Panel>
4084
4021
  * \`\`\`
4085
4022
  */
4086
- const Panel = React.forwardRef<HTMLElement, PanelProps>(
4023
+ const Panel = React.forwardRef(
4087
4024
  (
4088
4025
  {
4089
4026
  open = true,
@@ -4097,8 +4034,8 @@ const Panel = React.forwardRef<HTMLElement, PanelProps>(
4097
4034
  "aria-label": ariaLabel,
4098
4035
  onKeyDown,
4099
4036
  ...props
4100
- },
4101
- ref
4037
+ }: PanelProps,
4038
+ ref: React.Ref<HTMLElement>
4102
4039
  ) => {
4103
4040
  const resolvedSize = size ?? "default";
4104
4041
  const widthClass = panelWidths[resolvedSize];
@@ -4139,7 +4076,7 @@ const Panel = React.forwardRef<HTMLElement, PanelProps>(
4139
4076
  >
4140
4077
  {/* Header */}
4141
4078
  {header ?? (
4142
- <div className="flex items-center gap-3 px-4 h-14 border-b border-semantic-border-layout shrink-0">
4079
+ <div className="flex items-center gap-3 px-4 h-14 border-b border-solid border-semantic-border-layout shrink-0">
4143
4080
  {title && (
4144
4081
  <span className="flex-1 text-base font-semibold text-semantic-text-primary truncate">
4145
4082
  {title}
@@ -4165,7 +4102,7 @@ const Panel = React.forwardRef<HTMLElement, PanelProps>(
4165
4102
 
4166
4103
  {/* Footer */}
4167
4104
  {footer && (
4168
- <div className="flex gap-3 px-4 py-3 shrink-0 border-t border-semantic-border-layout">
4105
+ <div className="flex gap-3 px-4 py-3 shrink-0 border-t border-solid border-semantic-border-layout">
4169
4106
  {footer}
4170
4107
  </div>
4171
4108
  )}
@@ -4207,7 +4144,7 @@ export interface PhoneInputProps
4207
4144
  wrapperClassName?: string;
4208
4145
  }
4209
4146
 
4210
- const PhoneInput = React.forwardRef<HTMLInputElement, PhoneInputProps>(
4147
+ const PhoneInput = React.forwardRef(
4211
4148
  (
4212
4149
  {
4213
4150
  className,
@@ -4218,14 +4155,14 @@ const PhoneInput = React.forwardRef<HTMLInputElement, PhoneInputProps>(
4218
4155
  wrapperClassName,
4219
4156
  disabled,
4220
4157
  ...props
4221
- },
4222
- ref
4158
+ }: PhoneInputProps,
4159
+ ref: React.Ref<HTMLInputElement>
4223
4160
  ) => {
4224
4161
  return (
4225
4162
  <div
4226
4163
  className={cn(
4227
- "flex items-center border border-semantic-border-layout rounded-lg focus-within:border-semantic-border-focus transition-colors",
4228
- disabled && "opacity-60",
4164
+ "flex items-center border border-solid border-semantic-border-layout rounded-lg focus-within:border-semantic-border-focus transition-colors",
4165
+ disabled && "opacity-60 bg-semantic-bg-ui cursor-not-allowed",
4229
4166
  wrapperClassName
4230
4167
  )}
4231
4168
  >
@@ -4318,7 +4255,7 @@ export interface ReadableFieldProps
4318
4255
  * />
4319
4256
  * \`\`\`
4320
4257
  */
4321
- export const ReadableField = React.forwardRef<HTMLDivElement, ReadableFieldProps>(
4258
+ export const ReadableField = React.forwardRef(
4322
4259
  (
4323
4260
  {
4324
4261
  label,
@@ -4330,8 +4267,8 @@ export const ReadableField = React.forwardRef<HTMLDivElement, ReadableFieldProps
4330
4267
  className,
4331
4268
  inputClassName,
4332
4269
  ...props
4333
- },
4334
- ref
4270
+ }: ReadableFieldProps,
4271
+ ref: React.Ref<HTMLDivElement>
4335
4272
  ) => {
4336
4273
  const [copied, setCopied] = React.useState(false);
4337
4274
  const [isVisible, setIsVisible] = React.useState(!secret);
@@ -4398,7 +4335,7 @@ export const ReadableField = React.forwardRef<HTMLDivElement, ReadableFieldProps
4398
4335
  {headerAction.disabledTooltip && (
4399
4336
  <span className="pointer-events-none absolute bottom-full right-0 mb-2 whitespace-nowrap rounded bg-semantic-primary px-2 py-1 text-xs text-semantic-text-inverted opacity-0 transition-opacity group-hover/regen-action:opacity-100 z-10">
4400
4337
  {headerAction.disabledTooltip}
4401
- <span className="absolute top-full right-2 border-4 border-transparent border-t-semantic-primary" />
4338
+ <span className="absolute top-full right-2 border-4 border-solid border-transparent border-t-semantic-primary" />
4402
4339
  </span>
4403
4340
  )}
4404
4341
  </span>
@@ -4417,7 +4354,7 @@ export const ReadableField = React.forwardRef<HTMLDivElement, ReadableFieldProps
4417
4354
  {/* Input Container */}
4418
4355
  <div
4419
4356
  className={cn(
4420
- "flex h-11 items-center justify-between rounded border border-semantic-border-layout bg-semantic-bg-ui pl-4 pr-2.5 py-2.5",
4357
+ "flex h-11 items-center justify-between rounded border border-solid border-semantic-border-layout bg-semantic-bg-ui pl-4 pr-2.5 py-2.5",
4421
4358
  inputClassName
4422
4359
  )}
4423
4360
  >
@@ -4503,8 +4440,8 @@ export interface ReplyQuoteProps extends React.HTMLAttributes<HTMLDivElement> {
4503
4440
  message: string;
4504
4441
  }
4505
4442
 
4506
- const ReplyQuote = React.forwardRef<HTMLDivElement, ReplyQuoteProps>(
4507
- ({ className, sender, message, onClick, onKeyDown, role, tabIndex, "aria-label": ariaLabel, ...props }, ref) => {
4443
+ const ReplyQuote = React.forwardRef(
4444
+ ({ className, sender, message, onClick, onKeyDown, role, tabIndex, "aria-label": ariaLabel, ...props }: ReplyQuoteProps, ref: React.Ref<HTMLDivElement>) => {
4508
4445
  const isInteractive = !!onClick;
4509
4446
 
4510
4447
  const handleKeyDown = React.useCallback(
@@ -4524,7 +4461,7 @@ const ReplyQuote = React.forwardRef<HTMLDivElement, ReplyQuoteProps>(
4524
4461
  <div
4525
4462
  ref={ref}
4526
4463
  className={cn(
4527
- "w-full bg-semantic-bg-ui border-l-[3px] border-semantic-border-accent rounded-sm px-4 py-1.5 mb-2 h-[56px] flex flex-col justify-center cursor-pointer hover:bg-semantic-bg-hover transition-colors",
4464
+ "w-full bg-semantic-bg-ui border-l-[3px] border-solid border-semantic-border-accent rounded-sm px-4 py-1.5 mb-2 h-[56px] flex flex-col justify-center cursor-pointer hover:bg-semantic-bg-hover transition-colors",
4528
4465
  isInteractive && "focus-visible:ring-2 focus-visible:ring-semantic-border-focus focus-visible:ring-offset-1 focus-visible:outline-none",
4529
4466
  className
4530
4467
  )}
@@ -4640,7 +4577,7 @@ export interface SelectFieldProps {
4640
4577
  * />
4641
4578
  * \`\`\`
4642
4579
  */
4643
- const SelectField = React.forwardRef<HTMLButtonElement, SelectFieldProps>(
4580
+ const SelectField = React.forwardRef(
4644
4581
  (
4645
4582
  {
4646
4583
  label,
@@ -4663,8 +4600,8 @@ const SelectField = React.forwardRef<HTMLButtonElement, SelectFieldProps>(
4663
4600
  labelClassName,
4664
4601
  id,
4665
4602
  name,
4666
- },
4667
- ref
4603
+ }: SelectFieldProps,
4604
+ ref: React.Ref<HTMLButtonElement>
4668
4605
  ) => {
4669
4606
  // Internal state for search
4670
4607
  const [searchQuery, setSearchQuery] = React.useState("");
@@ -4797,7 +4734,7 @@ const SelectField = React.forwardRef<HTMLButtonElement, SelectFieldProps>(
4797
4734
  <SelectContent>
4798
4735
  {/* Search input */}
4799
4736
  {searchable && (
4800
- <div className="flex items-center gap-2 px-3 pb-1.5 border-b border-semantic-border-layout">
4737
+ <div className="flex items-center gap-2 px-3 pb-1.5 border-b border-solid border-semantic-border-layout">
4801
4738
  <Search className="size-4 text-semantic-text-muted shrink-0" />
4802
4739
  <input
4803
4740
  type="text"
@@ -4897,9 +4834,9 @@ const selectTriggerVariants = cva(
4897
4834
  variants: {
4898
4835
  state: {
4899
4836
  default:
4900
- "border border-semantic-border-input focus:outline-none focus:border-semantic-border-input-focus/50 focus:shadow-[0_0_0_1px_rgba(43,188,202,0.15)]",
4837
+ "border border-solid border-semantic-border-input focus:outline-none focus:border-semantic-border-input-focus/50 focus:shadow-[0_0_0_1px_rgba(43,188,202,0.15)]",
4901
4838
  error:
4902
- "border border-semantic-error-primary/40 focus:outline-none focus:border-semantic-error-primary/60 focus:shadow-[0_0_0_1px_rgba(240,68,56,0.1)]",
4839
+ "border border-solid border-semantic-error-primary/40 focus:outline-none focus:border-semantic-error-primary/60 focus:shadow-[0_0_0_1px_rgba(240,68,56,0.1)]",
4903
4840
  },
4904
4841
  },
4905
4842
  defaultVariants: {
@@ -4912,10 +4849,7 @@ const Select = SelectPrimitive.Root;
4912
4849
 
4913
4850
  const SelectGroup = SelectPrimitive.Group;
4914
4851
 
4915
- const SelectValue = React.forwardRef<
4916
- React.ElementRef<typeof SelectPrimitive.Value>,
4917
- React.ComponentPropsWithoutRef<typeof SelectPrimitive.Value>
4918
- >(({ className, ...props }, ref) => (
4852
+ const SelectValue = React.forwardRef(({ className, ...props }: React.ComponentPropsWithoutRef<typeof SelectPrimitive.Value>, ref: React.Ref<React.ElementRef<typeof SelectPrimitive.Value>>) => (
4919
4853
  <SelectPrimitive.Value
4920
4854
  ref={ref}
4921
4855
  className={cn("[&[data-placeholder]]:text-semantic-text-muted", className)}
@@ -4929,10 +4863,7 @@ export interface SelectTriggerProps
4929
4863
  React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>,
4930
4864
  VariantProps<typeof selectTriggerVariants> {}
4931
4865
 
4932
- const SelectTrigger = React.forwardRef<
4933
- React.ElementRef<typeof SelectPrimitive.Trigger>,
4934
- SelectTriggerProps
4935
- >(({ className, state, children, ...props }, ref) => (
4866
+ const SelectTrigger = React.forwardRef(({ className, state, children, ...props }: SelectTriggerProps, ref: React.Ref<React.ElementRef<typeof SelectPrimitive.Trigger>>) => (
4936
4867
  <SelectPrimitive.Trigger
4937
4868
  ref={ref}
4938
4869
  className={cn(selectTriggerVariants({ state, className }))}
@@ -4946,10 +4877,7 @@ const SelectTrigger = React.forwardRef<
4946
4877
  ));
4947
4878
  SelectTrigger.displayName = SelectPrimitive.Trigger.displayName;
4948
4879
 
4949
- const SelectScrollUpButton = React.forwardRef<
4950
- React.ElementRef<typeof SelectPrimitive.ScrollUpButton>,
4951
- React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>
4952
- >(({ className, ...props }, ref) => (
4880
+ const SelectScrollUpButton = React.forwardRef(({ className, ...props }: React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>, ref: React.Ref<React.ElementRef<typeof SelectPrimitive.ScrollUpButton>>) => (
4953
4881
  <SelectPrimitive.ScrollUpButton
4954
4882
  ref={ref}
4955
4883
  className={cn(
@@ -4963,10 +4891,7 @@ const SelectScrollUpButton = React.forwardRef<
4963
4891
  ));
4964
4892
  SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;
4965
4893
 
4966
- const SelectScrollDownButton = React.forwardRef<
4967
- React.ElementRef<typeof SelectPrimitive.ScrollDownButton>,
4968
- React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>
4969
- >(({ className, ...props }, ref) => (
4894
+ const SelectScrollDownButton = React.forwardRef(({ className, ...props }: React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>, ref: React.Ref<React.ElementRef<typeof SelectPrimitive.ScrollDownButton>>) => (
4970
4895
  <SelectPrimitive.ScrollDownButton
4971
4896
  ref={ref}
4972
4897
  className={cn(
@@ -5020,10 +4945,7 @@ function useUnlockBodyScroll() {
5020
4945
  }, []);
5021
4946
  }
5022
4947
 
5023
- const SelectContent = React.forwardRef<
5024
- React.ElementRef<typeof SelectPrimitive.Content>,
5025
- React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>
5026
- >(({ className, children, position = "popper", ...props }, ref) => {
4948
+ const SelectContent = React.forwardRef(({ className, children, position = "popper", ...props }: React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>, ref: React.Ref<React.ElementRef<typeof SelectPrimitive.Content>>) => {
5027
4949
  useUnlockBodyScroll();
5028
4950
 
5029
4951
  return (
@@ -5031,7 +4953,7 @@ const SelectContent = React.forwardRef<
5031
4953
  <SelectPrimitive.Content
5032
4954
  ref={ref}
5033
4955
  className={cn(
5034
- "relative z-[9999] max-h-96 min-w-[8rem] overflow-hidden rounded bg-semantic-bg-primary border border-semantic-border-layout shadow-md",
4956
+ "relative z-[9999] max-h-96 min-w-[8rem] overflow-hidden rounded bg-semantic-bg-primary border border-solid border-semantic-border-layout shadow-md",
5035
4957
  "data-[state=open]:animate-in data-[state=closed]:animate-out",
5036
4958
  "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
5037
4959
  "data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95",
@@ -5061,10 +4983,7 @@ const SelectContent = React.forwardRef<
5061
4983
  });
5062
4984
  SelectContent.displayName = SelectPrimitive.Content.displayName;
5063
4985
 
5064
- const SelectLabel = React.forwardRef<
5065
- React.ElementRef<typeof SelectPrimitive.Label>,
5066
- React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>
5067
- >(({ className, ...props }, ref) => (
4986
+ const SelectLabel = React.forwardRef(({ className, ...props }: React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>, ref: React.Ref<React.ElementRef<typeof SelectPrimitive.Label>>) => (
5068
4987
  <SelectPrimitive.Label
5069
4988
  ref={ref}
5070
4989
  className={cn(
@@ -5076,10 +4995,7 @@ const SelectLabel = React.forwardRef<
5076
4995
  ));
5077
4996
  SelectLabel.displayName = SelectPrimitive.Label.displayName;
5078
4997
 
5079
- const SelectItem = React.forwardRef<
5080
- React.ElementRef<typeof SelectPrimitive.Item>,
5081
- React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>
5082
- >(({ className, children, ...props }, ref) => (
4998
+ const SelectItem = React.forwardRef(({ className, children, ...props }: React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>, ref: React.Ref<React.ElementRef<typeof SelectPrimitive.Item>>) => (
5083
4999
  <SelectPrimitive.Item
5084
5000
  ref={ref}
5085
5001
  className={cn(
@@ -5100,10 +5016,7 @@ const SelectItem = React.forwardRef<
5100
5016
  ));
5101
5017
  SelectItem.displayName = SelectPrimitive.Item.displayName;
5102
5018
 
5103
- const SelectSeparator = React.forwardRef<
5104
- React.ElementRef<typeof SelectPrimitive.Separator>,
5105
- React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>
5106
- >(({ className, ...props }, ref) => (
5019
+ const SelectSeparator = React.forwardRef(({ className, ...props }: React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>, ref: React.Ref<React.ElementRef<typeof SelectPrimitive.Separator>>) => (
5107
5020
  <SelectPrimitive.Separator
5108
5021
  ref={ref}
5109
5022
  className={cn("-mx-1 my-1 h-px bg-semantic-border-layout", className)}
@@ -5181,8 +5094,8 @@ export interface SkeletonProps
5181
5094
  height?: number | string;
5182
5095
  }
5183
5096
 
5184
- const Skeleton = React.forwardRef<HTMLDivElement, SkeletonProps>(
5185
- ({ className, variant, shape, width, height, style, ...props }, ref) => {
5097
+ const Skeleton = React.forwardRef(
5098
+ ({ className, variant, shape, width, height, style, ...props }: SkeletonProps, ref: React.Ref<HTMLDivElement>) => {
5186
5099
  const dimensionStyle: React.CSSProperties = {
5187
5100
  ...style,
5188
5101
  ...(width !== undefined
@@ -5268,7 +5181,7 @@ export interface SpinnerProps
5268
5181
  "aria-label"?: string;
5269
5182
  }
5270
5183
 
5271
- const Spinner = React.forwardRef<HTMLDivElement, SpinnerProps>(
5184
+ const Spinner = React.forwardRef(
5272
5185
  (
5273
5186
  {
5274
5187
  className,
@@ -5276,8 +5189,8 @@ const Spinner = React.forwardRef<HTMLDivElement, SpinnerProps>(
5276
5189
  variant,
5277
5190
  "aria-label": ariaLabel = "Loading",
5278
5191
  ...props
5279
- },
5280
- ref
5192
+ }: SpinnerProps,
5193
+ ref: React.Ref<HTMLDivElement>
5281
5194
  ) => {
5282
5195
  const strokeWidth = strokeWidths[size || "default"] ?? 3;
5283
5196
  const radius = 10;
@@ -5337,7 +5250,7 @@ import { cn } from "@/lib/utils";
5337
5250
  * Switch track variants (the outer container)
5338
5251
  */
5339
5252
  const switchVariants = cva(
5340
- "peer inline-flex shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-semantic-primary focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-semantic-primary data-[state=unchecked]:bg-semantic-bg-grey",
5253
+ "peer inline-flex shrink-0 cursor-pointer items-center rounded-full border-2 border-solid border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-semantic-primary focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-semantic-primary data-[state=unchecked]:bg-semantic-bg-grey",
5341
5254
  {
5342
5255
  variants: {
5343
5256
  size: {
@@ -5410,13 +5323,10 @@ export interface SwitchProps
5410
5323
  labelPosition?: "left" | "right";
5411
5324
  }
5412
5325
 
5413
- const Switch = React.forwardRef<
5414
- React.ElementRef<typeof SwitchPrimitives.Root>,
5415
- SwitchProps
5416
- >(
5326
+ const Switch = React.forwardRef(
5417
5327
  (
5418
- { className, size, label, labelPosition = "right", disabled, ...props },
5419
- ref
5328
+ { className, size, label, labelPosition = "right", disabled, ...props }: SwitchProps,
5329
+ ref: React.Ref<React.ElementRef<typeof SwitchPrimitives.Root>>
5420
5330
  ) => {
5421
5331
  const switchElement = (
5422
5332
  <SwitchPrimitives.Root
@@ -5492,8 +5402,8 @@ export interface SystemMessageProps
5492
5402
  children: string;
5493
5403
  }
5494
5404
 
5495
- const SystemMessage = React.forwardRef<HTMLDivElement, SystemMessageProps>(
5496
- ({ className, children, ...props }, ref) => (
5405
+ const SystemMessage = React.forwardRef(
5406
+ ({ className, children, ...props }: SystemMessageProps, ref: React.Ref<HTMLDivElement>) => (
5497
5407
  <div
5498
5408
  ref={ref}
5499
5409
  className={cn("flex justify-center my-1", className)}
@@ -5571,12 +5481,12 @@ export interface TableProps
5571
5481
  wrapContent?: boolean;
5572
5482
  }
5573
5483
 
5574
- const Table = React.forwardRef<HTMLTableElement, TableProps>(
5575
- ({ className, size, withoutBorder, wrapContent, ...props }, ref) => (
5484
+ const Table = React.forwardRef(
5485
+ ({ className, size, withoutBorder, wrapContent, ...props }: TableProps, ref: React.Ref<HTMLTableElement>) => (
5576
5486
  <div
5577
5487
  className={cn(
5578
5488
  "relative w-full overflow-auto",
5579
- !withoutBorder && "rounded-lg border border-semantic-border-layout"
5489
+ !withoutBorder && "rounded-lg border border-solid border-semantic-border-layout"
5580
5490
  )}
5581
5491
  >
5582
5492
  <table
@@ -5593,13 +5503,10 @@ const Table = React.forwardRef<HTMLTableElement, TableProps>(
5593
5503
  );
5594
5504
  Table.displayName = "Table";
5595
5505
 
5596
- const TableHeader = React.forwardRef<
5597
- HTMLTableSectionElement,
5598
- React.HTMLAttributes<HTMLTableSectionElement>
5599
- >(({ className, ...props }, ref) => (
5506
+ const TableHeader = React.forwardRef(({ className, ...props }: React.HTMLAttributes<HTMLTableSectionElement>, ref: React.Ref<HTMLTableSectionElement>) => (
5600
5507
  <thead
5601
5508
  ref={ref}
5602
- className={cn("bg-[var(--color-neutral-100)] [&_tr]:border-b", className)}
5509
+ className={cn("bg-[var(--color-neutral-100)] [&_tr]:border-b [&_tr]:border-solid", className)}
5603
5510
  {...props}
5604
5511
  />
5605
5512
  ));
@@ -5615,8 +5522,8 @@ export interface TableBodyProps
5615
5522
  loadingColumns?: number;
5616
5523
  }
5617
5524
 
5618
- const TableBody = React.forwardRef<HTMLTableSectionElement, TableBodyProps>(
5619
- ({ className, isLoading, loadingRows = 5, loadingColumns = 5, children, ...props }, ref) => (
5525
+ const TableBody = React.forwardRef(
5526
+ ({ className, isLoading, loadingRows = 5, loadingColumns = 5, children, ...props }: TableBodyProps, ref: React.Ref<HTMLTableSectionElement>) => (
5620
5527
  <tbody
5621
5528
  ref={ref}
5622
5529
  className={cn("[&_tr:last-child]:border-0", className)}
@@ -5632,14 +5539,11 @@ const TableBody = React.forwardRef<HTMLTableSectionElement, TableBodyProps>(
5632
5539
  );
5633
5540
  TableBody.displayName = "TableBody";
5634
5541
 
5635
- const TableFooter = React.forwardRef<
5636
- HTMLTableSectionElement,
5637
- React.HTMLAttributes<HTMLTableSectionElement>
5638
- >(({ className, ...props }, ref) => (
5542
+ const TableFooter = React.forwardRef(({ className, ...props }: React.HTMLAttributes<HTMLTableSectionElement>, ref: React.Ref<HTMLTableSectionElement>) => (
5639
5543
  <tfoot
5640
5544
  ref={ref}
5641
5545
  className={cn(
5642
- "border-t bg-[var(--color-neutral-100)] font-medium [&>tr]:last:border-b-0",
5546
+ "border-t border-solid bg-[var(--color-neutral-100)] font-medium [&>tr]:last:border-b-0",
5643
5547
  className
5644
5548
  )}
5645
5549
  {...props}
@@ -5652,12 +5556,12 @@ export interface TableRowProps extends React.HTMLAttributes<HTMLTableRowElement>
5652
5556
  highlighted?: boolean;
5653
5557
  }
5654
5558
 
5655
- const TableRow = React.forwardRef<HTMLTableRowElement, TableRowProps>(
5656
- ({ className, highlighted, ...props }, ref) => (
5559
+ const TableRow = React.forwardRef(
5560
+ ({ className, highlighted, ...props }: TableRowProps, ref: React.Ref<HTMLTableRowElement>) => (
5657
5561
  <tr
5658
5562
  ref={ref}
5659
5563
  className={cn(
5660
- "border-b border-semantic-border-layout transition-colors",
5564
+ "border-b border-solid border-semantic-border-layout transition-colors",
5661
5565
  highlighted
5662
5566
  ? "bg-semantic-info-surface"
5663
5567
  : "hover:bg-[var(--color-neutral-50)]/50 data-[state=selected]:bg-semantic-bg-ui",
@@ -5678,10 +5582,10 @@ export interface TableHeadProps extends React.ThHTMLAttributes<HTMLTableCellElem
5678
5582
  infoTooltip?: string;
5679
5583
  }
5680
5584
 
5681
- const TableHead = React.forwardRef<HTMLTableCellElement, TableHeadProps>(
5585
+ const TableHead = React.forwardRef(
5682
5586
  (
5683
- { className, sticky, sortDirection, infoTooltip, children, ...props },
5684
- ref
5587
+ { className, sticky, sortDirection, infoTooltip, children, ...props }: TableHeadProps,
5588
+ ref: React.Ref<HTMLTableCellElement>
5685
5589
  ) => (
5686
5590
  <th
5687
5591
  ref={ref}
@@ -5719,8 +5623,8 @@ export interface TableCellProps extends React.TdHTMLAttributes<HTMLTableCellElem
5719
5623
  sticky?: boolean;
5720
5624
  }
5721
5625
 
5722
- const TableCell = React.forwardRef<HTMLTableCellElement, TableCellProps>(
5723
- ({ className, sticky, ...props }, ref) => (
5626
+ const TableCell = React.forwardRef(
5627
+ ({ className, sticky, ...props }: TableCellProps, ref: React.Ref<HTMLTableCellElement>) => (
5724
5628
  <td
5725
5629
  ref={ref}
5726
5630
  className={cn(
@@ -5734,10 +5638,7 @@ const TableCell = React.forwardRef<HTMLTableCellElement, TableCellProps>(
5734
5638
  );
5735
5639
  TableCell.displayName = "TableCell";
5736
5640
 
5737
- const TableCaption = React.forwardRef<
5738
- HTMLTableCaptionElement,
5739
- React.HTMLAttributes<HTMLTableCaptionElement>
5740
- >(({ className, ...props }, ref) => (
5641
+ const TableCaption = React.forwardRef(({ className, ...props }: React.HTMLAttributes<HTMLTableCaptionElement>, ref: React.Ref<HTMLTableCaptionElement>) => (
5741
5642
  <caption
5742
5643
  ref={ref}
5743
5644
  className={cn("mt-4 text-sm text-semantic-text-muted", className)}
@@ -5826,8 +5727,8 @@ export interface TableToggleProps extends Omit<SwitchProps, "size"> {
5826
5727
  size?: "sm" | "default";
5827
5728
  }
5828
5729
 
5829
- const TableToggle = React.forwardRef<HTMLButtonElement, TableToggleProps>(
5830
- ({ size = "sm", ...props }, ref) => (
5730
+ const TableToggle = React.forwardRef(
5731
+ ({ size = "sm", ...props }: TableToggleProps, ref: React.Ref<HTMLButtonElement>) => (
5831
5732
  <Switch ref={ref} size={size} {...props} />
5832
5733
  )
5833
5734
  );
@@ -5877,14 +5778,11 @@ export interface TabsListProps
5877
5778
  fullWidth?: boolean
5878
5779
  }
5879
5780
 
5880
- const TabsList = React.forwardRef<
5881
- React.ComponentRef<typeof TabsPrimitive.List>,
5882
- TabsListProps
5883
- >(({ className, fullWidth, ...props }, ref) => (
5781
+ const TabsList = React.forwardRef(({ className, fullWidth, ...props }: TabsListProps, ref: React.Ref<React.ComponentRef<typeof TabsPrimitive.List>>) => (
5884
5782
  <TabsPrimitive.List
5885
5783
  ref={ref}
5886
5784
  className={cn(
5887
- "inline-flex items-center border-b border-semantic-border-layout w-full",
5785
+ "inline-flex items-center border-b border-solid border-semantic-border-layout w-full",
5888
5786
  fullWidth && "[&>*]:flex-1",
5889
5787
  className
5890
5788
  )}
@@ -5893,14 +5791,11 @@ const TabsList = React.forwardRef<
5893
5791
  ))
5894
5792
  TabsList.displayName = TabsPrimitive.List.displayName
5895
5793
 
5896
- const TabsTrigger = React.forwardRef<
5897
- React.ComponentRef<typeof TabsPrimitive.Trigger>,
5898
- React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>
5899
- >(({ className, ...props }, ref) => (
5794
+ const TabsTrigger = React.forwardRef(({ className, ...props }: React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>, ref: React.Ref<React.ComponentRef<typeof TabsPrimitive.Trigger>>) => (
5900
5795
  <TabsPrimitive.Trigger
5901
5796
  ref={ref}
5902
5797
  className={cn(
5903
- "inline-flex items-center justify-center gap-2 whitespace-nowrap py-3 px-3 text-sm font-medium border-b-2 -mb-px cursor-pointer transition-colors",
5798
+ "inline-flex items-center justify-center gap-2 whitespace-nowrap py-3 px-3 text-sm font-medium border-b-2 border-solid -mb-px cursor-pointer transition-colors",
5904
5799
  "text-semantic-text-muted border-transparent hover:text-semantic-text-secondary",
5905
5800
  "data-[state=active]:text-semantic-text-primary data-[state=active]:border-semantic-primary",
5906
5801
  "focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50",
@@ -5911,10 +5806,7 @@ const TabsTrigger = React.forwardRef<
5911
5806
  ))
5912
5807
  TabsTrigger.displayName = TabsPrimitive.Trigger.displayName
5913
5808
 
5914
- const TabsContent = React.forwardRef<
5915
- React.ComponentRef<typeof TabsPrimitive.Content>,
5916
- React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>
5917
- >(({ className, ...props }, ref) => (
5809
+ const TabsContent = React.forwardRef(({ className, ...props }: React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>, ref: React.Ref<React.ComponentRef<typeof TabsPrimitive.Content>>) => (
5918
5810
  <TabsPrimitive.Content
5919
5811
  ref={ref}
5920
5812
  className={cn(
@@ -5978,8 +5870,8 @@ export interface TagProps
5978
5870
  label?: string;
5979
5871
  }
5980
5872
 
5981
- const Tag = React.forwardRef<HTMLSpanElement, TagProps>(
5982
- ({ className, variant, size, label, children, ...props }, ref) => {
5873
+ const Tag = React.forwardRef(
5874
+ ({ className, variant, size, label, children, ...props }: TagProps, ref: React.Ref<HTMLSpanElement>) => {
5983
5875
  return (
5984
5876
  <span
5985
5877
  className={cn(tagVariants({ variant, size, className }))}
@@ -5987,7 +5879,7 @@ const Tag = React.forwardRef<HTMLSpanElement, TagProps>(
5987
5879
  {...props}
5988
5880
  >
5989
5881
  {label && <span className="font-semibold mr-1">{label}</span>}
5990
- <span className="font-normal">{children}</span>
5882
+ <span className="font-normal inline-flex items-center gap-1">{children}</span>
5991
5883
  </span>
5992
5884
  );
5993
5885
  }
@@ -6064,16 +5956,7 @@ TagGroup.displayName = "TagGroup";
6064
5956
 
6065
5957
  export { Tag, TagGroup, tagVariants };
6066
5958
  `,
6067
- "text-field": `import {
6068
- forwardRef,
6069
- useRef,
6070
- useCallback,
6071
- useState,
6072
- useId,
6073
- type ChangeEvent,
6074
- type ReactNode,
6075
- type ComponentProps,
6076
- } from "react";
5959
+ "text-field": `import * as React from "react";
6077
5960
  import { cva, type VariantProps } from "class-variance-authority";
6078
5961
  import { Loader2, X } from "lucide-react";
6079
5962
 
@@ -6088,9 +5971,9 @@ const textFieldContainerVariants = cva(
6088
5971
  variants: {
6089
5972
  state: {
6090
5973
  default:
6091
- "border border-semantic-border-input focus-within:border-semantic-border-input-focus/50 focus-within:shadow-[0_0_0_1px_rgba(43,188,202,0.15)]",
5974
+ "border border-solid border-semantic-border-input focus-within:border-semantic-border-input-focus focus-within:shadow-[0_0_0_1px_rgba(43,188,202,0.15)]",
6092
5975
  error:
6093
- "border border-semantic-error-primary/40 focus-within:border-semantic-error-primary/60 focus-within:shadow-[0_0_0_1px_rgba(240,68,56,0.1)]",
5976
+ "border border-solid border-semantic-error-primary/40 focus-within:border-semantic-error-primary focus-within:shadow-[0_0_0_1px_rgba(240,68,56,0.1)]",
6094
5977
  },
6095
5978
  disabled: {
6096
5979
  true: "cursor-not-allowed opacity-50 bg-[var(--color-neutral-50)]",
@@ -6113,9 +5996,9 @@ const textFieldInputVariants = cva(
6113
5996
  variants: {
6114
5997
  state: {
6115
5998
  default:
6116
- "border border-semantic-border-input focus:outline-none focus:border-semantic-border-input-focus/50 focus:shadow-[0_0_0_1px_rgba(43,188,202,0.15)]",
5999
+ "border border-solid border-semantic-border-input focus:outline-none focus:border-semantic-border-input-focus focus:shadow-[0_0_0_1px_rgba(43,188,202,0.15)]",
6117
6000
  error:
6118
- "border border-semantic-error-primary/40 focus:outline-none focus:border-semantic-error-primary/60 focus:shadow-[0_0_0_1px_rgba(240,68,56,0.1)]",
6001
+ "border border-solid border-semantic-error-primary/40 focus:outline-none focus:border-semantic-error-primary focus:shadow-[0_0_0_1px_rgba(240,68,56,0.1)]",
6119
6002
  },
6120
6003
  size: {
6121
6004
  default: "h-[42px] px-4 py-2 text-base file:text-base",
@@ -6141,7 +6024,7 @@ const textFieldInputVariants = cva(
6141
6024
  */
6142
6025
  export interface TextFieldProps
6143
6026
  extends
6144
- Omit<ComponentProps<"input">, "size">,
6027
+ Omit<React.ComponentProps<"input">, "size">,
6145
6028
  VariantProps<typeof textFieldInputVariants> {
6146
6029
  /** Size of the text field \u2014 \`default\` (42px) or \`sm\` (36px, compact) */
6147
6030
  size?: "default" | "sm";
@@ -6154,9 +6037,9 @@ export interface TextFieldProps
6154
6037
  /** Error message - shows error state with red styling */
6155
6038
  error?: string;
6156
6039
  /** Icon displayed on the left inside the input */
6157
- leftIcon?: ReactNode;
6040
+ leftIcon?: React.ReactNode;
6158
6041
  /** Icon displayed on the right inside the input */
6159
- rightIcon?: ReactNode;
6042
+ rightIcon?: React.ReactNode;
6160
6043
  /** Text prefix inside input (e.g., "https://") */
6161
6044
  prefix?: string;
6162
6045
  /** Text suffix inside input (e.g., ".com") */
@@ -6177,7 +6060,7 @@ export interface TextFieldProps
6177
6060
  inputContainerClassName?: string;
6178
6061
  }
6179
6062
 
6180
- const TextField = forwardRef<HTMLInputElement, TextFieldProps>(
6063
+ const TextField = React.forwardRef(
6181
6064
  (
6182
6065
  {
6183
6066
  className,
@@ -6207,22 +6090,22 @@ const TextField = forwardRef<HTMLInputElement, TextFieldProps>(
6207
6090
  id,
6208
6091
  type,
6209
6092
  ...props
6210
- },
6211
- ref
6093
+ }: TextFieldProps,
6094
+ ref: React.ForwardedRef<HTMLInputElement>
6212
6095
  ) => {
6213
6096
  // Internal ref for programmatic control (e.g., clearable)
6214
- const internalRef = useRef<HTMLInputElement>(null);
6215
- const mergedRef = useCallback(
6097
+ const internalRef = React.useRef<HTMLInputElement | null>(null);
6098
+ const mergedRef = React.useCallback(
6216
6099
  (node: HTMLInputElement | null) => {
6217
6100
  internalRef.current = node;
6218
6101
  if (typeof ref === "function") ref(node);
6219
- else if (ref) ref.current = node;
6102
+ else if (ref && typeof ref === "object") ref.current = node;
6220
6103
  },
6221
6104
  [ref]
6222
6105
  );
6223
6106
 
6224
6107
  // Internal state for character count in uncontrolled mode
6225
- const [internalValue, setInternalValue] = useState(
6108
+ const [internalValue, setInternalValue] = React.useState(
6226
6109
  defaultValue ?? ""
6227
6110
  );
6228
6111
 
@@ -6234,7 +6117,7 @@ const TextField = forwardRef<HTMLInputElement, TextFieldProps>(
6234
6117
  const derivedState = error ? "error" : (state ?? "default");
6235
6118
 
6236
6119
  // Handle change for both controlled and uncontrolled
6237
- const handleChange = (e: ChangeEvent<HTMLInputElement>) => {
6120
+ const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
6238
6121
  if (!isControlled) {
6239
6122
  setInternalValue(e.target.value);
6240
6123
  }
@@ -6261,7 +6144,7 @@ const TextField = forwardRef<HTMLInputElement, TextFieldProps>(
6261
6144
  const charCount = String(currentValue).length;
6262
6145
 
6263
6146
  // Generate unique IDs for accessibility
6264
- const generatedId = useId();
6147
+ const generatedId = React.useId();
6265
6148
  const inputId = id || generatedId;
6266
6149
  const helperId = \`\${inputId}-helper\`;
6267
6150
  const errorId = \`\${inputId}-error\`;
@@ -6380,12 +6263,12 @@ const TextField = forwardRef<HTMLInputElement, TextFieldProps>(
6380
6263
  {error ? (
6381
6264
  <span
6382
6265
  id={errorId}
6383
- className="text-xs text-semantic-error-primary"
6266
+ className="text-sm text-semantic-error-primary"
6384
6267
  >
6385
6268
  {error}
6386
6269
  </span>
6387
6270
  ) : helperText ? (
6388
- <span id={helperId} className="text-xs text-semantic-text-muted">
6271
+ <span id={helperId} className="text-sm text-semantic-text-muted">
6389
6272
  {helperText}
6390
6273
  </span>
6391
6274
  ) : (
@@ -6394,7 +6277,7 @@ const TextField = forwardRef<HTMLInputElement, TextFieldProps>(
6394
6277
  {showCount && maxLength && (
6395
6278
  <span
6396
6279
  className={cn(
6397
- "text-xs",
6280
+ "text-sm",
6398
6281
  charCount > maxLength
6399
6282
  ? "text-semantic-error-primary"
6400
6283
  : "text-semantic-text-muted"
@@ -6412,6 +6295,210 @@ const TextField = forwardRef<HTMLInputElement, TextFieldProps>(
6412
6295
  TextField.displayName = "TextField";
6413
6296
 
6414
6297
  export { TextField, textFieldContainerVariants, textFieldInputVariants };
6298
+ `,
6299
+ "textarea": `import * as React from "react";
6300
+ import { cva, type VariantProps } from "class-variance-authority";
6301
+
6302
+ import { cn } from "@/lib/utils";
6303
+
6304
+ /**
6305
+ * Textarea variants for different visual states
6306
+ */
6307
+ const textareaVariants = cva(
6308
+ "w-full rounded bg-semantic-bg-primary text-semantic-text-primary outline-none transition-all placeholder:text-semantic-text-placeholder disabled:cursor-not-allowed disabled:opacity-50 disabled:bg-[var(--color-neutral-50)]",
6309
+ {
6310
+ variants: {
6311
+ state: {
6312
+ default:
6313
+ "border border-solid border-semantic-border-input focus:outline-none focus:border-semantic-border-input-focus focus:shadow-[0_0_0_1px_rgba(43,188,202,0.15)]",
6314
+ error:
6315
+ "border border-solid border-semantic-error-primary/40 focus:outline-none focus:border-semantic-error-primary focus:shadow-[0_0_0_1px_rgba(240,68,56,0.1)]",
6316
+ },
6317
+ size: {
6318
+ default: "px-4 py-2.5 text-base",
6319
+ sm: "px-3 py-2 text-sm",
6320
+ },
6321
+ },
6322
+ defaultVariants: {
6323
+ state: "default",
6324
+ size: "default",
6325
+ },
6326
+ }
6327
+ );
6328
+
6329
+ /**
6330
+ * A multi-line text input with label, error state, helper text, character counter, and resize control.
6331
+ *
6332
+ * @example
6333
+ * \`\`\`tsx
6334
+ * <Textarea label="Description" placeholder="Enter description" />
6335
+ * <Textarea label="Notes" error="Too short" showCount maxLength={500} />
6336
+ * <Textarea label="JSON" rows={8} resize="vertical" />
6337
+ * \`\`\`
6338
+ */
6339
+ export interface TextareaProps
6340
+ extends Omit<React.ComponentProps<"textarea">, "size">,
6341
+ VariantProps<typeof textareaVariants> {
6342
+ /** Size of the textarea \u2014 \`default\` or \`sm\` (compact) */
6343
+ size?: "default" | "sm";
6344
+ /** Label text displayed above the textarea */
6345
+ label?: string;
6346
+ /** Shows red asterisk next to label when true */
6347
+ required?: boolean;
6348
+ /** Helper text displayed below the textarea */
6349
+ helperText?: string;
6350
+ /** Error message \u2014 shows error state with red styling */
6351
+ error?: string;
6352
+ /** Shows character count when maxLength is set */
6353
+ showCount?: boolean;
6354
+ /** Controls CSS resize behavior. Defaults to "none" */
6355
+ resize?: "none" | "vertical" | "horizontal" | "both";
6356
+ /** Additional class for the wrapper container */
6357
+ wrapperClassName?: string;
6358
+ /** Additional class for the label */
6359
+ labelClassName?: string;
6360
+ }
6361
+
6362
+ const Textarea = React.forwardRef(
6363
+ (
6364
+ {
6365
+ className,
6366
+ wrapperClassName,
6367
+ labelClassName,
6368
+ state,
6369
+ size,
6370
+ label,
6371
+ required,
6372
+ helperText,
6373
+ error,
6374
+ showCount,
6375
+ resize = "none",
6376
+ maxLength,
6377
+ rows = 4,
6378
+ value,
6379
+ defaultValue,
6380
+ onChange,
6381
+ disabled,
6382
+ id,
6383
+ ...props
6384
+ }: TextareaProps,
6385
+ ref: React.ForwardedRef<HTMLTextAreaElement>
6386
+ ) => {
6387
+ // Internal state for character count in uncontrolled mode
6388
+ const [internalValue, setInternalValue] = React.useState(
6389
+ defaultValue ?? ""
6390
+ );
6391
+
6392
+ // Determine if controlled
6393
+ const isControlled = value !== undefined;
6394
+ const currentValue = isControlled ? value : internalValue;
6395
+
6396
+ // Derive state from props
6397
+ const derivedState = error ? "error" : (state ?? "default");
6398
+
6399
+ // Handle change for both controlled and uncontrolled
6400
+ const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {
6401
+ if (!isControlled) {
6402
+ setInternalValue(e.target.value);
6403
+ }
6404
+ onChange?.(e);
6405
+ };
6406
+
6407
+ // Character count
6408
+ const charCount = String(currentValue).length;
6409
+
6410
+ // Generate unique IDs for accessibility
6411
+ const generatedId = React.useId();
6412
+ const textareaId = id || generatedId;
6413
+ const helperId = \`\${textareaId}-helper\`;
6414
+ const errorId = \`\${textareaId}-error\`;
6415
+
6416
+ // Determine aria-describedby
6417
+ const ariaDescribedBy = error ? errorId : helperText ? helperId : undefined;
6418
+
6419
+ // Resize class map
6420
+ const resizeClasses: Record<string, string> = {
6421
+ none: "resize-none",
6422
+ vertical: "resize-y",
6423
+ horizontal: "resize-x",
6424
+ both: "resize",
6425
+ };
6426
+
6427
+ return (
6428
+ <div className={cn("flex flex-col gap-1", wrapperClassName)}>
6429
+ {/* Label */}
6430
+ {label && (
6431
+ <label
6432
+ htmlFor={textareaId}
6433
+ className={cn(
6434
+ "text-sm font-medium text-semantic-text-muted",
6435
+ labelClassName
6436
+ )}
6437
+ >
6438
+ {label}
6439
+ {required && (
6440
+ <span className="text-semantic-error-primary ml-0.5">*</span>
6441
+ )}
6442
+ </label>
6443
+ )}
6444
+
6445
+ {/* Textarea */}
6446
+ <textarea
6447
+ ref={ref}
6448
+ id={textareaId}
6449
+ rows={rows}
6450
+ className={cn(
6451
+ textareaVariants({ state: derivedState, size, className }),
6452
+ resizeClasses[resize]
6453
+ )}
6454
+ disabled={disabled}
6455
+ maxLength={maxLength}
6456
+ value={isControlled ? value : undefined}
6457
+ defaultValue={!isControlled ? defaultValue : undefined}
6458
+ onChange={handleChange}
6459
+ aria-invalid={!!error}
6460
+ aria-describedby={ariaDescribedBy}
6461
+ {...props}
6462
+ />
6463
+
6464
+ {/* Helper text / Error message / Character count */}
6465
+ {(error || helperText || (showCount && maxLength)) && (
6466
+ <div className="flex justify-between items-start gap-2">
6467
+ {error ? (
6468
+ <span
6469
+ id={errorId}
6470
+ className="text-sm text-semantic-error-primary"
6471
+ >
6472
+ {error}
6473
+ </span>
6474
+ ) : helperText ? (
6475
+ <span id={helperId} className="text-sm text-semantic-text-muted">
6476
+ {helperText}
6477
+ </span>
6478
+ ) : (
6479
+ <span />
6480
+ )}
6481
+ {showCount && maxLength && (
6482
+ <span
6483
+ className={cn(
6484
+ "text-sm",
6485
+ charCount > maxLength
6486
+ ? "text-semantic-error-primary"
6487
+ : "text-semantic-text-muted"
6488
+ )}
6489
+ >
6490
+ {charCount}/{maxLength}
6491
+ </span>
6492
+ )}
6493
+ </div>
6494
+ )}
6495
+ </div>
6496
+ );
6497
+ }
6498
+ );
6499
+ Textarea.displayName = "Textarea";
6500
+
6501
+ export { Textarea, textareaVariants };
6415
6502
  `,
6416
6503
  "toast": `import * as React from "react";
6417
6504
  import * as ToastPrimitives from "@radix-ui/react-toast";
@@ -6422,10 +6509,7 @@ import { cn } from "@/lib/utils";
6422
6509
 
6423
6510
  const ToastProvider = ToastPrimitives.Provider;
6424
6511
 
6425
- const ToastViewport = React.forwardRef<
6426
- React.ElementRef<typeof ToastPrimitives.Viewport>,
6427
- React.ComponentPropsWithoutRef<typeof ToastPrimitives.Viewport>
6428
- >(({ className, ...props }, ref) => (
6512
+ const ToastViewport = React.forwardRef(({ className, ...props }: React.ComponentPropsWithoutRef<typeof ToastPrimitives.Viewport>, ref: React.Ref<React.ElementRef<typeof ToastPrimitives.Viewport>>) => (
6429
6513
  <ToastPrimitives.Viewport
6430
6514
  ref={ref}
6431
6515
  className={cn(
@@ -6438,7 +6522,7 @@ const ToastViewport = React.forwardRef<
6438
6522
  ToastViewport.displayName = ToastPrimitives.Viewport.displayName;
6439
6523
 
6440
6524
  const toastVariants = cva(
6441
- "group pointer-events-auto relative flex w-full items-center justify-between gap-4 overflow-hidden rounded-[5px] border p-3 shadow-md transition-all data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-top-full data-[state=open]:sm:slide-in-from-bottom-full",
6525
+ "group pointer-events-auto relative flex w-full items-center justify-between gap-4 overflow-hidden rounded-[5px] border border-solid p-3 shadow-md transition-all data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-top-full data-[state=open]:sm:slide-in-from-bottom-full",
6442
6526
  {
6443
6527
  variants: {
6444
6528
  variant: {
@@ -6459,11 +6543,8 @@ const toastVariants = cva(
6459
6543
  }
6460
6544
  );
6461
6545
 
6462
- const Toast = React.forwardRef<
6463
- React.ElementRef<typeof ToastPrimitives.Root>,
6464
- React.ComponentPropsWithoutRef<typeof ToastPrimitives.Root> &
6465
- VariantProps<typeof toastVariants>
6466
- >(({ className, variant, ...props }, ref) => {
6546
+ const Toast = React.forwardRef(({ className, variant, ...props }: React.ComponentPropsWithoutRef<typeof ToastPrimitives.Root> &
6547
+ VariantProps<typeof toastVariants>, ref: React.Ref<React.ElementRef<typeof ToastPrimitives.Root>>) => {
6467
6548
  return (
6468
6549
  <ToastPrimitives.Root
6469
6550
  ref={ref}
@@ -6474,14 +6555,11 @@ const Toast = React.forwardRef<
6474
6555
  });
6475
6556
  Toast.displayName = ToastPrimitives.Root.displayName;
6476
6557
 
6477
- const ToastAction = React.forwardRef<
6478
- React.ElementRef<typeof ToastPrimitives.Action>,
6479
- React.ComponentPropsWithoutRef<typeof ToastPrimitives.Action>
6480
- >(({ className, ...props }, ref) => (
6558
+ const ToastAction = React.forwardRef(({ className, ...props }: React.ComponentPropsWithoutRef<typeof ToastPrimitives.Action>, ref: React.Ref<React.ElementRef<typeof ToastPrimitives.Action>>) => (
6481
6559
  <ToastPrimitives.Action
6482
6560
  ref={ref}
6483
6561
  className={cn(
6484
- "inline-flex h-8 shrink-0 items-center justify-center rounded border border-semantic-border-layout bg-transparent px-3 text-sm font-medium transition-colors hover:bg-semantic-bg-ui focus:outline-none focus:ring-2 focus:ring-semantic-info-primary focus:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",
6562
+ "inline-flex h-8 shrink-0 items-center justify-center rounded border border-solid border-semantic-border-layout bg-transparent px-3 text-sm font-medium transition-colors hover:bg-semantic-bg-ui focus:outline-none focus:ring-2 focus:ring-semantic-info-primary focus:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",
6485
6563
  "group-[.success]:border-semantic-success-primary/30 group-[.success]:hover:border-semantic-success-primary/50 group-[.success]:hover:bg-semantic-success-primary/10",
6486
6564
  "group-[.error]:border-semantic-error-primary/30 group-[.error]:hover:border-semantic-error-primary/50 group-[.error]:hover:bg-semantic-error-primary/10",
6487
6565
  "group-[.warning]:border-semantic-warning-primary/30 group-[.warning]:hover:border-semantic-warning-primary/50 group-[.warning]:hover:bg-semantic-warning-primary/10",
@@ -6493,10 +6571,7 @@ const ToastAction = React.forwardRef<
6493
6571
  ));
6494
6572
  ToastAction.displayName = ToastPrimitives.Action.displayName;
6495
6573
 
6496
- const ToastClose = React.forwardRef<
6497
- React.ElementRef<typeof ToastPrimitives.Close>,
6498
- React.ComponentPropsWithoutRef<typeof ToastPrimitives.Close>
6499
- >(({ className, ...props }, ref) => (
6574
+ const ToastClose = React.forwardRef(({ className, ...props }: React.ComponentPropsWithoutRef<typeof ToastPrimitives.Close>, ref: React.Ref<React.ElementRef<typeof ToastPrimitives.Close>>) => (
6500
6575
  <ToastPrimitives.Close
6501
6576
  ref={ref}
6502
6577
  className={cn(
@@ -6511,10 +6586,7 @@ const ToastClose = React.forwardRef<
6511
6586
  ));
6512
6587
  ToastClose.displayName = ToastPrimitives.Close.displayName;
6513
6588
 
6514
- const ToastTitle = React.forwardRef<
6515
- React.ElementRef<typeof ToastPrimitives.Title>,
6516
- React.ComponentPropsWithoutRef<typeof ToastPrimitives.Title>
6517
- >(({ className, ...props }, ref) => (
6589
+ const ToastTitle = React.forwardRef(({ className, ...props }: React.ComponentPropsWithoutRef<typeof ToastPrimitives.Title>, ref: React.Ref<React.ElementRef<typeof ToastPrimitives.Title>>) => (
6518
6590
  <ToastPrimitives.Title
6519
6591
  ref={ref}
6520
6592
  className={cn("text-sm font-semibold tracking-[0.014px]", className)}
@@ -6523,10 +6595,7 @@ const ToastTitle = React.forwardRef<
6523
6595
  ));
6524
6596
  ToastTitle.displayName = ToastPrimitives.Title.displayName;
6525
6597
 
6526
- const ToastDescription = React.forwardRef<
6527
- React.ElementRef<typeof ToastPrimitives.Description>,
6528
- React.ComponentPropsWithoutRef<typeof ToastPrimitives.Description>
6529
- >(({ className, ...props }, ref) => (
6598
+ const ToastDescription = React.forwardRef(({ className, ...props }: React.ComponentPropsWithoutRef<typeof ToastPrimitives.Description>, ref: React.Ref<React.ElementRef<typeof ToastPrimitives.Description>>) => (
6530
6599
  <ToastPrimitives.Description
6531
6600
  ref={ref}
6532
6601
  className={cn("text-xs tracking-[0.048px]", className)}
@@ -6911,10 +6980,7 @@ const Tooltip = TooltipPrimitive.Root;
6911
6980
 
6912
6981
  const TooltipTrigger = TooltipPrimitive.Trigger;
6913
6982
 
6914
- const TooltipContent = React.forwardRef<
6915
- React.ElementRef<typeof TooltipPrimitive.Content>,
6916
- React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>
6917
- >(({ className, sideOffset = 4, ...props }, ref) => (
6983
+ const TooltipContent = React.forwardRef(({ className, sideOffset = 4, ...props }: React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>, ref: React.Ref<React.ElementRef<typeof TooltipPrimitive.Content>>) => (
6918
6984
  <TooltipPrimitive.Portal>
6919
6985
  <TooltipPrimitive.Content
6920
6986
  ref={ref}
@@ -6929,10 +6995,7 @@ const TooltipContent = React.forwardRef<
6929
6995
  ));
6930
6996
  TooltipContent.displayName = TooltipPrimitive.Content.displayName;
6931
6997
 
6932
- const TooltipArrow = React.forwardRef<
6933
- React.ElementRef<typeof TooltipPrimitive.Arrow>,
6934
- React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Arrow>
6935
- >(({ className, ...props }, ref) => (
6998
+ const TooltipArrow = React.forwardRef(({ className, ...props }: React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Arrow>, ref: React.Ref<React.ElementRef<typeof TooltipPrimitive.Arrow>>) => (
6936
6999
  <TooltipPrimitive.Arrow
6937
7000
  ref={ref}
6938
7001
  className={cn("fill-semantic-primary", className)}
@@ -7084,7 +7147,7 @@ export interface TypographyProps extends React.HTMLAttributes<HTMLElement> {
7084
7147
  * <Typography truncate>Very long text that will be truncated...</Typography>
7085
7148
  * \`\`\`
7086
7149
  */
7087
- const Typography = React.forwardRef<HTMLElement, TypographyProps>(
7150
+ const Typography = React.forwardRef(
7088
7151
  (
7089
7152
  {
7090
7153
  children,
@@ -7097,8 +7160,8 @@ const Typography = React.forwardRef<HTMLElement, TypographyProps>(
7097
7160
  tag,
7098
7161
  htmlFor,
7099
7162
  ...props
7100
- },
7101
- ref
7163
+ }: TypographyProps,
7164
+ ref: React.Ref<HTMLElement>
7102
7165
  ) => {
7103
7166
  const key: Key = \`\${kind}-\${variant}\`;
7104
7167
  const Tag = (tag || mapTagName[key]) as React.ElementType;
@@ -7159,8 +7222,8 @@ export interface UnreadSeparatorProps
7159
7222
  label?: string;
7160
7223
  }
7161
7224
 
7162
- const UnreadSeparator = React.forwardRef<HTMLDivElement, UnreadSeparatorProps>(
7163
- ({ className, count, label, ...props }, ref) => (
7225
+ const UnreadSeparator = React.forwardRef(
7226
+ ({ className, count, label, ...props }: UnreadSeparatorProps, ref: React.Ref<HTMLDivElement>) => (
7164
7227
  <div
7165
7228
  ref={ref}
7166
7229
  className={cn("flex items-center gap-4 my-2", className)}
@@ -8462,6 +8525,24 @@ var componentMetadata = {
8462
8525
  }
8463
8526
  ]
8464
8527
  },
8528
+ "textarea": {
8529
+ "name": "Textarea",
8530
+ "description": "A textarea component.",
8531
+ "dependencies": [
8532
+ "class-variance-authority",
8533
+ "clsx",
8534
+ "tailwind-merge"
8535
+ ],
8536
+ "props": [],
8537
+ "variants": [],
8538
+ "examples": [
8539
+ {
8540
+ "title": "Basic Textarea",
8541
+ "code": "<Textarea>Content</Textarea>",
8542
+ "description": "Simple textarea usage"
8543
+ }
8544
+ ]
8545
+ },
8465
8546
  "toast": {
8466
8547
  "name": "Toast",
8467
8548
  "description": "A toast component.",