diff --git a/src/app/AppShell.tsx b/src/app/AppShell.tsx index 64142e0a..c02ac25e 100644 --- a/src/app/AppShell.tsx +++ b/src/app/AppShell.tsx @@ -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'; diff --git a/src/components/AppShellQueueResizerSeam.tsx b/src/app/AppShellQueueResizerSeam.tsx similarity index 96% rename from src/components/AppShellQueueResizerSeam.tsx rename to src/app/AppShellQueueResizerSeam.tsx index 62aeefbb..6bc82fa4 100644 --- a/src/components/AppShellQueueResizerSeam.tsx +++ b/src/app/AppShellQueueResizerSeam.tsx @@ -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; diff --git a/src/components/ConnectionIndicator.tsx b/src/app/ConnectionIndicator.tsx similarity index 94% rename from src/components/ConnectionIndicator.tsx rename to src/app/ConnectionIndicator.tsx index 2001ad5e..809b5cd9 100644 --- a/src/components/ConnectionIndicator.tsx +++ b/src/app/ConnectionIndicator.tsx @@ -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; diff --git a/src/components/DevNetworkModeToggle.tsx b/src/app/DevNetworkModeToggle.tsx similarity index 100% rename from src/components/DevNetworkModeToggle.tsx rename to src/app/DevNetworkModeToggle.tsx diff --git a/src/components/ErrorBoundary.tsx b/src/app/ErrorBoundary.tsx similarity index 100% rename from src/components/ErrorBoundary.tsx rename to src/app/ErrorBoundary.tsx diff --git a/src/components/FpsOverlay.tsx b/src/app/FpsOverlay.tsx similarity index 89% rename from src/components/FpsOverlay.tsx rename to src/app/FpsOverlay.tsx index e18478a1..be853cbe 100644 --- a/src/components/FpsOverlay.tsx +++ b/src/app/FpsOverlay.tsx @@ -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; diff --git a/src/app/MainApp.tsx b/src/app/MainApp.tsx index 037347b1..232ca1c4 100644 --- a/src/app/MainApp.tsx +++ b/src/app/MainApp.tsx @@ -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'; diff --git a/src/app/MiniPlayerApp.test.tsx b/src/app/MiniPlayerApp.test.tsx index 72ac8649..2aa3b6b3 100644 --- a/src/app/MiniPlayerApp.test.tsx +++ b/src/app/MiniPlayerApp.test.tsx @@ -31,7 +31,7 @@ vi.mock('@/lib/i18n', () => ({ vi.mock('@/features/miniPlayer', () => ({ default: () =>
})); vi.mock('../components/GlobalConfirmModal', () => ({ default: () => })); vi.mock('@/ui/TooltipPortal', () => ({ default: () => })); -vi.mock('../components/FpsOverlay', () => ({ default: () => })); +vi.mock('@/app/FpsOverlay', () => ({ default: () => })); vi.mock('@/lib/dnd/DragDropContext', () => ({ DragDropProvider: ({ children }: { children: React.ReactNode }) => <>{children}>, })); diff --git a/src/app/MiniPlayerApp.tsx b/src/app/MiniPlayerApp.tsx index 6edc0351..21a75dad 100644 --- a/src/app/MiniPlayerApp.tsx +++ b/src/app/MiniPlayerApp.tsx @@ -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'; diff --git a/src/components/perf/PerfOverlaySparkline.tsx b/src/app/PerfOverlaySparkline.tsx similarity index 96% rename from src/components/perf/PerfOverlaySparkline.tsx rename to src/app/PerfOverlaySparkline.tsx index c32f3d64..29b68eba 100644 --- a/src/components/perf/PerfOverlaySparkline.tsx +++ b/src/app/PerfOverlaySparkline.tsx @@ -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'; diff --git a/src/components/TitleBar.tsx b/src/app/TitleBar.tsx similarity index 98% rename from src/components/TitleBar.tsx rename to src/app/TitleBar.tsx index 57f244d1..631eaa70 100644 --- a/src/components/TitleBar.tsx +++ b/src/app/TitleBar.tsx @@ -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() {