diff options
Diffstat (limited to 'src/components/atoms')
| -rw-r--r-- | src/components/atoms/layout/main.stories.tsx | 52 | ||||
| -rw-r--r-- | src/components/atoms/layout/main.test.tsx | 12 | ||||
| -rw-r--r-- | src/components/atoms/layout/main.tsx | 23 | 
3 files changed, 87 insertions, 0 deletions
| diff --git a/src/components/atoms/layout/main.stories.tsx b/src/components/atoms/layout/main.stories.tsx new file mode 100644 index 0000000..64df890 --- /dev/null +++ b/src/components/atoms/layout/main.stories.tsx @@ -0,0 +1,52 @@ +import { ComponentMeta, ComponentStory } from '@storybook/react'; +import MainComponent from './main'; + +export default { +  title: 'Atoms/Layout', +  component: MainComponent, +  argTypes: { +    children: { +      control: { +        type: 'text', +      }, +      description: 'The content.', +      type: { +        name: 'string', +        required: true, +      }, +    }, +    className: { +      control: { +        type: 'text', +      }, +      description: 'Set additional classnames to the main element.', +      table: { +        category: 'Styles', +      }, +      type: { +        name: 'string', +        required: false, +      }, +    }, +    id: { +      control: { +        type: 'text', +      }, +      description: 'The main element id.', +      type: { +        name: 'string', +        required: true, +      }, +    }, +  }, +} as ComponentMeta<typeof MainComponent>; + +const Template: ComponentStory<typeof MainComponent> = (args) => ( +  <MainComponent {...args} /> +); + +export const Main = Template.bind({}); +Main.args = { +  children: 'The main content.', +  id: '#main', +}; diff --git a/src/components/atoms/layout/main.test.tsx b/src/components/atoms/layout/main.test.tsx new file mode 100644 index 0000000..f91846f --- /dev/null +++ b/src/components/atoms/layout/main.test.tsx @@ -0,0 +1,12 @@ +import { render, screen } from '@test-utils'; +import Main from './main'; + +const id = 'main'; +const children = 'The main content.'; + +describe('Main', () => { +  it('renders the content of main element', () => { +    render(<Main id={id}>{children}</Main>); +    expect(screen.getByRole('main')).toHaveTextContent(children); +  }); +}); diff --git a/src/components/atoms/layout/main.tsx b/src/components/atoms/layout/main.tsx new file mode 100644 index 0000000..4549328 --- /dev/null +++ b/src/components/atoms/layout/main.tsx @@ -0,0 +1,23 @@ +import { FC } from 'react'; + +export type MainProps = { +  /** +   * Set additional classnames to the main element. +   */ +  className?: string; +  /** +   * The main wrapper id. +   */ +  id: string; +}; + +/** + * Main component + * + * Render a main element. + */ +const Main: FC<MainProps> = ({ children, ...props }) => { +  return <main {...props}>{children}</main>; +}; + +export default Main; | 
