diff options
| author | Armand Philippot <git@armandphilippot.com> | 2023-10-09 14:33:29 +0200 |
|---|---|---|
| committer | Armand Philippot <git@armandphilippot.com> | 2023-11-11 18:14:41 +0100 |
| commit | f11a906420975e833f278a08470d8f9783c76f73 (patch) | |
| tree | cd98eb0c73e07d08fbbe3006a2f7d5a34b0464b3 /src/components/molecules/images/flipping-logo/flipping-logo.tsx | |
| parent | d75b9a1e150ab211c1052fb49bede9bd16320aca (diff) | |
refactor(components): extract FlippingLogo from Branding component
Diffstat (limited to 'src/components/molecules/images/flipping-logo/flipping-logo.tsx')
| -rw-r--r-- | src/components/molecules/images/flipping-logo/flipping-logo.tsx | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/components/molecules/images/flipping-logo/flipping-logo.tsx b/src/components/molecules/images/flipping-logo/flipping-logo.tsx new file mode 100644 index 0000000..e22feae --- /dev/null +++ b/src/components/molecules/images/flipping-logo/flipping-logo.tsx @@ -0,0 +1,41 @@ +import { + forwardRef, + type ReactNode, + type ForwardRefRenderFunction, +} from 'react'; +import { Flip, type FlipProps, FlipSide } from '../../../atoms'; +import styles from './flipping-logo.module.scss'; + +type FlippingLogoProps = Omit<FlipProps, 'children'> & { + /** + * The back face. + */ + back: ReactNode; + /** + * The front face. + */ + front: ReactNode; +}; + +const FlippingLogoWithRef: ForwardRefRenderFunction< + HTMLDivElement, + FlippingLogoProps +> = ({ back, className = '', front, ...props }, ref) => { + const wrapperClass = `${styles.wrapper} ${className}`; + + return ( + <Flip {...props} className={wrapperClass} ref={ref}> + <FlipSide className={styles.side}>{front}</FlipSide> + <FlipSide className={styles.side} isBack> + {back} + </FlipSide> + </Flip> + ); +}; + +/** + * FlippingLogo component + * + * Renders a website logo with two faces. + */ +export const FlippingLogo = forwardRef(FlippingLogoWithRef); |
