Spaces:
Build error
Build error
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 } | |