feat(settings): player bar layout — per-control visibility toggles (#627) (#721)

Adds a new sub-section under Settings → Personalisation (Advanced) that
hides individual controls in the player bar: Star rating, Favorite
(heart), Last.fm love, Equalizer, Mini player. Last.fm love still only
renders when a Last.fm session exists; the overflow row in the player
collapses when both Equalizer and Mini player are hidden.

- New `playerBarLayoutStore` (Zustand + persist, items[{id, visible}] +
  rehydrate sanitize) following the queueToolbar / playlistLayout
  pattern; defaults to all visible.
- New `PlayerBarLayoutCustomizer` reuses the same row + toggle pattern
  as the other personalisation customisers.
- Gates threaded through `PlayerTrackInfo` (3 controls), `PlayerBar`
  (EQ + Mini buttons), and `PlayerOverflowMenu` (EQ + Mini in the
  overflow row, with row-level conditional).
- `PersonalisationTab`: added as the last advanced sub-section so it
  only appears when the global Advanced Mode toggle is on.
- Settings search index gets entries for both Playlist page layout and
  Player bar (playlist row was missing).
- New i18n keys `settings.playerBar*` in all 9 locales.

Reuses kveld9's design from PR #627; not merged because the locale
split and the Advanced Mode refactor landed afterwards. Credited via
Co-Authored-By trailer + a new line in settingsCredits.ts under the
existing kveld9 entry.

Co-authored-by: Kveld. <kveld912@proton.me>
This commit is contained in:
Frank Stellmacher
2026-05-15 17:48:32 +02:00
committed by GitHub
parent ea6ac49885
commit 2d27428056
19 changed files with 314 additions and 41 deletions
+7
View File
@@ -273,6 +273,13 @@ export const settings = {
playlistLayoutTitle: 'Playlist-Seitenlayout',
playlistLayoutDesc: 'Einzelne Elemente auf der Playlist-Seite ein- oder ausblenden.',
playlistLayoutReset: 'Zurücksetzen',
playerBarTitle: 'Player-Leiste',
playerBarReset: 'Zurücksetzen',
playerBarStarRating: 'Sterne-Bewertung',
playerBarFavorite: 'Favorit (Herz)',
playerBarLastfmLove: 'Last.fm Love',
playerBarEqualizer: 'Equalizer',
playerBarMiniPlayer: 'Mini-Player',
advancedMode: 'Erweitert',
advancedModeTooltip: 'Erweiterte Optionen in allen Settings-Tabs anzeigen. Community-Beiträge, die nicht zwingend der Design-Philosophie der Maintainer von Psysonic entsprechen.',
advancedBadge: 'Erweitert',
+7
View File
@@ -276,6 +276,13 @@ export const settings = {
playlistLayoutTitle: 'Playlist page layout',
playlistLayoutDesc: 'Show or hide individual elements on the playlist page.',
playlistLayoutReset: 'Reset to default',
playerBarTitle: 'Player bar',
playerBarReset: 'Reset to default',
playerBarStarRating: 'Star rating',
playerBarFavorite: 'Favorite (heart)',
playerBarLastfmLove: 'Last.fm love',
playerBarEqualizer: 'Equalizer',
playerBarMiniPlayer: 'Mini player',
advancedMode: 'Advanced',
advancedModeTooltip: 'Show advanced options across all Settings tabs. Community contributions that do not necessarily reflect the design philosophy of the Psysonic maintainers.',
advancedBadge: 'Advanced',
+7
View File
@@ -273,6 +273,13 @@ export const settings = {
playlistLayoutTitle: 'Diseño de la página de playlists',
playlistLayoutDesc: 'Mostrar u ocultar elementos individuales en la página de playlists.',
playlistLayoutReset: 'Restablecer a predeterminado',
playerBarTitle: 'Barra de reproducción',
playerBarReset: 'Restablecer a predeterminado',
playerBarStarRating: 'Calificación con estrellas',
playerBarFavorite: 'Favorito (corazón)',
playerBarLastfmLove: 'Last.fm love',
playerBarEqualizer: 'Ecualizador',
playerBarMiniPlayer: 'Mini reproductor',
advancedMode: 'Avanzado',
advancedModeTooltip: 'Mostrar opciones avanzadas en todas las pestañas de ajustes. Aportes de la comunidad que no reflejan necesariamente la filosofía de diseño de los mantenedores de Psysonic.',
advancedBadge: 'Avanzado',
+7
View File
@@ -271,6 +271,13 @@ export const settings = {
playlistLayoutTitle: 'Mise en page de la playlist',
playlistLayoutDesc: 'Afficher ou masquer des éléments individuels sur la page de la playlist.',
playlistLayoutReset: 'Réinitialiser',
playerBarTitle: 'Barre de lecture',
playerBarReset: 'Réinitialiser',
playerBarStarRating: 'Note par étoiles',
playerBarFavorite: 'Favori (cœur)',
playerBarLastfmLove: 'Last.fm love',
playerBarEqualizer: 'Égaliseur',
playerBarMiniPlayer: 'Mini-lecteur',
advancedMode: 'Avancé',
advancedModeTooltip: 'Afficher les options avancées dans tous les onglets des paramètres. Contributions de la communauté qui ne reflètent pas nécessairement la philosophie de conception des mainteneurs de Psysonic.',
advancedBadge: 'Avancé',
+7
View File
@@ -270,6 +270,13 @@ export const settings = {
playlistLayoutTitle: 'Sideoppsett for spilleliste',
playlistLayoutDesc: 'Vis eller skjul individuelle elementer på spillelistesiden.',
playlistLayoutReset: 'Tilbakestill til standard',
playerBarTitle: 'Spillerlinje',
playerBarReset: 'Tilbakestill til standard',
playerBarStarRating: 'Stjernevurdering',
playerBarFavorite: 'Favoritt (hjerte)',
playerBarLastfmLove: 'Last.fm love',
playerBarEqualizer: 'Equalizer',
playerBarMiniPlayer: 'Miniavspiller',
advancedMode: 'Avansert',
advancedModeTooltip: 'Vis avanserte alternativer i alle innstillinger-faner. Bidrag fra fellesskapet som ikke nødvendigvis gjenspeiler design-filosofien til Psysonic-vedlikeholderne.',
advancedBadge: 'Avansert',
+7
View File
@@ -271,6 +271,13 @@ export const settings = {
playlistLayoutTitle: 'Afspeellijst pagina-indeling',
playlistLayoutDesc: 'Individuele elementen op de afspeellijstpagina tonen of verbergen.',
playlistLayoutReset: 'Standaard herstellen',
playerBarTitle: 'Speelbalk',
playerBarReset: 'Standaard herstellen',
playerBarStarRating: 'Sterbeoordeling',
playerBarFavorite: 'Favoriet (hart)',
playerBarLastfmLove: 'Last.fm love',
playerBarEqualizer: 'Equalizer',
playerBarMiniPlayer: 'Mini-speler',
advancedMode: 'Geavanceerd',
advancedModeTooltip: 'Toon geavanceerde opties in alle instellingstabbladen. Bijdragen van de community die niet noodzakelijk de ontwerpfilosofie van de Psysonic-onderhouders weerspiegelen.',
advancedBadge: 'Geavanceerd',
+7
View File
@@ -276,6 +276,13 @@ export const settings = {
playlistLayoutTitle: 'Aspect pagină playlist',
playlistLayoutDesc: 'Afișează sau ascunde elemente individuale pe pagina playlistului.',
playlistLayoutReset: 'Resetare la implicit',
playerBarTitle: 'Bara de redare',
playerBarReset: 'Resetare la implicit',
playerBarStarRating: 'Evaluare cu stele',
playerBarFavorite: 'Favorit (inimă)',
playerBarLastfmLove: 'Last.fm love',
playerBarEqualizer: 'Egalizator',
playerBarMiniPlayer: 'Mini player',
advancedMode: 'Avansat',
advancedModeTooltip: 'Afișează opțiuni avansate în toate filele de setări. Contribuții ale comunității care nu reflectă neapărat filozofia de design a mentenanților Psysonic.',
advancedBadge: 'Avansat',
+7
View File
@@ -287,6 +287,13 @@ export const settings = {
playlistLayoutTitle: 'Макет страницы плейлиста',
playlistLayoutDesc: 'Показать или скрыть отдельные элементы на странице плейлиста.',
playlistLayoutReset: 'Сбросить',
playerBarTitle: 'Панель плеера',
playerBarReset: 'Сбросить',
playerBarStarRating: 'Оценка звёздами',
playerBarFavorite: 'Избранное (сердечко)',
playerBarLastfmLove: 'Last.fm love',
playerBarEqualizer: 'Эквалайзер',
playerBarMiniPlayer: 'Мини-плеер',
advancedMode: 'Дополнительно',
advancedModeTooltip: 'Показывать расширенные параметры во всех вкладках настроек. Вклады сообщества, которые не обязательно соответствуют дизайн-философии мейнтейнеров Psysonic.',
advancedBadge: 'Дополнительно',
+7
View File
@@ -271,6 +271,13 @@ export const settings = {
playlistLayoutTitle: '播放列表页面布局',
playlistLayoutDesc: '在播放列表页面上显示或隐藏各个元素。',
playlistLayoutReset: '重置为默认',
playerBarTitle: '播放器栏',
playerBarReset: '重置为默认',
playerBarStarRating: '星级评分',
playerBarFavorite: '收藏(心形)',
playerBarLastfmLove: 'Last.fm 喜欢',
playerBarEqualizer: '均衡器',
playerBarMiniPlayer: '迷你播放器',
advancedMode: '高级',
advancedModeTooltip: '在所有设置选项卡中显示高级选项。由社区贡献,未必体现 Psysonic 维护者的设计理念。',
advancedBadge: '高级',