diff --git a/web/package-lock.json b/web/package-lock.json
index 764e975518..76278058f1 100644
--- a/web/package-lock.json
+++ b/web/package-lock.json
@@ -11,7 +11,7 @@
"dependencies": {
"@formatjs/icu-messageformat-parser": "^2.9.8",
"@immich/sdk": "file:../open-api/typescript-sdk",
- "@immich/ui": "^0.19.1",
+ "@immich/ui": "^0.20.0",
"@mapbox/mapbox-gl-rtl-text": "0.2.3",
"@mdi/js": "^7.4.47",
"@photo-sphere-viewer/core": "^5.11.5",
@@ -88,7 +88,7 @@
"@oazapfts/runtime": "^1.0.2"
},
"devDependencies": {
- "@types/node": "^22.14.1",
+ "@types/node": "^22.15.16",
"typescript": "^5.3.3"
}
},
@@ -1337,9 +1337,9 @@
"link": true
},
"node_modules/@immich/ui": {
- "version": "0.19.1",
- "resolved": "https://registry.npmjs.org/@immich/ui/-/ui-0.19.1.tgz",
- "integrity": "sha512-PyJ+OAEgBu1HTScMMui2KpBjMYkCw3nhVloYorOaB5lKOlNh7mqz5xBCNo/UVwxLXyAOFuBLU05lv3hWNveSKQ==",
+ "version": "0.20.0",
+ "resolved": "https://registry.npmjs.org/@immich/ui/-/ui-0.20.0.tgz",
+ "integrity": "sha512-euK3N0AhQLB28qFteorRKyDUdet3UpA9MEAd8eBLbTtTFZKvZismBGa4J7pHbQrSkuOlbmJD5LJuM575q8zigQ==",
"license": "GNU Affero General Public License version 3",
"dependencies": {
"@mdi/js": "^7.4.47",
diff --git a/web/package.json b/web/package.json
index 2806b34b32..8a9f6472b6 100644
--- a/web/package.json
+++ b/web/package.json
@@ -27,7 +27,7 @@
"dependencies": {
"@formatjs/icu-messageformat-parser": "^2.9.8",
"@immich/sdk": "file:../open-api/typescript-sdk",
- "@immich/ui": "^0.19.1",
+ "@immich/ui": "^0.20.0",
"@mapbox/mapbox-gl-rtl-text": "0.2.3",
"@mdi/js": "^7.4.47",
"@photo-sphere-viewer/core": "^5.11.5",
diff --git a/web/src/app.css b/web/src/app.css
index c3276010c8..329d9ce82d 100644
--- a/web/src/app.css
+++ b/web/src/app.css
@@ -31,7 +31,6 @@
--immich-ui-danger: 200 60 60;
--immich-ui-warning: 216 143 64;
--immich-ui-info: 8 111 230;
- --immich-ui-default-border: 209 213 219;
--immich-ui-gray: 246 246 246;
}
@@ -44,7 +43,6 @@
--immich-ui-success: 72 237 152;
--immich-ui-warning: 254 197 132;
--immich-ui-info: 121 183 254;
- --immich-ui-default-border: 55 65 81;
--immich-ui-gray: 33 33 33;
}
}
diff --git a/web/src/lib/components/layouts/AdminPageLayout.svelte b/web/src/lib/components/layouts/AdminPageLayout.svelte
new file mode 100644
index 0000000000..4693035a43
--- /dev/null
+++ b/web/src/lib/components/layouts/AdminPageLayout.svelte
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/web/src/lib/components/layouts/PageContent.svelte b/web/src/lib/components/layouts/PageContent.svelte
new file mode 100644
index 0000000000..bfd291b074
--- /dev/null
+++ b/web/src/lib/components/layouts/PageContent.svelte
@@ -0,0 +1,26 @@
+
+
+
+
+
{title}
+ {@render buttons?.()}
+
+
+
+ {@render children?.()}
+
+
+
diff --git a/web/src/lib/components/layouts/user-page-layout.svelte b/web/src/lib/components/layouts/user-page-layout.svelte
index b1fdd89a6d..8ecddaab78 100644
--- a/web/src/lib/components/layouts/user-page-layout.svelte
+++ b/web/src/lib/components/layouts/user-page-layout.svelte
@@ -5,7 +5,6 @@
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/routes/admin/jobs-status/+page.svelte b/web/src/routes/admin/jobs-status/+page.svelte
index 6636d748cf..9985fd949d 100644
--- a/web/src/routes/admin/jobs-status/+page.svelte
+++ b/web/src/routes/admin/jobs-status/+page.svelte
@@ -1,6 +1,6 @@
-
+
{#snippet buttons()}
+
diff --git a/web/src/routes/admin/library-management/+page.svelte b/web/src/routes/admin/library-management/+page.svelte
index f8e643bf88..401a890014 100644
--- a/web/src/routes/admin/library-management/+page.svelte
+++ b/web/src/routes/admin/library-management/+page.svelte
@@ -4,7 +4,7 @@
import LibraryRenameForm from '$lib/components/forms/library-rename-form.svelte';
import LibraryScanSettingsForm from '$lib/components/forms/library-scan-settings-form.svelte';
import LibraryUserPickerForm from '$lib/components/forms/library-user-picker-form.svelte';
- import UserPageLayout from '$lib/components/layouts/user-page-layout.svelte';
+ import AdminPageLayout from '$lib/components/layouts/AdminPageLayout.svelte';
import ButtonContextMenu from '$lib/components/shared-components/context-menu/button-context-menu.svelte';
import MenuOption from '$lib/components/shared-components/context-menu/menu-option.svelte';
import EmptyPlaceholder from '$lib/components/shared-components/empty-placeholder.svelte';
@@ -240,7 +240,7 @@
};
-
+
{#snippet buttons()}
{#if libraries.length > 0}
@@ -363,7 +363,7 @@
{/if}
-
+
{#if renameLibrary !== undefined}
import ServerStatsPanel from '$lib/components/admin-page/server-stats/server-stats-panel.svelte';
- import UserPageLayout from '$lib/components/layouts/user-page-layout.svelte';
+ import AdminPageLayout from '$lib/components/layouts/AdminPageLayout.svelte';
+ import { asyncTimeout } from '$lib/utils';
import { getServerStatistics } from '@immich/sdk';
import { onDestroy, onMount } from 'svelte';
import type { PageData } from './$types';
- import { asyncTimeout } from '$lib/utils';
interface Props {
data: PageData;
@@ -26,10 +26,10 @@
});
-
+
-
+
diff --git a/web/src/routes/admin/system-settings/+page.svelte b/web/src/routes/admin/system-settings/+page.svelte
index 1ac9f0b6fd..e053eea179 100644
--- a/web/src/routes/admin/system-settings/+page.svelte
+++ b/web/src/routes/admin/system-settings/+page.svelte
@@ -19,7 +19,7 @@
import TrashSettings from '$lib/components/admin-page/settings/trash-settings/trash-settings.svelte';
import UserSettings from '$lib/components/admin-page/settings/user-settings/user-settings.svelte';
import SearchBar from '$lib/components/elements/search-bar.svelte';
- import UserPageLayout from '$lib/components/layouts/user-page-layout.svelte';
+ import AdminPageLayout from '$lib/components/layouts/AdminPageLayout.svelte';
import SettingAccordionState from '$lib/components/shared-components/settings/setting-accordion-state.svelte';
import SettingAccordion from '$lib/components/shared-components/settings/setting-accordion.svelte';
import { QueryParameter } from '$lib/constants';
@@ -241,7 +241,7 @@
-
+
{#snippet buttons()}
@@ -301,4 +301,4 @@
{/snippet}
-
+
diff --git a/web/src/routes/admin/users/+page.svelte b/web/src/routes/admin/users/+page.svelte
index bd8ccf59f6..36f1f9a5b8 100644
--- a/web/src/routes/admin/users/+page.svelte
+++ b/web/src/routes/admin/users/+page.svelte
@@ -1,7 +1,7 @@
-
+
{#snippet buttons()}
+
diff --git a/web/src/routes/admin/users/[id]/+page.svelte b/web/src/routes/admin/users/[id]/+page.svelte
index 03f5e64963..6b0b0234fb 100644
--- a/web/src/routes/admin/users/[id]/+page.svelte
+++ b/web/src/routes/admin/users/[id]/+page.svelte
@@ -1,6 +1,6 @@
-
+
{#snippet buttons()}
{#if canResetPassword}
@@ -365,4 +365,4 @@
-
+
diff --git a/web/tailwind.config.js b/web/tailwind.config.js
index 2e13e5997d..bd6a834427 100644
--- a/web/tailwind.config.js
+++ b/web/tailwind.config.js
@@ -40,7 +40,7 @@ export default {
},
borderColor: ({ theme }) => ({
...theme('colors'),
- DEFAULT: 'rgb(var(--immich-ui-default-border) / )',
+ DEFAULT: 'rgb(var(--immich-ui-gray) / )',
}),
fontFamily: {
'immich-mono': ['Overpass Mono', 'monospace'],