From 8eb57d276c7fbc2d52669fd960a3bcb8cf61b312 Mon Sep 17 00:00:00 2001 From: Sam Chau Date: Wed, 28 Jan 2026 23:44:41 +1030 Subject: [PATCH] style(mm): card views for all media management pages --- src/routes/arr/views/CardView.svelte | 14 +-- src/routes/databases/views/CardView.svelte | 10 +-- .../[databaseId]/media-settings/+page.svelte | 9 +- .../media-settings/views/CardView.svelte | 85 +++++++++++++++++++ .../[databaseId]/naming/+page.svelte | 9 +- .../[databaseId]/naming/views/CardView.svelte | 71 ++++++++++++++++ .../quality-definitions/+page.svelte | 9 +- .../quality-definitions/views/CardView.svelte | 67 +++++++++++++++ 8 files changed, 256 insertions(+), 18 deletions(-) create mode 100644 src/routes/media-management/[databaseId]/media-settings/views/CardView.svelte create mode 100644 src/routes/media-management/[databaseId]/naming/views/CardView.svelte create mode 100644 src/routes/media-management/[databaseId]/quality-definitions/views/CardView.svelte diff --git a/src/routes/arr/views/CardView.svelte b/src/routes/arr/views/CardView.svelte index 560bdae..05c5c60 100644 --- a/src/routes/arr/views/CardView.svelte +++ b/src/routes/arr/views/CardView.svelte @@ -74,7 +74,7 @@

{instance.name}

-
+
{#if instance.enabled} Enabled {:else} @@ -85,22 +85,22 @@
- -
+ +
e.stopPropagation()} - class="flex items-center justify-center rounded-lg border border-neutral-200 bg-neutral-50 p-2.5 text-neutral-600 transition-colors hover:bg-neutral-100 active:bg-neutral-200 dark:border-neutral-700 dark:bg-neutral-800 dark:text-neutral-400 dark:hover:bg-neutral-700 dark:active:bg-neutral-600" + class="rounded-md p-1.5 text-neutral-400 transition-colors hover:text-neutral-600 dark:text-neutral-500 dark:hover:text-neutral-300" > - +
diff --git a/src/routes/databases/views/CardView.svelte b/src/routes/databases/views/CardView.svelte index c8b0e31..73771b8 100644 --- a/src/routes/databases/views/CardView.svelte +++ b/src/routes/databases/views/CardView.svelte @@ -113,21 +113,21 @@ -
+
e.stopPropagation()} - class="flex items-center justify-center rounded-lg border border-neutral-200 bg-neutral-50 p-2.5 text-neutral-600 transition-colors active:bg-neutral-200 dark:border-neutral-700 dark:bg-neutral-800 dark:text-neutral-300 dark:active:bg-neutral-700" + class="rounded-md p-1.5 text-neutral-400 transition-colors hover:text-neutral-600 dark:text-neutral-500 dark:hover:text-neutral-300" > - +
diff --git a/src/routes/media-management/[databaseId]/media-settings/+page.svelte b/src/routes/media-management/[databaseId]/media-settings/+page.svelte index bfdac0c..4892540 100644 --- a/src/routes/media-management/[databaseId]/media-settings/+page.svelte +++ b/src/routes/media-management/[databaseId]/media-settings/+page.svelte @@ -2,7 +2,9 @@ import ActionsBar from '$ui/actions/ActionsBar.svelte'; import ActionButton from '$ui/actions/ActionButton.svelte'; import SearchAction from '$ui/actions/SearchAction.svelte'; + import ViewToggle from '$ui/actions/ViewToggle.svelte'; import TableView from './views/TableView.svelte'; + import CardView from './views/CardView.svelte'; import { createDataPageStore } from '$lib/client/stores/dataPage'; import { goto } from '$app/navigation'; import { Plus } from 'lucide-svelte'; @@ -11,7 +13,7 @@ export let data: PageData; // Initialize data page store - const { search, filtered, setItems } = createDataPageStore(data.mediaSettingsConfigs, { + const { search, view, filtered, setItems } = createDataPageStore(data.mediaSettingsConfigs, { storageKey: 'mediaSettingsView', searchKeys: ['name'] }); @@ -27,6 +29,7 @@ icon={Plus} on:click={() => goto(`/media-management/${data.currentDatabase.id}/media-settings/new`)} /> + @@ -45,7 +48,9 @@ >

No media settings configs match your search

- {:else} + {:else if $view === 'table'} + {:else} + {/if} diff --git a/src/routes/media-management/[databaseId]/media-settings/views/CardView.svelte b/src/routes/media-management/[databaseId]/media-settings/views/CardView.svelte new file mode 100644 index 0000000..fb00a4f --- /dev/null +++ b/src/routes/media-management/[databaseId]/media-settings/views/CardView.svelte @@ -0,0 +1,85 @@ + + +
+ {#each configs as config} + {@const prConfig = propersRepacksConfig[config.propers_repacks] || { + variant: 'neutral', + label: config.propers_repacks + }} +
handleCardClick(config)} + on:keydown={(e) => e.key === 'Enter' && handleCardClick(config)} + role="button" + tabindex="0" + class="group flex cursor-pointer items-center gap-4 rounded-lg border border-neutral-200 bg-white p-3 transition-all hover:border-neutral-300 hover:shadow-md active:bg-neutral-50 dark:border-neutral-800 dark:bg-neutral-900 dark:hover:border-neutral-700 dark:active:bg-neutral-800" + > + +
+
+ {#if !loadedImages.has(config.name)} +
+ {/if} + {config.arr_type} logo handleImageLoad(config.name)} + /> +
+
+

