radio-group.tsx 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. "use client";
  2. import * as React from "react";
  3. import { RadioGroup as RadioGroupPrimitive } from "radix-ui";
  4. import { Circle } from "lucide-react";
  5. import { cn } from "@/lib/utils";
  6. const RadioGroup = React.forwardRef<
  7. React.ComponentRef<typeof RadioGroupPrimitive.Root>,
  8. React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root>
  9. >(({ className, ...props }, ref) => (
  10. <RadioGroupPrimitive.Root
  11. className={cn("grid gap-2", className)}
  12. {...props}
  13. ref={ref}
  14. />
  15. ));
  16. RadioGroup.displayName = RadioGroupPrimitive.Root.displayName;
  17. const RadioGroupItem = React.forwardRef<
  18. React.ComponentRef<typeof RadioGroupPrimitive.Item>,
  19. React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Item>
  20. >(({ className, ...props }, ref) => (
  21. <RadioGroupPrimitive.Item
  22. ref={ref}
  23. className={cn(
  24. "aspect-square h-4 w-4 rounded-full border border-primary text-primary ring-offset-background focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",
  25. className,
  26. )}
  27. {...props}
  28. >
  29. <RadioGroupPrimitive.Indicator className="flex items-center justify-center">
  30. <Circle className="h-2.5 w-2.5 fill-current text-current" />
  31. </RadioGroupPrimitive.Indicator>
  32. </RadioGroupPrimitive.Item>
  33. ));
  34. RadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName;
  35. export { RadioGroup, RadioGroupItem };