mirror of
				https://github.com/langgenius/dify.git
				synced 2025-10-31 02:42:59 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			62 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import type { CSSProperties } from 'react'
 | |
| import React from 'react'
 | |
| import { type VariantProps, cva } from 'class-variance-authority'
 | |
| import Spinner from '../spinner'
 | |
| import classNames from '@/utils/classnames'
 | |
| 
 | |
| const buttonVariants = cva(
 | |
|   'btn disabled:btn-disabled',
 | |
|   {
 | |
|     variants: {
 | |
|       variant: {
 | |
|         'primary': 'btn-primary',
 | |
|         'warning': 'btn-warning',
 | |
|         'secondary': 'btn-secondary',
 | |
|         'secondary-accent': 'btn-secondary-accent',
 | |
|         'ghost': 'btn-ghost',
 | |
|         'ghost-accent': 'btn-ghost-accent',
 | |
|         'tertiary': 'btn-tertiary',
 | |
|       },
 | |
|       size: {
 | |
|         small: 'btn-small',
 | |
|         medium: 'btn-medium',
 | |
|         large: 'btn-large',
 | |
|       },
 | |
|     },
 | |
|     defaultVariants: {
 | |
|       variant: 'secondary',
 | |
|       size: 'medium',
 | |
|     },
 | |
|   },
 | |
| )
 | |
| 
 | |
| export type ButtonProps = {
 | |
|   destructive?: boolean
 | |
|   loading?: boolean
 | |
|   styleCss?: CSSProperties
 | |
| } & React.ButtonHTMLAttributes<HTMLButtonElement> & VariantProps<typeof buttonVariants>
 | |
| 
 | |
| const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(
 | |
|   ({ className, variant, size, destructive, loading, styleCss, children, ...props }, ref) => {
 | |
|     return (
 | |
|       <button
 | |
|         type='button'
 | |
|         className={classNames(
 | |
|           buttonVariants({ variant, size, className }),
 | |
|           destructive && 'btn-destructive',
 | |
|         )}
 | |
|         ref={ref}
 | |
|         style={styleCss}
 | |
|         {...props}
 | |
|       >
 | |
|         {children}
 | |
|         {loading && <Spinner loading={loading} className='!text-white !h-3 !w-3 !border-2 !ml-1' />}
 | |
|       </button>
 | |
|     )
 | |
|   },
 | |
| )
 | |
| Button.displayName = 'Button'
 | |
| 
 | |
| export default Button
 | |
| export { Button, buttonVariants }
 | 
