diff --git a/src/app/AppShell.tsx b/src/app/AppShell.tsx index 1eadb11e..64142e0a 100644 --- a/src/app/AppShell.tsx +++ b/src/app/AppShell.tsx @@ -6,7 +6,7 @@ import { getCurrentWebview } from '@tauri-apps/api/webview'; import { PanelRight } from 'lucide-react'; import { useTranslation } from 'react-i18next'; import Sidebar from '@/features/sidebar'; -import PlayerBar from '../components/PlayerBar'; +import PlayerBar from '@/features/playback/components/PlayerBar'; import BottomNav from '../components/BottomNav'; import { useIsMobile } from '@/lib/hooks/useIsMobile'; import { LiveSearch } from '@/features/search'; diff --git a/src/components/playback/PlaybackBufferingOverlay.test.tsx b/src/features/playback/components/PlaybackBufferingOverlay.test.tsx similarity index 81% rename from src/components/playback/PlaybackBufferingOverlay.test.tsx rename to src/features/playback/components/PlaybackBufferingOverlay.test.tsx index a7ab42b5..ed4ca13b 100644 --- a/src/components/playback/PlaybackBufferingOverlay.test.tsx +++ b/src/features/playback/components/PlaybackBufferingOverlay.test.tsx @@ -1,7 +1,7 @@ import { describe, expect, it } from 'vitest'; import { screen } from '@testing-library/react'; import { renderWithProviders } from '@/test/helpers/renderWithProviders'; -import { PlaybackBufferingOverlay } from './PlaybackBufferingOverlay'; +import { PlaybackBufferingOverlay } from '@/features/playback/components/PlaybackBufferingOverlay'; describe('PlaybackBufferingOverlay', () => { it('exposes buffering status for assistive tech', () => { diff --git a/src/components/playback/PlaybackBufferingOverlay.tsx b/src/features/playback/components/PlaybackBufferingOverlay.tsx similarity index 100% rename from src/components/playback/PlaybackBufferingOverlay.tsx rename to src/features/playback/components/PlaybackBufferingOverlay.tsx diff --git a/src/components/PlayerBar.test.tsx b/src/features/playback/components/PlayerBar.test.tsx similarity index 99% rename from src/components/PlayerBar.test.tsx rename to src/features/playback/components/PlayerBar.test.tsx index c4e3d097..495a9f4f 100644 --- a/src/components/PlayerBar.test.tsx +++ b/src/features/playback/components/PlayerBar.test.tsx @@ -37,7 +37,7 @@ vi.mock('@/lib/api/subsonic', () => ({ })); -import PlayerBar from './PlayerBar'; +import PlayerBar from '@/features/playback/components/PlayerBar'; import { renderWithProviders } from '@/test/helpers/renderWithProviders'; import { usePlayerStore } from '@/features/playback/store/playerStore'; import { useAuthStore } from '@/store/authStore'; diff --git a/src/components/PlayerBar.tsx b/src/features/playback/components/PlayerBar.tsx similarity index 90% rename from src/components/PlayerBar.tsx rename to src/features/playback/components/PlayerBar.tsx index 641a9e9c..469bf80e 100644 --- a/src/components/PlayerBar.tsx +++ b/src/features/playback/components/PlayerBar.tsx @@ -1,6 +1,6 @@ import { queueSongStar } from '@/features/playback/store/pendingStarSync'; -import { coverArtIdFromRadio } from '../cover/ids'; -import { resolvePlaybackTrackCoverArtId } from '../cover/resolveCoverArtId'; +import { coverArtIdFromRadio } from '@/cover/ids'; +import { resolvePlaybackTrackCoverArtId } from '@/cover/resolveCoverArtId'; import React, { useCallback, useEffect, useRef, useState } from 'react'; import { createPortal } from 'react-dom'; import { @@ -10,32 +10,32 @@ import { import { invoke } from '@tauri-apps/api/core'; import { usePlayerStore } from '@/features/playback/store/playerStore'; import { useShallow } from 'zustand/react/shallow'; -import { useAuthStore } from '../store/authStore'; -import { useThemeStore } from '../store/themeStore'; +import { useAuthStore } from '@/store/authStore'; +import { useThemeStore } from '@/store/themeStore'; import { Equalizer } from '@/features/equalizer'; import { useTranslation } from 'react-i18next'; -import { usePlaybackLibraryNavigate } from '../hooks/usePlaybackLibraryNavigate'; +import { usePlaybackLibraryNavigate } from '@/hooks/usePlaybackLibraryNavigate'; import { useRadioMetadata } from '@/features/radio'; import { useRadioMprisSync } from '@/features/radio'; -import { usePlaybackDelayPress } from '../hooks/usePlaybackDelayPress'; -import PlaybackDelayModal from './PlaybackDelayModal'; -import { usePlaybackScheduleRemaining } from '../utils/format/playbackScheduleFormat'; +import { usePlaybackDelayPress } from '@/hooks/usePlaybackDelayPress'; +import PlaybackDelayModal from '@/components/PlaybackDelayModal'; +import { usePlaybackScheduleRemaining } from '@/utils/format/playbackScheduleFormat'; import { usePreviewStore } from '@/features/playback/store/previewStore'; -import { usePerfProbeFlags } from '../utils/perf/perfFlags'; +import { usePerfProbeFlags } from '@/utils/perf/perfFlags'; import { coerceOpenArtistRefs } from '@/lib/api/openArtistRefs'; import { resolveTrackArtistRefs } from '@/features/playback/utils/playback/trackArtistRefs'; -import { PlayerTrackInfo } from './playerBar/PlayerTrackInfo'; -import { PlayerTransportControls } from './playerBar/PlayerTransportControls'; -import { PlayerSeekbarSection } from './playerBar/PlayerSeekbarSection'; -import { PlayerPlaybackRate } from './playerBar/PlayerPlaybackRate'; -import { PlayerVolume } from './playerBar/PlayerVolume'; -import { PlayerOverflowMenu } from './playerBar/PlayerOverflowMenu'; -import { useFloatingPlayerBar } from '../hooks/useFloatingPlayerBar'; -import { useUtilityOverflowMenu } from '../hooks/useUtilityOverflowMenu'; +import { PlayerTrackInfo } from '@/features/playback/components/playerBar/PlayerTrackInfo'; +import { PlayerTransportControls } from '@/features/playback/components/playerBar/PlayerTransportControls'; +import { PlayerSeekbarSection } from '@/features/playback/components/playerBar/PlayerSeekbarSection'; +import { PlayerPlaybackRate } from '@/features/playback/components/playerBar/PlayerPlaybackRate'; +import { PlayerVolume } from '@/features/playback/components/playerBar/PlayerVolume'; +import { PlayerOverflowMenu } from '@/features/playback/components/playerBar/PlayerOverflowMenu'; +import { useFloatingPlayerBar } from '@/hooks/useFloatingPlayerBar'; +import { useUtilityOverflowMenu } from '@/hooks/useUtilityOverflowMenu'; import { usePlayerBarLayoutStore, type PlayerBarLayoutItemId, -} from '../store/playerBarLayoutStore'; +} from '@/store/playerBarLayoutStore'; export default function PlayerBar() { const { t } = useTranslation(); diff --git a/src/components/playerBar/PlaybackClock.tsx b/src/features/playback/components/playerBar/PlaybackClock.tsx similarity index 100% rename from src/components/playerBar/PlaybackClock.tsx rename to src/features/playback/components/playerBar/PlaybackClock.tsx diff --git a/src/components/playerBar/PlayerOverflowMenu.tsx b/src/features/playback/components/playerBar/PlayerOverflowMenu.tsx similarity index 93% rename from src/components/playerBar/PlayerOverflowMenu.tsx rename to src/features/playback/components/playerBar/PlayerOverflowMenu.tsx index febba073..b616535e 100644 --- a/src/components/playerBar/PlayerOverflowMenu.tsx +++ b/src/features/playback/components/playerBar/PlayerOverflowMenu.tsx @@ -3,12 +3,12 @@ import { createPortal } from 'react-dom'; import { PictureInPicture2, SlidersVertical } from 'lucide-react'; import { invoke } from '@tauri-apps/api/core'; import type { TFunction } from 'i18next'; -import { PlayerVolume } from './PlayerVolume'; -import { PlayerPlaybackRateMenuSection } from './PlayerPlaybackRate'; +import { PlayerVolume } from '@/features/playback/components/playerBar/PlayerVolume'; +import { PlayerPlaybackRateMenuSection } from '@/features/playback/components/playerBar/PlayerPlaybackRate'; import { usePlayerBarLayoutStore, type PlayerBarLayoutItemId, -} from '../../store/playerBarLayoutStore'; +} from '@/store/playerBarLayoutStore'; interface Props { utilityMenuRef: React.RefObject; diff --git a/src/components/playerBar/PlayerPlaybackRate.tsx b/src/features/playback/components/playerBar/PlayerPlaybackRate.tsx similarity index 97% rename from src/components/playerBar/PlayerPlaybackRate.tsx rename to src/features/playback/components/playerBar/PlayerPlaybackRate.tsx index b15d75c9..319096fd 100644 --- a/src/components/playerBar/PlayerPlaybackRate.tsx +++ b/src/features/playback/components/playerBar/PlayerPlaybackRate.tsx @@ -15,7 +15,7 @@ import { varispeedSpeedFromSemitones, } from '@/features/playback/utils/audio/playbackRateHelpers'; import { isOrbitPlaybackSyncActive } from '@/features/orbit'; -import { usePlayerBarAnchoredPopover } from '../../hooks/usePlayerBarAnchoredPopover'; +import { usePlayerBarAnchoredPopover } from '@/hooks/usePlayerBarAnchoredPopover'; const POPOVER_WIDTH = 320; diff --git a/src/components/playerBar/PlayerSeekbarSection.tsx b/src/features/playback/components/playerBar/PlayerSeekbarSection.tsx similarity index 95% rename from src/components/playerBar/PlayerSeekbarSection.tsx rename to src/features/playback/components/playerBar/PlayerSeekbarSection.tsx index ee723481..8fb8e93a 100644 --- a/src/components/playerBar/PlayerSeekbarSection.tsx +++ b/src/features/playback/components/playerBar/PlayerSeekbarSection.tsx @@ -1,10 +1,10 @@ import { ArrowLeftRight } from 'lucide-react'; import type { TFunction } from 'i18next'; import type { RadioMetadata } from '@/features/radio'; -import { useThemeStore } from '../../store/themeStore'; +import { useThemeStore } from '@/store/themeStore'; import { formatTrackTime, playbarMinuteFieldWidth } from '@/lib/format/formatDuration'; import { WaveformSeek } from '@/features/waveform'; -import { PlaybackTime, ToggleClock } from './PlaybackClock'; +import { PlaybackTime, ToggleClock } from '@/features/playback/components/playerBar/PlaybackClock'; interface Props { isRadio: boolean; diff --git a/src/components/playerBar/PlayerTrackInfo.tsx b/src/features/playback/components/playerBar/PlayerTrackInfo.tsx similarity index 93% rename from src/components/playerBar/PlayerTrackInfo.tsx rename to src/features/playback/components/playerBar/PlayerTrackInfo.tsx index b9a9c8e8..ce762b2d 100644 --- a/src/components/playerBar/PlayerTrackInfo.tsx +++ b/src/features/playback/components/playerBar/PlayerTrackInfo.tsx @@ -6,22 +6,22 @@ import type { Track } from '@/lib/media/trackTypes'; import type { PlayerState } from '@/features/playback/store/playerStoreTypes'; import type { RadioMetadata } from '@/features/radio'; import type { PreviewingTrack } from '@/features/playback/store/previewStore'; -import { CoverArtImage } from '../../cover/CoverArtImage'; -import { albumCoverRef } from '../../cover/ref'; -import { useAlbumCoverRef } from '../../cover/useLibraryCoverRef'; -import { usePlaybackTrackCoverRef } from '../../cover/useLibraryCoverRef'; +import { CoverArtImage } from '@/cover/CoverArtImage'; +import { albumCoverRef } from '@/cover/ref'; +import { useAlbumCoverRef } from '@/cover/useLibraryCoverRef'; +import { usePlaybackTrackCoverRef } from '@/cover/useLibraryCoverRef'; import MarqueeText from '@/ui/MarqueeText'; import { OpenArtistRefInline } from '@/features/artist'; import StarRating from '@/ui/StarRating'; -import { PlaybackBufferingOverlay } from '../playback/PlaybackBufferingOverlay'; +import { PlaybackBufferingOverlay } from '@/features/playback/components/PlaybackBufferingOverlay'; import { usePlayerStore } from '@/features/playback/store/playerStore'; -import { useEnrichmentPrimaryLabel } from '../../hooks/useEnrichmentPrimaryLabel'; -import { useEnrichmentPrimaryIcon } from '../../hooks/useEnrichmentPrimaryIcon'; -import { renderPresetIcon } from '../settings/musicNetwork/presetIcon'; +import { useEnrichmentPrimaryLabel } from '@/hooks/useEnrichmentPrimaryLabel'; +import { useEnrichmentPrimaryIcon } from '@/hooks/useEnrichmentPrimaryIcon'; +import { renderPresetIcon } from '@/components/settings/musicNetwork/presetIcon'; import { usePlayerBarLayoutStore, type PlayerBarLayoutItemId, -} from '../../store/playerBarLayoutStore'; +} from '@/store/playerBarLayoutStore'; import { useOfflineBrowseContext } from '@/features/offline'; import { offlineActionPolicy } from '@/features/offline'; diff --git a/src/components/playerBar/PlayerTransportControls.tsx b/src/features/playback/components/playerBar/PlayerTransportControls.tsx similarity index 96% rename from src/components/playerBar/PlayerTransportControls.tsx rename to src/features/playback/components/playerBar/PlayerTransportControls.tsx index 524a347c..7958b76d 100644 --- a/src/components/playerBar/PlayerTransportControls.tsx +++ b/src/features/playback/components/playerBar/PlayerTransportControls.tsx @@ -5,9 +5,9 @@ import type { TFunction } from 'i18next'; import type { PlayerState } from '@/features/playback/store/playerStoreTypes'; import { useAutodjTransitionUi } from '@/features/playback/store/autodjTransitionUi'; import { usePreviewStore } from '@/features/playback/store/previewStore'; -import PlaybackScheduleBadge from '../PlaybackScheduleBadge'; -import { usePlaybackDelayPress } from '../../hooks/usePlaybackDelayPress'; -import { usePlaybackScheduleRemaining } from '../../utils/format/playbackScheduleFormat'; +import PlaybackScheduleBadge from '@/components/PlaybackScheduleBadge'; +import { usePlaybackDelayPress } from '@/hooks/usePlaybackDelayPress'; +import { usePlaybackScheduleRemaining } from '@/utils/format/playbackScheduleFormat'; type RepeatMode = PlayerState['repeatMode']; type PlayPauseBind = ReturnType['playPauseBind']; diff --git a/src/components/playerBar/PlayerVolume.tsx b/src/features/playback/components/playerBar/PlayerVolume.tsx similarity index 100% rename from src/components/playerBar/PlayerVolume.tsx rename to src/features/playback/components/playerBar/PlayerVolume.tsx diff --git a/src/features/queue/components/QueueCurrentTrack.tsx b/src/features/queue/components/QueueCurrentTrack.tsx index cd269e91..220b48ab 100644 --- a/src/features/queue/components/QueueCurrentTrack.tsx +++ b/src/features/queue/components/QueueCurrentTrack.tsx @@ -13,7 +13,7 @@ import { effectiveLoudnessPreAnalysisAttenuationDb } from '@/utils/audio/loudnes import { formatQueueBpmTech, formatQueueMoodLabels } from '@/lib/library/trackEnrichment'; import { useQueueTrackEnrichment } from '@/features/queue/hooks/useQueueTrackEnrichment'; import { QueueLufsTargetMenu } from '@/features/queue/components/QueueLufsTargetMenu'; -import { PlaybackBufferingOverlay } from '@/components/playback/PlaybackBufferingOverlay'; +import { PlaybackBufferingOverlay } from '@/features/playback/components/PlaybackBufferingOverlay'; import { CoverArtImage } from '@/cover/CoverArtImage'; import { OpenArtistRefInline } from '@/features/artist'; import { usePlaybackTrackCoverRef } from '@/cover/useLibraryCoverRef';