From 582c033e1ccc7829736ab168fe4051d8a011195f Mon Sep 17 00:00:00 2001 From: npeter83 Date: Sat, 19 Sep 2026 04:51:43 +0200 Subject: [PATCH] feat(feed): the card menu carries the card's own actions Right-click, long-press or Shift+F10 on a feed card offered only the comfort-shelf pin; watched, saved, hidden and the progress reset were reachable only by hovering or Tabbing through every card. --- frontend/src/components/ComfortPinMenu.tsx | 67 ++++++++- .../src/components/FeedVideoMenu.dom.test.tsx | 134 ++++++++++++++++++ frontend/src/components/VirtualFeed.tsx | 13 +- frontend/src/i18n/locales/en/card.json | 12 +- frontend/src/i18n/locales/hu/card.json | 12 +- 5 files changed, 228 insertions(+), 10 deletions(-) create mode 100644 frontend/src/components/FeedVideoMenu.dom.test.tsx diff --git a/frontend/src/components/ComfortPinMenu.tsx b/frontend/src/components/ComfortPinMenu.tsx index 7a3c5e73..43e62256 100644 --- a/frontend/src/components/ComfortPinMenu.tsx +++ b/frontend/src/components/ComfortPinMenu.tsx @@ -1,7 +1,9 @@ import { useTranslation } from "react-i18next"; +import { Bookmark, BookmarkX, Check, Eye, EyeOff, RotateCcw, Undo2 } from "lucide-react"; -import { type PlexCard, type Video } from "../lib/api"; +import { type PlexCard, type Video, type VideoStatus } from "../lib/api"; import { pinPlex, pinVideo, useComfortPin, type PinTarget } from "./comfortPin"; +import { type ActionMenuItem } from "./ui/ActionMenu"; import { ContextMenu } from "./ui/ContextMenu"; import { type ContextMenuController } from "./ui/useContextMenu"; @@ -44,7 +46,64 @@ export function PlexPinMenu({ menu }: { menu: ContextMenuController }) return c.title} />; } -/** The YouTube video lists (the feed grid, the Home rails). */ -export function VideoPinMenu({ menu }: { menu: ContextMenuController