mirror of
https://git.mirrors.martin98.com/https://github.com/langgenius/dify.git
synced 2025-05-15 08:48:17 +08: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 }
|