Skip to content

Commit b7a509d

Browse files
Merge pull request #172 from PelagicaApp/develop
v4.0.1
2 parents c55fefc + b0ac789 commit b7a509d

8 files changed

Lines changed: 518 additions & 581 deletions

File tree

frontend/package.json

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "pelagica",
33
"private": true,
4-
"version": "4.0.0",
4+
"version": "4.0.1",
55
"type": "module",
66
"scripts": {
77
"dev": "vite",
@@ -38,7 +38,7 @@
3838
"clsx": "^2.1.1",
3939
"cmdk": "^1.1.1",
4040
"country-flag-icons": "^1.6.19",
41-
"dompurify": "^3.4.12",
41+
"dompurify": "^3.4.13",
4242
"embla-carousel-react": "^8.6.0",
4343
"fuse.js": "^7.4.2",
4444
"i18next": "^26.3.1",
@@ -52,29 +52,29 @@
5252
"react": "^19.2.7",
5353
"react-dom": "^19.2.7",
5454
"react-i18next": "^17.0.8",
55-
"react-router": "^7.17.0",
56-
"react-router-dom": "^7.18.1",
55+
"react-router": "^8.3.0",
56+
"react-router-dom": "^7.18.2",
5757
"sonner": "^2.0.7",
5858
"tailwind-merge": "^3.6.0",
5959
"usehooks-ts": "^3.1.1",
6060
"video.js": "^8.23.7"
6161
},
6262
"devDependencies": {
63-
"@eslint/js": "^9.39.4",
63+
"@eslint/js": "^10.0.1",
6464
"@tailwindcss/vite": "^4.3.3",
6565
"@types/node": "^24.13.2",
6666
"@types/react": "^19.2.17",
6767
"@types/react-dom": "^19.2.3",
68-
"@vitejs/plugin-react": "^6.0.4",
69-
"eslint": "^9.39.4",
68+
"@vitejs/plugin-react": "^6.0.5",
69+
"eslint": "^10.8.1",
7070
"eslint-plugin-react-hooks": "^7.1.1",
71-
"eslint-plugin-react-refresh": "^0.4.26",
71+
"eslint-plugin-react-refresh": "^0.5.3",
7272
"globals": "^16.5.0",
7373
"prettier": "3.8.4",
7474
"tailwindcss": "^4.3.1",
7575
"tw-animate-css": "^1.4.0",
7676
"typescript": "~5.9.3",
77-
"typescript-eslint": "^8.61.0",
78-
"vite": "^8.1.5"
77+
"typescript-eslint": "^8.66.0",
78+
"vite": "^8.2.1"
7979
}
8080
}

frontend/pnpm-lock.yaml

Lines changed: 387 additions & 461 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

