diff options
Diffstat (limited to 'src/components/molecules/buttons')
| -rw-r--r-- | src/components/molecules/buttons/help-button.module.scss | 20 | ||||
| -rw-r--r-- | src/components/molecules/buttons/help-button.test.tsx | 10 | ||||
| -rw-r--r-- | src/components/molecules/buttons/help-button.tsx | 40 | ||||
| -rw-r--r-- | src/components/molecules/buttons/help-button/help-button.module.scss | 24 | ||||
| -rw-r--r-- | src/components/molecules/buttons/help-button/help-button.stories.tsx (renamed from src/components/molecules/buttons/help-button.stories.tsx) | 5 | ||||
| -rw-r--r-- | src/components/molecules/buttons/help-button/help-button.test.tsx | 13 | ||||
| -rw-r--r-- | src/components/molecules/buttons/help-button/help-button.tsx | 42 | ||||
| -rw-r--r-- | src/components/molecules/buttons/help-button/index.ts | 1 | 
8 files changed, 84 insertions, 71 deletions
| diff --git a/src/components/molecules/buttons/help-button.module.scss b/src/components/molecules/buttons/help-button.module.scss deleted file mode 100644 index fb28b57..0000000 --- a/src/components/molecules/buttons/help-button.module.scss +++ /dev/null @@ -1,20 +0,0 @@ -@use "../../../styles/abstracts/mixins" as mix; - -.btn { -  padding: var(--spacing-xs); - -  &:not(:disabled) { -    &:focus { -      text-decoration: none; -    } -  } - -  @include mix.pointer("fine") { -    padding: var(--spacing-2xs); -  } -} - -.icon { -  color: var(--color-primary-dark); -  font-weight: 600; -} diff --git a/src/components/molecules/buttons/help-button.test.tsx b/src/components/molecules/buttons/help-button.test.tsx deleted file mode 100644 index 85daf30..0000000 --- a/src/components/molecules/buttons/help-button.test.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import { describe, expect, it } from '@jest/globals'; -import { render, screen } from '../../../../tests/utils'; -import { HelpButton } from './help-button'; - -describe('Help', () => { -  it('renders a help button', () => { -    render(<HelpButton />); -    expect(screen.getByRole('button', { name: 'Help ?' })).toBeInTheDocument(); -  }); -}); diff --git a/src/components/molecules/buttons/help-button.tsx b/src/components/molecules/buttons/help-button.tsx deleted file mode 100644 index 7a01b14..0000000 --- a/src/components/molecules/buttons/help-button.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import { forwardRef, type ForwardRefRenderFunction } from 'react'; -import { useIntl } from 'react-intl'; -import { Button, type ButtonProps } from '../../atoms'; -import styles from './help-button.module.scss'; - -export type HelpButtonProps = Pick< -  ButtonProps, -  'className' | 'isPressed' | 'onClick' ->; - -const HelpButtonWithRef: ForwardRefRenderFunction< -  HTMLButtonElement, -  HelpButtonProps -> = ({ className = '', ...props }, ref) => { -  const intl = useIntl(); -  const text = intl.formatMessage({ -    defaultMessage: 'Help', -    id: 'i+/ckF', -    description: 'HelpButton: screen reader text', -  }); - -  return ( -    <Button -      className={`${styles.btn} ${className}`} -      ref={ref} -      shape="circle" -      {...props} -    > -      <span className="screen-reader-text">{text}</span> -      <span className={styles.icon}>?</span> -    </Button> -  ); -}; - -/** - * HelpButton component - * - * Render a button with an interrogation mark icon. - */ -export const HelpButton = forwardRef(HelpButtonWithRef); diff --git a/src/components/molecules/buttons/help-button/help-button.module.scss b/src/components/molecules/buttons/help-button/help-button.module.scss new file mode 100644 index 0000000..2dbba69 --- /dev/null +++ b/src/components/molecules/buttons/help-button/help-button.module.scss @@ -0,0 +1,24 @@ +@use "../../../../styles/abstracts/functions" as fun; +@use "../../../../styles/abstracts/mixins" as mix; + +.btn { +  padding: fun.convert-px(7); + +  @include mix.pointer("fine") { +    padding: fun.convert-px(4); +  } + +  &[aria-pressed="true"] { +    background: var(--color-primary-dark); +    border-color: var(--color-primary-dark); +    box-shadow: fun.convert-px(1) fun.convert-px(1) 0 0 var(--color-shadow); + +    .icon { +      :global { +        path { +          fill: var(--color-fg-inverted); +        } +      } +    } +  } +} diff --git a/src/components/molecules/buttons/help-button.stories.tsx b/src/components/molecules/buttons/help-button/help-button.stories.tsx index 176888c..556dd74 100644 --- a/src/components/molecules/buttons/help-button.stories.tsx +++ b/src/components/molecules/buttons/help-button/help-button.stories.tsx @@ -1,4 +1,4 @@ -import { ComponentMeta, ComponentStory } from '@storybook/react'; +import type { ComponentMeta, ComponentStory } from '@storybook/react';  import { HelpButton as HelpButtonComponent } from './help-button';  /** @@ -45,3 +45,6 @@ const Template: ComponentStory<typeof HelpButtonComponent> = (args) => (   * Help Button Stories - Level 1   */  export const HelpButton = Template.bind({}); +HelpButton.args = { +  label: 'Help', +}; diff --git a/src/components/molecules/buttons/help-button/help-button.test.tsx b/src/components/molecules/buttons/help-button/help-button.test.tsx new file mode 100644 index 0000000..f36fba7 --- /dev/null +++ b/src/components/molecules/buttons/help-button/help-button.test.tsx @@ -0,0 +1,13 @@ +import { describe, expect, it } from '@jest/globals'; +import { render, screen as rtlScreen } from '@testing-library/react'; +import { HelpButton } from './help-button'; + +describe('Help', () => { +  it('renders a help button', () => { +    const label = 'hic'; + +    render(<HelpButton label={label} />); + +    expect(rtlScreen.getByRole('button')).toHaveAccessibleName(label); +  }); +}); 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); diff --git a/src/components/molecules/buttons/help-button/index.ts b/src/components/molecules/buttons/help-button/index.ts new file mode 100644 index 0000000..952119e --- /dev/null +++ b/src/components/molecules/buttons/help-button/index.ts @@ -0,0 +1 @@ +export * from './help-button'; | 
