Rockbox open source high quality audio player as a Music Player Daemon
mpris rockbox mpd libadwaita audio rust zig deno
2
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge pull request #43 from tsirysndr/feat/seek

webui: make playback progressbar clickable (seek)

authored by

Tsiry Sandratraina and committed by
GitHub
91b9d18b 9b974693

+99 -5
+1
crates/graphql/src/server.rs
··· 130 130 .route("/artists", web::get().to(index_spa)) 131 131 .route("/albums", web::get().to(index_spa)) 132 132 .route("/files", web::get().to(index_spa)) 133 + .route("/likes", web::get().to(index_spa)) 133 134 .route("/artists/{_:.*}", web::get().to(index_spa)) 134 135 .route("/albums/{_:.*}", web::get().to(index_spa)) 135 136 .route("/playlists/{_:.*}", web::get().to(index_spa))
+2
webui/rockbox/src/Components/ControlBar/ControlBar.stories.tsx
··· 36 36 onRepeat: fn(), 37 37 onLike: fn(), 38 38 onUnlike: fn(), 39 + onSeek: fn(), 39 40 liked: false, 40 41 }, 41 42 }; ··· 61 62 onRepeat: fn(), 62 63 onLike: fn(), 63 64 onUnlike: fn(), 65 + onSeek: fn(), 64 66 }, 65 67 };
+1
webui/rockbox/src/Components/ControlBar/ControlBar.test.tsx
··· 32 32 onRepeat={vi.fn()} 33 33 onLike={vi.fn()} 34 34 onUnlike={vi.fn()} 35 + onSeek={vi.fn()} 35 36 /> 36 37 </MockedProvider> 37 38 </MemoryRouter>
+2
webui/rockbox/src/Components/ControlBar/ControlBar.tsx
··· 21 21 liked?: boolean; 22 22 onLike: (trackId: string) => void; 23 23 onUnlike: (trackId: string) => void; 24 + onSeek: (time: number) => void; 24 25 }; 25 26 26 27 const ControlBar: FC<ControlBarProps> = (props) => { ··· 57 58 liked={props.liked} 58 59 onLike={props.onLike} 59 60 onUnlike={props.onUnlike} 61 + onSeek={props.onSeek} 60 62 /> 61 63 <RightMenu /> 62 64 </Container>
+16
webui/rockbox/src/Components/ControlBar/ControlBarWithData.tsx
··· 12 12 usePlaybackStatusSubscription, 13 13 usePreviousMutation, 14 14 useResumeMutation, 15 + useSeekMutation, 15 16 useUnlikeTrackMutation, 16 17 } from "../../Hooks/GraphQL"; 17 18 import { CurrentTrack } from "../../Types/track"; ··· 39 40 const { resumePlaylistTrack } = useResumePlaylist(); 40 41 const [likeTrack] = useLikeTrackMutation(); 41 42 const [unlikeTrack] = useUnlikeTrackMutation(); 43 + const [seek] = useSeekMutation(); 42 44 43 45 const [likes, setLikes] = useRecoilState(likesState); 44 46 const { data: likedTracksData, loading: likedTracksLoading } = ··· 250 252 } 251 253 }; 252 254 255 + const onSeek = (elapsed: number) => { 256 + if (!nowPlaying) { 257 + return; 258 + } 259 + 260 + seek({ 261 + variables: { 262 + elapsed, 263 + offset: 0, 264 + }, 265 + }); 266 + }; 267 + 253 268 return ( 254 269 <ControlBar 255 270 nowPlaying={nowPlaying} ··· 262 277 liked={likes[nowPlaying?.id || ""]} 263 278 onLike={onLike} 264 279 onUnlike={onUnlike} 280 + onSeek={onSeek} 265 281 /> 266 282 ); 267 283 };
+22 -2
webui/rockbox/src/Components/ControlBar/CurrentTrack/CurrentTrack.tsx
··· 1 - import { FC } from "react"; 1 + import { FC, useRef } from "react"; 2 2 import { ProgressBar } from "baseui/progress-bar"; 3 3 import { 4 4 Actions, ··· 27 27 liked?: boolean; 28 28 onLike: (trackId: string) => void; 29 29 onUnlike: (trackId: string) => void; 30 + onSeek: (time: number) => void; 30 31 }; 31 32 32 33 const CurrentTrack: FC<CurrentTrackProps> = ({ ··· 34 35 liked, 35 36 onLike, 36 37 onUnlike, 38 + onSeek, 37 39 }) => { 40 + const progressbarRef = useRef<HTMLDivElement>(null); 38 41 const { formatTime } = useTimeFormat(); 39 42 const album = `${nowPlaying?.artist} - ${nowPlaying?.album}`; 43 + 44 + // eslint-disable-next-line @typescript-eslint/no-explicit-any 45 + const handleClick = (e: any) => { 46 + if (progressbarRef.current) { 47 + const rect = progressbarRef.current.getBoundingClientRect(); 48 + const x = e.clientX - rect.left < 0 ? 0 : e.clientX - rect.left; 49 + const width = rect.width; 50 + const percentage = (x / width) * 100; 51 + const time = (percentage / 100) * nowPlaying!.duration; 52 + onSeek(Math.floor(time)); 53 + } 54 + }; 55 + 40 56 return ( 41 57 <Container> 42 58 {!nowPlaying?.cover && ( ··· 97 113 </ArtistAlbum> 98 114 <Time>{formatTime(nowPlaying.duration)}</Time> 99 115 </div> 100 - <ProgressbarContainer> 116 + <ProgressbarContainer 117 + ref={progressbarRef} 118 + onClick={handleClick} 119 + active={nowPlaying!.duration > 0} 120 + > 101 121 <ProgressBar 102 122 value={ 103 123 nowPlaying!.duration > 0
+7 -1
webui/rockbox/src/Components/ControlBar/CurrentTrack/styles.ts
··· 1 + import { css } from "@emotion/react"; 1 2 import styled from "@emotion/styled"; 2 3 import { Link } from "react-router-dom"; 3 4 ··· 30 31 border-bottom-left-radius: 4px; 31 32 `; 32 33 33 - export const ProgressbarContainer = styled.div` 34 + export const ProgressbarContainer = styled.div<{ active?: boolean }>` 34 35 width: 100%; 35 36 position: absolute; 36 37 bottom: -12px; 38 + ${({ active }) => 39 + active && 40 + css` 41 + cursor: pointer; 42 + `} 37 43 `; 38 44 39 45 export const TrackInfo = styled.div`
+1 -1
webui/rockbox/src/Components/ControlBar/__snapshots__/ControlBar.test.tsx.snap
··· 195 195 </div> 196 196 </div> 197 197 <div 198 - class="css-1n7uud4" 198 + class="css-xaw6oh" 199 199 > 200 200 <div 201 201 aria-label="48% Loaded"
+6
webui/rockbox/src/GraphQL/Playback/Mutation.ts
··· 83 83 playAllTracks(shuffle: $shuffle, position: $position) 84 84 } 85 85 `; 86 + 87 + export const SEEK = gql` 88 + mutation Seek($elapsed: Int!, $offset: Int!) { 89 + play(elapsed: $elapsed, offset: $offset) 90 + } 91 + `;
+40
webui/rockbox/src/Hooks/GraphQL.tsx
··· 743 743 744 744 export type PlayAllTracksMutation = { __typename?: 'Mutation', playAllTracks: number }; 745 745 746 + export type SeekMutationVariables = Exact<{ 747 + elapsed: Scalars['Int']['input']; 748 + offset: Scalars['Int']['input']; 749 + }>; 750 + 751 + 752 + export type SeekMutation = { __typename?: 'Mutation', play: number }; 753 + 746 754 export type GetCurrentTrackQueryVariables = Exact<{ [key: string]: never; }>; 747 755 748 756 ··· 1837 1845 export type PlayAllTracksMutationHookResult = ReturnType<typeof usePlayAllTracksMutation>; 1838 1846 export type PlayAllTracksMutationResult = Apollo.MutationResult<PlayAllTracksMutation>; 1839 1847 export type PlayAllTracksMutationOptions = Apollo.BaseMutationOptions<PlayAllTracksMutation, PlayAllTracksMutationVariables>; 1848 + export const SeekDocument = gql` 1849 + mutation Seek($elapsed: Int!, $offset: Int!) { 1850 + play(elapsed: $elapsed, offset: $offset) 1851 + } 1852 + `; 1853 + export type SeekMutationFn = Apollo.MutationFunction<SeekMutation, SeekMutationVariables>; 1854 + 1855 + /** 1856 + * __useSeekMutation__ 1857 + * 1858 + * To run a mutation, you first call `useSeekMutation` within a React component and pass it any options that fit your needs. 1859 + * When your component renders, `useSeekMutation` returns a tuple that includes: 1860 + * - A mutate function that you can call at any time to execute the mutation 1861 + * - An object with fields that represent the current status of the mutation's execution 1862 + * 1863 + * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; 1864 + * 1865 + * @example 1866 + * const [seekMutation, { data, loading, error }] = useSeekMutation({ 1867 + * variables: { 1868 + * elapsed: // value for 'elapsed' 1869 + * offset: // value for 'offset' 1870 + * }, 1871 + * }); 1872 + */ 1873 + export function useSeekMutation(baseOptions?: Apollo.MutationHookOptions<SeekMutation, SeekMutationVariables>) { 1874 + const options = {...defaultOptions, ...baseOptions} 1875 + return Apollo.useMutation<SeekMutation, SeekMutationVariables>(SeekDocument, options); 1876 + } 1877 + export type SeekMutationHookResult = ReturnType<typeof useSeekMutation>; 1878 + export type SeekMutationResult = Apollo.MutationResult<SeekMutation>; 1879 + export type SeekMutationOptions = Apollo.BaseMutationOptions<SeekMutation, SeekMutationVariables>; 1840 1880 export const GetCurrentTrackDocument = gql` 1841 1881 query GetCurrentTrack { 1842 1882 currentTrack {
+1 -1
webui/rockbox/tsconfig.app.tsbuildinfo
··· 1 - {"root":["./src/App.tsx","./src/Theme.ts","./src/emotion.d.ts","./src/main.tsx","./src/mocks.ts","./src/vite-env.d.ts","./src/Components/Album/Album.stories.tsx","./src/Components/Album/Album.test.tsx","./src/Components/Album/Album.tsx","./src/Components/Album/AlbumWithData.tsx","./src/Components/Album/index.tsx","./src/Components/Album/styles.tsx","./src/Components/Album/ContextMenu/ChildMenu.tsx","./src/Components/Album/ContextMenu/ContextMenu.stories.tsx","./src/Components/Album/ContextMenu/ContextMenu.test.tsx","./src/Components/Album/ContextMenu/ContextMenu.tsx","./src/Components/Album/ContextMenu/ContextMenuWithData.tsx","./src/Components/Album/ContextMenu/index.tsx","./src/Components/Album/ContextMenu/styles.tsx","./src/Components/AlbumDetails/AlbumDetails.stories.tsx","./src/Components/AlbumDetails/AlbumDetails.test.tsx","./src/Components/AlbumDetails/AlbumDetails.tsx","./src/Components/AlbumDetails/AlbumDetailsWithData.tsx","./src/Components/AlbumDetails/index.tsx","./src/Components/AlbumDetails/mocks.tsx","./src/Components/AlbumDetails/styles.tsx","./src/Components/Albums/Albums.stories.tsx","./src/Components/Albums/Albums.test.tsx","./src/Components/Albums/Albums.tsx","./src/Components/Albums/AlbumsWithData.tsx","./src/Components/Albums/index.tsx","./src/Components/Albums/mocks.tsx","./src/Components/Albums/styles.tsx","./src/Components/ArtistDetails/ArtistDetails.stories.tsx","./src/Components/ArtistDetails/ArtistDetails.test.tsx","./src/Components/ArtistDetails/ArtistDetails.tsx","./src/Components/ArtistDetails/ArtistDetailsWithData.tsx","./src/Components/ArtistDetails/index.tsx","./src/Components/ArtistDetails/mocks.tsx","./src/Components/ArtistDetails/styles.tsx","./src/Components/Artists/Artists.stories.tsx","./src/Components/Artists/Artists.test.tsx","./src/Components/Artists/Artists.tsx","./src/Components/Artists/ArtistsWithData.tsx","./src/Components/Artists/index.tsx","./src/Components/Artists/mocks.tsx","./src/Components/Artists/styles.tsx","./src/Components/Button/Button.test.tsx","./src/Components/Button/Button.tsx","./src/Components/Button/index.tsx","./src/Components/ContextMenu/ChildMenu.tsx","./src/Components/ContextMenu/ContextMenu.stories.tsx","./src/Components/ContextMenu/ContextMenu.test.tsx","./src/Components/ContextMenu/ContextMenu.tsx","./src/Components/ContextMenu/ContextMenuWithData.tsx","./src/Components/ContextMenu/index.tsx","./src/Components/ContextMenu/styles.tsx","./src/Components/ControlBar/ControlBar.stories.tsx","./src/Components/ControlBar/ControlBar.test.tsx","./src/Components/ControlBar/ControlBar.tsx","./src/Components/ControlBar/ControlBarState.tsx","./src/Components/ControlBar/ControlBarWithData.tsx","./src/Components/ControlBar/index.tsx","./src/Components/ControlBar/styles.tsx","./src/Components/ControlBar/CurrentTrack/CurrentTrack.tsx","./src/Components/ControlBar/CurrentTrack/index.tsx","./src/Components/ControlBar/CurrentTrack/styles.ts","./src/Components/ControlBar/PlayQueue/PlayQueue.stories.tsx","./src/Components/ControlBar/PlayQueue/PlayQueue.test.tsx","./src/Components/ControlBar/PlayQueue/PlayQueue.tsx","./src/Components/ControlBar/PlayQueue/PlayQueueWithData.tsx","./src/Components/ControlBar/PlayQueue/index.tsx","./src/Components/ControlBar/PlayQueue/mocks.tsx","./src/Components/ControlBar/PlayQueue/styles.tsx","./src/Components/ControlBar/RightMenu/RightMenu.tsx","./src/Components/ControlBar/RightMenu/index.tsx","./src/Components/ControlBar/RightMenu/styles.tsx","./src/Components/ControlBar/RightMenu/Volume/Volume.stories.tsx","./src/Components/ControlBar/RightMenu/Volume/Volume.test.tsx","./src/Components/ControlBar/RightMenu/Volume/Volume.tsx","./src/Components/ControlBar/RightMenu/Volume/VolumeWithData.tsx","./src/Components/ControlBar/RightMenu/Volume/index.tsx","./src/Components/ControlBar/RightMenu/Volume/styles.tsx","./src/Components/Extensions/Extensions.stories.tsx","./src/Components/Extensions/Extensions.tsx","./src/Components/Extensions/index.tsx","./src/Components/Files/Files.stories.tsx","./src/Components/Files/Files.test.tsx","./src/Components/Files/Files.tsx","./src/Components/Files/FilesWithData.tsx","./src/Components/Files/index.tsx","./src/Components/Files/mocks.tsx","./src/Components/Files/styles.tsx","./src/Components/Files/ContextMenu/ChildMenu.tsx","./src/Components/Files/ContextMenu/ContextMenu.stories.tsx","./src/Components/Files/ContextMenu/ContextMenu.test.tsx","./src/Components/Files/ContextMenu/ContextMenu.tsx","./src/Components/Files/ContextMenu/ContextMenuWithData.tsx","./src/Components/Files/ContextMenu/index.tsx","./src/Components/Files/ContextMenu/styles.tsx","./src/Components/Filter/Filter.test.tsx","./src/Components/Filter/Filter.tsx","./src/Components/Filter/index.tsx","./src/Components/Folder/Folder.stories.tsx","./src/Components/Folder/Folder.tsx","./src/Components/Folder/index.tsx","./src/Components/Icons/Add.tsx","./src/Components/Icons/AlbumCover.tsx","./src/Components/Icons/ArrowBack.tsx","./src/Components/Icons/Artist.tsx","./src/Components/Icons/Heart.tsx","./src/Components/Icons/HeartOutline.tsx","./src/Components/Icons/Next.tsx","./src/Components/Icons/Pause.tsx","./src/Components/Icons/Play.tsx","./src/Components/Icons/Previous.tsx","./src/Components/Icons/Repeat.tsx","./src/Components/Icons/Search.tsx","./src/Components/Icons/Shuffle.tsx","./src/Components/Icons/Speaker.tsx","./src/Components/Icons/Track.tsx","./src/Components/Likes/Likes.tsx","./src/Components/Likes/LikesState.ts","./src/Components/Likes/LikesWithData.tsx","./src/Components/Likes/index.tsx","./src/Components/Likes/styles.tsx","./src/Components/MainView/MainView.tsx","./src/Components/MainView/MainViewWithData.tsx","./src/Components/MainView/index.tsx","./src/Components/MainView/styles.tsx","./src/Components/PlaylistDetails/PlaylistDetails.stories.tsx","./src/Components/PlaylistDetails/PlaylistDetails.tsx","./src/Components/PlaylistDetails/index.tsx","./src/Components/Playlists/Playlists.stories.tsx","./src/Components/Playlists/Playlists.tsx","./src/Components/Playlists/index.tsx","./src/Components/Settings/SettingsState.ts","./src/Components/Sidebar/Sidebar.test.tsx","./src/Components/Sidebar/Sidebar.tsx","./src/Components/Sidebar/SidebarWithData.tsx","./src/Components/Sidebar/Stidebar.stories.tsx","./src/Components/Sidebar/index.tsx","./src/Components/Sidebar/styles.tsx","./src/Components/Table/Table.tsx","./src/Components/Table/index.tsx","./src/Components/Tracks/Tracks.stories.tsx","./src/Components/Tracks/Tracks.test.tsx","./src/Components/Tracks/Tracks.tsx","./src/Components/Tracks/TracksWithData.tsx","./src/Components/Tracks/index.tsx","./src/Components/Tracks/mocks.tsx","./src/Components/Tracks/styles.tsx","./src/Components/VirtualizedTable/VirtualizedTable.tsx","./src/Components/VirtualizedTable/index.tsx","./src/Containers/AlbumDetails/AlbumDetailsPage.tsx","./src/Containers/AlbumDetails/index.tsx","./src/Containers/Albums/AlbumsPage.tsx","./src/Containers/Albums/index.tsx","./src/Containers/ArtistDetails/ArtistDetailsPage.tsx","./src/Containers/ArtistDetails/index.tsx","./src/Containers/Artists/ArtistsPage.tsx","./src/Containers/Artists/index.tsx","./src/Containers/Extensions/ExtensionsPage.tsx","./src/Containers/Extensions/index.tsx","./src/Containers/Files/FilesPage.tsx","./src/Containers/Files/index.tsx","./src/Containers/Likes/LikesPage.tsx","./src/Containers/Likes/index.tsx","./src/Containers/Playlists/PlaylistsPage.tsx","./src/Containers/Playlists/index.tsx","./src/Containers/Tracks/TracksPage.tsx","./src/Containers/Tracks/index.tsx","./src/GraphQL/Browse/Query.ts","./src/GraphQL/Library/Mutation.ts","./src/GraphQL/Library/Query.ts","./src/GraphQL/Playback/Mutation.ts","./src/GraphQL/Playback/Query.ts","./src/GraphQL/Playback/Subscription.ts","./src/GraphQL/Playlist/Mutation.ts","./src/GraphQL/Playlist/Query.ts","./src/GraphQL/Playlist/Subscription.ts","./src/GraphQL/Settings/Query.tsx","./src/GraphQL/Sound/Mutation.tsx","./src/GraphQL/System/Query.ts","./src/Hooks/GraphQL.tsx","./src/Hooks/useFormat.tsx","./src/Hooks/usePlayQueue.tsx","./src/Hooks/useResumePlaylist.tsx","./src/Providers/GraphQLProvider.tsx","./src/Providers/ThemeProvider.tsx","./src/Providers/index.tsx","./src/Types/file.ts","./src/Types/playlist.ts","./src/Types/track.ts","./src/stories/Button.stories.ts","./src/stories/Button.tsx","./src/stories/Header.stories.ts","./src/stories/Header.tsx","./src/stories/Page.stories.ts","./src/stories/Page.tsx"],"version":"5.6.2"} 1 + {"root":["./src/App.tsx","./src/Theme.ts","./src/emotion.d.ts","./src/main.tsx","./src/mocks.ts","./src/vite-env.d.ts","./src/Components/Album/Album.stories.tsx","./src/Components/Album/Album.test.tsx","./src/Components/Album/Album.tsx","./src/Components/Album/AlbumWithData.tsx","./src/Components/Album/index.tsx","./src/Components/Album/styles.tsx","./src/Components/Album/ContextMenu/ChildMenu.tsx","./src/Components/Album/ContextMenu/ContextMenu.stories.tsx","./src/Components/Album/ContextMenu/ContextMenu.test.tsx","./src/Components/Album/ContextMenu/ContextMenu.tsx","./src/Components/Album/ContextMenu/ContextMenuWithData.tsx","./src/Components/Album/ContextMenu/index.tsx","./src/Components/Album/ContextMenu/styles.tsx","./src/Components/AlbumDetails/AlbumDetails.stories.tsx","./src/Components/AlbumDetails/AlbumDetails.test.tsx","./src/Components/AlbumDetails/AlbumDetails.tsx","./src/Components/AlbumDetails/AlbumDetailsWithData.tsx","./src/Components/AlbumDetails/index.tsx","./src/Components/AlbumDetails/mocks.tsx","./src/Components/AlbumDetails/styles.tsx","./src/Components/Albums/Albums.stories.tsx","./src/Components/Albums/Albums.test.tsx","./src/Components/Albums/Albums.tsx","./src/Components/Albums/AlbumsWithData.tsx","./src/Components/Albums/index.tsx","./src/Components/Albums/mocks.tsx","./src/Components/Albums/styles.tsx","./src/Components/ArtistDetails/ArtistDetails.stories.tsx","./src/Components/ArtistDetails/ArtistDetails.test.tsx","./src/Components/ArtistDetails/ArtistDetails.tsx","./src/Components/ArtistDetails/ArtistDetailsWithData.tsx","./src/Components/ArtistDetails/index.tsx","./src/Components/ArtistDetails/mocks.tsx","./src/Components/ArtistDetails/styles.tsx","./src/Components/Artists/Artists.stories.tsx","./src/Components/Artists/Artists.test.tsx","./src/Components/Artists/Artists.tsx","./src/Components/Artists/ArtistsWithData.tsx","./src/Components/Artists/index.tsx","./src/Components/Artists/mocks.tsx","./src/Components/Artists/styles.tsx","./src/Components/Button/Button.test.tsx","./src/Components/Button/Button.tsx","./src/Components/Button/index.tsx","./src/Components/ContextMenu/ChildMenu.tsx","./src/Components/ContextMenu/ContextMenu.stories.tsx","./src/Components/ContextMenu/ContextMenu.test.tsx","./src/Components/ContextMenu/ContextMenu.tsx","./src/Components/ContextMenu/ContextMenuWithData.tsx","./src/Components/ContextMenu/index.tsx","./src/Components/ContextMenu/styles.tsx","./src/Components/ControlBar/ControlBar.stories.tsx","./src/Components/ControlBar/ControlBar.test.tsx","./src/Components/ControlBar/ControlBar.tsx","./src/Components/ControlBar/ControlBarState.tsx","./src/Components/ControlBar/ControlBarWithData.tsx","./src/Components/ControlBar/index.tsx","./src/Components/ControlBar/styles.tsx","./src/Components/ControlBar/CurrentTrack/CurrentTrack.tsx","./src/Components/ControlBar/CurrentTrack/index.tsx","./src/Components/ControlBar/CurrentTrack/styles.ts","./src/Components/ControlBar/PlayQueue/PlayQueue.stories.tsx","./src/Components/ControlBar/PlayQueue/PlayQueue.test.tsx","./src/Components/ControlBar/PlayQueue/PlayQueue.tsx","./src/Components/ControlBar/PlayQueue/PlayQueueWithData.tsx","./src/Components/ControlBar/PlayQueue/index.tsx","./src/Components/ControlBar/PlayQueue/mocks.tsx","./src/Components/ControlBar/PlayQueue/styles.tsx","./src/Components/ControlBar/RightMenu/RightMenu.tsx","./src/Components/ControlBar/RightMenu/index.tsx","./src/Components/ControlBar/RightMenu/styles.tsx","./src/Components/ControlBar/RightMenu/Volume/Volume.stories.tsx","./src/Components/ControlBar/RightMenu/Volume/Volume.test.tsx","./src/Components/ControlBar/RightMenu/Volume/Volume.tsx","./src/Components/ControlBar/RightMenu/Volume/VolumeWithData.tsx","./src/Components/ControlBar/RightMenu/Volume/index.tsx","./src/Components/ControlBar/RightMenu/Volume/styles.tsx","./src/Components/Extensions/Extensions.stories.tsx","./src/Components/Extensions/Extensions.tsx","./src/Components/Extensions/index.tsx","./src/Components/Files/Files.stories.tsx","./src/Components/Files/Files.test.tsx","./src/Components/Files/Files.tsx","./src/Components/Files/FilesWithData.tsx","./src/Components/Files/index.tsx","./src/Components/Files/mocks.tsx","./src/Components/Files/styles.tsx","./src/Components/Files/ContextMenu/ChildMenu.tsx","./src/Components/Files/ContextMenu/ContextMenu.stories.tsx","./src/Components/Files/ContextMenu/ContextMenu.test.tsx","./src/Components/Files/ContextMenu/ContextMenu.tsx","./src/Components/Files/ContextMenu/ContextMenuWithData.tsx","./src/Components/Files/ContextMenu/index.tsx","./src/Components/Files/ContextMenu/styles.tsx","./src/Components/Filter/Filter.test.tsx","./src/Components/Filter/Filter.tsx","./src/Components/Filter/FilterState.tsx","./src/Components/Filter/FilterWithData.tsx","./src/Components/Filter/index.tsx","./src/Components/Folder/Folder.stories.tsx","./src/Components/Folder/Folder.tsx","./src/Components/Folder/index.tsx","./src/Components/Icons/Add.tsx","./src/Components/Icons/AlbumCover.tsx","./src/Components/Icons/ArrowBack.tsx","./src/Components/Icons/Artist.tsx","./src/Components/Icons/Heart.tsx","./src/Components/Icons/HeartOutline.tsx","./src/Components/Icons/Next.tsx","./src/Components/Icons/Pause.tsx","./src/Components/Icons/Play.tsx","./src/Components/Icons/Previous.tsx","./src/Components/Icons/Repeat.tsx","./src/Components/Icons/Search.tsx","./src/Components/Icons/Shuffle.tsx","./src/Components/Icons/Speaker.tsx","./src/Components/Icons/Track.tsx","./src/Components/Likes/Likes.tsx","./src/Components/Likes/LikesState.ts","./src/Components/Likes/LikesWithData.tsx","./src/Components/Likes/index.tsx","./src/Components/Likes/styles.tsx","./src/Components/MainView/MainView.tsx","./src/Components/MainView/MainViewWithData.tsx","./src/Components/MainView/index.tsx","./src/Components/MainView/styles.tsx","./src/Components/PlaylistDetails/PlaylistDetails.stories.tsx","./src/Components/PlaylistDetails/PlaylistDetails.tsx","./src/Components/PlaylistDetails/index.tsx","./src/Components/Playlists/Playlists.stories.tsx","./src/Components/Playlists/Playlists.tsx","./src/Components/Playlists/index.tsx","./src/Components/Settings/SettingsState.ts","./src/Components/Sidebar/Sidebar.test.tsx","./src/Components/Sidebar/Sidebar.tsx","./src/Components/Sidebar/SidebarWithData.tsx","./src/Components/Sidebar/Stidebar.stories.tsx","./src/Components/Sidebar/index.tsx","./src/Components/Sidebar/styles.tsx","./src/Components/Table/Table.tsx","./src/Components/Table/index.tsx","./src/Components/Tracks/Tracks.stories.tsx","./src/Components/Tracks/Tracks.test.tsx","./src/Components/Tracks/Tracks.tsx","./src/Components/Tracks/TracksWithData.tsx","./src/Components/Tracks/index.tsx","./src/Components/Tracks/mocks.tsx","./src/Components/Tracks/styles.tsx","./src/Components/VirtualizedTable/VirtualizedTable.tsx","./src/Components/VirtualizedTable/index.tsx","./src/Containers/AlbumDetails/AlbumDetailsPage.tsx","./src/Containers/AlbumDetails/index.tsx","./src/Containers/Albums/AlbumsPage.tsx","./src/Containers/Albums/index.tsx","./src/Containers/ArtistDetails/ArtistDetailsPage.tsx","./src/Containers/ArtistDetails/index.tsx","./src/Containers/Artists/ArtistsPage.tsx","./src/Containers/Artists/index.tsx","./src/Containers/Extensions/ExtensionsPage.tsx","./src/Containers/Extensions/index.tsx","./src/Containers/Files/FilesPage.tsx","./src/Containers/Files/index.tsx","./src/Containers/Likes/LikesPage.tsx","./src/Containers/Likes/index.tsx","./src/Containers/Playlists/PlaylistsPage.tsx","./src/Containers/Playlists/index.tsx","./src/Containers/Tracks/TracksPage.tsx","./src/Containers/Tracks/index.tsx","./src/GraphQL/Browse/Query.ts","./src/GraphQL/Library/Mutation.ts","./src/GraphQL/Library/Query.ts","./src/GraphQL/Playback/Mutation.ts","./src/GraphQL/Playback/Query.ts","./src/GraphQL/Playback/Subscription.ts","./src/GraphQL/Playlist/Mutation.ts","./src/GraphQL/Playlist/Query.ts","./src/GraphQL/Playlist/Subscription.ts","./src/GraphQL/Settings/Query.tsx","./src/GraphQL/Sound/Mutation.tsx","./src/GraphQL/System/Query.ts","./src/Hooks/GraphQL.tsx","./src/Hooks/useFormat.tsx","./src/Hooks/usePlayQueue.tsx","./src/Hooks/useResumePlaylist.tsx","./src/Providers/GraphQLProvider.tsx","./src/Providers/ThemeProvider.tsx","./src/Providers/index.tsx","./src/Types/file.ts","./src/Types/playlist.ts","./src/Types/track.ts","./src/stories/Button.stories.ts","./src/stories/Button.tsx","./src/stories/Header.stories.ts","./src/stories/Header.tsx","./src/stories/Page.stories.ts","./src/stories/Page.tsx"],"version":"5.6.2"}