diff --git a/src/app/[lang]/cases/loading.tsx b/src/app/[lang]/cases/loading.tsx index 8a256fe..125f5c7 100644 --- a/src/app/[lang]/cases/loading.tsx +++ b/src/app/[lang]/cases/loading.tsx @@ -27,13 +27,13 @@ export default function CasesLoading() { ))} -
+
{SKELETON_KEYS.map((key) => (
-
+
diff --git a/src/app/[lang]/cases/page.tsx b/src/app/[lang]/cases/page.tsx index 224b2a6..49c3fe6 100644 --- a/src/app/[lang]/cases/page.tsx +++ b/src/app/[lang]/cases/page.tsx @@ -170,10 +170,11 @@ export default async function CasesPage({
) : ( -
+
{caseItems.map((item) => ( +

{messages.card.method} / {messages.card.code}

@@ -75,12 +81,16 @@ export function CaseCardPrompt({ } return ( -
+

{messages.card.prompt}

- {availableLanguages.length > 1 ? ( + {!compact && availableLanguages.length > 1 ? (
{availableLanguages.map((value) => (
-

+

{prompt.text}

diff --git a/src/components/case-card.tsx b/src/components/case-card.tsx index 24537f1..e7a755a 100644 --- a/src/components/case-card.tsx +++ b/src/components/case-card.tsx @@ -32,31 +32,62 @@ export type CaseCardItem = { export function CaseCard({ item, actions, + variant = "default", }: { item: CaseCardItem; actions?: ReactNode; + variant?: "default" | "gallery"; }) { const messages = useMessages(); + const isGallery = variant === "gallery"; const label = messages.category[item.category as keyof typeof messages.category] || item.category; const summary = getCaseCardSummary(item.summary); const creatorSlug = item.creator ? slugifyCreatorName(item.creator) : ""; + const galleryBackdropUrl = isGallery + ? item.mediaType === "image" + ? item.mediaUrl + : item.posterUrl + : null; return (
+ {galleryBackdropUrl ? ( + <> + +