From 69a6bff197c87fc9034e87bdc54ef8d06bf94ed4 Mon Sep 17 00:00:00 2001 From: Zoe Roux Date: Wed, 11 Feb 2026 13:37:45 +0100 Subject: [PATCH] Cleanup styles --- api/src/controllers/seed/insert/shows.ts | 8 +++-- api/src/utils.ts | 4 +++ front/bun.lock | 4 +-- front/package.json | 2 +- front/src/components/items/item-details.tsx | 2 +- front/src/primitives/container.tsx | 2 +- front/src/primitives/icons.tsx | 2 +- front/src/primitives/image.tsx | 2 +- front/src/query/fetch-infinite.tsx | 3 +- front/src/ui/details/season.tsx | 8 +++-- front/src/ui/details/serie.tsx | 34 +++++++++++-------- .../ui/player/controls/bottom-controls.tsx | 23 +++++++++---- .../ui/player/controls/middle-controls.tsx | 9 +++-- front/src/ui/player/controls/touch.tsx | 2 +- 14 files changed, 67 insertions(+), 38 deletions(-) diff --git a/api/src/controllers/seed/insert/shows.ts b/api/src/controllers/seed/insert/shows.ts index 38cf2200..cc85c6bb 100644 --- a/api/src/controllers/seed/insert/shows.ts +++ b/api/src/controllers/seed/insert/shows.ts @@ -22,7 +22,7 @@ import type { SeedMovie } from "~/models/movie"; import type { SeedSerie } from "~/models/serie"; import type { Original } from "~/models/utils"; import { record } from "~/otel"; -import { getYear } from "~/utils"; +import { getYear, uniq } from "~/utils"; import { enqueueOptImage, flushImageQueue, type ImageTask } from "../images"; type Show = typeof shows.$inferInsert; @@ -68,7 +68,11 @@ export const insertShow = record( column: sql`${shows.original}['logo']`, }), }; - const ret = await insertBaseShow(tx, { ...show, original: orig }); + const ret = await insertBaseShow(tx, { + ...show, + genres: uniq(show.genres), + original: orig, + }); if ("status" in ret) return ret; const trans: ShowTrans[] = Object.entries(translations).map( diff --git a/api/src/utils.ts b/api/src/utils.ts index 5d78fba2..207acc28 100644 --- a/api/src/utils.ts +++ b/api/src/utils.ts @@ -29,6 +29,10 @@ export function getFile(path: string): BunFile | S3File { return Bun.file(path); } +export function uniq(a: T[]): T[] { + return uniqBy(a, (x) => x as string); +} + export function uniqBy(a: T[], key: (val: T) => string): T[] { const seen: Record = {}; return a.filter((item) => { diff --git a/front/bun.lock b/front/bun.lock index 8bbe5d65..6aadafcf 100644 --- a/front/bun.lock +++ b/front/bun.lock @@ -10,7 +10,7 @@ "@expo-google-fonts/sora": "^0.4.2", "@expo/html-elements": "^0.13.7", "@gorhom/portal": "^1.0.14", - "@legendapp/list": "^2.0.19", + "@legendapp/list": "^3.0.0-beta.31", "@material-symbols/svg-400": "^0.40.2", "@radix-ui/react-dropdown-menu": "^2.1.16", "@radix-ui/react-select": "^2.2.6", @@ -442,7 +442,7 @@ "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], - "@legendapp/list": ["@legendapp/list@2.0.19", "", { "dependencies": { "use-sync-external-store": "^1.5.0" }, "peerDependencies": { "react": "*", "react-native": "*" } }, "sha512-zDWg8yg0smKxxk+M7gwAbZAnf5uczohPA+IjqLSkImz7+e9ytxeT0Mq35RBO9RTKODOXfV/aIgm1uqUHLBEdmg=="], + "@legendapp/list": ["@legendapp/list@3.0.0-beta.31", "", { "dependencies": { "use-sync-external-store": "^1.5.0" }, "peerDependencies": { "react": "*" } }, "sha512-9KpPvwK/14QTJZVbEgDxjzRwcgSf1gkYSxw/d8GE03uasjnzCHe/fm4qrqpobDLYYt90wuemhjkE3YE18XMKEg=="], "@material-symbols/svg-400": ["@material-symbols/svg-400@0.40.2", "", {}, "sha512-e2yEgZW/OveVT1sGaZW1kkRWTPVghjsJYWy+vIea3q08Fv2o7FCYv23PESMyr5D4AaAXdM5dKWkF1e6yIm4swA=="], diff --git a/front/package.json b/front/package.json index 1f1d5816..ddfd8ba3 100644 --- a/front/package.json +++ b/front/package.json @@ -20,7 +20,7 @@ "@expo-google-fonts/sora": "^0.4.2", "@expo/html-elements": "^0.13.7", "@gorhom/portal": "^1.0.14", - "@legendapp/list": "^2.0.19", + "@legendapp/list": "^3.0.0-beta.31", "@material-symbols/svg-400": "^0.40.2", "@radix-ui/react-dropdown-menu": "^2.1.16", "@radix-ui/react-select": "^2.2.6", diff --git a/front/src/components/items/item-details.tsx b/front/src/components/items/item-details.tsx index 7015d2b5..b12b61c2 100644 --- a/front/src/components/items/item-details.tsx +++ b/front/src/components/items/item-details.tsx @@ -121,7 +121,7 @@ export const ItemDetails = ({ diff --git a/front/src/primitives/container.tsx b/front/src/primitives/container.tsx index e74e0f7d..8fd9fd00 100644 --- a/front/src/primitives/container.tsx +++ b/front/src/primitives/container.tsx @@ -14,7 +14,7 @@ export const Container = ({ return ( ({ { )} {...props} > - + ); }; diff --git a/front/src/query/fetch-infinite.tsx b/front/src/query/fetch-infinite.tsx index f66b7022..56cb1ed8 100644 --- a/front/src/query/fetch-infinite.tsx +++ b/front/src/query/fetch-infinite.tsx @@ -79,7 +79,8 @@ export const InfiniteFetch = ({ recycleItems getItemType={getItemType} estimatedItemSize={getItemSizeMult ? undefined : size} - stickyIndices={getStickyIndices?.(items ?? [])} + stickyHeaderIndices={getStickyIndices?.(items ?? [])} + // stickyHeaderConfig={{offset}} getEstimatedItemSize={ getItemSizeMult ? (idx, item, type) => getItemSizeMult(item, idx, type as Type) * size diff --git a/front/src/ui/details/season.tsx b/front/src/ui/details/season.tsx index e70abc7f..904e9828 100644 --- a/front/src/ui/details/season.tsx +++ b/front/src/ui/details/season.tsx @@ -41,7 +41,7 @@ export const SeasonHeader = ({ return (

@@ -109,7 +109,11 @@ export const EntryList = ({ query={EntryList.query(slug, season)} layout={EntryLine.layout} Empty={} - Divider={() => } + Divider={() => ( + +


+
+ )} getItemType={(item, idx) => item ? item.kind : idx === 0 ? "season" : "episode" } diff --git a/front/src/ui/details/serie.tsx b/front/src/ui/details/serie.tsx index ec52ea55..bb28b017 100644 --- a/front/src/ui/details/serie.tsx +++ b/front/src/ui/details/serie.tsx @@ -14,7 +14,7 @@ import { EntryList } from "./season"; export const SvgWave = (props: ComponentProps) => { // aspect-[width/height]: width/height of the svg return ( - + @@ -26,16 +26,18 @@ export const NextUp = (nextEntry: Entry) => { const { t } = useTranslation(); return ( - -

{t("show.nextUp")}

- -
+ + +

{t("show.nextUp")}

+ +
+
); }; @@ -43,10 +45,12 @@ NextUp.Loader = () => { const { t } = useTranslation(); return ( - -

{t("show.nextUp")}

- -
+ + +

{t("show.nextUp")}

+ +
+
); }; diff --git a/front/src/ui/player/controls/bottom-controls.tsx b/front/src/ui/player/controls/bottom-controls.tsx index 84f775a0..b807a8f2 100644 --- a/front/src/ui/player/controls/bottom-controls.tsx +++ b/front/src/ui/player/controls/bottom-controls.tsx @@ -98,7 +98,7 @@ const ControlButtons = ({ onMenuOpen: () => setMenu(true), onMenuClose: () => setMenu(false), className: "mr-4", - iconClassName: "fill-slate-200", + iconClassName: "fill-slate-200 dark:fill-slate-200", } satisfies Partial< ComponentProps< typeof Menu>> @@ -120,14 +120,14 @@ const ControlButtons = ({ href={`/watch/${previous}`} replace className="mr-4" - iconClassName="fill-slate-200" + iconClassName="fill-slate-200 dark:fill-slate-200" {...tooltip(t("player.previous"), true)} /> )} {next && ( )} {Platform.OS === "web" && ( - + )}
)} - +
@@ -153,7 +159,10 @@ const ControlButtons = ({ {Platform.OS === "web" && ( - + )} diff --git a/front/src/ui/player/controls/middle-controls.tsx b/front/src/ui/player/controls/middle-controls.tsx index 4218d53a..9039d0a3 100644 --- a/front/src/ui/player/controls/middle-controls.tsx +++ b/front/src/ui/player/controls/middle-controls.tsx @@ -32,13 +32,15 @@ export const MiddleControls = ({ href={previous} replace className={cn( - "mx-12 h-16 w-16 bg-gray-800/70", + "mx-6 bg-gray-800/70", !previous && "pointer-events-none opacity-0", )} + iconClassName="h-16 w-16" /> ); diff --git a/front/src/ui/player/controls/touch.tsx b/front/src/ui/player/controls/touch.tsx index 64d68fe7..f10a68e6 100644 --- a/front/src/ui/player/controls/touch.tsx +++ b/front/src/ui/player/controls/touch.tsx @@ -88,7 +88,7 @@ export const TouchControls = ({ // instantly hide the controls when mouse leaves the view if (e.nativeEvent.pointerType === "mouse") show(false); }} - className={cn("absolute inset-0", !shouldShow && "cursor-none")} + className={cn("absolute inset-0 cursor-default", !shouldShow && "cursor-none")} /> {shouldShow && children}