diff --git a/package.json b/package.json index 5ddc5fb40..389d8ff37 100644 --- a/package.json +++ b/package.json @@ -71,6 +71,7 @@ "rehype-parse": "9.0.0", "rehype-sanitize": "6.0.0", "rehype-stringify": "10.0.0", + "swiper": "11.1.4", "tailwind-merge": "2.3.0", "tailwindcss-animate": "1.0.7", "tldts": "6.1.23", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cbcf1784d..41d9d126f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -152,6 +152,9 @@ importers: rehype-stringify: specifier: 10.0.0 version: 10.0.0 + swiper: + specifier: 11.1.4 + version: 11.1.4 tailwind-merge: specifier: 2.3.0 version: 2.3.0 @@ -4769,6 +4772,10 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} + swiper@11.1.4: + resolution: {integrity: sha512-1n7kbYJB2dFEpUHRFszq7gys/ofIBrMNibwTiMvPHwneKND/t9kImnHt6CfGPScMHgI+dWMbGTycCKGMoOO1KA==} + engines: {node: '>= 4.7.0'} + synckit@0.6.2: resolution: {integrity: sha512-Vhf+bUa//YSTYKseDiiEuQmhGCoIF3CVBhunm3r/DQnYiGT4JssmnKQc44BIyOZRK2pKjXXAgbhfmbeoC9CJpA==} engines: {node: '>=12.20'} @@ -10460,6 +10467,8 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} + swiper@11.1.4: {} + synckit@0.6.2: dependencies: tslib: 2.6.2 diff --git a/src/renderer/src/assets/base.css b/src/renderer/src/assets/base.css index e6ec9676e..bd32ea22a 100644 --- a/src/renderer/src/assets/base.css +++ b/src/renderer/src/assets/base.css @@ -20,3 +20,15 @@ a { .dark { color-scheme: dark; } + +.swiper { + @apply bg-zinc-50; +} + +.swiper-button { + @apply absolute top-1/2 -translate-y-1/2 bg-white rounded-full z-[1] w-6 h-6 flex items-center justify-center opacity-80; +} + +.swiper-wrapper { + @apply flex items-center; +} diff --git a/src/renderer/src/components/entry-column/article-item.tsx b/src/renderer/src/components/entry-column/article-item.tsx index 76b5a4d3f..4a5c4b270 100644 --- a/src/renderer/src/components/entry-column/article-item.tsx +++ b/src/renderer/src/components/entry-column/article-item.tsx @@ -17,7 +17,7 @@ export function ArticleItem({ entryId, entryPreview }: UniversalItemProps) {
-
+
{entry.feeds.title} ยท @@ -32,7 +32,7 @@ export function ArticleItem({ entryId, entryPreview }: UniversalItemProps) {
{entry.entries.title}
-
+
{entry.entries.description}
diff --git a/src/renderer/src/components/entry-column/index.tsx b/src/renderer/src/components/entry-column/index.tsx index 2b4db5697..78514fbad 100644 --- a/src/renderer/src/components/entry-column/index.tsx +++ b/src/renderer/src/components/entry-column/index.tsx @@ -127,7 +127,7 @@ export function EntryColumn() { {activeList?.view && views[activeList.view].gridMode ? ( ) : diff --git a/src/renderer/src/components/entry-column/item-wrapper.tsx b/src/renderer/src/components/entry-column/item-wrapper.tsx index 5df516e56..fe32dd4ad 100644 --- a/src/renderer/src/components/entry-column/item-wrapper.tsx +++ b/src/renderer/src/components/entry-column/item-wrapper.tsx @@ -51,7 +51,7 @@ export function EntryItemWrapper({ "rounded-md transition-colors", !views[view || 0].wideMode && activeEntry === entry.entries.id && "bg-native-active/40", views[view || 0].wideMode && !views[view || 0].gridMode && "hover:bg-native-active/30", - entry.read ? "text-zinc-600 opacity-85" : "text-zinc-900 dark:text-white/90", + entry.read ? "text-zinc-500" : "text-zinc-900 dark:text-white/90", )} // ref={ref} onClick={(e) => { diff --git a/src/renderer/src/components/entry-column/picture-item.tsx b/src/renderer/src/components/entry-column/picture-item.tsx index 8599c6dac..090e6a369 100644 --- a/src/renderer/src/components/entry-column/picture-item.tsx +++ b/src/renderer/src/components/entry-column/picture-item.tsx @@ -1,9 +1,10 @@ import { FeedIcon } from "@renderer/components/feed-icon" +import { SwipeImages } from "@renderer/components/swipe-images" import { Image } from "@renderer/components/ui/image" +import { ReactVirtuosoItemPlaceholder } from "@renderer/components/ui/placeholder" import dayjs from "@renderer/lib/dayjs" import { useEntry } from "@renderer/store/entry" -import { ReactVirtuosoItemPlaceholder } from "../ui/placeholder" import type { UniversalItemProps } from "./types" export function PictureItem({ entryId, entryPreview }: UniversalItemProps) { @@ -12,19 +13,13 @@ export function PictureItem({ entryId, entryPreview }: UniversalItemProps) { return (
-
- {entry.entries.images?.slice(0, 1).map((image) => ( - - ))} +
+
{entry.entries.title}
diff --git a/src/renderer/src/components/entry-column/video-item.tsx b/src/renderer/src/components/entry-column/video-item.tsx index 161124589..5f750bb9e 100644 --- a/src/renderer/src/components/entry-column/video-item.tsx +++ b/src/renderer/src/components/entry-column/video-item.tsx @@ -12,7 +12,7 @@ export function VideoItem({ entryId, entryPreview }: UniversalItemProps) { return (
-
+
+ {(images?.length || 0) > 1 ? + ( + <> + + {images?.slice(0, 5).map((image) => ( + + cover + + ))} + +
e.stopPropagation()} + > + +
+
e.stopPropagation()} + > + +
+ + ) : + images?.length === 1 ? + ( + cover + + ) : + ( +
+
+
+
+
+
+ )} +
+ ) +}