| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 | 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 = '',  Hover = 'hover',}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' | 's' | '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'    case ActionButtonState.Hover:      return 'action-btn-hover'    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 ActionButtonexport { ActionButton, ActionButtonState, actionButtonVariants }
 |