/** * Copyright 2025 LY Corporation * * LY Corporation licenses this file to you under the Apache License, * version 2.0 (the "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at: * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations * under the License. */ import * as React from 'react'; import * as RadioGroupPrimitive from '@radix-ui/react-radio-group'; import type { VariantProps } from 'class-variance-authority'; import { cva } from 'class-variance-authority'; import { cn } from '../lib/utils'; import type { Radius } from '../types'; import useTheme from './use-theme'; const radioCardGroupVariants = cva('radio-card-group', { variants: { orientation: { horizontal: 'radio-card-group-horizontal', vertical: 'radio-card-group-vertical', }, }, defaultVariants: { orientation: 'horizontal', }, }); const RadioGroupContext = React.createContext({ cardType: 'vertical', radius: 'medium', }); type RadioCardGroupProps = React.ComponentPropsWithoutRef< typeof RadioGroupPrimitive.Root > & { cardType?: 'horizontal' | 'vertical'; radius?: Radius; }; const RadioCardGroup = React.forwardRef< React.ElementRef, RadioCardGroupProps >( ( { orientation = 'horizontal', radius, cardType = 'vertical', children, className, ...props }, ref, ) => { const { themeRadius } = useTheme(); return ( {children} ); }, ); RadioCardGroup.displayName = RadioGroupPrimitive.Root.displayName; const radioCardVariants = cva('radio-card', { variants: { type: { vertical: 'radio-card-vertical', horizontal: 'radio-card-horizontal', }, radius: { small: 'radio-card-radius-small', medium: 'radio-card-radius-medium', large: 'radio-card-radius-large', }, }, defaultVariants: { type: 'vertical', radius: undefined, }, }); const RadioCard = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef & VariantProps & { icon?: React.ReactNode; title?: React.ReactNode; description?: React.ReactNode; } >(({ icon, title, description, className, ...props }, ref) => { const { radius, cardType: type } = React.useContext(RadioGroupContext); return ( {icon} {title && {title}} {description && ( {description} )} ); }); RadioCard.displayName = RadioGroupPrimitive.Item.displayName; export { RadioCardGroup, RadioCard };