diff --git a/front/apps/mobile/app/(public)/_layout.tsx b/front/apps/mobile/app/(public)/_layout.tsx index 94c8cd71..90dfb3de 100644 --- a/front/apps/mobile/app/(public)/_layout.tsx +++ b/front/apps/mobile/app/(public)/_layout.tsx @@ -18,7 +18,7 @@ * along with Kyoo. If not, see . */ -import { Account, ConnectionErrorContext, useAccount } from "@kyoo/models"; +import { type Account, ConnectionErrorContext, useAccount } from "@kyoo/models"; import { NavbarProfile, NavbarTitle } from "@kyoo/ui"; import { Redirect, Stack } from "expo-router"; import { useContext, useRef } from "react"; diff --git a/front/apps/mobile/app/_layout.tsx b/front/apps/mobile/app/_layout.tsx index 304d291e..9d4ef393 100644 --- a/front/apps/mobile/app/_layout.tsx +++ b/front/apps/mobile/app/_layout.tsx @@ -36,7 +36,7 @@ import { Poppins_400Regular, Poppins_900Black, } from "@expo-google-fonts/poppins"; -import { ReactNode, useEffect, useState } from "react"; +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"; diff --git a/front/apps/mobile/app/utils.tsx b/front/apps/mobile/app/utils.tsx index d63e4332..ab63c163 100644 --- a/front/apps/mobile/app/utils.tsx +++ b/front/apps/mobile/app/utils.tsx @@ -19,12 +19,12 @@ */ import { Stack, useLocalSearchParams } from "expo-router"; -import { ComponentType, useEffect } from "react"; -import { StatusBar, StatusBarProps } from "react-native"; +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 { QueryPage, useHasPermission } from "@kyoo/models"; +import { type QueryPage, useHasPermission } from "@kyoo/models"; import { Unauthorized } from "@kyoo/ui"; const FullscreenProvider = () => { diff --git a/front/apps/web/src/i18n-d.ts b/front/apps/web/src/i18n-d.ts index eeee0be0..46c3f118 100644 --- a/front/apps/web/src/i18n-d.ts +++ b/front/apps/web/src/i18n-d.ts @@ -19,7 +19,7 @@ */ import "i18next"; -import en from "../../../translations/en.json"; +import type en from "../../../translations/en.json"; declare module "i18next" { interface CustomTypeOptions { diff --git a/front/apps/web/src/i18n.tsx b/front/apps/web/src/i18n.tsx index b1852fec..6e45277b 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 { ComponentType, useMemo } from "react"; -import i18next, { InitOptions } from "i18next"; +import { type ComponentType, useMemo } from "react"; +import i18next, { type InitOptions } from "i18next"; import { I18nextProvider } from "react-i18next"; -import { AppContext, AppInitialProps, type AppProps } from "next/app"; +import type { AppContext, AppInitialProps, AppProps } from "next/app"; 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 50a8b378..0f9bf070 100755 --- a/front/apps/web/src/pages/_app.tsx +++ b/front/apps/web/src/pages/_app.tsx @@ -37,15 +37,15 @@ import { createQueryClient, fetchQuery, getTokenWJ, - QueryIdentifier, - QueryPage, + type QueryIdentifier, + type QueryPage, ServerInfoP, setSsrApiUrl, UserP, useUserTheme, } from "@kyoo/models"; -import { ComponentType, useContext, useState } from "react"; -import NextApp, { AppContext, type AppProps } from "next/app"; +import { type ComponentType, useContext, useState } from "react"; +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"; diff --git a/front/apps/web/src/pages/_document.tsx b/front/apps/web/src/pages/_document.tsx index 68ef3fc9..229f768d 100644 --- a/front/apps/web/src/pages/_document.tsx +++ b/front/apps/web/src/pages/_document.tsx @@ -19,7 +19,7 @@ */ import { AppRegistry } from "react-native"; -import { Html, Main, Head, NextScript, DocumentContext } from "next/document"; +import { Html, Main, Head, NextScript, type DocumentContext } from "next/document"; import { createStyleRegistry, StyleRegistryProvider } from "yoshiki/web"; export const style = ` diff --git a/front/apps/web/src/router.tsx b/front/apps/web/src/router.tsx index 63642990..dee9eb60 100644 --- a/front/apps/web/src/router.tsx +++ b/front/apps/web/src/router.tsx @@ -18,10 +18,10 @@ * along with Kyoo. If not, see . */ -import { QueryPage, useHasPermission } from "@kyoo/models"; +import { type QueryPage, useHasPermission } from "@kyoo/models"; import { Unauthorized } from "@kyoo/ui"; import { useRouter } from "next/router"; -import { ComponentType } from "react"; +import type { ComponentType } from "react"; export const withRoute = ( Component: ComponentType, diff --git a/front/biome.json b/front/biome.json index c97da24d..5dda7011 100644 --- a/front/biome.json +++ b/front/biome.json @@ -8,7 +8,7 @@ "lineEnding": "lf", "lineWidth": 100, "attributePosition": "auto", - "ignore": ["**/.yarn/**", "**/.next/**", "**/.expo/**"] + "ignore": ["**/.yarn/**", "**/.next/**", "**/.expo/**", "**/next-env.d.ts"] }, "organizeImports": { "enabled": true @@ -19,7 +19,6 @@ "recommended": true, "style": { "noNonNullAssertion": "off", - "useImportType": "off", "noParameterAssign": "off", "useEnumInitializers": "off" }, @@ -34,7 +33,7 @@ "noBannedTypes": "off" } }, - "ignore": ["**/.yarn/**", "**/.next/**", "**/.expo/**"] + "ignore": ["**/.yarn/**", "**/.next/**", "**/.expo/**", "**/next-env.d.ts"] }, "javascript": { "formatter": { diff --git a/front/packages/models/src/account-internal.ts b/front/packages/models/src/account-internal.ts index 05778380..73b3a43b 100644 --- a/front/packages/models/src/account-internal.ts +++ b/front/packages/models/src/account-internal.ts @@ -18,8 +18,8 @@ * along with Kyoo. If not, see . */ -import { ZodTypeAny, z } from "zod"; -import { Account, AccountP } from "./accounts"; +import { type ZodTypeAny, z } from "zod"; +import { type Account, AccountP } from "./accounts"; import { MMKV } from "react-native-mmkv"; import { Platform } from "react-native"; diff --git a/front/packages/models/src/accounts.tsx b/front/packages/models/src/accounts.tsx index 8c72bacc..eba66190 100644 --- a/front/packages/models/src/accounts.tsx +++ b/front/packages/models/src/accounts.tsx @@ -18,8 +18,16 @@ * along with Kyoo. If not, see . */ -import { ReactNode, createContext, useContext, useEffect, useMemo, useRef, useState } from "react"; -import { ServerInfoP, User, UserP } from "./resources"; +import { + type ReactNode, + createContext, + useContext, + useEffect, + useMemo, + 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"; @@ -28,7 +36,7 @@ import { Platform } from "react-native"; import { useQueryClient } from "@tanstack/react-query"; import { atom, getDefaultStore, useAtomValue, useSetAtom } from "jotai"; import { useFetch } from "./query"; -import { KyooErrors } from "./kyoo-errors"; +import type { KyooErrors } from "./kyoo-errors"; 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 5feb5f82..cecc0a2d 100644 --- a/front/packages/models/src/login.ts +++ b/front/packages/models/src/login.ts @@ -19,8 +19,8 @@ */ import { queryFn } from "./query"; -import { KyooErrors } from "./kyoo-errors"; -import { Account, Token, TokenP, getCurrentApiUrl } from "./accounts"; +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"; diff --git a/front/packages/models/src/query.tsx b/front/packages/models/src/query.tsx index 625abf75..935fdee4 100644 --- a/front/packages/models/src/query.tsx +++ b/front/packages/models/src/query.tsx @@ -18,16 +18,16 @@ * along with Kyoo. If not, see . */ -import { ComponentType, ReactElement } from "react"; +import type { ComponentType, ReactElement } from "react"; import { QueryClient, - QueryFunctionContext, + type QueryFunctionContext, useInfiniteQuery, useQuery, } from "@tanstack/react-query"; -import { z } from "zod"; -import { KyooErrors } from "./kyoo-errors"; -import { Page, Paged } from "./page"; +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 "."; diff --git a/front/packages/models/src/utils.ts b/front/packages/models/src/utils.ts index b2b13b6c..5d773204 100644 --- a/front/packages/models/src/utils.ts +++ b/front/packages/models/src/utils.ts @@ -19,7 +19,7 @@ */ import { Platform } from "react-native"; -import { Movie, Show } from "./resources"; +import type { Movie, Show } from "./resources"; import { z } from "zod"; import { useMMKVString } from "react-native-mmkv"; import { storage } from "./account-internal"; diff --git a/front/packages/primitives/src/alert.tsx b/front/packages/primitives/src/alert.tsx index d87f147e..3a78791d 100644 --- a/front/packages/primitives/src/alert.tsx +++ b/front/packages/primitives/src/alert.tsx @@ -21,7 +21,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 SweetAlertIcon } from "sweetalert2"; +import type { SweetAlertIcon } from "sweetalert2"; export interface ExtendedAlertStatic { alert: ( diff --git a/front/packages/primitives/src/alert.web.tsx b/front/packages/primitives/src/alert.web.tsx index 3ac7efb8..84c32ca0 100644 --- a/front/packages/primitives/src/alert.web.tsx +++ b/front/packages/primitives/src/alert.web.tsx @@ -20,7 +20,7 @@ // Stolen from https://github.com/necolas/react-native-web/issues/1026#issuecomment-1458279681 -import { type AlertButton, type AlertOptions } from "react-native"; +import type { AlertButton, AlertOptions } from "react-native"; import Swal, { type SweetAlertIcon } from "sweetalert2"; // biome-ignore lint/complexity/noStaticOnlyClass: Compatibility with rn diff --git a/front/packages/primitives/src/avatar.tsx b/front/packages/primitives/src/avatar.tsx index e2b59dce..a727f432 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, ViewStyle, Image, ImageProps } from "react-native"; -import { useYoshiki, px, Stylable } from "yoshiki/native"; +import { View, type ViewStyle, Image, type ImageProps } from "react-native"; +import { useYoshiki, px, type Stylable } from "yoshiki/native"; import { Icon } from "./icons"; import { P } from "./text"; import AccountCircle from "@material-symbols/svg-400/rounded/account_circle-fill.svg"; -import { ComponentType, forwardRef, RefAttributes } from "react"; +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 5f902793..e5d958b5 100644 --- a/front/packages/primitives/src/button.tsx +++ b/front/packages/primitives/src/button.tsx @@ -18,12 +18,12 @@ * along with Kyoo. If not, see . */ -import { ComponentType, ForwardedRef, ReactElement, forwardRef } from "react"; -import { Theme, useYoshiki } from "yoshiki/native"; +import { type ComponentType, type ForwardedRef, type ReactElement, forwardRef } from "react"; +import { type Theme, useYoshiki } from "yoshiki/native"; import { PressableFeedback } from "./links"; import { P } from "./text"; import { ts } from "./utils"; -import { Falsy, PressableProps, View } from "react-native"; +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 04e53d56..87ce959f 100644 --- a/front/packages/primitives/src/chip.tsx +++ b/front/packages/primitives/src/chip.tsx @@ -18,11 +18,11 @@ * along with Kyoo. If not, see . */ -import { px, rem, Theme, useYoshiki } from "yoshiki/native"; +import { px, rem, type Theme, useYoshiki } from "yoshiki/native"; import { Link } from "./links"; import { P } from "./text"; import { capitalize, ts } from "./utils"; -import { TextProps } from "react-native"; +import type { TextProps } from "react-native"; import { Skeleton } from "./skeleton"; export const Chip = ({ diff --git a/front/packages/primitives/src/container.tsx b/front/packages/primitives/src/container.tsx index 1c273b71..f7602a2f 100644 --- a/front/packages/primitives/src/container.tsx +++ b/front/packages/primitives/src/container.tsx @@ -18,8 +18,8 @@ * along with Kyoo. If not, see . */ -import { ComponentType } from "react"; -import { View, ViewProps } from "react-native"; +import type { ComponentType } from "react"; +import { View, type ViewProps } from "react-native"; import { percent, px, useYoshiki } from "yoshiki/native"; export const Container = ({ diff --git a/front/packages/primitives/src/divider.tsx b/front/packages/primitives/src/divider.tsx index 8b37cdac..a7da1e66 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, Stylable, useYoshiki } from "yoshiki/native"; +import { px, type Stylable, 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 0caa5a86..6fc2d1ac 100644 --- a/front/packages/primitives/src/icons.tsx +++ b/front/packages/primitives/src/icons.tsx @@ -18,13 +18,14 @@ * along with Kyoo. If not, see . */ -import React, { ComponentProps, ComponentType, ForwardedRef, forwardRef } from "react"; -import { Platform, PressableProps } from "react-native"; -import { SvgProps } from "react-native-svg"; -import { YoshikiStyle } from "yoshiki"; -import { px, Stylable, Theme, useYoshiki } from "yoshiki/native"; +import type React from "react"; +import { type ComponentProps, type ComponentType, type ForwardedRef, forwardRef } from "react"; +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 { PressableFeedback } from "./links"; -import { Breakpoint, focusReset, ts } from "./utils"; +import { type Breakpoint, focusReset, ts } from "./utils"; import { P } from "./text"; declare module "react" { diff --git a/front/packages/primitives/src/image/base-image.tsx b/front/packages/primitives/src/image/base-image.tsx index fd6be9dc..33f4b251 100644 --- a/front/packages/primitives/src/image/base-image.tsx +++ b/front/packages/primitives/src/image/base-image.tsx @@ -18,10 +18,10 @@ * along with Kyoo. If not, see . */ -import { KyooImage } from "@kyoo/models"; -import { ReactElement } from "react"; -import { ImageStyle } from "react-native"; -import { YoshikiStyle } from "yoshiki/src/type"; +import type { KyooImage } from "@kyoo/models"; +import type { ReactElement } from "react"; +import type { ImageStyle } from "react-native"; +import type { YoshikiStyle } from "yoshiki/src/type"; export type YoshikiEnhanced