frontend/src/App.tsx

Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
import { lazy, Suspense } from 'react';
2+
import { BrowserRouter, Route, Routes } from 'react-router';
3+
import { SearchProvider } from './context/SearchProvider.tsx';
4+
import { AdminItemDialogsProvider } from './context/AdminItemDialogsProvider.tsx';
5+
import { SeerrItemDialogProvider } from './context/SeerrItemDialogProvider.tsx';
6+
import { SearchCommand } from './components/SearchCommand.tsx';
7+
import { KeyboardShortcuts } from './components/KeyboardShortcuts.tsx';
8+
import { MusicPlaybackProvider } from './context/MusicPlaybackProvider.tsx';
9+
import PelagicaThemeLoader from './components/PelagicaThemeProvider.tsx';
10+
import { Toaster } from './components/ui/sonner.tsx';
11+
import StatsConsentModal from './components/StatsConsentModal.tsx';
12+
import { ScrollToTop } from './components/ScrollToTop.tsx';
13+
import { DesktopDragRegion } from './components/DesktopDragRegion.tsx';
14+
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
15+
import { ThemeProvider } from './components/theme-provider.tsx';
16+
17+
const HomePage = lazy(() => import('./pages/Home/HomePage.tsx'));
18+
const LoginPage = lazy(() => import('./pages/Login/LoginPage.tsx'));
19+
const LibraryPage = lazy(() => import('./pages/Library/LibraryPage.tsx'));
20+
const ItemPage = lazy(() => import('./pages/Item/ItemPage.tsx'));
21+
const PersonPage = lazy(() => import('./pages/Person/PersonPage.tsx'));
22+
const PlayerPage = lazy(() => import('./pages/Player/PlayerPage.tsx'));
23+
const SettingsPage = lazy(() => import('./pages/Settings/SettingsPage.tsx'));
24+
const SearchPage = lazy(() => import('./pages/Search/SearchPage.tsx'));
25+
const ThemeBrowserPage = lazy(() => import('./pages/ThemeBrowser/ThemeBrowserPage.tsx'));
26+
const NotFoundPage = lazy(() => import('./pages/NotFound/NotFoundPage.tsx'));
27+
const PhotoViewerPage = lazy(() => import('./pages/PhotoViewer/PhotoViewerPage.tsx'));
28+
const MusicLayout = lazy(() => import('./pages/Music/MusicLayout.tsx'));
29+
const MusicMainContent = lazy(() => import('./pages/Music/MusicMainContent.tsx'));
30+
const MusicAlbumView = lazy(() => import('./pages/Music/MusicAlbumView.tsx'));
31+
const MusicPlaylistView = lazy(() => import('./pages/Music/MusicPlaylistView.tsx'));
32+
const MusicArtistView = lazy(() => import('./pages/Music/MusicArtistView.tsx'));
33+
const GenrePage = lazy(() => import('./pages/Genre/GenrePage.tsx'));
34+
const StudioPage = lazy(() => import('./pages/Studio/StudioPage.tsx'));
35+
const StudiosPage = lazy(() => import('./pages/Studios/StudiosPage.tsx'));
36+
const ItemsSectionPage = lazy(() => import('./pages/Items/ItemsSectionPage.tsx'));
37+
const LivetvPage = lazy(() => import('./pages/Live/LiveTvPage.tsx'));
38+
39+
const queryClient = new QueryClient();
40+
41+
export default function App() {
42+
return (
43+
<QueryClientProvider client={queryClient}>
44+
<ThemeProvider>
45+
<MusicPlaybackProvider>
46+
<SearchProvider>
47+
<BrowserRouter>
48+
<AdminItemDialogsProvider>
49+
<SeerrItemDialogProvider>
50+
<ScrollToTop />
51+
<DesktopDragRegion />
52+
<KeyboardShortcuts />
53+
<SearchCommand />
54+
<PelagicaThemeLoader />
55+
<Toaster />
56+
<StatsConsentModal />
57+
<Suspense fallback={null}>
58+
<Routes>
59+
<Route path="/" element={<HomePage />} />
60+
<Route path="/library" element={<LibraryPage />} />
61+
<Route path="/item/:itemId" element={<ItemPage />} />
62+
<Route
63+
path="/person/:itemId"
64+
element={<PersonPage />}
65+
/>
66+
<Route path="/genre/:itemId" element={<GenrePage />} />
67+
<Route
68+
path="/studio/:itemId"
69+
element={<StudioPage />}
70+
/>
71+
<Route path="/studios" element={<StudiosPage />} />
72+
<Route
73+
path="/items/section"
74+
element={<ItemsSectionPage />}
75+
/>
76+
<Route path="/login" element={<LoginPage />} />
77+
<Route path="/play/:itemId" element={<PlayerPage />} />
78+
<Route path="/settings" element={<SettingsPage />} />
79+
<Route
80+
path="/browse-themes"
81+
element={<ThemeBrowserPage />}
82+
/>
83+
<Route path="/search" element={<SearchPage />} />
84+
<Route path="/live" element={<LivetvPage />} />
85+
<Route
86+
path="/photo/:itemId"
87+
element={<PhotoViewerPage />}
88+
/>
89+
<Route path="/music" element={<MusicLayout />}>
90+
<Route index element={<MusicMainContent />} />
91+
<Route
92+
path="album/:itemId"
93+
element={<MusicAlbumView />}
94+
/>
95+
<Route
96+
path="playlist/:itemId"
97+
element={<MusicPlaylistView />}
98+
/>
99+
<Route
100+
path="artist/:itemId"
101+
element={<MusicArtistView />}
102+
/>
103+
</Route>
104+
<Route path="*" element={<NotFoundPage />} />
105+
</Routes>
106+
</Suspense>
107+
</SeerrItemDialogProvider>
108+
</AdminItemDialogsProvider>
109+
</BrowserRouter>
110+
</SearchProvider>
111+
</MusicPlaybackProvider>
112+
</ThemeProvider>
113+
</QueryClientProvider>
114+
);
115+
}

