From 14f2f8cb8ce609c7d532c92f4b6fa2dab38c8af3 Mon Sep 17 00:00:00 2001 From: Zoe Roux Date: Fri, 10 May 2024 17:23:06 +0200 Subject: [PATCH] Sort imports --- .../apps/mobile/app/(app)/(tabs)/_layout.tsx | 4 +- front/apps/mobile/app/_layout.tsx | 42 +++++++++--------- front/apps/mobile/app/utils.tsx | 12 ++--- front/apps/web/src/i18n.tsx | 4 +- front/apps/web/src/pages/_app.tsx | 44 +++++++++---------- front/apps/web/src/pages/_document.tsx | 4 +- front/packages/models/src/account-internal.ts | 4 +- front/packages/models/src/accounts.tsx | 16 +++---- front/packages/models/src/login.ts | 12 ++--- front/packages/models/src/query.tsx | 8 ++-- .../models/src/resources/episode.base.ts | 2 +- .../packages/models/src/resources/episode.ts | 2 +- front/packages/models/src/resources/movie.ts | 8 ++-- front/packages/models/src/resources/news.ts | 2 +- front/packages/models/src/resources/season.ts | 2 +- .../models/src/resources/server-info.ts | 2 +- front/packages/models/src/resources/show.ts | 6 +-- front/packages/models/src/resources/user.ts | 2 +- .../models/src/resources/watch-info.ts | 2 +- front/packages/models/src/theme.ts | 2 +- front/packages/models/src/utils.ts | 4 +- front/packages/primitives/src/alert.tsx | 2 +- front/packages/primitives/src/avatar.tsx | 8 ++-- front/packages/primitives/src/button.tsx | 2 +- front/packages/primitives/src/chip.tsx | 6 +-- front/packages/primitives/src/divider.tsx | 2 +- front/packages/primitives/src/icons.tsx | 4 +- front/packages/primitives/src/image/image.tsx | 6 +-- .../primitives/src/image/image.web.tsx | 8 ++-- front/packages/primitives/src/input.tsx | 6 +-- front/packages/primitives/src/links.tsx | 12 ++--- front/packages/primitives/src/menu.tsx | 12 ++--- front/packages/primitives/src/menu.web.tsx | 12 ++--- front/packages/primitives/src/popup.tsx | 10 ++--- front/packages/primitives/src/progress.tsx | 2 +- front/packages/primitives/src/select.tsx | 4 +- front/packages/primitives/src/select.web.tsx | 22 +++++----- front/packages/primitives/src/skeleton.tsx | 4 +- .../packages/primitives/src/skeleton.web.tsx | 2 +- front/packages/primitives/src/slider.tsx | 4 +- front/packages/primitives/src/snackbar.tsx | 6 +-- front/packages/primitives/src/text.tsx | 6 +-- .../packages/primitives/src/themes/theme.tsx | 6 +-- front/packages/primitives/src/tooltip.web.tsx | 4 +- .../primitives/src/utils/breakpoints.ts | 2 +- front/packages/ui/src/admin/index.tsx | 2 +- front/packages/ui/src/admin/scanner.tsx | 8 ++-- front/packages/ui/src/admin/users.tsx | 4 +- front/packages/ui/src/browse/grid.tsx | 22 +++++----- front/packages/ui/src/browse/header.tsx | 18 ++++---- front/packages/ui/src/browse/index.tsx | 10 ++--- front/packages/ui/src/browse/list.tsx | 10 ++--- front/packages/ui/src/collection/index.tsx | 12 ++--- .../packages/ui/src/components/media-info.tsx | 4 +- front/packages/ui/src/components/rating.tsx | 2 +- .../ui/src/components/watchlist-info.tsx | 8 ++-- front/packages/ui/src/details/episode.tsx | 16 +++---- front/packages/ui/src/details/movie.tsx | 4 +- front/packages/ui/src/details/season.tsx | 14 +++--- front/packages/ui/src/details/show.tsx | 14 +++--- front/packages/ui/src/downloads/index.web.tsx | 2 +- front/packages/ui/src/downloads/page.tsx | 18 ++++---- front/packages/ui/src/downloads/state.tsx | 10 ++--- front/packages/ui/src/errors/connection.tsx | 4 +- front/packages/ui/src/fetch-infinite.tsx | 8 ++-- front/packages/ui/src/fetch-infinite.web.tsx | 6 +-- front/packages/ui/src/home/genre.tsx | 4 +- front/packages/ui/src/home/header.tsx | 8 ++-- front/packages/ui/src/home/index.tsx | 18 ++++---- front/packages/ui/src/home/news.tsx | 8 ++-- front/packages/ui/src/home/recommended.tsx | 10 ++--- front/packages/ui/src/home/vertical.tsx | 8 ++-- front/packages/ui/src/home/watchlist.tsx | 10 ++--- front/packages/ui/src/layout.tsx | 6 +-- front/packages/ui/src/login/form.tsx | 4 +- front/packages/ui/src/login/login.tsx | 8 ++-- front/packages/ui/src/login/oidc.tsx | 6 +-- .../packages/ui/src/login/password-input.tsx | 4 +- front/packages/ui/src/login/register.tsx | 8 ++-- front/packages/ui/src/login/server-url.tsx | 2 +- front/packages/ui/src/navbar/index.tsx | 34 +++++++------- .../ui/src/player/components/hover.tsx | 24 +++++----- .../ui/src/player/components/left-buttons.tsx | 18 ++++---- .../src/player/components/right-buttons.tsx | 10 ++--- .../ui/src/player/components/scrubber.tsx | 16 +++---- front/packages/ui/src/player/index.tsx | 14 +++--- front/packages/ui/src/player/keyboard.tsx | 4 +- .../packages/ui/src/player/media-session.tsx | 2 +- front/packages/ui/src/player/state.tsx | 8 ++-- front/packages/ui/src/player/video.tsx | 12 ++--- front/packages/ui/src/player/video.web.tsx | 20 ++++----- .../ui/src/player/watch-status-observer.tsx | 2 +- front/packages/ui/src/search/index.tsx | 10 ++--- front/packages/ui/src/settings/account.tsx | 4 +- front/packages/ui/src/settings/index.tsx | 2 +- front/packages/ui/src/settings/oidc.tsx | 2 +- front/packages/ui/src/settings/playback.tsx | 8 ++-- 97 files changed, 413 insertions(+), 413 deletions(-) diff --git a/front/apps/mobile/app/(app)/(tabs)/_layout.tsx b/front/apps/mobile/app/(app)/(tabs)/_layout.tsx index 814bb0aa..9f6f1d21 100644 --- a/front/apps/mobile/app/(app)/(tabs)/_layout.tsx +++ b/front/apps/mobile/app/(app)/(tabs)/_layout.tsx @@ -19,10 +19,10 @@ */ import { Icon } from "@kyoo/primitives"; -import { Tabs } from "expo-router"; -import Home from "@material-symbols/svg-400/rounded/home-fill.svg"; import Browse from "@material-symbols/svg-400/rounded/browse-fill.svg"; import Downloading from "@material-symbols/svg-400/rounded/downloading-fill.svg"; +import Home from "@material-symbols/svg-400/rounded/home-fill.svg"; +import { Tabs } from "expo-router"; export default function TabsLayout() { return ( diff --git a/front/apps/mobile/app/_layout.tsx b/front/apps/mobile/app/_layout.tsx index 9d4ef393..e43a8d28 100644 --- a/front/apps/mobile/app/_layout.tsx +++ b/front/apps/mobile/app/_layout.tsx @@ -20,39 +20,39 @@ import "react-native-reanimated"; -import { PortalProvider } from "@gorhom/portal"; -import { SnackbarProvider, ThemeSelector } from "@kyoo/primitives"; -import { DownloadProvider } from "@kyoo/ui"; -import { AccountProvider, createQueryClient, storage, useUserTheme } from "@kyoo/models"; -import { PersistQueryClientProvider } from "@tanstack/react-query-persist-client"; -import { createSyncStoragePersister } from "@tanstack/query-sync-storage-persister"; -import i18next from "i18next"; -import { Slot } from "expo-router"; -import { getLocales } from "expo-localization"; -import * as SplashScreen from "expo-splash-screen"; import { - useFonts, Poppins_300Light, Poppins_400Regular, Poppins_900Black, + useFonts, } from "@expo-google-fonts/poppins"; -import { type ReactNode, useEffect, useState } from "react"; -import { useColorScheme } from "react-native"; -import { initReactI18next } from "react-i18next"; -import { ThemeProvider as RNThemeProvider } from "@react-navigation/native"; -import "intl-pluralrules"; -import "@formatjs/intl-locale/polyfill"; -import "@formatjs/intl-displaynames/polyfill"; import "@formatjs/intl-displaynames/locale-data/en"; import "@formatjs/intl-displaynames/locale-data/fr"; +import "@formatjs/intl-displaynames/polyfill"; +import "@formatjs/intl-locale/polyfill"; +import { PortalProvider } from "@gorhom/portal"; +import { AccountProvider, createQueryClient, storage, useUserTheme } from "@kyoo/models"; +import { SnackbarProvider, ThemeSelector } from "@kyoo/primitives"; +import { DownloadProvider } from "@kyoo/ui"; +import { ThemeProvider as RNThemeProvider } from "@react-navigation/native"; +import { createSyncStoragePersister } from "@tanstack/query-sync-storage-persister"; +import { PersistQueryClientProvider } from "@tanstack/react-query-persist-client"; +import { getLocales } from "expo-localization"; +import { Slot } from "expo-router"; +import * as SplashScreen from "expo-splash-screen"; +import i18next from "i18next"; +import "intl-pluralrules"; +import { type ReactNode, useEffect, useState } from "react"; +import { initReactI18next } from "react-i18next"; +import { useColorScheme } from "react-native"; +import NetInfo from "@react-native-community/netinfo"; +import { onlineManager } from "@tanstack/react-query"; +import { useTheme } from "yoshiki/native"; // TODO: use a backend to load jsons. import en from "../../../translations/en.json"; import fr from "../../../translations/fr.json"; import zh from "../../../translations/zh.json"; -import { useTheme } from "yoshiki/native"; -import NetInfo from "@react-native-community/netinfo"; -import { onlineManager } from "@tanstack/react-query"; onlineManager.setEventListener((setOnline) => { return NetInfo.addEventListener((state) => { diff --git a/front/apps/mobile/app/utils.tsx b/front/apps/mobile/app/utils.tsx index ab63c163..85725f30 100644 --- a/front/apps/mobile/app/utils.tsx +++ b/front/apps/mobile/app/utils.tsx @@ -18,14 +18,14 @@ * along with Kyoo. If not, see . */ -import { Stack, useLocalSearchParams } from "expo-router"; -import { type ComponentType, useEffect } from "react"; -import { StatusBar, type StatusBarProps } from "react-native"; -import * as ScreenOrientation from "expo-screen-orientation"; -import * as NavigationBar from "expo-navigation-bar"; -import arrayShuffle from "array-shuffle"; import { type QueryPage, useHasPermission } from "@kyoo/models"; import { Unauthorized } from "@kyoo/ui"; +import arrayShuffle from "array-shuffle"; +import * as NavigationBar from "expo-navigation-bar"; +import { Stack, useLocalSearchParams } from "expo-router"; +import * as ScreenOrientation from "expo-screen-orientation"; +import { type ComponentType, useEffect } from "react"; +import { StatusBar, type StatusBarProps } from "react-native"; const FullscreenProvider = () => { useEffect(() => { diff --git a/front/apps/web/src/i18n.tsx b/front/apps/web/src/i18n.tsx index 6e45277b..418e6604 100644 --- a/front/apps/web/src/i18n.tsx +++ b/front/apps/web/src/i18n.tsx @@ -18,10 +18,10 @@ * along with Kyoo. If not, see . */ -import { type ComponentType, useMemo } from "react"; import i18next, { type InitOptions } from "i18next"; -import { I18nextProvider } from "react-i18next"; import type { AppContext, AppInitialProps, AppProps } from "next/app"; +import { type ComponentType, useMemo } from "react"; +import { I18nextProvider } from "react-i18next"; import en from "../../../translations/en.json"; import fr from "../../../translations/fr.json"; diff --git a/front/apps/web/src/pages/_app.tsx b/front/apps/web/src/pages/_app.tsx index 0f9bf070..7b3c156c 100755 --- a/front/apps/web/src/pages/_app.tsx +++ b/front/apps/web/src/pages/_app.tsx @@ -20,42 +20,42 @@ import "../polyfill"; -import { HydrationBoundary, QueryClientProvider, dehydrate } from "@tanstack/react-query"; -import { ReactQueryDevtools } from "@tanstack/react-query-devtools"; -import { - HiddenIfNoJs, - TouchOnlyCss, - SkeletonCss, - ThemeSelector, - SnackbarProvider, -} from "@kyoo/primitives"; -import { WebTooltip } from "@kyoo/primitives/src/tooltip.web"; +import { PortalProvider } from "@gorhom/portal"; import { AccountP, AccountProvider, ConnectionErrorContext, - createQueryClient, - fetchQuery, - getTokenWJ, type QueryIdentifier, type QueryPage, ServerInfoP, - setSsrApiUrl, UserP, + createQueryClient, + fetchQuery, + getTokenWJ, + setSsrApiUrl, useUserTheme, } from "@kyoo/models"; -import { type ComponentType, useContext, useState } from "react"; +import { getCurrentAccount, readCookie, updateAccount } from "@kyoo/models/src/account-internal"; +import { + HiddenIfNoJs, + SkeletonCss, + SnackbarProvider, + ThemeSelector, + TouchOnlyCss, +} from "@kyoo/primitives"; +import { WebTooltip } from "@kyoo/primitives/src/tooltip.web"; +import { ConnectionError } from "@kyoo/ui"; +import { HydrationBoundary, QueryClientProvider, dehydrate } from "@tanstack/react-query"; +import { ReactQueryDevtools } from "@tanstack/react-query-devtools"; +import arrayShuffle from "array-shuffle"; import NextApp, { type AppContext, type AppProps } from "next/app"; import { Poppins } from "next/font/google"; -import { useTheme, useMobileHover, useStyleRegistry, StyleRegistryProvider } from "yoshiki/web"; -import superjson from "superjson"; import Head from "next/head"; -import { withTranslations } from "../i18n"; -import arrayShuffle from "array-shuffle"; +import { type ComponentType, useContext, useState } from "react"; import { Tooltip } from "react-tooltip"; -import { getCurrentAccount, readCookie, updateAccount } from "@kyoo/models/src/account-internal"; -import { PortalProvider } from "@gorhom/portal"; -import { ConnectionError } from "@kyoo/ui"; +import superjson from "superjson"; +import { StyleRegistryProvider, useMobileHover, useStyleRegistry, useTheme } from "yoshiki/web"; +import { withTranslations } from "../i18n"; const font = Poppins({ weight: ["300", "400", "900"], subsets: ["latin"], display: "swap" }); diff --git a/front/apps/web/src/pages/_document.tsx b/front/apps/web/src/pages/_document.tsx index 229f768d..7583f1dd 100644 --- a/front/apps/web/src/pages/_document.tsx +++ b/front/apps/web/src/pages/_document.tsx @@ -18,9 +18,9 @@ * along with Kyoo. If not, see . */ +import { type DocumentContext, Head, Html, Main, NextScript } from "next/document"; import { AppRegistry } from "react-native"; -import { Html, Main, Head, NextScript, type DocumentContext } from "next/document"; -import { createStyleRegistry, StyleRegistryProvider } from "yoshiki/web"; +import { StyleRegistryProvider, createStyleRegistry } from "yoshiki/web"; export const style = ` /** diff --git a/front/packages/models/src/account-internal.ts b/front/packages/models/src/account-internal.ts index 73b3a43b..6d5ca73e 100644 --- a/front/packages/models/src/account-internal.ts +++ b/front/packages/models/src/account-internal.ts @@ -18,10 +18,10 @@ * along with Kyoo. If not, see . */ +import { Platform } from "react-native"; +import { MMKV } from "react-native-mmkv"; import { type ZodTypeAny, z } from "zod"; import { type Account, AccountP } from "./accounts"; -import { MMKV } from "react-native-mmkv"; -import { Platform } from "react-native"; export const storage = new MMKV(); diff --git a/front/packages/models/src/accounts.tsx b/front/packages/models/src/accounts.tsx index eba66190..5dbb98d4 100644 --- a/front/packages/models/src/accounts.tsx +++ b/front/packages/models/src/accounts.tsx @@ -18,6 +18,8 @@ * along with Kyoo. If not, see . */ +import { useQueryClient } from "@tanstack/react-query"; +import { atom, getDefaultStore, useAtomValue, useSetAtom } from "jotai"; import { type ReactNode, createContext, @@ -27,16 +29,14 @@ import { useRef, useState, } from "react"; -import { ServerInfoP, type User, UserP } from "./resources"; -import { z } from "zod"; -import { zdate } from "./utils"; -import { removeAccounts, setCookie, updateAccount } from "./account-internal"; -import { useMMKVString } from "react-native-mmkv"; import { Platform } from "react-native"; -import { useQueryClient } from "@tanstack/react-query"; -import { atom, getDefaultStore, useAtomValue, useSetAtom } from "jotai"; -import { useFetch } from "./query"; +import { useMMKVString } from "react-native-mmkv"; +import { z } from "zod"; +import { removeAccounts, setCookie, updateAccount } from "./account-internal"; import type { KyooErrors } from "./kyoo-errors"; +import { useFetch } from "./query"; +import { ServerInfoP, type User, UserP } from "./resources"; +import { zdate } from "./utils"; export const TokenP = z.object({ token_type: z.literal("Bearer"), diff --git a/front/packages/models/src/login.ts b/front/packages/models/src/login.ts index cecc0a2d..e846d74d 100644 --- a/front/packages/models/src/login.ts +++ b/front/packages/models/src/login.ts @@ -18,13 +18,13 @@ * along with Kyoo. If not, see . */ -import { queryFn } from "./query"; -import type { KyooErrors } from "./kyoo-errors"; -import { type Account, type Token, TokenP, getCurrentApiUrl } from "./accounts"; -import { UserP } from "./resources"; -import { addAccount, getCurrentAccount, removeAccounts, updateAccount } from "./account-internal"; -import { Platform } from "react-native"; import { useEffect, useRef, useState } from "react"; +import { Platform } from "react-native"; +import { addAccount, getCurrentAccount, removeAccounts, updateAccount } from "./account-internal"; +import { type Account, type Token, TokenP, getCurrentApiUrl } from "./accounts"; +import type { KyooErrors } from "./kyoo-errors"; +import { queryFn } from "./query"; +import { UserP } from "./resources"; type Result = | { ok: true; value: A; error?: undefined } diff --git a/front/packages/models/src/query.tsx b/front/packages/models/src/query.tsx index 935fdee4..c39978c6 100644 --- a/front/packages/models/src/query.tsx +++ b/front/packages/models/src/query.tsx @@ -18,18 +18,18 @@ * along with Kyoo. If not, see . */ -import type { ComponentType, ReactElement } from "react"; import { QueryClient, type QueryFunctionContext, useInfiniteQuery, useQuery, } from "@tanstack/react-query"; +import type { ComponentType, ReactElement } from "react"; import type { z } from "zod"; -import type { KyooErrors } from "./kyoo-errors"; -import { type Page, Paged } from "./page"; -import { getToken, getTokenWJ } from "./login"; import { getCurrentApiUrl } from "."; +import type { KyooErrors } from "./kyoo-errors"; +import { getToken, getTokenWJ } from "./login"; +import { type Page, Paged } from "./page"; export let lastUsedUrl: string = null!; diff --git a/front/packages/models/src/resources/episode.base.ts b/front/packages/models/src/resources/episode.base.ts index 4908c773..aa9280c6 100644 --- a/front/packages/models/src/resources/episode.base.ts +++ b/front/packages/models/src/resources/episode.base.ts @@ -19,9 +19,9 @@ */ import { z } from "zod"; -import { zdate } from "../utils"; import { ImagesP, imageFn } from "../traits"; import { ResourceP } from "../traits/resource"; +import { zdate } from "../utils"; export const BaseEpisodeP = ResourceP("episode") .merge(ImagesP) diff --git a/front/packages/models/src/resources/episode.ts b/front/packages/models/src/resources/episode.ts index 5aa19dde..bac4ee07 100644 --- a/front/packages/models/src/resources/episode.ts +++ b/front/packages/models/src/resources/episode.ts @@ -19,8 +19,8 @@ */ import { z } from "zod"; -import { ShowP } from "./show"; import { BaseEpisodeP } from "./episode.base"; +import { ShowP } from "./show"; import { WatchStatusP } from "./watch-status"; export const EpisodeP = BaseEpisodeP.and( diff --git a/front/packages/models/src/resources/movie.ts b/front/packages/models/src/resources/movie.ts index 7554df1a..74108101 100644 --- a/front/packages/models/src/resources/movie.ts +++ b/front/packages/models/src/resources/movie.ts @@ -19,13 +19,13 @@ */ import { z } from "zod"; -import { zdate } from "../utils"; import { ImagesP, ResourceP, imageFn } from "../traits"; -import { Genre } from "./genre"; -import { StudioP } from "./studio"; -import { Status } from "./show"; +import { zdate } from "../utils"; import { CollectionP } from "./collection"; +import { Genre } from "./genre"; import { MetadataP } from "./metadata"; +import { Status } from "./show"; +import { StudioP } from "./studio"; import { WatchStatusP } from "./watch-status"; export const MovieP = ResourceP("movie") diff --git a/front/packages/models/src/resources/news.ts b/front/packages/models/src/resources/news.ts index 30f724a7..0e04ab27 100644 --- a/front/packages/models/src/resources/news.ts +++ b/front/packages/models/src/resources/news.ts @@ -19,8 +19,8 @@ */ import { z } from "zod"; -import { MovieP } from "./movie"; import { EpisodeP } from "./episode"; +import { MovieP } from "./movie"; export const NewsP = z.union([ /* diff --git a/front/packages/models/src/resources/season.ts b/front/packages/models/src/resources/season.ts index 9c5c1fa2..6229d56d 100644 --- a/front/packages/models/src/resources/season.ts +++ b/front/packages/models/src/resources/season.ts @@ -19,8 +19,8 @@ */ import { z } from "zod"; -import { zdate } from "../utils"; import { ImagesP, ResourceP } from "../traits"; +import { zdate } from "../utils"; export const SeasonP = ResourceP("season").merge(ImagesP).extend({ /** diff --git a/front/packages/models/src/resources/server-info.ts b/front/packages/models/src/resources/server-info.ts index 7266e89d..370ba6d2 100644 --- a/front/packages/models/src/resources/server-info.ts +++ b/front/packages/models/src/resources/server-info.ts @@ -18,9 +18,9 @@ * along with Kyoo. If not, see . */ +import { Platform } from "react-native"; import { z } from "zod"; import { imageFn } from ".."; -import { Platform } from "react-native"; export const OidcInfoP = z.object({ /* diff --git a/front/packages/models/src/resources/show.ts b/front/packages/models/src/resources/show.ts index 8b8ee32c..c6b52c54 100644 --- a/front/packages/models/src/resources/show.ts +++ b/front/packages/models/src/resources/show.ts @@ -19,12 +19,12 @@ */ import { z } from "zod"; -import { zdate } from "../utils"; import { ImagesP, ResourceP } from "../traits"; -import { Genre } from "./genre"; -import { StudioP } from "./studio"; +import { zdate } from "../utils"; import { BaseEpisodeP } from "./episode.base"; +import { Genre } from "./genre"; import { MetadataP } from "./metadata"; +import { StudioP } from "./studio"; import { ShowWatchStatusP } from "./watch-status"; /** diff --git a/front/packages/models/src/resources/user.ts b/front/packages/models/src/resources/user.ts index f17ea5d5..0f087a10 100644 --- a/front/packages/models/src/resources/user.ts +++ b/front/packages/models/src/resources/user.ts @@ -19,8 +19,8 @@ */ import { z } from "zod"; -import { ResourceP } from "../traits/resource"; import { imageFn } from "../traits/images"; +import { ResourceP } from "../traits/resource"; export const UserP = ResourceP("user") .extend({ diff --git a/front/packages/models/src/resources/watch-info.ts b/front/packages/models/src/resources/watch-info.ts index 824e480d..1fd8ce09 100644 --- a/front/packages/models/src/resources/watch-info.ts +++ b/front/packages/models/src/resources/watch-info.ts @@ -18,9 +18,9 @@ * along with Kyoo. If not, see . */ +import i18next from "i18next"; import { z } from "zod"; import { imageFn } from "../traits"; -import i18next from "i18next"; import { QualityP } from "./quality"; const getDisplayName = (sub: Track) => { diff --git a/front/packages/models/src/theme.ts b/front/packages/models/src/theme.ts index bff88c7b..36ccb119 100644 --- a/front/packages/models/src/theme.ts +++ b/front/packages/models/src/theme.ts @@ -18,9 +18,9 @@ * along with Kyoo. If not, see . */ +import { Platform } from "react-native"; import { useMMKVString } from "react-native-mmkv"; import { setCookie, storage } from "./account-internal"; -import { Platform } from "react-native"; export const useUserTheme = (ssrTheme?: "light" | "dark" | "auto") => { if (Platform.OS === "web" && typeof window === "undefined" && ssrTheme) return ssrTheme; diff --git a/front/packages/models/src/utils.ts b/front/packages/models/src/utils.ts index 5d773204..6d3557de 100644 --- a/front/packages/models/src/utils.ts +++ b/front/packages/models/src/utils.ts @@ -19,10 +19,10 @@ */ import { Platform } from "react-native"; -import type { Movie, Show } from "./resources"; -import { z } from "zod"; import { useMMKVString } from "react-native-mmkv"; +import { z } from "zod"; import { storage } from "./account-internal"; +import type { Movie, Show } from "./resources"; export const zdate = z.coerce.date; diff --git a/front/packages/primitives/src/alert.tsx b/front/packages/primitives/src/alert.tsx index 3a78791d..12e2210e 100644 --- a/front/packages/primitives/src/alert.tsx +++ b/front/packages/primitives/src/alert.tsx @@ -20,7 +20,7 @@ // Stolen from https://github.com/necolas/react-native-web/issues/1026#issuecomment-1458279681 -import { Alert as RNAlert, type AlertOptions, type AlertButton } from "react-native"; +import { type AlertButton, type AlertOptions, Alert as RNAlert } from "react-native"; import type { SweetAlertIcon } from "sweetalert2"; export interface ExtendedAlertStatic { diff --git a/front/packages/primitives/src/avatar.tsx b/front/packages/primitives/src/avatar.tsx index a727f432..a2bcea47 100644 --- a/front/packages/primitives/src/avatar.tsx +++ b/front/packages/primitives/src/avatar.tsx @@ -18,12 +18,12 @@ * along with Kyoo. If not, see . */ -import { View, type ViewStyle, Image, type ImageProps } from "react-native"; -import { useYoshiki, px, type Stylable } from "yoshiki/native"; +import AccountCircle from "@material-symbols/svg-400/rounded/account_circle-fill.svg"; +import { type ComponentType, type RefAttributes, forwardRef } from "react"; +import { Image, type ImageProps, View, type ViewStyle } from "react-native"; +import { type Stylable, px, useYoshiki } from "yoshiki/native"; import { Icon } from "./icons"; import { P } from "./text"; -import AccountCircle from "@material-symbols/svg-400/rounded/account_circle-fill.svg"; -import { type ComponentType, forwardRef, type RefAttributes } from "react"; const stringToColor = (string: string) => { let hash = 0; diff --git a/front/packages/primitives/src/button.tsx b/front/packages/primitives/src/button.tsx index e5d958b5..bb63ca10 100644 --- a/front/packages/primitives/src/button.tsx +++ b/front/packages/primitives/src/button.tsx @@ -19,11 +19,11 @@ */ import { type ComponentType, type ForwardedRef, type ReactElement, forwardRef } from "react"; +import { type Falsy, type PressableProps, View } from "react-native"; import { type Theme, useYoshiki } from "yoshiki/native"; import { PressableFeedback } from "./links"; import { P } from "./text"; import { ts } from "./utils"; -import { type Falsy, type PressableProps, View } from "react-native"; export const Button = forwardRef(function Button( { diff --git a/front/packages/primitives/src/chip.tsx b/front/packages/primitives/src/chip.tsx index 87ce959f..a4930fb7 100644 --- a/front/packages/primitives/src/chip.tsx +++ b/front/packages/primitives/src/chip.tsx @@ -18,12 +18,12 @@ * along with Kyoo. If not, see . */ -import { px, rem, type Theme, useYoshiki } from "yoshiki/native"; +import type { TextProps } from "react-native"; +import { type Theme, px, rem, useYoshiki } from "yoshiki/native"; import { Link } from "./links"; +import { Skeleton } from "./skeleton"; import { P } from "./text"; import { capitalize, ts } from "./utils"; -import type { TextProps } from "react-native"; -import { Skeleton } from "./skeleton"; export const Chip = ({ color, diff --git a/front/packages/primitives/src/divider.tsx b/front/packages/primitives/src/divider.tsx index a7da1e66..03176ce7 100644 --- a/front/packages/primitives/src/divider.tsx +++ b/front/packages/primitives/src/divider.tsx @@ -19,7 +19,7 @@ */ import { HR as EHR } from "@expo/html-elements"; -import { px, type Stylable, useYoshiki } from "yoshiki/native"; +import { type Stylable, px, useYoshiki } from "yoshiki/native"; import { ts } from "./utils"; export const HR = ({ diff --git a/front/packages/primitives/src/icons.tsx b/front/packages/primitives/src/icons.tsx index 6fc2d1ac..3c504c33 100644 --- a/front/packages/primitives/src/icons.tsx +++ b/front/packages/primitives/src/icons.tsx @@ -23,10 +23,10 @@ import { type ComponentProps, type ComponentType, type ForwardedRef, forwardRef import { Platform, type PressableProps } from "react-native"; import type { SvgProps } from "react-native-svg"; import type { YoshikiStyle } from "yoshiki"; -import { px, type Stylable, type Theme, useYoshiki } from "yoshiki/native"; +import { type Stylable, type Theme, px, useYoshiki } from "yoshiki/native"; import { PressableFeedback } from "./links"; -import { type Breakpoint, focusReset, ts } from "./utils"; import { P } from "./text"; +import { type Breakpoint, focusReset, ts } from "./utils"; declare module "react" { function forwardRef( diff --git a/front/packages/primitives/src/image/image.tsx b/front/packages/primitives/src/image/image.tsx index 30de7a92..a117d76d 100644 --- a/front/packages/primitives/src/image/image.tsx +++ b/front/packages/primitives/src/image/image.tsx @@ -18,14 +18,14 @@ * along with Kyoo. If not, see . */ +import { getCurrentToken } from "@kyoo/models"; import { useState } from "react"; import { type FlexStyle, type ImageStyle, View, type ViewStyle } from "react-native"; -import FastImage from "react-native-fast-image"; import { Blurhash } from "react-native-blurhash"; +import FastImage from "react-native-fast-image"; import { percent, useYoshiki } from "yoshiki/native"; -import type { Props, ImageLayout } from "./base-image"; import { Skeleton } from "../skeleton"; -import { getCurrentToken } from "@kyoo/models"; +import type { ImageLayout, Props } from "./base-image"; export const Image = ({ src, diff --git a/front/packages/primitives/src/image/image.web.tsx b/front/packages/primitives/src/image/image.web.tsx index 1c94132c..3c5f6514 100644 --- a/front/packages/primitives/src/image/image.web.tsx +++ b/front/packages/primitives/src/image/image.web.tsx @@ -18,14 +18,14 @@ * along with Kyoo. If not, see . */ +import NextImage from "next/image"; import { useState } from "react"; import { type ImageStyle, View, type ViewStyle } from "react-native"; import { useYoshiki } from "yoshiki/native"; -import type { Props, ImageLayout } from "./base-image"; -import { BlurhashContainer } from "./blurhash.web"; -import { Skeleton } from "../skeleton"; -import NextImage from "next/image"; import { imageBorderRadius } from "../constants"; +import { Skeleton } from "../skeleton"; +import type { ImageLayout, Props } from "./base-image"; +import { BlurhashContainer } from "./blurhash.web"; export const Image = ({ src, diff --git a/front/packages/primitives/src/input.tsx b/front/packages/primitives/src/input.tsx index fa92c457..598a5830 100644 --- a/front/packages/primitives/src/input.tsx +++ b/front/packages/primitives/src/input.tsx @@ -18,11 +18,11 @@ * along with Kyoo. If not, see . */ -import { forwardRef, type ReactNode, useState } from "react"; +import { type ReactNode, forwardRef, useState } from "react"; import { TextInput, type TextInputProps, View, type ViewStyle } from "react-native"; -import { px, type Theme, useYoshiki } from "yoshiki/native"; -import { focusReset, ts } from "./utils"; +import { type Theme, px, useYoshiki } from "yoshiki/native"; import type { YoshikiEnhanced } from "./image/base-image"; +import { focusReset, ts } from "./utils"; export const Input = forwardRef< TextInput, diff --git a/front/packages/primitives/src/links.tsx b/front/packages/primitives/src/links.tsx index b89511d4..466463fa 100644 --- a/front/packages/primitives/src/links.tsx +++ b/front/packages/primitives/src/links.tsx @@ -18,20 +18,20 @@ * along with Kyoo. If not, see . */ -import { forwardRef, type ReactNode } from "react"; +import type { UrlObject } from "node:url"; +import { type ReactNode, forwardRef } from "react"; import { + Linking, Platform, Pressable, + type PressableProps, type TextProps, type View, - type PressableProps, - Linking, } from "react-native"; import { TextLink, useLink } from "solito/link"; -import { useTheme, useYoshiki } from "yoshiki/native"; -import type { UrlObject } from "node:url"; -import { alpha } from "./themes"; import { parseNextPath } from "solito/router"; +import { useTheme, useYoshiki } from "yoshiki/native"; +import { alpha } from "./themes"; export const A = ({ href, diff --git a/front/packages/primitives/src/menu.tsx b/front/packages/primitives/src/menu.tsx index 4a0341be..9e255dba 100644 --- a/front/packages/primitives/src/menu.tsx +++ b/front/packages/primitives/src/menu.tsx @@ -19,29 +19,29 @@ */ import { Portal } from "@gorhom/portal"; +import Check from "@material-symbols/svg-400/rounded/check-fill.svg"; +import Close from "@material-symbols/svg-400/rounded/close-fill.svg"; import { ScrollView } from "moti"; import { type ComponentType, - createContext, type ReactElement, type ReactNode, + createContext, useContext, useEffect, useRef, useState, } from "react"; -import { StyleSheet, Pressable, View } from "react-native"; +import { Pressable, StyleSheet, View } from "react-native"; import { useSafeAreaInsets } from "react-native-safe-area-context"; +import type { SvgProps } from "react-native-svg"; +import { useRouter } from "solito/router"; import { percent, px, sm, useYoshiki, vh, xl } from "yoshiki/native"; -import Close from "@material-symbols/svg-400/rounded/close-fill.svg"; import { Icon, IconButton } from "./icons"; import { PressableFeedback } from "./links"; import { P } from "./text"; import { ContrastArea, SwitchVariant } from "./themes"; import { ts } from "./utils"; -import Check from "@material-symbols/svg-400/rounded/check-fill.svg"; -import { useRouter } from "solito/router"; -import type { SvgProps } from "react-native-svg"; const MenuContext = createContext<((open: boolean) => void) | undefined>(undefined); diff --git a/front/packages/primitives/src/menu.web.tsx b/front/packages/primitives/src/menu.web.tsx index ab46e705..304e17cd 100644 --- a/front/packages/primitives/src/menu.web.tsx +++ b/front/packages/primitives/src/menu.web.tsx @@ -18,24 +18,24 @@ * along with Kyoo. If not, see . */ +import Dot from "@material-symbols/svg-400/rounded/fiber_manual_record-fill.svg"; import * as DropdownMenu from "@radix-ui/react-dropdown-menu"; +import Link from "next/link"; import { type ComponentProps, type ComponentType, - forwardRef, type ReactElement, type ReactNode, + forwardRef, } from "react"; -import Link from "next/link"; import type { PressableProps } from "react-native"; -import { useYoshiki } from "yoshiki/web"; +import type { SvgProps } from "react-native-svg"; import { useYoshiki as useNativeYoshiki } from "yoshiki/native"; +import { useYoshiki } from "yoshiki/web"; +import { Icon } from "./icons"; import { P } from "./text"; import { ContrastArea, SwitchVariant } from "./themes"; -import { Icon } from "./icons"; -import Dot from "@material-symbols/svg-400/rounded/fiber_manual_record-fill.svg"; import { focusReset, ts } from "./utils"; -import type { SvgProps } from "react-native-svg"; type YoshikiFunc = (props: ReturnType) => T; export const YoshikiProvider = ({ children }: { children: YoshikiFunc }) => { diff --git a/front/packages/primitives/src/popup.tsx b/front/packages/primitives/src/popup.tsx index d06b0e6e..0f79d171 100644 --- a/front/packages/primitives/src/popup.tsx +++ b/front/packages/primitives/src/popup.tsx @@ -18,13 +18,13 @@ * along with Kyoo. If not, see . */ -import { type ReactNode, useCallback, useEffect, useState } from "react"; -import { Container } from "./container"; import { usePortal } from "@gorhom/portal"; -import { ContrastArea, SwitchVariant, type YoshikiFunc } from "./themes"; -import { View, ScrollView } from "react-native"; -import { imageBorderRadius } from "./constants"; +import { type ReactNode, useCallback, useEffect, useState } from "react"; +import { ScrollView, View } from "react-native"; import { px, vh } from "yoshiki/native"; +import { imageBorderRadius } from "./constants"; +import { Container } from "./container"; +import { ContrastArea, SwitchVariant, type YoshikiFunc } from "./themes"; import { ts } from "./utils"; export const Popup = ({ children, ...props }: { children: ReactNode | YoshikiFunc }) => { diff --git a/front/packages/primitives/src/progress.tsx b/front/packages/primitives/src/progress.tsx index 543c3cc8..9a66b64d 100644 --- a/front/packages/primitives/src/progress.tsx +++ b/front/packages/primitives/src/progress.tsx @@ -20,7 +20,7 @@ import { ActivityIndicator, Platform, View } from "react-native"; import { Circle, Svg } from "react-native-svg"; -import { px, type Stylable, useYoshiki } from "yoshiki/native"; +import { type Stylable, px, useYoshiki } from "yoshiki/native"; export const CircularProgress = ({ size = 48, diff --git a/front/packages/primitives/src/select.tsx b/front/packages/primitives/src/select.tsx index 6c12f979..e6fc194d 100644 --- a/front/packages/primitives/src/select.tsx +++ b/front/packages/primitives/src/select.tsx @@ -18,10 +18,10 @@ * along with Kyoo. If not, see . */ -import { Icon } from "./icons"; import ExpandMore from "@material-symbols/svg-400/rounded/expand_more-fill.svg"; -import { Menu } from "./menu"; import { Button } from "./button"; +import { Icon } from "./icons"; +import { Menu } from "./menu"; export const Select = ({ label, diff --git a/front/packages/primitives/src/select.web.tsx b/front/packages/primitives/src/select.web.tsx index 6c0728e9..0c235d9e 100644 --- a/front/packages/primitives/src/select.web.tsx +++ b/front/packages/primitives/src/select.web.tsx @@ -18,20 +18,20 @@ * along with Kyoo. If not, see . */ +import Check from "@material-symbols/svg-400/rounded/check-fill.svg"; +import ExpandLess from "@material-symbols/svg-400/rounded/expand_less-fill.svg"; +import ExpandMore from "@material-symbols/svg-400/rounded/expand_more-fill.svg"; import * as RSelect from "@radix-ui/react-select"; import { forwardRef } from "react"; -import { Icon } from "./icons"; -import Check from "@material-symbols/svg-400/rounded/check-fill.svg"; -import ExpandMore from "@material-symbols/svg-400/rounded/expand_more-fill.svg"; -import ExpandLess from "@material-symbols/svg-400/rounded/expand_less-fill.svg"; -import { ContrastArea, SwitchVariant } from "./themes"; -import { InternalTriger, YoshikiProvider } from "./menu.web"; -import { type Theme, px, useYoshiki as useNativeYoshiki } from "yoshiki/native"; -import { useYoshiki } from "yoshiki"; -import { PressableFeedback } from "./links"; -import { P } from "./text"; -import { focusReset, ts } from "./utils"; import { View } from "react-native"; +import { useYoshiki } from "yoshiki"; +import { type Theme, px, useYoshiki as useNativeYoshiki } from "yoshiki/native"; +import { Icon } from "./icons"; +import { PressableFeedback } from "./links"; +import { InternalTriger, YoshikiProvider } from "./menu.web"; +import { P } from "./text"; +import { ContrastArea, SwitchVariant } from "./themes"; +import { focusReset, ts } from "./utils"; export const Select = ({ label, diff --git a/front/packages/primitives/src/skeleton.tsx b/front/packages/primitives/src/skeleton.tsx index 08e8943f..d6336b75 100644 --- a/front/packages/primitives/src/skeleton.tsx +++ b/front/packages/primitives/src/skeleton.tsx @@ -19,10 +19,10 @@ */ import { LinearGradient as LG } from "expo-linear-gradient"; -import { AnimatePresence, motify, MotiView } from "moti"; +import { AnimatePresence, MotiView, motify } from "moti"; import { useState } from "react"; import { Platform, View, type ViewProps } from "react-native"; -import { px, rem, useYoshiki, percent, em } from "yoshiki/native"; +import { em, percent, px, rem, useYoshiki } from "yoshiki/native"; import { hiddenIfNoJs } from "./utils/nojs"; const LinearGradient = motify(LG)(); diff --git a/front/packages/primitives/src/skeleton.web.tsx b/front/packages/primitives/src/skeleton.web.tsx index 398b7623..f322cac0 100644 --- a/front/packages/primitives/src/skeleton.web.tsx +++ b/front/packages/primitives/src/skeleton.web.tsx @@ -20,7 +20,7 @@ import { LinearGradient } from "expo-linear-gradient"; import { View, type ViewProps } from "react-native"; -import { px, rem, useYoshiki, percent, em } from "yoshiki/native"; +import { em, percent, px, rem, useYoshiki } from "yoshiki/native"; import { hiddenIfNoJs } from "./utils/nojs"; export const SkeletonCss = () => ( diff --git a/front/packages/primitives/src/slider.tsx b/front/packages/primitives/src/slider.tsx index 4880a41e..c7c727fc 100644 --- a/front/packages/primitives/src/slider.tsx +++ b/front/packages/primitives/src/slider.tsx @@ -20,9 +20,9 @@ import { useRef, useState } from "react"; import { type GestureResponderEvent, Platform, View } from "react-native"; -import { px, percent, Stylable, useYoshiki } from "yoshiki/native"; -import { focusReset } from "./utils"; import type { ViewProps } from "react-native-svg/lib/typescript/fabric/utils"; +import { Stylable, percent, px, useYoshiki } from "yoshiki/native"; +import { focusReset } from "./utils"; export const Slider = ({ progress, diff --git a/front/packages/primitives/src/snackbar.tsx b/front/packages/primitives/src/snackbar.tsx index cab87dc8..aefff109 100644 --- a/front/packages/primitives/src/snackbar.tsx +++ b/front/packages/primitives/src/snackbar.tsx @@ -20,13 +20,13 @@ import { usePortal } from "@gorhom/portal"; import { type ReactElement, createContext, useCallback, useContext, useRef } from "react"; -import { ContrastArea, SwitchVariant } from "./themes"; -import { P } from "./text"; import { View } from "react-native"; import { percent, px } from "yoshiki/native"; -import { ts } from "./utils"; import { Button } from "./button"; import { imageBorderRadius } from "./constants"; +import { P } from "./text"; +import { ContrastArea, SwitchVariant } from "./themes"; +import { ts } from "./utils"; export type Snackbar = { key?: string; diff --git a/front/packages/primitives/src/text.tsx b/front/packages/primitives/src/text.tsx index 14da8fc6..5099fa6b 100644 --- a/front/packages/primitives/src/text.tsx +++ b/front/packages/primitives/src/text.tsx @@ -18,9 +18,6 @@ * along with Kyoo. If not, see . */ -import type { ComponentType, ComponentProps } from "react"; -import { Platform, Text, type TextProps, type TextStyle, type StyleProp } from "react-native"; -import { percent, rem, useYoshiki } from "yoshiki/native"; import { H1 as EH1, H2 as EH2, @@ -30,6 +27,9 @@ import { H6 as EH6, P as EP, } from "@expo/html-elements"; +import type { ComponentProps, ComponentType } from "react"; +import { Platform, type StyleProp, Text, type TextProps, type TextStyle } from "react-native"; +import { percent, rem, useYoshiki } from "yoshiki/native"; import { ts } from "./utils/spacing"; const styleText = ( diff --git a/front/packages/primitives/src/themes/theme.tsx b/front/packages/primitives/src/themes/theme.tsx index 38b9f643..b31d1eea 100644 --- a/front/packages/primitives/src/themes/theme.tsx +++ b/front/packages/primitives/src/themes/theme.tsx @@ -18,14 +18,14 @@ * along with Kyoo. If not, see . */ -import type { ReactNode } from "react"; import type { Property } from "csstype"; +import type { ReactNode } from "react"; +import { Platform } from "react-native"; import { type Theme, ThemeProvider, useAutomaticTheme } from "yoshiki"; -import { useTheme, useYoshiki } from "yoshiki/native"; import "yoshiki"; +import { useTheme, useYoshiki } from "yoshiki/native"; import "yoshiki/native"; import { catppuccin } from "./catppuccin"; -import { Platform } from "react-native"; type FontList = Partial< Record< diff --git a/front/packages/primitives/src/tooltip.web.tsx b/front/packages/primitives/src/tooltip.web.tsx index 0c65e850..39b01220 100644 --- a/front/packages/primitives/src/tooltip.web.tsx +++ b/front/packages/primitives/src/tooltip.web.tsx @@ -18,9 +18,9 @@ * along with Kyoo. If not, see . */ -import type { Theme } from "yoshiki/native"; -import { Tooltip as RTooltip } from "react-tooltip"; import { forwardRef } from "react"; +import { Tooltip as RTooltip } from "react-tooltip"; +import type { Theme } from "yoshiki/native"; import { ContrastArea } from "./themes"; export const tooltip = (tooltip: string, up?: boolean) => ({ diff --git a/front/packages/primitives/src/utils/breakpoints.ts b/front/packages/primitives/src/utils/breakpoints.ts index 29111559..bf5f6549 100644 --- a/front/packages/primitives/src/utils/breakpoints.ts +++ b/front/packages/primitives/src/utils/breakpoints.ts @@ -19,7 +19,7 @@ */ import { useWindowDimensions } from "react-native"; -import { type Breakpoints as YoshikiBreakpoint, isBreakpoints, breakpoints } from "yoshiki/native"; +import { type Breakpoints as YoshikiBreakpoint, breakpoints, isBreakpoints } from "yoshiki/native"; type AtLeastOne }> = Partial & U[keyof U]; export type Breakpoint = T | AtLeastOne>; diff --git a/front/packages/ui/src/admin/index.tsx b/front/packages/ui/src/admin/index.tsx index 0d305688..b8ba9a5d 100644 --- a/front/packages/ui/src/admin/index.tsx +++ b/front/packages/ui/src/admin/index.tsx @@ -22,8 +22,8 @@ import type { QueryPage } from "@kyoo/models"; import { ts } from "@kyoo/primitives"; import { ScrollView } from "react-native"; import { DefaultLayout } from "../layout"; -import { UserList } from "./users"; import { Scanner } from "./scanner"; +import { UserList } from "./users"; export const AdminPage: QueryPage = () => { return ( diff --git a/front/packages/ui/src/admin/scanner.tsx b/front/packages/ui/src/admin/scanner.tsx index 02ac7365..946b5e2c 100644 --- a/front/packages/ui/src/admin/scanner.tsx +++ b/front/packages/ui/src/admin/scanner.tsx @@ -19,13 +19,13 @@ */ import { type Issue, IssueP, type QueryIdentifier, queryFn, useFetch } from "@kyoo/models"; -import { useTranslation } from "react-i18next"; -import { SettingsContainer } from "../settings/base"; import { Button, Icon, P, Skeleton, tooltip, ts } from "@kyoo/primitives"; -import { ErrorView } from "../errors"; -import { z } from "zod"; +import { useTranslation } from "react-i18next"; import { View } from "react-native"; import { useYoshiki } from "yoshiki/native"; +import { z } from "zod"; +import { ErrorView } from "../errors"; +import { SettingsContainer } from "../settings/base"; import Info from "@material-symbols/svg-400/outlined/info.svg"; import Scan from "@material-symbols/svg-400/outlined/sensors.svg"; diff --git a/front/packages/ui/src/admin/users.tsx b/front/packages/ui/src/admin/users.tsx index 0b4dede1..6f621445 100644 --- a/front/packages/ui/src/admin/users.tsx +++ b/front/packages/ui/src/admin/users.tsx @@ -29,10 +29,10 @@ import { SettingsContainer } from "../settings/base"; import UserI from "@material-symbols/svg-400/rounded/account_circle.svg"; import Delete from "@material-symbols/svg-400/rounded/delete.svg"; -import MoreVert from "@material-symbols/svg-400/rounded/more_vert.svg"; -import Verifed from "@material-symbols/svg-400/rounded/verified_user.svg"; import Unverifed from "@material-symbols/svg-400/rounded/gpp_bad.svg"; +import MoreVert from "@material-symbols/svg-400/rounded/more_vert.svg"; import Admin from "@material-symbols/svg-400/rounded/shield_person.svg"; +import Verifed from "@material-symbols/svg-400/rounded/verified_user.svg"; import { useMutation, useQueryClient } from "@tanstack/react-query"; export const UserGrid = ({ diff --git a/front/packages/ui/src/browse/grid.tsx b/front/packages/ui/src/browse/grid.tsx index 5929bf54..648dc136 100644 --- a/front/packages/ui/src/browse/grid.tsx +++ b/front/packages/ui/src/browse/grid.tsx @@ -20,22 +20,22 @@ import { type KyooImage, WatchStatusV } from "@kyoo/models"; import { - Link, - Skeleton, - ts, - focusReset, - P, - SubP, - PosterBackground, Icon, + Link, + P, + PosterBackground, + Skeleton, + SubP, + focusReset, important, + ts, } from "@kyoo/primitives"; -import { type ImageStyle, Platform, View } from "react-native"; -import { max, percent, px, rem, type Stylable, type Theme, useYoshiki } from "yoshiki/native"; -import type { Layout, WithLoading } from "../fetch"; import Done from "@material-symbols/svg-400/rounded/done-fill.svg"; -import { ItemContext } from "../components/context-menus"; import { useState } from "react"; +import { type ImageStyle, Platform, View } from "react-native"; +import { type Stylable, type Theme, max, percent, px, rem, useYoshiki } from "yoshiki/native"; +import { ItemContext } from "../components/context-menus"; +import type { Layout, WithLoading } from "../fetch"; export const ItemWatchStatus = ({ watchStatus, diff --git a/front/packages/ui/src/browse/header.tsx b/front/packages/ui/src/browse/header.tsx index 5229ca9e..e5e25e15 100644 --- a/front/packages/ui/src/browse/header.tsx +++ b/front/packages/ui/src/browse/header.tsx @@ -29,17 +29,17 @@ import { tooltip, ts, } from "@kyoo/primitives"; -import { useTranslation } from "react-i18next"; -import { useYoshiki } from "yoshiki/native"; -import Style from "@material-symbols/svg-400/rounded/style.svg"; -import GridView from "@material-symbols/svg-400/rounded/grid_view.svg"; -import ViewList from "@material-symbols/svg-400/rounded/view_list.svg"; -import Sort from "@material-symbols/svg-400/rounded/sort.svg"; -import ArrowUpward from "@material-symbols/svg-400/rounded/arrow_upward.svg"; import ArrowDownward from "@material-symbols/svg-400/rounded/arrow_downward.svg"; -import { Layout, SearchSort, SortOrd } from "./types"; +import ArrowUpward from "@material-symbols/svg-400/rounded/arrow_upward.svg"; +import GridView from "@material-symbols/svg-400/rounded/grid_view.svg"; +import Sort from "@material-symbols/svg-400/rounded/sort.svg"; +import Style from "@material-symbols/svg-400/rounded/style.svg"; +import ViewList from "@material-symbols/svg-400/rounded/view_list.svg"; import { forwardRef } from "react"; -import { View, type PressableProps } from "react-native"; +import { useTranslation } from "react-i18next"; +import { type PressableProps, View } from "react-native"; +import { useYoshiki } from "yoshiki/native"; +import { Layout, SearchSort, SortOrd } from "./types"; const SortTrigger = forwardRef(function SortTrigger( { sortKey, ...props }, diff --git a/front/packages/ui/src/browse/index.tsx b/front/packages/ui/src/browse/index.tsx index a5816ce4..9b038f69 100644 --- a/front/packages/ui/src/browse/index.tsx +++ b/front/packages/ui/src/browse/index.tsx @@ -19,21 +19,21 @@ */ import { - type QueryIdentifier, - type QueryPage, type LibraryItem, LibraryItemP, + type QueryIdentifier, + type QueryPage, getDisplayDate, } from "@kyoo/models"; import { type ComponentProps, useState } from "react"; import { createParam } from "solito"; -import { DefaultLayout } from "../layout"; import type { WithLoading } from "../fetch"; import { InfiniteFetch } from "../fetch-infinite"; +import { DefaultLayout } from "../layout"; import { ItemGrid } from "./grid"; -import { ItemList } from "./list"; -import { SortBy, SortOrd, Layout } from "./types"; import { BrowseSettings } from "./header"; +import { ItemList } from "./list"; +import { Layout, SortBy, SortOrd } from "./types"; const { useParam } = createParam<{ sortBy?: string }>(); diff --git a/front/packages/ui/src/browse/list.tsx b/front/packages/ui/src/browse/list.tsx index 1bb49b54..699d1868 100644 --- a/front/packages/ui/src/browse/list.tsx +++ b/front/packages/ui/src/browse/list.tsx @@ -20,22 +20,22 @@ import type { KyooImage, WatchStatusV } from "@kyoo/models"; import { + Heading, + ImageBackground, Link, P, - Skeleton, - ts, - ImageBackground, - Heading, PosterBackground, + Skeleton, imageBorderRadius, important, + ts, } from "@kyoo/primitives"; import { useState } from "react"; import { Platform, View } from "react-native"; import { percent, px, rem, useYoshiki } from "yoshiki/native"; +import { ItemContext } from "../components/context-menus"; import type { Layout, WithLoading } from "../fetch"; import { ItemWatchStatus } from "./grid"; -import { ItemContext } from "../components/context-menus"; export const ItemList = ({ href, diff --git a/front/packages/ui/src/collection/index.tsx b/front/packages/ui/src/collection/index.tsx index f84e7ef6..8aa17a12 100644 --- a/front/packages/ui/src/collection/index.tsx +++ b/front/packages/ui/src/collection/index.tsx @@ -27,18 +27,18 @@ import { type QueryPage, getDisplayDate, } from "@kyoo/models"; -import { Header as ShowHeader, TitleLine } from "../details/header"; import { Container, Head, ImageBackground, P, Skeleton, ts, usePageStyle } from "@kyoo/primitives"; -import { percent, px, useYoshiki } from "yoshiki/native"; -import { useTranslation } from "react-i18next"; import { forwardRef } from "react"; +import { useTranslation } from "react-i18next"; import { Platform, View, type ViewProps } from "react-native"; +import { percent, px, useYoshiki } from "yoshiki/native"; +import { ItemGrid } from "../browse/grid"; +import { Header as ShowHeader, TitleLine } from "../details/header"; +import { SvgWave } from "../details/show"; import { Fetch } from "../fetch"; import { InfiniteFetch } from "../fetch-infinite"; -import { DefaultLayout } from "../layout"; import { ItemDetails } from "../home/recommended"; -import { SvgWave } from "../details/show"; -import { ItemGrid } from "../browse/grid"; +import { DefaultLayout } from "../layout"; const Header = ({ slug }: { slug: string }) => { const { css } = useYoshiki(); diff --git a/front/packages/ui/src/components/media-info.tsx b/front/packages/ui/src/components/media-info.tsx index e1b83202..ae7d9099 100644 --- a/front/packages/ui/src/components/media-info.tsx +++ b/front/packages/ui/src/components/media-info.tsx @@ -26,11 +26,11 @@ import { WatchInfoP, } from "@kyoo/models"; import { Button, HR, P, Popup, Skeleton } from "@kyoo/primitives"; -import { Fetch } from "../fetch"; +import { Fragment } from "react"; import { useTranslation } from "react-i18next"; import { View } from "react-native"; import { useYoshiki } from "yoshiki/native"; -import { Fragment } from "react"; +import { Fetch } from "../fetch"; const MediaInfoTable = ({ mediaInfo: { path, video, container, audios, subtitles, duration, size }, diff --git a/front/packages/ui/src/components/rating.tsx b/front/packages/ui/src/components/rating.tsx index 571a37d0..56b5576c 100644 --- a/front/packages/ui/src/components/rating.tsx +++ b/front/packages/ui/src/components/rating.tsx @@ -19,8 +19,8 @@ */ import { type Breakpoint, Icon, P, Skeleton, ts } from "@kyoo/primitives"; -import { View } from "react-native"; import Star from "@material-symbols/svg-400/rounded/star-fill.svg"; +import { View } from "react-native"; import { rem, useYoshiki } from "yoshiki/native"; export const Rating = ({ rating, color }: { rating?: number; color: Breakpoint }) => { diff --git a/front/packages/ui/src/components/watchlist-info.tsx b/front/packages/ui/src/components/watchlist-info.tsx index 45c6a0d3..297bbc01 100644 --- a/front/packages/ui/src/components/watchlist-info.tsx +++ b/front/packages/ui/src/components/watchlist-info.tsx @@ -18,15 +18,15 @@ * along with Kyoo. If not, see . */ +import { WatchStatusV, queryFn, useAccount } from "@kyoo/models"; import { IconButton, Menu, tooltip } from "@kyoo/primitives"; -import type { ComponentProps } from "react"; -import { useTranslation } from "react-i18next"; -import BookmarkAdd from "@material-symbols/svg-400/rounded/bookmark_add.svg"; import Bookmark from "@material-symbols/svg-400/rounded/bookmark-fill.svg"; +import BookmarkAdd from "@material-symbols/svg-400/rounded/bookmark_add.svg"; import BookmarkAdded from "@material-symbols/svg-400/rounded/bookmark_added-fill.svg"; import BookmarkRemove from "@material-symbols/svg-400/rounded/bookmark_remove.svg"; import { useMutation, useQueryClient } from "@tanstack/react-query"; -import { WatchStatusV, queryFn, useAccount } from "@kyoo/models"; +import type { ComponentProps } from "react"; +import { useTranslation } from "react-i18next"; export const watchListIcon = (status: WatchStatusV | null) => { switch (status) { diff --git a/front/packages/ui/src/details/episode.tsx b/front/packages/ui/src/details/episode.tsx index e7f129c3..fe928b4c 100644 --- a/front/packages/ui/src/details/episode.tsx +++ b/front/packages/ui/src/details/episode.tsx @@ -18,30 +18,30 @@ * along with Kyoo. If not, see . */ +import { type KyooImage, WatchStatusV } from "@kyoo/models"; import { - focusReset, H6, IconButton, ImageBackground, type ImageProps, - important, Link, P, Skeleton, SubP, + focusReset, + important, tooltip, ts, } from "@kyoo/primitives"; +import ExpandLess from "@material-symbols/svg-400/rounded/expand_less-fill.svg"; +import ExpandMore from "@material-symbols/svg-400/rounded/expand_more-fill.svg"; +import { useState } from "react"; import { useTranslation } from "react-i18next"; import { type ImageStyle, Platform, type PressableProps, View } from "react-native"; -import type { Layout, WithLoading } from "../fetch"; -import { percent, rem, type Stylable, type Theme, useYoshiki } from "yoshiki/native"; -import { type KyooImage, WatchStatusV } from "@kyoo/models"; +import { type Stylable, type Theme, percent, rem, useYoshiki } from "yoshiki/native"; import { ItemProgress } from "../browse/grid"; import { EpisodesContext } from "../components/context-menus"; -import { useState } from "react"; -import ExpandMore from "@material-symbols/svg-400/rounded/expand_more-fill.svg"; -import ExpandLess from "@material-symbols/svg-400/rounded/expand_less-fill.svg"; +import type { Layout, WithLoading } from "../fetch"; export const episodeDisplayNumber = ( episode: { diff --git a/front/packages/ui/src/details/movie.tsx b/front/packages/ui/src/details/movie.tsx index faf54b39..e3f54843 100644 --- a/front/packages/ui/src/details/movie.tsx +++ b/front/packages/ui/src/details/movie.tsx @@ -19,12 +19,12 @@ */ import { type Movie, MovieP, type QueryIdentifier, type QueryPage } from "@kyoo/models"; +import { usePageStyle } from "@kyoo/primitives"; import { Platform, ScrollView } from "react-native"; import { useYoshiki } from "yoshiki/native"; import { DefaultLayout } from "../layout"; -import { Header } from "./header"; import { DetailsCollections } from "./collection"; -import { usePageStyle } from "@kyoo/primitives"; +import { Header } from "./header"; const query = (slug: string): QueryIdentifier => ({ parser: MovieP, diff --git a/front/packages/ui/src/details/season.tsx b/front/packages/ui/src/details/season.tsx index 8af67eea..8150f71e 100644 --- a/front/packages/ui/src/details/season.tsx +++ b/front/packages/ui/src/details/season.tsx @@ -26,14 +26,14 @@ import { SeasonP, useInfiniteFetch, } from "@kyoo/models"; -import { Skeleton, H6, HR, P, ts, Menu, IconButton, tooltip, usePageStyle } from "@kyoo/primitives"; -import { rem, useYoshiki } from "yoshiki/native"; -import { View } from "react-native"; -import { InfiniteFetch } from "../fetch-infinite"; -import { episodeDisplayNumber, EpisodeLine } from "./episode"; -import { useTranslation } from "react-i18next"; -import type { ComponentType } from "react"; +import { H6, HR, IconButton, Menu, P, Skeleton, tooltip, ts, usePageStyle } from "@kyoo/primitives"; import MenuIcon from "@material-symbols/svg-400/rounded/menu-fill.svg"; +import type { ComponentType } from "react"; +import { useTranslation } from "react-i18next"; +import { View } from "react-native"; +import { rem, useYoshiki } from "yoshiki/native"; +import { InfiniteFetch } from "../fetch-infinite"; +import { EpisodeLine, episodeDisplayNumber } from "./episode"; type SeasonProcessed = Season & { href: string }; diff --git a/front/packages/ui/src/details/show.tsx b/front/packages/ui/src/details/show.tsx index edf07476..741e211a 100644 --- a/front/packages/ui/src/details/show.tsx +++ b/front/packages/ui/src/details/show.tsx @@ -25,17 +25,17 @@ import { ShowP, type ShowWatchStatus, } from "@kyoo/models"; -import { Platform, View, type ViewProps } from "react-native"; -import { percent, useYoshiki } from "yoshiki/native"; -import { DefaultLayout } from "../layout"; -import { EpisodeList, SeasonHeader } from "./season"; -import { Header } from "./header"; -import Svg, { Path, type SvgProps } from "react-native-svg"; import { Container, H2, SwitchVariant, focusReset, ts } from "@kyoo/primitives"; import { forwardRef, useState } from "react"; +import { useTranslation } from "react-i18next"; +import { Platform, View, type ViewProps } from "react-native"; +import Svg, { Path, type SvgProps } from "react-native-svg"; +import { percent, useYoshiki } from "yoshiki/native"; +import { DefaultLayout } from "../layout"; import { DetailsCollections } from "./collection"; import { EpisodeLine, episodeDisplayNumber } from "./episode"; -import { useTranslation } from "react-i18next"; +import { Header } from "./header"; +import { EpisodeList, SeasonHeader } from "./season"; export const SvgWave = (props: SvgProps) => { const { css } = useYoshiki(); diff --git a/front/packages/ui/src/downloads/index.web.tsx b/front/packages/ui/src/downloads/index.web.tsx index 1be1a720..b85ce946 100644 --- a/front/packages/ui/src/downloads/index.web.tsx +++ b/front/packages/ui/src/downloads/index.web.tsx @@ -19,9 +19,9 @@ */ import { type WatchInfo, getCurrentApiUrl, queryFn, toQueryKey } from "@kyoo/models"; -import { Player } from "../player"; import { getCurrentAccount } from "@kyoo/models/src/account-internal"; import type { ReactNode } from "react"; +import { Player } from "../player"; export const useDownloader = () => { return async (type: "episode" | "movie", slug: string) => { diff --git a/front/packages/ui/src/downloads/page.tsx b/front/packages/ui/src/downloads/page.tsx index 79e227dc..3439c4e5 100644 --- a/front/packages/ui/src/downloads/page.tsx +++ b/front/packages/ui/src/downloads/page.tsx @@ -18,9 +18,7 @@ * along with Kyoo. If not, see . */ -import { type State, downloadAtom } from "./state"; -import { FlashList } from "@shopify/flash-list"; -import { type ImageStyle, View } from "react-native"; +import type { KyooImage } from "@kyoo/models"; import { Alert, H6, @@ -34,17 +32,19 @@ import { ts, usePageStyle, } from "@kyoo/primitives"; -import { EpisodeLine, displayRuntime, episodeDisplayNumber } from "../details/episode"; -import { useTranslation } from "react-i18next"; -import { EmptyView } from "../fetch"; -import { percent, useYoshiki } from "yoshiki/native"; -import type { KyooImage } from "@kyoo/models"; -import { type Atom, useAtomValue } from "jotai"; import DownloadForOffline from "@material-symbols/svg-400/rounded/download_for_offline.svg"; import Downloading from "@material-symbols/svg-400/rounded/downloading.svg"; import ErrorIcon from "@material-symbols/svg-400/rounded/error.svg"; import NotStarted from "@material-symbols/svg-400/rounded/not_started.svg"; +import { FlashList } from "@shopify/flash-list"; import { useRouter } from "expo-router"; +import { type Atom, useAtomValue } from "jotai"; +import { useTranslation } from "react-i18next"; +import { type ImageStyle, View } from "react-native"; +import { percent, useYoshiki } from "yoshiki/native"; +import { EpisodeLine, displayRuntime, episodeDisplayNumber } from "../details/episode"; +import { EmptyView } from "../fetch"; +import { type State, downloadAtom } from "./state"; const DownloadedItem = ({ name, diff --git a/front/packages/ui/src/downloads/state.tsx b/front/packages/ui/src/downloads/state.tsx index 10046d6c..d463293e 100644 --- a/front/packages/ui/src/downloads/state.tsx +++ b/front/packages/ui/src/downloads/state.tsx @@ -21,7 +21,6 @@ import RNBackgroundDownloader, { type DownloadTask, } from "@kesha-antonov/react-native-background-downloader"; -import { deleteAsync } from "expo-file-system"; import { type Account, type Episode, @@ -34,14 +33,15 @@ import { queryFn, toQueryKey, } from "@kyoo/models"; -import { Player } from "../player"; -import { atom, useSetAtom, type PrimitiveAtom, useStore } from "jotai"; import { getCurrentAccount, storage } from "@kyoo/models/src/account-internal"; +import { type QueryClient, useQueryClient } from "@tanstack/react-query"; +import { deleteAsync } from "expo-file-system"; +import type { Router } from "expo-router/build/types"; +import { type PrimitiveAtom, atom, useSetAtom, useStore } from "jotai"; import { type ReactNode, useEffect } from "react"; import { ToastAndroid } from "react-native"; -import { type QueryClient, useQueryClient } from "@tanstack/react-query"; -import type { Router } from "expo-router/build/types"; import { z } from "zod"; +import { Player } from "../player"; export type State = { status: "DOWNLOADING" | "PAUSED" | "DONE" | "FAILED" | "STOPPED"; diff --git a/front/packages/ui/src/errors/connection.tsx b/front/packages/ui/src/errors/connection.tsx index 94095364..b7a61ebb 100644 --- a/front/packages/ui/src/errors/connection.tsx +++ b/front/packages/ui/src/errors/connection.tsx @@ -20,13 +20,13 @@ import { ConnectionErrorContext, useAccount } from "@kyoo/models"; import { Button, H1, Icon, Link, P, ts } from "@kyoo/primitives"; -import { useRouter } from "solito/router"; +import Register from "@material-symbols/svg-400/rounded/app_registration.svg"; import { useContext } from "react"; import { useTranslation } from "react-i18next"; import { View } from "react-native"; +import { useRouter } from "solito/router"; import { useYoshiki } from "yoshiki/native"; import { DefaultLayout } from "../layout"; -import Register from "@material-symbols/svg-400/rounded/app_registration.svg"; export const ConnectionError = () => { const { css } = useYoshiki(); diff --git a/front/packages/ui/src/fetch-infinite.tsx b/front/packages/ui/src/fetch-infinite.tsx index 2817b573..413f4558 100644 --- a/front/packages/ui/src/fetch-infinite.tsx +++ b/front/packages/ui/src/fetch-infinite.tsx @@ -19,18 +19,18 @@ */ import { type Page, type QueryIdentifier, useInfiniteFetch } from "@kyoo/models"; -import { useBreakpointMap, HR } from "@kyoo/primitives"; +import { HR, useBreakpointMap } from "@kyoo/primitives"; import { type ContentStyle, FlashList } from "@shopify/flash-list"; import { type ComponentProps, type ComponentType, - isValidElement, type ReactElement, + isValidElement, useRef, } from "react"; -import { EmptyView, type Layout, OfflineView, type WithLoading, addHeader } from "./fetch"; -import { ErrorView } from "./errors"; import { FlatList, View, type ViewStyle } from "react-native"; +import { ErrorView } from "./errors"; +import { EmptyView, type Layout, OfflineView, type WithLoading, addHeader } from "./fetch"; const emulateGap = ( layout: "grid" | "vertical" | "horizontal", diff --git a/front/packages/ui/src/fetch-infinite.web.tsx b/front/packages/ui/src/fetch-infinite.web.tsx index 19c786f0..900d3a5f 100644 --- a/front/packages/ui/src/fetch-infinite.web.tsx +++ b/front/packages/ui/src/fetch-infinite.web.tsx @@ -20,20 +20,20 @@ import { type Page, type QueryIdentifier, useInfiniteFetch } from "@kyoo/models"; import { HR } from "@kyoo/primitives"; +import type { ContentStyle } from "@shopify/flash-list"; import { type ComponentProps, type ComponentType, Fragment, - isValidElement, type ReactElement, + isValidElement, useCallback, useEffect, useRef, } from "react"; import { type Stylable, nativeStyleToCss, useYoshiki, ysMap } from "yoshiki"; -import { EmptyView, type Layout, type WithLoading, addHeader } from "./fetch"; import { ErrorView } from "./errors"; -import type { ContentStyle } from "@shopify/flash-list"; +import { EmptyView, type Layout, type WithLoading, addHeader } from "./fetch"; const InfiniteScroll = ({ children, diff --git a/front/packages/ui/src/home/genre.tsx b/front/packages/ui/src/home/genre.tsx index 3ce8351e..4deba79c 100644 --- a/front/packages/ui/src/home/genre.tsx +++ b/front/packages/ui/src/home/genre.tsx @@ -27,12 +27,12 @@ import { } from "@kyoo/models"; import { H3, ts } from "@kyoo/primitives"; import { useRef } from "react"; +import { useTranslation } from "react-i18next"; import { View } from "react-native"; import { useYoshiki } from "yoshiki/native"; +import { itemMap } from "../browse"; import { ItemGrid } from "../browse/grid"; import { InfiniteFetchList } from "../fetch-infinite"; -import { useTranslation } from "react-i18next"; -import { itemMap } from "../browse"; export const Header = ({ title }: { title: string }) => { const { css } = useYoshiki(); diff --git a/front/packages/ui/src/home/header.tsx b/front/packages/ui/src/home/header.tsx index a99793f3..f26e2e13 100644 --- a/front/packages/ui/src/home/header.tsx +++ b/front/packages/ui/src/home/header.tsx @@ -31,13 +31,13 @@ import { tooltip, ts, } from "@kyoo/primitives"; +import Info from "@material-symbols/svg-400/rounded/info.svg"; +import PlayArrow from "@material-symbols/svg-400/rounded/play_arrow-fill.svg"; +import { useTranslation } from "react-i18next"; import { View } from "react-native"; import { percent, rem, useYoshiki } from "yoshiki/native"; -import type { WithLoading } from "../fetch"; import { Header as DetailsHeader } from "../details/header"; -import { useTranslation } from "react-i18next"; -import PlayArrow from "@material-symbols/svg-400/rounded/play_arrow-fill.svg"; -import Info from "@material-symbols/svg-400/rounded/info.svg"; +import type { WithLoading } from "../fetch"; export const Header = ({ isLoading, diff --git a/front/packages/ui/src/home/index.tsx b/front/packages/ui/src/home/index.tsx index e7b95a7b..5ffff2db 100644 --- a/front/packages/ui/src/home/index.tsx +++ b/front/packages/ui/src/home/index.tsx @@ -19,17 +19,17 @@ */ import { Genre, type QueryPage, toQueryKey } from "@kyoo/models"; -import { Fetch } from "../fetch"; -import { Header } from "./header"; -import { DefaultLayout } from "../layout"; -import { RefreshControl, ScrollView } from "react-native"; -import { GenreGrid } from "./genre"; -import { Recommended } from "./recommended"; -import { VerticalRecommended } from "./vertical"; -import { NewsList } from "./news"; -import { WatchlistList } from "./watchlist"; import { useQueryClient } from "@tanstack/react-query"; import { useState } from "react"; +import { RefreshControl, ScrollView } from "react-native"; +import { Fetch } from "../fetch"; +import { DefaultLayout } from "../layout"; +import { GenreGrid } from "./genre"; +import { Header } from "./header"; +import { NewsList } from "./news"; +import { Recommended } from "./recommended"; +import { VerticalRecommended } from "./vertical"; +import { WatchlistList } from "./watchlist"; export const HomePage: QueryPage<{}, Genre> = ({ randomItems }) => { const queryClient = useQueryClient(); diff --git a/front/packages/ui/src/home/news.tsx b/front/packages/ui/src/home/news.tsx index f4cdab33..bb8295e9 100644 --- a/front/packages/ui/src/home/news.tsx +++ b/front/packages/ui/src/home/news.tsx @@ -19,12 +19,12 @@ */ import { type News, NewsP, type QueryIdentifier, getDisplayDate } from "@kyoo/models"; -import { ItemGrid } from "../browse/grid"; -import { InfiniteFetch } from "../fetch-infinite"; import { useTranslation } from "react-i18next"; -import { Header } from "./genre"; -import { EpisodeBox, episodeDisplayNumber } from "../details/episode"; import { useYoshiki } from "yoshiki/native"; +import { ItemGrid } from "../browse/grid"; +import { EpisodeBox, episodeDisplayNumber } from "../details/episode"; +import { InfiniteFetch } from "../fetch-infinite"; +import { Header } from "./genre"; export const NewsList = () => { const { t } = useTranslation(); diff --git a/front/packages/ui/src/home/recommended.tsx b/front/packages/ui/src/home/recommended.tsx index 47827fd5..0236afb8 100644 --- a/front/packages/ui/src/home/recommended.tsx +++ b/front/packages/ui/src/home/recommended.tsx @@ -31,25 +31,25 @@ import { Chip, H3, IconFab, - imageBorderRadius, Link, P, PosterBackground, Skeleton, SubP, focusReset, + imageBorderRadius, tooltip, ts, } from "@kyoo/primitives"; +import PlayArrow from "@material-symbols/svg-400/rounded/play_arrow-fill.svg"; +import { useState } from "react"; import { useTranslation } from "react-i18next"; import { ScrollView, View } from "react-native"; import { type Theme, calc, percent, px, rem, useYoshiki } from "yoshiki/native"; +import { ItemGrid, ItemWatchStatus } from "../browse/grid"; +import { ItemContext } from "../components/context-menus"; import type { Layout, WithLoading } from "../fetch"; import { InfiniteFetch } from "../fetch-infinite"; -import PlayArrow from "@material-symbols/svg-400/rounded/play_arrow-fill.svg"; -import { ItemGrid, ItemWatchStatus } from "../browse/grid"; -import { useState } from "react"; -import { ItemContext } from "../components/context-menus"; export const ItemDetails = ({ isLoading, diff --git a/front/packages/ui/src/home/vertical.tsx b/front/packages/ui/src/home/vertical.tsx index 96343906..813734ca 100644 --- a/front/packages/ui/src/home/vertical.tsx +++ b/front/packages/ui/src/home/vertical.tsx @@ -20,13 +20,13 @@ import { type LibraryItem, LibraryItemP, type QueryIdentifier } from "@kyoo/models"; import { H3 } from "@kyoo/primitives"; +import { useTranslation } from "react-i18next"; import { View } from "react-native"; import { useYoshiki } from "yoshiki/native"; -import { InfiniteFetch } from "../fetch-infinite"; -import { ItemList } from "../browse/list"; -import { useTranslation } from "react-i18next"; -import { ItemGrid } from "../browse/grid"; import { itemMap } from "../browse"; +import { ItemGrid } from "../browse/grid"; +import { ItemList } from "../browse/list"; +import { InfiniteFetch } from "../fetch-infinite"; export const VerticalRecommended = () => { const { t } = useTranslation(); diff --git a/front/packages/ui/src/home/watchlist.tsx b/front/packages/ui/src/home/watchlist.tsx index 97fff5b2..fa2e695e 100644 --- a/front/packages/ui/src/home/watchlist.tsx +++ b/front/packages/ui/src/home/watchlist.tsx @@ -25,14 +25,14 @@ import { getDisplayDate, useAccount, } from "@kyoo/models"; +import { Button, P, ts } from "@kyoo/primitives"; +import { useTranslation } from "react-i18next"; +import { View } from "react-native"; import { useYoshiki } from "yoshiki/native"; import { ItemGrid } from "../browse/grid"; -import { InfiniteFetch } from "../fetch-infinite"; -import { useTranslation } from "react-i18next"; -import { Header } from "./genre"; import { EpisodeBox, episodeDisplayNumber } from "../details/episode"; -import { View } from "react-native"; -import { Button, P, ts } from "@kyoo/primitives"; +import { InfiniteFetch } from "../fetch-infinite"; +import { Header } from "./genre"; export const WatchlistList = () => { const { t } = useTranslation(); diff --git a/front/packages/ui/src/layout.tsx b/front/packages/ui/src/layout.tsx index 0e111eb4..6be5c510 100644 --- a/front/packages/ui/src/layout.tsx +++ b/front/packages/ui/src/layout.tsx @@ -18,10 +18,10 @@ * along with Kyoo. If not, see . */ -import type { ReactElement } from "react"; -import { Navbar } from "./navbar"; -import { useYoshiki, vw } from "yoshiki/native"; import { Main } from "@kyoo/primitives"; +import type { ReactElement } from "react"; +import { useYoshiki, vw } from "yoshiki/native"; +import { Navbar } from "./navbar"; export const DefaultLayout = ({ page, diff --git a/front/packages/ui/src/login/form.tsx b/front/packages/ui/src/login/form.tsx index 665ec10e..a85f6047 100644 --- a/front/packages/ui/src/login/form.tsx +++ b/front/packages/ui/src/login/form.tsx @@ -21,9 +21,9 @@ import { imageFn } from "@kyoo/models"; import { ts } from "@kyoo/primitives"; import type { ReactNode } from "react"; -import { ScrollView, ImageBackground, type ImageProps, Platform, View } from "react-native"; +import { ImageBackground, type ImageProps, Platform, ScrollView, View } from "react-native"; import Svg, { type SvgProps, Path } from "react-native-svg"; -import { min, px, type Stylable, useYoshiki, vh } from "yoshiki/native"; +import { type Stylable, min, px, useYoshiki, vh } from "yoshiki/native"; const SvgBlob = (props: SvgProps) => { const { css, theme } = useYoshiki(); diff --git a/front/packages/ui/src/login/login.tsx b/front/packages/ui/src/login/login.tsx index 60256229..9a53710c 100644 --- a/front/packages/ui/src/login/login.tsx +++ b/front/packages/ui/src/login/login.tsx @@ -18,18 +18,18 @@ * along with Kyoo. If not, see . */ -import { login, type QueryPage } from "@kyoo/models"; -import { Button, P, Input, ts, H1, A } from "@kyoo/primitives"; +import { type QueryPage, login } from "@kyoo/models"; +import { A, Button, H1, Input, P, ts } from "@kyoo/primitives"; import { useEffect, useState } from "react"; import { useTranslation } from "react-i18next"; import { Trans } from "react-i18next"; +import { Platform } from "react-native"; import { useRouter } from "solito/router"; import { percent, px, useYoshiki } from "yoshiki/native"; import { DefaultLayout } from "../layout"; import { FormPage } from "./form"; -import { PasswordInput } from "./password-input"; import { OidcLogin } from "./oidc"; -import { Platform } from "react-native"; +import { PasswordInput } from "./password-input"; export const LoginPage: QueryPage<{ apiUrl?: string; error?: string }> = ({ apiUrl, diff --git a/front/packages/ui/src/login/oidc.tsx b/front/packages/ui/src/login/oidc.tsx index 81a9c546..1f06ad5a 100644 --- a/front/packages/ui/src/login/oidc.tsx +++ b/front/packages/ui/src/login/oidc.tsx @@ -27,11 +27,11 @@ import { useFetch, } from "@kyoo/models"; import { Button, HR, Link, P, Skeleton, ts } from "@kyoo/primitives"; -import { View, ImageBackground } from "react-native"; -import { percent, rem, useYoshiki } from "yoshiki/native"; -import { useTranslation } from "react-i18next"; import { useEffect, useRef } from "react"; +import { useTranslation } from "react-i18next"; +import { ImageBackground, View } from "react-native"; import { useRouter } from "solito/router"; +import { percent, rem, useYoshiki } from "yoshiki/native"; import { ErrorView } from "../errors"; export const OidcLogin = ({ apiUrl }: { apiUrl?: string }) => { diff --git a/front/packages/ui/src/login/password-input.tsx b/front/packages/ui/src/login/password-input.tsx index 33802424..3cc55945 100644 --- a/front/packages/ui/src/login/password-input.tsx +++ b/front/packages/ui/src/login/password-input.tsx @@ -19,10 +19,10 @@ */ import { IconButton, Input } from "@kyoo/primitives"; -import { type ComponentProps, useState } from "react"; -import { px, useYoshiki } from "yoshiki/native"; import Visibility from "@material-symbols/svg-400/rounded/visibility-fill.svg"; import VisibilityOff from "@material-symbols/svg-400/rounded/visibility_off-fill.svg"; +import { type ComponentProps, useState } from "react"; +import { px, useYoshiki } from "yoshiki/native"; export const PasswordInput = (props: ComponentProps) => { const { css } = useYoshiki(); diff --git a/front/packages/ui/src/login/register.tsx b/front/packages/ui/src/login/register.tsx index 4f8e2cb4..23d2c772 100644 --- a/front/packages/ui/src/login/register.tsx +++ b/front/packages/ui/src/login/register.tsx @@ -18,18 +18,18 @@ * along with Kyoo. If not, see . */ -import { login, type QueryPage } from "@kyoo/models"; -import { Button, P, Input, ts, H1, A } from "@kyoo/primitives"; +import { type QueryPage, login } from "@kyoo/models"; +import { A, Button, H1, Input, P, ts } from "@kyoo/primitives"; import { useEffect, useState } from "react"; import { useTranslation } from "react-i18next"; import { Trans } from "react-i18next"; +import { Platform } from "react-native"; import { useRouter } from "solito/router"; import { percent, px, useYoshiki } from "yoshiki/native"; import { DefaultLayout } from "../layout"; import { FormPage } from "./form"; -import { PasswordInput } from "./password-input"; import { OidcLogin } from "./oidc"; -import { Platform } from "react-native"; +import { PasswordInput } from "./password-input"; export const RegisterPage: QueryPage<{ apiUrl?: string }> = ({ apiUrl }) => { const [email, setEmail] = useState(""); diff --git a/front/packages/ui/src/login/server-url.tsx b/front/packages/ui/src/login/server-url.tsx index d38f5017..a2b6ad33 100644 --- a/front/packages/ui/src/login/server-url.tsx +++ b/front/packages/ui/src/login/server-url.tsx @@ -25,7 +25,7 @@ import { ServerInfoP, useFetch, } from "@kyoo/models"; -import { Button, P, Link, Input, ts, H1, HR } from "@kyoo/primitives"; +import { Button, H1, HR, Input, Link, P, ts } from "@kyoo/primitives"; import { useState } from "react"; import { useTranslation } from "react-i18next"; import { ImageBackground, Platform, View } from "react-native"; diff --git a/front/packages/ui/src/navbar/index.tsx b/front/packages/ui/src/navbar/index.tsx index 31c20a4f..ec001dc4 100644 --- a/front/packages/ui/src/navbar/index.tsx +++ b/front/packages/ui/src/navbar/index.tsx @@ -20,31 +20,31 @@ import { logout, useAccount, useAccounts, useHasPermission } from "@kyoo/models"; import { - Input, - IconButton, - Header, - Avatar, A, - tooltip, - ts, + Avatar, + HR, + Header, + IconButton, + Input, + Link, Menu, PressableFeedback, - HR, - Link, + tooltip, + ts, } from "@kyoo/primitives"; -import { Platform, type TextInput, View, type ViewProps } from "react-native"; +import Admin from "@material-symbols/svg-400/rounded/admin_panel_settings.svg"; +import Register from "@material-symbols/svg-400/rounded/app_registration.svg"; +import Login from "@material-symbols/svg-400/rounded/login.svg"; +import Logout from "@material-symbols/svg-400/rounded/logout.svg"; +import Search from "@material-symbols/svg-400/rounded/search-fill.svg"; +import Settings from "@material-symbols/svg-400/rounded/settings.svg"; +import { forwardRef, useEffect, useRef, useState } from "react"; import { useTranslation } from "react-i18next"; +import { Platform, type TextInput, View, type ViewProps } from "react-native"; import { useRouter } from "solito/router"; import { type Stylable, useYoshiki } from "yoshiki/native"; -import Search from "@material-symbols/svg-400/rounded/search-fill.svg"; -import Login from "@material-symbols/svg-400/rounded/login.svg"; -import Register from "@material-symbols/svg-400/rounded/app_registration.svg"; -import Logout from "@material-symbols/svg-400/rounded/logout.svg"; -import Admin from "@material-symbols/svg-400/rounded/admin_panel_settings.svg"; -import Settings from "@material-symbols/svg-400/rounded/settings.svg"; -import { KyooLongLogo } from "./icon"; -import { forwardRef, useEffect, useRef, useState } from "react"; import { AdminPage } from "../admin"; +import { KyooLongLogo } from "./icon"; export const NavbarTitle = (props: Stylable & { onLayout?: ViewProps["onLayout"] }) => { const { t } = useTranslation(); diff --git a/front/packages/ui/src/player/components/hover.tsx b/front/packages/ui/src/player/components/hover.tsx index 8c006b02..db0f8b45 100644 --- a/front/packages/ui/src/player/components/hover.tsx +++ b/front/packages/ui/src/player/components/hover.tsx @@ -18,32 +18,32 @@ * along with Kyoo. If not, see . */ +import type { Audio, Chapter, KyooImage, Subtitle } from "@kyoo/models"; import { - alpha, CircularProgress, ContrastArea, H1, H2, IconButton, - imageBorderRadius, Poster, PressableFeedback, Skeleton, Slider, Tooltip, + alpha, + imageBorderRadius, tooltip, ts, useIsTouch, } from "@kyoo/primitives"; -import type { Chapter, KyooImage, Subtitle, Audio } from "@kyoo/models"; -import { useAtomValue, useSetAtom, useAtom } from "jotai"; -import { type ImageStyle, Platform, Pressable, View, type ViewProps } from "react-native"; -import { useTranslation } from "react-i18next"; -import { percent, rem, useYoshiki } from "yoshiki/native"; -import { useRouter } from "solito/router"; import ArrowBack from "@material-symbols/svg-400/rounded/arrow_back-fill.svg"; -import { LeftButtons, TouchControls } from "./left-buttons"; -import { RightButtons } from "./right-buttons"; +import { useAtom, useAtomValue, useSetAtom } from "jotai"; +import { atom } from "jotai"; +import { type ReactNode, useCallback, useEffect, useRef, useState } from "react"; +import { useTranslation } from "react-i18next"; +import { type ImageStyle, Platform, Pressable, View, type ViewProps } from "react-native"; +import { useRouter } from "solito/router"; +import { percent, rem, useYoshiki } from "yoshiki/native"; import { bufferedAtom, durationAtom, @@ -52,8 +52,8 @@ import { playAtom, progressAtom, } from "../state"; -import { type ReactNode, useCallback, useEffect, useRef, useState } from "react"; -import { atom } from "jotai"; +import { LeftButtons, TouchControls } from "./left-buttons"; +import { RightButtons } from "./right-buttons"; import { BottomScrubber, ScrubberTooltip } from "./scrubber"; const hoverReasonAtom = atom({ diff --git a/front/packages/ui/src/player/components/left-buttons.tsx b/front/packages/ui/src/player/components/left-buttons.tsx index e8512793..e92c733b 100644 --- a/front/packages/ui/src/player/components/left-buttons.tsx +++ b/front/packages/ui/src/player/components/left-buttons.tsx @@ -19,19 +19,19 @@ */ import { IconButton, Link, P, Slider, noTouch, tooltip, touchOnly, ts } from "@kyoo/primitives"; +import Pause from "@material-symbols/svg-400/rounded/pause-fill.svg"; +import PlayArrow from "@material-symbols/svg-400/rounded/play_arrow-fill.svg"; +import SkipNext from "@material-symbols/svg-400/rounded/skip_next-fill.svg"; +import SkipPrevious from "@material-symbols/svg-400/rounded/skip_previous-fill.svg"; +import VolumeDown from "@material-symbols/svg-400/rounded/volume_down-fill.svg"; +import VolumeMute from "@material-symbols/svg-400/rounded/volume_mute-fill.svg"; +import VolumeOff from "@material-symbols/svg-400/rounded/volume_off-fill.svg"; +import VolumeUp from "@material-symbols/svg-400/rounded/volume_up-fill.svg"; import { useAtom, useAtomValue } from "jotai"; import { useTranslation } from "react-i18next"; import { Platform, View } from "react-native"; -import SkipPrevious from "@material-symbols/svg-400/rounded/skip_previous-fill.svg"; -import SkipNext from "@material-symbols/svg-400/rounded/skip_next-fill.svg"; -import PlayArrow from "@material-symbols/svg-400/rounded/play_arrow-fill.svg"; -import Pause from "@material-symbols/svg-400/rounded/pause-fill.svg"; -import VolumeOff from "@material-symbols/svg-400/rounded/volume_off-fill.svg"; -import VolumeMute from "@material-symbols/svg-400/rounded/volume_mute-fill.svg"; -import VolumeDown from "@material-symbols/svg-400/rounded/volume_down-fill.svg"; -import VolumeUp from "@material-symbols/svg-400/rounded/volume_up-fill.svg"; -import { durationAtom, mutedAtom, playAtom, progressAtom, volumeAtom } from "../state"; import { type Stylable, px, useYoshiki } from "yoshiki/native"; +import { durationAtom, mutedAtom, playAtom, progressAtom, volumeAtom } from "../state"; import { HoverTouch, hoverAtom } from "./hover"; export const LeftButtons = ({ diff --git a/front/packages/ui/src/player/components/right-buttons.tsx b/front/packages/ui/src/player/components/right-buttons.tsx index fbe81036..28ecb01f 100644 --- a/front/packages/ui/src/player/components/right-buttons.tsx +++ b/front/packages/ui/src/player/components/right-buttons.tsx @@ -19,15 +19,15 @@ */ import type { Audio, Subtitle } from "@kyoo/models"; -import { IconButton, tooltip, Menu, ts } from "@kyoo/primitives"; -import { useAtom } from "jotai"; -import { Platform, View } from "react-native"; -import { useTranslation } from "react-i18next"; +import { IconButton, Menu, tooltip, ts } from "@kyoo/primitives"; import ClosedCaption from "@material-symbols/svg-400/rounded/closed_caption-fill.svg"; import Fullscreen from "@material-symbols/svg-400/rounded/fullscreen-fill.svg"; import FullscreenExit from "@material-symbols/svg-400/rounded/fullscreen_exit-fill.svg"; -import SettingsIcon from "@material-symbols/svg-400/rounded/settings-fill.svg"; import MusicNote from "@material-symbols/svg-400/rounded/music_note-fill.svg"; +import SettingsIcon from "@material-symbols/svg-400/rounded/settings-fill.svg"; +import { useAtom } from "jotai"; +import { useTranslation } from "react-i18next"; +import { Platform, View } from "react-native"; import { type Stylable, useYoshiki } from "yoshiki/native"; import { fullscreenAtom, subtitleAtom } from "../state"; import { AudiosMenu, QualitiesMenu } from "../video"; diff --git a/front/packages/ui/src/player/components/scrubber.tsx b/front/packages/ui/src/player/components/scrubber.tsx index 1f86d542..0487cce1 100644 --- a/front/packages/ui/src/player/components/scrubber.tsx +++ b/front/packages/ui/src/player/components/scrubber.tsx @@ -18,16 +18,16 @@ * along with Kyoo. If not, see . */ -import { useFetch, type QueryIdentifier, imageFn, type Chapter } from "@kyoo/models"; -import { Sprite, P, imageBorderRadius, ts } from "@kyoo/primitives"; -import { View, Platform } from "react-native"; -import { percent, useYoshiki, px, type Theme, useForceRerender } from "yoshiki/native"; -import { useMemo } from "react"; +import { type Chapter, type QueryIdentifier, imageFn, useFetch } from "@kyoo/models"; +import { P, Sprite, imageBorderRadius, ts } from "@kyoo/primitives"; import { useAtomValue } from "jotai"; -import { durationAtom } from "../state"; -import { toTimerString } from "./left-buttons"; -import { seekProgressAtom } from "./hover"; +import { useMemo } from "react"; +import { Platform, View } from "react-native"; +import { type Theme, percent, px, useForceRerender, useYoshiki } from "yoshiki/native"; import { ErrorView } from "../../errors"; +import { durationAtom } from "../state"; +import { seekProgressAtom } from "./hover"; +import { toTimerString } from "./left-buttons"; type Thumb = { from: number; diff --git a/front/packages/ui/src/player/index.tsx b/front/packages/ui/src/player/index.tsx index 25f19139..54a1eb42 100644 --- a/front/packages/ui/src/player/index.tsx +++ b/front/packages/ui/src/player/index.tsx @@ -29,19 +29,19 @@ import { useFetch, } from "@kyoo/models"; import { Head } from "@kyoo/primitives"; -import { useState, useEffect, type ComponentProps } from "react"; -import { Platform, StyleSheet, View } from "react-native"; -import { useTranslation } from "react-i18next"; -import { useRouter } from "solito/router"; import { useSetAtom } from "jotai"; +import { type ComponentProps, useEffect, useState } from "react"; +import { useTranslation } from "react-i18next"; +import { Platform, StyleSheet, View } from "react-native"; +import { useRouter } from "solito/router"; import { useYoshiki } from "yoshiki/native"; -import { Back, Hover, LoadingIndicator } from "./components/hover"; -import { durationAtom, fullscreenAtom, Video } from "./state"; import { episodeDisplayNumber } from "../details/episode"; +import { ErrorView } from "../errors"; +import { Back, Hover, LoadingIndicator } from "./components/hover"; import { useVideoKeyboard } from "./keyboard"; import { MediaSessionManager } from "./media-session"; +import { Video, durationAtom, fullscreenAtom } from "./state"; import { WatchStatusObserver } from "./watch-status-observer"; -import { ErrorView } from "../errors"; type Item = (Movie & { type: "movie" }) | (Episode & { type: "episode" }); diff --git a/front/packages/ui/src/player/keyboard.tsx b/front/packages/ui/src/player/keyboard.tsx index f422fa58..5cd828b9 100644 --- a/front/packages/ui/src/player/keyboard.tsx +++ b/front/packages/ui/src/player/keyboard.tsx @@ -20,8 +20,9 @@ import type { Subtitle } from "@kyoo/models"; import { atom, useSetAtom } from "jotai"; -import { useRouter } from "solito/router"; import { useEffect } from "react"; +import { Platform } from "react-native"; +import { useRouter } from "solito/router"; import { durationAtom, fullscreenAtom, @@ -31,7 +32,6 @@ import { subtitleAtom, volumeAtom, } from "./state"; -import { Platform } from "react-native"; type Action = | { type: "play" } diff --git a/front/packages/ui/src/player/media-session.tsx b/front/packages/ui/src/player/media-session.tsx index fde2d3f7..07f3f588 100644 --- a/front/packages/ui/src/player/media-session.tsx +++ b/front/packages/ui/src/player/media-session.tsx @@ -19,8 +19,8 @@ */ import { useAtom, useAtomValue, useSetAtom } from "jotai"; -import { useRouter } from "solito/router"; import { useEffect } from "react"; +import { useRouter } from "solito/router"; import { reducerAtom } from "./keyboard"; import { durationAtom, playAtom, progressAtom } from "./state"; diff --git a/front/packages/ui/src/player/state.tsx b/front/packages/ui/src/player/state.tsx index ba15e01d..59394dd2 100644 --- a/front/packages/ui/src/player/state.tsx +++ b/front/packages/ui/src/player/state.tsx @@ -19,21 +19,21 @@ */ import { type Audio, type Episode, type Subtitle, getLocalSetting, useAccount } from "@kyoo/models"; +import { useSnackbar } from "@kyoo/primitives"; import { atom, useAtom, useAtomValue, useSetAtom } from "jotai"; import { useAtomCallback } from "jotai/utils"; import { type ElementRef, memo, + useCallback, useEffect, useLayoutEffect, useRef, useState, - useCallback, } from "react"; -import NativeVideo, { type VideoProps } from "./video"; -import { Platform } from "react-native"; -import { useSnackbar } from "@kyoo/primitives"; import { useTranslation } from "react-i18next"; +import { Platform } from "react-native"; +import NativeVideo, { type VideoProps } from "./video"; export const playAtom = atom(true); export const loadAtom = atom(false); diff --git a/front/packages/ui/src/player/video.tsx b/front/packages/ui/src/player/video.tsx index 509033f3..3f4d5dbc 100644 --- a/front/packages/ui/src/player/video.tsx +++ b/front/packages/ui/src/player/video.tsx @@ -35,8 +35,12 @@ export * from "react-native-video"; import { type Audio, type Subtitle, useToken } from "@kyoo/models"; import { type IconButton, Menu } from "@kyoo/primitives"; -import { type ComponentProps, forwardRef, useEffect } from "react"; +import "@kyoo/primitives/src/types.d.ts"; import { atom, useAtom, useAtomValue, useSetAtom } from "jotai"; +import { type ComponentProps, forwardRef, useEffect } from "react"; +import { useTranslation } from "react-i18next"; +import { View } from "react-native"; +import uuid from "react-native-uuid"; import NativeVideo, { type VideoRef, type OnLoadData, @@ -44,12 +48,8 @@ import NativeVideo, { SelectedTrackType, SelectedVideoTrackType, } from "react-native-video"; -import { useTranslation } from "react-i18next"; -import { PlayMode, audioAtom, playModeAtom, subtitleAtom } from "./state"; -import uuid from "react-native-uuid"; -import { View } from "react-native"; -import "@kyoo/primitives/src/types.d.ts"; import { useYoshiki } from "yoshiki/native"; +import { PlayMode, audioAtom, playModeAtom, subtitleAtom } from "./state"; const MimeTypes: Map = new Map([ ["subrip", "application/x-subrip"], diff --git a/front/packages/ui/src/player/video.web.tsx b/front/packages/ui/src/player/video.web.tsx index 48f281ee..1646ec4c 100644 --- a/front/packages/ui/src/player/video.web.tsx +++ b/front/packages/ui/src/player/video.web.tsx @@ -18,25 +18,25 @@ * along with Kyoo. If not, see . */ -import { getToken, type Subtitle, type Audio } from "@kyoo/models"; +import { type Audio, type Subtitle, getToken } from "@kyoo/models"; +import { Menu, tooltip } from "@kyoo/primitives"; +import Hls, { type Level, type LoadPolicy } from "hls.js"; +import Jassub from "jassub"; +import { useAtom, useAtomValue, useSetAtom } from "jotai"; import { - forwardRef, + type ComponentProps, type RefObject, + forwardRef, useEffect, useImperativeHandle, useLayoutEffect, useRef, - type ComponentProps, } from "react"; -import type { VideoProps } from "react-native-video"; -import { useAtomValue, useSetAtom, useAtom } from "jotai"; -import { useForceRerender, useYoshiki } from "yoshiki"; -import Jassub from "jassub"; -import { audioAtom, playAtom, PlayMode, playModeAtom, progressAtom, subtitleAtom } from "./state"; -import Hls, { type Level, type LoadPolicy } from "hls.js"; import { useTranslation } from "react-i18next"; -import { Menu, tooltip } from "@kyoo/primitives"; +import type { VideoProps } from "react-native-video"; import toVttBlob from "srt-webvtt"; +import { useForceRerender, useYoshiki } from "yoshiki"; +import { PlayMode, audioAtom, playAtom, playModeAtom, progressAtom, subtitleAtom } from "./state"; let hls: Hls | null = null; diff --git a/front/packages/ui/src/player/watch-status-observer.tsx b/front/packages/ui/src/player/watch-status-observer.tsx index c2621d4b..08b4d4d8 100644 --- a/front/packages/ui/src/player/watch-status-observer.tsx +++ b/front/packages/ui/src/player/watch-status-observer.tsx @@ -20,9 +20,9 @@ import { type MutationParam, WatchStatusV, useAccount } from "@kyoo/models"; import { useMutation, useQueryClient } from "@tanstack/react-query"; -import { useEffect, useCallback } from "react"; import { useAtomValue } from "jotai"; import { useAtomCallback } from "jotai/utils"; +import { useCallback, useEffect } from "react"; import { playAtom, progressAtom } from "./state"; export const WatchStatusObserver = ({ diff --git a/front/packages/ui/src/search/index.tsx b/front/packages/ui/src/search/index.tsx index aea0d45a..8d88b3bb 100644 --- a/front/packages/ui/src/search/index.tsx +++ b/front/packages/ui/src/search/index.tsx @@ -19,17 +19,17 @@ */ import { type LibraryItem, LibraryItemP, type QueryIdentifier, type QueryPage } from "@kyoo/models"; +import { usePageStyle } from "@kyoo/primitives"; import { useState } from "react"; import { useTranslation } from "react-i18next"; import { createParam } from "solito"; -import { DefaultLayout } from "../layout"; -import { InfiniteFetch } from "../fetch-infinite"; import { itemMap } from "../browse"; -import { SearchSort, SortOrd, Layout } from "../browse/types"; -import { BrowseSettings } from "../browse/header"; import { ItemGrid } from "../browse/grid"; +import { BrowseSettings } from "../browse/header"; import { ItemList } from "../browse/list"; -import { usePageStyle } from "@kyoo/primitives"; +import { Layout, SearchSort, SortOrd } from "../browse/types"; +import { InfiniteFetch } from "../fetch-infinite"; +import { DefaultLayout } from "../layout"; const { useParam } = createParam<{ sortBy?: string }>(); diff --git a/front/packages/ui/src/settings/account.tsx b/front/packages/ui/src/settings/account.tsx index 740c4f9f..9af82464 100644 --- a/front/packages/ui/src/settings/account.tsx +++ b/front/packages/ui/src/settings/account.tsx @@ -28,18 +28,18 @@ import { } from "@kyoo/models"; import { Alert, Avatar, Button, H1, Icon, Input, P, Popup, ts, usePopup } from "@kyoo/primitives"; import { useMutation, useQueryClient } from "@tanstack/react-query"; +import * as ImagePicker from "expo-image-picker"; import { type ComponentProps, useState } from "react"; import { useTranslation } from "react-i18next"; import { View } from "react-native"; import { rem, useYoshiki } from "yoshiki/native"; -import * as ImagePicker from "expo-image-picker"; import { PasswordInput } from "../login/password-input"; import { Preference, SettingsContainer } from "./base"; import Username from "@material-symbols/svg-400/outlined/badge.svg"; -import AccountCircle from "@material-symbols/svg-400/rounded/account_circle-fill.svg"; import Mail from "@material-symbols/svg-400/outlined/mail.svg"; import Password from "@material-symbols/svg-400/outlined/password.svg"; +import AccountCircle from "@material-symbols/svg-400/rounded/account_circle-fill.svg"; import Delete from "@material-symbols/svg-400/rounded/delete.svg"; import Logout from "@material-symbols/svg-400/rounded/logout.svg"; diff --git a/front/packages/ui/src/settings/index.tsx b/front/packages/ui/src/settings/index.tsx index 764124bd..de60c769 100644 --- a/front/packages/ui/src/settings/index.tsx +++ b/front/packages/ui/src/settings/index.tsx @@ -24,8 +24,8 @@ import { ScrollView } from "react-native"; import { DefaultLayout } from "../layout"; import { AccountSettings } from "./account"; import { About, GeneralSettings } from "./general"; -import { PlaybackSettings } from "./playback"; import { OidcSettings } from "./oidc"; +import { PlaybackSettings } from "./playback"; export const SettingsPage: QueryPage = () => { const account = useAccount(); diff --git a/front/packages/ui/src/settings/oidc.tsx b/front/packages/ui/src/settings/oidc.tsx index 6cb9edf4..6cd54c30 100644 --- a/front/packages/ui/src/settings/oidc.tsx +++ b/front/packages/ui/src/settings/oidc.tsx @@ -34,8 +34,8 @@ import { ErrorView } from "../errors"; import { Preference, SettingsContainer } from "./base"; import Badge from "@material-symbols/svg-400/outlined/badge.svg"; -import OpenProfile from "@material-symbols/svg-400/outlined/open_in_new.svg"; import Remove from "@material-symbols/svg-400/outlined/close.svg"; +import OpenProfile from "@material-symbols/svg-400/outlined/open_in_new.svg"; import { useMutation, useQueryClient } from "@tanstack/react-query"; export const OidcSettings = () => { diff --git a/front/packages/ui/src/settings/playback.tsx b/front/packages/ui/src/settings/playback.tsx index 749ab51c..1ceb5b74 100644 --- a/front/packages/ui/src/settings/playback.tsx +++ b/front/packages/ui/src/settings/playback.tsx @@ -18,16 +18,16 @@ * along with Kyoo. If not, see . */ -import { Select } from "@kyoo/primitives"; import { useLocalSetting } from "@kyoo/models"; -import { useTranslation } from "react-i18next"; +import { Select } from "@kyoo/primitives"; import { useSetAtom } from "jotai"; -import { Preference, SettingsContainer, useSetting } from "./base"; +import { useTranslation } from "react-i18next"; import { PlayMode, playModeAtom } from "../player/state"; +import { Preference, SettingsContainer, useSetting } from "./base"; +import SubtitleLanguage from "@material-symbols/svg-400/rounded/closed_caption-fill.svg"; import PlayModeI from "@material-symbols/svg-400/rounded/display_settings-fill.svg"; import AudioLanguage from "@material-symbols/svg-400/rounded/music_note-fill.svg"; -import SubtitleLanguage from "@material-symbols/svg-400/rounded/closed_caption-fill.svg"; // I gave up on finding a way to retrive this using the Intl api (probably does not exist) // Simply copy pasted the list of languages from https://www.localeplanet.com/api/codelist.json