Repository: IgnisDa/ryot (language: rust)

Issue:
Add muscles focused on for workouts



Discussion / hints:

Fix patch:
diff --git a/apps/backend/src/main.rs b/apps/backend/src/main.rs
index 6b51e67488..0f4862e651 100644
--- a/apps/backend/src/main.rs
+++ b/apps/backend/src/main.rs
@@ -299,50 +299,6 @@ fn init_tracing() -> Result<()> {
     Ok(())
 }
 
-async fn get_is_pro(pro_key: &str, compilation_time: &DateTime<Utc>) -> bool {
-    if pro_key.is_empty() {
-        return false;
-    }
-
-    ryot_log!(debug, "Verifying pro key for API ID: {:#?}", UNKEY_API_ID);
-
-    #[skip_serializing_none]
-    #[derive(Debug, Serialize, Clone, Deserialize)]
-    struct Meta {
-        expiry: Option<NaiveDate>,
-    }
-
-    let unkey_client = Client::new("public");
-    let verify_request = VerifyKeyRequest::new(pro_key, UNKEY_API_ID);
-    let validated_key = match unkey_client.verify_key(verify_request).await {
-        Ok(verify_response) => {
-            if !verify_response.valid {
-                ryot_log!(debug, "Pro key is no longer valid.");
-                return false;
-            }
-            verify_response
-        }
-        Err(verify_error) => {
-            ryot_log!(debug, "Pro key verification error: {:?}", verify_error);
-            return false;
-        }
-    };
-    let key_meta = validated_key
-        .meta
-        .map(|meta| serde_json::from_value::<Meta>(meta).unwrap());
-    ryot_log!(debug, "Expiry: {:?}", key_meta.clone().map(|m| m.expiry));
-    if let Some(meta) = key_meta {
-        if let Some(expiry) = meta.expiry {
-            if compilation_time > &convert_naive_to_utc(expiry) {
-                ryot_log!(warn, "Pro key has expired. Please renew your subscription.");
-                return false;
-            }
-        }
-    }
-    ryot_log!(info, "Pro key verified successfully");
-    true
-}
-
 // upgrade from v6 ONLY IF APPLICABLE
 async fn migrate_from_v6(db: &DatabaseConnection) -> Result<()> {
     db.execute_unprepared(
@@ -398,3 +354,47 @@ END $$;
     .await?;
     Ok(())
 }
+
+async fn get_is_pro(pro_key: &str, compilation_time: &DateTime<Utc>) -> bool {
+    if pro_key.is_empty() {
+        return false;
+    }
+
+    ryot_log!(debug, "Verifying pro key for API ID: {:#?}", UNKEY_API_ID);
+
+    #[skip_serializing_none]
+    #[derive(Debug, Serialize, Clone, Deserialize)]
+    struct Meta {
+        expiry: Option<NaiveDate>,
+    }
+
+    let unkey_client = Client::new("public");
+    let verify_request = VerifyKeyRequest::new(pro_key, UNKEY_API_ID);
+    let validated_key = match unkey_client.verify_key(verify_request).await {
+        Ok(verify_response) => {
+            if !verify_response.valid {
+                ryot_log!(debug, "Pro key is no longer valid.");
+                return false;
+            }
+            verify_response
+        }
+        Err(verify_error) => {
+            ryot_log!(debug, "Pro key verification error: {:?}", verify_error);
+            return false;
+        }
+    };
+    let key_meta = validated_key
+        .meta
+        .map(|meta| serde_json::from_value::<Meta>(meta).unwrap());
+    ryot_log!(debug, "Expiry: {:?}", key_meta.clone().map(|m| m.expiry));
+    if let Some(meta) = key_meta {
+        if let Some(expiry) = meta.expiry {
+            if compilation_time > &convert_naive_to_utc(expiry) {
+                ryot_log!(warn, "Pro key has expired. Please renew your subscription.");
+                return false;
+            }
+        }
+    }
+    ryot_log!(info, "Pro key verified successfully");
+    true
+}
diff --git a/apps/frontend/app/routes/_dashboard.settings.profile-and-sharing.tsx b/apps/frontend/app/routes/_dashboard.settings.profile-and-sharing.tsx
index b75f267c60..8648e6818d 100644
--- a/apps/frontend/app/routes/_dashboard.settings.profile-and-sharing.tsx
+++ b/apps/frontend/app/routes/_dashboard.settings.profile-and-sharing.tsx
@@ -7,6 +7,7 @@ import {
 	Container,
 	Flex,
 	Group,
+	Indicator,
 	Modal,
 	NumberInput,
 	Paper,
@@ -68,14 +69,16 @@ import {
 import {
 	createToastHeaders,
 	getAuthorizationCookie,
+	getDecodedJwt,
 	serverGqlService,
 } from "~/lib/utilities.server";
 
 export const loader = async ({ request }: LoaderFunctionArgs) => {
+	const decodedJwt = getDecodedJwt(request);
 	const [{ userAccessLinks }] = await Promise.all([
 		serverGqlService.authenticatedRequest(request, UserAccessLinksDocument, {}),
 	]);
-	return { userAccessLinks };
+	return { userAccessLinks, activeAccessLinkId: decodedJwt?.access_link?.id };
 };
 
 export const meta = (_args: MetaArgs) => {
@@ -351,6 +354,7 @@ const DisplayAccessLink = (props: {
 	const [parent] = useAutoAnimate();
 	const [inputOpened, { toggle: inputToggle }] = useDisclosure(false);
 	const submit = useConfirmSubmit();
+	const loaderData = useLoaderData<typeof loader>();
 
 	const accessLinkUrl = `${applicationBaseUrl}/${
 		props.accessLink.isAccountDefault
@@ -376,12 +380,20 @@ const DisplayAccessLink = (props: {
 			<Stack ref={parent}>
 				<Flex align="center" justify="space-between">
 					<Box>
-						<Text fw="bold" span>
-							{props.accessLink.name}
-						</Text>
+						<Indicator
+							inline
+							disabled={loaderData.activeAccessLinkId !== props.accessLink.id}
+						>
+							<Text fw="bold" span>
+								{props.accessLink.name}
+							</Text>
+						</Indicator>
 						<Text size="sm">
 							Created: {dayjsLib(props.accessLink.createdOn).fromNow()}, Times
-							Used: {props.accessLink.timesUsed}
+							Used:{" "}
+							{new Intl.NumberFormat("en-US", {
+								notation: "compact",
+							}).format(props.accessLink.timesUsed)}
 						</Text>
 						{optionalDetails ? <Text size="xs">{optionalDetails}</Text> : null}
 					</Box>
diff --git a/apps/frontend/package.json b/apps/frontend/package.json
index c26ba8c282..a6f4e6c2fa 100644
--- a/apps/frontend/package.json
+++ b/apps/frontend/package.json
@@ -12,24 +12,24 @@
 		"@formkit/auto-animate": "0.8.2",
 		"@hello-pangea/dnd": "17.0.0",
 		"@lukemorales/query-key-factory": "1.3.4",
-		"@mantine/carousel": "7.13.4",
-		"@mantine/charts": "7.13.4",
-		"@mantine/core": "7.13.4",
-		"@mantine/dates": "7.13.4",
-		"@mantine/form": "7.13.4",
-		"@mantine/hooks": "7.13.4",
-		"@mantine/notifications": "7.13.4",
+		"@mantine/carousel": "7.13.5",
+		"@mantine/charts": "7.13.5",
+		"@mantine/core": "7.13.5",
+		"@mantine/dates": "7.13.5",
+		"@mantine/form": "7.13.5",
+		"@mantine/hooks": "7.13.5",
+		"@mantine/notifications": "7.13.5",
 		"@remix-pwa/sw": "3.0.10",
 		"@remix-pwa/worker-runtime": "2.1.4",
-		"@remix-run/node": "2.13.1",
-		"@remix-run/react": "2.13.1",
-		"@remix-run/serve": "2.13.1",
+		"@remix-run/node": "2.14.0",
+		"@remix-run/react": "2.14.0",
+		"@remix-run/serve": "2.14.0",
 		"@ryot/generated": "workspace:*",
 		"@ryot/graphql": "workspace:*",
 		"@ryot/ts-utils": "workspace:*",
 		"@tabler/icons-react": "3.17.0",
-		"@tanstack/react-query": "5.59.16",
-		"@tanstack/react-query-devtools": "5.59.16",
+		"@tanstack/react-query": "5.59.20",
+		"@tanstack/react-query-devtools": "5.59.20",
 		"buffer": "6.0.3",
 		"clsx": "2.1.1",
 		"cookie": "1.0.1",
@@ -39,7 +39,7 @@
 		"embla-carousel-react": "7.1.0",
 		"filesize": "10.1.6",
 		"graphql": "16.9.0",
-		"graphql-request": "7.1.0",
+		"graphql-request": "7.1.2",
 		"howler": "2.2.4",
 		"humanize-duration-ts": "2.1.1",
 		"immer": "10.1.1",
@@ -69,7 +69,7 @@
 	"devDependencies": {
 		"@bitprojects/umami-logger-typescript": "1.0.10",
 		"@remix-pwa/dev": "3.1.0",
-		"@remix-run/dev": "2.13.1",
+		"@remix-run/dev": "2.14.0",
 		"@types/cookie": "1.0.0",
 		"@types/crypto-js": "4.2.2",
 		"@types/howler": "2.2.12",
@@ -80,13 +80,13 @@
 		"postcss": "8.4.47",
 		"postcss-preset-mantine": "1.17.0",
 		"postcss-simple-vars": "7.0.1",
-		"remix-development-tools": "4.7.5",
+		"remix-development-tools": "4.7.6",
 		"ts-essentials": "10.0.3",
 		"typescript": "5.6.3",
 		"typescript-plugin-css-modules": "5.1.0",
 		"typescript-remix-routes-plugin": "1.0.1",
 		"vite": "5.4.10",
-		"vite-tsconfig-paths": "5.0.1"
+		"vite-tsconfig-paths": "5.1.1"
 	},
 	"engines": {
 		"node": ">=18.0.0"
diff --git a/apps/website/package.json b/apps/website/package.json
index 11d7f89e5d..7ea14706ac 100644
--- a/apps/website/package.json
+++ b/apps/website/package.json
@@ -9,15 +9,15 @@
 	"dependencies": {
 		"@conform-to/zod": "1.2.2",
 		"@isaacs/ttlcache": "1.4.1",
-		"@paddle/paddle-js": "1.3.1",
+		"@paddle/paddle-js": "1.3.2",
 		"@paddle/paddle-node-sdk": "1.9.1",
 		"@radix-ui/react-label": "2.1.0",
 		"@radix-ui/react-slot": "1.1.0",
 		"@radix-ui/react-tooltip": "1.1.3",
-		"@react-email/components": "0.0.26",
-		"@remix-run/node": "2.13.1",
-		"@remix-run/react": "2.13.1",
-		"@remix-run/serve": "2.13.1",
+		"@react-email/components": "0.0.28",
+		"@remix-run/node": "2.14.0",
+		"@remix-run/react": "2.14.0",
+		"@remix-run/serve": "2.14.0",
 		"@ryot/generated": "workspace:*",
 		"@ryot/graphql": "workspace:*",
 		"@ryot/transactional": "workspace:*",
@@ -28,18 +28,18 @@
 		"clsx": "2.1.1",
 		"crypto-js": "4.2.0",
 		"dayjs": "1.11.13",
-		"drizzle-orm": "0.35.3",
+		"drizzle-orm": "0.36.1",
 		"embla-carousel-autoplay": "8.3.1",
 		"embla-carousel-react": "8.3.1",
 		"graphql": "16.9.0",
-		"graphql-request": "7.1.0",
+		"graphql-request": "7.1.2",
 		"humanize-duration-ts": "2.1.1",
-		"input-otp": "1.4.0",
+		"input-otp": "1.4.1",
 		"isbot": "5.1.17",
 		"lodash": "4.17.21",
-		"lucide-react": "0.454.0",
+		"lucide-react": "0.456.0",
 		"nanoid": "5.0.8",
-		"next-themes": "0.3.0",
+		"next-themes": "0.4.3",
 		"nodemailer": "6.9.16",
 		"openid-client": "5.7.0",
 		"postgres": "3.4.5",
@@ -47,7 +47,7 @@
 		"react-dom": "18.3.1",
 		"remix-routes": "1.7.7",
 		"remix-utils": "7.7.0",
-		"sonner": "1.5.0",
+		"sonner": "1.7.0",
 		"tailwind-merge": "2.5.4",
 		"tailwindcss-animate": "1.0.7",
 		"tiny-invariant": "1.3.3",
@@ -57,7 +57,7 @@
 		"zodix": "0.4.4"
 	},
 	"devDependencies": {
-		"@remix-run/dev": "2.13.1",
+		"@remix-run/dev": "2.14.0",
 		"@tailwindcss/typography": "0.5.15",
 		"@types/crypto-js": "4.2.2",
 		"@types/lodash": "4.17.13",
@@ -65,13 +65,13 @@
 		"@types/react": "18.3.12",
 		"@types/react-dom": "18.3.1",
 		"autoprefixer": "10.4.20",
-		"drizzle-kit": "0.26.2",
+		"drizzle-kit": "0.28.0",
 		"postcss": "8.4.47",
 		"tailwindcss": "3.4.14",
 		"typescript": "5.6.3",
 		"typescript-remix-routes-plugin": "1.0.1",
 		"vite": "5.4.10",
-		"vite-tsconfig-paths": "5.0.1"
+		"vite-tsconfig-paths": "5.1.1"
 	},
 	"engines": {
 		"node": ">=20.0.0"
diff --git a/crates/enums/src/lib.rs b/crates/enums/src/lib.rs
index fead503a2a..e44a2a4517 100644
--- a/crates/enums/src/lib.rs
+++ b/crates/enums/src/lib.rs
@@ -209,13 +209,16 @@ pub enum ImportSource {
     FromJsonQueryResult,
     Eq,
     PartialEq,
-    Display,
     EnumIter,
     PartialOrd,
     Ord,
+    Default,
+    ConfigEnum,
+    Hash,
 )]
 #[serde(rename_all = "snake_case")]
 pub enum ExerciseMuscle {
+    #[default]
     Abdominals,
     Abductors,
     Adductors,
@@ -240,7 +243,19 @@ pub enum ExerciseMuscle {
 }
 
 #[derive(
-    Debug, Clone, Serialize, Enum, Copy, Deserialize, DeriveActiveEnum, EnumIter, Eq, PartialEq,
+    Debug,
+    Clone,
+    Serialize,
+    Enum,
+    Copy,
+    Deserialize,
+    DeriveActiveEnum,
+    EnumIter,
+    Eq,
+    PartialEq,
+    Default,
+    ConfigEnum,
+    Hash,
 )]
 #[sea_orm(
     rs_type = "String",
@@ -249,13 +264,26 @@ pub enum ExerciseMuscle {
 )]
 #[serde(rename_all = "snake_case")]
 pub enum ExerciseForce {
+    #[default]
     Pull,
     Push,
     Static,
 }
 
 #[derive(
-    Debug, Clone, Serialize, Enum, Copy, Deserialize, DeriveActiveEnum, EnumIter, Eq, PartialEq,
+    Debug,
+    Clone,
+    Serialize,
+    Enum,
+    Copy,
+    Deserialize,
+    DeriveActiveEnum,
+    EnumIter,
+    Eq,
+    PartialEq,
+    Default,
+    ConfigEnum,
+    Hash,
 )]
 #[sea_orm(
     rs_type = "String",
@@ -264,6 +292,7 @@ pub enum ExerciseForce {
 )]
 #[serde(rename_all = "snake_case")]
 pub enum ExerciseLevel {
+    #[default]
     Beginner,
     Expert,
     Intermediate,
@@ -284,7 +313,19 @@ pub enum ExerciseMechanic {
 }
 
 #[derive(
-    Debug, Clone, Serialize, Enum, Copy, Deserialize, DeriveActiveEnum, EnumIter, Eq, PartialEq,
+    Debug,
+    Clone,
+    Serialize,
+    Enum,
+    Copy,
+    Deserialize,
+    DeriveActiveEnum,
+    EnumIter,
+    Eq,
+    PartialEq,
+    Default,
+    ConfigEnum,
+    Hash,
 )]
 #[sea_orm(
     rs_type = "String",
@@ -294,6 +335,7 @@ pub enum ExerciseMechanic {
 #[serde(rename_all = "snake_case")]
 pub enum ExerciseEquipment {
     Bands,
+    #[default]
     Barbell,
     BodyOnly,
     Cable,
@@ -325,6 +367,8 @@ pub enum ExerciseEquipment {
     Copy,
     EnumIter,
     ConfigEnum,
+    Default,
+    Hash,
 )]
 #[sea_orm(
     rs_type = "String",
@@ -336,6 +380,7 @@ pub enum ExerciseLot {
     Duration,
     DistanceAndDuration,
     Reps,
+    #[default]
     RepsAndWeight,
 }
 
diff --git a/crates/migrations/src/lib.rs b/crates/migrations/src/lib.rs
index 1883593b04..282de3b98a 100644
--- a/crates/migrations/src/lib.rs
+++ b/crates/migrations/src/lib.rs
@@ -47,6 +47,7 @@ mod m20241013_changes_for_issue_1052;
 mod m20241019_changes_for_issue_929;
 mod m20241019_changes_for_issue_964;
 mod m20241025_changes_for_issue_1084;
+mod m20241110_changes_for_issue_1103;
 
 pub use m20230410_create_metadata::Metadata as AliasedMetadata;
 pub use m20230413_create_person::Person as AliasedPerson;
@@ -115,6 +116,7 @@ impl MigratorTrait for Migrator {
             Box::new(m20241019_changes_for_issue_929::Migration),
             Box::new(m20241019_changes_for_issue_964::Migration),
             Box::new(m20241025_changes_for_issue_1084::Migration),
+            Box::new(m20241110_changes_for_issue_1103::Migration),
         ]
     }
 }
diff --git a/crates/migrations/src/m20241110_changes_for_issue_1103.rs b/crates/migrations/src/m20241110_changes_for_issue_1103.rs
new file mode 100644
index 0000000000..131f47794b
--- /dev/null
+++ b/crates/migrations/src/m20241110_changes_for_issue_1103.rs
@@ -0,0 +1,25 @@
+use sea_orm_migration::prelude::*;
+
+#[derive(DeriveMigrationName)]
+pub struct Migration;
+
+#[async_trait::async_trait]
+impl MigrationTrait for Migration {
+    async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> {
+        let db = manager.get_connection();
+        for x in ["workout", "workout_template"] {
+            db.execute_unprepared(&format!(
+                r#"
+UPDATE "{x}"
+SET "summary" = jsonb_set("summary", '{{focused}}', '{{"muscles":[], "forces":[], "lots":[], "levels":[], "equipments":[]}}'::jsonb);
+                    "#,
+            ))
+            .await?;
+        }
+        Ok(())
+    }
+
+    async fn down(&self, _manager: &SchemaManager) -> Result<(), DbErr> {
+        Ok(())
+    }
+}
diff --git a/crates/models/fitness/src/lib.rs b/crates/models/fitness/src/lib.rs
index 1ca77a5a75..5f3136d69f 100644
--- a/crates/models/fitness/src/lib.rs
+++ b/crates/models/fitness/src/lib.rs
@@ -476,6 +476,112 @@ pub struct WorkoutSummaryExercise {
     pub best_set: Option<WorkoutSetRecord>,
 }
 
+#[derive(
+    Clone,
+    Debug,
+    Deserialize,
+    Serialize,
+    FromJsonQueryResult,
+    Eq,
+    PartialEq,
+    Default,
+    SimpleObject,
+    Schematic,
+)]
+pub struct WorkoutLotFocusedSummary {
+    pub lot: ExerciseLot,
+    pub exercises: Vec<usize>,
+}
+
+#[derive(
+    Clone,
+    Debug,
+    Deserialize,
+    Serialize,
+    FromJsonQueryResult,
+    Eq,
+    PartialEq,
+    Default,
+    SimpleObject,
+    Schematic,
+)]
+pub struct WorkoutLevelFocusedSummary {
+    pub level: ExerciseLevel,
+    pub exercises: Vec<usize>,
+}
+
+#[derive(
+    Clone,
+    Debug,
+    Deserialize,
+    Serialize,
+    FromJsonQueryResult,
+    Eq,
+    PartialEq,
+    Default,
+    SimpleObject,
+    Schematic,
+)]
+pub struct WorkoutEquipmentFocusedSummary {
+    pub exercises: Vec<usize>,
+    pub equipment: ExerciseEquipment,
+}
+
+#[derive(
+    Clone,
+    Debug,
+    Deserialize,
+    Serialize,
+    FromJsonQueryResult,
+    Eq,
+    PartialEq,
+    Default,
+    SimpleObject,
+    Schematic,
+)]
+pub struct WorkoutForceFocusedSummary {
+    pub force: ExerciseForce,
+    pub exercises: Vec<usize>,
+}
+
+#[derive(
+    Clone,
+    Debug,
+    Deserialize,
+    Serialize,
+    FromJsonQueryResult,
+    Eq,
+    PartialEq,
+    Default,
+    SimpleObject,
+    Schematic,
+)]
+pub struct WorkoutMuscleFocusedSummary {
+    pub exercises: Vec<usize>,
+    pub muscle: ExerciseMuscle,
+}
+
+#[derive(
+    Clone,
+    Debug,
+    Deserialize,
+    Serialize,
+    FromJsonQueryResult,
+    Eq,
+    PartialEq,
+    Default,
+    SimpleObject,
+    Schematic,
+)]
+#[serde(rename_all = "snake_case")]
+pub struct WorkoutFocusedSummary {
+    pub lots: Vec<WorkoutLotFocusedSummary>,
+    pub levels: Vec<WorkoutLevelFocusedSummary>,
+    pub forces: Vec<WorkoutForceFocusedSummary>,
+    pub muscles: Vec<WorkoutMuscleFocusedSummary>,
+    pub equipments: Vec<WorkoutEquipmentFocusedSummary>,
+}
+
 #[derive(
     Clone,
     Debug,
@@ -490,6 +596,7 @@ pub struct WorkoutSummaryExercise {
 )]
 #[serde(rename_all = "snake_case")]
 pub struct WorkoutSummary {
+    pub focused: WorkoutFocusedSummary,
     // DEV: This is nullable because it is also used for the workout templates
     pub total: Option<WorkoutOrExerciseTotals>,
     pub exercises: Vec<WorkoutSummaryExercise>,
diff --git a/crates/services/fitness/src/lib.rs b/crates/services/fitness/src/lib.rs
index c32da39e26..b3ad129730 100644
--- a/crates/services/fitness/src/lib.rs
+++ b/crates/services/fitness/src/lib.rs
@@ -25,6 +25,7 @@ use dependent_models::{
 };
 use dependent_utils::{
     create_or_update_workout, create_user_measurement, db_workout_to_workout_input,
+    get_focused_workout_summary,
 };
 use enums::{
     EntityLot, ExerciseEquipment, ExerciseForce, ExerciseLevel, ExerciseLot, ExerciseMechanic,
@@ -97,10 +98,7 @@ impl ExerciseService {
         input: UserWorkoutInput,
     ) -> Result<String> {
         pro_instance_guard(self.0.is_pro).await?;
-        let mut summary = WorkoutSummary {
-            total: None,
-            exercises: vec![],
-        };
+        let mut summary = WorkoutSummary::default();
         let mut information = WorkoutInformation {
             assets: None,
             exercises: vec![],
@@ -137,6 +135,8 @@ impl ExerciseService {
                 name: exercise.exercise_id,
             });
         }
+        let processed_exercises = information.exercises.clone();
+        summary.focused = get_focused_workout_summary(&processed_exercises, &self.0).await;
         let template = workout_template::ActiveModel {
             id: match input.update_workout_template_id {
                 Some(id) => ActiveValue::Set(id),
diff --git a/crates/utils/dependent/src/lib.rs b/crates/utils/dependent/src/lib.rs
index 45ab25644c..3ede9baae1 100644
--- a/crates/utils/dependent/src/lib.rs
+++ b/crates/utils/dependent/src/lib.rs
@@ -1,4 +1,4 @@
-use std::{collections::HashMap, iter::zip, sync::Arc};
+use std::{cmp::Reverse, collections::HashMap, iter::zip, sync::Arc};
 
 use anyhow::{bail, Result as AnyhowResult};
 use application_utils::get_current_date;
@@ -11,8 +11,8 @@ use common_models::{
 };
 use common_utils::{ryot_log, SHOW_SPECIAL_SEASON_NAMES};
 use database_models::{
-    collection_to_entity, genre, metadata, metadata_group, metadata_to_genre, metadata_to_metadata,
-    metadata_to_person, monitored_entity, person,
+    collection_to_entity, exercise, genre, metadata, metadata_group, metadata_to_genre,
+    metadata_to_metadata, metadata_to_person, monitored_entity, person,
     prelude::{
         Collection, CollectionToEntity, Exercise, Genre, Metadata, MetadataGroup, MetadataToGenre,
         MetadataToMetadata, MetadataToPerson, MonitoredEntity, Person, Seen, UserToEntity, Workout,
@@ -33,7 +33,9 @@ use fitness_models::{
     ExerciseBestSetRecord, ProcessedExercise, UserExerciseInput,
     UserToExerciseBestSetExtraInformation, UserToExerciseExtraInformation,
     UserToExerciseHistoryExtraInformation, UserWorkoutInput, UserWorkoutSetRecord,
-    WorkoutInformation, WorkoutOrExerciseTotals, WorkoutSetPersonalBest, WorkoutSetRecord,
+    WorkoutEquipmentFocusedSummary, WorkoutFocusedSummary, WorkoutForceFocusedSummary,
+    WorkoutInformation, WorkoutLevelFocusedSummary, WorkoutLotFocusedSummary,
+    WorkoutMuscleFocusedSummary, WorkoutOrExerciseTotals, WorkoutSetPersonalBest, WorkoutSetRecord,
     WorkoutSetStatistic, WorkoutSetTotals, WorkoutSummary, WorkoutSummaryExercise, LOT_MAPPINGS,
 };
 use importer_models::{ImportDetails, ImportFailStep, ImportFailedItem, ImportResultResponse};
@@ -1605,6 +1607,71 @@ fn clean_values(value: &mut UserWorkoutSetRecord, exercise_lot: &ExerciseLot) {
     value.statistic = stats;
 }
 
+pub async fn get_focused_workout_summary(
+    exercises: &Vec<ProcessedExercise>,
+    ss: &Arc<SupportingService>,
+) -> WorkoutFocusedSummary {
+    let db_exercises = Exercise::find()
+        .filter(exercise::Column::Id.is_in(exercises.iter().map(|e| e.name.clone())))
+        .all(&ss.db)
+        .await
+        .unwrap();
+    let mut lots = HashMap::new();
+    let mut levels = HashMap::new();
+    let mut forces = HashMap::new();
+    let mut muscles = HashMap::new();
+    let mut equipments = HashMap::new();
+    for (idx, ex) in exercises.iter().enumerate() {
+        let exercise = db_exercises.iter().find(|e| e.id == ex.name).unwrap();
+        lots.entry(exercise.lot).or_insert(vec![]).push(idx);
+        levels.entry(exercise.level).or_insert(vec![]).push(idx);
+        if let Some(force) = exercise.force {
+            forces.entry(force).or_insert(vec![]).push(idx);
+        }
+        if let Some(equipment) = exercise.equipment {
+            equipments.entry(equipment).or_insert(vec![]).push(idx);
+        }
+        exercise.muscles.iter().for_each(|m| {
+            muscles.entry(*m).or_insert(vec![]).push(idx);
+        });
+    }
+    let lots = lots
+        .into_iter()
+        .map(|(lot, exercises)| WorkoutLotFocusedSummary { lot, exercises })
+        .sorted_by_key(|f| Reverse(f.exercises.len()))
+        .collect();
+    let levels = levels
+        .into_iter()
+        .map(|(level, exercises)| WorkoutLevelFocusedSummary { level, exercises })
+        .sorted_by_key(|f| Reverse(f.exercises.len()))
+        .collect();
+    let forces = forces
+        .into_iter()
+        .map(|(force, exercises)| WorkoutForceFocusedSummary { force, exercises })
+        .sorted_by_key(|f| Reverse(f.exercises.len()))
+        .collect();
+    let muscles = muscles
+        .into_iter()
+        .map(|(muscle, exercises)| WorkoutMuscleFocusedSummary { muscle, exercises })
+        .sorted_by_key(|f| Reverse(f.exercises.len()))
+        .collect();
+    let equipments = equipments
+        .into_iter()
+        .map(|(equipment, exercises)| WorkoutEquipmentFocusedSummary {
+            equipment,
+            exercises,
+        })
+        .sorted_by_key(|f| Reverse(f.exercises.len()))
+        .collect();
+    WorkoutFocusedSummary {
+        lots,
+        levels,
+        forces,
+        muscles,
+        equipments,
+    }
+}
+
 /// Create a workout in the database and also update user and exercise associations.
 pub async fn create_or_update_workout(
     input: UserWorkoutInput,
@@ -1838,6 +1905,8 @@ pub async fn create_or_update_workout(
                 .all(|s| exercises.get(*s as usize).is_some())
     });
     let summary_total = workout_totals.into_iter().sum();
+    let processed_exercises = exercises.clone().into_iter().map(|(_, _, ex)| ex).collect();
+    let focused = get_focused_workout_summary(&processed_exercises, &ss).await;
     let model = workout::Model {
         end_time,
         name: input.name,
@@ -1846,6 +1915,7 @@ pub async fn create_or_update_workout(
         start_time: input.start_time,
         repeated_from: input.repeated_from,
         summary: WorkoutSummary {
+            focused,
             total: Some(summary_total),
             exercises: exercises
                 .clone()
@@ -1862,7 +1932,7 @@ pub async fn create_or_update_workout(
             assets: input.assets,
             comment: input.comment,
             supersets: input.supersets,
-            exercises: exercises.into_iter().map(|(_, _, ex)| ex).collect(),
+            exercises: processed_exercises,
         },
         template_id: input.template_id,
         duration: 0,
diff --git a/docs/includes/export-schema.ts b/docs/includes/export-schema.ts
index e0eeaa3f9f..fdec4bc277 100644
--- a/docs/includes/export-schema.ts
+++ b/docs/includes/export-schema.ts
@@ -275,7 +275,10 @@ export interface WorkoutOrExerciseTotals {
 /** An exercise that has been processed and committed to the database. */
 export interface ProcessedExercise {
 	assets: EntityAssets | null;
-	/** @type {'duration' | 'distance_and_duration' | 'reps' | 'reps_and_weight'} */
+	/**
+	 * @default 'reps_and_weight'
+	 * @type {'duration' | 'distance_and_duration' | 'reps' | 'reps_and_weight'}
+	 */
 	lot: ExerciseLot;
 	name: string;
 	notes: string[];
@@ -301,13 +304,76 @@ export interface WorkoutInformation {
 /** The summary about an exercise done in a workout. */
 export interface WorkoutSummaryExercise {
 	best_set: WorkoutSetRecord | null;
+	/** @default 'reps_and_weight' */
 	lot: ExerciseLot | null;
 	name: string;
 	num_sets: number;
 }
 
+export type ExerciseEquipment = 'bands' | 'barbell' | 'body_only' | 'cable' | 'dumbbell' | 'exercise_ball' | 'ez_curl_bar' | 'foam_roll' | 'kettlebells' | 'machine' | 'medicine_ball' | 'other';
+
+export interface WorkoutEquipmentFocusedSummary {
+	/**
+	 * @default 'barbell'
+	 * @type {'bands' | 'barbell' | 'body_only' | 'cable' | 'dumbbell' | 'exercise_ball' | 'ez_curl_bar' | 'foam_roll' | 'kettlebells' | 'machine' | 'medicine_ball' | 'other'}
+	 */
+	equipment: ExerciseEquipment;
+	exercises: number[];
+}
+
+export type ExerciseForce = 'pull' | 'push' | 'static';
+
+export interface WorkoutForceFocusedSummary {
+	exercises: number[];
+	/**
+	 * @default 'pull'
+	 * @type {'pull' | 'push' | 'static'}
+	 */
+	force: ExerciseForce;
+}
+
+export type ExerciseLevel = 'beginner' | 'expert' | 'intermediate';
+
+export interface WorkoutLevelFocusedSummary {
+	exercises: number[];
+	/**
+	 * @default 'beginner'
+	 * @type {'beginner' | 'expert' | 'intermediate'}
+	 */
+	level: ExerciseLevel;
+}
+
+export interface WorkoutLotFocusedSummary {
+	exercises: number[];
+	/**
+	 * @default 'reps_and_weight'
+	 * @type {'duration' | 'distance_and_duration' | 'reps' | 'reps_and_weight'}
+	 */
+	lot: ExerciseLot;
+}
+
+export type ExerciseMuscle = 'abdominals' | 'abductors' | 'adductors' | 'biceps' | 'calves' | 'chest' | 'forearms' | 'glutes' | 'hamstrings' | 'lats' | 'lower_back' | 'middle_back' | 'neck' | 'quadriceps' | 'shoulders' | 'traps' | 'triceps';
+
+export interface WorkoutMuscleFocusedSummary {
+	exercises: number[];
+	/**
+	 * @default 'abdominals'
+	 * @type {'abdominals' | 'abductors' | 'adductors' | 'biceps' | 'calves' | 'chest' | 'forearms' | 'glutes' | 'hamstrings' | 'lats' | 'lower_back' | 'middle_back' | 'neck' | 'quadriceps' | 'shoulders' | 'traps' | 'triceps'}
+	 */
+	muscle: ExerciseMuscle;
+}
+
+export interface WorkoutFocusedSummary {
+	equipments: WorkoutEquipmentFocusedSummary[];
+	forces: WorkoutForceFocusedSummary[];
+	levels: WorkoutLevelFocusedSummary[];
+	lots: WorkoutLotFocusedSummary[];
+	muscles: WorkoutMuscleFocusedSummary[];
+}
+
 export interface WorkoutSummary {
 	exercises: WorkoutSummaryExercise[];
+	focused: WorkoutFocusedSummary;
 	total: WorkoutOrExerciseTotals | null;
 }
 
diff --git a/libs/generated/src/graphql/backend/codegen.ts b/libs/generated/src/graphql/backend/codegen.ts
index 9de199ed00..2ef69d0594 100644
--- a/libs/generated/src/graphql/backend/codegen.ts
+++ b/libs/generated/src/graphql/backend/codegen.ts
@@ -24,6 +24,9 @@ const config: CodegenConfig = {
 				fragmentMasking: false,
 			},
 		},
+		"src/graphql/backend/types.generated.ts": {
+			plugins: ["typescript"],
+		},
 	},
 	ignoreNoDocuments: true,
 	overwrite: true,
diff --git a/libs/generated/src/graphql/backend/gql.ts b/libs/generated/src/graphql/backend/gql.ts
index fc3944fdcd..ab8a7fd785 100644
--- a/libs/generated/src/graphql/backend/gql.ts
+++ b/libs/generated/src/graphql/backend/gql.ts
@@ -42,7 +42,7 @@ const documents = {
     "query UserWorkoutTemplatesList($input: SearchInput!) {\n  userWorkoutTemplatesList(input: $input) {\n    details {\n      total\n      nextPage\n    }\n    items {\n      id\n      name\n      createdOn\n      visibility\n      summary {\n        ...WorkoutSummaryPart\n      }\n    }\n  }\n}": types.UserWorkoutTemplatesListDocument,
     "query UserWorkoutsList($input: SearchInput!) {\n  userWorkoutsList(input: $input) {\n    details {\n      total\n      nextPage\n    }\n    items {\n      id\n      name\n      endTime\n      duration\n      startTime\n      summary {\n        ...WorkoutSummaryPart\n      }\n    }\n  }\n}": types.UserWorkoutsListDocument,
     "query GetOidcRedirectUrl {\n  getOidcRedirectUrl\n}\n\nquery UserByOidcIssuerId($oidcIssuerId: String!) {\n  userByOidcIssuerId(oidcIssuerId: $oidcIssuerId)\n}\n\nquery GetOidcToken($code: String!) {\n  getOidcToken(code: $code) {\n    subject\n    email\n  }\n}\n\nquery GetPresignedS3Url($key: String!) {\n  getPresignedS3Url(key: $key)\n}\n\nquery ProvidersLanguageInformation {\n  providersLanguageInformation {\n    supported\n    default\n    source\n  }\n}\n\nquery UserExports {\n  userExports {\n    url\n    size\n    endedAt\n    startedAt\n  }\n}\n\nquery UserCollectionsList($name: String) {\n  userCollectionsList(name: $name) {\n    id\n    name\n    count\n    isDefault\n    description\n    creator {\n      id\n      name\n    }\n    collaborators {\n      id\n      name\n    }\n    informationTemplate {\n      lot\n      name\n      required\n      description\n      defaultValue\n    }\n  }\n}\n\nquery UserIntegrations {\n  userIntegrations {\n    id\n    lot\n    provider\n    createdOn\n    isDisabled\n    maximumProgress\n    minimumProgress\n    lastTriggeredOn\n    syncToOwnedCollection\n  }\n}\n\nquery UserNotificationPlatforms {\n  userNotificationPlatforms {\n    id\n    lot\n    createdOn\n    isDisabled\n    description\n  }\n}\n\nquery UsersList($query: String) {\n  usersList(query: $query) {\n    id\n    lot\n    name\n    isDisabled\n  }\n}\n\nquery UserRecommendations {\n  userRecommendations\n}\n\nquery UserUpcomingCalendarEvents($input: UserUpcomingCalendarEventInput!) {\n  userUpcomingCalendarEvents(input: $input) {\n    ...CalendarEventPart\n  }\n}\n\nquery UserCalendarEvents($input: UserCalendarEventInput!) {\n  userCalendarEvents(input: $input) {\n    date\n    events {\n      ...CalendarEventPart\n    }\n  }\n}\n\nquery MetadataPartialDetails($metadataId: String!) {\n  metadataPartialDetails(metadataId: $metadataId) {\n    id\n    lot\n    title\n    image\n    publishYear\n  }\n}\n\nquery MetadataGroupsList($input: MetadataGroupsListInput!) {\n  metadataGroupsList(input: $input) {\n    details {\n      total\n      nextPage\n    }\n    items\n  }\n}\n\nquery PeopleList($input: PeopleListInput!) {\n  peopleList(input: $input) {\n    details {\n      total\n      nextPage\n    }\n    items\n  }\n}\n\nquery UserAccessLinks {\n  userAccessLinks {\n    id\n    name\n    isDemo\n    createdOn\n    expiresOn\n    timesUsed\n    isRevoked\n    maximumUses\n    isAccountDefault\n    isMutationAllowed\n  }\n}\n\nquery DailyUserActivities($input: DailyUserActivitiesInput!) {\n  dailyUserActivities(input: $input) {\n    groupedBy\n    totalCount\n    totalDuration\n    items {\n      day\n      totalReviewCount\n      workoutCount\n      measurementCount\n      audioBookCount\n      animeCount\n      bookCount\n      podcastCount\n      mangaCount\n      showCount\n      movieCount\n      videoGameCount\n      visualNovelCount\n    }\n  }\n}": types.GetOidcRedirectUrlDocument,
-    "fragment SeenPodcastExtraInformationPart on SeenPodcastExtraInformation {\n  episode\n}\n\nfragment SeenShowExtraInformationPart on SeenShowExtraInformation {\n  episode\n  season\n}\n\nfragment SeenAnimeExtraInformationPart on SeenAnimeExtraInformation {\n  episode\n}\n\nfragment SeenMangaExtraInformationPart on SeenMangaExtraInformation {\n  volume\n  chapter\n}\n\nfragment CalendarEventPart on GraphqlCalendarEvent {\n  date\n  metadataId\n  metadataLot\n  episodeName\n  metadataTitle\n  metadataImage\n  calendarEventId\n  showExtraInformation {\n    ...SeenShowExtraInformationPart\n  }\n  podcastExtraInformation {\n    ...SeenPodcastExtraInformationPart\n  }\n  animeExtraInformation {\n    ...SeenAnimeExtraInformationPart\n  }\n}\n\nfragment SeenPart on Seen {\n  id\n  state\n  progress\n  reviewId\n  startedOn\n  finishedOn\n  lastUpdatedOn\n  manualTimeSpent\n  numTimesUpdated\n  providerWatchedOn\n  showExtraInformation {\n    ...SeenShowExtraInformationPart\n  }\n  podcastExtraInformation {\n    ...SeenPodcastExtraInformationPart\n  }\n  animeExtraInformation {\n    ...SeenAnimeExtraInformationPart\n  }\n  mangaExtraInformation {\n    ...SeenMangaExtraInformationPart\n  }\n}\n\nfragment MetadataSearchItemPart on MetadataSearchItem {\n  title\n  image\n  identifier\n  publishYear\n}\n\nfragment WorkoutOrExerciseTotalsPart on WorkoutOrExerciseTotals {\n  reps\n  weight\n  distance\n  duration\n  restTime\n  personalBestsAchieved\n}\n\nfragment EntityAssetsPart on EntityAssets {\n  images\n  videos\n}\n\nfragment WorkoutSetStatisticPart on WorkoutSetStatistic {\n  reps\n  pace\n  oneRm\n  weight\n  volume\n  duration\n  distance\n}\n\nfragment WorkoutSetRecordPart on WorkoutSetRecord {\n  lot\n  personalBests\n  statistic {\n    ...WorkoutSetStatisticPart\n  }\n}\n\nfragment WorkoutSummaryPart on WorkoutSummary {\n  total {\n    ...WorkoutOrExerciseTotalsPart\n  }\n  exercises {\n    lot\n    name\n    numSets\n    bestSet {\n      ...WorkoutSetRecordPart\n    }\n  }\n}\n\nfragment CollectionPart on Collection {\n  id\n  name\n  userId\n}\n\nfragment ReviewItemPart on ReviewItem {\n  id\n  rating\n  postedOn\n  isSpoiler\n  visibility\n  textOriginal\n  textRendered\n  seenItemsAssociatedWith\n  postedBy {\n    id\n    name\n  }\n  comments {\n    id\n    text\n    likedBy\n    createdOn\n    user {\n      id\n      name\n    }\n  }\n  showExtraInformation {\n    ...SeenShowExtraInformationPart\n  }\n  podcastExtraInformation {\n    ...SeenPodcastExtraInformationPart\n  }\n  animeExtraInformation {\n    ...SeenAnimeExtraInformationPart\n  }\n  mangaExtraInformation {\n    ...SeenMangaExtraInformationPart\n  }\n}\n\nfragment WorkoutInformationPart on WorkoutInformation {\n  comment\n  assets {\n    ...EntityAssetsPart\n  }\n  supersets {\n    color\n    exercises\n  }\n  exercises {\n    lot\n    name\n    notes\n    total {\n      ...WorkoutOrExerciseTotalsPart\n    }\n    assets {\n      ...EntityAssetsPart\n    }\n    sets {\n      lot\n      note\n      restTime\n      confirmedAt\n      personalBests\n      statistic {\n        ...WorkoutSetStatisticPart\n      }\n    }\n  }\n}\n\nfragment SetRestTimersPart on SetRestTimersSettings {\n  drop\n  warmup\n  normal\n  failure\n}": types.SeenPodcastExtraInformationPartFragmentDoc,
+    "fragment SeenPodcastExtraInformationPart on SeenPodcastExtraInformation {\n  episode\n}\n\nfragment SeenShowExtraInformationPart on SeenShowExtraInformation {\n  episode\n  season\n}\n\nfragment SeenAnimeExtraInformationPart on SeenAnimeExtraInformation {\n  episode\n}\n\nfragment SeenMangaExtraInformationPart on SeenMangaExtraInformation {\n  volume\n  chapter\n}\n\nfragment CalendarEventPart on GraphqlCalendarEvent {\n  date\n  metadataId\n  metadataLot\n  episodeName\n  metadataTitle\n  metadataImage\n  calendarEventId\n  showExtraInformation {\n    ...SeenShowExtraInformationPart\n  }\n  podcastExtraInformation {\n    ...SeenPodcastExtraInformationPart\n  }\n  animeExtraInformation {\n    ...SeenAnimeExtraInformationPart\n  }\n}\n\nfragment SeenPart on Seen {\n  id\n  state\n  progress\n  reviewId\n  startedOn\n  finishedOn\n  lastUpdatedOn\n  manualTimeSpent\n  numTimesUpdated\n  providerWatchedOn\n  showExtraInformation {\n    ...SeenShowExtraInformationPart\n  }\n  podcastExtraInformation {\n    ...SeenPodcastExtraInformationPart\n  }\n  animeExtraInformation {\n    ...SeenAnimeExtraInformationPart\n  }\n  mangaExtraInformation {\n    ...SeenMangaExtraInformationPart\n  }\n}\n\nfragment MetadataSearchItemPart on MetadataSearchItem {\n  title\n  image\n  identifier\n  publishYear\n}\n\nfragment WorkoutOrExerciseTotalsPart on WorkoutOrExerciseTotals {\n  reps\n  weight\n  distance\n  duration\n  restTime\n  personalBestsAchieved\n}\n\nfragment EntityAssetsPart on EntityAssets {\n  images\n  videos\n}\n\nfragment WorkoutSetStatisticPart on WorkoutSetStatistic {\n  reps\n  pace\n  oneRm\n  weight\n  volume\n  duration\n  distance\n}\n\nfragment WorkoutSetRecordPart on WorkoutSetRecord {\n  lot\n  personalBests\n  statistic {\n    ...WorkoutSetStatisticPart\n  }\n}\n\nfragment WorkoutSummaryPart on WorkoutSummary {\n  total {\n    ...WorkoutOrExerciseTotalsPart\n  }\n  exercises {\n    lot\n    name\n    numSets\n    bestSet {\n      ...WorkoutSetRecordPart\n    }\n  }\n  focused {\n    lots {\n      lot\n      exercises\n    }\n    levels {\n      level\n      exercises\n    }\n    forces {\n      force\n      exercises\n    }\n    muscles {\n      muscle\n      exercises\n    }\n    equipments {\n      equipment\n      exercises\n    }\n  }\n}\n\nfragment CollectionPart on Collection {\n  id\n  name\n  userId\n}\n\nfragment ReviewItemPart on ReviewItem {\n  id\n  rating\n  postedOn\n  isSpoiler\n  visibility\n  textOriginal\n  textRendered\n  seenItemsAssociatedWith\n  postedBy {\n    id\n    name\n  }\n  comments {\n    id\n    text\n    likedBy\n    createdOn\n    user {\n      id\n      name\n    }\n  }\n  showExtraInformation {\n    ...SeenShowExtraInformationPart\n  }\n  podcastExtraInformation {\n    ...SeenPodcastExtraInformationPart\n  }\n  animeExtraInformation {\n    ...SeenAnimeExtraInformationPart\n  }\n  mangaExtraInformation {\n    ...SeenMangaExtraInformationPart\n  }\n}\n\nfragment WorkoutInformationPart on WorkoutInformation {\n  comment\n  assets {\n    ...EntityAssetsPart\n  }\n  supersets {\n    color\n    exercises\n  }\n  exercises {\n    lot\n    name\n    notes\n    total {\n      ...WorkoutOrExerciseTotalsPart\n    }\n    assets {\n      ...EntityAssetsPart\n    }\n    sets {\n      lot\n      note\n      restTime\n      confirmedAt\n      personalBests\n      statistic {\n        ...WorkoutSetStatisticPart\n      }\n    }\n  }\n}\n\nfragment SetRestTimersPart on SetRestTimersSettings {\n  drop\n  warmup\n  normal\n  failure\n}": types.SeenPodcastExtraInformationPartFragmentDoc,
 };
 
 /**
@@ -174,7 +174,7 @@ export function graphql(source: "query GetOidcRedirectUrl {\n  getOidcRedirectUr
 /**
  * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
  */
-export function graphql(source: "fragment SeenPodcastExtraInformationPart on SeenPodcastExtraInformation {\n  episode\n}\n\nfragment SeenShowExtraInformationPart on SeenShowExtraInformation {\n  episode\n  season\n}\n\nfragment SeenAnimeExtraInformationPart on SeenAnimeExtraInformation {\n  episode\n}\n\nfragment SeenMangaExtraInformationPart on SeenMangaExtraInformation {\n  volume\n  chapter\n}\n\nfragment CalendarEventPart on GraphqlCalendarEvent {\n  date\n  metadataId\n  metadataLot\n  episodeName\n  metadataTitle\n  metadataImage\n  calendarEventId\n  showExtraInformation {\n    ...SeenShowExtraInformationPart\n  }\n  podcastExtraInformation {\n    ...SeenPodcastExtraInformationPart\n  }\n  animeExtraInformation {\n    ...SeenAnimeExtraInformationPart\n  }\n}\n\nfragment SeenPart on Seen {\n  id\n  state\n  progress\n  reviewId\n  startedOn\n  finishedOn\n  lastUpdatedOn\n  manualTimeSpent\n  numTimesUpdated\n  providerWatchedOn\n  showExtraInformation {\n    ...SeenShowExtraInformationPart\n  }\n  podcastExtraInformation {\n    ...SeenPodcastExtraInformationPart\n  }\n  animeExtraInformation {\n    ...SeenAnimeExtraInformationPart\n  }\n  mangaExtraInformation {\n    ...SeenMangaExtraInformationPart\n  }\n}\n\nfragment MetadataSearchItemPart on MetadataSearchItem {\n  title\n  image\n  identifier\n  publishYear\n}\n\nfragment WorkoutOrExerciseTotalsPart on WorkoutOrExerciseTotals {\n  reps\n  weight\n  distance\n  duration\n  restTime\n  personalBestsAchieved\n}\n\nfragment EntityAssetsPart on EntityAssets {\n  images\n  videos\n}\n\nfragment WorkoutSetStatisticPart on WorkoutSetStatistic {\n  reps\n  pace\n  oneRm\n  weight\n  volume\n  duration\n  distance\n}\n\nfragment WorkoutSetRecordPart on WorkoutSetRecord {\n  lot\n  personalBests\n  statistic {\n    ...WorkoutSetStatisticPart\n  }\n}\n\nfragment WorkoutSummaryPart on WorkoutSummary {\n  total {\n    ...WorkoutOrExerciseTotalsPart\n  }\n  exercises {\n    lot\n    name\n    numSets\n    bestSet {\n      ...WorkoutSetRecordPart\n    }\n  }\n}\n\nfragment CollectionPart on Collection {\n  id\n  name\n  userId\n}\n\nfragment ReviewItemPart on ReviewItem {\n  id\n  rating\n  postedOn\n  isSpoiler\n  visibility\n  textOriginal\n  textRendered\n  seenItemsAssociatedWith\n  postedBy {\n    id\n    name\n  }\n  comments {\n    id\n    text\n    likedBy\n    createdOn\n    user {\n      id\n      name\n    }\n  }\n  showExtraInformation {\n    ...SeenShowExtraInformationPart\n  }\n  podcastExtraInformation {\n    ...SeenPodcastExtraInformationPart\n  }\n  animeExtraInformation {\n    ...SeenAnimeExtraInformationPart\n  }\n  mangaExtraInformation {\n    ...SeenMangaExtraInformationPart\n  }\n}\n\nfragment WorkoutInformationPart on WorkoutInformation {\n  comment\n  assets {\n    ...EntityAssetsPart\n  }\n  supersets {\n    color\n    exercises\n  }\n  exercises {\n    lot\n    name\n    notes\n    total {\n      ...WorkoutOrExerciseTotalsPart\n    }\n    assets {\n      ...EntityAssetsPart\n    }\n    sets {\n      lot\n      note\n      restTime\n      confirmedAt\n      personalBests\n      statistic {\n        ...WorkoutSetStatisticPart\n      }\n    }\n  }\n}\n\nfragment SetRestTimersPart on SetRestTimersSettings {\n  drop\n  warmup\n  normal\n  failure\n}"): (typeof documents)["fragment SeenPodcastExtraInformationPart on SeenPodcastExtraInformation {\n  episode\n}\n\nfragment SeenShowExtraInformationPart on SeenShowExtraInformation {\n  episode\n  season\n}\n\nfragment SeenAnimeExtraInformationPart on SeenAnimeExtraInformation {\n  episode\n}\n\nfragment SeenMangaExtraInformationPart on SeenMangaExtraInformation {\n  volume\n  chapter\n}\n\nfragment CalendarEventPart on GraphqlCalendarEvent {\n  date\n  metadataId\n  metadataLot\n  episodeName\n  metadataTitle\n  metadataImage\n  calendarEventId\n  showExtraInformation {\n    ...SeenShowExtraInformationPart\n  }\n  podcastExtraInformation {\n    ...SeenPodcastExtraInformationPart\n  }\n  animeExtraInformation {\n    ...SeenAnimeExtraInformationPart\n  }\n}\n\nfragment SeenPart on Seen {\n  id\n  state\n  progress\n  reviewId\n  startedOn\n  finishedOn\n  lastUpdatedOn\n  manualTimeSpent\n  numTimesUpdated\n  providerWatchedOn\n  showExtraInformation {\n    ...SeenShowExtraInformationPart\n  }\n  podcastExtraInformation {\n    ...SeenPodcastExtraInformationPart\n  }\n  animeExtraInformation {\n    ...SeenAnimeExtraInformationPart\n  }\n  mangaExtraInformation {\n    ...SeenMangaExtraInformationPart\n  }\n}\n\nfragment MetadataSearchItemPart on MetadataSearchItem {\n  title\n  image\n  identifier\n  publishYear\n}\n\nfragment WorkoutOrExerciseTotalsPart on WorkoutOrExerciseTotals {\n  reps\n  weight\n  distance\n  duration\n  restTime\n  personalBestsAchieved\n}\n\nfragment EntityAssetsPart on EntityAssets {\n  images\n  videos\n}\n\nfragment WorkoutSetStatisticPart on WorkoutSetStatistic {\n  reps\n  pace\n  oneRm\n  weight\n  volume\n  duration\n  distance\n}\n\nfragment WorkoutSetRecordPart on WorkoutSetRecord {\n  lot\n  personalBests\n  statistic {\n    ...WorkoutSetStatisticPart\n  }\n}\n\nfragment WorkoutSummaryPart on WorkoutSummary {\n  total {\n    ...WorkoutOrExerciseTotalsPart\n  }\n  exercises {\n    lot\n    name\n    numSets\n    bestSet {\n      ...WorkoutSetRecordPart\n    }\n  }\n}\n\nfragment CollectionPart on Collection {\n  id\n  name\n  userId\n}\n\nfragment ReviewItemPart on ReviewItem {\n  id\n  rating\n  postedOn\n  isSpoiler\n  visibility\n  textOriginal\n  textRendered\n  seenItemsAssociatedWith\n  postedBy {\n    id\n    name\n  }\n  comments {\n    id\n    text\n    likedBy\n    createdOn\n    user {\n      id\n      name\n    }\n  }\n  showExtraInformation {\n    ...SeenShowExtraInformationPart\n  }\n  podcastExtraInformation {\n    ...SeenPodcastExtraInformationPart\n  }\n  animeExtraInformation {\n    ...SeenAnimeExtraInformationPart\n  }\n  mangaExtraInformation {\n    ...SeenMangaExtraInformationPart\n  }\n}\n\nfragment WorkoutInformationPart on WorkoutInformation {\n  comment\n  assets {\n    ...EntityAssetsPart\n  }\n  supersets {\n    color\n    exercises\n  }\n  exercises {\n    lot\n    name\n    notes\n    total {\n      ...WorkoutOrExerciseTotalsPart\n    }\n    assets {\n      ...EntityAssetsPart\n    }\n    sets {\n      lot\n      note\n      restTime\n      confirmedAt\n      personalBests\n      statistic {\n        ...WorkoutSetStatisticPart\n      }\n    }\n  }\n}\n\nfragment SetRestTimersPart on SetRestTimersSettings {\n  drop\n  warmup\n  normal\n  failure\n}"];
+export function graphql(source: "fragment SeenPodcastExtraInformationPart on SeenPodcastExtraInformation {\n  episode\n}\n\nfragment SeenShowExtraInformationPart on SeenShowExtraInformation {\n  episode\n  season\n}\n\nfragment SeenAnimeExtraInformationPart on SeenAnimeExtraInformation {\n  episode\n}\n\nfragment SeenMangaExtraInformationPart on SeenMangaExtraInformation {\n  volume\n  chapter\n}\n\nfragment CalendarEventPart on GraphqlCalendarEvent {\n  date\n  metadataId\n  metadataLot\n  episodeName\n  metadataTitle\n  metadataImage\n  calendarEventId\n  showExtraInformation {\n    ...SeenShowExtraInformationPart\n  }\n  podcastExtraInformation {\n    ...SeenPodcastExtraInformationPart\n  }\n  animeExtraInformation {\n    ...SeenAnimeExtraInformationPart\n  }\n}\n\nfragment SeenPart on Seen {\n  id\n  state\n  progress\n  reviewId\n  startedOn\n  finishedOn\n  lastUpdatedOn\n  manualTimeSpent\n  numTimesUpdated\n  providerWatchedOn\n  showExtraInformation {\n    ...SeenShowExtraInformationPart\n  }\n  podcastExtraInformation {\n    ...SeenPodcastExtraInformationPart\n  }\n  animeExtraInformation {\n    ...SeenAnimeExtraInformationPart\n  }\n  mangaExtraInformation {\n    ...SeenMangaExtraInformationPart\n  }\n}\n\nfragment MetadataSearchItemPart on MetadataSearchItem {\n  title\n  image\n  identifier\n  publishYear\n}\n\nfragment WorkoutOrExerciseTotalsPart on WorkoutOrExerciseTotals {\n  reps\n  weight\n  distance\n  duration\n  restTime\n  personalBestsAchieved\n}\n\nfragment EntityAssetsPart on EntityAssets {\n  images\n  videos\n}\n\nfragment WorkoutSetStatisticPart on WorkoutSetStatistic {\n  reps\n  pace\n  oneRm\n  weight\n  volume\n  duration\n  distance\n}\n\nfragment WorkoutSetRecordPart on WorkoutSetRecord {\n  lot\n  personalBests\n  statistic {\n    ...WorkoutSetStatisticPart\n  }\n}\n\nfragment WorkoutSummaryPart on WorkoutSummary {\n  total {\n    ...WorkoutOrExerciseTotalsPart\n  }\n  exercises {\n    lot\n    name\n    numSets\n    bestSet {\n      ...WorkoutSetRecordPart\n    }\n  }\n  focused {\n    lots {\n      lot\n      exercises\n    }\n    levels {\n      level\n      exercises\n    }\n    forces {\n      force\n      exercises\n    }\n    muscles {\n      muscle\n      exercises\n    }\n    equipments {\n      equipment\n      exercises\n    }\n  }\n}\n\nfragment CollectionPart on Collection {\n  id\n  name\n  userId\n}\n\nfragment ReviewItemPart on ReviewItem {\n  id\n  rating\n  postedOn\n  isSpoiler\n  visibility\n  textOriginal\n  textRendered\n  seenItemsAssociatedWith\n  postedBy {\n    id\n    name\n  }\n  comments {\n    id\n    text\n    likedBy\n    createdOn\n    user {\n      id\n      name\n    }\n  }\n  showExtraInformation {\n    ...SeenShowExtraInformationPart\n  }\n  podcastExtraInformation {\n    ...SeenPodcastExtraInformationPart\n  }\n  animeExtraInformation {\n    ...SeenAnimeExtraInformationPart\n  }\n  mangaExtraInformation {\n    ...SeenMangaExtraInformationPart\n  }\n}\n\nfragment WorkoutInformationPart on WorkoutInformation {\n  comment\n  assets {\n    ...EntityAssetsPart\n  }\n  supersets {\n    color\n    exercises\n  }\n  exercises {\n    lot\n    name\n    notes\n    total {\n      ...WorkoutOrExerciseTotalsPart\n    }\n    assets {\n      ...EntityAssetsPart\n    }\n    sets {\n      lot\n      note\n      restTime\n      confirmedAt\n      personalBests\n      statistic {\n        ...WorkoutSetStatisticPart\n      }\n    }\n  }\n}\n\nfragment SetRestTimersPart on SetRestTimersSettings {\n  drop\n  warmup\n  normal\n  failure\n}"): (typeof documents)["fragment SeenPodcastExtraInformationPart on SeenPodcastExtraInformation {\n  episode\n}\n\nfragment SeenShowExtraInformationPart on SeenShowExtraInformation {\n  episode\n  season\n}\n\nfragment SeenAnimeExtraInformationPart on SeenAnimeExtraInformation {\n  episode\n}\n\nfragment SeenMangaExtraInformationPart on SeenMangaExtraInformation {\n  volume\n  chapter\n}\n\nfragment CalendarEventPart on GraphqlCalendarEvent {\n  date\n  metadataId\n  metadataLot\n  episodeName\n  metadataTitle\n  metadataImage\n  calendarEventId\n  showExtraInformation {\n    ...SeenShowExtraInformationPart\n  }\n  podcastExtraInformation {\n    ...SeenPodcastExtraInformationPart\n  }\n  animeExtraInformation {\n    ...SeenAnimeExtraInformationPart\n  }\n}\n\nfragment SeenPart on Seen {\n  id\n  state\n  progress\n  reviewId\n  startedOn\n  finishedOn\n  lastUpdatedOn\n  manualTimeSpent\n  numTimesUpdated\n  providerWatchedOn\n  showExtraInformation {\n    ...SeenShowExtraInformationPart\n  }\n  podcastExtraInformation {\n    ...SeenPodcastExtraInformationPart\n  }\n  animeExtraInformation {\n    ...SeenAnimeExtraInformationPart\n  }\n  mangaExtraInformation {\n    ...SeenMangaExtraInformationPart\n  }\n}\n\nfragment MetadataSearchItemPart on MetadataSearchItem {\n  title\n  image\n  identifier\n  publishYear\n}\n\nfragment WorkoutOrExerciseTotalsPart on WorkoutOrExerciseTotals {\n  reps\n  weight\n  distance\n  duration\n  restTime\n  personalBestsAchieved\n}\n\nfragment EntityAssetsPart on EntityAssets {\n  images\n  videos\n}\n\nfragment WorkoutSetStatisticPart on WorkoutSetStatistic {\n  reps\n  pace\n  oneRm\n  weight\n  volume\n  duration\n  distance\n}\n\nfragment WorkoutSetRecordPart on WorkoutSetRecord {\n  lot\n  personalBests\n  statistic {\n    ...WorkoutSetStatisticPart\n  }\n}\n\nfragment WorkoutSummaryPart on WorkoutSummary {\n  total {\n    ...WorkoutOrExerciseTotalsPart\n  }\n  exercises {\n    lot\n    name\n    numSets\n    bestSet {\n      ...WorkoutSetRecordPart\n    }\n  }\n  focused {\n    lots {\n      lot\n      exercises\n    }\n    levels {\n      level\n      exercises\n    }\n    forces {\n      force\n      exercises\n    }\n    muscles {\n      muscle\n      exercises\n    }\n    equipments {\n      equipment\n      exercises\n    }\n  }\n}\n\nfragment CollectionPart on Collection {\n  id\n  name\n  userId\n}\n\nfragment ReviewItemPart on ReviewItem {\n  id\n  rating\n  postedOn\n  isSpoiler\n  visibility\n  textOriginal\n  textRendered\n  seenItemsAssociatedWith\n  postedBy {\n    id\n    name\n  }\n  comments {\n    id\n    text\n    likedBy\n    createdOn\n    user {\n      id\n      name\n    }\n  }\n  showExtraInformation {\n    ...SeenShowExtraInformationPart\n  }\n  podcastExtraInformation {\n    ...SeenPodcastExtraInformationPart\n  }\n  animeExtraInformation {\n    ...SeenAnimeExtraInformationPart\n  }\n  mangaExtraInformation {\n    ...SeenMangaExtraInformationPart\n  }\n}\n\nfragment WorkoutInformationPart on WorkoutInformation {\n  comment\n  assets {\n    ...EntityAssetsPart\n  }\n  supersets {\n    color\n    exercises\n  }\n  exercises {\n    lot\n    name\n    notes\n    total {\n      ...WorkoutOrExerciseTotalsPart\n    }\n    assets {\n      ...EntityAssetsPart\n    }\n    sets {\n      lot\n      note\n      restTime\n      confirmedAt\n      personalBests\n      statistic {\n        ...WorkoutSetStatisticPart\n      }\n    }\n  }\n}\n\nfragment SetRestTimersPart on SetRestTimersSettings {\n  drop\n  warmup\n  normal\n  failure\n}"];
 
 export function graphql(source: string) {
   return (documents as any)[source] ?? {};
diff --git a/libs/generated/src/graphql/backend/graphql.ts b/libs/generated/src/graphql/backend/graphql.ts
index 0a07ec28d9..9a89078e7c 100644
--- a/libs/generated/src/graphql/backend/graphql.ts
+++ b/libs/generated/src/graphql/backend/graphql.ts
@@ -2616,6 +2616,24 @@ export type Workout = {
   templateId?: Maybe<Scalars['String']['output']>;
 };
 
+export type WorkoutEquipmentFocusedSummary = {
+  equipment: ExerciseEquipment;
+  exercises: Array<Scalars['Int']['output']>;
+};
+
+export type WorkoutFocusedSummary = {
+  equipments: Array<WorkoutEquipmentFocusedSummary>;
+  forces: Array<WorkoutForceFocusedSummary>;
+  levels: Array<WorkoutLevelFocusedSummary>;
+  lots: Array<WorkoutLotFocusedSummary>;
+  muscles: Array<WorkoutMuscleFocusedSummary>;
+};
+
+export type WorkoutForceFocusedSummary = {
+  exercises: Array<Scalars['Int']['output']>;
+  force: ExerciseForce;
+};
+
 /** Information about a workout done. */
 export type WorkoutInformation = {
   assets?: Maybe<EntityAssets>;
@@ -2624,11 +2642,26 @@ export type WorkoutInformation = {
   supersets: Array<WorkoutSupersetsInformation>;
 };
 
+export type WorkoutLevelFocusedSummary = {
+  exercises: Array<Scalars['Int']['output']>;
+  level: ExerciseLevel;
+};
+
 export type WorkoutListResults = {
   details: SearchDetails;
   items: Array<Workout>;
 };
 
+export type WorkoutLotFocusedSummary = {
+  exercises: Array<Scalars['Int']['output']>;
+  lot: ExerciseLot;
+};
+
+export type WorkoutMuscleFocusedSummary = {
+  exercises: Array<Scalars['Int']['output']>;
+  muscle: ExerciseMuscle;
+};
+
 /** The totals of a workout and the different bests achieved. */
 export type WorkoutOrExerciseTotals = {
   distance: Scalars['Decimal']['output'];
@@ -2680,6 +2713,7 @@ export type WorkoutSetTotals = {
 
 export type WorkoutSummary = {
   exercises: Array<WorkoutSummaryExercise>;
+  focused: WorkoutFocusedSummary;
   total?: Maybe<WorkoutOrExerciseTotals>;
 };
 
@@ -3213,28 +3247,28 @@ export type UserWorkoutDetailsQueryVariables = Exact<{
 }>;
 
 
-export type UserWorkoutDetailsQuery = { userWorkoutDetails: { collections: Array<{ id: string, name: string, userId: string }>, details: { id: string, name: string, endTime: string, duration: number, startTime: string, templateId?: string | null, repeatedFrom?: string | null, summary: { total?: { reps: string, weight: string, distance: string, duration: string, restTime: number, personalBestsAchieved: number } | null, exercises: Array<{ lot?: ExerciseLot | null, name: string, numSets: number, bestSet?: { lot: SetLot, personalBests?: Array<WorkoutSetPersonalBest> | null, statistic: { reps?: string | null, pace?: string | null, oneRm?: string | null, weight?: string | null, volume?: string | null, duration?: string | null, distance?: string | null } } | null }> }, information: { comment?: string | null, assets?: { images: Array<string>, videos: Array<string> } | null, supersets: Array<{ color: string, exercises: Array<number> }>, exercises: Array<{ lot: ExerciseLot, name: string, notes: Array<string>, total?: { reps: string, weight: string, distance: string, duration: string, restTime: number, personalBestsAchieved: number } | null, assets?: { images: Array<string>, videos: Array<string> } | null, sets: Array<{ lot: SetLot, note?: string | null, restTime?: number | null, confirmedAt?: string | null, personalBests?: Array<WorkoutSetPersonalBest> | null, statistic: { reps?: string | null, pace?: string | null, oneRm?: string | null, weight?: string | null, volume?: string | null, duration?: string | null, distance?: string | null } }> }> } } } };
+export type UserWorkoutDetailsQuery = { userWorkoutDetails: { collections: Array<{ id: string, name: string, userId: string }>, details: { id: string, name: string, endTime: string, duration: number, startTime: string, templateId?: string | null, repeatedFrom?: string | null, summary: { total?: { reps: string, weight: string, distance: string, duration: string, restTime: number, personalBestsAchieved: number } | null, exercises: Array<{ lot?: ExerciseLot | null, name: string, numSets: number, bestSet?: { lot: SetLot, personalBests?: Array<WorkoutSetPersonalBest> | null, statistic: { reps?: string | null, pace?: string | null, oneRm?: string | null, weight?: string | null, volume?: string | null, duration?: string | null, distance?: string | null } } | null }>, focused: { lots: Array<{ lot: ExerciseLot, exercises: Array<number> }>, levels: Array<{ level: ExerciseLevel, exercises: Array<number> }>, forces: Array<{ force: ExerciseForce, exercises: Array<number> }>, muscles: Array<{ muscle: ExerciseMuscle, exercises: Array<number> }>, equipments: Array<{ equipment: ExerciseEquipment, exercises: Array<number> }> } }, information: { comment?: string | null, assets?: { images: Array<string>, videos: Array<string> } | null, supersets: Array<{ color: string, exercises: Array<number> }>, exercises: Array<{ lot: ExerciseLot, name: string, notes: Array<string>, total?: { reps: string, weight: string, distance: string, duration: string, restTime: number, personalBestsAchieved: number } | null, assets?: { images: Array<string>, videos: Array<string> } | null, sets: Array<{ lot: SetLot, note?: string | null, restTime?: number | null, confirmedAt?: string | null, personalBests?: Array<WorkoutSetPersonalBest> | null, statistic: { reps?: string | null, pace?: string | null, oneRm?: string | null, weight?: string | null, volume?: string | null, duration?: string | null, distance?: string | null } }> }> } } } };
 
 export type UserWorkoutTemplateDetailsQueryVariables = Exact<{
   workoutTemplateId: Scalars['String']['input'];
 }>;
 
 
-export type UserWorkoutTemplateDetailsQuery = { userWorkoutTemplateDetails: { collections: Array<{ id: string, name: string, userId: string }>, details: { id: string, name: string, createdOn: string, visibility: Visibility, summary: { total?: { reps: string, weight: string, distance: string, duration: string, restTime: number, personalBestsAchieved: number } | null, exercises: Array<{ lot?: ExerciseLot | null, name: string, numSets: number, bestSet?: { lot: SetLot, personalBests?: Array<WorkoutSetPersonalBest> | null, statistic: { reps?: string | null, pace?: string | null, oneRm?: string | null, weight?: string | null, volume?: string | null, duration?: string | null, distance?: string | null } } | null }> }, information: { comment?: string | null, assets?: { images: Array<string>, videos: Array<string> } | null, supersets: Array<{ color: string, exercises: Array<number> }>, exercises: Array<{ lot: ExerciseLot, name: string, notes: Array<string>, total?: { reps: string, weight: string, distance: string, duration: string, restTime: number, personalBestsAchieved: number } | null, assets?: { images: Array<string>, videos: Array<string> } | null, sets: Array<{ lot: SetLot, note?: string | null, restTime?: number | null, confirmedAt?: string | null, personalBests?: Array<WorkoutSetPersonalBest> | null, statistic: { reps?: string | null, pace?: string | null, oneRm?: string | null, weight?: string | null, volume?: string | null, duration?: string | null, distance?: string | null } }> }> } } } };
+export type UserWorkoutTemplateDetailsQuery = { userWorkoutTemplateDetails: { collections: Array<{ id: string, name: string, userId: string }>, details: { id: string, name: string, createdOn: string, visibility: Visibility, summary: { total?: { reps: string, weight: string, distance: string, duration: string, restTime: number, personalBestsAchieved: number } | null, exercises: Array<{ lot?: ExerciseLot | null, name: string, numSets: number, bestSet?: { lot: SetLot, personalBests?: Array<WorkoutSetPersonalBest> | null, statistic: { reps?: string | null, pace?: string | null, oneRm?: string | null, weight?: string | null, volume?: string | null, duration?: string | null, distance?: string | null } } | null }>, focused: { lots: Array<{ lot: ExerciseLot, exercises: Array<number> }>, levels: Array<{ level: ExerciseLevel, exercises: Array<number> }>, forces: Array<{ force: ExerciseForce, exercises: Array<number> }>, muscles: Array<{ muscle: ExerciseMuscle, exercises: Array<number> }>, equipments: Array<{ equipment: ExerciseEquipment, exercises: Array<number> }> } }, information: { comment?: string | null, assets?: { images: Array<string>, videos: Array<string> } | null, supersets: Array<{ color: string, exercises: Array<number> }>, exercises: Array<{ lot: ExerciseLot, name: string, notes: Array<string>, total?: { reps: string, weight: string, distance: string, duration: string, restTime: number, personalBestsAchieved: number } | null, assets?: { images: Array<string>, videos: Array<string> } | null, sets: Array<{ lot: SetLot, note?: string | null, restTime?: number | null, confirmedAt?: string | null, personalBests?: Array<WorkoutSetPersonalBest> | null, statistic: { reps?: string | null, pace?: string | null, oneRm?: string | null, weight?: string | null, volume?: string | null, duration?: string | null, distance?: string | null } }> }> } } } };
 
 export type UserWorkoutTemplatesListQueryVariables = Exact<{
   input: SearchInput;
 }>;
 
 
-export type UserWorkoutTemplatesListQuery = { userWorkoutTemplatesList: { details: { total: number, nextPage?: number | null }, items: Array<{ id: string, name: string, createdOn: string, visibility: Visibility, summary: { total?: { reps: string, weight: string, distance: string, duration: string, restTime: number, personalBestsAchieved: number } | null, exercises: Array<{ lot?: ExerciseLot | null, name: string, numSets: number, bestSet?: { lot: SetLot, personalBests?: Array<WorkoutSetPersonalBest> | null, statistic: { reps?: string | null, pace?: string | null, oneRm?: string | null, weight?: string | null, volume?: string | null, duration?: string | null, distance?: string | null } } | null }> } }> } };
+export type UserWorkoutTemplatesListQuery = { userWorkoutTemplatesList: { details: { total: number, nextPage?: number | null }, items: Array<{ id: string, name: string, createdOn: string, visibility: Visibility, summary: { total?: { reps: string, weight: string, distance: string, duration: string, restTime: number, personalBestsAchieved: number } | null, exercises: Array<{ lot?: ExerciseLot | null, name: string, numSets: number, bestSet?: { lot: SetLot, personalBests?: Array<WorkoutSetPersonalBest> | null, statistic: { reps?: string | null, pace?: string | null, oneRm?: string | null, weight?: string | null, volume?: string | null, duration?: string | null, distance?: string | null } } | null }>, focused: { lots: Array<{ lot: ExerciseLot, exercises: Array<number> }>, levels: Array<{ level: ExerciseLevel, exercises: Array<number> }>, forces: Array<{ force: ExerciseForce, exercises: Array<number> }>, muscles: Array<{ muscle: ExerciseMuscle, exercises: Array<number> }>, equipments: Array<{ equipment: ExerciseEquipment, exercises: Array<number> }> } } }> } };
 
 export type UserWorkoutsListQueryVariables = Exact<{
   input: SearchInput;
 }>;
 
 
-export type UserWorkoutsListQuery = { userWorkoutsList: { details: { total: number, nextPage?: number | null }, items: Array<{ id: string, name: string, endTime: string, duration: number, startTime: string, summary: { total?: { reps: string, weight: string, distance: string, duration: string, restTime: number, personalBestsAchieved: number } | null, exercises: Array<{ lot?: ExerciseLot | null, name: string, numSets: number, bestSet?: { lot: SetLot, personalBests?: Array<WorkoutSetPersonalBest> | null, statistic: { reps?: string | null, pace?: string | null, oneRm?: string | null, weight?: string | null, volume?: string | null, duration?: string | null, distance?: string | null } } | null }> } }> } };
+export type UserWorkoutsListQuery = { userWorkoutsList: { details: { total: number, nextPage?: number | null }, items: Array<{ id: string, name: string, endTime: string, duration: number, startTime: string, summary: { total?: { reps: string, weight: string, distance: string, duration: string, restTime: number, personalBestsAchieved: number } | null, exercises: Array<{ lot?: ExerciseLot | null, name: string, numSets: number, bestSet?: { lot: SetLot, personalBests?: Array<WorkoutSetPersonalBest> | null, statistic: { reps?: string | null, pace?: string | null, oneRm?: string | null, weight?: string | null, volume?: string | null, duration?: string | null, distance?: string | null } } | null }>, focused: { lots: Array<{ lot: ExerciseLot, exercises: Array<number> }>, levels: Array<{ level: ExerciseLevel, exercises: Array<number> }>, forces: Array<{ force: ExerciseForce, exercises: Array<number> }>, muscles: Array<{ muscle: ExerciseMuscle, exercises: Array<number> }>, equipments: Array<{ equipment: ExerciseEquipment, exercises: Array<number> }> } } }> } };
 
 export type GetOidcRedirectUrlQueryVariables = Exact<{ [key: string]: never; }>;
 
@@ -3370,7 +3404,7 @@ export type WorkoutSetStatisticPartFragment = { reps?: string | null, pace?: str
 
 export type WorkoutSetRecordPartFragment = { lot: SetLot, personalBests?: Array<WorkoutSetPersonalBest> | null, statistic: { reps?: string | null, pace?: string | null, oneRm?: string | null, weight?: string | null, volume?: string | null, duration?: string | null, distance?: string | null } };
 
-export type WorkoutSummaryPartFragment = { total?: { reps: string, weight: string, distance: string, duration: string, restTime: number, personalBestsAchieved: number } | null, exercises: Array<{ lot?: ExerciseLot | null, name: string, numSets: number, bestSet?: { lot: SetLot, personalBests?: Array<WorkoutSetPersonalBest> | null, statistic: { reps?: string | null, pace?: string | null, oneRm?: string | null, weight?: string | null, volume?: string | null, duration?: string | null, distance?: string | null } } | null }> };
+export type WorkoutSummaryPartFragment = { total?: { reps: string, weight: string, distance: string, duration: string, restTime: number, personalBestsAchieved: number } | null, exercises: Array<{ lot?: ExerciseLot | null, name: string, numSets: number, bestSet?: { lot: SetLot, personalBests?: Array<WorkoutSetPersonalBest> | null, statistic: { reps?: string | null, pace?: string | null, oneRm?: string | null, weight?: string | null, volume?: string | null, duration?: string | null, distance?: string | null } } | null }>, focused: { lots: Array<{ lot: ExerciseLot, exercises: Array<number> }>, levels: Array<{ level: ExerciseLevel, exercises: Array<number> }>, forces: Array<{ force: ExerciseForce, exercises: Array<number> }>, muscles: Array<{ muscle: ExerciseMuscle, exercises: Array<number> }>, equipments: Array<{ equipment: ExerciseEquipment, exercises: Array<number> }> } };
 
 export type CollectionPartFragment = { id: string, name: string, userId: string };
 
@@ -3390,7 +3424,7 @@ export const MetadataSearchItemPartFragmentDoc = {"kind":"Document","definitions
 export const WorkoutOrExerciseTotalsPartFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkoutOrExerciseTotalsPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkoutOrExerciseTotals"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"reps"}},{"kind":"Field","name":{"kind":"Name","value":"weight"}},{"kind":"Field","name":{"kind":"Name","value":"distance"}},{"kind":"Field","name":{"kind":"Name","value":"duration"}},{"kind":"Field","name":{"kind":"Name","value":"restTime"}},{"kind":"Field","name":{"kind":"Name","value":"personalBestsAchieved"}}]}}]} as unknown as DocumentNode<WorkoutOrExerciseTotalsPartFragment, unknown>;
 export const WorkoutSetStatisticPartFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkoutSetStatisticPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkoutSetStatistic"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"reps"}},{"kind":"Field","name":{"kind":"Name","value":"pace"}},{"kind":"Field","name":{"kind":"Name","value":"oneRm"}},{"kind":"Field","name":{"kind":"Name","value":"weight"}},{"kind":"Field","name":{"kind":"Name","value":"volume"}},{"kind":"Field","name":{"kind":"Name","value":"duration"}},{"kind":"Field","name":{"kind":"Name","value":"distance"}}]}}]} as unknown as DocumentNode<WorkoutSetStatisticPartFragment, unknown>;
 export const WorkoutSetRecordPartFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkoutSetRecordPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkoutSetRecord"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"lot"}},{"kind":"Field","name":{"kind":"Name","value":"personalBests"}},{"kind":"Field","name":{"kind":"Name","value":"statistic"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkoutSetStatisticPart"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkoutSetStatisticPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkoutSetStatistic"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"reps"}},{"kind":"Field","name":{"kind":"Name","value":"pace"}},{"kind":"Field","name":{"kind":"Name","value":"oneRm"}},{"kind":"Field","name":{"kind":"Name","value":"weight"}},{"kind":"Field","name":{"kind":"Name","value":"volume"}},{"kind":"Field","name":{"kind":"Name","value":"duration"}},{"kind":"Field","name":{"kind":"Name","value":"distance"}}]}}]} as unknown as DocumentNode<WorkoutSetRecordPartFragment, unknown>;
-export const WorkoutSummaryPartFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkoutSummaryPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkoutSummary"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"total"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkoutOrExerciseTotalsPart"}}]}},{"kind":"Field","name":{"kind":"Name","value":"exercises"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"lot"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"numSets"}},{"kind":"Field","name":{"kind":"Name","value":"bestSet"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkoutSetRecordPart"}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkoutSetStatisticPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkoutSetStatistic"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"reps"}},{"kind":"Field","name":{"kind":"Name","value":"pace"}},{"kind":"Field","name":{"kind":"Name","value":"oneRm"}},{"kind":"Field","name":{"kind":"Name","value":"weight"}},{"kind":"Field","name":{"kind":"Name","value":"volume"}},{"kind":"Field","name":{"kind":"Name","value":"duration"}},{"kind":"Field","name":{"kind":"Name","value":"distance"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkoutOrExerciseTotalsPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkoutOrExerciseTotals"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"reps"}},{"kind":"Field","name":{"kind":"Name","value":"weight"}},{"kind":"Field","name":{"kind":"Name","value":"distance"}},{"kind":"Field","name":{"kind":"Name","value":"duration"}},{"kind":"Field","name":{"kind":"Name","value":"restTime"}},{"kind":"Field","name":{"kind":"Name","value":"personalBestsAchieved"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkoutSetRecordPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkoutSetRecord"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"lot"}},{"kind":"Field","name":{"kind":"Name","value":"personalBests"}},{"kind":"Field","name":{"kind":"Name","value":"statistic"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkoutSetStatisticPart"}}]}}]}}]} as unknown as DocumentNode<WorkoutSummaryPartFragment, unknown>;
+export const WorkoutSummaryPartFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkoutSummaryPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkoutSummary"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"total"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkoutOrExerciseTotalsPart"}}]}},{"kind":"Field","name":{"kind":"Name","value":"exercises"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"lot"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"numSets"}},{"kind":"Field","name":{"kind":"Name","value":"bestSet"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkoutSetRecordPart"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"focused"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"lots"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"lot"}},{"kind":"Field","name":{"kind":"Name","value":"exercises"}}]}},{"kind":"Field","name":{"kind":"Name","value":"levels"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"level"}},{"kind":"Field","name":{"kind":"Name","value":"exercises"}}]}},{"kind":"Field","name":{"kind":"Name","value":"forces"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"force"}},{"kind":"Field","name":{"kind":"Name","value":"exercises"}}]}},{"kind":"Field","name":{"kind":"Name","value":"muscles"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"muscle"}},{"kind":"Field","name":{"kind":"Name","value":"exercises"}}]}},{"kind":"Field","name":{"kind":"Name","value":"equipments"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"equipment"}},{"kind":"Field","name":{"kind":"Name","value":"exercises"}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkoutSetStatisticPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkoutSetStatistic"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"reps"}},{"kind":"Field","name":{"kind":"Name","value":"pace"}},{"kind":"Field","name":{"kind":"Name","value":"oneRm"}},{"kind":"Field","name":{"kind":"Name","value":"weight"}},{"kind":"Field","name":{"kind":"Name","value":"volume"}},{"kind":"Field","name":{"kind":"Name","value":"duration"}},{"kind":"Field","name":{"kind":"Name","value":"distance"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkoutOrExerciseTotalsPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkoutOrExerciseTotals"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"reps"}},{"kind":"Field","name":{"kind":"Name","value":"weight"}},{"kind":"Field","name":{"kind":"Name","value":"distance"}},{"kind":"Field","name":{"kind":"Name","value":"duration"}},{"kind":"Field","name":{"kind":"Name","value":"restTime"}},{"kind":"Field","name":{"kind":"Name","value":"personalBestsAchieved"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkoutSetRecordPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkoutSetRecord"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"lot"}},{"kind":"Field","name":{"kind":"Name","value":"personalBests"}},{"kind":"Field","name":{"kind":"Name","value":"statistic"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkoutSetStatisticPart"}}]}}]}}]} as unknown as DocumentNode<WorkoutSummaryPartFragment, unknown>;
 export const CollectionPartFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"CollectionPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Collection"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"userId"}}]}}]} as unknown as DocumentNode<CollectionPartFragment, unknown>;
 export const ReviewItemPartFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ReviewItemPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ReviewItem"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"rating"}},{"kind":"Field","name":{"kind":"Name","value":"postedOn"}},{"kind":"Field","name":{"kind":"Name","value":"isSpoiler"}},{"kind":"Field","name":{"kind":"Name","value":"visibility"}},{"kind":"Field","name":{"kind":"Name","value":"textOriginal"}},{"kind":"Field","name":{"kind":"Name","value":"textRendered"}},{"kind":"Field","name":{"kind":"Name","value":"seenItemsAssociatedWith"}},{"kind":"Field","name":{"kind":"Name","value":"postedBy"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}},{"kind":"Field","name":{"kind":"Name","value":"comments"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"text"}},{"kind":"Field","name":{"kind":"Name","value":"likedBy"}},{"kind":"Field","name":{"kind":"Name","value":"createdOn"}},{"kind":"Field","name":{"kind":"Name","value":"user"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"showExtraInformation"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"SeenShowExtraInformationPart"}}]}},{"kind":"Field","name":{"kind":"Name","value":"podcastExtraInformation"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"SeenPodcastExtraInformationPart"}}]}},{"kind":"Field","name":{"kind":"Name","value":"animeExtraInformation"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"SeenAnimeExtraInformationPart"}}]}},{"kind":"Field","name":{"kind":"Name","value":"mangaExtraInformation"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"SeenMangaExtraInformationPart"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"SeenShowExtraInformationPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"SeenShowExtraInformation"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"episode"}},{"kind":"Field","name":{"kind":"Name","value":"season"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"SeenPodcastExtraInformationPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"SeenPodcastExtraInformation"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"episode"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"SeenAnimeExtraInformationPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"SeenAnimeExtraInformation"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"episode"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"SeenMangaExtraInformationPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"SeenMangaExtraInformation"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"volume"}},{"kind":"Field","name":{"kind":"Name","value":"chapter"}}]}}]} as unknown as DocumentNode<ReviewItemPartFragment, unknown>;
 export const EntityAssetsPartFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"EntityAssetsPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"EntityAssets"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"images"}},{"kind":"Field","name":{"kind":"Name","value":"videos"}}]}}]} as unknown as DocumentNode<EntityAssetsPartFragment, unknown>;
@@ -3468,10 +3502,10 @@ export const UserMeasurementsListDocument = {"kind":"Document","definitions":[{"
 export const UserMetadataDetailsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"UserMetadataDetails"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"metadataId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"userMetadataDetails"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"metadataId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"metadataId"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"mediaReason"}},{"kind":"Field","name":{"kind":"Name","value":"hasInteracted"}},{"kind":"Field","name":{"kind":"Name","value":"collections"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"CollectionPart"}}]}},{"kind":"Field","name":{"kind":"Name","value":"inProgress"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"SeenPart"}}]}},{"kind":"Field","name":{"kind":"Name","value":"history"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"SeenPart"}}]}},{"kind":"Field","name":{"kind":"Name","value":"averageRating"}},{"kind":"Field","name":{"kind":"Name","value":"reviews"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ReviewItemPart"}}]}},{"kind":"Field","name":{"kind":"Name","value":"seenByAllCount"}},{"kind":"Field","name":{"kind":"Name","value":"seenByUserCount"}},{"kind":"Field","name":{"kind":"Name","value":"nextEntry"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"season"}},{"kind":"Field","name":{"kind":"Name","value":"volume"}},{"kind":"Field","name":{"kind":"Name","value":"episode"}},{"kind":"Field","name":{"kind":"Name","value":"chapter"}}]}},{"kind":"Field","name":{"kind":"Name","value":"showProgress"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"timesSeen"}},{"kind":"Field","name":{"kind":"Name","value":"seasonNumber"}},{"kind":"Field","name":{"kind":"Name","value":"episodes"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"episodeNumber"}},{"kind":"Field","name":{"kind":"Name","value":"timesSeen"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"podcastProgress"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"episodeNumber"}},{"kind":"Field","name":{"kind":"Name","value":"timesSeen"}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"SeenShowExtraInformationPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"SeenShowExtraInformation"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"episode"}},{"kind":"Field","name":{"kind":"Name","value":"season"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"SeenPodcastExtraInformationPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"SeenPodcastExtraInformation"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"episode"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"SeenAnimeExtraInformationPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"SeenAnimeExtraInformation"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"episode"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"SeenMangaExtraInformationPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"SeenMangaExtraInformation"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"volume"}},{"kind":"Field","name":{"kind":"Name","value":"chapter"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"CollectionPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Collection"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"userId"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"SeenPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Seen"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"state"}},{"kind":"Field","name":{"kind":"Name","value":"progress"}},{"kind":"Field","name":{"kind":"Name","value":"reviewId"}},{"kind":"Field","name":{"kind":"Name","value":"startedOn"}},{"kind":"Field","name":{"kind":"Name","value":"finishedOn"}},{"kind":"Field","name":{"kind":"Name","value":"lastUpdatedOn"}},{"kind":"Field","name":{"kind":"Name","value":"manualTimeSpent"}},{"kind":"Field","name":{"kind":"Name","value":"numTimesUpdated"}},{"kind":"Field","name":{"kind":"Name","value":"providerWatchedOn"}},{"kind":"Field","name":{"kind":"Name","value":"showExtraInformation"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"SeenShowExtraInformationPart"}}]}},{"kind":"Field","name":{"kind":"Name","value":"podcastExtraInformation"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"SeenPodcastExtraInformationPart"}}]}},{"kind":"Field","name":{"kind":"Name","value":"animeExtraInformation"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"SeenAnimeExtraInformationPart"}}]}},{"kind":"Field","name":{"kind":"Name","value":"mangaExtraInformation"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"SeenMangaExtraInformationPart"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ReviewItemPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ReviewItem"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"rating"}},{"kind":"Field","name":{"kind":"Name","value":"postedOn"}},{"kind":"Field","name":{"kind":"Name","value":"isSpoiler"}},{"kind":"Field","name":{"kind":"Name","value":"visibility"}},{"kind":"Field","name":{"kind":"Name","value":"textOriginal"}},{"kind":"Field","name":{"kind":"Name","value":"textRendered"}},{"kind":"Field","name":{"kind":"Name","value":"seenItemsAssociatedWith"}},{"kind":"Field","name":{"kind":"Name","value":"postedBy"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}},{"kind":"Field","name":{"kind":"Name","value":"comments"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"text"}},{"kind":"Field","name":{"kind":"Name","value":"likedBy"}},{"kind":"Field","name":{"kind":"Name","value":"createdOn"}},{"kind":"Field","name":{"kind":"Name","value":"user"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"showExtraInformation"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"SeenShowExtraInformationPart"}}]}},{"kind":"Field","name":{"kind":"Name","value":"podcastExtraInformation"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"SeenPodcastExtraInformationPart"}}]}},{"kind":"Field","name":{"kind":"Name","value":"animeExtraInformation"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"SeenAnimeExtraInformationPart"}}]}},{"kind":"Field","name":{"kind":"Name","value":"mangaExtraInformation"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"SeenMangaExtraInformationPart"}}]}}]}}]} as unknown as DocumentNode<UserMetadataDetailsQuery, UserMetadataDetailsQueryVariables>;
 export const UserMetadataGroupDetailsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"UserMetadataGroupDetails"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"metadataGroupId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"userMetadataGroupDetails"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"metadataGroupId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"metadataGroupId"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"reviews"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ReviewItemPart"}}]}},{"kind":"Field","name":{"kind":"Name","value":"collections"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"CollectionPart"}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"SeenShowExtraInformationPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"SeenShowExtraInformation"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"episode"}},{"kind":"Field","name":{"kind":"Name","value":"season"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"SeenPodcastExtraInformationPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"SeenPodcastExtraInformation"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"episode"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"SeenAnimeExtraInformationPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"SeenAnimeExtraInformation"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"episode"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"SeenMangaExtraInformationPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"SeenMangaExtraInformation"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"volume"}},{"kind":"Field","name":{"kind":"Name","value":"chapter"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ReviewItemPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ReviewItem"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"rating"}},{"kind":"Field","name":{"kind":"Name","value":"postedOn"}},{"kind":"Field","name":{"kind":"Name","value":"isSpoiler"}},{"kind":"Field","name":{"kind":"Name","value":"visibility"}},{"kind":"Field","name":{"kind":"Name","value":"textOriginal"}},{"kind":"Field","name":{"kind":"Name","value":"textRendered"}},{"kind":"Field","name":{"kind":"Name","value":"seenItemsAssociatedWith"}},{"kind":"Field","name":{"kind":"Name","value":"postedBy"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}},{"kind":"Field","name":{"kind":"Name","value":"comments"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"text"}},{"kind":"Field","name":{"kind":"Name","value":"likedBy"}},{"kind":"Field","name":{"kind":"Name","value":"createdOn"}},{"kind":"Field","name":{"kind":"Name","value":"user"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"showExtraInformation"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"SeenShowExtraInformationPart"}}]}},{"kind":"Field","name":{"kind":"Name","value":"podcastExtraInformation"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"SeenPodcastExtraInformationPart"}}]}},{"kind":"Field","name":{"kind":"Name","value":"animeExtraInformation"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"SeenAnimeExtraInformationPart"}}]}},{"kind":"Field","name":{"kind":"Name","value":"mangaExtraInformation"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"SeenMangaExtraInformationPart"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"CollectionPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Collection"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"userId"}}]}}]} as unknown as DocumentNode<UserMetadataGroupDetailsQuery, UserMetadataGroupDetailsQueryVariables>;
 export const UserPersonDetailsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"UserPersonDetails"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"personId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"userPersonDetails"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"personId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"personId"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"collections"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"CollectionPart"}}]}},{"kind":"Field","name":{"kind":"Name","value":"reviews"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ReviewItemPart"}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"SeenShowExtraInformationPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"SeenShowExtraInformation"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"episode"}},{"kind":"Field","name":{"kind":"Name","value":"season"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"SeenPodcastExtraInformationPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"SeenPodcastExtraInformation"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"episode"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"SeenAnimeExtraInformationPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"SeenAnimeExtraInformation"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"episode"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"SeenMangaExtraInformationPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"SeenMangaExtraInformation"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"volume"}},{"kind":"Field","name":{"kind":"Name","value":"chapter"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"CollectionPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Collection"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"userId"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ReviewItemPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ReviewItem"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"rating"}},{"kind":"Field","name":{"kind":"Name","value":"postedOn"}},{"kind":"Field","name":{"kind":"Name","value":"isSpoiler"}},{"kind":"Field","name":{"kind":"Name","value":"visibility"}},{"kind":"Field","name":{"kind":"Name","value":"textOriginal"}},{"kind":"Field","name":{"kind":"Name","value":"textRendered"}},{"kind":"Field","name":{"kind":"Name","value":"seenItemsAssociatedWith"}},{"kind":"Field","name":{"kind":"Name","value":"postedBy"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}},{"kind":"Field","name":{"kind":"Name","value":"comments"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"text"}},{"kind":"Field","name":{"kind":"Name","value":"likedBy"}},{"kind":"Field","name":{"kind":"Name","value":"createdOn"}},{"kind":"Field","name":{"kind":"Name","value":"user"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"showExtraInformation"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"SeenShowExtraInformationPart"}}]}},{"kind":"Field","name":{"kind":"Name","value":"podcastExtraInformation"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"SeenPodcastExtraInformationPart"}}]}},{"kind":"Field","name":{"kind":"Name","value":"animeExtraInformation"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"SeenAnimeExtraInformationPart"}}]}},{"kind":"Field","name":{"kind":"Name","value":"mangaExtraInformation"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"SeenMangaExtraInformationPart"}}]}}]}}]} as unknown as DocumentNode<UserPersonDetailsQuery, UserPersonDetailsQueryVariables>;
-export const UserWorkoutDetailsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"UserWorkoutDetails"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"workoutId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"userWorkoutDetails"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"workoutId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"workoutId"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"collections"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"CollectionPart"}}]}},{"kind":"Field","name":{"kind":"Name","value":"details"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"endTime"}},{"kind":"Field","name":{"kind":"Name","value":"duration"}},{"kind":"Field","name":{"kind":"Name","value":"startTime"}},{"kind":"Field","name":{"kind":"Name","value":"templateId"}},{"kind":"Field","name":{"kind":"Name","value":"repeatedFrom"}},{"kind":"Field","name":{"kind":"Name","value":"summary"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkoutSummaryPart"}}]}},{"kind":"Field","name":{"kind":"Name","value":"information"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkoutInformationPart"}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkoutOrExerciseTotalsPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkoutOrExerciseTotals"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"reps"}},{"kind":"Field","name":{"kind":"Name","value":"weight"}},{"kind":"Field","name":{"kind":"Name","value":"distance"}},{"kind":"Field","name":{"kind":"Name","value":"duration"}},{"kind":"Field","name":{"kind":"Name","value":"restTime"}},{"kind":"Field","name":{"kind":"Name","value":"personalBestsAchieved"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkoutSetStatisticPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkoutSetStatistic"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"reps"}},{"kind":"Field","name":{"kind":"Name","value":"pace"}},{"kind":"Field","name":{"kind":"Name","value":"oneRm"}},{"kind":"Field","name":{"kind":"Name","value":"weight"}},{"kind":"Field","name":{"kind":"Name","value":"volume"}},{"kind":"Field","name":{"kind":"Name","value":"duration"}},{"kind":"Field","name":{"kind":"Name","value":"distance"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkoutSetRecordPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkoutSetRecord"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"lot"}},{"kind":"Field","name":{"kind":"Name","value":"personalBests"}},{"kind":"Field","name":{"kind":"Name","value":"statistic"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkoutSetStatisticPart"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"EntityAssetsPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"EntityAssets"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"images"}},{"kind":"Field","name":{"kind":"Name","value":"videos"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"CollectionPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Collection"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"userId"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkoutSummaryPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkoutSummary"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"total"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkoutOrExerciseTotalsPart"}}]}},{"kind":"Field","name":{"kind":"Name","value":"exercises"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"lot"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"numSets"}},{"kind":"Field","name":{"kind":"Name","value":"bestSet"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkoutSetRecordPart"}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkoutInformationPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkoutInformation"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"comment"}},{"kind":"Field","name":{"kind":"Name","value":"assets"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"EntityAssetsPart"}}]}},{"kind":"Field","name":{"kind":"Name","value":"supersets"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"color"}},{"kind":"Field","name":{"kind":"Name","value":"exercises"}}]}},{"kind":"Field","name":{"kind":"Name","value":"exercises"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"lot"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"notes"}},{"kind":"Field","name":{"kind":"Name","value":"total"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkoutOrExerciseTotalsPart"}}]}},{"kind":"Field","name":{"kind":"Name","value":"assets"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"EntityAssetsPart"}}]}},{"kind":"Field","name":{"kind":"Name","value":"sets"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"lot"}},{"kind":"Field","name":{"kind":"Name","value":"note"}},{"kind":"Field","name":{"kind":"Name","value":"restTime"}},{"kind":"Field","name":{"kind":"Name","value":"confirmedAt"}},{"kind":"Field","name":{"kind":"Name","value":"personalBests"}},{"kind":"Field","name":{"kind":"Name","value":"statistic"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkoutSetStatisticPart"}}]}}]}}]}}]}}]} as unknown as DocumentNode<UserWorkoutDetailsQuery, UserWorkoutDetailsQueryVariables>;
-export const UserWorkoutTemplateDetailsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"UserWorkoutTemplateDetails"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"workoutTemplateId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"userWorkoutTemplateDetails"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"workoutTemplateId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"workoutTemplateId"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"collections"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"CollectionPart"}}]}},{"kind":"Field","name":{"kind":"Name","value":"details"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"createdOn"}},{"kind":"Field","name":{"kind":"Name","value":"visibility"}},{"kind":"Field","name":{"kind":"Name","value":"summary"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkoutSummaryPart"}}]}},{"kind":"Field","name":{"kind":"Name","value":"information"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkoutInformationPart"}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkoutOrExerciseTotalsPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkoutOrExerciseTotals"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"reps"}},{"kind":"Field","name":{"kind":"Name","value":"weight"}},{"kind":"Field","name":{"kind":"Name","value":"distance"}},{"kind":"Field","name":{"kind":"Name","value":"duration"}},{"kind":"Field","name":{"kind":"Name","value":"restTime"}},{"kind":"Field","name":{"kind":"Name","value":"personalBestsAchieved"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkoutSetStatisticPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkoutSetStatistic"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"reps"}},{"kind":"Field","name":{"kind":"Name","value":"pace"}},{"kind":"Field","name":{"kind":"Name","value":"oneRm"}},{"kind":"Field","name":{"kind":"Name","value":"weight"}},{"kind":"Field","name":{"kind":"Name","value":"volume"}},{"kind":"Field","name":{"kind":"Name","value":"duration"}},{"kind":"Field","name":{"kind":"Name","value":"distance"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkoutSetRecordPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkoutSetRecord"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"lot"}},{"kind":"Field","name":{"kind":"Name","value":"personalBests"}},{"kind":"Field","name":{"kind":"Name","value":"statistic"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkoutSetStatisticPart"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"EntityAssetsPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"EntityAssets"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"images"}},{"kind":"Field","name":{"kind":"Name","value":"videos"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"CollectionPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Collection"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"userId"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkoutSummaryPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkoutSummary"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"total"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkoutOrExerciseTotalsPart"}}]}},{"kind":"Field","name":{"kind":"Name","value":"exercises"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"lot"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"numSets"}},{"kind":"Field","name":{"kind":"Name","value":"bestSet"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkoutSetRecordPart"}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkoutInformationPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkoutInformation"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"comment"}},{"kind":"Field","name":{"kind":"Name","value":"assets"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"EntityAssetsPart"}}]}},{"kind":"Field","name":{"kind":"Name","value":"supersets"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"color"}},{"kind":"Field","name":{"kind":"Name","value":"exercises"}}]}},{"kind":"Field","name":{"kind":"Name","value":"exercises"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"lot"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"notes"}},{"kind":"Field","name":{"kind":"Name","value":"total"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkoutOrExerciseTotalsPart"}}]}},{"kind":"Field","name":{"kind":"Name","value":"assets"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"EntityAssetsPart"}}]}},{"kind":"Field","name":{"kind":"Name","value":"sets"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"lot"}},{"kind":"Field","name":{"kind":"Name","value":"note"}},{"kind":"Field","name":{"kind":"Name","value":"restTime"}},{"kind":"Field","name":{"kind":"Name","value":"confirmedAt"}},{"kind":"Field","name":{"kind":"Name","value":"personalBests"}},{"kind":"Field","name":{"kind":"Name","value":"statistic"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkoutSetStatisticPart"}}]}}]}}]}}]}}]} as unknown as DocumentNode<UserWorkoutTemplateDetailsQuery, UserWorkoutTemplateDetailsQueryVariables>;
-export const UserWorkoutTemplatesListDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"UserWorkoutTemplatesList"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"SearchInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"userWorkoutTemplatesList"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"details"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"total"}},{"kind":"Field","name":{"kind":"Name","value":"nextPage"}}]}},{"kind":"Field","name":{"kind":"Name","value":"items"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"createdOn"}},{"kind":"Field","name":{"kind":"Name","value":"visibility"}},{"kind":"Field","name":{"kind":"Name","value":"summary"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkoutSummaryPart"}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkoutOrExerciseTotalsPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkoutOrExerciseTotals"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"reps"}},{"kind":"Field","name":{"kind":"Name","value":"weight"}},{"kind":"Field","name":{"kind":"Name","value":"distance"}},{"kind":"Field","name":{"kind":"Name","value":"duration"}},{"kind":"Field","name":{"kind":"Name","value":"restTime"}},{"kind":"Field","name":{"kind":"Name","value":"personalBestsAchieved"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkoutSetStatisticPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkoutSetStatistic"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"reps"}},{"kind":"Field","name":{"kind":"Name","value":"pace"}},{"kind":"Field","name":{"kind":"Name","value":"oneRm"}},{"kind":"Field","name":{"kind":"Name","value":"weight"}},{"kind":"Field","name":{"kind":"Name","value":"volume"}},{"kind":"Field","name":{"kind":"Name","value":"duration"}},{"kind":"Field","name":{"kind":"Name","value":"distance"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkoutSetRecordPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkoutSetRecord"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"lot"}},{"kind":"Field","name":{"kind":"Name","value":"personalBests"}},{"kind":"Field","name":{"kind":"Name","value":"statistic"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkoutSetStatisticPart"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkoutSummaryPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkoutSummary"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"total"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkoutOrExerciseTotalsPart"}}]}},{"kind":"Field","name":{"kind":"Name","value":"exercises"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"lot"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"numSets"}},{"kind":"Field","name":{"kind":"Name","value":"bestSet"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkoutSetRecordPart"}}]}}]}}]}}]} as unknown as DocumentNode<UserWorkoutTemplatesListQuery, UserWorkoutTemplatesListQueryVariables>;
-export const UserWorkoutsListDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"UserWorkoutsList"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"SearchInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"userWorkoutsList"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"details"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"total"}},{"kind":"Field","name":{"kind":"Name","value":"nextPage"}}]}},{"kind":"Field","name":{"kind":"Name","value":"items"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"endTime"}},{"kind":"Field","name":{"kind":"Name","value":"duration"}},{"kind":"Field","name":{"kind":"Name","value":"startTime"}},{"kind":"Field","name":{"kind":"Name","value":"summary"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkoutSummaryPart"}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkoutOrExerciseTotalsPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkoutOrExerciseTotals"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"reps"}},{"kind":"Field","name":{"kind":"Name","value":"weight"}},{"kind":"Field","name":{"kind":"Name","value":"distance"}},{"kind":"Field","name":{"kind":"Name","value":"duration"}},{"kind":"Field","name":{"kind":"Name","value":"restTime"}},{"kind":"Field","name":{"kind":"Name","value":"personalBestsAchieved"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkoutSetStatisticPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkoutSetStatistic"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"reps"}},{"kind":"Field","name":{"kind":"Name","value":"pace"}},{"kind":"Field","name":{"kind":"Name","value":"oneRm"}},{"kind":"Field","name":{"kind":"Name","value":"weight"}},{"kind":"Field","name":{"kind":"Name","value":"volume"}},{"kind":"Field","name":{"kind":"Name","value":"duration"}},{"kind":"Field","name":{"kind":"Name","value":"distance"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkoutSetRecordPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkoutSetRecord"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"lot"}},{"kind":"Field","name":{"kind":"Name","value":"personalBests"}},{"kind":"Field","name":{"kind":"Name","value":"statistic"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkoutSetStatisticPart"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkoutSummaryPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkoutSummary"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"total"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkoutOrExerciseTotalsPart"}}]}},{"kind":"Field","name":{"kind":"Name","value":"exercises"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"lot"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"numSets"}},{"kind":"Field","name":{"kind":"Name","value":"bestSet"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkoutSetRecordPart"}}]}}]}}]}}]} as unknown as DocumentNode<UserWorkoutsListQuery, UserWorkoutsListQueryVariables>;
+export const UserWorkoutDetailsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"UserWorkoutDetails"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"workoutId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"userWorkoutDetails"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"workoutId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"workoutId"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"collections"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"CollectionPart"}}]}},{"kind":"Field","name":{"kind":"Name","value":"details"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"endTime"}},{"kind":"Field","name":{"kind":"Name","value":"duration"}},{"kind":"Field","name":{"kind":"Name","value":"startTime"}},{"kind":"Field","name":{"kind":"Name","value":"templateId"}},{"kind":"Field","name":{"kind":"Name","value":"repeatedFrom"}},{"kind":"Field","name":{"kind":"Name","value":"summary"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkoutSummaryPart"}}]}},{"kind":"Field","name":{"kind":"Name","value":"information"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkoutInformationPart"}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkoutOrExerciseTotalsPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkoutOrExerciseTotals"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"reps"}},{"kind":"Field","name":{"kind":"Name","value":"weight"}},{"kind":"Field","name":{"kind":"Name","value":"distance"}},{"kind":"Field","name":{"kind":"Name","value":"duration"}},{"kind":"Field","name":{"kind":"Name","value":"restTime"}},{"kind":"Field","name":{"kind":"Name","value":"personalBestsAchieved"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkoutSetStatisticPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkoutSetStatistic"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"reps"}},{"kind":"Field","name":{"kind":"Name","value":"pace"}},{"kind":"Field","name":{"kind":"Name","value":"oneRm"}},{"kind":"Field","name":{"kind":"Name","value":"weight"}},{"kind":"Field","name":{"kind":"Name","value":"volume"}},{"kind":"Field","name":{"kind":"Name","value":"duration"}},{"kind":"Field","name":{"kind":"Name","value":"distance"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkoutSetRecordPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkoutSetRecord"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"lot"}},{"kind":"Field","name":{"kind":"Name","value":"personalBests"}},{"kind":"Field","name":{"kind":"Name","value":"statistic"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkoutSetStatisticPart"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"EntityAssetsPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"EntityAssets"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"images"}},{"kind":"Field","name":{"kind":"Name","value":"videos"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"CollectionPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Collection"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"userId"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkoutSummaryPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkoutSummary"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"total"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkoutOrExerciseTotalsPart"}}]}},{"kind":"Field","name":{"kind":"Name","value":"exercises"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"lot"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"numSets"}},{"kind":"Field","name":{"kind":"Name","value":"bestSet"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkoutSetRecordPart"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"focused"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"lots"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"lot"}},{"kind":"Field","name":{"kind":"Name","value":"exercises"}}]}},{"kind":"Field","name":{"kind":"Name","value":"levels"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"level"}},{"kind":"Field","name":{"kind":"Name","value":"exercises"}}]}},{"kind":"Field","name":{"kind":"Name","value":"forces"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"force"}},{"kind":"Field","name":{"kind":"Name","value":"exercises"}}]}},{"kind":"Field","name":{"kind":"Name","value":"muscles"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"muscle"}},{"kind":"Field","name":{"kind":"Name","value":"exercises"}}]}},{"kind":"Field","name":{"kind":"Name","value":"equipments"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"equipment"}},{"kind":"Field","name":{"kind":"Name","value":"exercises"}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkoutInformationPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkoutInformation"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"comment"}},{"kind":"Field","name":{"kind":"Name","value":"assets"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"EntityAssetsPart"}}]}},{"kind":"Field","name":{"kind":"Name","value":"supersets"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"color"}},{"kind":"Field","name":{"kind":"Name","value":"exercises"}}]}},{"kind":"Field","name":{"kind":"Name","value":"exercises"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"lot"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"notes"}},{"kind":"Field","name":{"kind":"Name","value":"total"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkoutOrExerciseTotalsPart"}}]}},{"kind":"Field","name":{"kind":"Name","value":"assets"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"EntityAssetsPart"}}]}},{"kind":"Field","name":{"kind":"Name","value":"sets"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"lot"}},{"kind":"Field","name":{"kind":"Name","value":"note"}},{"kind":"Field","name":{"kind":"Name","value":"restTime"}},{"kind":"Field","name":{"kind":"Name","value":"confirmedAt"}},{"kind":"Field","name":{"kind":"Name","value":"personalBests"}},{"kind":"Field","name":{"kind":"Name","value":"statistic"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkoutSetStatisticPart"}}]}}]}}]}}]}}]} as unknown as DocumentNode<UserWorkoutDetailsQuery, UserWorkoutDetailsQueryVariables>;
+export const UserWorkoutTemplateDetailsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"UserWorkoutTemplateDetails"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"workoutTemplateId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"userWorkoutTemplateDetails"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"workoutTemplateId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"workoutTemplateId"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"collections"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"CollectionPart"}}]}},{"kind":"Field","name":{"kind":"Name","value":"details"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"createdOn"}},{"kind":"Field","name":{"kind":"Name","value":"visibility"}},{"kind":"Field","name":{"kind":"Name","value":"summary"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkoutSummaryPart"}}]}},{"kind":"Field","name":{"kind":"Name","value":"information"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkoutInformationPart"}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkoutOrExerciseTotalsPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkoutOrExerciseTotals"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"reps"}},{"kind":"Field","name":{"kind":"Name","value":"weight"}},{"kind":"Field","name":{"kind":"Name","value":"distance"}},{"kind":"Field","name":{"kind":"Name","value":"duration"}},{"kind":"Field","name":{"kind":"Name","value":"restTime"}},{"kind":"Field","name":{"kind":"Name","value":"personalBestsAchieved"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkoutSetStatisticPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkoutSetStatistic"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"reps"}},{"kind":"Field","name":{"kind":"Name","value":"pace"}},{"kind":"Field","name":{"kind":"Name","value":"oneRm"}},{"kind":"Field","name":{"kind":"Name","value":"weight"}},{"kind":"Field","name":{"kind":"Name","value":"volume"}},{"kind":"Field","name":{"kind":"Name","value":"duration"}},{"kind":"Field","name":{"kind":"Name","value":"distance"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkoutSetRecordPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkoutSetRecord"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"lot"}},{"kind":"Field","name":{"kind":"Name","value":"personalBests"}},{"kind":"Field","name":{"kind":"Name","value":"statistic"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkoutSetStatisticPart"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"EntityAssetsPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"EntityAssets"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"images"}},{"kind":"Field","name":{"kind":"Name","value":"videos"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"CollectionPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Collection"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"userId"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkoutSummaryPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkoutSummary"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"total"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkoutOrExerciseTotalsPart"}}]}},{"kind":"Field","name":{"kind":"Name","value":"exercises"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"lot"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"numSets"}},{"kind":"Field","name":{"kind":"Name","value":"bestSet"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkoutSetRecordPart"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"focused"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"lots"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"lot"}},{"kind":"Field","name":{"kind":"Name","value":"exercises"}}]}},{"kind":"Field","name":{"kind":"Name","value":"levels"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"level"}},{"kind":"Field","name":{"kind":"Name","value":"exercises"}}]}},{"kind":"Field","name":{"kind":"Name","value":"forces"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"force"}},{"kind":"Field","name":{"kind":"Name","value":"exercises"}}]}},{"kind":"Field","name":{"kind":"Name","value":"muscles"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"muscle"}},{"kind":"Field","name":{"kind":"Name","value":"exercises"}}]}},{"kind":"Field","name":{"kind":"Name","value":"equipments"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"equipment"}},{"kind":"Field","name":{"kind":"Name","value":"exercises"}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkoutInformationPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkoutInformation"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"comment"}},{"kind":"Field","name":{"kind":"Name","value":"assets"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"EntityAssetsPart"}}]}},{"kind":"Field","name":{"kind":"Name","value":"supersets"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"color"}},{"kind":"Field","name":{"kind":"Name","value":"exercises"}}]}},{"kind":"Field","name":{"kind":"Name","value":"exercises"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"lot"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"notes"}},{"kind":"Field","name":{"kind":"Name","value":"total"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkoutOrExerciseTotalsPart"}}]}},{"kind":"Field","name":{"kind":"Name","value":"assets"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"EntityAssetsPart"}}]}},{"kind":"Field","name":{"kind":"Name","value":"sets"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"lot"}},{"kind":"Field","name":{"kind":"Name","value":"note"}},{"kind":"Field","name":{"kind":"Name","value":"restTime"}},{"kind":"Field","name":{"kind":"Name","value":"confirmedAt"}},{"kind":"Field","name":{"kind":"Name","value":"personalBests"}},{"kind":"Field","name":{"kind":"Name","value":"statistic"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkoutSetStatisticPart"}}]}}]}}]}}]}}]} as unknown as DocumentNode<UserWorkoutTemplateDetailsQuery, UserWorkoutTemplateDetailsQueryVariables>;
+export const UserWorkoutTemplatesListDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"UserWorkoutTemplatesList"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"SearchInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"userWorkoutTemplatesList"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"details"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"total"}},{"kind":"Field","name":{"kind":"Name","value":"nextPage"}}]}},{"kind":"Field","name":{"kind":"Name","value":"items"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"createdOn"}},{"kind":"Field","name":{"kind":"Name","value":"visibility"}},{"kind":"Field","name":{"kind":"Name","value":"summary"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkoutSummaryPart"}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkoutOrExerciseTotalsPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkoutOrExerciseTotals"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"reps"}},{"kind":"Field","name":{"kind":"Name","value":"weight"}},{"kind":"Field","name":{"kind":"Name","value":"distance"}},{"kind":"Field","name":{"kind":"Name","value":"duration"}},{"kind":"Field","name":{"kind":"Name","value":"restTime"}},{"kind":"Field","name":{"kind":"Name","value":"personalBestsAchieved"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkoutSetStatisticPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkoutSetStatistic"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"reps"}},{"kind":"Field","name":{"kind":"Name","value":"pace"}},{"kind":"Field","name":{"kind":"Name","value":"oneRm"}},{"kind":"Field","name":{"kind":"Name","value":"weight"}},{"kind":"Field","name":{"kind":"Name","value":"volume"}},{"kind":"Field","name":{"kind":"Name","value":"duration"}},{"kind":"Field","name":{"kind":"Name","value":"distance"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkoutSetRecordPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkoutSetRecord"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"lot"}},{"kind":"Field","name":{"kind":"Name","value":"personalBests"}},{"kind":"Field","name":{"kind":"Name","value":"statistic"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkoutSetStatisticPart"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkoutSummaryPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkoutSummary"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"total"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkoutOrExerciseTotalsPart"}}]}},{"kind":"Field","name":{"kind":"Name","value":"exercises"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"lot"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"numSets"}},{"kind":"Field","name":{"kind":"Name","value":"bestSet"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkoutSetRecordPart"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"focused"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"lots"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"lot"}},{"kind":"Field","name":{"kind":"Name","value":"exercises"}}]}},{"kind":"Field","name":{"kind":"Name","value":"levels"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"level"}},{"kind":"Field","name":{"kind":"Name","value":"exercises"}}]}},{"kind":"Field","name":{"kind":"Name","value":"forces"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"force"}},{"kind":"Field","name":{"kind":"Name","value":"exercises"}}]}},{"kind":"Field","name":{"kind":"Name","value":"muscles"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"muscle"}},{"kind":"Field","name":{"kind":"Name","value":"exercises"}}]}},{"kind":"Field","name":{"kind":"Name","value":"equipments"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"equipment"}},{"kind":"Field","name":{"kind":"Name","value":"exercises"}}]}}]}}]}}]} as unknown as DocumentNode<UserWorkoutTemplatesListQuery, UserWorkoutTemplatesListQueryVariables>;
+export const UserWorkoutsListDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"UserWorkoutsList"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"SearchInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"userWorkoutsList"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"details"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"total"}},{"kind":"Field","name":{"kind":"Name","value":"nextPage"}}]}},{"kind":"Field","name":{"kind":"Name","value":"items"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"endTime"}},{"kind":"Field","name":{"kind":"Name","value":"duration"}},{"kind":"Field","name":{"kind":"Name","value":"startTime"}},{"kind":"Field","name":{"kind":"Name","value":"summary"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkoutSummaryPart"}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkoutOrExerciseTotalsPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkoutOrExerciseTotals"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"reps"}},{"kind":"Field","name":{"kind":"Name","value":"weight"}},{"kind":"Field","name":{"kind":"Name","value":"distance"}},{"kind":"Field","name":{"kind":"Name","value":"duration"}},{"kind":"Field","name":{"kind":"Name","value":"restTime"}},{"kind":"Field","name":{"kind":"Name","value":"personalBestsAchieved"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkoutSetStatisticPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkoutSetStatistic"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"reps"}},{"kind":"Field","name":{"kind":"Name","value":"pace"}},{"kind":"Field","name":{"kind":"Name","value":"oneRm"}},{"kind":"Field","name":{"kind":"Name","value":"weight"}},{"kind":"Field","name":{"kind":"Name","value":"volume"}},{"kind":"Field","name":{"kind":"Name","value":"duration"}},{"kind":"Field","name":{"kind":"Name","value":"distance"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkoutSetRecordPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkoutSetRecord"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"lot"}},{"kind":"Field","name":{"kind":"Name","value":"personalBests"}},{"kind":"Field","name":{"kind":"Name","value":"statistic"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkoutSetStatisticPart"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkoutSummaryPart"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkoutSummary"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"total"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkoutOrExerciseTotalsPart"}}]}},{"kind":"Field","name":{"kind":"Name","value":"exercises"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"lot"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"numSets"}},{"kind":"Field","name":{"kind":"Name","value":"bestSet"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkoutSetRecordPart"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"focused"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"lots"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"lot"}},{"kind":"Field","name":{"kind":"Name","value":"exercises"}}]}},{"kind":"Field","name":{"kind":"Name","value":"levels"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"level"}},{"kind":"Field","name":{"kind":"Name","value":"exercises"}}]}},{"kind":"Field","name":{"kind":"Name","value":"forces"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"force"}},{"kind":"Field","name":{"kind":"Name","value":"exercises"}}]}},{"kind":"Field","name":{"kind":"Name","value":"muscles"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"muscle"}},{"kind":"Field","name":{"kind":"Name","value":"exercises"}}]}},{"kind":"Field","name":{"kind":"Name","value":"equipments"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"equipment"}},{"kind":"Field","name":{"kind":"Name","value":"exercises"}}]}}]}}]}}]} as unknown as DocumentNode<UserWorkoutsListQuery, UserWorkoutsListQueryVariables>;
 export const GetOidcRedirectUrlDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetOidcRedirectUrl"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"getOidcRedirectUrl"}}]}}]} as unknown as DocumentNode<GetOidcRedirectUrlQuery, GetOidcRedirectUrlQueryVariables>;
 export const UserByOidcIssuerIdDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"UserByOidcIssuerId"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"oidcIssuerId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"userByOidcIssuerId"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"oidcIssuerId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"oidcIssuerId"}}}]}]}}]} as unknown as DocumentNode<UserByOidcIssuerIdQuery, UserByOidcIssuerIdQueryVariables>;
 export const GetOidcTokenDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetOidcToken"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"code"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"getOidcToken"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"code"},"value":{"kind":"Variable","name":{"kind":"Name","value":"code"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"subject"}},{"kind":"Field","name":{"kind":"Name","value":"email"}}]}}]}}]} as unknown as DocumentNode<GetOidcTokenQuery, GetOidcTokenQueryVariables>;
diff --git a/libs/generated/src/graphql/backend/types.generated.ts b/libs/generated/src/graphql/backend/types.generated.ts
new file mode 100644
index 0000000000..567eaa0600
--- /dev/null
+++ b/libs/generated/src/graphql/backend/types.generated.ts
@@ -0,0 +1,2871 @@
+export type Maybe<T> = T | null;
+export type InputMaybe<T> = Maybe<T>;
+export type Exact<T extends { [key: string]: unknown }> = { [K in keyof T]: T[K] };
+export type MakeOptional<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]?: Maybe<T[SubKey]> };
+export type MakeMaybe<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]: Maybe<T[SubKey]> };
+export type MakeEmpty<T extends { [key: string]: unknown }, K extends keyof T> = { [_ in K]?: never };
+export type Incremental<T> = T | { [P in keyof T]?: P extends ' $fragmentName' | '__typename' ? T[P] : never };
+/** All built-in and custom scalars, mapped to their actual values */
+export type Scalars = {
+  ID: { input: string; output: string; }
+  String: { input: string; output: string; }
+  Boolean: { input: boolean; output: boolean; }
+  Int: { input: number; output: number; }
+  Float: { input: number; output: number; }
+  DateTime: { input: string; output: string; }
+  Decimal: { input: string; output: string; }
+  JSON: { input: any; output: any; }
+  JSONObject: { input: any; output: any; }
+  NaiveDate: { input: string; output: string; }
+  NaiveDateTime: { input: any; output: any; }
+};
+
+export type AccessLink = {
+  __typename?: 'AccessLink';
+  createdOn: Scalars['DateTime']['output'];
+  expiresOn?: Maybe<Scalars['DateTime']['output']>;
+  id: Scalars['String']['output'];
+  isAccountDefault?: Maybe<Scalars['Boolean']['output']>;
+  isDemo?: Maybe<Scalars['Boolean']['output']>;
+  isMutationAllowed?: Maybe<Scalars['Boolean']['output']>;
+  isRevoked?: Maybe<Scalars['Boolean']['output']>;
+  maximumUses?: Maybe<Scalars['Int']['output']>;
+  name: Scalars['String']['output'];
+  redirectTo?: Maybe<Scalars['String']['output']>;
+  timesUsed: Scalars['Int']['output'];
+};
+
+export type AnimeAiringScheduleSpecifics = {
+  __typename?: 'AnimeAiringScheduleSpecifics';
+  airingAt: Scalars['NaiveDateTime']['output'];
+  episode: Scalars['Int']['output'];
+};
+
+export type AnimeAiringScheduleSpecificsInput = {
+  airingAt: Scalars['NaiveDateTime']['input'];
+  episode: Scalars['Int']['input'];
+};
+
+export type AnimeSpecifics = {
+  __typename?: 'AnimeSpecifics';
+  airingSchedule?: Maybe<Array<AnimeAiringScheduleSpecifics>>;
+  episodes?: Maybe<Scalars['Int']['output']>;
+};
+
+export type AnimeSpecificsInput = {
+  airingSchedule?: InputMaybe<Array<AnimeAiringScheduleSpecificsInput>>;
+  episodes?: InputMaybe<Scalars['Int']['input']>;
+};
+
+export type AudioBookSpecifics = {
+  __typename?: 'AudioBookSpecifics';
+  runtime?: Maybe<Scalars['Int']['output']>;
+};
+
+export type AudioBookSpecificsInput = {
+  runtime?: InputMaybe<Scalars['Int']['input']>;
+};
+
+export type AuthUserInput = {
+  oidc?: InputMaybe<OidcUserInput>;
+  password?: InputMaybe<PasswordUserInput>;
+};
+
+export enum BackendError {
+  AdminOnlyAction = 'ADMIN_ONLY_ACTION',
+  MutationNotAllowed = 'MUTATION_NOT_ALLOWED',
+  NoAuthToken = 'NO_AUTH_TOKEN',
+  NoUserId = 'NO_USER_ID',
+  SessionExpired = 'SESSION_EXPIRED'
+}
+
+export enum BackgroundJob {
+  CalculateUserActivitiesAndSummary = 'CALCULATE_USER_ACTIVITIES_AND_SUMMARY',
+  PerformBackgroundTasks = 'PERFORM_BACKGROUND_TASKS',
+  RecalculateCalendarEvents = 'RECALCULATE_CALENDAR_EVENTS',
+  ReEvaluateUserWorkouts = 'RE_EVALUATE_USER_WORKOUTS',
+  SyncIntegrationsData = 'SYNC_INTEGRATIONS_DATA',
+  UpdateAllExercises = 'UPDATE_ALL_EXERCISES',
+  UpdateAllMetadata = 'UPDATE_ALL_METADATA'
+}
+
+export type BookSpecifics = {
+  __typename?: 'BookSpecifics';
+  pages?: Maybe<Scalars['Int']['output']>;
+};
+
+export type BookSpecificsInput = {
+  pages?: InputMaybe<Scalars['Int']['input']>;
+};
+
+export type ChangeCollectionToEntityInput = {
+  collectionName: Scalars['String']['input'];
+  creatorUserId: Scalars['String']['input'];
+  entityId: Scalars['String']['input'];
+  entityLot: EntityLot;
+  information?: InputMaybe<Scalars['JSON']['input']>;
+};
+
+export type Collection = {
+  __typename?: 'Collection';
+  createdOn: Scalars['DateTime']['output'];
+  description?: Maybe<Scalars['String']['output']>;
+  id: Scalars['String']['output'];
+  informationTemplate?: Maybe<Array<CollectionExtraInformation>>;
+  lastUpdatedOn: Scalars['DateTime']['output'];
+  name: Scalars['String']['output'];
+  userId: Scalars['String']['output'];
+};
+
+export type CollectionContents = {
+  __typename?: 'CollectionContents';
+  details: Collection;
+  results: MediaCollectionContentsResults;
+  reviews: Array<ReviewItem>;
+  user: User;
+};
+
+export type CollectionContentsFilter = {
+  entityLot?: InputMaybe<EntityLot>;
+  metadataLot?: InputMaybe<MediaLot>;
+};
+
+export type CollectionContentsInput = {
+  collectionId: Scalars['String']['input'];
+  filter?: InputMaybe<CollectionContentsFilter>;
+  search?: InputMaybe<SearchInput>;
+  sort?: InputMaybe<CollectionContentsSortInput>;
+  take?: InputMaybe<Scalars['Int']['input']>;
+};
+
+export enum CollectionContentsSortBy {
+  Date = 'DATE',
+  LastUpdatedOn = 'LAST_UPDATED_ON',
+  Title = 'TITLE'
+}
+
+export type CollectionContentsSortInput = {
+  by?: CollectionContentsSortBy;
+  order?: GraphqlSortOrder;
+};
+
+export type CollectionExtraInformation = {
+  __typename?: 'CollectionExtraInformation';
+  defaultValue?: Maybe<Scalars['String']['output']>;
+  description: Scalars['String']['output'];
+  lot: CollectionExtraInformationLot;
+  name: Scalars['String']['output'];
+  required?: Maybe<Scalars['Boolean']['output']>;
+};
+
+export type CollectionExtraInformationInput = {
+  defaultValue?: InputMaybe<Scalars['String']['input']>;
+  description: Scalars['String']['input'];
+  lot: CollectionExtraInformationLot;
+  name: Scalars['String']['input'];
+  required?: InputMaybe<Scalars['Boolean']['input']>;
+};
+
+export enum CollectionExtraInformationLot {
+  Date = 'DATE',
+  DateTime = 'DATE_TIME',
+  Number = 'NUMBER',
+  String = 'STRING',
+  StringArray = 'STRING_ARRAY'
+}
+
+export type CollectionItem = {
+  __typename?: 'CollectionItem';
+  collaborators: Array<IdAndNamedObject>;
+  count: Scalars['Int']['output'];
+  creator: IdAndNamedObject;
+  description?: Maybe<Scalars['String']['output']>;
+  id: Scalars['String']['output'];
+  informationTemplate?: Maybe<Array<CollectionExtraInformation>>;
+  isDefault: Scalars['Boolean']['output'];
+  name: Scalars['String']['output'];
+};
+
+export type CommitMediaInput = {
+  forceUpdate?: InputMaybe<Scalars['Boolean']['input']>;
+  identifier: Scalars['String']['input'];
+  lot: MediaLot;
+  source: MediaSource;
+};
+
+export type CommitPersonInput = {
+  identifier: Scalars['String']['input'];
+  name: Scalars['String']['input'];
+  source: MediaSource;
+  sourceSpecifics?: InputMaybe<PersonSourceSpecificsInput>;
+};
+
+export type CoreDetails = {
+  __typename?: 'CoreDetails';
+  backendErrors: Array<BackendError>;
+  disableTelemetry: Scalars['Boolean']['output'];
+  docsLink: Scalars['String']['output'];
+  fileStorageEnabled: Scalars['Boolean']['output'];
+  frontend: FrontendConfig;
+  isPro: Scalars['Boolean']['output'];
+  localAuthDisabled: Scalars['Boolean']['output'];
+  oidcEnabled: Scalars['Boolean']['output'];
+  pageSize: Scalars['Int']['output'];
+  repositoryLink: Scalars['String']['output'];
+  signupAllowed: Scalars['Boolean']['output'];
+  smtpEnabled: Scalars['Boolean']['output'];
+  tokenValidForDays: Scalars['Int']['output'];
+  version: Scalars['String']['output'];
+  websiteUrl: Scalars['String']['output'];
+};
+
+export type CreateAccessLinkInput = {
+  expiresOn?: InputMaybe<Scalars['DateTime']['input']>;
+  isAccountDefault?: InputMaybe<Scalars['Boolean']['input']>;
+  isMutationAllowed?: InputMaybe<Scalars['Boolean']['input']>;
+  maximumUses?: InputMaybe<Scalars['Int']['input']>;
+  name: Scalars['String']['input'];
+  redirectTo?: InputMaybe<Scalars['String']['input']>;
+};
+
+export type CreateCustomMetadataInput = {
+  animeSpecifics?: InputMaybe<AnimeSpecificsInput>;
+  audioBookSpecifics?: InputMaybe<AudioBookSpecificsInput>;
+  bookSpecifics?: InputMaybe<BookSpecificsInput>;
+  creators?: InputMaybe<Array<Scalars['String']['input']>>;
+  description?: InputMaybe<Scalars['String']['input']>;
+  genres?: InputMaybe<Array<Scalars['String']['input']>>;
+  images?: InputMaybe<Array<Scalars['String']['input']>>;
+  isNsfw?: InputMaybe<Scalars['Boolean']['input']>;
+  lot: MediaLot;
+  mangaSpecifics?: InputMaybe<MangaSpecificsInput>;
+  movieSpecifics?: InputMaybe<MovieSpecificsInput>;
+  podcastSpecifics?: InputMaybe<PodcastSpecificsInput>;
+  publishYear?: InputMaybe<Scalars['Int']['input']>;
+  showSpecifics?: InputMaybe<ShowSpecificsInput>;
+  title: Scalars['String']['input'];
+  videoGameSpecifics?: InputMaybe<VideoGameSpecificsInput>;
+  videos?: InputMaybe<Array<Scalars['String']['input']>>;
+  visualNovelSpecifics?: InputMaybe<VisualNovelSpecificsInput>;
+};
+
+export type CreateOrUpdateCollectionInput = {
+  collaborators?: InputMaybe<Array<Scalars['String']['input']>>;
+  description?: InputMaybe<Scalars['String']['input']>;
+  informationTemplate?: InputMaybe<Array<CollectionExtraInformationInput>>;
+  name: Scalars['String']['input'];
+  updateId?: InputMaybe<Scalars['String']['input']>;
+};
+
+export type CreateOrUpdateReviewInput = {
+  animeEpisodeNumber?: InputMaybe<Scalars['Int']['input']>;
+  date?: InputMaybe<Scalars['DateTime']['input']>;
+  entityId: Scalars['String']['input'];
+  entityLot: EntityLot;
+  isSpoiler?: InputMaybe<Scalars['Boolean']['input']>;
+  mangaChapterNumber?: InputMaybe<Scalars['Decimal']['input']>;
+  mangaVolumeNumber?: InputMaybe<Scalars['Int']['input']>;
+  podcastEpisodeNumber?: InputMaybe<Scalars['Int']['input']>;
+  rating?: InputMaybe<Scalars['Decimal']['input']>;
+  /** ID of the review if this is an update to an existing review */
+  reviewId?: InputMaybe<Scalars['String']['input']>;
+  showEpisodeNumber?: InputMaybe<Scalars['Int']['input']>;
+  showSeasonNumber?: InputMaybe<Scalars['Int']['input']>;
+  text?: InputMaybe<Scalars['String']['input']>;
+  visibility?: InputMaybe<Visibility>;
+};
+
+export type CreateReviewCommentInput = {
+  commentId?: InputMaybe<Scalars['String']['input']>;
+  decrementLikes?: InputMaybe<Scalars['Boolean']['input']>;
+  incrementLikes?: InputMaybe<Scalars['Boolean']['input']>;
+  /** The review this comment belongs to. */
+  reviewId: Scalars['String']['input'];
+  shouldDelete?: InputMaybe<Scalars['Boolean']['input']>;
+  text?: InputMaybe<Scalars['String']['input']>;
+};
+
+export type CreateUserIntegrationInput = {
+  maximumProgress?: InputMaybe<Scalars['Decimal']['input']>;
+  minimumProgress?: InputMaybe<Scalars['Decimal']['input']>;
+  provider: IntegrationProvider;
+  providerSpecifics?: InputMaybe<IntegrationSourceSpecificsInput>;
+  syncToOwnedCollection?: InputMaybe<Scalars['Boolean']['input']>;
+};
+
+export type CreateUserNotificationPlatformInput = {
+  apiToken?: InputMaybe<Scalars['String']['input']>;
+  authHeader?: InputMaybe<Scalars['String']['input']>;
+  baseUrl?: InputMaybe<Scalars['String']['input']>;
+  chatId?: InputMaybe<Scalars['String']['input']>;
+  lot: NotificationPlatformLot;
+  priority?: InputMaybe<Scalars['Int']['input']>;
+};
+
+export type DailyUserActivitiesInput = {
+  endDate?: InputMaybe<Scalars['NaiveDate']['input']>;
+  groupBy?: InputMaybe<DailyUserActivitiesResponseGroupedBy>;
+  startDate?: InputMaybe<Scalars['NaiveDate']['input']>;
+};
+
+export type DailyUserActivitiesResponse = {
+  __typename?: 'DailyUserActivitiesResponse';
+  groupedBy: DailyUserActivitiesResponseGroupedBy;
+  itemCount: Scalars['Int']['output'];
+  items: Array<DailyUserActivityItem>;
+  totalCount: Scalars['Int']['output'];
+  totalDuration: Scalars['Int']['output'];
+};
+
+export enum DailyUserActivitiesResponseGroupedBy {
+  Day = 'DAY',
+  Millennium = 'MILLENNIUM',
+  Month = 'MONTH',
+  Year = 'YEAR'
+}
+
+export type DailyUserActivityItem = {
+  __typename?: 'DailyUserActivityItem';
+  animeCount: Scalars['Int']['output'];
+  audioBookCount: Scalars['Int']['output'];
+  bookCount: Scalars['Int']['output'];
+  day: Scalars['NaiveDate']['output'];
+  mangaCount: Scalars['Int']['output'];
+  measurementCount: Scalars['Int']['output'];
+  movieCount: Scalars['Int']['output'];
+  podcastCount: Scalars['Int']['output'];
+  showCount: Scalars['Int']['output'];
+  totalAudioBookDuration: Scalars['Int']['output'];
+  totalBookPages: Scalars['Int']['output'];
+  totalCollectionReviewCount: Scalars['Int']['output'];
+  totalCount: Scalars['Int']['output'];
+  totalDuration: Scalars['Int']['output'];
+  totalMetadataCount: Scalars['Int']['output'];
+  totalMetadataGroupReviewCount: Scalars['Int']['output'];
+  totalMetadataReviewCount: Scalars['Int']['output'];
+  totalMovieDuration: Scalars['Int']['output'];
+  totalPersonReviewCount: Scalars['Int']['output'];
+  totalPodcastDuration: Scalars['Int']['output'];
+  totalReviewCount: Scalars['Int']['output'];
+  totalShowDuration: Scalars['Int']['output'];
+  totalVideoGameDuration: Scalars['Int']['output'];
+  totalVisualNovelDuration: Scalars['Int']['output'];
+  totalWorkoutDistance: Scalars['Int']['output'];
+  totalWorkoutDuration: Scalars['Int']['output'];
+  totalWorkoutPersonalBests: Scalars['Int']['output'];
+  totalWorkoutReps: Scalars['Int']['output'];
+  totalWorkoutRestTime: Scalars['Int']['output'];
+  totalWorkoutWeight: Scalars['Int']['output'];
+  videoGameCount: Scalars['Int']['output'];
+  visualNovelCount: Scalars['Int']['output'];
+  workoutCount: Scalars['Int']['output'];
+};
+
+export enum DashboardElementLot {
+  Activity = 'ACTIVITY',
+  InProgress = 'IN_PROGRESS',
+  Recommendations = 'RECOMMENDATIONS',
+  Summary = 'SUMMARY',
+  Upcoming = 'UPCOMING'
+}
+
+export type DeployGenericCsvImportInput = {
+  csvPath: Scalars['String']['input'];
+};
+
+export type DeployIgdbImportInput = {
+  collection: Scalars['String']['input'];
+  csvPath: Scalars['String']['input'];
+};
+
+export type DeployImportJobInput = {
+  genericCsv?: InputMaybe<DeployGenericCsvImportInput>;
+  genericJson?: InputMaybe<DeployJsonImportInput>;
+  igdb?: InputMaybe<DeployIgdbImportInput>;
+  jellyfin?: InputMaybe<DeployUrlAndKeyAndUsernameImportInput>;
+  mal?: InputMaybe<DeployMalImportInput>;
+  movary?: InputMaybe<DeployMovaryImportInput>;
+  source: ImportSource;
+  strongApp?: InputMaybe<DeployStrongAppImportInput>;
+  trakt?: InputMaybe<DeployTraktImportInput>;
+  urlAndKey?: InputMaybe<DeployUrlAndKeyImportInput>;
+};
+
+export type DeployJsonImportInput = {
+  export: Scalars['String']['input'];
+};
+
+export type DeployMalImportInput = {
+  /** The anime export file path (uploaded via temporary upload). */
+  animePath?: InputMaybe<Scalars['String']['input']>;
+  /** The manga export file path (uploaded via temporary upload). */
+  mangaPath?: InputMaybe<Scalars['String']['input']>;
+};
+
+export type DeployMovaryImportInput = {
+  history: Scalars['String']['input'];
+  ratings: Scalars['String']['input'];
+  watchlist: Scalars['String']['input'];
+};
+
+export type DeployStrongAppImportInput = {
+  exportPath: Scalars['String']['input'];
+  mapping: Array<StrongAppImportMapping>;
+};
+
+export type DeployTraktImportInput = {
+  username: Scalars['String']['input'];
+};
+
+export type DeployUrlAndKeyAndUsernameImportInput = {
+  apiUrl: Scalars['String']['input'];
+  password: Scalars['String']['input'];
+  username: Scalars['String']['input'];
+};
+
+export type DeployUrlAndKeyImportInput = {
+  apiKey: Scalars['String']['input'];
+  apiUrl: Scalars['String']['input'];
+};
+
+/** The assets that were uploaded for an entity. */
+export type EntityAssets = {
+  __typename?: 'EntityAssets';
+  /** The keys of the S3 images. */
+  images: Array<Scalars['String']['output']>;
+  /** The keys of the S3 videos. */
+  videos: Array<Scalars['String']['output']>;
+};
+
+/** The assets that were uploaded for an entity. */
+export type EntityAssetsInput = {
+  /** The keys of the S3 images. */
+  images: Array<Scalars['String']['input']>;
+  /** The keys of the S3 videos. */
+  videos: Array<Scalars['String']['input']>;
+};
+
+export enum EntityLot {
+  Collection = 'COLLECTION',
+  Exercise = 'EXERCISE',
+  Metadata = 'METADATA',
+  MetadataGroup = 'METADATA_GROUP',
+  Person = 'PERSON',
+  Workout = 'WORKOUT',
+  WorkoutTemplate = 'WORKOUT_TEMPLATE'
+}
+
+export type EntityWithLot = {
+  __typename?: 'EntityWithLot';
+  entityId: Scalars['String']['output'];
+  entityLot: EntityLot;
+};
+
+export type Exercise = {
+  __typename?: 'Exercise';
+  attributes: ExerciseAttributes;
+  createdByUserId?: Maybe<Scalars['String']['output']>;
+  equipment?: Maybe<ExerciseEquipment>;
+  force?: Maybe<ExerciseForce>;
+  id: Scalars['String']['output'];
+  level: ExerciseLevel;
+  lot: ExerciseLot;
+  mechanic?: Maybe<ExerciseMechanic>;
+  muscles: Array<ExerciseMuscle>;
+  source: ExerciseSource;
+};
+
+export type ExerciseAttributes = {
+  __typename?: 'ExerciseAttributes';
+  images: Array<Scalars['String']['output']>;
+  instructions: Array<Scalars['String']['output']>;
+};
+
+export type ExerciseAttributesInput = {
+  images: Array<Scalars['String']['input']>;
+  instructions: Array<Scalars['String']['input']>;
+};
+
+export type ExerciseBestSetRecord = {
+  __typename?: 'ExerciseBestSetRecord';
+  exerciseIdx: Scalars['Int']['output'];
+  setIdx: Scalars['Int']['output'];
+  workoutId: Scalars['String']['output'];
+};
+
+export enum ExerciseEquipment {
+  Bands = 'BANDS',
+  Barbell = 'BARBELL',
+  BodyOnly = 'BODY_ONLY',
+  Cable = 'CABLE',
+  Dumbbell = 'DUMBBELL',
+  ExerciseBall = 'EXERCISE_BALL',
+  EzCurlBar = 'EZ_CURL_BAR',
+  FoamRoll = 'FOAM_ROLL',
+  Kettlebells = 'KETTLEBELLS',
+  Machine = 'MACHINE',
+  MedicineBall = 'MEDICINE_BALL',
+  Other = 'OTHER'
+}
+
+export type ExerciseFilters = {
+  __typename?: 'ExerciseFilters';
+  equipment: Array<ExerciseEquipment>;
+  force: Array<ExerciseForce>;
+  level: Array<ExerciseLevel>;
+  mechanic: Array<ExerciseMechanic>;
+  muscle: Array<ExerciseMuscle>;
+  type: Array<ExerciseLot>;
+};
+
+export enum ExerciseForce {
+  Pull = 'PULL',
+  Push = 'PUSH',
+  Static = 'STATIC'
+}
+
+export type ExerciseInput = {
+  attributes: ExerciseAttributesInput;
+  equipment?: InputMaybe<ExerciseEquipment>;
+  force?: InputMaybe<ExerciseForce>;
+  id: Scalars['String']['input'];
+  level: ExerciseLevel;
+  lot: ExerciseLot;
+  mechanic?: InputMaybe<ExerciseMechanic>;
+  muscles: Array<ExerciseMuscle>;
+};
+
+export enum ExerciseLevel {
+  Beginner = 'BEGINNER',
+  Expert = 'EXPERT',
+  Intermediate = 'INTERMEDIATE'
+}
+
+export type ExerciseListFilter = {
+  collection?: InputMaybe<Scalars['String']['input']>;
+  equipment?: InputMaybe<ExerciseEquipment>;
+  force?: InputMaybe<ExerciseForce>;
+  level?: InputMaybe<ExerciseLevel>;
+  mechanic?: InputMaybe<ExerciseMechanic>;
+  muscle?: InputMaybe<ExerciseMuscle>;
+  type?: InputMaybe<ExerciseLot>;
+};
+
+export type ExerciseListItem = {
+  __typename?: 'ExerciseListItem';
+  id: Scalars['String']['output'];
+  image?: Maybe<Scalars['String']['output']>;
+  lastUpdatedOn?: Maybe<Scalars['DateTime']['output']>;
+  lot: ExerciseLot;
+  muscle?: Maybe<ExerciseMuscle>;
+  numTimesInteracted?: Maybe<Scalars['Int']['output']>;
+};
+
+export type ExerciseListResults = {
+  __typename?: 'ExerciseListResults';
+  details: SearchDetails;
+  items: Array<ExerciseListItem>;
+};
+
+/** The different types of exercises that can be done. */
+export enum ExerciseLot {
+  DistanceAndDuration = 'DISTANCE_AND_DURATION',
+  Duration = 'DURATION',
+  Reps = 'REPS',
+  RepsAndWeight = 'REPS_AND_WEIGHT'
+}
+
+export enum ExerciseMechanic {
+  Compound = 'COMPOUND',
+  Isolation = 'ISOLATION'
+}
+
+export enum ExerciseMuscle {
+  Abdominals = 'ABDOMINALS',
+  Abductors = 'ABDUCTORS',
+  Adductors = 'ADDUCTORS',
+  Biceps = 'BICEPS',
+  Calves = 'CALVES',
+  Chest = 'CHEST',
+  Forearms = 'FOREARMS',
+  Glutes = 'GLUTES',
+  Hamstrings = 'HAMSTRINGS',
+  Lats = 'LATS',
+  LowerBack = 'LOWER_BACK',
+  MiddleBack = 'MIDDLE_BACK',
+  Neck = 'NECK',
+  Quadriceps = 'QUADRICEPS',
+  Shoulders = 'SHOULDERS',
+  Traps = 'TRAPS',
+  Triceps = 'TRICEPS'
+}
+
+export type ExerciseParameters = {
+  __typename?: 'ExerciseParameters';
+  downloadRequired: Scalars['Boolean']['output'];
+  /** All filters applicable to an exercises query. */
+  filters: ExerciseFilters;
+  /** Exercise type mapped to the personal bests possible. */
+  lotMapping: Array<ExerciseParametersLotMapping>;
+};
+
+export type ExerciseParametersLotMapping = {
+  __typename?: 'ExerciseParametersLotMapping';
+  bests: Array<WorkoutSetPersonalBest>;
+  lot: ExerciseLot;
+};
+
+export enum ExerciseSortBy {
+  LastPerformed = 'LAST_PERFORMED',
+  Name = 'NAME',
+  TimesPerformed = 'TIMES_PERFORMED'
+}
+
+export enum ExerciseSource {
+  Custom = 'CUSTOM',
+  Github = 'GITHUB'
+}
+
+export type ExercisesListInput = {
+  filter?: InputMaybe<ExerciseListFilter>;
+  search: SearchInput;
+  sortBy?: InputMaybe<ExerciseSortBy>;
+};
+
+export type ExportJob = {
+  __typename?: 'ExportJob';
+  endedAt: Scalars['DateTime']['output'];
+  size: Scalars['Int']['output'];
+  startedAt: Scalars['DateTime']['output'];
+  url: Scalars['String']['output'];
+};
+
+export type ExternalIdentifiers = {
+  __typename?: 'ExternalIdentifiers';
+  tvdbId?: Maybe<Scalars['Int']['output']>;
+};
+
+export type FrontendConfig = {
+  __typename?: 'FrontendConfig';
+  /** A message to be displayed on the dashboard. */
+  dashboardMessage: Scalars['String']['output'];
+  /** The button label for OIDC authentication. */
+  oidcButtonLabel: Scalars['String']['output'];
+  /** Settings related to Umami analytics. */
+  umami: FrontendUmamiConfig;
+  /** Used as the base URL when generating item links for the frontend. */
+  url: Scalars['String']['output'];
+};
+
+/**
+ * The configuration related to Umami analytics. More information
+ * [here](https://umami.is/docs/tracker-configuration).
+ */
+export type FrontendUmamiConfig = {
+  __typename?: 'FrontendUmamiConfig';
+  domains: Scalars['String']['output'];
+  /** For example: https://umami.is/script.js. */
+  scriptUrl: Scalars['String']['output'];
+  websiteId: Scalars['String']['output'];
+};
+
+export type GenreDetails = {
+  __typename?: 'GenreDetails';
+  contents: IdResults;
+  details: GenreListItem;
+};
+
+export type GenreDetailsInput = {
+  genreId: Scalars['String']['input'];
+  page?: InputMaybe<Scalars['Int']['input']>;
+};
+
+export type GenreListItem = {
+  __typename?: 'GenreListItem';
+  id: Scalars['String']['output'];
+  name: Scalars['String']['output'];
+  numItems?: Maybe<Scalars['Int']['output']>;
+};
+
+export type GenreListResults = {
+  __typename?: 'GenreListResults';
+  details: SearchDetails;
+  items: Array<GenreListItem>;
+};
+
+export type GraphqlCalendarEvent = {
+  __typename?: 'GraphqlCalendarEvent';
+  animeExtraInformation?: Maybe<SeenAnimeExtraInformation>;
+  calendarEventId: Scalars['String']['output'];
+  date: Scalars['NaiveDate']['output'];
+  episodeName?: Maybe<Scalars['String']['output']>;
+  metadataId: Scalars['String']['output'];
+  metadataImage?: Maybe<Scalars['String']['output']>;
+  metadataLot: MediaLot;
+  metadataTitle: Scalars['String']['output'];
+  podcastExtraInformation?: Maybe<SeenPodcastExtraInformation>;
+  showExtraInformation?: Maybe<SeenShowExtraInformation>;
+};
+
+export type GraphqlMediaAssets = {
+  __typename?: 'GraphqlMediaAssets';
+  images: Array<Scalars['String']['output']>;
+  videos: Array<GraphqlVideoAsset>;
+};
+
+export type GraphqlMetadataDetails = {
+  __typename?: 'GraphqlMetadataDetails';
+  animeSpecifics?: Maybe<AnimeSpecifics>;
+  assets: GraphqlMediaAssets;
+  audioBookSpecifics?: Maybe<AudioBookSpecifics>;
+  bookSpecifics?: Maybe<BookSpecifics>;
+  creators: Array<MetadataCreatorGroupedByRole>;
+  description?: Maybe<Scalars['String']['output']>;
+  externalIdentifiers?: Maybe<ExternalIdentifiers>;
+  genres: Array<GenreListItem>;
+  group?: Maybe<GraphqlMetadataGroup>;
+  id: Scalars['String']['output'];
+  identifier: Scalars['String']['output'];
+  isNsfw?: Maybe<Scalars['Boolean']['output']>;
+  isPartial?: Maybe<Scalars['Boolean']['output']>;
+  lot: MediaLot;
+  mangaSpecifics?: Maybe<MangaSpecifics>;
+  movieSpecifics?: Maybe<MovieSpecifics>;
+  originalLanguage?: Maybe<Scalars['String']['output']>;
+  podcastSpecifics?: Maybe<PodcastSpecifics>;
+  productionStatus?: Maybe<Scalars['String']['output']>;
+  providerRating?: Maybe<Scalars['Decimal']['output']>;
+  publishDate?: Maybe<Scalars['NaiveDate']['output']>;
+  publishYear?: Maybe<Scalars['Int']['output']>;
+  showSpecifics?: Maybe<ShowSpecifics>;
+  source: MediaSource;
+  sourceUrl?: Maybe<Scalars['String']['output']>;
+  suggestions: Array<Scalars['String']['output']>;
+  title: Scalars['String']['output'];
+  videoGameSpecifics?: Maybe<VideoGameSpecifics>;
+  visualNovelSpecifics?: Maybe<VisualNovelSpecifics>;
+  watchProviders: Array<WatchProvider>;
+};
+
+export type GraphqlMetadataGroup = {
+  __typename?: 'GraphqlMetadataGroup';
+  id: Scalars['String']['output'];
+  name: Scalars['String']['output'];
+  part: Scalars['Int']['output'];
+};
+
+export enum GraphqlSortOrder {
+  Asc = 'ASC',
+  Desc = 'DESC'
+}
+
+export type GraphqlVideoAsset = {
+  __typename?: 'GraphqlVideoAsset';
+  source: MetadataVideoSource;
+  videoId: Scalars['String']['output'];
+};
+
+export enum GridPacking {
+  Dense = 'DENSE',
+  Normal = 'NORMAL'
+}
+
+export type GroupedCalendarEvent = {
+  __typename?: 'GroupedCalendarEvent';
+  date: Scalars['NaiveDate']['output'];
+  events: Array<GraphqlCalendarEvent>;
+};
+
+export type IdAndNamedObject = {
+  __typename?: 'IdAndNamedObject';
+  id: Scalars['String']['output'];
+  name: Scalars['String']['output'];
+};
+
+export type IdResults = {
+  __typename?: 'IdResults';
+  details: SearchDetails;
+  items: Array<Scalars['String']['output']>;
+};
+
+export type ImportDetails = {
+  __typename?: 'ImportDetails';
+  total: Scalars['Int']['output'];
+};
+
+/** The various steps in which media importing can fail */
+export enum ImportFailStep {
+  /** Failed to transform the data into the required format */
+  InputTransformation = 'INPUT_TRANSFORMATION',
+  /** Failed to get details from the source itself (for eg: MediaTracker, Goodreads etc.) */
+  ItemDetailsFromSource = 'ITEM_DETAILS_FROM_SOURCE',
+  /** Failed to get metadata from the provider (for eg: Openlibrary, IGDB etc.) */
+  MediaDetailsFromProvider = 'MEDIA_DETAILS_FROM_PROVIDER',
+  /** Failed to save a review/rating item */
+  ReviewConversion = 'REVIEW_CONVERSION',
+  /** Failed to save a seen history item */
+  SeenHistoryConversion = 'SEEN_HISTORY_CONVERSION'
+}
+
+export type ImportFailedItem = {
+  __typename?: 'ImportFailedItem';
+  error?: Maybe<Scalars['String']['output']>;
+  identifier: Scalars['String']['output'];
+  lot?: Maybe<MediaLot>;
+  step: ImportFailStep;
+};
+
+/** Comments left in replies to posted reviews. */
+export type ImportOrExportItemReviewComment = {
+  __typename?: 'ImportOrExportItemReviewComment';
+  createdOn: Scalars['DateTime']['output'];
+  id: Scalars['String']['output'];
+  /** The user ids of all those who liked it. */
+  likedBy: Array<Scalars['String']['output']>;
+  text: Scalars['String']['output'];
+  user: IdAndNamedObject;
+};
+
+export type ImportReport = {
+  __typename?: 'ImportReport';
+  details?: Maybe<ImportResultResponse>;
+  finishedOn?: Maybe<Scalars['DateTime']['output']>;
+  id: Scalars['String']['output'];
+  source: ImportSource;
+  startedOn: Scalars['DateTime']['output'];
+  userId: Scalars['String']['output'];
+  wasSuccess?: Maybe<Scalars['Boolean']['output']>;
+};
+
+export type ImportResultResponse = {
+  __typename?: 'ImportResultResponse';
+  failedItems: Array<ImportFailedItem>;
+  import: ImportDetails;
+};
+
+export enum ImportSource {
+  Audiobookshelf = 'AUDIOBOOKSHELF',
+  GenericJson = 'GENERIC_JSON',
+  Goodreads = 'GOODREADS',
+  Igdb = 'IGDB',
+  Imdb = 'IMDB',
+  Jellyfin = 'JELLYFIN',
+  Mal = 'MAL',
+  MediaTracker = 'MEDIA_TRACKER',
+  Movary = 'MOVARY',
+  OpenScale = 'OPEN_SCALE',
+  StoryGraph = 'STORY_GRAPH',
+  StrongApp = 'STRONG_APP',
+  Trakt = 'TRAKT'
+}
+
+export type Integration = {
+  __typename?: 'Integration';
+  createdOn: Scalars['DateTime']['output'];
+  id: Scalars['String']['output'];
+  isDisabled?: Maybe<Scalars['Boolean']['output']>;
+  lastTriggeredOn?: Maybe<Scalars['DateTime']['output']>;
+  lot: IntegrationLot;
+  maximumProgress?: Maybe<Scalars['Decimal']['output']>;
+  minimumProgress?: Maybe<Scalars['Decimal']['output']>;
+  provider: IntegrationProvider;
+  syncToOwnedCollection?: Maybe<Scalars['Boolean']['output']>;
+};
+
+export enum IntegrationLot {
+  Push = 'PUSH',
+  Sink = 'SINK',
+  Yank = 'YANK'
+}
+
+export enum IntegrationProvider {
+  Audiobookshelf = 'AUDIOBOOKSHELF',
+  Emby = 'EMBY',
+  GenericJson = 'GENERIC_JSON',
+  JellyfinPush = 'JELLYFIN_PUSH',
+  JellyfinSink = 'JELLYFIN_SINK',
+  Kodi = 'KODI',
+  Komga = 'KOMGA',
+  Plex = 'PLEX',
+  Radarr = 'RADARR',
+  Sonarr = 'SONARR'
+}
+
+export type IntegrationSourceSpecificsInput = {
+  audiobookshelfBaseUrl?: InputMaybe<Scalars['String']['input']>;
+  audiobookshelfToken?: InputMaybe<Scalars['String']['input']>;
+  jellyfinPushBaseUrl?: InputMaybe<Scalars['String']['input']>;
+  jellyfinPushPassword?: InputMaybe<Scalars['String']['input']>;
+  jellyfinPushUsername?: InputMaybe<Scalars['String']['input']>;
+  komgaBaseUrl?: InputMaybe<Scalars['String']['input']>;
+  komgaPassword?: InputMaybe<Scalars['String']['input']>;
+  komgaProvider?: InputMaybe<MediaSource>;
+  komgaUsername?: InputMaybe<Scalars['String']['input']>;
+  plexUsername?: InputMaybe<Scalars['String']['input']>;
+  radarrApiKey?: InputMaybe<Scalars['String']['input']>;
+  radarrBaseUrl?: InputMaybe<Scalars['String']['input']>;
+  radarrProfileId?: InputMaybe<Scalars['Int']['input']>;
+  radarrRootFolderPath?: InputMaybe<Scalars['String']['input']>;
+  radarrSyncCollectionIds?: InputMaybe<Array<Scalars['String']['input']>>;
+  sonarrApiKey?: InputMaybe<Scalars['String']['input']>;
+  sonarrBaseUrl?: InputMaybe<Scalars['String']['input']>;
+  sonarrProfileId?: InputMaybe<Scalars['Int']['input']>;
+  sonarrRootFolderPath?: InputMaybe<Scalars['String']['input']>;
+  sonarrSyncCollectionIds?: InputMaybe<Array<Scalars['String']['input']>>;
+};
+
+export type LoginError = {
+  __typename?: 'LoginError';
+  error: LoginErrorVariant;
+};
+
+export enum LoginErrorVariant {
+  AccountDisabled = 'ACCOUNT_DISABLED',
+  CredentialsMismatch = 'CREDENTIALS_MISMATCH',
+  IncorrectProviderChosen = 'INCORRECT_PROVIDER_CHOSEN',
+  UsernameDoesNotExist = 'USERNAME_DOES_NOT_EXIST'
+}
+
+export type LoginResponse = {
+  __typename?: 'LoginResponse';
+  apiKey: Scalars['String']['output'];
+};
+
+export type LoginResult = LoginError | LoginResponse;
+
+export type MangaSpecifics = {
+  __typename?: 'MangaSpecifics';
+  chapters?: Maybe<Scalars['Decimal']['output']>;
+  url?: Maybe<Scalars['String']['output']>;
+  volumes?: Maybe<Scalars['Int']['output']>;
+};
+
+export type MangaSpecificsInput = {
+  chapters?: InputMaybe<Scalars['Decimal']['input']>;
+  url?: InputMaybe<Scalars['String']['input']>;
+  volumes?: InputMaybe<Scalars['Int']['input']>;
+};
+
+export type MediaCollectionContentsResults = {
+  __typename?: 'MediaCollectionContentsResults';
+  details: SearchDetails;
+  items: Array<EntityWithLot>;
+};
+
+export type MediaFilter = {
+  collections?: InputMaybe<Array<Scalars['String']['input']>>;
+  general?: InputMaybe<MediaGeneralFilter>;
+};
+
+export enum MediaGeneralFilter {
+  All = 'ALL',
+  Dropped = 'DROPPED',
+  OnAHold = 'ON_A_HOLD',
+  Rated = 'RATED',
+  Unfinished = 'UNFINISHED',
+  Unrated = 'UNRATED'
+}
+
+/** The different types of media that can be stored. */
+export enum MediaLot {
+  Anime = 'ANIME',
+  AudioBook = 'AUDIO_BOOK',
+  Book = 'BOOK',
+  Manga = 'MANGA',
+  Movie = 'MOVIE',
+  Podcast = 'PODCAST',
+  Show = 'SHOW',
+  VideoGame = 'VIDEO_GAME',
+  VisualNovel = 'VISUAL_NOVEL'
+}
+
+export enum MediaSortBy {
+  LastSeen = 'LAST_SEEN',
+  LastUpdated = 'LAST_UPDATED',
+  ProviderRating = 'PROVIDER_RATING',
+  ReleaseDate = 'RELEASE_DATE',
+  Title = 'TITLE',
+  UserRating = 'USER_RATING'
+}
+
+export type MediaSortInput = {
+  by?: MediaSortBy;
+  order?: GraphqlSortOrder;
+};
+
+/** The different sources (or providers) from which data can be obtained from. */
+export enum MediaSource {
+  Anilist = 'ANILIST',
+  Audible = 'AUDIBLE',
+  Custom = 'CUSTOM',
+  GoogleBooks = 'GOOGLE_BOOKS',
+  Igdb = 'IGDB',
+  Itunes = 'ITUNES',
+  Listennotes = 'LISTENNOTES',
+  Mal = 'MAL',
+  MangaUpdates = 'MANGA_UPDATES',
+  Openlibrary = 'OPENLIBRARY',
+  Tmdb = 'TMDB',
+  Vndb = 'VNDB'
+}
+
+export enum MediaStateChanged {
+  MetadataChaptersOrEpisodesChanged = 'METADATA_CHAPTERS_OR_EPISODES_CHANGED',
+  MetadataEpisodeImagesChanged = 'METADATA_EPISODE_IMAGES_CHANGED',
+  MetadataEpisodeNameChanged = 'METADATA_EPISODE_NAME_CHANGED',
+  MetadataEpisodeReleased = 'METADATA_EPISODE_RELEASED',
+  MetadataNumberOfSeasonsChanged = 'METADATA_NUMBER_OF_SEASONS_CHANGED',
+  MetadataPublished = 'METADATA_PUBLISHED',
+  MetadataReleaseDateChanged = 'METADATA_RELEASE_DATE_CHANGED',
+  MetadataStatusChanged = 'METADATA_STATUS_CHANGED',
+  PersonMediaAssociated = 'PERSON_MEDIA_ASSOCIATED',
+  ReviewPosted = 'REVIEW_POSTED'
+}
+
+export type MetadataCreator = {
+  __typename?: 'MetadataCreator';
+  character?: Maybe<Scalars['String']['output']>;
+  id?: Maybe<Scalars['String']['output']>;
+  image?: Maybe<Scalars['String']['output']>;
+  name: Scalars['String']['output'];
+};
+
+export type MetadataCreatorGroupedByRole = {
+  __typename?: 'MetadataCreatorGroupedByRole';
+  items: Array<MetadataCreator>;
+  name: Scalars['String']['output'];
+};
+
+export type MetadataGroup = {
+  __typename?: 'MetadataGroup';
+  description?: Maybe<Scalars['String']['output']>;
+  displayImages: Array<Scalars['String']['output']>;
+  id: Scalars['String']['output'];
+  identifier: Scalars['String']['output'];
+  isPartial?: Maybe<Scalars['Boolean']['output']>;
+  lot: MediaLot;
+  parts: Scalars['Int']['output'];
+  source: MediaSource;
+  title: Scalars['String']['output'];
+};
+
+export type MetadataGroupDetails = {
+  __typename?: 'MetadataGroupDetails';
+  contents: Array<Scalars['String']['output']>;
+  details: MetadataGroup;
+  sourceUrl?: Maybe<Scalars['String']['output']>;
+};
+
+export type MetadataGroupSearchInput = {
+  lot: MediaLot;
+  search: SearchInput;
+  source: MediaSource;
+};
+
+export type MetadataGroupSearchItem = {
+  __typename?: 'MetadataGroupSearchItem';
+  identifier: Scalars['String']['output'];
+  image?: Maybe<Scalars['String']['output']>;
+  name: Scalars['String']['output'];
+  parts?: Maybe<Scalars['Int']['output']>;
+};
+
+export type MetadataGroupSearchResults = {
+  __typename?: 'MetadataGroupSearchResults';
+  details: SearchDetails;
+  items: Array<MetadataGroupSearchItem>;
+};
+
+export type MetadataGroupsListInput = {
+  filter?: InputMaybe<MediaFilter>;
+  invertCollection?: InputMaybe<Scalars['Boolean']['input']>;
+  search?: InputMaybe<SearchInput>;
+  sort?: InputMaybe<PersonSortInput>;
+  take?: InputMaybe<Scalars['Int']['input']>;
+};
+
+export type MetadataListInput = {
+  filter?: InputMaybe<MediaFilter>;
+  invertCollection?: InputMaybe<Scalars['Boolean']['input']>;
+  lot?: InputMaybe<MediaLot>;
+  search?: InputMaybe<SearchInput>;
+  sort?: InputMaybe<MediaSortInput>;
+  take?: InputMaybe<Scalars['Int']['input']>;
+};
+
+export type MetadataPartialDetails = {
+  __typename?: 'MetadataPartialDetails';
+  id: Scalars['String']['output'];
+  image?: Maybe<Scalars['String']['output']>;
+  lot: MediaLot;
+  publishYear?: Maybe<Scalars['Int']['output']>;
+  title: Scalars['String']['output'];
+};
+
+export type MetadataSearchInput = {
+  lot: MediaLot;
+  search: SearchInput;
+  source: MediaSource;
+};
+
+export type MetadataSearchItem = {
+  __typename?: 'MetadataSearchItem';
+  identifier: Scalars['String']['output'];
+  image?: Maybe<Scalars['String']['output']>;
+  publishYear?: Maybe<Scalars['Int']['output']>;
+  title: Scalars['String']['output'];
+};
+
+export type MetadataSearchItemResponse = {
+  __typename?: 'MetadataSearchItemResponse';
+  databaseId?: Maybe<Scalars['String']['output']>;
+  /** Whether the user has interacted with this media item. */
+  hasInteracted: Scalars['Boolean']['output'];
+  item: MetadataSearchItem;
+};
+
+export type MetadataSearchResults = {
+  __typename?: 'MetadataSearchResults';
+  details: SearchDetails;
+  items: Array<MetadataSearchItemResponse>;
+};
+
+export enum MetadataVideoSource {
+  Custom = 'CUSTOM',
+  Dailymotion = 'DAILYMOTION',
+  Youtube = 'YOUTUBE'
+}
+
+export type MovieSpecifics = {
+  __typename?: 'MovieSpecifics';
+  runtime?: Maybe<Scalars['Int']['output']>;
+};
+
+export type MovieSpecificsInput = {
+  runtime?: InputMaybe<Scalars['Int']['input']>;
+};
+
+export type MutationRoot = {
+  __typename?: 'MutationRoot';
+  /** Add a entity to a collection if it is not there, otherwise do nothing. */
+  addEntityToCollection: Scalars['Boolean']['output'];
+  /** Fetch details about a media and create a media item in the database. */
+  commitMetadata: StringIdObject;
+  /** Fetch details about a media group and create a media group item in the database. */
+  commitMetadataGroup: StringIdObject;
+  /** Fetches details about a person and creates a person item in the database. */
+  commitPerson: StringIdObject;
+  /** Create or edit an access link. */
+  createAccessLink: StringIdObject;
+  /** Create a custom exercise. */
+  createCustomExercise: Scalars['String']['output'];
+  /** Create a custom media item. */
+  createCustomMetadata: StringIdObject;
+  /** Create a new collection for the logged in user or edit details of an existing one. */
+  createOrUpdateCollection: StringIdObject;
+  /** Create or update a review. */
+  createOrUpdateReview: StringIdObject;
+  /** Take a user workout, process it and commit it to database. */
+  createOrUpdateUserWorkout: Scalars['String']['output'];
+  /** Create or update a workout template. */
+  createOrUpdateUserWorkoutTemplate: Scalars['String']['output'];
+  /** Create, like or delete a comment on a review. */
+  createReviewComment: Scalars['Boolean']['output'];
+  /** Create an integration for the currently logged in user. */
+  createUserIntegration: StringIdObject;
+  /** Create a user measurement. */
+  createUserMeasurement: Scalars['DateTime']['output'];
+  /** Add a notification platform for the currently logged in user. */
+  createUserNotificationPlatform: Scalars['String']['output'];
+  /** Delete a collection. */
+  deleteCollection: Scalars['Boolean']['output'];
+  /** Delete a review if it belongs to the currently logged in user. */
+  deleteReview: Scalars['Boolean']['output'];
+  /** Delete an S3 object by the given key. */
+  deleteS3Object: Scalars['Boolean']['output'];
+  /** Delete a seen item from a user's history. */
+  deleteSeenItem: StringIdObject;
+  /** Delete a user. The account deleting the user must be an `Admin`. */
+  deleteUser: Scalars['Boolean']['output'];
+  /** Delete an integration for the currently logged in user. */
+  deleteUserIntegration: Scalars['Boolean']['output'];
+  /** Delete a user measurement. */
+  deleteUserMeasurement: Scalars['Boolean']['output'];
+  /** Delete a notification platform for the currently logged in user. */
+  deleteUserNotificationPlatform: Scalars['Boolean']['output'];
+  /** Delete a workout and remove all exercise associations. */
+  deleteUserWorkout: Scalars['Boolean']['output'];
+  /** Delete a workout template. */
+  deleteUserWorkoutTemplate: Scalars['Boolean']['output'];
+  /** Start a background job. */
+  deployBackgroundJob: Scalars['Boolean']['output'];
+  /**
+   * Deploy job to update progress of media items in bulk. For seen items in progress,
+   * progress is updated only if it has actually changed.
+   */
+  deployBulkProgressUpdate: Scalars['Boolean']['output'];
+  /** Deploy a job to export data for a user. */
+  deployExportJob: Scalars['Boolean']['output'];
+  /** Add job to import data from various sources. */
+  deployImportJob: Scalars['Boolean']['output'];
+  /** Deploy a job to update a metadata group's details. */
+  deployUpdateMetadataGroupJob: Scalars['Boolean']['output'];
+  /** Deploy a job to update a media item's metadata. */
+  deployUpdateMetadataJob: Scalars['Boolean']['output'];
+  /** Deploy a job to update a person's metadata. */
+  deployUpdatePersonJob: Scalars['Boolean']['output'];
+  /**
+   * Use this mutation to call a function that needs to be tested for implementation.
+   * It is only available in development mode.
+   */
+  developmentMutation: Scalars['Boolean']['output'];
+  /**
+   * Delete all history and reviews for a given media item and remove it from all
+   * collections for the user.
+   */
+  disassociateMetadata: Scalars['Boolean']['output'];
+  /** Generate an auth token without any expiry. */
+  generateAuthToken: Scalars['String']['output'];
+  /** Login a user using their username and password and return an auth token. */
+  loginUser: LoginResult;
+  /**
+   * Merge a media item into another. This will move all `seen`, `collection`
+   * and `review` associations with to the metadata.
+   */
+  mergeMetadata: Scalars['Boolean']['output'];
+  /** Get a presigned URL (valid for 10 minutes) for a given file name. */
+  presignedPutS3Url: PresignedPutUrlResponse;
+  /** Get an access token using an access link. */
+  processAccessLink: ProcessAccessLinkResult;
+  /**
+   * Create a new user for the service. Also set their `lot` as admin if
+   * they are the first user.
+   */
+  registerUser: RegisterResult;
+  /** Remove an entity from a collection if it is not there, otherwise do nothing. */
+  removeEntityFromCollection: StringIdObject;
+  /** Revoke an access link. */
+  revokeAccessLink: Scalars['Boolean']['output'];
+  /** Test all notification platforms for the currently logged in user. */
+  testUserNotificationPlatforms: Scalars['Boolean']['output'];
+  /** Update a custom exercise. */
+  updateCustomExercise: Scalars['Boolean']['output'];
+  /** Update the attributes of a seen item. */
+  updateSeenItem: Scalars['Boolean']['output'];
+  /** Update a user's profile details. */
+  updateUser: StringIdObject;
+  /** Update a user's exercise settings. */
+  updateUserExerciseSettings: Scalars['Boolean']['output'];
+  /** Update an integration for the currently logged in user. */
+  updateUserIntegration: Scalars['Boolean']['output'];
+  /** Edit a notification platform for the currently logged in user. */
+  updateUserNotificationPlatform: Scalars['Boolean']['output'];
+  /** Change a user's preferences. */
+  updateUserPreference: Scalars['Boolean']['output'];
+  /** Change the details about a user's workout. */
+  updateUserWorkoutAttributes: Scalars['Boolean']['output'];
+};
+
+
+export type MutationRootAddEntityToCollectionArgs = {
+  input: ChangeCollectionToEntityInput;
+};
+
+
+export type MutationRootCommitMetadataArgs = {
+  input: CommitMediaInput;
+};
+
+
+export type MutationRootCommitMetadataGroupArgs = {
+  input: CommitMediaInput;
+};
+
+
+export type MutationRootCommitPersonArgs = {
+  input: CommitPersonInput;
+};
+
+
+export type MutationRootCreateAccessLinkArgs = {
+  input: CreateAccessLinkInput;
+};
+
+
+export type MutationRootCreateCustomExerciseArgs = {
+  input: ExerciseInput;
+};
+
+
+export type MutationRootCreateCustomMetadataArgs = {
+  input: CreateCustomMetadataInput;
+};
+
+
+export type MutationRootCreateOrUpdateCollectionArgs = {
+  input: CreateOrUpdateCollectionInput;
+};
+
+
+export type MutationRootCreateOrUpdateReviewArgs = {
+  input: CreateOrUpdateReviewInput;
+};
+
+
+export type MutationRootCreateOrUpdateUserWorkoutArgs = {
+  input: UserWorkoutInput;
+};
+
+
+export type MutationRootCreateOrUpdateUserWorkoutTemplateArgs = {
+  input: UserWorkoutInput;
+};
+
+
+export type MutationRootCreateReviewCommentArgs = {
+  input: CreateReviewCommentInput;
+};
+
+
+export type MutationRootCreateUserIntegrationArgs = {
+  input: CreateUserIntegrationInput;
+};
+
+
+export type MutationRootCreateUserMeasurementArgs = {
+  input: UserMeasurementInput;
+};
+
+
+export type MutationRootCreateUserNotificationPlatformArgs = {
+  input: CreateUserNotificationPlatformInput;
+};
+
+
+export type MutationRootDeleteCollectionArgs = {
+  collectionName: Scalars['String']['input'];
+};
+
+
+export type MutationRootDeleteReviewArgs = {
+  reviewId: Scalars['String']['input'];
+};
+
+
+export type MutationRootDeleteS3ObjectArgs = {
+  key: Scalars['String']['input'];
+};
+
+
+export type MutationRootDeleteSeenItemArgs = {
+  seenId: Scalars['String']['input'];
+};
+
+
+export type MutationRootDeleteUserArgs = {
+  toDeleteUserId: Scalars['String']['input'];
+};
+
+
+export type MutationRootDeleteUserIntegrationArgs = {
+  integrationId: Scalars['String']['input'];
+};
+
+
+export type MutationRootDeleteUserMeasurementArgs = {
+  timestamp: Scalars['DateTime']['input'];
+};
+
+
+export type MutationRootDeleteUserNotificationPlatformArgs = {
+  notificationId: Scalars['String']['input'];
+};
+
+
+export type MutationRootDeleteUserWorkoutArgs = {
+  workoutId: Scalars['String']['input'];
+};
+
+
+export type MutationRootDeleteUserWorkoutTemplateArgs = {
+  workoutTemplateId: Scalars['String']['input'];
+};
+
+
+export type MutationRootDeployBackgroundJobArgs = {
+  jobName: BackgroundJob;
+};
+
+
+export type MutationRootDeployBulkProgressUpdateArgs = {
+  input: Array<ProgressUpdateInput>;
+};
+
+
+export type MutationRootDeployImportJobArgs = {
+  input: DeployImportJobInput;
+};
+
+
+export type MutationRootDeployUpdateMetadataGroupJobArgs = {
+  metadataGroupId: Scalars['String']['input'];
+};
+
+
+export type MutationRootDeployUpdateMetadataJobArgs = {
+  metadataId: Scalars['String']['input'];
+};
+
+
+export type MutationRootDeployUpdatePersonJobArgs = {
+  personId: Scalars['String']['input'];
+};
+
+
+export type MutationRootDisassociateMetadataArgs = {
+  metadataId: Scalars['String']['input'];
+};
+
+
+export type MutationRootLoginUserArgs = {
+  input: AuthUserInput;
+};
+
+
+export type MutationRootMergeMetadataArgs = {
+  mergeFrom: Scalars['String']['input'];
+  mergeInto: Scalars['String']['input'];
+};
+
+
+export type MutationRootPresignedPutS3UrlArgs = {
+  input: PresignedPutUrlInput;
+};
+
+
+export type MutationRootProcessAccessLinkArgs = {
+  input: ProcessAccessLinkInput;
+};
+
+
+export type MutationRootRegisterUserArgs = {
+  input: RegisterUserInput;
+};
+
+
+export type MutationRootRemoveEntityFromCollectionArgs = {
+  input: ChangeCollectionToEntityInput;
+};
+
+
+export type MutationRootRevokeAccessLinkArgs = {
+  accessLinkId: Scalars['String']['input'];
+};
+
+
+export type MutationRootUpdateCustomExerciseArgs = {
+  input: UpdateCustomExerciseInput;
+};
+
+
+export type MutationRootUpdateSeenItemArgs = {
+  input: UpdateSeenItemInput;
+};
+
+
+export type MutationRootUpdateUserArgs = {
+  input: UpdateUserInput;
+};
+
+
+export type MutationRootUpdateUserExerciseSettingsArgs = {
+  input: UpdateUserExerciseSettings;
+};
+
+
+export type MutationRootUpdateUserIntegrationArgs = {
+  input: UpdateUserIntegrationInput;
+};
+
+
+export type MutationRootUpdateUserNotificationPlatformArgs = {
+  input: UpdateUserNotificationPlatformInput;
+};
+
+
+export type MutationRootUpdateUserPreferenceArgs = {
+  input: UpdateComplexJsonInput;
+};
+
+
+export type MutationRootUpdateUserWorkoutAttributesArgs = {
+  input: UpdateUserWorkoutAttributesInput;
+};
+
+export type NotificationPlatform = {
+  __typename?: 'NotificationPlatform';
+  createdOn: Scalars['DateTime']['output'];
+  description: Scalars['String']['output'];
+  id: Scalars['String']['output'];
+  isDisabled?: Maybe<Scalars['Boolean']['output']>;
+  lot: NotificationPlatformLot;
+};
+
+export enum NotificationPlatformLot {
+  Apprise = 'APPRISE',
+  Discord = 'DISCORD',
+  Email = 'EMAIL',
+  Gotify = 'GOTIFY',
+  Ntfy = 'NTFY',
+  PushBullet = 'PUSH_BULLET',
+  PushOver = 'PUSH_OVER',
+  PushSafer = 'PUSH_SAFER',
+  Telegram = 'TELEGRAM'
+}
+
+export type OidcTokenOutput = {
+  __typename?: 'OidcTokenOutput';
+  email: Scalars['String']['output'];
+  subject: Scalars['String']['output'];
+};
+
+export type OidcUserInput = {
+  email: Scalars['String']['input'];
+  issuerId: Scalars['String']['input'];
+};
+
+export type PasswordUserInput = {
+  password: Scalars['String']['input'];
+  username: Scalars['String']['input'];
+};
+
+export type PeopleListInput = {
+  filter?: InputMaybe<MediaFilter>;
+  invertCollection?: InputMaybe<Scalars['Boolean']['input']>;
+  search?: InputMaybe<SearchInput>;
+  sort?: InputMaybe<PersonSortInput>;
+  take?: InputMaybe<Scalars['Int']['input']>;
+};
+
+export type PeopleSearchInput = {
+  search: SearchInput;
+  source: MediaSource;
+  sourceSpecifics?: InputMaybe<PersonSourceSpecificsInput>;
+};
+
+export type PeopleSearchItem = {
+  __typename?: 'PeopleSearchItem';
+  birthYear?: Maybe<Scalars['Int']['output']>;
+  identifier: Scalars['String']['output'];
+  image?: Maybe<Scalars['String']['output']>;
+  name: Scalars['String']['output'];
+};
+
+export type PeopleSearchResults = {
+  __typename?: 'PeopleSearchResults';
+  details: SearchDetails;
+  items: Array<PeopleSearchItem>;
+};
+
+export type Person = {
+  __typename?: 'Person';
+  birthDate?: Maybe<Scalars['NaiveDate']['output']>;
+  createdOn: Scalars['DateTime']['output'];
+  deathDate?: Maybe<Scalars['NaiveDate']['output']>;
+  description?: Maybe<Scalars['String']['output']>;
+  displayImages: Array<Scalars['String']['output']>;
+  gender?: Maybe<Scalars['String']['output']>;
+  id: Scalars['String']['output'];
+  identifier: Scalars['String']['output'];
+  isPartial?: Maybe<Scalars['Boolean']['output']>;
+  lastUpdatedOn: Scalars['DateTime']['output'];
+  name: Scalars['String']['output'];
+  place?: Maybe<Scalars['String']['output']>;
+  source: MediaSource;
+  website?: Maybe<Scalars['String']['output']>;
+};
+
+export enum PersonAndMetadataGroupsSortBy {
+  MediaItems = 'MEDIA_ITEMS',
+  Name = 'NAME'
+}
+
+export type PersonDetails = {
+  __typename?: 'PersonDetails';
+  contents: Array<PersonDetailsGroupedByRole>;
+  details: Person;
+  sourceUrl?: Maybe<Scalars['String']['output']>;
+};
+
+export type PersonDetailsGroupedByRole = {
+  __typename?: 'PersonDetailsGroupedByRole';
+  /** The number of items in this role. */
+  count: Scalars['Int']['output'];
+  /** The media items in which this role was performed. */
+  items: Array<PersonDetailsItemWithCharacter>;
+  /** The name of the role performed. */
+  name: Scalars['String']['output'];
+};
+
+export type PersonDetailsItemWithCharacter = {
+  __typename?: 'PersonDetailsItemWithCharacter';
+  character?: Maybe<Scalars['String']['output']>;
+  metadataId: Scalars['String']['output'];
+};
+
+export type PersonSortInput = {
+  by?: PersonAndMetadataGroupsSortBy;
+  order?: GraphqlSortOrder;
+};
+
+export type PersonSourceSpecificsInput = {
+  isAnilistStudio?: InputMaybe<Scalars['Boolean']['input']>;
+  isTmdbCompany?: InputMaybe<Scalars['Boolean']['input']>;
+};
+
+export type PodcastEpisode = {
+  __typename?: 'PodcastEpisode';
+  id: Scalars['String']['output'];
+  number: Scalars['Int']['output'];
+  overview?: Maybe<Scalars['String']['output']>;
+  publishDate: Scalars['NaiveDate']['output'];
+  runtime?: Maybe<Scalars['Int']['output']>;
+  thumbnail?: Maybe<Scalars['String']['output']>;
+  title: Scalars['String']['output'];
+};
+
+export type PodcastEpisodeInput = {
+  id: Scalars['String']['input'];
+  number: Scalars['Int']['input'];
+  overview?: InputMaybe<Scalars['String']['input']>;
+  publishDate: Scalars['NaiveDate']['input'];
+  runtime?: InputMaybe<Scalars['Int']['input']>;
+  thumbnail?: InputMaybe<Scalars['String']['input']>;
+  title: Scalars['String']['input'];
+};
+
+export type PodcastSpecifics = {
+  __typename?: 'PodcastSpecifics';
+  episodes: Array<PodcastEpisode>;
+  totalEpisodes: Scalars['Int']['output'];
+};
+
+export type PodcastSpecificsInput = {
+  episodes: Array<PodcastEpisodeInput>;
+  totalEpisodes: Scalars['Int']['input'];
+};
+
+export type PresignedPutUrlInput = {
+  fileName: Scalars['String']['input'];
+  prefix: Scalars['String']['input'];
+};
+
+export type PresignedPutUrlResponse = {
+  __typename?: 'PresignedPutUrlResponse';
+  key: Scalars['String']['output'];
+  uploadUrl: Scalars['String']['output'];
+};
+
+export type ProcessAccessLinkError = {
+  __typename?: 'ProcessAccessLinkError';
+  error: ProcessAccessLinkErrorVariant;
+};
+
+export enum ProcessAccessLinkErrorVariant {
+  Expired = 'EXPIRED',
+  MaximumUsesReached = 'MAXIMUM_USES_REACHED',
+  NotFound = 'NOT_FOUND',
+  Revoked = 'REVOKED'
+}
+
+export type ProcessAccessLinkInput = {
+  id?: InputMaybe<Scalars['String']['input']>;
+  username?: InputMaybe<Scalars['String']['input']>;
+};
+
+export type ProcessAccessLinkResponse = {
+  __typename?: 'ProcessAccessLinkResponse';
+  apiKey: Scalars['String']['output'];
+  redirectTo?: Maybe<Scalars['String']['output']>;
+  tokenValidForDays: Scalars['Int']['output'];
+};
+
+export type ProcessAccessLinkResult = ProcessAccessLinkError | ProcessAccessLinkResponse;
+
+/** An exercise that has been processed and committed to the database. */
+export type ProcessedExercise = {
+  __typename?: 'ProcessedExercise';
+  assets?: Maybe<EntityAssets>;
+  lot: ExerciseLot;
+  name: Scalars['String']['output'];
+  notes: Array<Scalars['String']['output']>;
+  sets: Array<WorkoutSetRecord>;
+  total?: Maybe<WorkoutOrExerciseTotals>;
+};
+
+export type ProgressUpdateInput = {
+  animeEpisodeNumber?: InputMaybe<Scalars['Int']['input']>;
+  changeState?: InputMaybe<SeenState>;
+  date?: InputMaybe<Scalars['NaiveDate']['input']>;
+  mangaChapterNumber?: InputMaybe<Scalars['Decimal']['input']>;
+  mangaVolumeNumber?: InputMaybe<Scalars['Int']['input']>;
+  metadataId: Scalars['String']['input'];
+  podcastEpisodeNumber?: InputMaybe<Scalars['Int']['input']>;
+  progress?: InputMaybe<Scalars['Decimal']['input']>;
+  providerWatchedOn?: InputMaybe<Scalars['String']['input']>;
+  showEpisodeNumber?: InputMaybe<Scalars['Int']['input']>;
+  showSeasonNumber?: InputMaybe<Scalars['Int']['input']>;
+};
+
+export type ProviderLanguageInformation = {
+  __typename?: 'ProviderLanguageInformation';
+  default: Scalars['String']['output'];
+  source: MediaSource;
+  supported: Array<Scalars['String']['output']>;
+};
+
+export type QueryRoot = {
+  __typename?: 'QueryRoot';
+  /** Get the contents of a collection and respect visibility. */
+  collectionContents: CollectionContents;
+  /** Get some primary information about the service. */
+  coreDetails: CoreDetails;
+  /** Get daily user activities for the currently logged in user. */
+  dailyUserActivities: DailyUserActivitiesResponse;
+  /** Get details about an exercise. */
+  exerciseDetails: Exercise;
+  /** Get all the parameters related to exercises. */
+  exerciseParameters: ExerciseParameters;
+  /** Get a paginated list of exercises in the database. */
+  exercisesList: ExerciseListResults;
+  /** Get details about a genre present in the database. */
+  genreDetails: GenreDetails;
+  /** Get paginated list of genres. */
+  genresList: GenreListResults;
+  /** Get an authorization URL using the configured OIDC client. */
+  getOidcRedirectUrl: Scalars['String']['output'];
+  /** Get an access token using the configured OIDC client. */
+  getOidcToken: OidcTokenOutput;
+  /** Get a presigned URL (valid for 90 minutes) for a given key. */
+  getPresignedS3Url: Scalars['String']['output'];
+  /** Get all the import jobs deployed by the user. */
+  importReports: Array<ImportReport>;
+  /** Get a summary of all the media items that have been consumed by this user. */
+  latestUserSummary: DailyUserActivityItem;
+  /** Get details about a media present in the database. */
+  metadataDetails: GraphqlMetadataDetails;
+  /** Get details about a metadata group present in the database. */
+  metadataGroupDetails: MetadataGroupDetails;
+  /** Search for a list of groups from a given source. */
+  metadataGroupSearch: MetadataGroupSearchResults;
+  /** Get paginated list of metadata groups. */
+  metadataGroupsList: IdResults;
+  /** Get all the media items related to a user for a specific media type. */
+  metadataList: IdResults;
+  /** Get partial details about a media present in the database. */
+  metadataPartialDetails: MetadataPartialDetails;
+  /** Search for a list of media for a given type. */
+  metadataSearch: MetadataSearchResults;
+  /** Get paginated list of people. */
+  peopleList: IdResults;
+  /** Search for a list of people from a given source. */
+  peopleSearch: PeopleSearchResults;
+  /** Get details about a creator present in the database. */
+  personDetails: PersonDetails;
+  /** Get all languages supported by all the providers. */
+  providersLanguageInformation: Array<ProviderLanguageInformation>;
+  /** Get all access links generated by the currently logged in user. */
+  userAccessLinks: Array<AccessLink>;
+  /** Get user by OIDC issuer ID. */
+  userByOidcIssuerId?: Maybe<Scalars['String']['output']>;
+  /** Get calendar events for a user between a given date range. */
+  userCalendarEvents: Array<GroupedCalendarEvent>;
+  /** Get all collections for the currently logged in user. */
+  userCollectionsList: Array<CollectionItem>;
+  /** Get details about the currently logged in user. */
+  userDetails: UserDetailsResult;
+  /** Get information about an exercise for a user. */
+  userExerciseDetails: UserExerciseDetails;
+  /** Get all the export jobs for the current user. */
+  userExports: Array<ExportJob>;
+  /** Get all the integrations for the currently logged in user. */
+  userIntegrations: Array<Integration>;
+  /** Get all the measurements for a user. */
+  userMeasurementsList: Array<UserMeasurement>;
+  /** Get details that can be displayed to a user for a media. */
+  userMetadataDetails: UserMetadataDetails;
+  /** Get details that can be displayed to a user for a metadata group. */
+  userMetadataGroupDetails: UserMetadataGroupDetails;
+  /** Get all the notification platforms for the currently logged in user. */
+  userNotificationPlatforms: Array<NotificationPlatform>;
+  /** Get details that can be displayed to a user for a creator. */
+  userPersonDetails: UserPersonDetails;
+  /** Get media recommendations for the currently logged in user. */
+  userRecommendations: Array<Scalars['String']['output']>;
+  /** Get upcoming calendar events for the given filter. */
+  userUpcomingCalendarEvents: Array<GraphqlCalendarEvent>;
+  /** Get details about a workout. */
+  userWorkoutDetails: UserWorkoutDetails;
+  /** Get information about a workout template. */
+  userWorkoutTemplateDetails: UserWorkoutTemplateDetails;
+  /** Get a paginated list of templates created by the user. */
+  userWorkoutTemplatesList: WorkoutTemplateListResults;
+  /** Get a paginated list of workouts done by the user. */
+  userWorkoutsList: WorkoutListResults;
+  /** Get details about all the users in the service. */
+  usersList: Array<User>;
+};
+
+
+export type QueryRootCollectionContentsArgs = {
+  input: CollectionContentsInput;
+};
+
+
+export type QueryRootDailyUserActivitiesArgs = {
+  input: DailyUserActivitiesInput;
+};
+
+
+export type QueryRootExerciseDetailsArgs = {
+  exerciseId: Scalars['String']['input'];
+};
+
+
+export type QueryRootExercisesListArgs = {
+  input: ExercisesListInput;
+};
+
+
+export type QueryRootGenreDetailsArgs = {
+  input: GenreDetailsInput;
+};
+
+
+export type QueryRootGenresListArgs = {
+  input: SearchInput;
+};
+
+
+export type QueryRootGetOidcTokenArgs = {
+  code: Scalars['String']['input'];
+};
+
+
+export type QueryRootGetPresignedS3UrlArgs = {
+  key: Scalars['String']['input'];
+};
+
+
+export type QueryRootMetadataDetailsArgs = {
+  metadataId: Scalars['String']['input'];
+};
+
+
+export type QueryRootMetadataGroupDetailsArgs = {
+  metadataGroupId: Scalars['String']['input'];
+};
+
+
+export type QueryRootMetadataGroupSearchArgs = {
+  input: MetadataGroupSearchInput;
+};
+
+
+export type QueryRootMetadataGroupsListArgs = {
+  input: MetadataGroupsListInput;
+};
+
+
+export type QueryRootMetadataListArgs = {
+  input: MetadataListInput;
+};
+
+
+export type QueryRootMetadataPartialDetailsArgs = {
+  metadataId: Scalars['String']['input'];
+};
+
+
+export type QueryRootMetadataSearchArgs = {
+  input: MetadataSearchInput;
+};
+
+
+export type QueryRootPeopleListArgs = {
+  input: PeopleListInput;
+};
+
+
+export type QueryRootPeopleSearchArgs = {
+  input: PeopleSearchInput;
+};
+
+
+export type QueryRootPersonDetailsArgs = {
+  personId: Scalars['String']['input'];
+};
+
+
+export type QueryRootUserByOidcIssuerIdArgs = {
+  oidcIssuerId: Scalars['String']['input'];
+};
+
+
+export type QueryRootUserCalendarEventsArgs = {
+  input: UserCalendarEventInput;
+};
+
+
+export type QueryRootUserCollectionsListArgs = {
+  name?: InputMaybe<Scalars['String']['input']>;
+};
+
+
+export type QueryRootUserExerciseDetailsArgs = {
+  exerciseId: Scalars['String']['input'];
+};
+
+
+export type QueryRootUserMeasurementsListArgs = {
+  input: UserMeasurementsListInput;
+};
+
+
+export type QueryRootUserMetadataDetailsArgs = {
+  metadataId: Scalars['String']['input'];
+};
+
+
+export type QueryRootUserMetadataGroupDetailsArgs = {
+  metadataGroupId: Scalars['String']['input'];
+};
+
+
+export type QueryRootUserPersonDetailsArgs = {
+  personId: Scalars['String']['input'];
+};
+
+
+export type QueryRootUserUpcomingCalendarEventsArgs = {
+  input: UserUpcomingCalendarEventInput;
+};
+
+
+export type QueryRootUserWorkoutDetailsArgs = {
+  workoutId: Scalars['String']['input'];
+};
+
+
+export type QueryRootUserWorkoutTemplateDetailsArgs = {
+  workoutTemplateId: Scalars['String']['input'];
+};
+
+
+export type QueryRootUserWorkoutTemplatesListArgs = {
+  input: SearchInput;
+};
+
+
+export type QueryRootUserWorkoutsListArgs = {
+  input: SearchInput;
+};
+
+
+export type QueryRootUsersListArgs = {
+  query?: InputMaybe<Scalars['String']['input']>;
+};
+
+export type RegisterError = {
+  __typename?: 'RegisterError';
+  error: RegisterErrorVariant;
+};
+
+export enum RegisterErrorVariant {
+  Disabled = 'DISABLED',
+  IdentifierAlreadyExists = 'IDENTIFIER_ALREADY_EXISTS'
+}
+
+export type RegisterResult = RegisterError | StringIdObject;
+
+export type RegisterUserInput = {
+  /** If registration is disabled, this can be used to override it. */
+  adminAccessToken?: InputMaybe<Scalars['String']['input']>;
+  data: AuthUserInput;
+};
+
+export type ReviewItem = {
+  __typename?: 'ReviewItem';
+  animeExtraInformation?: Maybe<SeenAnimeExtraInformation>;
+  comments: Array<ImportOrExportItemReviewComment>;
+  id: Scalars['String']['output'];
+  isSpoiler: Scalars['Boolean']['output'];
+  mangaExtraInformation?: Maybe<SeenMangaExtraInformation>;
+  podcastExtraInformation?: Maybe<SeenPodcastExtraInformation>;
+  postedBy: IdAndNamedObject;
+  postedOn: Scalars['DateTime']['output'];
+  rating?: Maybe<Scalars['Decimal']['output']>;
+  seenItemsAssociatedWith: Array<Scalars['String']['output']>;
+  showExtraInformation?: Maybe<SeenShowExtraInformation>;
+  textOriginal?: Maybe<Scalars['String']['output']>;
+  textRendered?: Maybe<Scalars['String']['output']>;
+  visibility: Visibility;
+};
+
+export type SearchDetails = {
+  __typename?: 'SearchDetails';
+  nextPage?: Maybe<Scalars['Int']['output']>;
+  total: Scalars['Int']['output'];
+};
+
+export type SearchInput = {
+  page?: InputMaybe<Scalars['Int']['input']>;
+  query?: InputMaybe<Scalars['String']['input']>;
+};
+
+export type Seen = {
+  __typename?: 'Seen';
+  animeExtraInformation?: Maybe<SeenAnimeExtraInformation>;
+  finishedOn?: Maybe<Scalars['NaiveDate']['output']>;
+  id: Scalars['String']['output'];
+  lastUpdatedOn: Scalars['DateTime']['output'];
+  mangaExtraInformation?: Maybe<SeenMangaExtraInformation>;
+  manualTimeSpent?: Maybe<Scalars['Decimal']['output']>;
+  metadataId: Scalars['String']['output'];
+  numTimesUpdated: Scalars['Int']['output'];
+  podcastExtraInformation?: Maybe<SeenPodcastExtraInformation>;
+  progress: Scalars['Decimal']['output'];
+  providerWatchedOn?: Maybe<Scalars['String']['output']>;
+  reviewId?: Maybe<Scalars['String']['output']>;
+  showExtraInformation?: Maybe<SeenShowExtraInformation>;
+  startedOn?: Maybe<Scalars['NaiveDate']['output']>;
+  state: SeenState;
+  userId: Scalars['String']['output'];
+};
+
+export type SeenAnimeExtraInformation = {
+  __typename?: 'SeenAnimeExtraInformation';
+  episode?: Maybe<Scalars['Int']['output']>;
+};
+
+export type SeenMangaExtraInformation = {
+  __typename?: 'SeenMangaExtraInformation';
+  chapter?: Maybe<Scalars['Decimal']['output']>;
+  volume?: Maybe<Scalars['Int']['output']>;
+};
+
+export type SeenPodcastExtraInformation = {
+  __typename?: 'SeenPodcastExtraInformation';
+  episode: Scalars['Int']['output'];
+};
+
+export type SeenShowExtraInformation = {
+  __typename?: 'SeenShowExtraInformation';
+  episode: Scalars['Int']['output'];
+  season: Scalars['Int']['output'];
+};
+
+export enum SeenState {
+  Completed = 'COMPLETED',
+  Dropped = 'DROPPED',
+  InProgress = 'IN_PROGRESS',
+  OnAHold = 'ON_A_HOLD'
+}
+
+/** The types of set (mostly characterized by exertion level). */
+export enum SetLot {
+  Drop = 'DROP',
+  Failure = 'FAILURE',
+  Normal = 'NORMAL',
+  WarmUp = 'WARM_UP'
+}
+
+export type SetRestTimersSettings = {
+  __typename?: 'SetRestTimersSettings';
+  drop?: Maybe<Scalars['Int']['output']>;
+  failure?: Maybe<Scalars['Int']['output']>;
+  normal?: Maybe<Scalars['Int']['output']>;
+  warmup?: Maybe<Scalars['Int']['output']>;
+};
+
+/** Details about the statistics of the set performed. */
+export type SetStatisticInput = {
+  distance?: InputMaybe<Scalars['Decimal']['input']>;
+  duration?: InputMaybe<Scalars['Decimal']['input']>;
+  oneRm?: InputMaybe<Scalars['Decimal']['input']>;
+  pace?: InputMaybe<Scalars['Decimal']['input']>;
+  reps?: InputMaybe<Scalars['Decimal']['input']>;
+  volume?: InputMaybe<Scalars['Decimal']['input']>;
+  weight?: InputMaybe<Scalars['Decimal']['input']>;
+};
+
+export type ShowEpisode = {
+  __typename?: 'ShowEpisode';
+  episodeNumber: Scalars['Int']['output'];
+  id: Scalars['Int']['output'];
+  name: Scalars['String']['output'];
+  overview?: Maybe<Scalars['String']['output']>;
+  posterImages: Array<Scalars['String']['output']>;
+  publishDate?: Maybe<Scalars['NaiveDate']['output']>;
+  runtime?: Maybe<Scalars['Int']['output']>;
+};
+
+export type ShowEpisodeSpecificsInput = {
+  episodeNumber: Scalars['Int']['input'];
+  id: Scalars['Int']['input'];
+  name: Scalars['String']['input'];
+  overview?: InputMaybe<Scalars['String']['input']>;
+  posterImages: Array<Scalars['String']['input']>;
+  publishDate?: InputMaybe<Scalars['NaiveDate']['input']>;
+  runtime?: InputMaybe<Scalars['Int']['input']>;
+};
+
+export type ShowSeason = {
+  __typename?: 'ShowSeason';
+  backdropImages: Array<Scalars['String']['output']>;
+  episodes: Array<ShowEpisode>;
+  id: Scalars['Int']['output'];
+  name: Scalars['String']['output'];
+  overview?: Maybe<Scalars['String']['output']>;
+  posterImages: Array<Scalars['String']['output']>;
+  publishDate?: Maybe<Scalars['NaiveDate']['output']>;
+  seasonNumber: Scalars['Int']['output'];
+};
+
+export type ShowSeasonSpecificsInput = {
+  backdropImages: Array<Scalars['String']['input']>;
+  episodes: Array<ShowEpisodeSpecificsInput>;
+  id: Scalars['Int']['input'];
+  name: Scalars['String']['input'];
+  overview?: InputMaybe<Scalars['String']['input']>;
+  posterImages: Array<Scalars['String']['input']>;
+  publishDate?: InputMaybe<Scalars['NaiveDate']['input']>;
+  seasonNumber: Scalars['Int']['input'];
+};
+
+export type ShowSpecifics = {
+  __typename?: 'ShowSpecifics';
+  runtime?: Maybe<Scalars['Int']['output']>;
+  seasons: Array<ShowSeason>;
+  totalEpisodes?: Maybe<Scalars['Int']['output']>;
+  totalSeasons?: Maybe<Scalars['Int']['output']>;
+};
+
+export type ShowSpecificsInput = {
+  runtime?: InputMaybe<Scalars['Int']['input']>;
+  seasons: Array<ShowSeasonSpecificsInput>;
+  totalEpisodes?: InputMaybe<Scalars['Int']['input']>;
+  totalSeasons?: InputMaybe<Scalars['Int']['input']>;
+};
+
+export type StringIdObject = {
+  __typename?: 'StringIdObject';
+  id: Scalars['String']['output'];
+};
+
+export type StrongAppImportMapping = {
+  multiplier?: InputMaybe<Scalars['Decimal']['input']>;
+  sourceName: Scalars['String']['input'];
+  targetName: Scalars['String']['input'];
+};
+
+export type UpdateComplexJsonInput = {
+  /** Dot delimited path to the property that needs to be changed. */
+  property: Scalars['String']['input'];
+  value: Scalars['String']['input'];
+};
+
+export type UpdateCustomExerciseInput = {
+  attributes: ExerciseAttributesInput;
+  equipment?: InputMaybe<ExerciseEquipment>;
+  force?: InputMaybe<ExerciseForce>;
+  id: Scalars['String']['input'];
+  level: ExerciseLevel;
+  lot: ExerciseLot;
+  mechanic?: InputMaybe<ExerciseMechanic>;
+  muscles: Array<ExerciseMuscle>;
+  oldName: Scalars['String']['input'];
+  shouldDelete?: InputMaybe<Scalars['Boolean']['input']>;
+};
+
+export type UpdateSeenItemInput = {
+  finishedOn?: InputMaybe<Scalars['NaiveDate']['input']>;
+  manualTimeSpent?: InputMaybe<Scalars['Decimal']['input']>;
+  providerWatchedOn?: InputMaybe<Scalars['String']['input']>;
+  reviewId?: InputMaybe<Scalars['String']['input']>;
+  seenId: Scalars['String']['input'];
+  startedOn?: InputMaybe<Scalars['NaiveDate']['input']>;
+};
+
+export type UpdateUserExerciseSettings = {
+  change: UpdateComplexJsonInput;
+  exerciseId: Scalars['String']['input'];
+};
+
+export type UpdateUserInput = {
+  adminAccessToken?: InputMaybe<Scalars['String']['input']>;
+  extraInformation?: InputMaybe<Scalars['JSON']['input']>;
+  isDisabled?: InputMaybe<Scalars['Boolean']['input']>;
+  lot?: InputMaybe<UserLot>;
+  password?: InputMaybe<Scalars['String']['input']>;
+  userId: Scalars['String']['input'];
+  username?: InputMaybe<Scalars['String']['input']>;
+};
+
+export type UpdateUserIntegrationInput = {
+  integrationId: Scalars['String']['input'];
+  isDisabled?: InputMaybe<Scalars['Boolean']['input']>;
+  maximumProgress?: InputMaybe<Scalars['Decimal']['input']>;
+  minimumProgress?: InputMaybe<Scalars['Decimal']['input']>;
+  syncToOwnedCollection?: InputMaybe<Scalars['Boolean']['input']>;
+};
+
+export type UpdateUserNotificationPlatformInput = {
+  isDisabled?: InputMaybe<Scalars['Boolean']['input']>;
+  notificationId: Scalars['String']['input'];
+};
+
+export type UpdateUserWorkoutAttributesInput = {
+  endTime?: InputMaybe<Scalars['DateTime']['input']>;
+  id: Scalars['String']['input'];
+  startTime?: InputMaybe<Scalars['DateTime']['input']>;
+};
+
+export type User = {
+  __typename?: 'User';
+  createdOn: Scalars['DateTime']['output'];
+  id: Scalars['String']['output'];
+  isDisabled?: Maybe<Scalars['Boolean']['output']>;
+  lot: UserLot;
+  name: Scalars['String']['output'];
+  oidcIssuerId?: Maybe<Scalars['String']['output']>;
+  preferences: UserPreferences;
+};
+
+export type UserCalendarEventInput = {
+  month: Scalars['Int']['input'];
+  year: Scalars['Int']['input'];
+};
+
+export type UserCustomMeasurement = {
+  __typename?: 'UserCustomMeasurement';
+  dataType: UserCustomMeasurementDataType;
+  name: Scalars['String']['output'];
+};
+
+export enum UserCustomMeasurementDataType {
+  Decimal = 'DECIMAL'
+}
+
+export type UserDetailsError = {
+  __typename?: 'UserDetailsError';
+  error: UserDetailsErrorVariant;
+};
+
+export enum UserDetailsErrorVariant {
+  AuthTokenInvalid = 'AUTH_TOKEN_INVALID'
+}
+
+export type UserDetailsResult = User | UserDetailsError;
+
+export type UserExerciseDetails = {
+  __typename?: 'UserExerciseDetails';
+  collections: Array<Collection>;
+  details?: Maybe<UserToEntity>;
+  history?: Maybe<Array<UserToExerciseHistoryExtraInformation>>;
+  reviews: Array<ReviewItem>;
+};
+
+export type UserExerciseInput = {
+  assets?: InputMaybe<EntityAssetsInput>;
+  exerciseId: Scalars['String']['input'];
+  notes: Array<Scalars['String']['input']>;
+  sets: Array<UserWorkoutSetRecord>;
+};
+
+export type UserFeaturesEnabledPreferences = {
+  __typename?: 'UserFeaturesEnabledPreferences';
+  fitness: UserFitnessFeaturesEnabledPreferences;
+  media: UserMediaFeaturesEnabledPreferences;
+  others: UserOthersFeaturesEnabledPreferences;
+};
+
+export type UserFitnessExercisesPreferences = {
+  __typename?: 'UserFitnessExercisesPreferences';
+  setRestTimers: SetRestTimersSettings;
+  unitSystem: UserUnitSystem;
+};
+
+export type UserFitnessFeaturesEnabledPreferences = {
+  __typename?: 'UserFitnessFeaturesEnabledPreferences';
+  enabled: Scalars['Boolean']['output'];
+  measurements: Scalars['Boolean']['output'];
+  templates: Scalars['Boolean']['output'];
+  workouts: Scalars['Boolean']['output'];
+};
+
+export type UserFitnessLoggingPreferences = {
+  __typename?: 'UserFitnessLoggingPreferences';
+  showDetailsWhileEditing: Scalars['Boolean']['output'];
+};
+
+export type UserFitnessMeasurementsPreferences = {
+  __typename?: 'UserFitnessMeasurementsPreferences';
+  custom: Array<UserCustomMeasurement>;
+  inbuilt: UserMeasurementsInBuiltPreferences;
+};
+
+export type UserFitnessPreferences = {
+  __typename?: 'UserFitnessPreferences';
+  exercises: UserFitnessExercisesPreferences;
+  logging: UserFitnessLoggingPreferences;
+  measurements: UserFitnessMeasurementsPreferences;
+};
+
+export type UserGeneralDashboardElement = {
+  __typename?: 'UserGeneralDashboardElement';
+  deduplicateMedia?: Maybe<Scalars['Boolean']['output']>;
+  hidden: Scalars['Boolean']['output'];
+  numElements?: Maybe<Scalars['Int']['output']>;
+  section: DashboardElementLot;
+};
+
+export type UserGeneralPreferences = {
+  __typename?: 'UserGeneralPreferences';
+  dashboard: Array<UserGeneralDashboardElement>;
+  disableIntegrations: Scalars['Boolean']['output'];
+  disableNavigationAnimation: Scalars['Boolean']['output'];
+  disableReviews: Scalars['Boolean']['output'];
+  disableVideos: Scalars['Boolean']['output'];
+  disableWatchProviders: Scalars['Boolean']['output'];
+  displayNsfw: Scalars['Boolean']['output'];
+  gridPacking: GridPacking;
+  persistQueries: Scalars['Boolean']['output'];
+  reviewScale: UserReviewScale;
+  watchProviders: Array<UserGeneralWatchProvider>;
+};
+
+export type UserGeneralWatchProvider = {
+  __typename?: 'UserGeneralWatchProvider';
+  lot: MediaLot;
+  values: Array<Scalars['String']['output']>;
+};
+
+export enum UserLot {
+  Admin = 'ADMIN',
+  Normal = 'NORMAL'
+}
+
+/** An export of a measurement taken at a point in time. */
+export type UserMeasurement = {
+  __typename?: 'UserMeasurement';
+  /** Any comment associated entered by the user. */
+  comment?: Maybe<Scalars['String']['output']>;
+  /** The name given to this measurement by the user. */
+  name?: Maybe<Scalars['String']['output']>;
+  /** The contents of the actual measurement. */
+  stats: UserMeasurementStats;
+  /** The date and time this measurement was made. */
+  timestamp: Scalars['DateTime']['output'];
+};
+
+/** The actual statistics that were logged in a user measurement. */
+export type UserMeasurementDataInput = {
+  abdominalSkinfold?: InputMaybe<Scalars['Decimal']['input']>;
+  basalMetabolicRate?: InputMaybe<Scalars['Decimal']['input']>;
+  bicepsCircumference?: InputMaybe<Scalars['Decimal']['input']>;
+  bodyFat?: InputMaybe<Scalars['Decimal']['input']>;
+  bodyFatCaliper?: InputMaybe<Scalars['Decimal']['input']>;
+  bodyMassIndex?: InputMaybe<Scalars['Decimal']['input']>;
+  boneMass?: InputMaybe<Scalars['Decimal']['input']>;
+  calories?: InputMaybe<Scalars['Decimal']['input']>;
+  chestCircumference?: InputMaybe<Scalars['Decimal']['input']>;
+  chestSkinfold?: InputMaybe<Scalars['Decimal']['input']>;
+  custom?: InputMaybe<Scalars['JSONObject']['input']>;
+  hipCircumference?: InputMaybe<Scalars['Decimal']['input']>;
+  leanBodyMass?: InputMaybe<Scalars['Decimal']['input']>;
+  muscle?: InputMaybe<Scalars['Decimal']['input']>;
+  neckCircumference?: InputMaybe<Scalars['Decimal']['input']>;
+  thighCircumference?: InputMaybe<Scalars['Decimal']['input']>;
+  thighSkinfold?: InputMaybe<Scalars['Decimal']['input']>;
+  totalBodyWater?: InputMaybe<Scalars['Decimal']['input']>;
+  totalDailyEnergyExpenditure?: InputMaybe<Scalars['Decimal']['input']>;
+  visceralFat?: InputMaybe<Scalars['Decimal']['input']>;
+  waistCircumference?: InputMaybe<Scalars['Decimal']['input']>;
+  waistToHeightRatio?: InputMaybe<Scalars['Decimal']['input']>;
+  waistToHipRatio?: InputMaybe<Scalars['Decimal']['input']>;
+  weight?: InputMaybe<Scalars['Decimal']['input']>;
+};
+
+/** An export of a measurement taken at a point in time. */
+export type UserMeasurementInput = {
+  /** Any comment associated entered by the user. */
+  comment?: InputMaybe<Scalars['String']['input']>;
+  /** The name given to this measurement by the user. */
+  name?: InputMaybe<Scalars['String']['input']>;
+  /** The contents of the actual measurement. */
+  stats: UserMeasurementDataInput;
+  /** The date and time this measurement was made. */
+  timestamp: Scalars['DateTime']['input'];
+};
+
+/** The actual statistics that were logged in a user measurement. */
+export type UserMeasurementStats = {
+  __typename?: 'UserMeasurementStats';
+  abdominalSkinfold?: Maybe<Scalars['Decimal']['output']>;
+  basalMetabolicRate?: Maybe<Scalars['Decimal']['output']>;
+  bicepsCircumference?: Maybe<Scalars['Decimal']['output']>;
+  bodyFat?: Maybe<Scalars['Decimal']['output']>;
+  bodyFatCaliper?: Maybe<Scalars['Decimal']['output']>;
+  bodyMassIndex?: Maybe<Scalars['Decimal']['output']>;
+  boneMass?: Maybe<Scalars['Decimal']['output']>;
+  calories?: Maybe<Scalars['Decimal']['output']>;
+  chestCircumference?: Maybe<Scalars['Decimal']['output']>;
+  chestSkinfold?: Maybe<Scalars['Decimal']['output']>;
+  custom?: Maybe<Scalars['JSONObject']['output']>;
+  hipCircumference?: Maybe<Scalars['Decimal']['output']>;
+  leanBodyMass?: Maybe<Scalars['Decimal']['output']>;
+  muscle?: Maybe<Scalars['Decimal']['output']>;
+  neckCircumference?: Maybe<Scalars['Decimal']['output']>;
+  thighCircumference?: Maybe<Scalars['Decimal']['output']>;
+  thighSkinfold?: Maybe<Scalars['Decimal']['output']>;
+  totalBodyWater?: Maybe<Scalars['Decimal']['output']>;
+  totalDailyEnergyExpenditure?: Maybe<Scalars['Decimal']['output']>;
+  visceralFat?: Maybe<Scalars['Decimal']['output']>;
+  waistCircumference?: Maybe<Scalars['Decimal']['output']>;
+  waistToHeightRatio?: Maybe<Scalars['Decimal']['output']>;
+  waistToHipRatio?: Maybe<Scalars['Decimal']['output']>;
+  weight?: Maybe<Scalars['Decimal']['output']>;
+};
+
+export type UserMeasurementsInBuiltPreferences = {
+  __typename?: 'UserMeasurementsInBuiltPreferences';
+  abdominalSkinfold: Scalars['Boolean']['output'];
+  basalMetabolicRate: Scalars['Boolean']['output'];
+  bicepsCircumference: Scalars['Boolean']['output'];
+  bodyFat: Scalars['Boolean']['output'];
+  bodyFatCaliper: Scalars['Boolean']['output'];
+  bodyMassIndex: Scalars['Boolean']['output'];
+  boneMass: Scalars['Boolean']['output'];
+  calories: Scalars['Boolean']['output'];
+  chestCircumference: Scalars['Boolean']['output'];
+  chestSkinfold: Scalars['Boolean']['output'];
+  hipCircumference: Scalars['Boolean']['output'];
+  leanBodyMass: Scalars['Boolean']['output'];
+  muscle: Scalars['Boolean']['output'];
+  neckCircumference: Scalars['Boolean']['output'];
+  thighCircumference: Scalars['Boolean']['output'];
+  thighSkinfold: Scalars['Boolean']['output'];
+  totalBodyWater: Scalars['Boolean']['output'];
+  totalDailyEnergyExpenditure: Scalars['Boolean']['output'];
+  visceralFat: Scalars['Boolean']['output'];
+  waistCircumference: Scalars['Boolean']['output'];
+  waistToHeightRatio: Scalars['Boolean']['output'];
+  waistToHipRatio: Scalars['Boolean']['output'];
+  weight: Scalars['Boolean']['output'];
+};
+
+export type UserMeasurementsListInput = {
+  endTime?: InputMaybe<Scalars['DateTime']['input']>;
+  startTime?: InputMaybe<Scalars['DateTime']['input']>;
+};
+
+export type UserMediaFeaturesEnabledPreferences = {
+  __typename?: 'UserMediaFeaturesEnabledPreferences';
+  anime: Scalars['Boolean']['output'];
+  audioBook: Scalars['Boolean']['output'];
+  book: Scalars['Boolean']['output'];
+  enabled: Scalars['Boolean']['output'];
+  genres: Scalars['Boolean']['output'];
+  groups: Scalars['Boolean']['output'];
+  manga: Scalars['Boolean']['output'];
+  movie: Scalars['Boolean']['output'];
+  people: Scalars['Boolean']['output'];
+  podcast: Scalars['Boolean']['output'];
+  show: Scalars['Boolean']['output'];
+  videoGame: Scalars['Boolean']['output'];
+  visualNovel: Scalars['Boolean']['output'];
+};
+
+export type UserMediaNextEntry = {
+  __typename?: 'UserMediaNextEntry';
+  chapter?: Maybe<Scalars['Decimal']['output']>;
+  episode?: Maybe<Scalars['Int']['output']>;
+  season?: Maybe<Scalars['Int']['output']>;
+  volume?: Maybe<Scalars['Int']['output']>;
+};
+
+export type UserMetadataDetails = {
+  __typename?: 'UserMetadataDetails';
+  /** The average rating of this media in this service. */
+  averageRating?: Maybe<Scalars['Decimal']['output']>;
+  /** The collections in which this media is present. */
+  collections: Array<Collection>;
+  /** Whether this media has been interacted with */
+  hasInteracted: Scalars['Boolean']['output'];
+  /** The seen history of this media. */
+  history: Array<Seen>;
+  /** The seen item if it is in progress. */
+  inProgress?: Maybe<Seen>;
+  /** The reasons why this metadata is related to this user */
+  mediaReason?: Maybe<Array<UserToMediaReason>>;
+  /** The next episode/chapter of this media. */
+  nextEntry?: Maybe<UserMediaNextEntry>;
+  /** The seen progress of this media if it is a podcast. */
+  podcastProgress?: Maybe<Array<UserMetadataDetailsEpisodeProgress>>;
+  /** The public reviews of this media. */
+  reviews: Array<ReviewItem>;
+  /** The number of users who have seen this media. */
+  seenByAllCount: Scalars['Int']['output'];
+  /** The number of times this user has seen this media. */
+  seenByUserCount: Scalars['Int']['output'];
+  /** The seen progress of this media if it is a show. */
+  showProgress?: Maybe<Array<UserMetadataDetailsShowSeasonProgress>>;
+};
+
+export type UserMetadataDetailsEpisodeProgress = {
+  __typename?: 'UserMetadataDetailsEpisodeProgress';
+  episodeNumber: Scalars['Int']['output'];
+  timesSeen: Scalars['Int']['output'];
+};
+
+export type UserMetadataDetailsShowSeasonProgress = {
+  __typename?: 'UserMetadataDetailsShowSeasonProgress';
+  episodes: Array<UserMetadataDetailsEpisodeProgress>;
+  seasonNumber: Scalars['Int']['output'];
+  timesSeen: Scalars['Int']['output'];
+};
+
+export type UserMetadataGroupDetails = {
+  __typename?: 'UserMetadataGroupDetails';
+  collections: Array<Collection>;
+  reviews: Array<ReviewItem>;
+};
+
+export type UserNotificationsPreferences = {
+  __typename?: 'UserNotificationsPreferences';
+  enabled: Scalars['Boolean']['output'];
+  toSend: Array<MediaStateChanged>;
+};
+
+export type UserOthersFeaturesEnabledPreferences = {
+  __typename?: 'UserOthersFeaturesEnabledPreferences';
+  calendar: Scalars['Boolean']['output'];
+  collections: Scalars['Boolean']['output'];
+};
+
+export type UserPersonDetails = {
+  __typename?: 'UserPersonDetails';
+  collections: Array<Collection>;
+  reviews: Array<ReviewItem>;
+};
+
+export type UserPreferences = {
+  __typename?: 'UserPreferences';
+  featuresEnabled: UserFeaturesEnabledPreferences;
+  fitness: UserFitnessPreferences;
+  general: UserGeneralPreferences;
+  notifications: UserNotificationsPreferences;
+};
+
+export enum UserReviewScale {
+  OutOfFive = 'OUT_OF_FIVE',
+  OutOfHundred = 'OUT_OF_HUNDRED',
+  ThreePointSmiley = 'THREE_POINT_SMILEY'
+}
+
+export type UserToEntity = {
+  __typename?: 'UserToEntity';
+  collectionId?: Maybe<Scalars['String']['output']>;
+  createdOn: Scalars['DateTime']['output'];
+  exerciseExtraInformation?: Maybe<UserToExerciseExtraInformation>;
+  exerciseId?: Maybe<Scalars['String']['output']>;
+  exerciseNumTimesInteracted?: Maybe<Scalars['Int']['output']>;
+  lastUpdatedOn: Scalars['DateTime']['output'];
+  metadataGroupId?: Maybe<Scalars['String']['output']>;
+  metadataId?: Maybe<Scalars['String']['output']>;
+  personId?: Maybe<Scalars['String']['output']>;
+  userId: Scalars['String']['output'];
+};
+
+export type UserToExerciseBestSetExtraInformation = {
+  __typename?: 'UserToExerciseBestSetExtraInformation';
+  lot: WorkoutSetPersonalBest;
+  sets: Array<ExerciseBestSetRecord>;
+};
+
+export type UserToExerciseExtraInformation = {
+  __typename?: 'UserToExerciseExtraInformation';
+  history: Array<UserToExerciseHistoryExtraInformation>;
+  lifetimeStats: WorkoutOrExerciseTotals;
+  personalBests: Array<UserToExerciseBestSetExtraInformation>;
+  settings: UserToExerciseSettingsExtraInformation;
+};
+
+export type UserToExerciseHistoryExtraInformation = {
+  __typename?: 'UserToExerciseHistoryExtraInformation';
+  bestSet?: Maybe<WorkoutSetRecord>;
+  idx: Scalars['Int']['output'];
+  workoutEndOn: Scalars['DateTime']['output'];
+  workoutId: Scalars['String']['output'];
+};
+
+export type UserToExerciseSettingsExtraInformation = {
+  __typename?: 'UserToExerciseSettingsExtraInformation';
+  setRestTimers: SetRestTimersSettings;
+};
+
+export enum UserToMediaReason {
+  Collection = 'COLLECTION',
+  Finished = 'FINISHED',
+  Monitoring = 'MONITORING',
+  Owned = 'OWNED',
+  Reminder = 'REMINDER',
+  Reviewed = 'REVIEWED',
+  Seen = 'SEEN',
+  Watchlist = 'WATCHLIST'
+}
+
+export enum UserUnitSystem {
+  Imperial = 'IMPERIAL',
+  Metric = 'METRIC'
+}
+
+export type UserUpcomingCalendarEventInput = {
+  /** The number of days to select */
+  nextDays?: InputMaybe<Scalars['Int']['input']>;
+  /** The number of media to select */
+  nextMedia?: InputMaybe<Scalars['Int']['input']>;
+};
+
+export type UserWorkoutDetails = {
+  __typename?: 'UserWorkoutDetails';
+  collections: Array<Collection>;
+  details: Workout;
+};
+
+export type UserWorkoutInput = {
+  assets?: InputMaybe<EntityAssetsInput>;
+  comment?: InputMaybe<Scalars['String']['input']>;
+  endTime: Scalars['DateTime']['input'];
+  exercises: Array<UserExerciseInput>;
+  name: Scalars['String']['input'];
+  repeatedFrom?: InputMaybe<Scalars['String']['input']>;
+  startTime: Scalars['DateTime']['input'];
+  supersets: Array<WorkoutSupersetsInformationInput>;
+  templateId?: InputMaybe<Scalars['String']['input']>;
+  updateWorkoutId?: InputMaybe<Scalars['String']['input']>;
+  updateWorkoutTemplateId?: InputMaybe<Scalars['String']['input']>;
+};
+
+export type UserWorkoutSetRecord = {
+  confirmedAt?: InputMaybe<Scalars['DateTime']['input']>;
+  lot: SetLot;
+  note?: InputMaybe<Scalars['String']['input']>;
+  restTime?: InputMaybe<Scalars['Int']['input']>;
+  statistic: SetStatisticInput;
+};
+
+export type UserWorkoutTemplateDetails = {
+  __typename?: 'UserWorkoutTemplateDetails';
+  collections: Array<Collection>;
+  details: WorkoutTemplate;
+};
+
+export type VideoGameSpecifics = {
+  __typename?: 'VideoGameSpecifics';
+  platforms: Array<Scalars['String']['output']>;
+};
+
+export type VideoGameSpecificsInput = {
+  platforms: Array<Scalars['String']['input']>;
+};
+
+export enum Visibility {
+  Private = 'PRIVATE',
+  Public = 'PUBLIC'
+}
+
+export type VisualNovelSpecifics = {
+  __typename?: 'VisualNovelSpecifics';
+  length?: Maybe<Scalars['Int']['output']>;
+};
+
+export type VisualNovelSpecificsInput = {
+  length?: InputMaybe<Scalars['Int']['input']>;
+};
+
+export type WatchProvider = {
+  __typename?: 'WatchProvider';
+  image?: Maybe<Scalars['String']['output']>;
+  languages: Array<Scalars['String']['output']>;
+  name: Scalars['String']['output'];
+};
+
+/** A workout that was completed by the user. */
+export type Workout = {
+  __typename?: 'Workout';
+  duration: Scalars['Int']['output'];
+  endTime: Scalars['DateTime']['output'];
+  id: Scalars['String']['output'];
+  information: WorkoutInformation;
+  name: Scalars['String']['output'];
+  repeatedFrom?: Maybe<Scalars['String']['output']>;
+  startTime: Scalars['DateTime']['output'];
+  summary: WorkoutSummary;
+  templateId?: Maybe<Scalars['String']['output']>;
+};
+
+export type WorkoutEquipmentFocusedSummary = {
+  __typename?: 'WorkoutEquipmentFocusedSummary';
+  equipment: ExerciseEquipment;
+  exercises: Array<Scalars['Int']['output']>;
+};
+
+export type WorkoutFocusedSummary = {
+  __typename?: 'WorkoutFocusedSummary';
+  equipments: Array<WorkoutEquipmentFocusedSummary>;
+  forces: Array<WorkoutForceFocusedSummary>;
+  levels: Array<WorkoutLevelFocusedSummary>;
+  lots: Array<WorkoutLotFocusedSummary>;
+  muscles: Array<WorkoutMuscleFocusedSummary>;
+};
+
+export type WorkoutForceFocusedSummary = {
+  __typename?: 'WorkoutForceFocusedSummary';
+  exercises: Array<Scalars['Int']['output']>;
+  force: ExerciseForce;
+};
+
+/** Information about a workout done. */
+export type WorkoutInformation = {
+  __typename?: 'WorkoutInformation';
+  assets?: Maybe<EntityAssets>;
+  comment?: Maybe<Scalars['String']['output']>;
+  exercises: Array<ProcessedExercise>;
+  supersets: Array<WorkoutSupersetsInformation>;
+};
+
+export type WorkoutLevelFocusedSummary = {
+  __typename?: 'WorkoutLevelFocusedSummary';
+  exercises: Array<Scalars['Int']['output']>;
+  level: ExerciseLevel;
+};
+
+export type WorkoutListResults = {
+  __typename?: 'WorkoutListResults';
+  details: SearchDetails;
+  items: Array<Workout>;
+};
+
+export type WorkoutLotFocusedSummary = {
+  __typename?: 'WorkoutLotFocusedSummary';
+  exercises: Array<Scalars['Int']['output']>;
+  lot: ExerciseLot;
+};
+
+export type WorkoutMuscleFocusedSummary = {
+  __typename?: 'WorkoutMuscleFocusedSummary';
+  exercises: Array<Scalars['Int']['output']>;
+  muscle: ExerciseMuscle;
+};
+
+/** The totals of a workout and the different bests achieved. */
+export type WorkoutOrExerciseTotals = {
+  __typename?: 'WorkoutOrExerciseTotals';
+  distance: Scalars['Decimal']['output'];
+  duration: Scalars['Decimal']['output'];
+  /** The number of personal bests achieved. */
+  personalBestsAchieved: Scalars['Int']['output'];
+  reps: Scalars['Decimal']['output'];
+  /** The total seconds that were logged in the rest timer. */
+  restTime: Scalars['Int']['output'];
+  weight: Scalars['Decimal']['output'];
+};
+
+/** The different types of personal bests that can be achieved on a set. */
+export enum WorkoutSetPersonalBest {
+  OneRm = 'ONE_RM',
+  Pace = 'PACE',
+  Reps = 'REPS',
+  Time = 'TIME',
+  Volume = 'VOLUME',
+  Weight = 'WEIGHT'
+}
+
+/** Details about the set performed. */
+export type WorkoutSetRecord = {
+  __typename?: 'WorkoutSetRecord';
+  actualRestTime?: Maybe<Scalars['Int']['output']>;
+  confirmedAt?: Maybe<Scalars['DateTime']['output']>;
+  lot: SetLot;
+  note?: Maybe<Scalars['String']['output']>;
+  personalBests?: Maybe<Array<WorkoutSetPersonalBest>>;
+  restTime?: Maybe<Scalars['Int']['output']>;
+  statistic: WorkoutSetStatistic;
+  totals?: Maybe<WorkoutSetTotals>;
+};
+
+/** Details about the statistics of the set performed. */
+export type WorkoutSetStatistic = {
+  __typename?: 'WorkoutSetStatistic';
+  distance?: Maybe<Scalars['Decimal']['output']>;
+  duration?: Maybe<Scalars['Decimal']['output']>;
+  oneRm?: Maybe<Scalars['Decimal']['output']>;
+  pace?: Maybe<Scalars['Decimal']['output']>;
+  reps?: Maybe<Scalars['Decimal']['output']>;
+  volume?: Maybe<Scalars['Decimal']['output']>;
+  weight?: Maybe<Scalars['Decimal']['output']>;
+};
+
+export type WorkoutSetTotals = {
+  __typename?: 'WorkoutSetTotals';
+  weight?: Maybe<Scalars['Decimal']['output']>;
+};
+
+export type WorkoutSummary = {
+  __typename?: 'WorkoutSummary';
+  exercises: Array<WorkoutSummaryExercise>;
+  focused: WorkoutFocusedSummary;
+  total?: Maybe<WorkoutOrExerciseTotals>;
+};
+
+/** The summary about an exercise done in a workout. */
+export type WorkoutSummaryExercise = {
+  __typename?: 'WorkoutSummaryExercise';
+  bestSet?: Maybe<WorkoutSetRecord>;
+  lot?: Maybe<ExerciseLot>;
+  name: Scalars['String']['output'];
+  numSets: Scalars['Int']['output'];
+};
+
+export type WorkoutSupersetsInformation = {
+  __typename?: 'WorkoutSupersetsInformation';
+  /** A color that will be displayed on the frontend. */
+  color: Scalars['String']['output'];
+  /** The identifier of all the exercises which are in the same superset */
+  exercises: Array<Scalars['Int']['output']>;
+};
+
+export type WorkoutSupersetsInformationInput = {
+  /** A color that will be displayed on the frontend. */
+  color: Scalars['String']['input'];
+  /** The identifier of all the exercises which are in the same superset */
+  exercises: Array<Scalars['Int']['input']>;
+};
+
+export type WorkoutTemplate = {
+  __typename?: 'WorkoutTemplate';
+  createdOn: Scalars['DateTime']['output'];
+  id: Scalars['String']['output'];
+  information: WorkoutInformation;
+  name: Scalars['String']['output'];
+  summary: WorkoutSummary;
+  visibility: Visibility;
+};
+
+export type WorkoutTemplateListResults = {
+  __typename?: 'WorkoutTemplateListResults';
+  details: SearchDetails;
+  items: Array<WorkoutTemplate>;
+};
diff --git a/libs/graphql/package.json b/libs/graphql/package.json
index d46d941510..e507d7e8be 100644
--- a/libs/graphql/package.json
+++ b/libs/graphql/package.json
@@ -2,6 +2,6 @@
 	"name": "@ryot/graphql",
 	"dependencies": {
 		"@ryot/generated": "workspace:*",
-		"graphql-request": "7.1.0"
+		"graphql-request": "7.1.2"
 	}
 }
diff --git a/libs/graphql/src/backend/queries/fragments.gql b/libs/graphql/src/backend/queries/fragments.gql
index f253e8beab..71219f6e19 100644
--- a/libs/graphql/src/backend/queries/fragments.gql
+++ b/libs/graphql/src/backend/queries/fragments.gql
@@ -111,6 +111,28 @@ fragment WorkoutSummaryPart on WorkoutSummary {
 			...WorkoutSetRecordPart
 		}
 	}
+	focused {
+		lots {
+			lot
+			exercises
+		}
+		levels {
+			level
+			exercises
+		}
+		forces {
+			force
+			exercises
+		}
+		muscles {
+			muscle
+			exercises
+		}
+		equipments {
+			equipment
+			exercises
+		}
+	}
 }
 
 fragment CollectionPart on Collection {
diff --git a/libs/transactional/package.json b/libs/transactional/package.json
index 643679736a..7d52e3367c 100644
--- a/libs/transactional/package.json
+++ b/libs/transactional/package.json
@@ -2,11 +2,11 @@
 	"name": "@ryot/transactional",
 	"private": true,
 	"dependencies": {
-		"@react-email/components": "0.0.26",
+		"@react-email/components": "0.0.28",
 		"@ryot/ts-utils": "workspace:*",
 		"react": "18.3.1",
 		"react-dom": "18.3.1",
-		"react-email": "2.1.6"
+		"react-email": "3.0.2"
 	},
 	"devDependencies": {
 		"@types/react": "18.3.12",
diff --git a/libs/ts-utils/package.json b/libs/ts-utils/package.json
index 51ed72090f..d8a47a9d92 100644
--- a/libs/ts-utils/package.json
+++ b/libs/ts-utils/package.json
@@ -9,7 +9,8 @@
 		"humanize-duration-ts": "2.1.1",
 		"lodash": "4.17.21",
 		"tailwind-merge": "2.5.4",
-		"tiny-invariant": "1.3.3"
+		"tiny-invariant": "1.3.3",
+		"zod": "3.23.8"
 	},
 	"devDependencies": {
 		"@types/lodash": "4.17.13"
diff --git a/yarn.lock b/yarn.lock
index d1afac4ef3..336b5c45d1 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1472,7 +1472,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.23.5, @babel/runtime@npm:^7.25.6":
+"@babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.25.6":
   version: 7.25.9
   resolution: "@babel/runtime@npm:7.25.9"
   dependencies:
@@ -1873,10 +1873,10 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@drizzle-team/brocli@npm:^0.10.1":
-  version: 0.10.1
-  resolution: "@drizzle-team/brocli@npm:0.10.1"
-  checksum: 10/4f14ca31b2fe3561cbf8e71e119fb6d7f78123f63b404ee631bbae2fc756eaf3eded222f30e70d92203ec0679b6ae8685183dbff9e9e8547e70fdcf608a66013
+"@drizzle-team/brocli@npm:^0.10.2":
+  version: 0.10.2
+  resolution: "@drizzle-team/brocli@npm:0.10.2"
+  checksum: 10/c8d664fac9b075406ba7ddb17ab4aaf5aae6c99e371adc30a4d7972061aa9863f10e61584ab795da3a8471fdb46d234bb095133c05dfc113cd94b4ee97884e05
   languageName: node
   linkType: hard
 
@@ -1939,22 +1939,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@emotion/is-prop-valid@npm:^0.8.2":
-  version: 0.8.8
-  resolution: "@emotion/is-prop-valid@npm:0.8.8"
-  dependencies:
-    "@emotion/memoize": "npm:0.7.4"
-  checksum: 10/e85bdeb9d9d23de422f271e0f5311a0142b15055bb7e610440dbf250f0cdfd049df88af72a49e2c6081954481f1cbeca9172e2116ff536b38229397dfbed8082
-  languageName: node
-  linkType: hard
-
-"@emotion/memoize@npm:0.7.4":
-  version: 0.7.4
-  resolution: "@emotion/memoize@npm:0.7.4"
-  checksum: 10/4e3920d4ec95995657a37beb43d3f4b7d89fed6caa2b173a4c04d10482d089d5c3ea50bbc96618d918b020f26ed6e9c4026bbd45433566576c1f7b056c3271dc
-  languageName: node
-  linkType: hard
-
 "@emotion/memoize@npm:^0.9.0":
   version: 0.9.0
   resolution: "@emotion/memoize@npm:0.9.0"
@@ -2814,15 +2798,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@floating-ui/core@npm:^1.0.0":
-  version: 1.6.0
-  resolution: "@floating-ui/core@npm:1.6.0"
-  dependencies:
-    "@floating-ui/utils": "npm:^0.2.1"
-  checksum: 10/d6a47cacde193cd8ccb4c268b91ccc4ca254dffaec6242b07fd9bcde526044cc976d27933a7917f9a671de0a0e27f8d358f46400677dbd0c8199de293e9746e1
-  languageName: node
-  linkType: hard
-
 "@floating-ui/core@npm:^1.6.0":
   version: 1.6.5
   resolution: "@floating-ui/core@npm:1.6.5"
@@ -2842,16 +2817,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@floating-ui/dom@npm:^1.6.1":
-  version: 1.6.3
-  resolution: "@floating-ui/dom@npm:1.6.3"
-  dependencies:
-    "@floating-ui/core": "npm:^1.0.0"
-    "@floating-ui/utils": "npm:^0.2.0"
-  checksum: 10/83e97076c7a5f55c3506f574bc53f03d38bed6eb8181920c8733076889371e287e9ae6f28c520a076967759b9b6ff425362832a5cdf16a999069530dbb9cce53
-  languageName: node
-  linkType: hard
-
 "@floating-ui/react-dom@npm:^2.0.0":
   version: 2.1.1
   resolution: "@floating-ui/react-dom@npm:2.1.1"
@@ -2864,36 +2829,29 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@floating-ui/react-dom@npm:^2.0.8":
-  version: 2.0.8
-  resolution: "@floating-ui/react-dom@npm:2.0.8"
+"@floating-ui/react-dom@npm:^2.1.2":
+  version: 2.1.2
+  resolution: "@floating-ui/react-dom@npm:2.1.2"
   dependencies:
-    "@floating-ui/dom": "npm:^1.6.1"
+    "@floating-ui/dom": "npm:^1.0.0"
   peerDependencies:
     react: ">=16.8.0"
     react-dom: ">=16.8.0"
-  checksum: 10/e57b2a498aecf8de0ec28adf434257fca7893bd9bd7e78b63ac98c63b29b9fc086fc175630154352f3610f5c4a0d329823837f4f6c235cc0459fde6417065590
+  checksum: 10/2a67dc8499674e42ff32c7246bded185bb0fdd492150067caf9568569557ac4756a67787421d8604b0f241e5337de10762aee270d9aeef106d078a0ff13596c4
   languageName: node
   linkType: hard
 
-"@floating-ui/react@npm:^0.26.9":
-  version: 0.26.9
-  resolution: "@floating-ui/react@npm:0.26.9"
+"@floating-ui/react@npm:^0.26.27":
+  version: 0.26.27
+  resolution: "@floating-ui/react@npm:0.26.27"
   dependencies:
-    "@floating-ui/react-dom": "npm:^2.0.8"
-    "@floating-ui/utils": "npm:^0.2.1"
-    tabbable: "npm:^6.0.1"
+    "@floating-ui/react-dom": "npm:^2.1.2"
+    "@floating-ui/utils": "npm:^0.2.8"
+    tabbable: "npm:^6.0.0"
   peerDependencies:
     react: ">=16.8.0"
     react-dom: ">=16.8.0"
-  checksum: 10/997f5a471ac6080c5162ad86fbb8e5bc0eca9335c40d8445597a90ba645e5d35ee796c29bdc66d868182afe5901804ecd52b82560332ae123b0c269400421e63
-  languageName: node
-  linkType: hard
-
-"@floating-ui/utils@npm:^0.2.0, @floating-ui/utils@npm:^0.2.1":
-  version: 0.2.1
-  resolution: "@floating-ui/utils@npm:0.2.1"
-  checksum: 10/33c9ab346e7b05c5a1e6a95bc902aafcfc2c9d513a147e2491468843bd5607531b06d0b9aa56aa491cbf22a6c2495c18ccfc4c0344baec54a689a7bb8e4898d6
+  checksum: 10/ab6d05e5cc2c29272a6830c06dff07e8330f2b90234674f2d74ed8084659ebe3ac9472770a5f0e76007dd2ae89f9da75189d188437aea4b8ac2789afc21bb6b2
   languageName: node
   linkType: hard
 
@@ -2904,6 +2862,13 @@ __metadata:
   languageName: node
   linkType: hard
 
+"@floating-ui/utils@npm:^0.2.8":
+  version: 0.2.8
+  resolution: "@floating-ui/utils@npm:0.2.8"
+  checksum: 10/3e3ea3b2de06badc4baebdf358b3dbd77ccd9474a257a6ef237277895943db2acbae756477ec64de65a2a1436d94aea3107129a1feeef6370675bf2b161c1abc
+  languageName: node
+  linkType: hard
+
 "@formkit/auto-animate@npm:0.8.2":
   version: 0.8.2
   resolution: "@formkit/auto-animate@npm:0.8.2"
@@ -3732,16 +3697,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@jridgewell/source-map@npm:^0.3.3":
-  version: 0.3.6
-  resolution: "@jridgewell/source-map@npm:0.3.6"
-  dependencies:
-    "@jridgewell/gen-mapping": "npm:^0.3.5"
-    "@jridgewell/trace-mapping": "npm:^0.3.25"
-  checksum: 10/0a9aca9320dc9044014ba0ef989b3a8411b0d778895553e3b7ca2ac0a75a20af4a5ad3f202acfb1879fa40466036a4417e1d5b38305baed8b9c1ebe6e4b3e7f5
-  languageName: node
-  linkType: hard
-
 "@jridgewell/sourcemap-codec@npm:1.4.14":
   version: 1.4.14
   resolution: "@jridgewell/sourcemap-codec@npm:1.4.14"
@@ -3773,7 +3728,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@jridgewell/trace-mapping@npm:^0.3.20, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25":
+"@jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25":
   version: 0.3.25
   resolution: "@jridgewell/trace-mapping@npm:0.3.25"
   dependencies:
@@ -3807,107 +3762,107 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@mantine/carousel@npm:7.13.4":
-  version: 7.13.4
-  resolution: "@mantine/carousel@npm:7.13.4"
+"@mantine/carousel@npm:7.13.5":
+  version: 7.13.5
+  resolution: "@mantine/carousel@npm:7.13.5"
   peerDependencies:
-    "@mantine/core": 7.13.4
-    "@mantine/hooks": 7.13.4
+    "@mantine/core": 7.13.5
+    "@mantine/hooks": 7.13.5
     embla-carousel-react: ">=7.0.0"
-    react: ^18.2.0
-    react-dom: ^18.2.0
-  checksum: 10/9e1f08f98e4c60ee7010cd390bdac3a0ea361e81470996ee223415ba31c8d48962fd6bb6bab4cc18bf596d6891bd9bff9b3f1c2ff47fe6735888b4dcefc7deef
+    react: ^18.x || ^19.x
+    react-dom: ^18.x || ^19.x
+  checksum: 10/5b96187840288a6310f6357f8321c31a494815bd35772f0fe9f79707844bfcede2e9c85903ae16bdce5b08a7021ca5393fee73cd130aead8b4a80fa54eaa4085
   languageName: node
   linkType: hard
 
-"@mantine/charts@npm:7.13.4":
-  version: 7.13.4
-  resolution: "@mantine/charts@npm:7.13.4"
+"@mantine/charts@npm:7.13.5":
+  version: 7.13.5
+  resolution: "@mantine/charts@npm:7.13.5"
   peerDependencies:
-    "@mantine/core": 7.13.4
-    "@mantine/hooks": 7.13.4
-    react: ^18.2.0
-    react-dom: ^18.2.0
-    recharts: ^2.10.3
-  checksum: 10/2ba794cb533b49a06d3cc88e6f3969abeae96d24511daa66d813a8783887552f59f2022e8ceafd41eee5cabd31b92a0c6b605d41c1df4bb9d1aa1a081889ec38
+    "@mantine/core": 7.13.5
+    "@mantine/hooks": 7.13.5
+    react: ^18.x || ^19.x
+    react-dom: ^18.x || ^19.x
+    recharts: ^2.13.3
+  checksum: 10/0a267ddff62e3256dd877c1646dd8ff10f888ff33ea6b22082c1584d9b13736eaca3b1a30959413b47fece08c06796d1b584805c157469038d44c1b0fcdc3378
   languageName: node
   linkType: hard
 
-"@mantine/core@npm:7.13.4":
-  version: 7.13.4
-  resolution: "@mantine/core@npm:7.13.4"
+"@mantine/core@npm:7.13.5":
+  version: 7.13.5
+  resolution: "@mantine/core@npm:7.13.5"
   dependencies:
-    "@floating-ui/react": "npm:^0.26.9"
+    "@floating-ui/react": "npm:^0.26.27"
     clsx: "npm:^2.1.1"
-    react-number-format: "npm:^5.3.1"
-    react-remove-scroll: "npm:^2.5.7"
-    react-textarea-autosize: "npm:8.5.3"
-    type-fest: "npm:^4.12.0"
+    react-number-format: "npm:^5.4.2"
+    react-remove-scroll: "npm:^2.6.0"
+    react-textarea-autosize: "npm:8.5.4"
+    type-fest: "npm:^4.26.1"
   peerDependencies:
-    "@mantine/hooks": 7.13.4
-    react: ^18.2.0
-    react-dom: ^18.2.0
-  checksum: 10/5228c4b2b2492aa9e44249e96327a6b4e51e2ef4841cdce523d42a889caeda94566d9eb28c54818244923c9086716d57d2051ccbf0d9847e12254a114260de05
+    "@mantine/hooks": 7.13.5
+    react: ^18.x || ^19.x
+    react-dom: ^18.x || ^19.x
+  checksum: 10/c0e699e09a5aaf87cc0bf59785576920ac98f7f13879170d0882425b811bdb2902ebeb67679e776b83e86318b928a9d0a75e9de25e6aaf5a2ebce9dfed4e4274
   languageName: node
   linkType: hard
 
-"@mantine/dates@npm:7.13.4":
-  version: 7.13.4
-  resolution: "@mantine/dates@npm:7.13.4"
+"@mantine/dates@npm:7.13.5":
+  version: 7.13.5
+  resolution: "@mantine/dates@npm:7.13.5"
   dependencies:
     clsx: "npm:^2.1.1"
   peerDependencies:
-    "@mantine/core": 7.13.4
-    "@mantine/hooks": 7.13.4
+    "@mantine/core": 7.13.5
+    "@mantine/hooks": 7.13.5
     dayjs: ">=1.0.0"
-    react: ^18.2.0
-    react-dom: ^18.2.0
-  checksum: 10/45c1b3ddf52941fe1d27261265ef4e74e24fab039c14aa960fc678193be82e57d1cdeea1d839a674902cbb40f5b0828d60316b32e116e722adf1afc7cfe6d12b
+    react: ^18.x || ^19.x
+    react-dom: ^18.x || ^19.x
+  checksum: 10/ef462f98f8ac5a19c2cf3828452080edb641ecc6bf972090f83d41f29d0f1304f78db73d2a5b600e56fe1f1063c0998d2469cb3b99f2a4848defe43e69b5bae1
   languageName: node
   linkType: hard
 
-"@mantine/form@npm:7.13.4":
-  version: 7.13.4
-  resolution: "@mantine/form@npm:7.13.4"
+"@mantine/form@npm:7.13.5":
+  version: 7.13.5
+  resolution: "@mantine/form@npm:7.13.5"
   dependencies:
     fast-deep-equal: "npm:^3.1.3"
     klona: "npm:^2.0.6"
   peerDependencies:
-    react: ^18.2.0
-  checksum: 10/56fa756cf99296419af5ce5c4fff26980b558d0ed1e3535abe0456d8032e3efeeb328cfc49131c5d84c32a46aa4d98ce908cf21973958106302863cfbe7f9501
+    react: ^18.x || ^19.x
+  checksum: 10/79b409de799c0976fbbd35e42e73885ef81fe0060e6acf479729c08a423664bc537c6dd43cc9ca9774b4bb3516ca8d6de143e736685997f21954fcb709a61597
   languageName: node
   linkType: hard
 
-"@mantine/hooks@npm:7.13.4":
-  version: 7.13.4
-  resolution: "@mantine/hooks@npm:7.13.4"
+"@mantine/hooks@npm:7.13.5":
+  version: 7.13.5
+  resolution: "@mantine/hooks@npm:7.13.5"
   peerDependencies:
-    react: ^18.2.0
-  checksum: 10/cf2be767d0b7504b3ff2c53b13cf4660b377cc1fd2a3219f1ed7daecc9207a1ff2f60b3cdf9e4d91eafb0ecea395f2cedc658dde6c2cbd90cd7071033895849c
+    react: ^18.x || ^19.x
+  checksum: 10/961edff6391a91a551eefdd3ae12a270dfb3e72628f29a1fe3d030127dee40ccb6f603bf2f73708974f15ddeb4251d74fc2641993ef4fddb54171bb38a57b11e
   languageName: node
   linkType: hard
 
-"@mantine/notifications@npm:7.13.4":
-  version: 7.13.4
-  resolution: "@mantine/notifications@npm:7.13.4"
+"@mantine/notifications@npm:7.13.5":
+  version: 7.13.5
+  resolution: "@mantine/notifications@npm:7.13.5"
   dependencies:
-    "@mantine/store": "npm:7.13.4"
+    "@mantine/store": "npm:7.13.5"
     react-transition-group: "npm:4.4.5"
   peerDependencies:
-    "@mantine/core": 7.13.4
-    "@mantine/hooks": 7.13.4
-    react: ^18.2.0
-    react-dom: ^18.2.0
-  checksum: 10/cce866873678f4b78255aab6e70e0ae664063acb78ca6b2ea4a6131e974cdc5ec662750bae00c51b4fb9db24803a79b8dcd5d8429101cc5e83198eca0d9756eb
+    "@mantine/core": 7.13.5
+    "@mantine/hooks": 7.13.5
+    react: ^18.x || ^19.x
+    react-dom: ^18.x || ^19.x
+  checksum: 10/f90ded7229e68bec88568d7c282f09ec6230906c7982a3962075065ccb2d08a1533046301bdc93b532c18158d17aea03f13fffbe1bf9374630e4f824c28380eb
   languageName: node
   linkType: hard
 
-"@mantine/store@npm:7.13.4":
-  version: 7.13.4
-  resolution: "@mantine/store@npm:7.13.4"
+"@mantine/store@npm:7.13.5":
+  version: 7.13.5
+  resolution: "@mantine/store@npm:7.13.5"
   peerDependencies:
-    react: ^18.2.0
-  checksum: 10/3bd8f3686c0600c95f5f4ce1e0c559ce6fb099fdce27a9e150e78e1a77020c1e5f9bddb0fb76ae27b2e678c2a0643b81c7f969d69d32e18a981fb15c5e0f94e4
+    react: ^18.x || ^19.x
+  checksum: 10/1bc3eaa80b24ea217bb81f28f9b52db3efa432ea93849a3a2167b328d41774af39ece82500b8ae9fa4682b4796e1a8524ede2b0c83dc6772870893762edcb42d
   languageName: node
   linkType: hard
 
@@ -3936,100 +3891,72 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@molt/command@npm:^0.9.0":
-  version: 0.9.0
-  resolution: "@molt/command@npm:0.9.0"
-  dependencies:
-    "@molt/types": "npm:0.2.0"
-    alge: "npm:0.8.1"
-    chalk: "npm:^5.3.0"
-    lodash.camelcase: "npm:^4.3.0"
-    lodash.snakecase: "npm:^4.1.1"
-    readline-sync: "npm:^1.4.10"
-    string-length: "npm:^6.0.0"
-    strip-ansi: "npm:^7.1.0"
-    ts-toolbelt: "npm:^9.6.0"
-    type-fest: "npm:^4.3.1"
-    zod: "npm:^3.22.2"
-  checksum: 10/e6ec7c6c2c6a64a1b28e09074196e5aa891bdcbff4129e54c59b902e1b6f4151033fd92c8535666be32267163d04ce3ce454ca0df0a4d5669a8506817131984e
-  languageName: node
-  linkType: hard
-
-"@molt/types@npm:0.2.0":
-  version: 0.2.0
-  resolution: "@molt/types@npm:0.2.0"
-  dependencies:
-    ts-toolbelt: "npm:^9.6.0"
-  checksum: 10/0c7eab1dda0d689fda7025b4e4b37ffc290a7e2f7bfb0463a8bffc5834c30af66ab92d63bc2f71dc515cdd0121fc3587596690353a7e1c40d530395135540063
-  languageName: node
-  linkType: hard
-
-"@next/env@npm:14.1.4":
-  version: 14.1.4
-  resolution: "@next/env@npm:14.1.4"
-  checksum: 10/76db04d141aed6e4e7f64619f66b84b39a01fd698db735381b530347794b252d74f9d71fe6787402f986a5202e9a4ce1d9c2569fec7c56e67e346c0522883b8b
+"@next/env@npm:14.2.10":
+  version: 14.2.10
+  resolution: "@next/env@npm:14.2.10"
+  checksum: 10/52754033a280e2ea804bcf15df5f13fe24db6d7b9b571676e8ba79735675d66716c2d9e51a2f5b2ba6c6492178f4c82c572b3f4097efd890dfda38fd8a4328c4
   languageName: node
   linkType: hard
 
-"@next/swc-darwin-arm64@npm:14.1.4":
-  version: 14.1.4
-  resolution: "@next/swc-darwin-arm64@npm:14.1.4"
+"@next/swc-darwin-arm64@npm:14.2.10":
+  version: 14.2.10
+  resolution: "@next/swc-darwin-arm64@npm:14.2.10"
   conditions: os=darwin & cpu=arm64
   languageName: node
   linkType: hard
 
-"@next/swc-darwin-x64@npm:14.1.4":
-  version: 14.1.4
-  resolution: "@next/swc-darwin-x64@npm:14.1.4"
+"@next/swc-darwin-x64@npm:14.2.10":
+  version: 14.2.10
+  resolution: "@next/swc-darwin-x64@npm:14.2.10"
   conditions: os=darwin & cpu=x64
   languageName: node
   linkType: hard
 
-"@next/swc-linux-arm64-gnu@npm:14.1.4":
-  version: 14.1.4
-  resolution: "@next/swc-linux-arm64-gnu@npm:14.1.4"
+"@next/swc-linux-arm64-gnu@npm:14.2.10":
+  version: 14.2.10
+  resolution: "@next/swc-linux-arm64-gnu@npm:14.2.10"
   conditions: os=linux & cpu=arm64 & libc=glibc
   languageName: node
   linkType: hard
 
-"@next/swc-linux-arm64-musl@npm:14.1.4":
-  version: 14.1.4
-  resolution: "@next/swc-linux-arm64-musl@npm:14.1.4"
+"@next/swc-linux-arm64-musl@npm:14.2.10":
+  version: 14.2.10
+  resolution: "@next/swc-linux-arm64-musl@npm:14.2.10"
   conditions: os=linux & cpu=arm64 & libc=musl
   languageName: node
   linkType: hard
 
-"@next/swc-linux-x64-gnu@npm:14.1.4":
-  version: 14.1.4
-  resolution: "@next/swc-linux-x64-gnu@npm:14.1.4"
+"@next/swc-linux-x64-gnu@npm:14.2.10":
+  version: 14.2.10
+  resolution: "@next/swc-linux-x64-gnu@npm:14.2.10"
   conditions: os=linux & cpu=x64 & libc=glibc
   languageName: node
   linkType: hard
 
-"@next/swc-linux-x64-musl@npm:14.1.4":
-  version: 14.1.4
-  resolution: "@next/swc-linux-x64-musl@npm:14.1.4"
+"@next/swc-linux-x64-musl@npm:14.2.10":
+  version: 14.2.10
+  resolution: "@next/swc-linux-x64-musl@npm:14.2.10"
   conditions: os=linux & cpu=x64 & libc=musl
   languageName: node
   linkType: hard
 
-"@next/swc-win32-arm64-msvc@npm:14.1.4":
-  version: 14.1.4
-  resolution: "@next/swc-win32-arm64-msvc@npm:14.1.4"
+"@next/swc-win32-arm64-msvc@npm:14.2.10":
+  version: 14.2.10
+  resolution: "@next/swc-win32-arm64-msvc@npm:14.2.10"
   conditions: os=win32 & cpu=arm64
   languageName: node
   linkType: hard
 
-"@next/swc-win32-ia32-msvc@npm:14.1.4":
-  version: 14.1.4
-  resolution: "@next/swc-win32-ia32-msvc@npm:14.1.4"
+"@next/swc-win32-ia32-msvc@npm:14.2.10":
+  version: 14.2.10
+  resolution: "@next/swc-win32-ia32-msvc@npm:14.2.10"
   conditions: os=win32 & cpu=ia32
   languageName: node
   linkType: hard
 
-"@next/swc-win32-x64-msvc@npm:14.1.4":
-  version: 14.1.4
-  resolution: "@next/swc-win32-x64-msvc@npm:14.1.4"
+"@next/swc-win32-x64-msvc@npm:14.2.10":
+  version: 14.2.10
+  resolution: "@next/swc-win32-x64-msvc@npm:14.2.10"
   conditions: os=win32 & cpu=x64
   languageName: node
   linkType: hard
@@ -4137,10 +4064,10 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@paddle/paddle-js@npm:1.3.1":
-  version: 1.3.1
-  resolution: "@paddle/paddle-js@npm:1.3.1"
-  checksum: 10/8e5bb27eb65bc76f3850febb4e01a929c22bd130fa86afdbc64ba4344cbc1d6255224d473e178a807d0d08942ef324e770b0bc315cdbae828ab0e38f2758aa85
+"@paddle/paddle-js@npm:1.3.2":
+  version: 1.3.2
+  resolution: "@paddle/paddle-js@npm:1.3.2"
+  checksum: 10/a4ddea0d401c2df91adaaa59a89de565f42ce7d363913d04d4db23b0f35fbcd1091c7738f18cee43d7e5fa20869bf4fa07b56e7a19d3b1b674d2eb3a9ee1bd0f
   languageName: node
   linkType: hard
 
@@ -4161,13 +4088,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@radix-ui/colors@npm:1.0.1":
-  version: 1.0.1
-  resolution: "@radix-ui/colors@npm:1.0.1"
-  checksum: 10/8b5efa9da60b3cf8c1ec4112c46a634f7a53042dc43ecd2179f6930c96dcdb8a5c384ec7a377b91a6e64ed91df40cd5dd7ded11f87d4cf5d0b61346307714e45
-  languageName: node
-  linkType: hard
-
 "@radix-ui/number@npm:1.0.1":
   version: 1.0.1
   resolution: "@radix-ui/number@npm:1.0.1"
@@ -4451,29 +4371,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@radix-ui/react-dismissable-layer@npm:1.1.0":
-  version: 1.1.0
-  resolution: "@radix-ui/react-dismissable-layer@npm:1.1.0"
-  dependencies:
-    "@radix-ui/primitive": "npm:1.1.0"
-    "@radix-ui/react-compose-refs": "npm:1.1.0"
-    "@radix-ui/react-primitive": "npm:2.0.0"
-    "@radix-ui/react-use-callback-ref": "npm:1.1.0"
-    "@radix-ui/react-use-escape-keydown": "npm:1.1.0"
-  peerDependencies:
-    "@types/react": "*"
-    "@types/react-dom": "*"
-    react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-    react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-  peerDependenciesMeta:
-    "@types/react":
-      optional: true
-    "@types/react-dom":
-      optional: true
-  checksum: 10/08baf3441f811ce88649fa90cf8031f496f81a404cda75fa2a7b42020e3368f8f2a96911a4a1f7065cfa3fb2c091156c009d9255f81feeaf2f7ffadcfd12caf1
-  languageName: node
-  linkType: hard
-
 "@radix-ui/react-dismissable-layer@npm:1.1.1":
   version: 1.1.1
   resolution: "@radix-ui/react-dismissable-layer@npm:1.1.1"
@@ -4512,19 +4409,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@radix-ui/react-focus-guards@npm:1.1.0":
-  version: 1.1.0
-  resolution: "@radix-ui/react-focus-guards@npm:1.1.0"
-  peerDependencies:
-    "@types/react": "*"
-    react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-  peerDependenciesMeta:
-    "@types/react":
-      optional: true
-  checksum: 10/199717e7da1ba9b3fa74b04f6a245aaebf6bdb8ae7d6f4b5f21f95f4086414a3587beebc77399a99be7d3a4b2499eaa52bf72bef660f8e69856b0fd0593b074f
-  languageName: node
-  linkType: hard
-
 "@radix-ui/react-focus-scope@npm:1.0.3":
   version: 1.0.3
   resolution: "@radix-ui/react-focus-scope@npm:1.0.3"
@@ -4547,27 +4431,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@radix-ui/react-focus-scope@npm:1.1.0":
-  version: 1.1.0
-  resolution: "@radix-ui/react-focus-scope@npm:1.1.0"
-  dependencies:
-    "@radix-ui/react-compose-refs": "npm:1.1.0"
-    "@radix-ui/react-primitive": "npm:2.0.0"
-    "@radix-ui/react-use-callback-ref": "npm:1.1.0"
-  peerDependencies:
-    "@types/react": "*"
-    "@types/react-dom": "*"
-    react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-    react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-  peerDependenciesMeta:
-    "@types/react":
-      optional: true
-    "@types/react-dom":
-      optional: true
-  checksum: 10/a34dc5caecc56483e293de770fde3addcebd975b94625cb7057bee3f0837d82bba9a672bef7c7902d28d68d31ab9b3847c88285664b5b747ac9141dabf11df3c
-  languageName: node
-  linkType: hard
-
 "@radix-ui/react-id@npm:1.0.1":
   version: 1.0.1
   resolution: "@radix-ui/react-id@npm:1.0.1"
@@ -4618,39 +4481,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@radix-ui/react-popover@npm:1.1.1":
-  version: 1.1.1
-  resolution: "@radix-ui/react-popover@npm:1.1.1"
-  dependencies:
-    "@radix-ui/primitive": "npm:1.1.0"
-    "@radix-ui/react-compose-refs": "npm:1.1.0"
-    "@radix-ui/react-context": "npm:1.1.0"
-    "@radix-ui/react-dismissable-layer": "npm:1.1.0"
-    "@radix-ui/react-focus-guards": "npm:1.1.0"
-    "@radix-ui/react-focus-scope": "npm:1.1.0"
-    "@radix-ui/react-id": "npm:1.1.0"
-    "@radix-ui/react-popper": "npm:1.2.0"
-    "@radix-ui/react-portal": "npm:1.1.1"
-    "@radix-ui/react-presence": "npm:1.1.0"
-    "@radix-ui/react-primitive": "npm:2.0.0"
-    "@radix-ui/react-slot": "npm:1.1.0"
-    "@radix-ui/react-use-controllable-state": "npm:1.1.0"
-    aria-hidden: "npm:^1.1.1"
-    react-remove-scroll: "npm:2.5.7"
-  peerDependencies:
-    "@types/react": "*"
-    "@types/react-dom": "*"
-    react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-    react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-  peerDependenciesMeta:
-    "@types/react":
-      optional: true
-    "@types/react-dom":
-      optional: true
-  checksum: 10/977173c0c6cb0d806c1a94197c7f92447004ade8c0aba5f238acb53ccaf0d330af54f8dbd3b334b497847df28c1ef0215b1103ae6bfccba10bbaf21f4ac59fac
-  languageName: node
-  linkType: hard
-
 "@radix-ui/react-popper@npm:1.1.2":
   version: 1.1.2
   resolution: "@radix-ui/react-popper@npm:1.1.2"
@@ -4728,26 +4558,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@radix-ui/react-portal@npm:1.1.1":
-  version: 1.1.1
-  resolution: "@radix-ui/react-portal@npm:1.1.1"
-  dependencies:
-    "@radix-ui/react-primitive": "npm:2.0.0"
-    "@radix-ui/react-use-layout-effect": "npm:1.1.0"
-  peerDependencies:
-    "@types/react": "*"
-    "@types/react-dom": "*"
-    react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-    react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-  peerDependenciesMeta:
-    "@types/react":
-      optional: true
-    "@types/react-dom":
-      optional: true
-  checksum: 10/84dab64ce9c9f4ed7d75df6d1d82877dc7976a98cc192287d39ba2ea512415ed7bf34caf02d579a18fe21766403fa9ae41d2482a14dee5514179ee1b09cc333c
-  languageName: node
-  linkType: hard
-
 "@radix-ui/react-portal@npm:1.1.2":
   version: 1.1.2
   resolution: "@radix-ui/react-portal@npm:1.1.2"
@@ -4847,33 +4657,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@radix-ui/react-roving-focus@npm:1.1.0":
-  version: 1.1.0
-  resolution: "@radix-ui/react-roving-focus@npm:1.1.0"
-  dependencies:
-    "@radix-ui/primitive": "npm:1.1.0"
-    "@radix-ui/react-collection": "npm:1.1.0"
-    "@radix-ui/react-compose-refs": "npm:1.1.0"
-    "@radix-ui/react-context": "npm:1.1.0"
-    "@radix-ui/react-direction": "npm:1.1.0"
-    "@radix-ui/react-id": "npm:1.1.0"
-    "@radix-ui/react-primitive": "npm:2.0.0"
-    "@radix-ui/react-use-callback-ref": "npm:1.1.0"
-    "@radix-ui/react-use-controllable-state": "npm:1.1.0"
-  peerDependencies:
-    "@types/react": "*"
-    "@types/react-dom": "*"
-    react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-    react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-  peerDependenciesMeta:
-    "@types/react":
-      optional: true
-    "@types/react-dom":
-      optional: true
-  checksum: 10/f7c3d9b6d9dc1036d56b6005c58a948ee20f07ba21a00063dc1c1a790918feae13f16f9383dea3a1ccc3698ac552b8382c6885844580f0eeb11108a6d4824ea7
-  languageName: node
-  linkType: hard
-
 "@radix-ui/react-select@npm:^1.2.2":
   version: 1.2.2
   resolution: "@radix-ui/react-select@npm:1.2.2"
@@ -4945,82 +4728,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@radix-ui/react-toggle-group@npm:1.1.0":
-  version: 1.1.0
-  resolution: "@radix-ui/react-toggle-group@npm:1.1.0"
-  dependencies:
-    "@radix-ui/primitive": "npm:1.1.0"
-    "@radix-ui/react-context": "npm:1.1.0"
-    "@radix-ui/react-direction": "npm:1.1.0"
-    "@radix-ui/react-primitive": "npm:2.0.0"
-    "@radix-ui/react-roving-focus": "npm:1.1.0"
-    "@radix-ui/react-toggle": "npm:1.1.0"
-    "@radix-ui/react-use-controllable-state": "npm:1.1.0"
-  peerDependencies:
-    "@types/react": "*"
-    "@types/react-dom": "*"
-    react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-    react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-  peerDependenciesMeta:
-    "@types/react":
-      optional: true
-    "@types/react-dom":
-      optional: true
-  checksum: 10/0d9102e2e30f097b6d07e47280b5368d9502521f8aa43de9091abedafd828e1f8845f94c15c1c4eecbe9862e3d91bae58b7a1c3924f1abd5e98b623e2b46dc8d
-  languageName: node
-  linkType: hard
-
-"@radix-ui/react-toggle@npm:1.1.0":
-  version: 1.1.0
-  resolution: "@radix-ui/react-toggle@npm:1.1.0"
-  dependencies:
-    "@radix-ui/primitive": "npm:1.1.0"
-    "@radix-ui/react-primitive": "npm:2.0.0"
-    "@radix-ui/react-use-controllable-state": "npm:1.1.0"
-  peerDependencies:
-    "@types/react": "*"
-    "@types/react-dom": "*"
-    react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-    react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-  peerDependenciesMeta:
-    "@types/react":
-      optional: true
-    "@types/react-dom":
-      optional: true
-  checksum: 10/556818c9d57c024cca0533c859464ee101b69c527d2f2791fa97175fdabea4320eb0078e84bb73f2c5d5794a8a0069666bbdcfe07067fe02ebe4950917ca8e3a
-  languageName: node
-  linkType: hard
-
-"@radix-ui/react-tooltip@npm:1.1.1":
-  version: 1.1.1
-  resolution: "@radix-ui/react-tooltip@npm:1.1.1"
-  dependencies:
-    "@radix-ui/primitive": "npm:1.1.0"
-    "@radix-ui/react-compose-refs": "npm:1.1.0"
-    "@radix-ui/react-context": "npm:1.1.0"
-    "@radix-ui/react-dismissable-layer": "npm:1.1.0"
-    "@radix-ui/react-id": "npm:1.1.0"
-    "@radix-ui/react-popper": "npm:1.2.0"
-    "@radix-ui/react-portal": "npm:1.1.1"
-    "@radix-ui/react-presence": "npm:1.1.0"
-    "@radix-ui/react-primitive": "npm:2.0.0"
-    "@radix-ui/react-slot": "npm:1.1.0"
-    "@radix-ui/react-use-controllable-state": "npm:1.1.0"
-    "@radix-ui/react-visually-hidden": "npm:1.1.0"
-  peerDependencies:
-    "@types/react": "*"
-    "@types/react-dom": "*"
-    react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-    react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-  peerDependenciesMeta:
-    "@types/react":
-      optional: true
-    "@types/react-dom":
-      optional: true
-  checksum: 10/9108c63fdb0c6e6b66bcea5ddb2ed6c73e3b8374f5e083e8199448b86bb9cef075d28ac3b0da6dbfc5beff0e19cd1c646f1a776197170e82c601eba2b574ef91
-  languageName: node
-  linkType: hard
-
 "@radix-ui/react-tooltip@npm:1.1.3":
   version: 1.1.3
   resolution: "@radix-ui/react-tooltip@npm:1.1.3"
@@ -5319,14 +5026,14 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@react-email/code-block@npm:0.0.9":
-  version: 0.0.9
-  resolution: "@react-email/code-block@npm:0.0.9"
+"@react-email/code-block@npm:0.0.10":
+  version: 0.0.10
+  resolution: "@react-email/code-block@npm:0.0.10"
   dependencies:
     prismjs: "npm:1.29.0"
   peerDependencies:
     react: ^18.0 || ^19.0 || ^19.0.0-rc
-  checksum: 10/77a8b89119b6f88d423d931b2d3ac3faefbbc25290c53219db45021f12691d4deda675929cf5ba4acc7eb8740e11408b048ce3f5c86fe715f551e9a70c1e4998
+  checksum: 10/6bb85b201392a3da06ad1db5ba360e28232dcb014680d4817d8e240409da25f8d0252541c73de7f128963d785e69f0de6f8571e31f7f42a567fb3f25943b4a96
   languageName: node
   linkType: hard
 
@@ -5348,13 +5055,13 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@react-email/components@npm:0.0.26":
-  version: 0.0.26
-  resolution: "@react-email/components@npm:0.0.26"
+"@react-email/components@npm:0.0.28":
+  version: 0.0.28
+  resolution: "@react-email/components@npm:0.0.28"
   dependencies:
     "@react-email/body": "npm:0.0.10"
     "@react-email/button": "npm:0.0.18"
-    "@react-email/code-block": "npm:0.0.9"
+    "@react-email/code-block": "npm:0.0.10"
     "@react-email/code-inline": "npm:0.0.4"
     "@react-email/column": "npm:0.0.12"
     "@react-email/container": "npm:0.0.14"
@@ -5370,11 +5077,11 @@ __metadata:
     "@react-email/render": "npm:1.0.2"
     "@react-email/row": "npm:0.0.11"
     "@react-email/section": "npm:0.0.15"
-    "@react-email/tailwind": "npm:1.0.0"
+    "@react-email/tailwind": "npm:1.0.2"
     "@react-email/text": "npm:0.0.10"
   peerDependencies:
     react: ^18.0 || ^19.0 || ^19.0.0-rc
-  checksum: 10/202d29ad4e4f016e8b51ea089e7642d7bfd30ea7c87f434b7bda4ed555f1d1280787da77d2880205a0c71d1667fb38a5e94250cc82d2e30400f1637c5aa2cc1b
+  checksum: 10/384f5b37d68cd59567810b4b46efdc18c4e709bd2224d257dfa71e33c92174e2c3f469da66436a3d26606a77bf2405cb12682d2ab9b8db939e6da12ce70104d0
   languageName: node
   linkType: hard
 
@@ -5502,12 +5209,12 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@react-email/tailwind@npm:1.0.0":
-  version: 1.0.0
-  resolution: "@react-email/tailwind@npm:1.0.0"
+"@react-email/tailwind@npm:1.0.2":
+  version: 1.0.2
+  resolution: "@react-email/tailwind@npm:1.0.2"
   peerDependencies:
     react: ^18.0 || ^19.0 || ^19.0.0-rc
-  checksum: 10/4a6fcee22cbe380af42ae3bb8ac91415d4e385d047423eae38abc74ba0597c81edc3c52caf5a036b5bbcd12814e1158460104ccb19c95b7e04c25762f3d3e7b0
+  checksum: 10/200b6cec6754bf51f41374387f30476f0321e04413c3a8003f1c1476f7ceb9b2b7d1c5217b753cb4e04523953a579ae5d27e5d00182ecf34cf03ac629c13e2f3
   languageName: node
   linkType: hard
 
@@ -5576,9 +5283,9 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@remix-run/dev@npm:2.13.1":
-  version: 2.13.1
-  resolution: "@remix-run/dev@npm:2.13.1"
+"@remix-run/dev@npm:2.14.0":
+  version: 2.14.0
+  resolution: "@remix-run/dev@npm:2.14.0"
   dependencies:
     "@babel/core": "npm:^7.21.8"
     "@babel/generator": "npm:^7.21.5"
@@ -5590,9 +5297,9 @@ __metadata:
     "@babel/types": "npm:^7.22.5"
     "@mdx-js/mdx": "npm:^2.3.0"
     "@npmcli/package-json": "npm:^4.0.1"
-    "@remix-run/node": "npm:2.13.1"
-    "@remix-run/router": "npm:1.20.0"
-    "@remix-run/server-runtime": "npm:2.13.1"
+    "@remix-run/node": "npm:2.14.0"
+    "@remix-run/router": "npm:1.21.0"
+    "@remix-run/server-runtime": "npm:2.14.0"
     "@types/mdx": "npm:^2.0.5"
     "@vanilla-extract/integration": "npm:^6.2.0"
     arg: "npm:^5.0.1"
@@ -5632,10 +5339,12 @@ __metadata:
     set-cookie-parser: "npm:^2.6.0"
     tar-fs: "npm:^2.1.1"
     tsconfig-paths: "npm:^4.0.0"
+    valibot: "npm:^0.41.0"
+    vite-node: "npm:^1.6.0"
     ws: "npm:^7.5.10"
   peerDependencies:
-    "@remix-run/react": ^2.13.1
-    "@remix-run/serve": ^2.13.1
+    "@remix-run/react": ^2.14.0
+    "@remix-run/serve": ^2.14.0
     typescript: ^5.1.0
     vite: ^5.1.0
     wrangler: ^3.28.2
@@ -5650,30 +5359,30 @@ __metadata:
       optional: true
   bin:
     remix: dist/cli.js
-  checksum: 10/73f3420fa753ca5baacec70f14f0dad4465415e918a5d3d7925d0a01bf8fcb87212add61ec7528eea6fc9eb4e62d7e992d7b4d5dfc4887fae8ef1850ead5eb15
+  checksum: 10/a5d35a2cc3a262506f4704d53ce42c968788b87e04f0af24e463679ee29bf743e7ef98f15701b758c486ef557265469463e48db2a2f7738cb0df2ef1440feb0d
   languageName: node
   linkType: hard
 
-"@remix-run/express@npm:2.13.1":
-  version: 2.13.1
-  resolution: "@remix-run/express@npm:2.13.1"
+"@remix-run/express@npm:2.14.0":
+  version: 2.14.0
+  resolution: "@remix-run/express@npm:2.14.0"
   dependencies:
-    "@remix-run/node": "npm:2.13.1"
+    "@remix-run/node": "npm:2.14.0"
   peerDependencies:
     express: ^4.20.0
     typescript: ^5.1.0
   peerDependenciesMeta:
     typescript:
       optional: true
-  checksum: 10/3f7f1e193ac52183ef6183eabbac76f9a6e5659f1ee70bb8cf284ffe1c1dd6409bd9deee71f6bbda136b407a5a34ec08de0fe0a286c368fa6aba3049de559b06
+  checksum: 10/592afc00f395dca20fa7e78ecc66628586a69631c50d4ad4f7257c84739afa5740f7d3d514a619c904a6e19d038dbfd1e31572d1346ac45750d819542b49fc2f
   languageName: node
   linkType: hard
 
-"@remix-run/node@npm:2.13.1":
-  version: 2.13.1
-  resolution: "@remix-run/node@npm:2.13.1"
+"@remix-run/node@npm:2.14.0":
+  version: 2.14.0
+  resolution: "@remix-run/node@npm:2.14.0"
   dependencies:
-    "@remix-run/server-runtime": "npm:2.13.1"
+    "@remix-run/server-runtime": "npm:2.14.0"
     "@remix-run/web-fetch": "npm:^4.4.2"
     "@web3-storage/multipart-parser": "npm:^1.0.0"
     cookie-signature: "npm:^1.1.0"
@@ -5685,18 +5394,18 @@ __metadata:
   peerDependenciesMeta:
     typescript:
       optional: true
-  checksum: 10/f1abec9a776cb71f22e358e54db582e16feb0470b93a4b9dae27f0ae85821f4c7d4e9268c1bb881b0deec078498408a93b3c56e27fe3a26f095ec59f229bf5b8
+  checksum: 10/8240202b7ea200f50d5803004a9bbf1ea22fc5b2d8df955c04c51d29065221dded1813493f7f78feed6f000d84fdcc6c7a033e2f7d4059a995aaac9d04c7f744
   languageName: node
   linkType: hard
 
-"@remix-run/react@npm:2.13.1":
-  version: 2.13.1
-  resolution: "@remix-run/react@npm:2.13.1"
+"@remix-run/react@npm:2.14.0":
+  version: 2.14.0
+  resolution: "@remix-run/react@npm:2.14.0"
   dependencies:
-    "@remix-run/router": "npm:1.20.0"
-    "@remix-run/server-runtime": "npm:2.13.1"
-    react-router: "npm:6.27.0"
-    react-router-dom: "npm:6.27.0"
+    "@remix-run/router": "npm:1.21.0"
+    "@remix-run/server-runtime": "npm:2.14.0"
+    react-router: "npm:6.28.0"
+    react-router-dom: "npm:6.28.0"
     turbo-stream: "npm:2.4.0"
   peerDependencies:
     react: ^18.0.0
@@ -5705,7 +5414,7 @@ __metadata:
   peerDependenciesMeta:
     typescript:
       optional: true
-  checksum: 10/74d7463940114d5a7f1aa30250680b46ab0a1e55c9b3ec8e1281e6e73309873bf5a8479932fdc9b592383556e052ff2c1b8e6b45f4197e50dd87c77689e49c07
+  checksum: 10/c9ab3dd5e480d17bc466d886cb2caaccd7afbb75df5f4a05b5acb453035f0e00ce456e3ae70b4834aa171dc4f9fed2c696caa02d6de0c655834c7244e1d56aa3
   languageName: node
   linkType: hard
 
@@ -5716,19 +5425,19 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@remix-run/router@npm:1.20.0":
-  version: 1.20.0
-  resolution: "@remix-run/router@npm:1.20.0"
-  checksum: 10/e1d2420db94a1855b97f1784898d0ae389cf3b77129b8f419e51d4833b77ca2c92ac09e2cb558015324d64580a138fd6faa31e52fcc3ba90e3cc382a1a324d4a
+"@remix-run/router@npm:1.21.0":
+  version: 1.21.0
+  resolution: "@remix-run/router@npm:1.21.0"
+  checksum: 10/cf0fb69d19c1b79095ff67c59cea89086f3982a9a54c8a993818a60fc76e0ebab5a8db647c1a96a662729fad8e806ddd0a96622adf473f5a9f0b99998b2dbad4
   languageName: node
   linkType: hard
 
-"@remix-run/serve@npm:2.13.1":
-  version: 2.13.1
-  resolution: "@remix-run/serve@npm:2.13.1"
+"@remix-run/serve@npm:2.14.0":
+  version: 2.14.0
+  resolution: "@remix-run/serve@npm:2.14.0"
   dependencies:
-    "@remix-run/express": "npm:2.13.1"
-    "@remix-run/node": "npm:2.13.1"
+    "@remix-run/express": "npm:2.14.0"
+    "@remix-run/node": "npm:2.14.0"
     chokidar: "npm:^3.5.3"
     compression: "npm:^1.7.4"
     express: "npm:^4.20.0"
@@ -5737,15 +5446,15 @@ __metadata:
     source-map-support: "npm:^0.5.21"
   bin:
     remix-serve: dist/cli.js
-  checksum: 10/2b60e456073f35a398273f48c16da9764221e31d6430c69081f85f7d0c615ad96a3a0938f544512ad7f17399ec73d379a2d614c82cf571011dc2115c81f23dd6
+  checksum: 10/a3361e9c9741e40d817a716a299fae1adc3e06dafd35aa42a5f6a11d6e8e7728ab1e2a30c1f5975c779aa7ad3453d1536742fd570e196013e610d8249c9fef15
   languageName: node
   linkType: hard
 
-"@remix-run/server-runtime@npm:2.13.1":
-  version: 2.13.1
-  resolution: "@remix-run/server-runtime@npm:2.13.1"
+"@remix-run/server-runtime@npm:2.14.0":
+  version: 2.14.0
+  resolution: "@remix-run/server-runtime@npm:2.14.0"
   dependencies:
-    "@remix-run/router": "npm:1.20.0"
+    "@remix-run/router": "npm:1.21.0"
     "@types/cookie": "npm:^0.6.0"
     "@web3-storage/multipart-parser": "npm:^1.0.0"
     cookie: "npm:^0.6.0"
@@ -5757,7 +5466,7 @@ __metadata:
   peerDependenciesMeta:
     typescript:
       optional: true
-  checksum: 10/f38fb874e0aae963f4106435d26f57142be060e33ec5d023c45909eb7885fb17dec30d8305ab3d7da057f4a7c67c084a0244f88f0b36d7c5d8afecf2ef389dd1
+  checksum: 10/1de38b7303c7ad33f2ca48b1f1390a1a0a9f4d9d7b7276ca60242970f54e7db366eb9af7a0ce96fba9a6d54a207a62a32b3812a76e21db433ae0249ef723412f
   languageName: node
   linkType: hard
 
@@ -6016,26 +5725,26 @@ __metadata:
     "@formkit/auto-animate": "npm:0.8.2"
     "@hello-pangea/dnd": "npm:17.0.0"
     "@lukemorales/query-key-factory": "npm:1.3.4"
-    "@mantine/carousel": "npm:7.13.4"
-    "@mantine/charts": "npm:7.13.4"
-    "@mantine/core": "npm:7.13.4"
-    "@mantine/dates": "npm:7.13.4"
-    "@mantine/form": "npm:7.13.4"
-    "@mantine/hooks": "npm:7.13.4"
-    "@mantine/notifications": "npm:7.13.4"
+    "@mantine/carousel": "npm:7.13.5"
+    "@mantine/charts": "npm:7.13.5"
+    "@mantine/core": "npm:7.13.5"
+    "@mantine/dates": "npm:7.13.5"
+    "@mantine/form": "npm:7.13.5"
+    "@mantine/hooks": "npm:7.13.5"
+    "@mantine/notifications": "npm:7.13.5"
     "@remix-pwa/dev": "npm:3.1.0"
     "@remix-pwa/sw": "npm:3.0.10"
     "@remix-pwa/worker-runtime": "npm:2.1.4"
-    "@remix-run/dev": "npm:2.13.1"
-    "@remix-run/node": "npm:2.13.1"
-    "@remix-run/react": "npm:2.13.1"
-    "@remix-run/serve": "npm:2.13.1"
+    "@remix-run/dev": "npm:2.14.0"
+    "@remix-run/node": "npm:2.14.0"
+    "@remix-run/react": "npm:2.14.0"
+    "@remix-run/serve": "npm:2.14.0"
     "@ryot/generated": "workspace:*"
     "@ryot/graphql": "workspace:*"
     "@ryot/ts-utils": "workspace:*"
     "@tabler/icons-react": "npm:3.17.0"
-    "@tanstack/react-query": "npm:5.59.16"
-    "@tanstack/react-query-devtools": "npm:5.59.16"
+    "@tanstack/react-query": "npm:5.59.20"
+    "@tanstack/react-query-devtools": "npm:5.59.20"
     "@types/cookie": "npm:1.0.0"
     "@types/crypto-js": "npm:4.2.2"
     "@types/howler": "npm:2.2.12"
@@ -6052,7 +5761,7 @@ __metadata:
     embla-carousel-react: "npm:7.1.0"
     filesize: "npm:10.1.6"
     graphql: "npm:16.9.0"
-    graphql-request: "npm:7.1.0"
+    graphql-request: "npm:7.1.2"
     howler: "npm:2.2.4"
     humanize-duration-ts: "npm:2.1.1"
     immer: "npm:10.1.1"
@@ -6071,7 +5780,7 @@ __metadata:
     react-virtuoso: "npm:4.12.0"
     react-webcam: "npm:7.2.0"
     recharts: "npm:2.13.3"
-    remix-development-tools: "npm:4.7.5"
+    remix-development-tools: "npm:4.7.6"
     remix-routes: "npm:1.7.7"
     remix-utils: "npm:7.7.0"
     tailwind-merge: "npm:2.5.4"
@@ -6085,7 +5794,7 @@ __metadata:
     usehooks-ts: "npm:3.1.0"
     uuid: "npm:11.0.2"
     vite: "npm:5.4.10"
-    vite-tsconfig-paths: "npm:5.0.1"
+    vite-tsconfig-paths: "npm:5.1.1"
     zod: "npm:3.23.8"
     zodix: "npm:0.4.4"
   languageName: unknown
@@ -6107,7 +5816,7 @@ __metadata:
   resolution: "@ryot/graphql@workspace:libs/graphql"
   dependencies:
     "@ryot/generated": "workspace:*"
-    graphql-request: "npm:7.1.0"
+    graphql-request: "npm:7.1.2"
   languageName: unknown
   linkType: soft
 
@@ -6125,13 +5834,13 @@ __metadata:
   version: 0.0.0-use.local
   resolution: "@ryot/transactional@workspace:libs/transactional"
   dependencies:
-    "@react-email/components": "npm:0.0.26"
+    "@react-email/components": "npm:0.0.28"
     "@ryot/ts-utils": "workspace:*"
     "@types/react": "npm:18.3.12"
     "@types/react-dom": "npm:18.3.1"
     react: "npm:18.3.1"
     react-dom: "npm:18.3.1"
-    react-email: "npm:2.1.6"
+    react-email: "npm:3.0.2"
   languageName: unknown
   linkType: soft
 
@@ -6148,6 +5857,7 @@ __metadata:
     lodash: "npm:4.17.21"
     tailwind-merge: "npm:2.5.4"
     tiny-invariant: "npm:1.3.3"
+    zod: "npm:3.23.8"
   languageName: unknown
   linkType: soft
 
@@ -6157,16 +5867,16 @@ __metadata:
   dependencies:
     "@conform-to/zod": "npm:1.2.2"
     "@isaacs/ttlcache": "npm:1.4.1"
-    "@paddle/paddle-js": "npm:1.3.1"
+    "@paddle/paddle-js": "npm:1.3.2"
     "@paddle/paddle-node-sdk": "npm:1.9.1"
     "@radix-ui/react-label": "npm:2.1.0"
     "@radix-ui/react-slot": "npm:1.1.0"
     "@radix-ui/react-tooltip": "npm:1.1.3"
-    "@react-email/components": "npm:0.0.26"
-    "@remix-run/dev": "npm:2.13.1"
-    "@remix-run/node": "npm:2.13.1"
-    "@remix-run/react": "npm:2.13.1"
-    "@remix-run/serve": "npm:2.13.1"
+    "@react-email/components": "npm:0.0.28"
+    "@remix-run/dev": "npm:2.14.0"
+    "@remix-run/node": "npm:2.14.0"
+    "@remix-run/react": "npm:2.14.0"
+    "@remix-run/serve": "npm:2.14.0"
     "@ryot/generated": "workspace:*"
     "@ryot/graphql": "workspace:*"
     "@ryot/transactional": "workspace:*"
@@ -6184,19 +5894,19 @@ __metadata:
     clsx: "npm:2.1.1"
     crypto-js: "npm:4.2.0"
     dayjs: "npm:1.11.13"
-    drizzle-kit: "npm:0.26.2"
-    drizzle-orm: "npm:0.35.3"
+    drizzle-kit: "npm:0.28.0"
+    drizzle-orm: "npm:0.36.1"
     embla-carousel-autoplay: "npm:8.3.1"
     embla-carousel-react: "npm:8.3.1"
     graphql: "npm:16.9.0"
-    graphql-request: "npm:7.1.0"
+    graphql-request: "npm:7.1.2"
     humanize-duration-ts: "npm:2.1.1"
-    input-otp: "npm:1.4.0"
+    input-otp: "npm:1.4.1"
     isbot: "npm:5.1.17"
     lodash: "npm:4.17.21"
-    lucide-react: "npm:0.454.0"
+    lucide-react: "npm:0.456.0"
     nanoid: "npm:5.0.8"
-    next-themes: "npm:0.3.0"
+    next-themes: "npm:0.4.3"
     nodemailer: "npm:6.9.16"
     openid-client: "npm:5.7.0"
     postcss: "npm:8.4.47"
@@ -6205,7 +5915,7 @@ __metadata:
     react-dom: "npm:18.3.1"
     remix-routes: "npm:1.7.7"
     remix-utils: "npm:7.7.0"
-    sonner: "npm:1.5.0"
+    sonner: "npm:1.7.0"
     tailwind-merge: "npm:2.5.4"
     tailwindcss: "npm:3.4.14"
     tailwindcss-animate: "npm:1.0.7"
@@ -6215,7 +5925,7 @@ __metadata:
     typescript-remix-routes-plugin: "npm:1.0.1"
     ufo: "npm:1.5.4"
     vite: "npm:5.4.10"
-    vite-tsconfig-paths: "npm:5.0.1"
+    vite-tsconfig-paths: "npm:5.1.1"
     zod: "npm:3.23.8"
     zodix: "npm:0.4.4"
   languageName: unknown
@@ -6238,144 +5948,20 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@swc/core-darwin-arm64@npm:1.3.101":
-  version: 1.3.101
-  resolution: "@swc/core-darwin-arm64@npm:1.3.101"
-  conditions: os=darwin & cpu=arm64
+"@swc/counter@npm:^0.1.3":
+  version: 0.1.3
+  resolution: "@swc/counter@npm:0.1.3"
+  checksum: 10/df8f9cfba9904d3d60f511664c70d23bb323b3a0803ec9890f60133954173047ba9bdeabce28cd70ba89ccd3fd6c71c7b0bd58be85f611e1ffbe5d5c18616598
   languageName: node
   linkType: hard
 
-"@swc/core-darwin-x64@npm:1.3.101":
-  version: 1.3.101
-  resolution: "@swc/core-darwin-x64@npm:1.3.101"
-  conditions: os=darwin & cpu=x64
-  languageName: node
-  linkType: hard
-
-"@swc/core-linux-arm-gnueabihf@npm:1.3.101":
-  version: 1.3.101
-  resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.101"
-  conditions: os=linux & cpu=arm
-  languageName: node
-  linkType: hard
-
-"@swc/core-linux-arm64-gnu@npm:1.3.101":
-  version: 1.3.101
-  resolution: "@swc/core-linux-arm64-gnu@npm:1.3.101"
-  conditions: os=linux & cpu=arm64 & libc=glibc
-  languageName: node
-  linkType: hard
-
-"@swc/core-linux-arm64-musl@npm:1.3.101":
-  version: 1.3.101
-  resolution: "@swc/core-linux-arm64-musl@npm:1.3.101"
-  conditions: os=linux & cpu=arm64 & libc=musl
-  languageName: node
-  linkType: hard
-
-"@swc/core-linux-x64-gnu@npm:1.3.101":
-  version: 1.3.101
-  resolution: "@swc/core-linux-x64-gnu@npm:1.3.101"
-  conditions: os=linux & cpu=x64 & libc=glibc
-  languageName: node
-  linkType: hard
-
-"@swc/core-linux-x64-musl@npm:1.3.101":
-  version: 1.3.101
-  resolution: "@swc/core-linux-x64-musl@npm:1.3.101"
-  conditions: os=linux & cpu=x64 & libc=musl
-  languageName: node
-  linkType: hard
-
-"@swc/core-win32-arm64-msvc@npm:1.3.101":
-  version: 1.3.101
-  resolution: "@swc/core-win32-arm64-msvc@npm:1.3.101"
-  conditions: os=win32 & cpu=arm64
-  languageName: node
-  linkType: hard
-
-"@swc/core-win32-ia32-msvc@npm:1.3.101":
-  version: 1.3.101
-  resolution: "@swc/core-win32-ia32-msvc@npm:1.3.101"
-  conditions: os=win32 & cpu=ia32
-  languageName: node
-  linkType: hard
-
-"@swc/core-win32-x64-msvc@npm:1.3.101":
-  version: 1.3.101
-  resolution: "@swc/core-win32-x64-msvc@npm:1.3.101"
-  conditions: os=win32 & cpu=x64
-  languageName: node
-  linkType: hard
-
-"@swc/core@npm:1.3.101":
-  version: 1.3.101
-  resolution: "@swc/core@npm:1.3.101"
-  dependencies:
-    "@swc/core-darwin-arm64": "npm:1.3.101"
-    "@swc/core-darwin-x64": "npm:1.3.101"
-    "@swc/core-linux-arm-gnueabihf": "npm:1.3.101"
-    "@swc/core-linux-arm64-gnu": "npm:1.3.101"
-    "@swc/core-linux-arm64-musl": "npm:1.3.101"
-    "@swc/core-linux-x64-gnu": "npm:1.3.101"
-    "@swc/core-linux-x64-musl": "npm:1.3.101"
-    "@swc/core-win32-arm64-msvc": "npm:1.3.101"
-    "@swc/core-win32-ia32-msvc": "npm:1.3.101"
-    "@swc/core-win32-x64-msvc": "npm:1.3.101"
-    "@swc/counter": "npm:^0.1.1"
-    "@swc/types": "npm:^0.1.5"
-  peerDependencies:
-    "@swc/helpers": ^0.5.0
-  dependenciesMeta:
-    "@swc/core-darwin-arm64":
-      optional: true
-    "@swc/core-darwin-x64":
-      optional: true
-    "@swc/core-linux-arm-gnueabihf":
-      optional: true
-    "@swc/core-linux-arm64-gnu":
-      optional: true
-    "@swc/core-linux-arm64-musl":
-      optional: true
-    "@swc/core-linux-x64-gnu":
-      optional: true
-    "@swc/core-linux-x64-musl":
-      optional: true
-    "@swc/core-win32-arm64-msvc":
-      optional: true
-    "@swc/core-win32-ia32-msvc":
-      optional: true
-    "@swc/core-win32-x64-msvc":
-      optional: true
-  peerDependenciesMeta:
-    "@swc/helpers":
-      optional: true
-  checksum: 10/38a49876c80a9d337823c2abeaf9c2dd89f45a3c72043c9dfffb4bc0da49958643945d7755446f97eed90dbf1e0b141786acdb2419340f1b5ae99eaa53fac4bc
-  languageName: node
-  linkType: hard
-
-"@swc/counter@npm:^0.1.1, @swc/counter@npm:^0.1.3":
-  version: 0.1.3
-  resolution: "@swc/counter@npm:0.1.3"
-  checksum: 10/df8f9cfba9904d3d60f511664c70d23bb323b3a0803ec9890f60133954173047ba9bdeabce28cd70ba89ccd3fd6c71c7b0bd58be85f611e1ffbe5d5c18616598
-  languageName: node
-  linkType: hard
-
-"@swc/helpers@npm:0.5.2":
-  version: 0.5.2
-  resolution: "@swc/helpers@npm:0.5.2"
-  dependencies:
-    tslib: "npm:^2.4.0"
-  checksum: 10/3a3b179b3369acd26c5da89a0e779c756ae5231eb18a5507524c7abf955f488d34d86649f5b8417a0e19879688470d06319f5cfca2273d6d6b2046950e0d79af
-  languageName: node
-  linkType: hard
-
-"@swc/types@npm:^0.1.5":
-  version: 0.1.13
-  resolution: "@swc/types@npm:0.1.13"
+"@swc/helpers@npm:0.5.5":
+  version: 0.5.5
+  resolution: "@swc/helpers@npm:0.5.5"
   dependencies:
     "@swc/counter": "npm:^0.1.3"
-  checksum: 10/d0a50432917048cc69e30c82d1266e052a8e8d05ab202c5d74a5666be3748da4d2f99aaff46d91c0e3d285cf8f55270f8391cd578066fdecc3865733f8d5e14a
+    tslib: "npm:^2.4.0"
+  checksum: 10/1c5ef04f642542212df28c669438f3e0f459dcde7b448a5b1fcafb2e9e4f13e76d8428535a270e91ed123dd2a21189dbed34086b88a8cf68baf84984d6d0e39b
   languageName: node
   linkType: hard
 
@@ -6411,40 +5997,40 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@tanstack/query-core@npm:5.59.16":
-  version: 5.59.16
-  resolution: "@tanstack/query-core@npm:5.59.16"
-  checksum: 10/c001282dfeb682b18f3eb8231f6b00d5b3304dd033ef0da5cd252d9a2cf42507d9879590e16bfe15549def3e8ef83033ee71cee259f60402fc8992581fb9cd5e
+"@tanstack/query-core@npm:5.59.20":
+  version: 5.59.20
+  resolution: "@tanstack/query-core@npm:5.59.20"
+  checksum: 10/efe34f0a05f4cdef833c3885f466bab8ecee22677a9056d161087658539c1dd14063cc19c08b8f2e56cafc4692fcde7fb4fc4962df59159b1da12c49e69892df
   languageName: node
   linkType: hard
 
-"@tanstack/query-devtools@npm:5.58.0":
-  version: 5.58.0
-  resolution: "@tanstack/query-devtools@npm:5.58.0"
-  checksum: 10/ca16c47c943ea392dfddc301f7e09ecdb0c8b905fb684b8f26b908a244e2e897679efb0ead5fa8e728711017341fdd91d8c51ebb19f746819e26ade5549f539e
+"@tanstack/query-devtools@npm:5.59.20":
+  version: 5.59.20
+  resolution: "@tanstack/query-devtools@npm:5.59.20"
+  checksum: 10/0bb2995337d78910c7677f780af42cd4285b39d618cd7876e24ec16243783d4cfe9e4d067d210d5337aefaad0a21928c5e4cb30fb4c08a09521625fcfe9c14d4
   languageName: node
   linkType: hard
 
-"@tanstack/react-query-devtools@npm:5.59.16":
-  version: 5.59.16
-  resolution: "@tanstack/react-query-devtools@npm:5.59.16"
+"@tanstack/react-query-devtools@npm:5.59.20":
+  version: 5.59.20
+  resolution: "@tanstack/react-query-devtools@npm:5.59.20"
   dependencies:
-    "@tanstack/query-devtools": "npm:5.58.0"
+    "@tanstack/query-devtools": "npm:5.59.20"
   peerDependencies:
-    "@tanstack/react-query": ^5.59.16
+    "@tanstack/react-query": ^5.59.20
     react: ^18 || ^19
-  checksum: 10/a4f5ca91d2e91e8e6b092e819ced5fef46623f374211e692d32c38f2ab626aa89310d32d35edb4baa4eeb1d5fb2cb1706979ef5f47b11cc1e12418b25a795b7e
+  checksum: 10/71cf2fa81ce1d7a7e35acd9f45a4c398272f69e8ab962c5fcf686b8bf5144ca8e8702049bad452186963b4b820703c19ba9372149fd56ec95fef5390c5d7346c
   languageName: node
   linkType: hard
 
-"@tanstack/react-query@npm:5.59.16":
-  version: 5.59.16
-  resolution: "@tanstack/react-query@npm:5.59.16"
+"@tanstack/react-query@npm:5.59.20":
+  version: 5.59.20
+  resolution: "@tanstack/react-query@npm:5.59.20"
   dependencies:
-    "@tanstack/query-core": "npm:5.59.16"
+    "@tanstack/query-core": "npm:5.59.20"
   peerDependencies:
     react: ^18 || ^19
-  checksum: 10/7496d4c798268a204b5327d3e42591396da70202e8b1c7cb266fb4632c59053dbb5d759edee55a2eea838a6df6cf2bec8f3751e9033dd243bcca9d6da5bdc2c8
+  checksum: 10/4bfface953fedb124c5b30d46d22e46b18dc9c53a30ad20493c2ce70dc03058d78815c2a8a8a4f0bd279dae29469b923ccb346c69485f00c1808fa7ac908d6b4
   languageName: node
   linkType: hard
 
@@ -6611,13 +6197,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@types/estree@npm:^1.0.5":
-  version: 1.0.6
-  resolution: "@types/estree@npm:1.0.6"
-  checksum: 10/9d35d475095199c23e05b431bcdd1f6fec7380612aed068b14b2a08aa70494de8a9026765a5a91b1073f636fb0368f6d8973f518a31391d519e20c59388ed88d
-  languageName: node
-  linkType: hard
-
 "@types/hast@npm:^2.0.0":
   version: 2.3.8
   resolution: "@types/hast@npm:2.3.8"
@@ -6648,13 +6227,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@types/json-schema@npm:^7.0.8":
-  version: 7.0.15
-  resolution: "@types/json-schema@npm:7.0.15"
-  checksum: 10/1a3c3e06236e4c4aab89499c428d585527ce50c24fe8259e8b3926d3df4cfbbbcf306cfc73ddfb66cbafc973116efd15967020b0f738f63e09e64c7d260519e7
-  languageName: node
-  linkType: hard
-
 "@types/json-stable-stringify@npm:^1.0.32":
   version: 1.0.34
   resolution: "@types/json-stable-stringify@npm:1.0.34"
@@ -6756,13 +6328,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@types/prismjs@npm:^1.26.0":
-  version: 1.26.4
-  resolution: "@types/prismjs@npm:1.26.4"
-  checksum: 10/fcf7072c56835bfdc9bd9c06acd733440c5198b9fba33c5de09cd7bfe9e6663604120c5d602ffbeb806cdc06447fb711d84fc89c9039b8cc95078702a15e7ff1
-  languageName: node
-  linkType: hard
-
 "@types/prop-types@npm:*":
   version: 15.7.5
   resolution: "@types/prop-types@npm:15.7.5"
@@ -6770,7 +6335,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@types/react-dom@npm:18.3.1, @types/react-dom@npm:^18.2.0":
+"@types/react-dom@npm:18.3.1":
   version: 18.3.1
   resolution: "@types/react-dom@npm:18.3.1"
   dependencies:
@@ -6817,17 +6382,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@types/webpack@npm:5.28.5":
-  version: 5.28.5
-  resolution: "@types/webpack@npm:5.28.5"
-  dependencies:
-    "@types/node": "npm:*"
-    tapable: "npm:^2.2.0"
-    webpack: "npm:^5"
-  checksum: 10/14359d9ccecef7ef1ea271c00baec5337213c7fda63a34c61b9e519505b3928d0807cdbb5b1172d1994e1179920b89c57eaf2cbf64599958b67cd70720ac2a9b
-  languageName: node
-  linkType: hard
-
 "@types/ws@npm:^8.0.0":
   version: 8.5.4
   resolution: "@types/ws@npm:8.5.4"
@@ -6928,157 +6482,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@webassemblyjs/ast@npm:1.12.1, @webassemblyjs/ast@npm:^1.12.1":
-  version: 1.12.1
-  resolution: "@webassemblyjs/ast@npm:1.12.1"
-  dependencies:
-    "@webassemblyjs/helper-numbers": "npm:1.11.6"
-    "@webassemblyjs/helper-wasm-bytecode": "npm:1.11.6"
-  checksum: 10/a775b0559437ae122d14fec0cfe59fdcaf5ca2d8ff48254014fd05d6797e20401e0f1518e628f9b06819aa085834a2534234977f9608b3f2e51f94b6e8b0bc43
-  languageName: node
-  linkType: hard
-
-"@webassemblyjs/floating-point-hex-parser@npm:1.11.6":
-  version: 1.11.6
-  resolution: "@webassemblyjs/floating-point-hex-parser@npm:1.11.6"
-  checksum: 10/29b08758841fd8b299c7152eda36b9eb4921e9c584eb4594437b5cd90ed6b920523606eae7316175f89c20628da14326801090167cc7fbffc77af448ac84b7e2
-  languageName: node
-  linkType: hard
-
-"@webassemblyjs/helper-api-error@npm:1.11.6":
-  version: 1.11.6
-  resolution: "@webassemblyjs/helper-api-error@npm:1.11.6"
-  checksum: 10/e8563df85161096343008f9161adb138a6e8f3c2cc338d6a36011aa55eabb32f2fd138ffe63bc278d009ada001cc41d263dadd1c0be01be6c2ed99076103689f
-  languageName: node
-  linkType: hard
-
-"@webassemblyjs/helper-buffer@npm:1.12.1":
-  version: 1.12.1
-  resolution: "@webassemblyjs/helper-buffer@npm:1.12.1"
-  checksum: 10/1d8705daa41f4d22ef7c6d422af4c530b84d69d0c253c6db5adec44d511d7caa66837803db5b1addcea611a1498fd5a67d2cf318b057a916283ae41ffb85ba8a
-  languageName: node
-  linkType: hard
-
-"@webassemblyjs/helper-numbers@npm:1.11.6":
-  version: 1.11.6
-  resolution: "@webassemblyjs/helper-numbers@npm:1.11.6"
-  dependencies:
-    "@webassemblyjs/floating-point-hex-parser": "npm:1.11.6"
-    "@webassemblyjs/helper-api-error": "npm:1.11.6"
-    "@xtuc/long": "npm:4.2.2"
-  checksum: 10/9ffd258ad809402688a490fdef1fd02222f20cdfe191c895ac215a331343292164e5033dbc0347f0f76f2447865c0b5c2d2e3304ee948d44f7aa27857028fd08
-  languageName: node
-  linkType: hard
-
-"@webassemblyjs/helper-wasm-bytecode@npm:1.11.6":
-  version: 1.11.6
-  resolution: "@webassemblyjs/helper-wasm-bytecode@npm:1.11.6"
-  checksum: 10/4ebf03e9c1941288c10e94e0f813f413f972bfaa1f09be2cc2e5577f300430906b61aa24d52f5ef2f894e8e24e61c6f7c39871d7e3d98bc69460e1b8e00bb20b
-  languageName: node
-  linkType: hard
-
-"@webassemblyjs/helper-wasm-section@npm:1.12.1":
-  version: 1.12.1
-  resolution: "@webassemblyjs/helper-wasm-section@npm:1.12.1"
-  dependencies:
-    "@webassemblyjs/ast": "npm:1.12.1"
-    "@webassemblyjs/helper-buffer": "npm:1.12.1"
-    "@webassemblyjs/helper-wasm-bytecode": "npm:1.11.6"
-    "@webassemblyjs/wasm-gen": "npm:1.12.1"
-  checksum: 10/e91e6b28114e35321934070a2db8973a08a5cd9c30500b817214c683bbf5269ed4324366dd93ad83bf2fba0d671ac8f39df1c142bf58f70c57a827eeba4a3d2f
-  languageName: node
-  linkType: hard
-
-"@webassemblyjs/ieee754@npm:1.11.6":
-  version: 1.11.6
-  resolution: "@webassemblyjs/ieee754@npm:1.11.6"
-  dependencies:
-    "@xtuc/ieee754": "npm:^1.2.0"
-  checksum: 10/13574b8e41f6ca39b700e292d7edf102577db5650fe8add7066a320aa4b7a7c09a5056feccac7a74eb68c10dea9546d4461412af351f13f6b24b5f32379b49de
-  languageName: node
-  linkType: hard
-
-"@webassemblyjs/leb128@npm:1.11.6":
-  version: 1.11.6
-  resolution: "@webassemblyjs/leb128@npm:1.11.6"
-  dependencies:
-    "@xtuc/long": "npm:4.2.2"
-  checksum: 10/ec3b72db0e7ce7908fe08ec24395bfc97db486063824c0edc580f0973a4cfbadf30529569d9c7db663a56513e45b94299cca03be9e1992ea3308bb0744164f3d
-  languageName: node
-  linkType: hard
-
-"@webassemblyjs/utf8@npm:1.11.6":
-  version: 1.11.6
-  resolution: "@webassemblyjs/utf8@npm:1.11.6"
-  checksum: 10/361a537bd604101b320a5604c3c96d1038d83166f1b9fb86cedadc7e81bae54c3785ae5d90bf5b1842f7da08194ccaf0f44a64fcca0cbbd6afe1a166196986d6
-  languageName: node
-  linkType: hard
-
-"@webassemblyjs/wasm-edit@npm:^1.12.1":
-  version: 1.12.1
-  resolution: "@webassemblyjs/wasm-edit@npm:1.12.1"
-  dependencies:
-    "@webassemblyjs/ast": "npm:1.12.1"
-    "@webassemblyjs/helper-buffer": "npm:1.12.1"
-    "@webassemblyjs/helper-wasm-bytecode": "npm:1.11.6"
-    "@webassemblyjs/helper-wasm-section": "npm:1.12.1"
-    "@webassemblyjs/wasm-gen": "npm:1.12.1"
-    "@webassemblyjs/wasm-opt": "npm:1.12.1"
-    "@webassemblyjs/wasm-parser": "npm:1.12.1"
-    "@webassemblyjs/wast-printer": "npm:1.12.1"
-  checksum: 10/5678ae02dbebba2f3a344e25928ea5a26a0df777166c9be77a467bfde7aca7f4b57ef95587e4bd768a402cdf2fddc4c56f0a599d164cdd9fe313520e39e18137
-  languageName: node
-  linkType: hard
-
-"@webassemblyjs/wasm-gen@npm:1.12.1":
-  version: 1.12.1
-  resolution: "@webassemblyjs/wasm-gen@npm:1.12.1"
-  dependencies:
-    "@webassemblyjs/ast": "npm:1.12.1"
-    "@webassemblyjs/helper-wasm-bytecode": "npm:1.11.6"
-    "@webassemblyjs/ieee754": "npm:1.11.6"
-    "@webassemblyjs/leb128": "npm:1.11.6"
-    "@webassemblyjs/utf8": "npm:1.11.6"
-  checksum: 10/ec45bd50e86bc9856f80fe9af4bc1ae5c98fb85f57023d11dff2b670da240c47a7b1b9b6c89755890314212bd167cf3adae7f1157216ddffb739a4ce589fc338
-  languageName: node
-  linkType: hard
-
-"@webassemblyjs/wasm-opt@npm:1.12.1":
-  version: 1.12.1
-  resolution: "@webassemblyjs/wasm-opt@npm:1.12.1"
-  dependencies:
-    "@webassemblyjs/ast": "npm:1.12.1"
-    "@webassemblyjs/helper-buffer": "npm:1.12.1"
-    "@webassemblyjs/wasm-gen": "npm:1.12.1"
-    "@webassemblyjs/wasm-parser": "npm:1.12.1"
-  checksum: 10/21f25ae109012c49bb084e09f3b67679510429adc3e2408ad3621b2b505379d9cce337799a7919ef44db64e0d136833216914aea16b0d4856f353b9778e0cdb7
-  languageName: node
-  linkType: hard
-
-"@webassemblyjs/wasm-parser@npm:1.12.1, @webassemblyjs/wasm-parser@npm:^1.12.1":
-  version: 1.12.1
-  resolution: "@webassemblyjs/wasm-parser@npm:1.12.1"
-  dependencies:
-    "@webassemblyjs/ast": "npm:1.12.1"
-    "@webassemblyjs/helper-api-error": "npm:1.11.6"
-    "@webassemblyjs/helper-wasm-bytecode": "npm:1.11.6"
-    "@webassemblyjs/ieee754": "npm:1.11.6"
-    "@webassemblyjs/leb128": "npm:1.11.6"
-    "@webassemblyjs/utf8": "npm:1.11.6"
-  checksum: 10/f7311685b76c3e1def2abea3488be1e77f06ecd8633143a6c5c943ca289660952b73785231bb76a010055ca64645227a4bc79705c26ab7536216891b6bb36320
-  languageName: node
-  linkType: hard
-
-"@webassemblyjs/wast-printer@npm:1.12.1":
-  version: 1.12.1
-  resolution: "@webassemblyjs/wast-printer@npm:1.12.1"
-  dependencies:
-    "@webassemblyjs/ast": "npm:1.12.1"
-    "@xtuc/long": "npm:4.2.2"
-  checksum: 10/1a6a4b6bc4234f2b5adbab0cb11a24911b03380eb1cab6fb27a2250174a279fdc6aa2f5a9cf62dd1f6d4eb39f778f488e8ff15b9deb0670dee5c5077d46cf572
-  languageName: node
-  linkType: hard
-
 "@whatwg-node/events@npm:^0.1.0":
   version: 0.1.1
   resolution: "@whatwg-node/events@npm:0.1.1"
@@ -7131,20 +6534,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@xtuc/ieee754@npm:^1.2.0":
-  version: 1.2.0
-  resolution: "@xtuc/ieee754@npm:1.2.0"
-  checksum: 10/ab033b032927d77e2f9fa67accdf31b1ca7440974c21c9cfabc8349e10ca2817646171c4f23be98d0e31896d6c2c3462a074fe37752e523abc3e45c79254259c
-  languageName: node
-  linkType: hard
-
-"@xtuc/long@npm:4.2.2":
-  version: 4.2.2
-  resolution: "@xtuc/long@npm:4.2.2"
-  checksum: 10/7217bae9fe240e0d804969e7b2af11cb04ec608837c78b56ca88831991b287e232a0b7fce8d548beaff42aaf0197ffa471d81be6ac4c4e53b0148025a2c076ec
-  languageName: node
-  linkType: hard
-
 "@zxing/text-encoding@npm:0.9.0":
   version: 0.9.0
   resolution: "@zxing/text-encoding@npm:0.9.0"
@@ -7185,15 +6574,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"acorn-import-attributes@npm:^1.9.5":
-  version: 1.9.5
-  resolution: "acorn-import-attributes@npm:1.9.5"
-  peerDependencies:
-    acorn: ^8
-  checksum: 10/8bfbfbb6e2467b9b47abb4d095df717ab64fce2525da65eabee073e85e7975fb3a176b6c8bba17c99a7d8ede283a10a590272304eb54a93c4aa1af9790d47a8b
-  languageName: node
-  linkType: hard
-
 "acorn-jsx@npm:^5.0.0":
   version: 5.3.2
   resolution: "acorn-jsx@npm:5.3.2"
@@ -7221,15 +6601,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"acorn@npm:^8.7.1, acorn@npm:^8.8.2":
-  version: 8.13.0
-  resolution: "acorn@npm:8.13.0"
-  bin:
-    acorn: bin/acorn
-  checksum: 10/33e3a03114b02b3bc5009463b3d9549b31a90ee38ebccd5e66515830a02acf62a90edcc12abfb6c9fb3837b6c17a3ec9b72b3bf52ac31d8ad8248a4af871e0f5
-  languageName: node
-  linkType: hard
-
 "agent-base@npm:6, agent-base@npm:^6.0.2":
   version: 6.0.2
   resolution: "agent-base@npm:6.0.2"
@@ -7276,39 +6647,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"ajv-keywords@npm:^3.5.2":
-  version: 3.5.2
-  resolution: "ajv-keywords@npm:3.5.2"
-  peerDependencies:
-    ajv: ^6.9.1
-  checksum: 10/d57c9d5bf8849bddcbd801b79bc3d2ddc736c2adb6b93a6a365429589dd7993ddbd5d37c6025ed6a7f89c27506b80131d5345c5b1fa6a97e40cd10a96bcd228c
-  languageName: node
-  linkType: hard
-
-"ajv@npm:^6.12.5":
-  version: 6.12.6
-  resolution: "ajv@npm:6.12.6"
-  dependencies:
-    fast-deep-equal: "npm:^3.1.1"
-    fast-json-stable-stringify: "npm:^2.0.0"
-    json-schema-traverse: "npm:^0.4.1"
-    uri-js: "npm:^4.2.2"
-  checksum: 10/48d6ad21138d12eb4d16d878d630079a2bda25a04e745c07846a4ad768319533031e28872a9b3c5790fa1ec41aabdf2abed30a56e5a03ebc2cf92184b8ee306c
-  languageName: node
-  linkType: hard
-
-"alge@npm:0.8.1":
-  version: 0.8.1
-  resolution: "alge@npm:0.8.1"
-  dependencies:
-    lodash.ismatch: "npm:^4.4.0"
-    remeda: "npm:^1.0.0"
-    ts-toolbelt: "npm:^9.6.0"
-    zod: "npm:^3.17.3"
-  checksum: 10/11483523289bc7750b6462698a2b61c816bf3c7eada2ade206bc02b964679b6bf4b298cc561ae267f382573668b68ff311a0aec60c5ae011aecde491932240e8
-  languageName: node
-  linkType: hard
-
 "ansi-escapes@npm:^4.2.1, ansi-escapes@npm:^4.3.0":
   version: 4.3.2
   resolution: "ansi-escapes@npm:4.3.2"
@@ -7479,24 +6817,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"autoprefixer@npm:10.4.14":
-  version: 10.4.14
-  resolution: "autoprefixer@npm:10.4.14"
-  dependencies:
-    browserslist: "npm:^4.21.5"
-    caniuse-lite: "npm:^1.0.30001464"
-    fraction.js: "npm:^4.2.0"
-    normalize-range: "npm:^0.1.2"
-    picocolors: "npm:^1.0.0"
-    postcss-value-parser: "npm:^4.2.0"
-  peerDependencies:
-    postcss: ^8.1.0
-  bin:
-    autoprefixer: bin/autoprefixer
-  checksum: 10/9cee5c32557611520aadf3f0caacccaf37fe845e5e8f042a0e1321a235725b537edc01e5897206fd68322997430fdd38fe63f52a1c926d64f4a5514ee5acab81
-  languageName: node
-  linkType: hard
-
 "autoprefixer@npm:10.4.20":
   version: 10.4.20
   resolution: "autoprefixer@npm:10.4.20"
@@ -7713,20 +7033,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"browserslist@npm:^4.21.10, browserslist@npm:^4.21.5, browserslist@npm:^4.23.3":
-  version: 4.24.2
-  resolution: "browserslist@npm:4.24.2"
-  dependencies:
-    caniuse-lite: "npm:^1.0.30001669"
-    electron-to-chromium: "npm:^1.5.41"
-    node-releases: "npm:^2.0.18"
-    update-browserslist-db: "npm:^1.1.1"
-  bin:
-    browserslist: cli.js
-  checksum: 10/f8a9d78bbabe466c57ffd5c50a9e5582a5df9aa68f43078ca62a9f6d0d6c70ba72eca72d0a574dbf177cf55cdca85a46f7eb474917a47ae5398c66f8b76f7d1c
-  languageName: node
-  linkType: hard
-
 "browserslist@npm:^4.21.3":
   version: 4.21.5
   resolution: "browserslist@npm:4.21.5"
@@ -7769,6 +7075,20 @@ __metadata:
   languageName: node
   linkType: hard
 
+"browserslist@npm:^4.23.3":
+  version: 4.24.2
+  resolution: "browserslist@npm:4.24.2"
+  dependencies:
+    caniuse-lite: "npm:^1.0.30001669"
+    electron-to-chromium: "npm:^1.5.41"
+    node-releases: "npm:^2.0.18"
+    update-browserslist-db: "npm:^1.1.1"
+  bin:
+    browserslist: cli.js
+  checksum: 10/f8a9d78bbabe466c57ffd5c50a9e5582a5df9aa68f43078ca62a9f6d0d6c70ba72eca72d0a574dbf177cf55cdca85a46f7eb474917a47ae5398c66f8b76f7d1c
+  languageName: node
+  linkType: hard
+
 "bser@npm:2.1.1":
   version: 2.1.1
   resolution: "bser@npm:2.1.1"
@@ -7973,13 +7293,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"caniuse-lite@npm:^1.0.30001464, caniuse-lite@npm:^1.0.30001646, caniuse-lite@npm:^1.0.30001669":
-  version: 1.0.30001669
-  resolution: "caniuse-lite@npm:1.0.30001669"
-  checksum: 10/cd0b481bb997703cb7651e55666b4aa4e7b4ecf9784796e2393179a15e55c71a6abc6ff865c922bbd3bbfa4a4bf0530d8da13989b97ff8c7850c8a5bd4e00491
-  languageName: node
-  linkType: hard
-
 "caniuse-lite@npm:^1.0.30001517":
   version: 1.0.30001520
   resolution: "caniuse-lite@npm:1.0.30001520"
@@ -8001,6 +7314,13 @@ __metadata:
   languageName: node
   linkType: hard
 
+"caniuse-lite@npm:^1.0.30001646, caniuse-lite@npm:^1.0.30001669":
+  version: 1.0.30001669
+  resolution: "caniuse-lite@npm:1.0.30001669"
+  checksum: 10/cd0b481bb997703cb7651e55666b4aa4e7b4ecf9784796e2393179a15e55c71a6abc6ff865c922bbd3bbfa4a4bf0530d8da13989b97ff8c7850c8a5bd4e00491
+  languageName: node
+  linkType: hard
+
 "capital-case@npm:^1.0.4":
   version: 1.0.4
   resolution: "capital-case@npm:1.0.4"
@@ -8127,7 +7447,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"chokidar@npm:3.5.3, chokidar@npm:>=3.0.0 <4.0.0, chokidar@npm:^3.5.1, chokidar@npm:^3.5.2, chokidar@npm:^3.5.3":
+"chokidar@npm:>=3.0.0 <4.0.0, chokidar@npm:^3.5.1, chokidar@npm:^3.5.2, chokidar@npm:^3.5.3":
   version: 3.5.3
   resolution: "chokidar@npm:3.5.3"
   dependencies:
@@ -8165,6 +7485,15 @@ __metadata:
   languageName: node
   linkType: hard
 
+"chokidar@npm:^4.0.1":
+  version: 4.0.1
+  resolution: "chokidar@npm:4.0.1"
+  dependencies:
+    readdirp: "npm:^4.0.1"
+  checksum: 10/62749d2173a60cc5632d6c6e0b7024f33aadce47b06d02e55ad03c7b8daaaf2fc85d4296c047473d04387fd992dab9384cc5263c70a3dc3018b7ebecfb5b5217
+  languageName: node
+  linkType: hard
+
 "chownr@npm:^1.1.1":
   version: 1.1.4
   resolution: "chownr@npm:1.1.4"
@@ -8179,13 +7508,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"chrome-trace-event@npm:^1.0.2":
-  version: 1.0.4
-  resolution: "chrome-trace-event@npm:1.0.4"
-  checksum: 10/1762bed739774903bf5915fe3045c3120fc3c7f7d929d88e566447ea38944937a6370ccb687278318c43c24f837ad22dac780bed67c066336815557b8cf558c6
-  languageName: node
-  linkType: hard
-
 "class-variance-authority@npm:0.7.0":
   version: 0.7.0
   resolution: "class-variance-authority@npm:0.7.0"
@@ -8292,13 +7614,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"clsx@npm:2.1.0":
-  version: 2.1.0
-  resolution: "clsx@npm:2.1.0"
-  checksum: 10/2e0ce7c3b6803d74fc8147c408f88e79245583202ac14abd9691e2aebb9f312de44270b79154320d10bb7804a9197869635d1291741084826cff20820f31542b
-  languageName: node
-  linkType: hard
-
 "clsx@npm:2.1.1, clsx@npm:^2.1.1":
   version: 2.1.1
   resolution: "clsx@npm:2.1.1"
@@ -8306,13 +7621,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"clsx@npm:^1.2.1":
-  version: 1.2.1
-  resolution: "clsx@npm:1.2.1"
-  checksum: 10/5ded6f61f15f1fa0350e691ccec43a28b12fb8e64c8e94715f2a937bc3722d4c3ed41d6e945c971fc4dcc2a7213a43323beaf2e1c28654af63ba70c9968a8643
-  languageName: node
-  linkType: hard
-
 "color-convert@npm:^1.9.0":
   version: 1.9.3
   resolution: "color-convert@npm:1.9.3"
@@ -8391,13 +7699,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"commander@npm:^2.20.0":
-  version: 2.20.3
-  resolution: "commander@npm:2.20.3"
-  checksum: 10/90c5b6898610cd075984c58c4f88418a4fb44af08c1b1415e9854c03171bec31b336b7f3e4cefe33de994b3f12b03c5e2d638da4316df83593b9e82554e7e95b
-  languageName: node
-  linkType: hard
-
 "commander@npm:^4.0.0":
   version: 4.1.1
   resolution: "commander@npm:4.1.1"
@@ -8555,10 +7856,10 @@ __metadata:
   languageName: node
   linkType: hard
 
-"cookie@npm:~0.4.1":
-  version: 0.4.2
-  resolution: "cookie@npm:0.4.2"
-  checksum: 10/2e1de9fdedca54881eab3c0477aeb067f281f3155d9cfee9d28dfb252210d09e85e9d175c0a60689661feb9e35e588515352f2456bc1f8e8db4267e05fd70137
+"cookie@npm:~0.7.2":
+  version: 0.7.2
+  resolution: "cookie@npm:0.7.2"
+  checksum: 10/24b286c556420d4ba4e9bc09120c9d3db7d28ace2bd0f8ccee82422ce42322f73c8312441271e5eefafbead725980e5996cc02766dbb89a90ac7f5636ede608f
   languageName: node
   linkType: hard
 
@@ -9171,13 +8472,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"dotenv@npm:16.0.3, dotenv@npm:^16.0.0":
-  version: 16.0.3
-  resolution: "dotenv@npm:16.0.3"
-  checksum: 10/d6788c8e40b35ad9a9ca29249dccf37fa6b3ad26700fcbc87f2f41101bf914f5193a04e36a3d23de70b1dcb8e5d5a3b21e151debace2c4cd08d868be500a1b29
-  languageName: node
-  linkType: hard
-
 "dotenv@npm:16.4.5":
   version: 16.4.5
   resolution: "dotenv@npm:16.4.5"
@@ -9185,6 +8479,13 @@ __metadata:
   languageName: node
   linkType: hard
 
+"dotenv@npm:^16.0.0":
+  version: 16.0.3
+  resolution: "dotenv@npm:16.0.3"
+  checksum: 10/d6788c8e40b35ad9a9ca29249dccf37fa6b3ad26700fcbc87f2f41101bf914f5193a04e36a3d23de70b1dcb8e5d5a3b21e151debace2c4cd08d868be500a1b29
+  languageName: node
+  linkType: hard
+
 "dotenv@npm:^16.4.2":
   version: 16.4.4
   resolution: "dotenv@npm:16.4.4"
@@ -9192,27 +8493,27 @@ __metadata:
   languageName: node
   linkType: hard
 
-"drizzle-kit@npm:0.26.2":
-  version: 0.26.2
-  resolution: "drizzle-kit@npm:0.26.2"
+"drizzle-kit@npm:0.28.0":
+  version: 0.28.0
+  resolution: "drizzle-kit@npm:0.28.0"
   dependencies:
-    "@drizzle-team/brocli": "npm:^0.10.1"
+    "@drizzle-team/brocli": "npm:^0.10.2"
     "@esbuild-kit/esm-loader": "npm:^2.5.5"
     esbuild: "npm:^0.19.7"
     esbuild-register: "npm:^3.5.0"
   bin:
     drizzle-kit: bin.cjs
-  checksum: 10/6d499a9a55761efa42c37e1416905a8c53602784ee92526af226060fc96736dc758c56cc2327432e7892278015f342d1da0eb814a0336f0f4ea85a836ab6c82e
+  checksum: 10/d3f9a36ea206f14243deefe3e492968be5e1b0cf2c84bfae675f420b046fa19d67a0743e349df4b01c8d16a324c20befd48138aca0f8eb38e610d20bbb034c16
   languageName: node
   linkType: hard
 
-"drizzle-orm@npm:0.35.3":
-  version: 0.35.3
-  resolution: "drizzle-orm@npm:0.35.3"
+"drizzle-orm@npm:0.36.1":
+  version: 0.36.1
+  resolution: "drizzle-orm@npm:0.36.1"
   peerDependencies:
     "@aws-sdk/client-rds-data": ">=3"
     "@cloudflare/workers-types": ">=3"
-    "@electric-sql/pglite": ">=0.1.1"
+    "@electric-sql/pglite": ">=0.2.0"
     "@libsql/client": ">=0.10.0"
     "@libsql/client-wasm": ">=0.10.0"
     "@neondatabase/serverless": ">=0.1"
@@ -9247,6 +8548,8 @@ __metadata:
       optional: true
     "@libsql/client":
       optional: true
+    "@libsql/client-wasm":
+      optional: true
     "@neondatabase/serverless":
       optional: true
     "@op-engineering/op-sqlite":
@@ -9295,7 +8598,7 @@ __metadata:
       optional: true
     sqlite3:
       optional: true
-  checksum: 10/d91b5bb85983508e838e12f75b5463ca87b4dad31e55026dfeeeba9153226d86eb7743b8cedc0a7c8e609e2930f4b7ffff426416c4a939dd0f0e6b6c581b39f0
+  checksum: 10/705c077a3bc34877a7dfa76c77e0a43858606b50a31ef90f1643ec6ad62fe49151d127c0fcbe6b0b7b04983a8a3984ca944a69288e41f36193ef4708a1f16ecf
   languageName: node
   linkType: hard
 
@@ -9486,19 +8789,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"engine.io-client@npm:~6.5.2":
-  version: 6.5.4
-  resolution: "engine.io-client@npm:6.5.4"
-  dependencies:
-    "@socket.io/component-emitter": "npm:~3.1.0"
-    debug: "npm:~4.3.1"
-    engine.io-parser: "npm:~5.2.1"
-    ws: "npm:~8.17.1"
-    xmlhttprequest-ssl: "npm:~2.0.0"
-  checksum: 10/a91b97cd80e6b048e24887ccac53b143d08ea91c76335870a4aee1427394ba01a7e78ed8d64e518a42fdb297b331ffa80e50fdd26dbc5a08364ea715bf367c59
-  languageName: node
-  linkType: hard
-
 "engine.io-parser@npm:~5.2.1":
   version: 5.2.3
   resolution: "engine.io-parser@npm:5.2.3"
@@ -9506,31 +8796,21 @@ __metadata:
   languageName: node
   linkType: hard
 
-"engine.io@npm:~6.5.2":
-  version: 6.5.5
-  resolution: "engine.io@npm:6.5.5"
+"engine.io@npm:~6.6.0":
+  version: 6.6.2
+  resolution: "engine.io@npm:6.6.2"
   dependencies:
     "@types/cookie": "npm:^0.4.1"
     "@types/cors": "npm:^2.8.12"
     "@types/node": "npm:>=10.0.0"
     accepts: "npm:~1.3.4"
     base64id: "npm:2.0.0"
-    cookie: "npm:~0.4.1"
+    cookie: "npm:~0.7.2"
     cors: "npm:~2.8.5"
     debug: "npm:~4.3.1"
     engine.io-parser: "npm:~5.2.1"
     ws: "npm:~8.17.1"
-  checksum: 10/df8562e5249cf122efad77b909fe804b36ac5769676f963c997d4d18c91e014c68bb40661ff92f641b978baa0297be4000c2f3c3d1ce237cd1771952ccc5f38a
-  languageName: node
-  linkType: hard
-
-"enhanced-resolve@npm:^5.17.1":
-  version: 5.17.1
-  resolution: "enhanced-resolve@npm:5.17.1"
-  dependencies:
-    graceful-fs: "npm:^4.2.4"
-    tapable: "npm:^2.2.0"
-  checksum: 10/e8e03cb7a4bf3c0250a89afbd29e5ec20e90ba5fcd026066232a0754864d7d0a393fa6fc0e5379314a6529165a1834b36731147080714459d98924520410d8f5
+  checksum: 10/381c0a715362bebf32c95f0e4247899b53ff9f8c0074b03f88748cf17635a02948ea3eca27905df37130bc963747c0d286acc78c757e6fc085fe8b8e17d76e01
   languageName: node
   linkType: hard
 
@@ -9591,13 +8871,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"es-module-lexer@npm:^1.2.1, es-module-lexer@npm:^1.4.1":
-  version: 1.5.4
-  resolution: "es-module-lexer@npm:1.5.4"
-  checksum: 10/f29c7c97a58eb17640dcbd71bd6ef754ad4f58f95c3073894573d29dae2cad43ecd2060d97ed5b866dfb7804d5590fb7de1d2c5339a5fceae8bd60b580387fc5
-  languageName: node
-  linkType: hard
-
 "es-module-lexer@npm:^1.3.1":
   version: 1.3.1
   resolution: "es-module-lexer@npm:1.3.1"
@@ -9605,6 +8878,13 @@ __metadata:
   languageName: node
   linkType: hard
 
+"es-module-lexer@npm:^1.4.1":
+  version: 1.5.4
+  resolution: "es-module-lexer@npm:1.5.4"
+  checksum: 10/f29c7c97a58eb17640dcbd71bd6ef754ad4f58f95c3073894573d29dae2cad43ecd2060d97ed5b866dfb7804d5590fb7de1d2c5339a5fceae8bd60b580387fc5
+  languageName: node
+  linkType: hard
+
 "esbuild-plugins-node-modules-polyfill@npm:^1.6.0":
   version: 1.6.1
   resolution: "esbuild-plugins-node-modules-polyfill@npm:1.6.1"
@@ -10065,72 +9345,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"eslint-config-prettier@npm:9.0.0":
-  version: 9.0.0
-  resolution: "eslint-config-prettier@npm:9.0.0"
-  peerDependencies:
-    eslint: ">=7.0.0"
-  bin:
-    eslint-config-prettier: bin/cli.js
-  checksum: 10/276b0b5b5b19066962a9ff3a16a553bdad28e1c0a2ea33a1d75d65c0428bb7b37f6e85ac111ebefcc9bdefb544385856dbe6eaeda5279c639e5549c113d27dda
-  languageName: node
-  linkType: hard
-
-"eslint-config-turbo@npm:1.10.12":
-  version: 1.10.12
-  resolution: "eslint-config-turbo@npm:1.10.12"
-  dependencies:
-    eslint-plugin-turbo: "npm:1.10.12"
-  peerDependencies:
-    eslint: ">6.6.0"
-  checksum: 10/de8e8ef54d7878ab68bded5d4d631df8b3111e420acd72dad88d28870c89eb9e51f97c4577930057f4901fefc03b9f4a522cd312becd89058ce206113cf81557
-  languageName: node
-  linkType: hard
-
-"eslint-plugin-turbo@npm:1.10.12":
-  version: 1.10.12
-  resolution: "eslint-plugin-turbo@npm:1.10.12"
-  dependencies:
-    dotenv: "npm:16.0.3"
-  peerDependencies:
-    eslint: ">6.6.0"
-  checksum: 10/845a6550e5a921b274ebc0bf7373b1105efab5119f6bc3f3f4203600f031bb2085b13e1590d78d2508b407ccb4643c1dc96da4fc5f09ebd2411dd6a15e730f49
-  languageName: node
-  linkType: hard
-
-"eslint-scope@npm:5.1.1":
-  version: 5.1.1
-  resolution: "eslint-scope@npm:5.1.1"
-  dependencies:
-    esrecurse: "npm:^4.3.0"
-    estraverse: "npm:^4.1.1"
-  checksum: 10/c541ef384c92eb5c999b7d3443d80195fcafb3da335500946f6db76539b87d5826c8f2e1d23bf6afc3154ba8cd7c8e566f8dc00f1eea25fdf3afc8fb9c87b238
-  languageName: node
-  linkType: hard
-
-"esrecurse@npm:^4.3.0":
-  version: 4.3.0
-  resolution: "esrecurse@npm:4.3.0"
-  dependencies:
-    estraverse: "npm:^5.2.0"
-  checksum: 10/44ffcd89e714ea6b30143e7f119b104fc4d75e77ee913f34d59076b40ef2d21967f84e019f84e1fd0465b42cdbf725db449f232b5e47f29df29ed76194db8e16
-  languageName: node
-  linkType: hard
-
-"estraverse@npm:^4.1.1":
-  version: 4.3.0
-  resolution: "estraverse@npm:4.3.0"
-  checksum: 10/3f67ad02b6dbfaddd9ea459cf2b6ef4ecff9a6082a7af9d22e445b9abc082ad9ca47e1825557b293fcdae477f4714e561123e30bb6a5b2f184fb2bad4a9497eb
-  languageName: node
-  linkType: hard
-
-"estraverse@npm:^5.2.0":
-  version: 5.3.0
-  resolution: "estraverse@npm:5.3.0"
-  checksum: 10/37cbe6e9a68014d34dbdc039f90d0baf72436809d02edffcc06ba3c2a12eb298048f877511353b130153e532aac8d68ba78430c0dd2f44806ebc7c014b01585e
-  languageName: node
-  linkType: hard
-
 "estree-util-attach-comments@npm:^2.0.0":
   version: 2.1.1
   resolution: "estree-util-attach-comments@npm:2.1.1"
@@ -10242,13 +9456,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"events@npm:^3.2.0":
-  version: 3.3.0
-  resolution: "events@npm:3.3.0"
-  checksum: 10/a3d47e285e28d324d7180f1e493961a2bbb4cad6412090e4dec114f4db1f5b560c7696ee8e758f55e23913ede856e3689cd3aa9ae13c56b5d8314cd3b3ddd1be
-  languageName: node
-  linkType: hard
-
 "execa@npm:5.1.1":
   version: 5.1.1
   resolution: "execa@npm:5.1.1"
@@ -10351,7 +9558,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3":
+"fast-deep-equal@npm:^3.1.3":
   version: 3.1.3
   resolution: "fast-deep-equal@npm:3.1.3"
   checksum: 10/e21a9d8d84f53493b6aa15efc9cfd53dd5b714a1f23f67fb5dc8f574af80df889b3bce25dc081887c6d25457cce704e636395333abad896ccdec03abaf1f3f9d
@@ -10404,13 +9611,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"fast-json-stable-stringify@npm:^2.0.0":
-  version: 2.1.0
-  resolution: "fast-json-stable-stringify@npm:2.1.0"
-  checksum: 10/2c20055c1fa43c922428f16ca8bb29f2807de63e5c851f665f7ac9790176c01c3b40335257736b299764a8d383388dabc73c8083b8e1bc3d99f0a941444ec60e
-  languageName: node
-  linkType: hard
-
 "fast-querystring@npm:^1.1.1":
   version: 1.1.1
   resolution: "fast-querystring@npm:1.1.1"
@@ -10608,34 +9808,13 @@ __metadata:
   languageName: node
   linkType: hard
 
-"fraction.js@npm:^4.2.0, fraction.js@npm:^4.3.7":
+"fraction.js@npm:^4.3.7":
   version: 4.3.7
   resolution: "fraction.js@npm:4.3.7"
   checksum: 10/bb5ebcdeeffcdc37b68ead3bdfc244e68de188e0c64e9702197333c72963b95cc798883ad16adc21588088b942bca5b6a6ff4aeb1362d19f6f3b629035dc15f5
   languageName: node
   linkType: hard
 
-"framer-motion@npm:10.17.4":
-  version: 10.17.4
-  resolution: "framer-motion@npm:10.17.4"
-  dependencies:
-    "@emotion/is-prop-valid": "npm:^0.8.2"
-    tslib: "npm:^2.4.0"
-  peerDependencies:
-    react: ^18.0.0
-    react-dom: ^18.0.0
-  dependenciesMeta:
-    "@emotion/is-prop-valid":
-      optional: true
-  peerDependenciesMeta:
-    react:
-      optional: true
-    react-dom:
-      optional: true
-  checksum: 10/15519913340899c16bcb2ba7e924b49f0eb5475a04775b20cb2ef7a1beb82082ec1b964e4bb9325e0d6c43f369bdc2e0fc085394ecf6e238d54d0d607e116412
-  languageName: node
-  linkType: hard
-
 "fresh@npm:0.5.2":
   version: 0.5.2
   resolution: "fresh@npm:0.5.2"
@@ -10882,13 +10061,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"glob-to-regexp@npm:^0.4.1":
-  version: 0.4.1
-  resolution: "glob-to-regexp@npm:0.4.1"
-  checksum: 10/9009529195a955c40d7b9690794aeff5ba665cc38f1519e111c58bb54366fd0c106bde80acf97ba4e533208eb53422c83b136611a54c5fefb1edd8dc267cb62e
-  languageName: node
-  linkType: hard
-
 "glob@npm:10.3.4":
   version: 10.3.4
   resolution: "glob@npm:10.3.4"
@@ -10999,7 +10171,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.11, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6":
+"graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.11, graceful-fs@npm:^4.2.6":
   version: 4.2.11
   resolution: "graceful-fs@npm:4.2.11"
   checksum: 10/bf152d0ed1dc159239db1ba1f74fdbc40cb02f626770dcd5815c427ce0688c2635a06ed69af364396da4636d0408fcf7d4afdf7881724c3307e46aff30ca49e2
@@ -11031,28 +10203,14 @@ __metadata:
   languageName: node
   linkType: hard
 
-"graphql-request@npm:7.1.0":
-  version: 7.1.0
-  resolution: "graphql-request@npm:7.1.0"
+"graphql-request@npm:7.1.2":
+  version: 7.1.2
+  resolution: "graphql-request@npm:7.1.2"
   dependencies:
     "@graphql-typed-document-node/core": "npm:^3.2.0"
-    "@molt/command": "npm:^0.9.0"
-    zod: "npm:^3.23.8"
-  peerDependencies:
-    "@dprint/formatter": ^0.3.0
-    "@dprint/typescript": ^0.91.1
-    dprint: ^0.46.2
-    graphql: 14 - 16
-  peerDependenciesMeta:
-    "@dprint/formatter":
-      optional: true
-    "@dprint/typescript":
-      optional: true
-    dprint:
-      optional: true
-  bin:
-    graffle: build/cli/generate.js
-  checksum: 10/6e61cd8200f9842569a657b0fdc0cb45a8433d8afa730ace911fa9a09318fb3cae3ccd9396a9ab2e1795bf9ccbce976fc90fb0bfac9dfe2fc821e74845be57d9
+  peerDependencies:
+    graphql: 14 - 16
+  checksum: 10/08e6612d88103ced678f210e4c1a50366ca882622c6383e974aa285963e33c24979fea62aaeb4380b2c1069abd640346d132509f1350f4d4decdf5122ed21e16
   languageName: node
   linkType: hard
 
@@ -11537,13 +10695,13 @@ __metadata:
   languageName: node
   linkType: hard
 
-"input-otp@npm:1.4.0":
-  version: 1.4.0
-  resolution: "input-otp@npm:1.4.0"
+"input-otp@npm:1.4.1":
+  version: 1.4.1
+  resolution: "input-otp@npm:1.4.1"
   peerDependencies:
-    react: ^16.8 || ^17.0 || ^18.0 || ^19.0
-    react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0
-  checksum: 10/e727e707389868b65539395afd3f52e16a6d223cc8752e66fe13c6d54d1055d05bebd4317f68aaf97bbe682054ddf6f3e0e28be331b3a728981822064fef3bc1
+    react: ^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc
+    react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc
+  checksum: 10/00bb230e53cddb2d711c107c333bdcf4e02169b5b9060b54b8f41ff9e806eede6b12b24782ea4a4900d9a2e97775723104a3d3458a4e840ff6a8c8a6733fc620
   languageName: node
   linkType: hard
 
@@ -11953,17 +11111,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"jest-worker@npm:^27.4.5":
-  version: 27.5.1
-  resolution: "jest-worker@npm:27.5.1"
-  dependencies:
-    "@types/node": "npm:*"
-    merge-stream: "npm:^2.0.0"
-    supports-color: "npm:^8.0.0"
-  checksum: 10/06c6e2a84591d9ede704d5022fc13791e8876e83397c89d481b0063332abbb64c0f01ef4ca7de520b35c7a1058556078d6bdc3631376f4e9ffb42316c1a8488e
-  languageName: node
-  linkType: hard
-
 "jiti@npm:^1.17.1":
   version: 1.18.2
   resolution: "jiti@npm:1.18.2"
@@ -11973,7 +11120,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"jiti@npm:^1.19.1, jiti@npm:^1.21.0":
+"jiti@npm:^1.21.0":
   version: 1.21.6
   resolution: "jiti@npm:1.21.6"
   bin:
@@ -12080,7 +11227,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"json-parse-even-better-errors@npm:^2.3.0, json-parse-even-better-errors@npm:^2.3.1":
+"json-parse-even-better-errors@npm:^2.3.0":
   version: 2.3.1
   resolution: "json-parse-even-better-errors@npm:2.3.1"
   checksum: 10/5f3a99009ed5f2a5a67d06e2f298cc97bc86d462034173308156f15b43a6e850be8511dc204b9b94566305da2947f7d90289657237d210351a39059ff9d666cf
@@ -12094,13 +11241,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"json-schema-traverse@npm:^0.4.1":
-  version: 0.4.1
-  resolution: "json-schema-traverse@npm:0.4.1"
-  checksum: 10/7486074d3ba247769fda17d5181b345c9fb7d12e0da98b22d1d71a5db9698d8b4bd900a3ec1a4ffdd60846fc2556274a5c894d0c48795f14cb03aeae7b55260b
-  languageName: node
-  linkType: hard
-
 "json-stable-stringify@npm:^1.0.1":
   version: 1.0.2
   resolution: "json-stable-stringify@npm:1.0.2"
@@ -12261,13 +11401,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"loader-runner@npm:^4.2.0":
-  version: 4.3.0
-  resolution: "loader-runner@npm:4.3.0"
-  checksum: 10/555ae002869c1e8942a0efd29a99b50a0ce6c3296efea95caf48f00d7f6f7f659203ed6613688b6181aa81dc76de3e65ece43094c6dffef3127fe1a84d973cd3
-  languageName: node
-  linkType: hard
-
 "loader-utils@npm:^3.2.0":
   version: 3.2.1
   resolution: "loader-utils@npm:3.2.1"
@@ -12321,13 +11454,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"lodash.ismatch@npm:^4.4.0":
-  version: 4.4.0
-  resolution: "lodash.ismatch@npm:4.4.0"
-  checksum: 10/946a7176cdf4048f7b624378defda00dc0d01a2dad9933c54dad11fbecc253716df4210fbbfcd7d042e6fdb7603463cfe48e0ef576e20bf60d43f7deb1a2fe04
-  languageName: node
-  linkType: hard
-
 "lodash.isplainobject@npm:^4.0.6":
   version: 4.0.6
   resolution: "lodash.isplainobject@npm:4.0.6"
@@ -12342,13 +11468,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"lodash.snakecase@npm:^4.1.1":
-  version: 4.1.1
-  resolution: "lodash.snakecase@npm:4.1.1"
-  checksum: 10/82ed40935d840477ef8fee64f9f263f75989c6cde36b84aae817246d95826228e1b5a7f6093c51de324084f86433634c7af244cb89496633cacfe443071450d0
-  languageName: node
-  linkType: hard
-
 "lodash.sortby@npm:^4.7.0":
   version: 4.7.0
   resolution: "lodash.sortby@npm:4.7.0"
@@ -12460,12 +11579,12 @@ __metadata:
   languageName: node
   linkType: hard
 
-"lucide-react@npm:0.454.0":
-  version: 0.454.0
-  resolution: "lucide-react@npm:0.454.0"
+"lucide-react@npm:0.456.0":
+  version: 0.456.0
+  resolution: "lucide-react@npm:0.456.0"
   peerDependencies:
     react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc
-  checksum: 10/90b40271182e15fefc9cbc6aca4645a49691f73b1887daffb0c9d048f61c89a1c1d7eac1096a37ba627bdce91e8aa49fcf43a5cf0ebd255117ce848d71a56dd1
+  checksum: 10/214a3585e9b028d86f7ea161a13c4b9b7578d3901a7fda040e1bb8e115552957b91d29c248a25c77e1b9e466c160195219809ea0fa4b26e5a741c8534cea17e9
   languageName: node
   linkType: hard
 
@@ -13180,7 +12299,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"mime-types@npm:2.1.35, mime-types@npm:^2.1.12, mime-types@npm:^2.1.27, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34":
+"mime-types@npm:2.1.35, mime-types@npm:^2.1.12, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34":
   version: 2.1.35
   resolution: "mime-types@npm:2.1.35"
   dependencies:
@@ -13507,38 +12626,31 @@ __metadata:
   languageName: node
   linkType: hard
 
-"neo-async@npm:^2.6.2":
-  version: 2.6.2
-  resolution: "neo-async@npm:2.6.2"
-  checksum: 10/1a7948fea86f2b33ec766bc899c88796a51ba76a4afc9026764aedc6e7cde692a09067031e4a1bf6db4f978ccd99e7f5b6c03fe47ad9865c3d4f99050d67e002
-  languageName: node
-  linkType: hard
-
-"next-themes@npm:0.3.0":
-  version: 0.3.0
-  resolution: "next-themes@npm:0.3.0"
+"next-themes@npm:0.4.3":
+  version: 0.4.3
+  resolution: "next-themes@npm:0.4.3"
   peerDependencies:
-    react: ^16.8 || ^17 || ^18
-    react-dom: ^16.8 || ^17 || ^18
-  checksum: 10/4285c4969eac517ad7addd773bcb71e7d14bc6c6e3b24eb97b80a6e06ac03fb6cb345e75dfb448156d14430d06289948eb8cfdeb52402ca7ce786093d01d2878
+    react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc
+    react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc
+  checksum: 10/577932d057ef9590f37eda4aae282360b0aea412212cb0cc75b2b5b7a03becb2833eeaa66bee3c301fc03715bc0c5a2ae49121eb788184f8d51bf446d8289e10
   languageName: node
   linkType: hard
 
-"next@npm:14.1.4":
-  version: 14.1.4
-  resolution: "next@npm:14.1.4"
+"next@npm:14.2.10":
+  version: 14.2.10
+  resolution: "next@npm:14.2.10"
   dependencies:
-    "@next/env": "npm:14.1.4"
-    "@next/swc-darwin-arm64": "npm:14.1.4"
-    "@next/swc-darwin-x64": "npm:14.1.4"
-    "@next/swc-linux-arm64-gnu": "npm:14.1.4"
-    "@next/swc-linux-arm64-musl": "npm:14.1.4"
-    "@next/swc-linux-x64-gnu": "npm:14.1.4"
-    "@next/swc-linux-x64-musl": "npm:14.1.4"
-    "@next/swc-win32-arm64-msvc": "npm:14.1.4"
-    "@next/swc-win32-ia32-msvc": "npm:14.1.4"
-    "@next/swc-win32-x64-msvc": "npm:14.1.4"
-    "@swc/helpers": "npm:0.5.2"
+    "@next/env": "npm:14.2.10"
+    "@next/swc-darwin-arm64": "npm:14.2.10"
+    "@next/swc-darwin-x64": "npm:14.2.10"
+    "@next/swc-linux-arm64-gnu": "npm:14.2.10"
+    "@next/swc-linux-arm64-musl": "npm:14.2.10"
+    "@next/swc-linux-x64-gnu": "npm:14.2.10"
+    "@next/swc-linux-x64-musl": "npm:14.2.10"
+    "@next/swc-win32-arm64-msvc": "npm:14.2.10"
+    "@next/swc-win32-ia32-msvc": "npm:14.2.10"
+    "@next/swc-win32-x64-msvc": "npm:14.2.10"
+    "@swc/helpers": "npm:0.5.5"
     busboy: "npm:1.6.0"
     caniuse-lite: "npm:^1.0.30001579"
     graceful-fs: "npm:^4.2.11"
@@ -13546,6 +12658,7 @@ __metadata:
     styled-jsx: "npm:5.1.1"
   peerDependencies:
     "@opentelemetry/api": ^1.1.0
+    "@playwright/test": ^1.41.2
     react: ^18.2.0
     react-dom: ^18.2.0
     sass: ^1.3.0
@@ -13571,11 +12684,13 @@ __metadata:
   peerDependenciesMeta:
     "@opentelemetry/api":
       optional: true
+    "@playwright/test":
+      optional: true
     sass:
       optional: true
   bin:
     next: dist/bin/next
-  checksum: 10/16dd0667d55caf0b9915c530e4ae950ae7fad42c22573f333cd23f2fee8243afa4d3e8093a1c7d07251ced150c0bed9cde273cac951b919594a8e2112d669266
+  checksum: 10/73b254332a04d41885aa63b23d692d8e1c665de4db383b29363292729b128c22ade07cae1fd1e088a9cbb595106047397bbf92bc769b124f4069844833c0a06c
   languageName: node
   linkType: hard
 
@@ -14574,17 +13689,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"postcss@npm:8.4.38":
-  version: 8.4.38
-  resolution: "postcss@npm:8.4.38"
-  dependencies:
-    nanoid: "npm:^3.3.7"
-    picocolors: "npm:^1.0.0"
-    source-map-js: "npm:^1.2.0"
-  checksum: 10/6e44a7ed835ffa9a2b096e8d3e5dfc6bcf331a25c48aeb862dd54e3aaecadf814fa22be224fd308f87d08adf2299164f88c5fd5ab1c4ef6cbd693ceb295377f4
-  languageName: node
-  linkType: hard
-
 "postcss@npm:8.4.47, postcss@npm:^8.4.43":
   version: 8.4.47
   resolution: "postcss@npm:8.4.47"
@@ -14643,18 +13747,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"prism-react-renderer@npm:2.1.0":
-  version: 2.1.0
-  resolution: "prism-react-renderer@npm:2.1.0"
-  dependencies:
-    "@types/prismjs": "npm:^1.26.0"
-    clsx: "npm:^1.2.1"
-  peerDependencies:
-    react: ">=16.0.0"
-  checksum: 10/9e5cbd31ed6305f48421890bdb700f716598339038698c34f03a79dfe3393eccf0ce5bad09b4d5cc1b86c6791693e6c52ca604f3cc0766cf9b9546b62c549d1c
-  languageName: node
-  linkType: hard
-
 "prismjs@npm:1.29.0":
   version: 1.29.0
   resolution: "prismjs@npm:1.29.0"
@@ -14702,7 +13794,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"prop-types@npm:^15.5.6, prop-types@npm:^15.6.2, prop-types@npm:^15.7.2, prop-types@npm:^15.8.1":
+"prop-types@npm:^15.5.6, prop-types@npm:^15.6.2, prop-types@npm:^15.8.1":
   version: 15.8.1
   resolution: "prop-types@npm:15.8.1"
   dependencies:
@@ -14789,13 +13881,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"punycode@npm:^2.1.0":
-  version: 2.3.1
-  resolution: "punycode@npm:2.3.1"
-  checksum: 10/febdc4362bead22f9e2608ff0171713230b57aff9dddc1c273aa2a651fbd366f94b7d6a71d78342a7c0819906750351ca7f2edd26ea41b626d87d6a13d1bd059
-  languageName: node
-  linkType: hard
-
 "qs@npm:6.13.0":
   version: 6.13.0
   resolution: "qs@npm:6.13.0"
@@ -14826,15 +13911,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"randombytes@npm:^2.1.0":
-  version: 2.1.0
-  resolution: "randombytes@npm:2.1.0"
-  dependencies:
-    safe-buffer: "npm:^5.1.0"
-  checksum: 10/4efd1ad3d88db77c2d16588dc54c2b52fd2461e70fe5724611f38d283857094fe09040fa2c9776366803c3152cf133171b452ef717592b65631ce5dc3a2bdafc
-  languageName: node
-  linkType: hard
-
 "range-parser@npm:~1.2.1":
   version: 1.2.1
   resolution: "range-parser@npm:1.2.1"
@@ -14900,7 +13976,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"react-dom@npm:18.3.1, react-dom@npm:^18.2.0":
+"react-dom@npm:18.3.1":
   version: 18.3.1
   resolution: "react-dom@npm:18.3.1"
   dependencies:
@@ -14912,53 +13988,27 @@ __metadata:
   languageName: node
   linkType: hard
 
-"react-email@npm:2.1.6":
-  version: 2.1.6
-  resolution: "react-email@npm:2.1.6"
+"react-email@npm:3.0.2":
+  version: 3.0.2
+  resolution: "react-email@npm:3.0.2"
   dependencies:
     "@babel/core": "npm:7.24.5"
     "@babel/parser": "npm:7.24.5"
-    "@radix-ui/colors": "npm:1.0.1"
-    "@radix-ui/react-collapsible": "npm:1.1.0"
-    "@radix-ui/react-popover": "npm:1.1.1"
-    "@radix-ui/react-slot": "npm:1.1.0"
-    "@radix-ui/react-toggle-group": "npm:1.1.0"
-    "@radix-ui/react-tooltip": "npm:1.1.1"
-    "@swc/core": "npm:1.3.101"
-    "@types/react": "npm:18.2.47"
-    "@types/react-dom": "npm:^18.2.0"
-    "@types/webpack": "npm:5.28.5"
-    autoprefixer: "npm:10.4.14"
     chalk: "npm:4.1.2"
-    chokidar: "npm:3.5.3"
-    clsx: "npm:2.1.0"
+    chokidar: "npm:^4.0.1"
     commander: "npm:11.1.0"
     debounce: "npm:2.0.0"
     esbuild: "npm:0.19.11"
-    eslint-config-prettier: "npm:9.0.0"
-    eslint-config-turbo: "npm:1.10.12"
-    framer-motion: "npm:10.17.4"
     glob: "npm:10.3.4"
     log-symbols: "npm:4.1.0"
     mime-types: "npm:2.1.35"
-    next: "npm:14.1.4"
+    next: "npm:14.2.10"
     normalize-path: "npm:3.0.0"
     ora: "npm:5.4.1"
-    postcss: "npm:8.4.38"
-    prism-react-renderer: "npm:2.1.0"
-    react: "npm:^18.2.0"
-    react-dom: "npm:^18.2.0"
-    socket.io: "npm:4.7.3"
-    socket.io-client: "npm:4.7.3"
-    sonner: "npm:1.3.1"
-    source-map-js: "npm:1.0.2"
-    stacktrace-parser: "npm:0.1.10"
-    tailwind-merge: "npm:2.2.0"
-    tailwindcss: "npm:3.4.0"
-    typescript: "npm:5.1.6"
+    socket.io: "npm:4.8.0"
   bin:
-    email: cli/index.js
-  checksum: 10/0cd89582dc31210ac0f1b97c6f1372c2259425ecbb388da2fc08eb26fe42f11fd2d6cd0724ce42f87ae891c98a7c415ed246dc23e552cce76de48a64b1c5d36d
+    email: dist/cli/index.js
+  checksum: 10/c294b8d9b56bb3721e903bacb8799172d2e6b6bcaf0f3f61174beebc85ed138f5fe2f3cd4e1cb589cdf49149f2282220b9451be7c89f46930820e7062d965aab
   languageName: node
   linkType: hard
 
@@ -14993,15 +14043,13 @@ __metadata:
   languageName: node
   linkType: hard
 
-"react-number-format@npm:^5.3.1":
-  version: 5.3.1
-  resolution: "react-number-format@npm:5.3.1"
-  dependencies:
-    prop-types: "npm:^15.7.2"
+"react-number-format@npm:^5.4.2":
+  version: 5.4.2
+  resolution: "react-number-format@npm:5.4.2"
   peerDependencies:
     react: ^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0
     react-dom: ^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0
-  checksum: 10/117c068ed656fd8542ce89f0e0e4a01c835d00122a2c7bd556bf43f541d55c7d9925b08903e02f04b04197def10e94f1a009cf6ebe360a0db144f9b40aad590c
+  checksum: 10/d56bf3e132c7b1c51081e8f8be520344c1e43956e31070bb752e2a0fdb6d73b615695a82d4c4c04e6e1c105ee0d998f35949feef5a542a39f875112b0a746607
   languageName: node
   linkType: hard
 
@@ -15040,7 +14088,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"react-remove-scroll-bar@npm:^2.3.3":
+"react-remove-scroll-bar@npm:^2.3.3, react-remove-scroll-bar@npm:^2.3.6":
   version: 2.3.6
   resolution: "react-remove-scroll-bar@npm:2.3.6"
   dependencies:
@@ -15056,22 +14104,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"react-remove-scroll-bar@npm:^2.3.4":
-  version: 2.3.4
-  resolution: "react-remove-scroll-bar@npm:2.3.4"
-  dependencies:
-    react-style-singleton: "npm:^2.2.1"
-    tslib: "npm:^2.0.0"
-  peerDependencies:
-    "@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0
-    react: ^16.8.0 || ^17.0.0 || ^18.0.0
-  peerDependenciesMeta:
-    "@types/react":
-      optional: true
-  checksum: 10/ac028b3ed12e66972cab8656747736729b219dff5a600178d1650300a2a750ace37f7ec82146147d37b092b19874f45cf7a45edceff68ac1f59607a828ca089f
-  languageName: node
-  linkType: hard
-
 "react-remove-scroll@npm:2.5.5":
   version: 2.5.5
   resolution: "react-remove-scroll@npm:2.5.5"
@@ -15091,11 +14123,11 @@ __metadata:
   languageName: node
   linkType: hard
 
-"react-remove-scroll@npm:2.5.7, react-remove-scroll@npm:^2.5.7":
-  version: 2.5.7
-  resolution: "react-remove-scroll@npm:2.5.7"
+"react-remove-scroll@npm:^2.6.0":
+  version: 2.6.0
+  resolution: "react-remove-scroll@npm:2.6.0"
   dependencies:
-    react-remove-scroll-bar: "npm:^2.3.4"
+    react-remove-scroll-bar: "npm:^2.3.6"
     react-style-singleton: "npm:^2.2.1"
     tslib: "npm:^2.1.0"
     use-callback-ref: "npm:^1.3.0"
@@ -15106,31 +14138,31 @@ __metadata:
   peerDependenciesMeta:
     "@types/react":
       optional: true
-  checksum: 10/a1285d118e734855be6a1cf6c83a2ee39d8c5a5c3c336a1e9b80ab571326669bf39a52607f1889337c559c18b9e5fd5a0772fa82f748de3fcfe114ee6f772cc6
+  checksum: 10/9fac79e1c2ed2c85729bfe82f61ef4ae5ce51f478736a13892a9a11e05cbd4e9599f9f0e012cb5fc0719e18dc1dd687ab61f516193228615df636db8b851245e
   languageName: node
   linkType: hard
 
-"react-router-dom@npm:6.27.0":
-  version: 6.27.0
-  resolution: "react-router-dom@npm:6.27.0"
+"react-router-dom@npm:6.28.0":
+  version: 6.28.0
+  resolution: "react-router-dom@npm:6.28.0"
   dependencies:
-    "@remix-run/router": "npm:1.20.0"
-    react-router: "npm:6.27.0"
+    "@remix-run/router": "npm:1.21.0"
+    react-router: "npm:6.28.0"
   peerDependencies:
     react: ">=16.8"
     react-dom: ">=16.8"
-  checksum: 10/cfbcbc1d387d3341a335e3a075e487cc09dcbb62f1b83bc827fc3eec937523d5647a2c4488c804dc61581e65561823d0166d17b5dbc8579998c25b5a0bcabad6
+  checksum: 10/e637825132ea96c3514ef7b8322f9bf0b752a942d6b4ffc4c20e389b5911726adf3dba8208ed4b97bf5b9c3bd465d9d1a1db1a58a610a8d528f18d890e0b143f
   languageName: node
   linkType: hard
 
-"react-router@npm:6.27.0":
-  version: 6.27.0
-  resolution: "react-router@npm:6.27.0"
+"react-router@npm:6.28.0":
+  version: 6.28.0
+  resolution: "react-router@npm:6.28.0"
   dependencies:
-    "@remix-run/router": "npm:1.20.0"
+    "@remix-run/router": "npm:1.21.0"
   peerDependencies:
     react: ">=16.8"
-  checksum: 10/352e3af2075cdccf9d114b7e06d94a1b46a2147ba9d6e8643787a92464f5fd9ead950252a98d551f99f21860288bcf3a4f088cb5f46b28d1274a4e2ba24cc0f9
+  checksum: 10/f021a644513144884a567d9c2dcc432e8e3233f931378c219c5a3b5b842340f0faca86225a708bafca1e9010965afe1a7dada28aef5b7b6138c885c0552d9a7d
   languageName: node
   linkType: hard
 
@@ -15165,16 +14197,16 @@ __metadata:
   languageName: node
   linkType: hard
 
-"react-textarea-autosize@npm:8.5.3":
-  version: 8.5.3
-  resolution: "react-textarea-autosize@npm:8.5.3"
+"react-textarea-autosize@npm:8.5.4":
+  version: 8.5.4
+  resolution: "react-textarea-autosize@npm:8.5.4"
   dependencies:
     "@babel/runtime": "npm:^7.20.13"
     use-composed-ref: "npm:^1.3.0"
     use-latest: "npm:^1.2.1"
   peerDependencies:
     react: ^16.8.0 || ^17.0.0 || ^18.0.0
-  checksum: 10/4ade4329374f77414f55074826617e388d884b6c9401e0877b63d7f3715db07041431bb757265fb971c4ef15f3fde70ff6a05a5abb09ad3ff89334e1ff5c39ea
+  checksum: 10/3f7398f84baa35cf3f369354e47828f9064e38280012c23238b7e015e0d41ffd1611803d67e7427c5b9ec9161d6961ed13c0c261031dbcaf3f88bc2a6c6c2ffd
   languageName: node
   linkType: hard
 
@@ -15220,7 +14252,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"react@npm:18.3.1, react@npm:^18.2.0":
+"react@npm:18.3.1":
   version: 18.3.1
   resolution: "react@npm:18.3.1"
   dependencies:
@@ -15287,6 +14319,13 @@ __metadata:
   languageName: node
   linkType: hard
 
+"readdirp@npm:^4.0.1":
+  version: 4.0.2
+  resolution: "readdirp@npm:4.0.2"
+  checksum: 10/4ef93103307c7d5e42e78ecf201db58c984c4d66882a27c956250478b49c2444b1ff6aea8ce0f5e4157b2c07ce2fe870ad16c92ebd7c6ff30391ded6e42b9873
+  languageName: node
+  linkType: hard
+
 "readdirp@npm:~3.6.0":
   version: 3.6.0
   resolution: "readdirp@npm:3.6.0"
@@ -15296,13 +14335,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"readline-sync@npm:^1.4.10":
-  version: 1.4.10
-  resolution: "readline-sync@npm:1.4.10"
-  checksum: 10/5eb6465f5c5391e32cb525022a307a910a565828cd53da87ac05fca291607df54099dd65bc9c7a513ac53a5eb4e11454d48f0dcf4ad54126d36dec5fcec4a8f0
-  languageName: node
-  linkType: hard
-
 "recharts-scale@npm:^0.4.4":
   version: 0.4.5
   resolution: "recharts-scale@npm:0.4.5"
@@ -15430,13 +14462,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"remeda@npm:^1.0.0":
-  version: 1.61.0
-  resolution: "remeda@npm:1.61.0"
-  checksum: 10/0b0ec8688e340c7525a8788e99701b174ddca2eaf230d47f9e087d9aaccd54c7181a1f58bf4f95cb9c12bc1d26f03b17e3d3d9046a59225074a7ac3fa1356da3
-  languageName: node
-  linkType: hard
-
 "remedial@npm:^1.0.7":
   version: 1.0.8
   resolution: "remedial@npm:1.0.8"
@@ -15444,9 +14469,9 @@ __metadata:
   languageName: node
   linkType: hard
 
-"remix-development-tools@npm:4.7.5":
-  version: 4.7.5
-  resolution: "remix-development-tools@npm:4.7.5"
+"remix-development-tools@npm:4.7.6":
+  version: 4.7.6
+  resolution: "remix-development-tools@npm:4.7.6"
   dependencies:
     "@radix-ui/react-accordion": "npm:^1.1.2"
     "@radix-ui/react-select": "npm:^1.2.2"
@@ -15465,7 +14490,7 @@ __metadata:
     react: ">=17"
     react-dom: ">=17"
     vite: ">=5.0.0"
-  checksum: 10/323bf05c4666150a9ea149d209ad2440cd0f21698c021eda0ea1e718afa712dc4ba7242891dff827b7a5cbc5781dcb5c707bac1d17b38c14375c252a8e3e286a
+  checksum: 10/15a639548d9f73cd40ceae1e324ac3e3e9cd3368b75c159bfb5ba2c617d03c791a6089e7851fd408aecba84c0f5f940d6ecbbe142d000ccc258b911ae9a30619
   languageName: node
   linkType: hard
 
@@ -15793,7 +14818,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"safe-buffer@npm:5.2.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:~5.2.0":
+"safe-buffer@npm:5.2.1, safe-buffer@npm:~5.2.0":
   version: 5.2.1
   resolution: "safe-buffer@npm:5.2.1"
   checksum: 10/32872cd0ff68a3ddade7a7617b8f4c2ae8764d8b7d884c651b74457967a9e0e886267d3ecc781220629c44a865167b61c375d2da6c720c840ecd73f45d5d9451
@@ -15843,17 +14868,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"schema-utils@npm:^3.1.1, schema-utils@npm:^3.2.0":
-  version: 3.3.0
-  resolution: "schema-utils@npm:3.3.0"
-  dependencies:
-    "@types/json-schema": "npm:^7.0.8"
-    ajv: "npm:^6.12.5"
-    ajv-keywords: "npm:^3.5.2"
-  checksum: 10/2c7bbb1da967fdfd320e6cea538949006ec6e8c13ea560a4f94ff2c56809a8486fa5ec419e023452501a6befe1ca381e409c2798c24f4993c7c4094d97fdb258
-  languageName: node
-  linkType: hard
-
 "scuid@npm:^1.1.0":
   version: 1.1.0
   resolution: "scuid@npm:1.1.0"
@@ -15951,15 +14965,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"serialize-javascript@npm:^6.0.1":
-  version: 6.0.2
-  resolution: "serialize-javascript@npm:6.0.2"
-  dependencies:
-    randombytes: "npm:^2.1.0"
-  checksum: 10/445a420a6fa2eaee4b70cbd884d538e259ab278200a2ededd73253ada17d5d48e91fb1f4cd224a236ab62ea7ba0a70c6af29fc93b4f3d3078bf7da1c031fde58
-  languageName: node
-  linkType: hard
-
 "serve-static@npm:1.16.2":
   version: 1.16.2
   resolution: "serve-static@npm:1.16.2"
@@ -16138,18 +15143,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"socket.io-client@npm:4.7.3":
-  version: 4.7.3
-  resolution: "socket.io-client@npm:4.7.3"
-  dependencies:
-    "@socket.io/component-emitter": "npm:~3.1.0"
-    debug: "npm:~4.3.2"
-    engine.io-client: "npm:~6.5.2"
-    socket.io-parser: "npm:~4.2.4"
-  checksum: 10/1ac5816afdee55d4501e1da301cd73679a466c1615cafc3bb22d2651e25a7f692cd16fd7f817ed629c6b934f323b977c84548dbfdbd1d4f73786be3d63f32e83
-  languageName: node
-  linkType: hard
-
 "socket.io-parser@npm:~4.2.4":
   version: 4.2.4
   resolution: "socket.io-parser@npm:4.2.4"
@@ -16160,18 +15153,18 @@ __metadata:
   languageName: node
   linkType: hard
 
-"socket.io@npm:4.7.3":
-  version: 4.7.3
-  resolution: "socket.io@npm:4.7.3"
+"socket.io@npm:4.8.0":
+  version: 4.8.0
+  resolution: "socket.io@npm:4.8.0"
   dependencies:
     accepts: "npm:~1.3.4"
     base64id: "npm:~2.0.0"
     cors: "npm:~2.8.5"
     debug: "npm:~4.3.2"
-    engine.io: "npm:~6.5.2"
+    engine.io: "npm:~6.6.0"
     socket.io-adapter: "npm:~2.5.2"
     socket.io-parser: "npm:~4.2.4"
-  checksum: 10/cc66a65a784580d7123a8513b203d7ac18f08680a8bfb5d0908d7ed66c3cfeb6a2fa6c3d4ba76303c601a7f74db79b6a9e467bab763e5b66ac6e547f25c3d340
+  checksum: 10/94863e53f22bce683d40f58967d56c72fdf0bb0530512c45663451ad2dd75edfbcc67c5a356c47c04275d915aaaec3731e8f73230634b5330abc47a45a212c82
   languageName: node
   linkType: hard
 
@@ -16196,27 +15189,17 @@ __metadata:
   languageName: node
   linkType: hard
 
-"sonner@npm:1.3.1":
-  version: 1.3.1
-  resolution: "sonner@npm:1.3.1"
-  peerDependencies:
-    react: ^18.0.0
-    react-dom: ^18.0.0
-  checksum: 10/1ae9399ee7f29142b422bf29e9fd3f4b00e8bb0db5d46ddb6048d159efed8c5c476c9a49a87b1b25f99145e0165f5c3902997315f13b3dee9e450977aff9ea38
-  languageName: node
-  linkType: hard
-
-"sonner@npm:1.5.0":
-  version: 1.5.0
-  resolution: "sonner@npm:1.5.0"
+"sonner@npm:1.7.0":
+  version: 1.7.0
+  resolution: "sonner@npm:1.7.0"
   peerDependencies:
-    react: ^18.0.0
-    react-dom: ^18.0.0
-  checksum: 10/f189ec3cacf294b875eeb349faefa4be90d2ff4dcde6dc73b3b77a4a8ed6ff393a1d6a1b1b90ef86de861a4c84d988aec09558cabd39fcb1befddd384c4010b0
+    react: ^18.0.0 || ^19.0.0 || ^19.0.0-rc
+    react-dom: ^18.0.0 || ^19.0.0 || ^19.0.0-rc
+  checksum: 10/121357b6fb39d2c8f81980f72249d8fc02fa5eaba8e6522ca13a89bf4a13a8313421bd1dde9125e593f1d9a9507baa5c48f595f043373733f75e0e038eaff65f
   languageName: node
   linkType: hard
 
-"source-map-js@npm:1.0.2, source-map-js@npm:>=0.6.2 <2.0.0, source-map-js@npm:^1.0.2":
+"source-map-js@npm:>=0.6.2 <2.0.0, source-map-js@npm:^1.0.2":
   version: 1.0.2
   resolution: "source-map-js@npm:1.0.2"
   checksum: 10/38e2d2dd18d2e331522001fc51b54127ef4a5d473f53b1349c5cca2123562400e0986648b52e9407e348eaaed53bce49248b6e2641e6d793ca57cb2c360d6d51
@@ -16237,7 +15220,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"source-map-support@npm:^0.5.21, source-map-support@npm:~0.5.20":
+"source-map-support@npm:^0.5.21":
   version: 0.5.21
   resolution: "source-map-support@npm:0.5.21"
   dependencies:
@@ -16336,15 +15319,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"stacktrace-parser@npm:0.1.10":
-  version: 0.1.10
-  resolution: "stacktrace-parser@npm:0.1.10"
-  dependencies:
-    type-fest: "npm:^0.7.1"
-  checksum: 10/f4fbddfc09121d91e587b60de4beb4941108e967d71ad3a171812dc839b010ca374d064ad0a296295fed13acd103609d99a4224a25b4e67de13cae131f1901ee
-  languageName: node
-  linkType: hard
-
 "statuses@npm:2.0.1":
   version: 2.0.1
   resolution: "statuses@npm:2.0.1"
@@ -16387,15 +15361,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"string-length@npm:^6.0.0":
-  version: 6.0.0
-  resolution: "string-length@npm:6.0.0"
-  dependencies:
-    strip-ansi: "npm:^7.1.0"
-  checksum: 10/b171e9e193ec292ad71f8b2a36e20478bf1bac8cd5beec062fb126942d627dfd9311959e271e9ab7b0a383d16b85b9e25a183d15786e30f22104d152e7627f99
-  languageName: node
-  linkType: hard
-
 "string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3":
   version: 4.2.3
   resolution: "string-width@npm:4.2.3"
@@ -16455,7 +15420,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"strip-ansi@npm:^7.0.1, strip-ansi@npm:^7.1.0":
+"strip-ansi@npm:^7.0.1":
   version: 7.1.0
   resolution: "strip-ansi@npm:7.1.0"
   dependencies:
@@ -16579,15 +15544,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"supports-color@npm:^8.0.0":
-  version: 8.1.1
-  resolution: "supports-color@npm:8.1.1"
-  dependencies:
-    has-flag: "npm:^4.0.0"
-  checksum: 10/157b534df88e39c5518c5e78c35580c1eca848d7dbaf31bbe06cdfc048e22c7ff1a9d046ae17b25691128f631a51d9ec373c1b740c12ae4f0de6e292037e4282
-  languageName: node
-  linkType: hard
-
 "supports-preserve-symlinks-flag@npm:^1.0.0":
   version: 1.0.0
   resolution: "supports-preserve-symlinks-flag@npm:1.0.0"
@@ -16604,19 +15560,10 @@ __metadata:
   languageName: node
   linkType: hard
 
-"tabbable@npm:^6.0.1":
-  version: 6.1.1
-  resolution: "tabbable@npm:6.1.1"
-  checksum: 10/bdf4cfab5300c8ae83ab773be7e5725b9061f9972f340528e056016a7f8a022a12d794c7b2bbe5856cdda205047076421a5dced27d925347c0f02efcc47361f3
-  languageName: node
-  linkType: hard
-
-"tailwind-merge@npm:2.2.0":
-  version: 2.2.0
-  resolution: "tailwind-merge@npm:2.2.0"
-  dependencies:
-    "@babel/runtime": "npm:^7.23.5"
-  checksum: 10/ec2a249da3c7afc2df935f93dd896843c719a701bd692cf051eafb2b2350989da158e7af9cc976227e49c833501a91b06c42b80aa6721457eec2187a999c9be7
+"tabbable@npm:^6.0.0":
+  version: 6.2.0
+  resolution: "tabbable@npm:6.2.0"
+  checksum: 10/980fa73476026e99dcacfc0d6e000d41d42c8e670faf4682496d30c625495e412c4369694f2a15cf1e5252d22de3c396f2b62edbe8d60b5dadc40d09e3f2dde3
   languageName: node
   linkType: hard
 
@@ -16643,39 +15590,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"tailwindcss@npm:3.4.0":
-  version: 3.4.0
-  resolution: "tailwindcss@npm:3.4.0"
-  dependencies:
-    "@alloc/quick-lru": "npm:^5.2.0"
-    arg: "npm:^5.0.2"
-    chokidar: "npm:^3.5.3"
-    didyoumean: "npm:^1.2.2"
-    dlv: "npm:^1.1.3"
-    fast-glob: "npm:^3.3.0"
-    glob-parent: "npm:^6.0.2"
-    is-glob: "npm:^4.0.3"
-    jiti: "npm:^1.19.1"
-    lilconfig: "npm:^2.1.0"
-    micromatch: "npm:^4.0.5"
-    normalize-path: "npm:^3.0.0"
-    object-hash: "npm:^3.0.0"
-    picocolors: "npm:^1.0.0"
-    postcss: "npm:^8.4.23"
-    postcss-import: "npm:^15.1.0"
-    postcss-js: "npm:^4.0.1"
-    postcss-load-config: "npm:^4.0.1"
-    postcss-nested: "npm:^6.0.1"
-    postcss-selector-parser: "npm:^6.0.11"
-    resolve: "npm:^1.22.2"
-    sucrase: "npm:^3.32.0"
-  bin:
-    tailwind: lib/cli.js
-    tailwindcss: lib/cli.js
-  checksum: 10/e69de4856308b3a6bcd084cc6745b6e3dcf6623553414f042d0365adceb70d79e41ec97a2a38c3aea0d5a875aa1eb4e84e04ad35ea1f0f7debcb7150779eae52
-  languageName: node
-  linkType: hard
-
 "tailwindcss@npm:3.4.14":
   version: 3.4.14
   resolution: "tailwindcss@npm:3.4.14"
@@ -16709,13 +15623,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"tapable@npm:^2.1.1, tapable@npm:^2.2.0":
-  version: 2.2.1
-  resolution: "tapable@npm:2.2.1"
-  checksum: 10/1769336dd21481ae6347611ca5fca47add0962fd8e80466515032125eca0084a4f0ede11e65341b9c0018ef4e1cf1ad820adbb0fba7cc99865c6005734000b0a
-  languageName: node
-  linkType: hard
-
 "tar-fs@npm:^2.1.1":
   version: 2.1.1
   resolution: "tar-fs@npm:2.1.1"
@@ -16755,42 +15662,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"terser-webpack-plugin@npm:^5.3.10":
-  version: 5.3.10
-  resolution: "terser-webpack-plugin@npm:5.3.10"
-  dependencies:
-    "@jridgewell/trace-mapping": "npm:^0.3.20"
-    jest-worker: "npm:^27.4.5"
-    schema-utils: "npm:^3.1.1"
-    serialize-javascript: "npm:^6.0.1"
-    terser: "npm:^5.26.0"
-  peerDependencies:
-    webpack: ^5.1.0
-  peerDependenciesMeta:
-    "@swc/core":
-      optional: true
-    esbuild:
-      optional: true
-    uglify-js:
-      optional: true
-  checksum: 10/fb1c2436ae1b4e983be043fa0a3d355c047b16b68f102437d08c736d7960c001e7420e2f722b9d99ce0dc70ca26a68cc63c0b82bc45f5b48671142b352a9d938
-  languageName: node
-  linkType: hard
-
-"terser@npm:^5.26.0":
-  version: 5.36.0
-  resolution: "terser@npm:5.36.0"
-  dependencies:
-    "@jridgewell/source-map": "npm:^0.3.3"
-    acorn: "npm:^8.8.2"
-    commander: "npm:^2.20.0"
-    source-map-support: "npm:~0.5.20"
-  bin:
-    terser: bin/terser
-  checksum: 10/52e641419f79d7ccdecd136b9a8e0b03f93cfe3b53cce556253aaabc347d3f2af1745419b9e622abc95d592084dc76e57774b8f9e68d29d543f4dd11c044daf4
-  languageName: node
-  linkType: hard
-
 "thenify-all@npm:^1.0.0":
   version: 1.6.0
   resolution: "thenify-all@npm:1.6.0"
@@ -16949,13 +15820,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"ts-toolbelt@npm:^9.6.0":
-  version: 9.6.0
-  resolution: "ts-toolbelt@npm:9.6.0"
-  checksum: 10/2c2dea2631dbd7372a79cccc6d09a377a6ca2f319f767fd239d2e312cd1d9165a90f8c1777a047227bfdcda6aeba3addbadce88fdfc7f43caf4534d385a43c82
-  languageName: node
-  linkType: hard
-
 "tsconfck@npm:^3.0.3":
   version: 3.0.3
   resolution: "tsconfck@npm:3.0.3"
@@ -17037,13 +15901,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"type-fest@npm:^0.7.1":
-  version: 0.7.1
-  resolution: "type-fest@npm:0.7.1"
-  checksum: 10/0699b6011bb3f7fac5fd5385e2e09432cde08fa89283f24084f29db00ec69a5445cd3aa976438ec74fc552a9a96f4a04ed390b5cb62eb7483aa4b6e5b935e059
-  languageName: node
-  linkType: hard
-
 "type-fest@npm:^0.8.1":
   version: 0.8.1
   resolution: "type-fest@npm:0.8.1"
@@ -17051,27 +15908,13 @@ __metadata:
   languageName: node
   linkType: hard
 
-"type-fest@npm:^4.12.0":
-  version: 4.13.1
-  resolution: "type-fest@npm:4.13.1"
-  checksum: 10/3a5db31e45d79dae6d7810b3e6180fed117cfeec7b9f0d3ebbc3780dc53297f9f0dea1752cd8d1f42c2f8206f9a1091a18aa38eb3cb9923a4c79aea480404182
-  languageName: node
-  linkType: hard
-
-"type-fest@npm:^4.18.1":
+"type-fest@npm:^4.18.1, type-fest@npm:^4.26.1":
   version: 4.26.1
   resolution: "type-fest@npm:4.26.1"
   checksum: 10/b82676194f80af228cb852e320d2ea8381c89d667d2e4d9f2bdfc8f254bccc039c7741a90c53617a4de0c9fdca8265ed18eb0888cd628f391c5c381c33a9f94b
   languageName: node
   linkType: hard
 
-"type-fest@npm:^4.3.1":
-  version: 4.19.0
-  resolution: "type-fest@npm:4.19.0"
-  checksum: 10/746294c1f463913425a4b40e9160ed1ea5cd1f877587789cbd42e01c6b67be9c55daf75e0d4787da584b98a09487df69e89b44c934d497e5d035800e115dc1e9
-  languageName: node
-  linkType: hard
-
 "type-is@npm:~1.6.18":
   version: 1.6.18
   resolution: "type-is@npm:1.6.18"
@@ -17126,16 +15969,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"typescript@npm:5.1.6":
-  version: 5.1.6
-  resolution: "typescript@npm:5.1.6"
-  bin:
-    tsc: bin/tsc
-    tsserver: bin/tsserver
-  checksum: 10/f347cde665cf43dc4c1c7d9821c7d9bbec3c3914f4bdd82ee490e9fb9f6d99036ed8666463b6a192dd005eeef333c5087d5931bdd51ec853436ff9a670a7417e
-  languageName: node
-  linkType: hard
-
 "typescript@npm:5.6.3":
   version: 5.6.3
   resolution: "typescript@npm:5.6.3"
@@ -17156,16 +15989,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"typescript@patch:typescript@npm%3A5.1.6#optional!builtin<compat/typescript>":
-  version: 5.1.6
-  resolution: "typescript@patch:typescript@npm%3A5.1.6#optional!builtin<compat/typescript>::version=5.1.6&hash=5da071"
-  bin:
-    tsc: bin/tsc
-    tsserver: bin/tsserver
-  checksum: 10/f5481fa3ba0eee8970f46708d13c05650a865ad093b586fc9573f425c64c57ca97e3308e110bb528deb3ccebe83f6fd7b5a8ac90018038da96326a9ccdf8e77c
-  languageName: node
-  linkType: hard
-
 "typescript@patch:typescript@npm%3A5.6.3#optional!builtin<compat/typescript>":
   version: 5.6.3
   resolution: "typescript@patch:typescript@npm%3A5.6.3#optional!builtin<compat/typescript>::version=5.6.3&hash=5adc0c"
@@ -17450,15 +16273,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"uri-js@npm:^4.2.2":
-  version: 4.4.1
-  resolution: "uri-js@npm:4.4.1"
-  dependencies:
-    punycode: "npm:^2.1.0"
-  checksum: 10/b271ca7e3d46b7160222e3afa3e531505161c9a4e097febae9664e4b59912f4cbe94861361a4175edac3a03fee99d91e44b6a58c17a634bc5a664b19fc76fbcb
-  languageName: node
-  linkType: hard
-
 "urlpattern-polyfill@npm:^10.0.0":
   version: 10.0.0
   resolution: "urlpattern-polyfill@npm:10.0.0"
@@ -17627,6 +16441,18 @@ __metadata:
   languageName: node
   linkType: hard
 
+"valibot@npm:^0.41.0":
+  version: 0.41.0
+  resolution: "valibot@npm:0.41.0"
+  peerDependencies:
+    typescript: ">=5"
+  peerDependenciesMeta:
+    typescript:
+      optional: true
+  checksum: 10/794b34056efd0243b2d97329284752f584a586803c22a996bd962aefaf570a7899890dedc6487cc2624baa2a5c8d8f14602a4a7bc20b2b6e5e78a3099d7cf7ae
+  languageName: node
+  linkType: hard
+
 "validate-npm-package-license@npm:^3.0.1, validate-npm-package-license@npm:^3.0.4":
   version: 3.0.4
   resolution: "validate-npm-package-license@npm:3.0.4"
@@ -17722,9 +16548,24 @@ __metadata:
   languageName: node
   linkType: hard
 
-"vite-tsconfig-paths@npm:5.0.1":
-  version: 5.0.1
-  resolution: "vite-tsconfig-paths@npm:5.0.1"
+"vite-node@npm:^1.6.0":
+  version: 1.6.0
+  resolution: "vite-node@npm:1.6.0"
+  dependencies:
+    cac: "npm:^6.7.14"
+    debug: "npm:^4.3.4"
+    pathe: "npm:^1.1.1"
+    picocolors: "npm:^1.0.0"
+    vite: "npm:^5.0.0"
+  bin:
+    vite-node: vite-node.mjs
+  checksum: 10/40230598c3c285cf65f407ac50b1c7753ab2dfa960de76ec1a95a0ce0ff963919d065c29ba538d9fb2fba3e0703a051d49d1ad6486001ba2f90616cc706ddc3d
+  languageName: node
+  linkType: hard
+
+"vite-tsconfig-paths@npm:5.1.1":
+  version: 5.1.1
+  resolution: "vite-tsconfig-paths@npm:5.1.1"
   dependencies:
     debug: "npm:^4.1.1"
     globrex: "npm:^0.1.2"
@@ -17734,11 +16575,11 @@ __metadata:
   peerDependenciesMeta:
     vite:
       optional: true
-  checksum: 10/e3cf1a2b997747cec6af83c3f9acc057e7f452ef91c3f38a9e32eb2e6cc6c723f51026e38f5d114296fc499b10b36bb56d668d9613a7367f5ecf23adb78642d7
+  checksum: 10/82c73b0db582478c5b8243867b5d23f6d45577e16693ddd4e9d91cd954fefd9e6e10966eac63d5ee0ae4915b1129b4ea63001c936ea2b5909ba3cb000098ea7b
   languageName: node
   linkType: hard
 
-"vite@npm:5.4.10":
+"vite@npm:5.4.10, vite@npm:^5.0.0":
   version: 5.4.10
   resolution: "vite@npm:5.4.10"
   dependencies:
@@ -17830,16 +16671,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"watchpack@npm:^2.4.1":
-  version: 2.4.2
-  resolution: "watchpack@npm:2.4.2"
-  dependencies:
-    glob-to-regexp: "npm:^0.4.1"
-    graceful-fs: "npm:^4.1.2"
-  checksum: 10/6bd4c051d9af189a6c781c3158dcb3069f432a0c144159eeb0a44117412105c61b2b683a5c9eebc4324625e0e9b76536387d0ba354594fa6cbbdf1ef60bee4c3
-  languageName: node
-  linkType: hard
-
 "wcwidth@npm:^1.0.1":
   version: 1.0.1
   resolution: "wcwidth@npm:1.0.1"
@@ -17876,49 +16707,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"webpack-sources@npm:^3.2.3":
-  version: 3.2.3
-  resolution: "webpack-sources@npm:3.2.3"
-  checksum: 10/a661f41795d678b7526ae8a88cd1b3d8ce71a7d19b6503da8149b2e667fc7a12f9b899041c1665d39e38245ed3a59ab68de648ea31040c3829aa695a5a45211d
-  languageName: node
-  linkType: hard
-
-"webpack@npm:^5":
-  version: 5.95.0
-  resolution: "webpack@npm:5.95.0"
-  dependencies:
-    "@types/estree": "npm:^1.0.5"
-    "@webassemblyjs/ast": "npm:^1.12.1"
-    "@webassemblyjs/wasm-edit": "npm:^1.12.1"
-    "@webassemblyjs/wasm-parser": "npm:^1.12.1"
-    acorn: "npm:^8.7.1"
-    acorn-import-attributes: "npm:^1.9.5"
-    browserslist: "npm:^4.21.10"
-    chrome-trace-event: "npm:^1.0.2"
-    enhanced-resolve: "npm:^5.17.1"
-    es-module-lexer: "npm:^1.2.1"
-    eslint-scope: "npm:5.1.1"
-    events: "npm:^3.2.0"
-    glob-to-regexp: "npm:^0.4.1"
-    graceful-fs: "npm:^4.2.11"
-    json-parse-even-better-errors: "npm:^2.3.1"
-    loader-runner: "npm:^4.2.0"
-    mime-types: "npm:^2.1.27"
-    neo-async: "npm:^2.6.2"
-    schema-utils: "npm:^3.2.0"
-    tapable: "npm:^2.1.1"
-    terser-webpack-plugin: "npm:^5.3.10"
-    watchpack: "npm:^2.4.1"
-    webpack-sources: "npm:^3.2.3"
-  peerDependenciesMeta:
-    webpack-cli:
-      optional: true
-  bin:
-    webpack: bin/webpack.js
-  checksum: 10/0377ad3a550b041f26237c96fb55754625b0ce6bae83c1c2447e3262ad056b0b0ad770dcbb92b59f188e9a2bd56155ce910add17dcf023cfbe78bdec774380c1
-  languageName: node
-  linkType: hard
-
 "whatwg-url@npm:^5.0.0":
   version: 5.0.0
   resolution: "whatwg-url@npm:5.0.0"
@@ -18065,13 +16853,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"xmlhttprequest-ssl@npm:~2.0.0":
-  version: 2.0.0
-  resolution: "xmlhttprequest-ssl@npm:2.0.0"
-  checksum: 10/3c2edfce0c49c7a494ed16c87e6897c9e3eba29763a5505526de83ddefd195d224fa5cdf41092298c99cd6ee473c9f259a0679f6ff3b8a9535dcd09900db91f9
-  languageName: node
-  linkType: hard
-
 "xtend@npm:~4.0.1":
   version: 4.0.2
   resolution: "xtend@npm:4.0.2"
@@ -18200,20 +16981,13 @@ __metadata:
   languageName: node
   linkType: hard
 
-"zod@npm:3.23.8, zod@npm:^3.17.3, zod@npm:^3.23.5, zod@npm:^3.23.8":
+"zod@npm:3.23.8, zod@npm:^3.23.5":
   version: 3.23.8
   resolution: "zod@npm:3.23.8"
   checksum: 10/846fd73e1af0def79c19d510ea9e4a795544a67d5b34b7e1c4d0425bf6bfd1c719446d94cdfa1721c1987d891321d61f779e8236fde517dc0e524aa851a6eff1
   languageName: node
   linkType: hard
 
-"zod@npm:^3.22.2":
-  version: 3.23.4
-  resolution: "zod@npm:3.23.4"
-  checksum: 10/29117ce59f16af155d9a3aab024d18e858e55b4b51c1f848772516ec6f019e617a0cdaf4c6e20f15154360a9f4c160056aba34502ec68072c8f0af31dfd653d6
-  languageName: node
-  linkType: hard
-
 "zodix@npm:0.4.4":
   version: 0.4.4
   resolution: "zodix@npm:0.4.4"


Test patch: