mirror of
				https://github.com/langgenius/dify.git
				synced 2025-10-31 10:53:02 +00:00 
			
		
		
		
	
		
			
	
	
		
			56 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			56 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
|   | 'use client' | ||
|  | import type { FC } from 'react' | ||
|  | import React from 'react' | ||
|  | import cn from 'classnames' | ||
|  | import s from './style.module.css' | ||
|  | 
 | ||
|  | type Props = { | ||
|  |   className?: string | ||
|  |   icon: React.ReactNode | ||
|  |   iconBgClassName?: string | ||
|  |   title: React.ReactNode | ||
|  |   description: string | ||
|  |   noRadio?: boolean | ||
|  |   isChosen?: boolean | ||
|  |   onChosen?: () => void | ||
|  |   chosenConfig?: React.ReactNode | ||
|  |   chosenConfigWrapClassName?: string | ||
|  | } | ||
|  | 
 | ||
|  | const RadioCard: FC<Props> = ({ | ||
|  |   icon, | ||
|  |   iconBgClassName = 'bg-[#F5F3FF]', | ||
|  |   title, | ||
|  |   description, | ||
|  |   noRadio, | ||
|  |   isChosen, | ||
|  |   onChosen = () => {}, | ||
|  |   chosenConfig, | ||
|  |   chosenConfigWrapClassName, | ||
|  | }) => { | ||
|  |   return ( | ||
|  |     <div className={cn(s.item, isChosen && s.active)}> | ||
|  |       <div className='flex py-3 pl-3 pr-4' onClick={onChosen}> | ||
|  |         <div className={cn(iconBgClassName, 'mr-3 shrink-0 flex w-8 justify-center h-8 items-center rounded-lg')}> | ||
|  |           {icon} | ||
|  |         </div> | ||
|  |         <div className='grow'> | ||
|  |           <div className='leading-5 text-sm font-medium text-gray-900'>{title}</div> | ||
|  |           <div className='leading-[18px] text-xs font-normal text-[#667085]'>{description}</div> | ||
|  |         </div> | ||
|  |         {!noRadio && ( | ||
|  |           <div className='shrink-0 flex items-center h-8'> | ||
|  |             <div className={s.radio}></div> | ||
|  |           </div> | ||
|  |         )} | ||
|  |       </div> | ||
|  |       {((isChosen && chosenConfig) || noRadio) && ( | ||
|  |         <div className={cn(chosenConfigWrapClassName, 'pt-2 px-14 pb-6 border-t border-gray-200')}> | ||
|  |           {chosenConfig} | ||
|  |         </div> | ||
|  |       )} | ||
|  |     </div> | ||
|  |   ) | ||
|  | } | ||
|  | export default React.memo(RadioCard) |