diff --git a/components/episode-card.module.css b/components/episode-card.module.css index 4b1d997..4883ed3 100644 --- a/components/episode-card.module.css +++ b/components/episode-card.module.css @@ -12,21 +12,9 @@ object-fit: cover; } -.Description { - -webkit-box-orient: vertical; - -webkit-line-clamp: 2; - display: -webkit-box; - overflow: hidden; -} - -.Description > p { - margin-block-start: 0em; - margin-block-end: 0.5em; -} - @media (hover: hover) { .Card:hover { background-color: var(--color-panel-translucent); - transition: opacity 60ms; + transition: opacity 300ms; } } diff --git a/components/episode-card.tsx b/components/episode-card.tsx index 0508452..b2c59d4 100644 --- a/components/episode-card.tsx +++ b/components/episode-card.tsx @@ -3,11 +3,12 @@ import type { Tables } from '@/types/supabase/database'; import { Button, Card, Flex, Heading, Link, Text } from '@radix-ui/themes'; import { format } from 'date-fns'; import formatDuration from 'format-duration'; -import parseHTML from 'html-react-parser'; import NextLink from 'next/link'; import { FaPlay } from 'react-icons/fa6'; import styles from './episode-card.module.css'; +import { EpisodeDescription } from './episode-description'; +import { LineClamp } from './ui/line-clamp'; type Props = Pick< Tables<'episode'>, @@ -45,13 +46,10 @@ export function EpisodeCard(props: Props) { {props.description ? ( - - {parseHTML(props.description)} + + + {props.description} + ) : null} diff --git a/components/episode-description.module.css b/components/episode-description.module.css new file mode 100644 index 0000000..077df8e --- /dev/null +++ b/components/episode-description.module.css @@ -0,0 +1,4 @@ +.Container p { + margin-block-start: 0em; + margin-block-end: 0.5em; +} diff --git a/components/episode-description.tsx b/components/episode-description.tsx new file mode 100644 index 0000000..069beb5 --- /dev/null +++ b/components/episode-description.tsx @@ -0,0 +1,12 @@ +import { Text } from '@radix-ui/themes'; +import parseHTML from 'html-react-parser'; + +import styles from './episode-description.module.css'; + +export function EpisodeDescription({ children }: { children: string }) { + return ( + + {parseHTML(children)} + + ); +} diff --git a/components/show-card.module.css b/components/show-card.module.css index 52b84cd..546f613 100644 --- a/components/show-card.module.css +++ b/components/show-card.module.css @@ -2,13 +2,6 @@ text-decoration: none; } -.Description { - -webkit-box-orient: vertical; - -webkit-line-clamp: 2; - display: -webkit-box; - overflow: hidden; -} - .ToggleCard { cursor: var(--cursor-button); } diff --git a/components/show-card.tsx b/components/show-card.tsx index 04962c5..a0800f0 100644 --- a/components/show-card.tsx +++ b/components/show-card.tsx @@ -17,6 +17,7 @@ import { FaCircleCheck, FaPlay } from 'react-icons/fa6'; import styles from './show-card.module.css'; import { Hover } from './ui/hover'; +import { LineClamp } from './ui/line-clamp'; type Props = Pick, 'description' | 'images' | 'title'>; @@ -24,13 +25,8 @@ function ShowCardDescription(props: Pick) { if (!props.description) return null; return ( - - {props.description} + + {props.description} ); } diff --git a/components/ui/line-clamp.module.css b/components/ui/line-clamp.module.css new file mode 100644 index 0000000..40fa301 --- /dev/null +++ b/components/ui/line-clamp.module.css @@ -0,0 +1,6 @@ +.Container { + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; + display: -webkit-box; + overflow: hidden; +} diff --git a/components/ui/line-clamp.tsx b/components/ui/line-clamp.tsx new file mode 100644 index 0000000..026d122 --- /dev/null +++ b/components/ui/line-clamp.tsx @@ -0,0 +1,9 @@ +import type { PropsWithChildren } from 'react'; + +import { Text } from '@radix-ui/themes'; + +import styles from './line-clamp.module.css'; + +export function LineClamp({ children }: PropsWithChildren) { + return {children}; +}