From e1ff4385d6d37db0c140172142a0489304eead38 Mon Sep 17 00:00:00 2001 From: Psychotoxical <171614930+Psychotoxical@users.noreply.github.com> Date: Mon, 29 Jun 2026 06:48:26 +0200 Subject: [PATCH] feat(settings): add "Square Corners" appearance toggle (#1215) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(settings): add "Square Corners" appearance toggle A Display toggle in Settings → Appearance → Visual Options that overrides the active theme to render cards and cover art with square (non-rounded) corners, for a sharper, boxy look. Covered surfaces: grid cards (album/playlist/artist/song/because) and their covers, detail-header heros (album/playlist/tracks), the Now Playing / Radio view, the fullscreen player, the cover lightbox, the queue panel cover, and the mini player. Persisted in themeStore and driven by an `html[data-square-corners]` attribute set in App.tsx — applied in both the main and mini-player webviews (the mini player rehydrates the theme store on the shared `storage` event). Strings added for all 12 locales. * docs(changelog): add Square Corners to 1.50.0 CHANGELOG and What's New --- CHANGELOG.md | 11 ++++ WHATS_NEW.md | 9 +++ src/App.tsx | 9 +++ src/components/settings/AppearanceTab.tsx | 7 +++ src/locales/de/settings.ts | 2 + src/locales/en/settings.ts | 2 + src/locales/es/settings.ts | 2 + src/locales/fr/settings.ts | 2 + src/locales/hu/settings.ts | 2 + src/locales/ja/settings.ts | 2 + src/locales/nb/settings.ts | 2 + src/locales/nl/settings.ts | 2 + src/locales/pl/settings.ts | 2 + src/locales/ro/settings.ts | 2 + src/locales/ru/settings.ts | 2 + src/locales/zh/settings.ts | 2 + src/store/themeStore.ts | 6 ++ src/styles/components/index.css | 1 + src/styles/components/square-corners.css | 70 +++++++++++++++++++++++ 19 files changed, 137 insertions(+) create mode 100644 src/styles/components/square-corners.css diff --git a/CHANGELOG.md b/CHANGELOG.md index 271b0cca..431bbb47 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 > +## [1.50.0] + +## Added + +### Square corners — sharp-edged cards and covers + +**By [@Psychotoxical](https://github.com/Psychotoxical), PR [#1215](https://github.com/Psychotoxical/psysonic/pull/1215)** + +* New **Square Corners** toggle under **Settings → Appearance → Visual Options → Display** overrides the active theme to render cards and cover art with square, non-rounded corners. Covers album, playlist, artist and song cards, detail-page cover art, the Now Playing / Radio and fullscreen views, the cover lightbox, the queue cover, and the mini player. Off by default; buttons, inputs and dialogs keep the theme's corners. + + ## [1.49.0] - 2026-06-29 ## Added diff --git a/WHATS_NEW.md b/WHATS_NEW.md index 844930ca..1d28ed1f 100644 --- a/WHATS_NEW.md +++ b/WHATS_NEW.md @@ -8,6 +8,15 @@ Within each section, order by **user impact** (most noticeable first) — not PR `CHANGELOG.md` keeps strict PR order inside Added / Changed / Fixed. +## [1.50.0] + +## Highlights + +### Square corners — a sharper, boxier look + +- New **Square Corners** toggle under **Settings → Appearance → Visual Options** strips the rounded corners off cards and cover art across the app — handy when a theme's rounding doesn't suit your album covers. Off by default; everything else stays the way your theme defines it. + + ## [1.49.0] ## Highlights diff --git a/src/App.tsx b/src/App.tsx index eae0b414..55819b8d 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -86,6 +86,15 @@ export default function App() { document.documentElement.setAttribute('data-button-size', buttonSize); }, [buttonSize]); + // Strip rounded corners off grid cards when the user opts in — single CSS + // hook (`html[data-square-corners]`) overriding whatever radius the theme set. + const squareCorners = useThemeStore(s => s.squareCorners); + useEffect(() => { + const root = document.documentElement; + if (squareCorners) root.setAttribute('data-square-corners', ''); + else root.removeAttribute('data-square-corners'); + }, [squareCorners]); + // Hide all inline track-preview buttons when the user opts out — single // CSS hook (`html[data-track-previews="off"]`) instead of conditional // rendering in every tracklist. Per-location toggles use additional diff --git a/src/components/settings/AppearanceTab.tsx b/src/components/settings/AppearanceTab.tsx index 37b8bfea..2bebecb5 100644 --- a/src/components/settings/AppearanceTab.tsx +++ b/src/components/settings/AppearanceTab.tsx @@ -104,6 +104,13 @@ export function AppearanceTab() { onChange={theme.setFloatingPlayerBar} />
+