mirror of
				https://github.com/langgenius/dify.git
				synced 2025-10-31 10:53:02 +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 } |