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