diff --git a/src/views/curated-list/list-grid.tsx b/src/views/curated-list/list-grid.tsx
index 3202d69ad..69193b95d 100644
--- a/src/views/curated-list/list-grid.tsx
+++ b/src/views/curated-list/list-grid.tsx
@@ -1,8 +1,10 @@
import { useEffect, useMemo, useRef, useState, type RefObject } from "react";
import { CuratedCardBadge } from "@/components/curated-card-badge";
import { PickCard } from "@/components/pick-card";
+import type { RowShape } from "@/components/row";
import { useT } from "@/lib/i18n";
import { itemMeta } from "@/lib/curated/registry";
+import { useSettings } from "@/lib/settings";
import type { CuratedList, CuratedListItem, ListOrdering } from "@/lib/curated/types";
type ListSort = "order" | "title" | "newest" | "oldest";
@@ -32,12 +34,16 @@ export function ListGrid({
list,
items,
scrollRoot,
+ sizing,
}: {
list: CuratedList;
items: readonly CuratedListItem[];
scrollRoot: RefObject {t("Example scores with your settings.")} = {
oscar: "Oscar",
@@ -49,16 +54,18 @@ export function ClassicAwardTab({
win,
below,
top,
+ topClass: topClassOverride,
}: {
win: ClassicWin | null;
below?: boolean;
top?: boolean;
+ topClass?: string;
}) {
if (!win) return null;
return (
+ {label}
+
+ );
+}
diff --git a/src/components/card-score-stack.tsx b/src/components/card-score-stack.tsx
index 5c64f7b70..f8aa4299d 100644
--- a/src/components/card-score-stack.tsx
+++ b/src/components/card-score-stack.tsx
@@ -95,11 +95,13 @@ export function ScoreStack({
limit = 3,
placement = "bottom",
raised = false,
+ shiftedFromEnd = false,
}: {
badges: readonly CardBadge[];
limit?: number;
placement?: "top" | "bottom";
raised?: boolean;
+ shiftedFromEnd?: boolean;
}) {
const shown = badges.slice(0, Math.max(1, limit));
if (shown.length === 0) return null;
@@ -107,7 +109,7 @@ export function ScoreStack({
return (
+
+ {value}
+
+
+ );
+}
diff --git a/src/components/curated-list-row.tsx b/src/components/curated-list-row.tsx
index 5ae4c99f9..f80306c40 100644
--- a/src/components/curated-list-row.tsx
+++ b/src/components/curated-list-row.tsx
@@ -3,7 +3,7 @@ import nytLogo from "@/assets/awards/nyt-logo.svg";
import { CuratedCardBadge } from "@/components/curated-card-badge";
import { PickCard } from "@/components/pick-card";
import { useT } from "@/lib/i18n";
-import { curatedList, itemMeta } from "@/lib/curated/registry";
+import { cardBadge, curatedList, itemMeta } from "@/lib/curated/registry";
import type { CuratedList, ListBrand } from "@/lib/curated/types";
import { useView } from "@/lib/view";
import { Row, usePosterRow } from "./row";
@@ -50,7 +50,10 @@ export function CuratedListRow({ listId, title }: { listId: string; title?: stri
>
{cards.map(({ item, meta }) => (
-
-
- {value}
-
-
- );
-}
-
-function deriveBadge(meta: Meta): { label: string; tone?: BadgeTone } | null {
- const year = new Date().getFullYear();
- if (meta.releaseInfo === String(year)) return { label: "New" };
- return null;
-}
-
-function isInCinema(meta: Meta): boolean {
- return meta.type === "movie" && meta.inTheaters === true;
-}
-
-function isRerun(meta: Meta): boolean {
- if (meta.type !== "movie") return false;
- if (!meta.releaseDate) return false;
- const released = Date.parse(meta.releaseDate);
- if (Number.isNaN(released)) return false;
- const monthsOld = (Date.now() - released) / (1000 * 60 * 60 * 24 * 30.44);
- return monthsOld > 9;
-}
-
-const AWARD_TAB_LABEL: Record
- {label}
-
- );
-}
-
-function CinemaBadge({
- dubShift = false,
- ribbonShift = false,
-}: {
- dubShift?: boolean;
- ribbonShift?: boolean;
-}) {
- const t = useT();
- return (
-
-
+ {layout === "tv" && (
+ <>
+
+
+
+ {phase === "anime" ? "Namakura Gatana" : normalName}
+
+
-
+
+ {layout === "tv" && (
+
+
+ {art.name}
+
+