mirror of
				https://github.com/langgenius/dify.git
				synced 2025-10-30 18:33:30 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			71 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import type { CSSProperties } from 'react'
 | |
| import React from 'react'
 | |
| import { type VariantProps, cva } from 'class-variance-authority'
 | |
| import classNames from '@/utils/classnames'
 | |
| 
 | |
| enum ActionButtonState {
 | |
|   Destructive = 'destructive',
 | |
|   Active = 'active',
 | |
|   Disabled = 'disabled',
 | |
|   Default = '',
 | |
| }
 | |
| 
 | |
| const actionButtonVariants = cva(
 | |
|   'action-btn',
 | |
|   {
 | |
|     variants: {
 | |
|       size: {
 | |
|         xs: 'action-btn-xs',
 | |
|         m: 'action-btn-m',
 | |
|         l: 'action-btn-l',
 | |
|         xl: 'action-btn-xl',
 | |
|       },
 | |
|     },
 | |
|     defaultVariants: {
 | |
|       size: 'm',
 | |
|     },
 | |
|   },
 | |
| )
 | |
| 
 | |
| export type ActionButtonProps = {
 | |
|   size?: 'xs' | 'm' | 'l' | 'xl'
 | |
|   state?: ActionButtonState
 | |
|   styleCss?: CSSProperties
 | |
| } & React.ButtonHTMLAttributes<HTMLButtonElement> & VariantProps<typeof actionButtonVariants>
 | |
| 
 | |
| function getActionButtonState(state: ActionButtonState) {
 | |
|   switch (state) {
 | |
|     case ActionButtonState.Destructive:
 | |
|       return 'action-btn-destructive'
 | |
|     case ActionButtonState.Active:
 | |
|       return 'action-btn-active'
 | |
|     case ActionButtonState.Disabled:
 | |
|       return 'action-btn-disabled'
 | |
|     default:
 | |
|       return ''
 | |
|   }
 | |
| }
 | |
| 
 | |
| const ActionButton = React.forwardRef<HTMLButtonElement, ActionButtonProps>(
 | |
|   ({ className, size, state = ActionButtonState.Default, styleCss, children, ...props }, ref) => {
 | |
|     return (
 | |
|       <button
 | |
|         type='button'
 | |
|         className={classNames(
 | |
|           actionButtonVariants({ className, size }),
 | |
|           getActionButtonState(state),
 | |
|         )}
 | |
|         ref={ref}
 | |
|         style={styleCss}
 | |
|         {...props}
 | |
|       >
 | |
|         {children}
 | |
|       </button>
 | |
|     )
 | |
|   },
 | |
| )
 | |
| ActionButton.displayName = 'ActionButton'
 | |
| 
 | |
| export default ActionButton
 | |
| export { ActionButton, ActionButtonState, actionButtonVariants }
 | 