+ {config.name} +

+
+ {prConfig.label} + {#if config.enable_media_info} + Media Info + {:else} + No Media Info + {/if} +
+
+
+
+ {/each} +
diff --git a/src/routes/media-management/[databaseId]/naming/+page.svelte b/src/routes/media-management/[databaseId]/naming/+page.svelte index fd1f654..46090d8 100644 --- a/src/routes/media-management/[databaseId]/naming/+page.svelte +++ b/src/routes/media-management/[databaseId]/naming/+page.svelte @@ -2,7 +2,9 @@ import ActionsBar from '$ui/actions/ActionsBar.svelte'; import ActionButton from '$ui/actions/ActionButton.svelte'; import SearchAction from '$ui/actions/SearchAction.svelte'; + import ViewToggle from '$ui/actions/ViewToggle.svelte'; import TableView from './views/TableView.svelte'; + import CardView from './views/CardView.svelte'; import { createDataPageStore } from '$lib/client/stores/dataPage'; import { goto } from '$app/navigation'; import { Plus } from 'lucide-svelte'; @@ -11,7 +13,7 @@ export let data: PageData; // Initialize data page store - const { search, filtered, setItems } = createDataPageStore(data.namingConfigs, { + const { search, view, filtered, setItems } = createDataPageStore(data.namingConfigs, { storageKey: 'namingSettingsView', searchKeys: ['name'] }); @@ -27,6 +29,7 @@ icon={Plus} on:click={() => goto(`/media-management/${data.currentDatabase.id}/naming/new`)} /> + @@ -45,7 +48,9 @@ >

No naming configs match your search

- {:else} + {:else if $view === 'table'} + {:else} + {/if} diff --git a/src/routes/media-management/[databaseId]/naming/views/CardView.svelte b/src/routes/media-management/[databaseId]/naming/views/CardView.svelte new file mode 100644 index 0000000..00415bf --- /dev/null +++ b/src/routes/media-management/[databaseId]/naming/views/CardView.svelte @@ -0,0 +1,71 @@ + + +
+ {#each configs as config} +
handleCardClick(config)} + on:keydown={(e) => e.key === 'Enter' && handleCardClick(config)} + role="button" + tabindex="0" + class="group flex cursor-pointer items-center gap-4 rounded-lg border border-neutral-200 bg-white p-3 transition-all hover:border-neutral-300 hover:shadow-md active:bg-neutral-50 dark:border-neutral-800 dark:bg-neutral-900 dark:hover:border-neutral-700 dark:active:bg-neutral-800" + > + +
+
+ {#if !loadedImages.has(config.name)} +
+ {/if} + {config.arr_type} logo handleImageLoad(config.name)} + /> +
+
+

+ {config.name} +

+
+ {#if config.rename} + Rename Enabled + {:else} + Rename Disabled + {/if} +
+
+
+
+ {/each} +
diff --git a/src/routes/media-management/[databaseId]/quality-definitions/+page.svelte b/src/routes/media-management/[databaseId]/quality-definitions/+page.svelte index 970b70a..e01db63 100644 --- a/src/routes/media-management/[databaseId]/quality-definitions/+page.svelte +++ b/src/routes/media-management/[databaseId]/quality-definitions/+page.svelte @@ -2,7 +2,9 @@ import ActionsBar from '$ui/actions/ActionsBar.svelte'; import ActionButton from '$ui/actions/ActionButton.svelte'; import SearchAction from '$ui/actions/SearchAction.svelte'; + import ViewToggle from '$ui/actions/ViewToggle.svelte'; import TableView from './views/TableView.svelte'; + import CardView from './views/CardView.svelte'; import { createDataPageStore } from '$lib/client/stores/dataPage'; import { goto } from '$app/navigation'; import { Plus } from 'lucide-svelte'; @@ -11,7 +13,7 @@ export let data: PageData; // Initialize data page store - const { search, filtered, setItems } = createDataPageStore(data.qualityDefinitionsConfigs, { + const { search, view, filtered, setItems } = createDataPageStore(data.qualityDefinitionsConfigs, { storageKey: 'qualityDefinitionsView', searchKeys: ['name'] }); @@ -27,6 +29,7 @@ icon={Plus} on:click={() => goto(`/media-management/${data.currentDatabase.id}/quality-definitions/new`)} /> + @@ -45,7 +48,9 @@ >

No quality definitions configs match your search

- {:else} + {:else if $view === 'table'} + {:else} + {/if} diff --git a/src/routes/media-management/[databaseId]/quality-definitions/views/CardView.svelte b/src/routes/media-management/[databaseId]/quality-definitions/views/CardView.svelte new file mode 100644 index 0000000..621e0b7 --- /dev/null +++ b/src/routes/media-management/[databaseId]/quality-definitions/views/CardView.svelte @@ -0,0 +1,67 @@ + + +
+ {#each configs as config} +
handleCardClick(config)} + on:keydown={(e) => e.key === 'Enter' && handleCardClick(config)} + role="button" + tabindex="0" + class="group flex cursor-pointer items-center gap-4 rounded-lg border border-neutral-200 bg-white p-3 transition-all hover:border-neutral-300 hover:shadow-md active:bg-neutral-50 dark:border-neutral-800 dark:bg-neutral-900 dark:hover:border-neutral-700 dark:active:bg-neutral-800" + > + +
+
+ {#if !loadedImages.has(config.name)} +
+ {/if} + {config.arr_type} logo handleImageLoad(config.name)} + /> +
+
+

+ {config.name} +

+
+ {config.quality_count} qualities +
+
+
+
+ {/each} +