diff options
| author | Armand Philippot <git@armandphilippot.com> | 2022-03-31 14:25:12 +0200 |
|---|---|---|
| committer | Armand Philippot <git@armandphilippot.com> | 2022-03-31 15:25:41 +0200 |
| commit | d7d453f7333def28007b94b9c9d872f89224fc91 (patch) | |
| tree | 13d5f88b1d39d3eb46b7ba1c7003d11f827255e6 /src/components/atoms/buttons/button.tsx | |
| parent | 6640cdd35cab960237b3011d7badc5b9b2eaa5bd (diff) | |
chore: add a button component
Diffstat (limited to 'src/components/atoms/buttons/button.tsx')
| -rw-r--r-- | src/components/atoms/buttons/button.tsx | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/src/components/atoms/buttons/button.tsx b/src/components/atoms/buttons/button.tsx new file mode 100644 index 0000000..420ee74 --- /dev/null +++ b/src/components/atoms/buttons/button.tsx @@ -0,0 +1,53 @@ +import { FC, MouseEventHandler } from 'react'; +import styles from './buttons.module.scss'; + +export type ButtonProps = { + /** + * Button accessible label. + */ + 'aria-label'?: string; + /** + * Button state. Default: false. + */ + disabled?: boolean; + /** + * Button kind. Default: secondary. + */ + kind?: 'primary' | 'secondary' | 'tertiary'; + /** + * A callback function to handle click. + */ + onClick?: MouseEventHandler<HTMLButtonElement>; + /** + * Button type attribute. Default: button. + */ + type?: 'button' | 'reset' | 'submit'; +}; + +/** + * Button component + * + * Use a button as call to action. + */ +const Button: FC<ButtonProps> = ({ + children, + disabled = false, + kind = 'secondary', + type = 'button', + ...props +}) => { + const kindClass = styles[`btn--${kind}`]; + + return ( + <button + type={type} + disabled={disabled} + className={`${styles.btn} ${kindClass}`} + {...props} + > + {children} + </button> + ); +}; + +export default Button; |
