From 837e0e904c40f7b87561c34ca3f49edd5d8d1c52 Mon Sep 17 00:00:00 2001 From: Armand Philippot Date: Thu, 28 Sep 2023 18:03:43 +0200 Subject: feat(components): replace icons with a generic Icon component Sizes are also predefined and can be set using the `size` prop, so the consumers should no longer adjust the size in CSS. --- .../atoms/images/icons/plus-minus-icon/index.ts | 1 + .../plus-minus-icon/plus-minus-icon.module.scss | 38 ++++++++++++++++++++++ .../icons/plus-minus-icon/plus-minus-icon.tsx | 30 +++++++++++++++++ 3 files changed, 69 insertions(+) create mode 100644 src/components/atoms/images/icons/plus-minus-icon/index.ts create mode 100644 src/components/atoms/images/icons/plus-minus-icon/plus-minus-icon.module.scss create mode 100644 src/components/atoms/images/icons/plus-minus-icon/plus-minus-icon.tsx (limited to 'src/components/atoms/images/icons/plus-minus-icon') diff --git a/src/components/atoms/images/icons/plus-minus-icon/index.ts b/src/components/atoms/images/icons/plus-minus-icon/index.ts new file mode 100644 index 0000000..acca727 --- /dev/null +++ b/src/components/atoms/images/icons/plus-minus-icon/index.ts @@ -0,0 +1 @@ +export * from './plus-minus-icon'; diff --git a/src/components/atoms/images/icons/plus-minus-icon/plus-minus-icon.module.scss b/src/components/atoms/images/icons/plus-minus-icon/plus-minus-icon.module.scss new file mode 100644 index 0000000..07550c9 --- /dev/null +++ b/src/components/atoms/images/icons/plus-minus-icon/plus-minus-icon.module.scss @@ -0,0 +1,38 @@ +@use "../../../../../styles/abstracts/functions" as fun; + +.icon { + display: flex; + place-content: center; + place-items: center; + aspect-ratio: 1/1; + position: relative; + background: var(--color-bg); + border: fun.convert-px(1) solid var(--color-primary); + border-radius: fun.convert-px(3); + color: var(--color-primary); + + &::before, + &::after { + content: ""; + position: absolute; + background: var(--color-primary); + transition: transform 0.4s ease-out 0s; + } + + &::after { + height: fun.convert-px(3); + width: 60%; + } + + &::before { + height: 55%; + width: fun.convert-px(3); + transform: scaleY(1); + } + + &--minus { + &::before { + transform: scaleY(0); + } + } +} diff --git a/src/components/atoms/images/icons/plus-minus-icon/plus-minus-icon.tsx b/src/components/atoms/images/icons/plus-minus-icon/plus-minus-icon.tsx new file mode 100644 index 0000000..ed6bcf2 --- /dev/null +++ b/src/components/atoms/images/icons/plus-minus-icon/plus-minus-icon.tsx @@ -0,0 +1,30 @@ +import type { FC, HTMLAttributes } from 'react'; +import styles from './plus-minus-icon.module.scss'; + +export type PlusMinusIconShape = 'minus' | 'plus'; + +export type PlusMinusIconProps = Omit< + HTMLAttributes, + 'children' +> & { + /** + * Which shape should be displayed. + */ + shape: PlusMinusIconShape; +}; + +/** + * PlusMinusIcon component + * + * Render a plus or a minus icon. + */ +export const PlusMinusIcon: FC = ({ + className = '', + shape, + ...props +}) => { + const shapeClass = styles[`icon--${shape}`]; + const iconClass = `${styles.icon} ${shapeClass} ${className}`; + + return
; +}; -- cgit v1.2.3