From ec54c7692d5588addcd7563626df381aa86d5d79 Mon Sep 17 00:00:00 2001 From: Armand Philippot Date: Wed, 20 Apr 2022 19:27:46 +0200 Subject: chore: add a Sidebar component --- src/components/atoms/layout/sidebar.module.scss | 7 ++++ src/components/atoms/layout/sidebar.stories.tsx | 55 +++++++++++++++++++++++++ src/components/atoms/layout/sidebar.test.tsx | 11 +++++ src/components/atoms/layout/sidebar.tsx | 24 +++++++++++ 4 files changed, 97 insertions(+) create mode 100644 src/components/atoms/layout/sidebar.module.scss create mode 100644 src/components/atoms/layout/sidebar.stories.tsx create mode 100644 src/components/atoms/layout/sidebar.test.tsx create mode 100644 src/components/atoms/layout/sidebar.tsx (limited to 'src/components/atoms/layout') diff --git a/src/components/atoms/layout/sidebar.module.scss b/src/components/atoms/layout/sidebar.module.scss new file mode 100644 index 0000000..da2acbe --- /dev/null +++ b/src/components/atoms/layout/sidebar.module.scss @@ -0,0 +1,7 @@ +@use "@styles/abstracts/functions" as fun; + +.wrapper { + > *:not(:first-child) { + margin-top: fun.convert-px(-2); + } +} diff --git a/src/components/atoms/layout/sidebar.stories.tsx b/src/components/atoms/layout/sidebar.stories.tsx new file mode 100644 index 0000000..337d0c9 --- /dev/null +++ b/src/components/atoms/layout/sidebar.stories.tsx @@ -0,0 +1,55 @@ +import { ComponentMeta, ComponentStory } from '@storybook/react'; +import { IntlProvider } from 'react-intl'; +import SidebarComponent from './sidebar'; + +/** + * Sidebar - Storybook Meta + */ +export default { + title: 'Atoms/Layout', + component: SidebarComponent, + argTypes: { + children: { + control: { + type: 'text', + }, + description: 'The sidebar content.', + type: { + name: 'string', + required: true, + }, + }, + className: { + control: { + type: 'text', + }, + description: 'Set additional classnames to the aside element.', + table: { + category: 'Styles', + }, + type: { + name: 'string', + required: false, + }, + }, + }, + decorators: [ + (Story) => ( + + + + ), + ], +} as ComponentMeta; + +const Template: ComponentStory = (args) => ( + +); + +/** + * Layout Stories - Sidebar + */ +export const Sidebar = Template.bind({}); +Sidebar.args = { + children: 'Some widgets.', +}; diff --git a/src/components/atoms/layout/sidebar.test.tsx b/src/components/atoms/layout/sidebar.test.tsx new file mode 100644 index 0000000..4c9459d --- /dev/null +++ b/src/components/atoms/layout/sidebar.test.tsx @@ -0,0 +1,11 @@ +import { render, screen } from '@test-utils'; +import Sidebar from './sidebar'; + +const children = 'A widget'; + +describe('Sidebar', () => { + it('renders an aside element', () => { + render({children}); + expect(screen.getByRole('complementary')).toHaveTextContent(children); + }); +}); diff --git a/src/components/atoms/layout/sidebar.tsx b/src/components/atoms/layout/sidebar.tsx new file mode 100644 index 0000000..194ed9f --- /dev/null +++ b/src/components/atoms/layout/sidebar.tsx @@ -0,0 +1,24 @@ +import { FC, ReactNode } from 'react'; +import styles from './sidebar.module.scss'; + +export type SidebarProps = { + /** + * The sidebar body. + */ + children: ReactNode; + /** + * Set additional classnames to the aside element. + */ + className?: string; +}; + +/** + * Sidebar component + * + * Render an aside element. + */ +const Sidebar: FC = ({ children, className = '' }) => { + return ; +}; + +export default Sidebar; -- cgit v1.2.3