diff options
Diffstat (limited to 'src/components/molecules/buttons/help-button/help-button.tsx')
| -rw-r--r-- | src/components/molecules/buttons/help-button/help-button.tsx | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/components/molecules/buttons/help-button/help-button.tsx b/src/components/molecules/buttons/help-button/help-button.tsx new file mode 100644 index 0000000..1951b4d --- /dev/null +++ b/src/components/molecules/buttons/help-button/help-button.tsx @@ -0,0 +1,42 @@ +import { forwardRef, type ForwardRefRenderFunction } from 'react'; +import { Button, VisuallyHidden, type ButtonProps, Icon } from '../../../atoms'; +import styles from './help-button.module.scss'; + +export type HelpButtonProps = Omit< + ButtonProps, + 'aria-label' | 'children' | 'kind' | 'shape' +> & { + /** + * Define an accessible name for the button. + */ + label: string; +}; + +const HelpButtonWithRef: ForwardRefRenderFunction< + HTMLButtonElement, + HelpButtonProps +> = ({ className = '', isPressed = false, label, ...props }, ref) => { + const btnClass = `${styles.btn} ${className}`; + + return ( + <Button + {...props} + className={btnClass} + isPressed={isPressed} + ref={ref} + // eslint-disable-next-line react/jsx-no-literals -- Shape allowed + shape="circle" + > + {/* eslint-disable-next-line react/jsx-no-literals -- Config allowed */} + <Icon aria-hidden className={styles.icon} shape="help" size="sm" /> + <VisuallyHidden>{label}</VisuallyHidden> + </Button> + ); +}; + +/** + * HelpButton component + * + * Render a button with an interrogation mark icon. + */ +export const HelpButton = forwardRef(HelpButtonWithRef); |