frontend/src/locales/fr/home.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"title": "Acceuil",
2+
"title": "Accueil",
33
"continue_watching": "Continuer à regarder",
44
"recently_added": "Ajouts récents dans {{category}}",
55
"progress_watched": "{{percent}}% vu",

frontend/src/locales/fr/settings.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"title": "Paramètres",
33
"category_general": "Général",
4-
"category_homesections": "Page d'acceuil",
4+
"category_homesections": "Page d'accueil",
55
"category_itempage": "Page de présentation",
66
"category_themes": "Thèmes",
77
"save_success": "Enregistré",

frontend/src/locales/fr/sidebar.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"navigation": "Navigation",
3-
"home": "Acceuil",
3+
"home": "Accueil",
44
"library": "Bibliothèque",
55
"theme": "Thème",
66
"light": "Clair",

frontend/src/main.tsx

Lines changed: 2 additions & 106 deletions
Original file line numberDiff line numberDiff line change
@@ -1,112 +1,8 @@
1-
import { lazy, Suspense } from 'react';
21
import { createRoot } from 'react-dom/client';
3-
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
4-
import { ThemeProvider } from './components/theme-provider.tsx';
5-
import { BrowserRouter, Route, Routes } from 'react-router';
6-
import { SearchProvider } from './context/SearchProvider.tsx';
7-
import { AdminItemDialogsProvider } from './context/AdminItemDialogsProvider.tsx';
8-
import { SeerrItemDialogProvider } from './context/SeerrItemDialogProvider.tsx';
9-
import { SearchCommand } from './components/SearchCommand.tsx';
10-
import { KeyboardShortcuts } from './components/KeyboardShortcuts.tsx';
11-
import { MusicPlaybackProvider } from './context/MusicPlaybackProvider.tsx';
12-
import PelagicaThemeLoader from './components/PelagicaThemeProvider.tsx';
13-
import { Toaster } from './components/ui/sonner.tsx';
14-
import StatsConsentModal from './components/StatsConsentModal.tsx';
2+
import App from './App.tsx';
153

164
import './index.css';
175
import './theme.css';
186
import './i18n.ts';
19-
import { ScrollToTop } from './components/ScrollToTop.tsx';
20-
import { DesktopDragRegion } from './components/DesktopDragRegion.tsx';
217

