From 58d132139ba8d5fa17c8681a0275047ce4cca809 Mon Sep 17 00:00:00 2001 From: nsfisis Date: Wed, 3 Dec 2025 03:51:29 +0900 Subject: feat(frontend): design update --- frontend/src/components/AddFeedForm.tsx | 26 +++++++++++------------ frontend/src/components/ArticleItem.tsx | 24 ++++++++++----------- frontend/src/components/ArticleList.tsx | 16 +++++++------- frontend/src/components/FeedItem.tsx | 37 ++++++++++++++++++--------------- frontend/src/components/FeedList.tsx | 20 ++++++++++++++---- frontend/src/components/Layout.tsx | 4 ++-- frontend/src/components/MenuItem.tsx | 6 +++--- frontend/src/components/Navigation.tsx | 19 ++++++++++------- 8 files changed, 86 insertions(+), 66 deletions(-) (limited to 'frontend/src/components') diff --git a/frontend/src/components/AddFeedForm.tsx b/frontend/src/components/AddFeedForm.tsx index 6d18318..9a56574 100644 --- a/frontend/src/components/AddFeedForm.tsx +++ b/frontend/src/components/AddFeedForm.tsx @@ -48,43 +48,43 @@ export function AddFeedForm({ onFeedAdded }: Props) { const isUrlValid = !url || isValidUrl(url); return ( -
-
-

+ +
+

Subscribe to New Feed

-
+
setUrl(e.target.value)} placeholder="https://example.com/feed.xml" - className={`w-full rounded-md border px-3 py-2 text-sm focus:outline-none focus:ring-2 ${ + className={`w-full rounded-lg border bg-white px-4 py-2.5 text-sm text-stone-900 placeholder-stone-400 transition-all duration-200 focus:outline-none focus:ring-2 focus:ring-offset-1 ${ isUrlValid - ? "border-gray-300 focus:border-blue-500 focus:ring-blue-500" - : "border-red-300 focus:border-red-500 focus:ring-red-500" + ? "border-stone-200 focus:border-sky-500 focus:ring-sky-500/20" + : "border-red-300 focus:border-red-500 focus:ring-red-500/20" }`} disabled={fetching} /> {!isUrlValid && ( -

+

Please enter a valid URL (http:// or https://)

)} - {error &&

{error}

} + {error &&

{error}

}
diff --git a/frontend/src/components/ArticleItem.tsx b/frontend/src/components/ArticleItem.tsx index c61923a..f8fac24 100644 --- a/frontend/src/components/ArticleItem.tsx +++ b/frontend/src/components/ArticleItem.tsx @@ -51,38 +51,36 @@ export function ArticleItem({ article, onReadChange }: Props) { return (
-
+
diff --git a/frontend/src/components/ArticleList.tsx b/frontend/src/components/ArticleList.tsx index 574f529..afadb25 100644 --- a/frontend/src/components/ArticleList.tsx +++ b/frontend/src/components/ArticleList.tsx @@ -30,7 +30,9 @@ export function ArticleList({ articles, isReadView }: Props) { if (visibleArticles.length === 0) { return ( -
No articles found.
+
+

No articles found.

+
); } @@ -54,14 +56,14 @@ export function ArticleList({ articles, isReadView }: Props) { ); return ( -
+
{Object.values(articlesByFeed).map(({ feed, articles: feedArticles }) => ( -
-

+
+

{feed.title} - - ({feedArticles.length} article - {feedArticles.length !== 1 ? "s" : ""}) + + {feedArticles.length} article + {feedArticles.length !== 1 ? "s" : ""}

diff --git a/frontend/src/components/FeedItem.tsx b/frontend/src/components/FeedItem.tsx index 80c8992..8333f75 100644 --- a/frontend/src/components/FeedItem.tsx +++ b/frontend/src/components/FeedItem.tsx @@ -41,26 +41,29 @@ export function FeedItem({ feed, onFeedUnsubscribed }: Props) { }; return ( -
-
-
-

{feed.title}

-

- - {feed.url} - +

+
+
+

+ {feed.title} +

+ + {feed.url} + +

+ Last fetched: {formatDateTime(new Date(feed.fetchedAt))}

-
- - Last fetched: {formatDateTime(new Date(feed.fetchedAt))} - -
-
+
)}
-- cgit v1.2.3-70-g09d2