UNPKG

koval-ui

Version:

React components collection with minimalistic design. Supports theming, layout, and input validation.

1 lines 3.21 kB
{"version":3,"file":"ActionButton.cjs","sources":["../../../../src/internal/Actions/ActionButton.tsx"],"sourcesContent":["import type {FC, HTMLAttributes, MouseEvent} from 'react';\nimport {useMemo} from 'react';\nimport {useCallback} from 'react';\nimport classNames from 'classnames';\n\nimport {IconSuccess, IconDanger, IconLink} from '@/internal/Icons';\n\nimport {ActionTypes} from './ActionTypes.ts';\nimport classes from './ActionButton.module.css';\n\nexport type Props = {\n title?: string;\n icon?: FC<HTMLAttributes<HTMLOrSVGElement> & unknown>;\n type?: keyof typeof ActionTypes;\n onClick?: (name: MouseEvent<HTMLButtonElement>) => void;\n className?: string;\n disabled?: boolean;\n};\n\nexport const ActionButton: FC<Props> = ({\n title,\n icon,\n type = 'default',\n onClick = () => {},\n className,\n disabled,\n}) => {\n const ActionIcon = useMemo(\n () =>\n icon ??\n {\n [ActionTypes.success]: IconSuccess,\n [ActionTypes.danger]: IconDanger,\n [ActionTypes.link]: IconLink,\n [ActionTypes.default]: undefined,\n }[type],\n [icon, type]\n );\n\n const handleClick = useCallback(\n (event: MouseEvent<HTMLButtonElement>) => {\n onClick(event);\n },\n [onClick]\n );\n\n return (\n <button\n disabled={disabled}\n title={title}\n onClick={handleClick}\n className={classNames(\n classes.actionButton,\n {\n [classes.default]: type === ActionTypes.default,\n [classes.link]: type === ActionTypes.link,\n [classes.success]: type === ActionTypes.success,\n [classes.danger]: type === ActionTypes.danger,\n },\n className\n )}>\n {ActionIcon && <ActionIcon className={classes.actionIcon} />}\n {title && <span className={classes.actionLabel}>{title}</span>}\n </button>\n );\n};\n"],"names":["ActionButton","title","icon","type","onClick","className","disabled","ActionIcon","useMemo","ActionTypes","IconSuccess","IconDanger","IconLink","handleClick","useCallback","event","jsxs","classNames","classes","jsx"],"mappings":"qWAmBaA,EAA0B,CAAC,CACpC,MAAAC,EACA,KAAAC,EACA,KAAAC,EAAO,UACP,QAAAC,EAAU,IAAM,CAAC,EACjB,UAAAC,EACA,SAAAC,CACJ,IAAM,CACF,MAAMC,EAAaC,EAAA,QACf,IACIN,GACA,CACI,CAACO,EAAAA,YAAY,OAAO,EAAGC,EAAA,YACvB,CAACD,EAAAA,YAAY,MAAM,EAAGE,EAAA,WACtB,CAACF,EAAAA,YAAY,IAAI,EAAGG,EAAA,SACpB,CAACH,EAAAA,YAAY,OAAO,EAAG,QACzBN,CAAI,EACV,CAACD,EAAMC,CAAI,CACf,EAEMU,EAAcC,EAAA,YACfC,GAAyC,CACtCX,EAAQW,CAAK,CACjB,EACA,CAACX,CAAO,CACZ,EAGI,OAAAY,EAAA,KAAC,SAAA,CACG,SAAAV,EACA,MAAAL,EACA,QAASY,EACT,UAAWI,EACPC,EAAAA,QAAQ,aACR,CACI,CAACA,UAAQ,OAAO,EAAGf,IAASM,EAAY,YAAA,QACxC,CAACS,UAAQ,IAAI,EAAGf,IAASM,EAAY,YAAA,KACrC,CAACS,UAAQ,OAAO,EAAGf,IAASM,EAAY,YAAA,QACxC,CAACS,UAAQ,MAAM,EAAGf,IAASM,cAAY,MAC3C,EACAJ,CACJ,EACC,SAAA,CAAAE,GAAeY,EAAA,IAAAZ,EAAA,CAAW,UAAWW,EAAAA,QAAQ,WAAY,EACzDjB,GAAUkB,EAAAA,IAAA,OAAA,CAAK,UAAWD,EAAAA,QAAQ,YAAc,SAAMjB,CAAA,CAAA,CAAA,CAAA,CAC3D,CAER"}