From 327875df6a89b8e8dc22aa89b04e9309655c86d3 Mon Sep 17 00:00:00 2001 From: jeffvli Date: Sun, 4 Jan 2026 02:09:35 -0800 Subject: [PATCH] make queue controls follow panel in sidebar (#1492) --- .../components/sidebar-play-queue.module.css | 7 +++ .../components/sidebar-play-queue.tsx | 55 ++++++++++++------- 2 files changed, 42 insertions(+), 20 deletions(-) diff --git a/src/renderer/features/now-playing/components/sidebar-play-queue.module.css b/src/renderer/features/now-playing/components/sidebar-play-queue.module.css index 850a64065..d567b494b 100644 --- a/src/renderer/features/now-playing/components/sidebar-play-queue.module.css +++ b/src/renderer/features/now-playing/components/sidebar-play-queue.module.css @@ -88,3 +88,10 @@ .visualizer-section:hover .panel-reorder-controls { opacity: 1; } + +.draggable-region { + flex-shrink: 0; + width: 100%; + height: 65px; + -webkit-app-region: drag; +} diff --git a/src/renderer/features/now-playing/components/sidebar-play-queue.tsx b/src/renderer/features/now-playing/components/sidebar-play-queue.tsx index 4f648f510..cbdd624b0 100644 --- a/src/renderer/features/now-playing/components/sidebar-play-queue.tsx +++ b/src/renderer/features/now-playing/components/sidebar-play-queue.tsx @@ -1,4 +1,5 @@ import { useQuery } from '@tanstack/react-query'; +import isElectron from 'is-electron'; import { lazy, Suspense, useCallback, useEffect, useMemo, useRef, useState } from 'react'; import { useTranslation } from 'react-i18next'; // import { Group, Panel, Separator, useDefaultLayout } from 'react-resizable-panels'; @@ -21,11 +22,12 @@ import { useShowLyricsInSidebar, useShowVisualizerInSidebar, useSidebarPanelOrder, + useWindowSettings, } from '/@/renderer/store'; import { ActionIcon, ActionIconGroup } from '/@/shared/components/action-icon/action-icon'; import { Flex } from '/@/shared/components/flex/flex'; import { Stack } from '/@/shared/components/stack/stack'; -import { ItemListKey, PlayerType } from '/@/shared/types/types'; +import { ItemListKey, Platform, PlayerType } from '/@/shared/types/types'; type SidebarPanelType = 'lyrics' | 'queue' | 'visualizer'; @@ -51,9 +53,12 @@ export const SidebarPlayQueue = () => { const showVisualizerInSidebar = useShowVisualizerInSidebar(); const sidebarPanelOrder = useSidebarPanelOrder(); const { type, webAudio } = usePlaybackSettings(); + const { windowBarStyle } = useWindowSettings(); const showVisualizer = showVisualizerInSidebar && type === PlayerType.WEB && webAudio; const showPanel = showLyricsInSidebar || showVisualizer; + const shouldAddTopMargin = isElectron() && windowBarStyle === Platform.WEB; + useEffect(() => { if (isFullScreenPlayerExpanded) { // Immediately hide when fullscreen player opens @@ -102,13 +107,20 @@ export const SidebarPlayQueue = () => { const renderPanel = (panelType: SidebarPanelType) => { if (panelType === 'queue') { return ( -
- + -
+
+ +
+ ); } @@ -177,11 +189,7 @@ export const SidebarPlayQueue = () => { return ( - + {shouldAddTopMargin &&
} {showPanel ? ( { ))} ) : ( - -
- -
-
+ + + +
+ +
+
+
)} );