From af985f2111b130c3ef8686673fd1a8c31bc9bb72 Mon Sep 17 00:00:00 2001 From: Stefan Imhoff Date: Sun, 23 Apr 2023 15:31:54 +0200 Subject: [PATCH] feat: add Flag components --- src/components/Flag.tsx | 48 +++++++++++++++++++++++++++++++ src/components/NetflixFlag.tsx | 34 ++++++++++++++++++++++ src/components/PrimeVideoFlag.tsx | 34 ++++++++++++++++++++++ src/components/index.ts | 3 ++ src/mdx-components.ts | 6 ++++ 5 files changed, 125 insertions(+) create mode 100644 src/components/Flag.tsx create mode 100644 src/components/NetflixFlag.tsx create mode 100644 src/components/PrimeVideoFlag.tsx diff --git a/src/components/Flag.tsx b/src/components/Flag.tsx new file mode 100644 index 0000000..1d0ca5a --- /dev/null +++ b/src/components/Flag.tsx @@ -0,0 +1,48 @@ +import cx from 'classnames'; + +import type { ComponentChild, FunctionalComponent } from 'preact'; + +import { Link } from '.'; + +interface Props { + class?: string; + href?: string; + label: string; +} + +interface InnerFlagProps { + children: ComponentChild; +} + +const InnerFlag: FunctionalComponent = ({ children }) => ( + <> + + {children} + + +); + +export const Flag: FunctionalComponent = ({ label, class: className, href, ...props }) => { + const classes = cx( + 'rounded-1 border-1 border-solid border-[darkgrey] bg-[lightgrey] font-mono text-[0.7em] text-black decoration-0 pli-[0.3em] pbe-0 pbs-[0.1em] dark:bg-[lightgrey]/80', + className + ); + + return ( + <> + {href ? ( + + {label} + + ) : ( + + {label} + + )} + + ); +}; diff --git a/src/components/NetflixFlag.tsx b/src/components/NetflixFlag.tsx new file mode 100644 index 0000000..107be2b --- /dev/null +++ b/src/components/NetflixFlag.tsx @@ -0,0 +1,34 @@ +import cx from 'classnames'; + +import type { FunctionalComponent } from 'preact'; + +import { Link } from '.'; + +interface Props { + class?: string; + id: string; +} + +export const NetflixFlag: FunctionalComponent = ({ class: className, id, ...props }) => { + const classes = cx( + 'rounded-1 border-1 border-solid border-red-600 bg-red-600 font-mono text-[0.7em] text-white decoration-0 pli-[0.3em] pbe-0 pbs-[0.1em]', + className + ); + + return ( + + + N + + + ); +}; diff --git a/src/components/PrimeVideoFlag.tsx b/src/components/PrimeVideoFlag.tsx new file mode 100644 index 0000000..7bd2ac7 --- /dev/null +++ b/src/components/PrimeVideoFlag.tsx @@ -0,0 +1,34 @@ +import cx from 'classnames'; + +import type { FunctionalComponent } from 'preact'; + +import { Link } from '.'; + +interface Props { + class?: string; + id: string; +} + +export const PrimeVideoFlag: FunctionalComponent = ({ class: className, id, ...props }) => { + const classes = cx( + 'rounded-1 border-1 border-solid border-sky-500 bg-sky-500 font-mono text-[0.7em] text-white decoration-0 pli-[0.3em] pbe-0 pbs-[0.1em]', + className + ); + + return ( + + + P + + + ); +}; diff --git a/src/components/index.ts b/src/components/index.ts index 544ae23..5ea1d45 100644 --- a/src/components/index.ts +++ b/src/components/index.ts @@ -4,12 +4,15 @@ export * from './Banner'; export * from './Book'; export * from './ColorSwatch'; export * from './Divider'; +export * from './Flag'; export * from './Headline'; export * from './Image'; export * from './LegalDate'; export * from './Link'; export * from './ListItem'; +export * from './NetflixFlag'; export * from './OrderedList'; +export * from './PrimeVideoFlag'; export * from './Subheadline'; export * from './Subsubheadline'; export * from './Text'; diff --git a/src/mdx-components.ts b/src/mdx-components.ts index 53b8e1f..05881f1 100644 --- a/src/mdx-components.ts +++ b/src/mdx-components.ts @@ -4,10 +4,13 @@ import { Book, ColorSwatch, Divider, + Flag, Headline, Image, ListItem, + NetflixFlag, OrderedList, + PrimeVideoFlag, Subheadline, Subsubheadline, Text, @@ -25,6 +28,7 @@ export const mapping = { Banner, ColorSwatch, h1: Title, + Flag, h2: Headline, h3: Subheadline, h4: Subsubheadline, @@ -34,7 +38,9 @@ export const mapping = { img: Image, li: ListItem, ol: OrderedList, + NetflixFlag, p: Text, ul: UnorderedList, + PrimeVideoFlag, Verse, };