}
+
+ close()}
+ {...css({ minWidth: rem(6) })}
+ />
+ {
+ try {
+ await apply(oldValue, newValue);
+ close();
+ } catch (e) {
+ setError((e as KyooErrors).errors[0]);
+ }
+ }}
+ {...css({ minWidth: rem(6) })}
+ />
+
+ >
+ )}
+
+ );
+};
diff --git a/front/packages/ui/src/settings/base.tsx b/front/packages/ui/src/settings/base.tsx
new file mode 100644
index 00000000..7b67ff61
--- /dev/null
+++ b/front/packages/ui/src/settings/base.tsx
@@ -0,0 +1,135 @@
+/*
+ * 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 { Account, User, queryFn, useAccount } from "@kyoo/models";
+import {
+ Container,
+ H1,
+ HR,
+ Icon,
+ P,
+ SubP,
+ SwitchVariant,
+ imageBorderRadius,
+ ts,
+} from "@kyoo/primitives";
+import { useMutation, useQueryClient } from "@tanstack/react-query";
+import { Children, ReactElement, ReactNode } from "react";
+import { View } from "react-native";
+import { px, rem, useYoshiki } from "yoshiki/native";
+
+export const Preference = ({
+ icon,
+ label,
+ description,
+ children,
+ ...props
+}: {
+ icon: Icon;
+ label: string;
+ description: string;
+ children?: ReactNode;
+}) => {
+ const { css } = useYoshiki();
+
+ return (
+
+
+
+
+