22-
const HomePage = lazy(() => import('./pages/Home/HomePage.tsx'));
23-
const LoginPage = lazy(() => import('./pages/Login/LoginPage.tsx'));
24-
const LibraryPage = lazy(() => import('./pages/Library/LibraryPage.tsx'));
25-
const ItemPage = lazy(() => import('./pages/Item/ItemPage.tsx'));
26-
const PersonPage = lazy(() => import('./pages/Person/PersonPage.tsx'));
27-
const PlayerPage = lazy(() => import('./pages/Player/PlayerPage.tsx'));
28-
const SettingsPage = lazy(() => import('./pages/Settings/SettingsPage.tsx'));
29-
const SearchPage = lazy(() => import('./pages/Search/SearchPage.tsx'));
30-
const ThemeBrowserPage = lazy(() => import('./pages/ThemeBrowser/ThemeBrowserPage.tsx'));
31-
const NotFoundPage = lazy(() => import('./pages/NotFound/NotFoundPage.tsx'));
32-
const PhotoViewerPage = lazy(() => import('./pages/PhotoViewer/PhotoViewerPage.tsx'));
33-
const MusicLayout = lazy(() => import('./pages/Music/MusicLayout.tsx'));
34-
const MusicMainContent = lazy(() => import('./pages/Music/MusicMainContent.tsx'));
35-
const MusicAlbumView = lazy(() => import('./pages/Music/MusicAlbumView.tsx'));
36-
const MusicPlaylistView = lazy(() => import('./pages/Music/MusicPlaylistView.tsx'));
37-
const MusicArtistView = lazy(() => import('./pages/Music/MusicArtistView.tsx'));
38-
const GenrePage = lazy(() => import('./pages/Genre/GenrePage.tsx'));
39-
const StudioPage = lazy(() => import('./pages/Studio/StudioPage.tsx'));
40-
const StudiosPage = lazy(() => import('./pages/Studios/StudiosPage.tsx'));
41-
const ItemsSectionPage = lazy(() => import('./pages/Items/ItemsSectionPage.tsx'));
42-
const LivetvPage = lazy(() => import('./pages/Live/LiveTvPage.tsx'));
43-
44-
const queryClient = new QueryClient();
45-
46-
createRoot(document.getElementById('root')!).render(
47-
<QueryClientProvider client={queryClient}>
48-
<ThemeProvider>
49-
<MusicPlaybackProvider>
50-
<SearchProvider>
51-
<BrowserRouter>
52-
<AdminItemDialogsProvider>
53-
<SeerrItemDialogProvider>
54-
<ScrollToTop />
55-
<DesktopDragRegion />
56-
<KeyboardShortcuts />
57-
<SearchCommand />
58-
<PelagicaThemeLoader />
59-
<Toaster />
60-
<StatsConsentModal />
61-
<Suspense fallback={null}>
62-
<Routes>
63-
<Route path="/" element={<HomePage />} />
64-
<Route path="/library" element={<LibraryPage />} />
65-
<Route path="/item/:itemId" element={<ItemPage />} />
66-
<Route path="/person/:itemId" element={<PersonPage />} />
67-
<Route path="/genre/:itemId" element={<GenrePage />} />
68-
<Route path="/studio/:itemId" element={<StudioPage />} />
69-
<Route path="/studios" element={<StudiosPage />} />
70-
<Route
71-
path="/items/section"
72-
element={<ItemsSectionPage />}
73-
/>
74-
<Route path="/login" element={<LoginPage />} />
75-
<Route path="/play/:itemId" element={<PlayerPage />} />
76-
<Route path="/settings" element={<SettingsPage />} />
77-
<Route
78-
path="/browse-themes"
79-
element={<ThemeBrowserPage />}
80-
/>
81-
<Route path="/search" element={<SearchPage />} />
82-
<Route path="/live" element={<LivetvPage />} />
83-
<Route
84-
path="/photo/:itemId"
85-
element={<PhotoViewerPage />}
86-
/>
87-
<Route path="/music" element={<MusicLayout />}>
88-
<Route index element={<MusicMainContent />} />
89-
<Route
90-
path="album/:itemId"
91-
element={<MusicAlbumView />}
92-
/>
93-
<Route
94-
path="playlist/:itemId"
95-
element={<MusicPlaylistView />}
96-
/>
97-
<Route
98-
path="artist/:itemId"
99-
element={<MusicArtistView />}
100-
/>
101-
</Route>
102-
<Route path="*" element={<NotFoundPage />} />
103-
</Routes>
104-
</Suspense>
105-
</SeerrItemDialogProvider>
106-
</AdminItemDialogsProvider>
107-
</BrowserRouter>
108-
</SearchProvider>
109-
</MusicPlaybackProvider>
110-
</ThemeProvider>
111-
</QueryClientProvider>
112-
);
8+
createRoot(document.getElementById('root')!).render(<App />);

frontend/vite.config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ export default defineConfig({
88
plugins: [react(), tailwindcss()],
99
resolve: {
1010
alias: {
11-
'@': path.resolve(__dirname, './src'),
11+
'@': path.resolve(import.meta.dirname, './src'),
1212
},
1313
},
1414
server: {

0 commit comments

Comments
 (0)