diff --git a/front/apps/mobile/package.json b/front/apps/mobile/package.json
index 4f434d8a..500e9197 100644
--- a/front/apps/mobile/package.json
+++ b/front/apps/mobile/package.json
@@ -31,7 +31,7 @@
"react-native-safe-area-context": "4.4.1",
"react-native-screens": "~3.18.0",
"react-native-svg": "13.4.0",
- "yoshiki": "0.2.7"
+ "yoshiki": "0.2.9"
},
"devDependencies": {
"@babel/core": "^7.19.3",
diff --git a/front/apps/web/package.json b/front/apps/web/package.json
index aa8044fb..4ffdd705 100644
--- a/front/apps/web/package.json
+++ b/front/apps/web/package.json
@@ -41,7 +41,7 @@
"react-native-web": "^0.18.10",
"solito": "^2.0.5",
"superjson": "^1.11.0",
- "yoshiki": "0.2.7",
+ "yoshiki": "0.2.9",
"zod": "^3.19.1"
},
"devDependencies": {
diff --git a/front/apps/web/src/pages/_app.tsx b/front/apps/web/src/pages/_app.tsx
index 2c097bb2..c6339b2f 100755
--- a/front/apps/web/src/pages/_app.tsx
+++ b/front/apps/web/src/pages/_app.tsx
@@ -70,6 +70,11 @@ const GlobalCssTheme = () => {
#__next {
height: 100vh;
}
+
+ .infinite-scroll-component__outerdiv {
+ width: 100%;
+ height: 100%;
+ }
`}
diff --git a/front/packages/primitives/src/animated.tsx b/front/packages/primitives/src/animated.tsx
new file mode 100644
index 00000000..a86c3cf9
--- /dev/null
+++ b/front/packages/primitives/src/animated.tsx
@@ -0,0 +1,47 @@
+/*
+ * Kyoo - A portable and vast media library solution.
+ * Copyright (c) Kyoo.
+ *
+ * See AUTHORS.md and LICENSE file in the project root for full license information.
+ *
+ * Kyoo is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * Kyoo is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Kyoo. If not, see .
+ */
+
+import { motify } from "moti";
+import { Component, ComponentType, FunctionComponent } from "react";
+import { Poster } from "./image";
+
+const getDisplayName = (Cmp: ComponentType) => {
+ return Cmp.displayName || Cmp.name || "Component";
+};
+
+const asClass = (Cmp: FunctionComponent) => {
+ // TODO: ensure that every props is given at least once.
+ return class AsClass extends Component & { forward?: Partial }> {
+ static displayName = `WithClass(${getDisplayName(Cmp)})`;
+
+ constructor(props: Partial & { forward?: Partial }) {
+ super(props);
+ }
+
+ render() {
+ // @ts-ignore See todo above
+ return ;
+ }
+ };
+};
+
+export const Animated = {
+ Poster: motify(asClass(Poster))(),
+};
diff --git a/front/packages/primitives/src/image.tsx b/front/packages/primitives/src/image.tsx
index 63257104..fbc624b1 100644
--- a/front/packages/primitives/src/image.tsx
+++ b/front/packages/primitives/src/image.tsx
@@ -18,7 +18,7 @@
* along with Kyoo. If not, see .
*/
-import { useState } from "react";
+import { ComponentType, ReactNode, useState } from "react";
import {
View,
Image as Img,
@@ -26,10 +26,14 @@ import {
ImageStyle,
Platform,
ImageProps,
+ ViewProps,
+ ViewStyle,
} from "react-native";
-import { useYoshiki } from "yoshiki/native";
-import { YoshikiStyle } from "yoshiki/dist/type";
+import { percent, useYoshiki } from "yoshiki/native";
+import { StyleList, YoshikiStyle } from "yoshiki/dist/type";
import { Skeleton } from "./skeleton";
+import { LinearGradient, LinearGradientProps } from "expo-linear-gradient";
+import { alpha, ContrastArea } from "./themes";
type YoshikiEnhanced