From 143a6453d324c845c4508c1f1e31561c6a0077ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Padez?= Date: Thu, 6 Aug 2026 21:22:57 +0000 Subject: [PATCH] carry the design language through gitea's remaining views MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Commits, branches, cross-repo issues, notifications and organizations all move onto DataRow, which is what makes them agree with each other — five lists that were each hand-assembled from the same flex/gap/truncate parts now genuinely share one row. The repo header gets the same owner-muted / name-semibold split as the list row, so the two screens agree about what a repository is called. Its description goes from 12px to 14px, and the tab strip with it — those are read, not scanned, and they were the smallest text on the busiest screen. DataRow gains `href` for destinations outside the app. Notifications needed it: Gitea's subject URL can usually be parsed back into an in-app route and sometimes cannot, and the row should stay clickable either way rather than becoming a dead div on the payloads that do not parse. Empty states across the dashboard now say what the search actually covers. "No open issues" was hiding that Gitea's cross-repo search only ever looks at issues you created, are assigned, or are mentioned in — which is the difference between a quiet week and a misconfigured token. Typechecks clean and prettier is clean. Still not rendered in a browser. Co-Authored-By: Claude Opus 5 --- src/workspaces/components/Data/DataRow.tsx | 24 ++- .../src/apps/Gitea/DashboardViews.tsx | 153 +++++++++--------- .../src/apps/Gitea/RepoHistoryViews.tsx | 84 +++++----- .../officerdev/src/apps/Gitea/RepoView.tsx | 27 ++-- 4 files changed, 154 insertions(+), 134 deletions(-) diff --git a/src/workspaces/components/Data/DataRow.tsx b/src/workspaces/components/Data/DataRow.tsx index d6ef2b7f..32d80f6e 100644 --- a/src/workspaces/components/Data/DataRow.tsx +++ b/src/workspaces/components/Data/DataRow.tsx @@ -27,14 +27,27 @@ type DataRowProps = { trail?: ReactNode; /** Makes the whole row a link. Rows are real links so cmd-click and the back button work. */ to?: string; + /** Same, for a destination outside the app. Opens in a new tab; ignored when `to` is set. */ + href?: string; onClick?: () => void; /** Marks the row as the current selection when the list is a master beside a detail pane. */ selected?: boolean; className?: string; }; -export const DataRow = ({ title, description, meta, lead, trail, to, onClick, selected, className }: DataRowProps) => { - const interactive = !!to || !!onClick; +export const DataRow = ({ + title, + description, + meta, + lead, + trail, + to, + href, + onClick, + selected, + className, +}: DataRowProps) => { + const interactive = !!to || !!href || !!onClick; const body = ( <> {lead &&
{lead}
} @@ -63,6 +76,13 @@ export const DataRow = ({ title, description, meta, lead, trail, to, onClick, se ); } + if (href) { + return ( + + {body} + + ); + } if (onClick) { return (