From c18f2f8a9d189343db9740945196af46c903d2d9 Mon Sep 17 00:00:00 2001 From: Armand Philippot Date: Wed, 26 Jan 2022 12:43:20 +0100 Subject: chore: create a ResponsiveImage component for MDX rendering --- .../ResponsiveImage/ResponsiveImage.module.scss | 49 ++++++++++++++++++++++ .../MDX/ResponsiveImage/ResponsiveImage.tsx | 36 ++++++++++++++++ src/components/MDX/index.tsx | 3 +- 3 files changed, 87 insertions(+), 1 deletion(-) create mode 100644 src/components/MDX/ResponsiveImage/ResponsiveImage.module.scss create mode 100644 src/components/MDX/ResponsiveImage/ResponsiveImage.tsx (limited to 'src') diff --git a/src/components/MDX/ResponsiveImage/ResponsiveImage.module.scss b/src/components/MDX/ResponsiveImage/ResponsiveImage.module.scss new file mode 100644 index 0000000..34b1a92 --- /dev/null +++ b/src/components/MDX/ResponsiveImage/ResponsiveImage.module.scss @@ -0,0 +1,49 @@ +@use "@styles/abstracts/functions" as fun; + +.wrapper { + width: max-content; + max-width: 100%; + margin: var(--spacing-sm) auto; + position: relative; +} + +.link { + display: flex; + flex-flow: column; + background: none; + text-decoration: none; + + .caption { + color: var(--color-primary-darker); + } + + &:hover, + &:focus { + transform: scale(1.1); + } + + &:focus { + .caption { + text-decoration: underline solid var(--color-primary-darker) + fun.convert-px(3); + } + } + + &:active { + transform: scale(0.9); + + .caption { + text-decoration: none; + } + } +} + +.caption { + margin: 0; + padding: fun.convert-px(4) var(--spacing-2xs); + background: var(--color-bg-secondary); + border: fun.convert-px(1) solid var(--color-border); + box-shadow: 0 fun.convert-px(-1) fun.convert-px(1) fun.convert-px(1) + var(--color-shadow-light); + font-weight: 500; +} diff --git a/src/components/MDX/ResponsiveImage/ResponsiveImage.tsx b/src/components/MDX/ResponsiveImage/ResponsiveImage.tsx new file mode 100644 index 0000000..062c04b --- /dev/null +++ b/src/components/MDX/ResponsiveImage/ResponsiveImage.tsx @@ -0,0 +1,36 @@ +import Image, { ImageProps } from 'next/image'; +import Link from 'next/link'; +import styles from './ResponsiveImage.module.scss'; + +type ResponsiveImageProps = ImageProps & { + caption?: string; + linkTarget?: string; +}; + +const ResponsiveImage = (props: ResponsiveImageProps) => { + const { caption, linkTarget, ...attributes } = props; + + return ( +
+ {linkTarget ? ( + + + {attributes.alt} + {caption && ( +
{caption}
+ )} +
+ + ) : ( + <> + {attributes.alt} + {caption && ( +
{caption}
+ )} + + )} +
+ ); +}; + +export default ResponsiveImage; diff --git a/src/components/MDX/index.tsx b/src/components/MDX/index.tsx index 5ebe6bf..acb885e 100644 --- a/src/components/MDX/index.tsx +++ b/src/components/MDX/index.tsx @@ -1,4 +1,5 @@ import CodeBlock from './CodeBlock/CodeBlock'; import Link from './Link/Link'; +import ResponsiveImage from './ResponsiveImage/ResponsiveImage'; -export { CodeBlock, Link }; +export { CodeBlock, Link, ResponsiveImage }; -- cgit v1.2.3