mirror of
https://github.com/Psychotoxical/psysonic.git
synced 2026-07-22 07:15:47 +00:00
refactor(app): move app-shell chrome into app/ (TitleBar, ConnectionIndicator, ErrorBoundary, AppShellQueueResizerSeam, dev overlays + PerfOverlaySparkline)
This commit is contained in:
@@ -10,7 +10,7 @@ import PlayerBar from '@/features/playback/components/PlayerBar';
|
||||
import BottomNav from '../components/BottomNav';
|
||||
import { useIsMobile } from '@/lib/hooks/useIsMobile';
|
||||
import { LiveSearch } from '@/features/search';
|
||||
import DevNetworkModeToggle from '../components/DevNetworkModeToggle';
|
||||
import DevNetworkModeToggle from '@/app/DevNetworkModeToggle';
|
||||
import { NowPlayingDropdown } from '@/features/nowPlaying';
|
||||
import QueuePanel from '@/features/queue';
|
||||
import AppRoutes from './AppRoutes';
|
||||
@@ -27,11 +27,11 @@ import {
|
||||
APP_MAIN_SCROLL_VIEWPORT_ID,
|
||||
mainRouteInpageScrollViewportId,
|
||||
} from '../constants/appScroll';
|
||||
import ConnectionIndicator from '../components/ConnectionIndicator';
|
||||
import ConnectionIndicator from '@/app/ConnectionIndicator';
|
||||
import MusicNetworkIndicator from '../components/MusicNetworkIndicator';
|
||||
import { OfflineBanner } from '@/features/offline';
|
||||
import AppUpdater from '../components/AppUpdater';
|
||||
import TitleBar from '../components/TitleBar';
|
||||
import TitleBar from '@/app/TitleBar';
|
||||
import { OrbitSessionBar, OrbitStartTrigger } from '@/features/orbit';
|
||||
import { useOrbitHost } from '@/features/orbit';
|
||||
import { useOrbitGuest } from '@/features/orbit';
|
||||
@@ -53,7 +53,7 @@ import { useLiveSearchRouteScope } from '@/features/search';
|
||||
import { useNowPlayingPrewarm } from '@/features/nowPlaying';
|
||||
import { useOfflineAutoNav } from '@/features/offline';
|
||||
import { useOfflineLibraryFilterSuspend } from '@/features/offline';
|
||||
import { AppShellQueueResizerSeam } from '../components/AppShellQueueResizerSeam';
|
||||
import { AppShellQueueResizerSeam } from '@/app/AppShellQueueResizerSeam';
|
||||
import { IS_LINUX, IS_MACOS } from '@/lib/util/platform';
|
||||
import { useConnectionStatus } from '../hooks/useConnectionStatus';
|
||||
import { useIdlePlayQueuePull } from '../hooks/useIdlePlayQueuePull';
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import React from 'react';
|
||||
import type { TFunction } from 'i18next';
|
||||
import { PanelRight, PanelRightClose } from 'lucide-react';
|
||||
import { shouldSuppressQueueResizerMouseDown } from '../utils/componentHelpers/appShellHelpers';
|
||||
import { shouldSuppressQueueResizerMouseDown } from '@/utils/componentHelpers/appShellHelpers';
|
||||
|
||||
interface Props {
|
||||
isQueueVisible: boolean;
|
||||
@@ -4,13 +4,13 @@ import { createPortal } from 'react-dom';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import { useNavigate } from 'react-router-dom';
|
||||
import { Check, ChevronDown, RefreshCw } from 'lucide-react';
|
||||
import type { ConnectionStatus } from '../hooks/useConnectionStatus';
|
||||
import { usePlayQueueSyncLedState } from '../hooks/usePlayQueueSyncLedState';
|
||||
import type { ServerProfile } from '../store/authStoreTypes';
|
||||
import { useAuthStore } from '../store/authStore';
|
||||
import { switchActiveServer } from '../utils/server/switchActiveServer';
|
||||
import { showToast } from '../utils/ui/toast';
|
||||
import { serverListDisplayLabel } from '../utils/server/serverDisplayName';
|
||||
import type { ConnectionStatus } from '@/hooks/useConnectionStatus';
|
||||
import { usePlayQueueSyncLedState } from '@/hooks/usePlayQueueSyncLedState';
|
||||
import type { ServerProfile } from '@/store/authStoreTypes';
|
||||
import { useAuthStore } from '@/store/authStore';
|
||||
import { switchActiveServer } from '@/utils/server/switchActiveServer';
|
||||
import { showToast } from '@/utils/ui/toast';
|
||||
import { serverListDisplayLabel } from '@/utils/server/serverDisplayName';
|
||||
|
||||
interface Props {
|
||||
status: ConnectionStatus;
|
||||
@@ -1,38 +1,38 @@
|
||||
import { useEffect, useMemo, useState, type CSSProperties } from 'react';
|
||||
import { createPortal } from 'react-dom';
|
||||
import { analysisGetPipelineQueueStats, type AnalysisPipelineQueueStatsDto } from '../api/analysis';
|
||||
import { coverGetPipelineQueueStats, type CoverPipelineQueueStatsDto } from '../api/coverCache';
|
||||
import { coverEnsureQueueStats } from '../cover/ensureQueue';
|
||||
import { coverPeekQueueStats } from '../cover/peekQueue';
|
||||
import PerfOverlaySparkline from './perf/PerfOverlaySparkline';
|
||||
import { usePerfProbeFlags } from '../utils/perf/perfFlags';
|
||||
import { analysisGetPipelineQueueStats, type AnalysisPipelineQueueStatsDto } from '@/api/analysis';
|
||||
import { coverGetPipelineQueueStats, type CoverPipelineQueueStatsDto } from '@/api/coverCache';
|
||||
import { coverEnsureQueueStats } from '@/cover/ensureQueue';
|
||||
import { coverPeekQueueStats } from '@/cover/peekQueue';
|
||||
import PerfOverlaySparkline from '@/app/PerfOverlaySparkline';
|
||||
import { usePerfProbeFlags } from '@/utils/perf/perfFlags';
|
||||
import {
|
||||
formatPerfMs,
|
||||
getAnalysisTracksPerMinute,
|
||||
useAnalysisPerfLast,
|
||||
} from '../utils/perf/analysisPerfStore';
|
||||
import { formatAnalysisPipelineQueueOverlay } from '../utils/perf/formatAnalysisQueueStats';
|
||||
import { formatCoverPipelineQueueOverlay } from '../utils/perf/formatCoverPipelineQueueOverlay';
|
||||
} from '@/utils/perf/analysisPerfStore';
|
||||
import { formatAnalysisPipelineQueueOverlay } from '@/utils/perf/formatAnalysisQueueStats';
|
||||
import { formatCoverPipelineQueueOverlay } from '@/utils/perf/formatCoverPipelineQueueOverlay';
|
||||
import {
|
||||
buildLiveOverlayItems,
|
||||
type LiveOverlayItem,
|
||||
} from '../utils/perf/formatLiveOverlayItems';
|
||||
} from '@/utils/perf/formatLiveOverlayItems';
|
||||
import {
|
||||
getPerfLiveHistorySamples,
|
||||
} from '../utils/perf/perfLiveHistory';
|
||||
import { usePerfLiveSnapshot } from '../utils/perf/perfLiveStore';
|
||||
import { usePerfLiveOverlayPins } from '../utils/perf/perfOverlayPins';
|
||||
} from '@/utils/perf/perfLiveHistory';
|
||||
import { usePerfLiveSnapshot } from '@/utils/perf/perfLiveStore';
|
||||
import { usePerfLiveOverlayPins } from '@/utils/perf/perfOverlayPins';
|
||||
import {
|
||||
perfOverlayCornerClass,
|
||||
usePerfOverlayAppearance,
|
||||
} from '../utils/perf/perfOverlayAppearance';
|
||||
} from '@/utils/perf/perfOverlayAppearance';
|
||||
import {
|
||||
resolveOverlayVisibility,
|
||||
usePerfOverlayMode,
|
||||
} from '../utils/perf/perfOverlayMode';
|
||||
import { useAnalysisPerfListener } from '../hooks/useAnalysisPerfListener';
|
||||
import { useCoverPerfListener } from '../hooks/useCoverPerfListener';
|
||||
import { getCoverCachedPerMinute, getCoverUiPerMinute } from '../utils/perf/coverPerfStore';
|
||||
} from '@/utils/perf/perfOverlayMode';
|
||||
import { useAnalysisPerfListener } from '@/hooks/useAnalysisPerfListener';
|
||||
import { useCoverPerfListener } from '@/hooks/useCoverPerfListener';
|
||||
import { getCoverCachedPerMinute, getCoverUiPerMinute } from '@/utils/perf/coverPerfStore';
|
||||
|
||||
const SAMPLE_MS = 500;
|
||||
const TPM_REFRESH_MS = 500;
|
||||
+2
-2
@@ -9,7 +9,7 @@ import { DragDropProvider } from '@/lib/dnd/DragDropContext';
|
||||
import PasteClipboardHandler from '../components/PasteClipboardHandler';
|
||||
import ExportPickerModal from '../components/ExportPickerModal';
|
||||
import { ZipDownloadOverlay } from '@/features/offline';
|
||||
import FpsOverlay from '../components/FpsOverlay';
|
||||
import FpsOverlay from '@/app/FpsOverlay';
|
||||
import { useAuthStore } from '../store/authStore';
|
||||
import { useLibraryIndexStore } from '../store/libraryIndexStore';
|
||||
import { useGlobalShortcutsStore } from '../store/globalShortcutsStore';
|
||||
@@ -33,7 +33,7 @@ import { useMigrationOrchestrator } from '../hooks/useMigrationOrchestrator';
|
||||
import { IS_WINDOWS } from '@/lib/util/platform';
|
||||
import TauriEventBridge from './TauriEventBridge';
|
||||
import AppShell from './AppShell';
|
||||
import ErrorBoundary from '../components/ErrorBoundary';
|
||||
import ErrorBoundary from '@/app/ErrorBoundary';
|
||||
import BlockingMigrationGate from './BlockingMigrationGate';
|
||||
import RequireAuth from './RequireAuth';
|
||||
import { useMigrationStore } from '../store/migrationStore';
|
||||
|
||||
@@ -31,7 +31,7 @@ vi.mock('@/lib/i18n', () => ({
|
||||
vi.mock('@/features/miniPlayer', () => ({ default: () => <div data-testid="mini-player" /> }));
|
||||
vi.mock('../components/GlobalConfirmModal', () => ({ default: () => <div data-testid="confirm-modal" /> }));
|
||||
vi.mock('@/ui/TooltipPortal', () => ({ default: () => <div data-testid="tooltip-portal" /> }));
|
||||
vi.mock('../components/FpsOverlay', () => ({ default: () => <div data-testid="fps-overlay" /> }));
|
||||
vi.mock('@/app/FpsOverlay', () => ({ default: () => <div data-testid="fps-overlay" /> }));
|
||||
vi.mock('@/lib/dnd/DragDropContext', () => ({
|
||||
DragDropProvider: ({ children }: { children: React.ReactNode }) => <>{children}</>,
|
||||
}));
|
||||
|
||||
@@ -3,7 +3,7 @@ import { DragDropProvider } from '@/lib/dnd/DragDropContext';
|
||||
import MiniPlayer from '@/features/miniPlayer';
|
||||
import GlobalConfirmModal from '../components/GlobalConfirmModal';
|
||||
import TooltipPortal from '@/ui/TooltipPortal';
|
||||
import FpsOverlay from '../components/FpsOverlay';
|
||||
import FpsOverlay from '@/app/FpsOverlay';
|
||||
import { useThemeStore } from '../store/themeStore';
|
||||
import { useFontStore } from '../store/fontStore';
|
||||
import { useKeybindingsStore } from '../store/keybindingsStore';
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { useMemo, useRef } from 'react';
|
||||
import type { PerfLiveSample } from '../../utils/perf/perfLiveHistory';
|
||||
import { PERF_LIVE_HISTORY_MS } from '../../utils/perf/perfLiveHistory';
|
||||
import type { PerfLiveSample } from '@/utils/perf/perfLiveHistory';
|
||||
import { PERF_LIVE_HISTORY_MS } from '@/utils/perf/perfLiveHistory';
|
||||
|
||||
type SparklineKind = 'cpu' | 'memory';
|
||||
|
||||
@@ -2,7 +2,7 @@ import React from 'react';
|
||||
import { getCurrentWindow } from '@tauri-apps/api/window';
|
||||
import { Minus, Square, X } from 'lucide-react';
|
||||
import { usePlayerStore } from '@/features/playback/store/playerStore';
|
||||
import { useAuthStore } from '../store/authStore';
|
||||
import { useAuthStore } from '@/store/authStore';
|
||||
import { IS_MACOS } from '@/lib/util/platform';
|
||||
|
||||
export default function TitleBar() {
|
||||
Reference in New Issue
Block a user