12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- 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 }
|