diff options
| author | Armand Philippot <git@armandphilippot.com> | 2023-11-22 19:07:25 +0100 |
|---|---|---|
| committer | Armand Philippot <git@armandphilippot.com> | 2023-11-23 11:44:28 +0100 |
| commit | 4f1181581e177dd80a76165a0f930ef4577f9c6a (patch) | |
| tree | 6029f86d42af7700f5b59cd1477854190bab65c6 /src/components/templates/page/page-section.tsx | |
| parent | 329e7c89bac50be9db2c6d2ec6751ab0ffad42ac (diff) | |
refactor(components): integrate sectioned page template into Page
* replace Section component by a generic one (other components should
be able to use it)
* add a PageSection component
* add `hasSections` prop to Page component
* remove sectioned-page template
Diffstat (limited to 'src/components/templates/page/page-section.tsx')
| -rw-r--r-- | src/components/templates/page/page-section.tsx | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/components/templates/page/page-section.tsx b/src/components/templates/page/page-section.tsx new file mode 100644 index 0000000..24bc1a1 --- /dev/null +++ b/src/components/templates/page/page-section.tsx @@ -0,0 +1,43 @@ +import { type ForwardRefRenderFunction, forwardRef } from 'react'; +import { Section, type SectionProps } from '../../atoms'; +import styles from './page.module.scss'; + +export type PageSectionVariant = 'dark' | 'light'; + +export type PageSectionProps = SectionProps & { + /** + * Add a border at the bottom of the section. + * + * @default false + */ + hasBorder?: boolean; + /** + * The section variant. + * + * @default 'light' + */ + variant?: PageSectionVariant; +}; + +const PageSectionWithRef: ForwardRefRenderFunction< + HTMLElement, + PageSectionProps +> = ( + { children, className = '', hasBorder = false, variant = 'light', ...props }, + ref +) => { + const sectionClass = [ + styles.section, + styles[hasBorder ? 'section--bordered' : ''], + styles[`section--${variant}`], + className, + ].join(' '); + + return ( + <Section {...props} className={sectionClass} ref={ref}> + <div className={styles.section__body}>{children}</div> + </Section> + ); +}; + +export const PageSection = forwardRef(PageSectionWithRef); |
