diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index c83769b..17c265f 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -7,6 +7,9 @@
"": {
"name": "frontend",
"version": "0.0.1",
+ "dependencies": {
+ "@mdi/js": "^7.4.47"
+ },
"devDependencies": {
"@sveltejs/adapter-auto": "^7.0.0",
"@sveltejs/adapter-static": "^3.0.10",
@@ -521,6 +524,11 @@
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
+ "node_modules/@mdi/js": {
+ "version": "7.4.47",
+ "resolved": "https://registry.npmjs.org/@mdi/js/-/js-7.4.47.tgz",
+ "integrity": "sha512-KPnNOtm5i2pMabqZxpUz7iQf+mfrYZyKCZ8QNz85czgEt7cuHcGorWfdzUMWYA0SD+a6Hn4FmJ+YhzzzjkTZrQ=="
+ },
"node_modules/@polka/url": {
"version": "1.0.0-next.29",
"resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz",
@@ -2550,6 +2558,11 @@
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
+ "@mdi/js": {
+ "version": "7.4.47",
+ "resolved": "https://registry.npmjs.org/@mdi/js/-/js-7.4.47.tgz",
+ "integrity": "sha512-KPnNOtm5i2pMabqZxpUz7iQf+mfrYZyKCZ8QNz85czgEt7cuHcGorWfdzUMWYA0SD+a6Hn4FmJ+YhzzzjkTZrQ=="
+ },
"@polka/url": {
"version": "1.0.0-next.29",
"resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz",
diff --git a/frontend/package.json b/frontend/package.json
index 5e3776e..1a27bf4 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -27,5 +27,8 @@
"tailwindcss": "^4.2.2",
"typescript": "^5.9.3",
"vite": "^7.3.1"
+ },
+ "dependencies": {
+ "@mdi/js": "^7.4.47"
}
}
diff --git a/frontend/src/lib/components/IconPicker.svelte b/frontend/src/lib/components/IconPicker.svelte
new file mode 100644
index 0000000..442e6d9
--- /dev/null
+++ b/frontend/src/lib/components/IconPicker.svelte
@@ -0,0 +1,81 @@
+
+
+
+
+
+ {#if open}
+
{ open = false; search = ''; }}>
+
+
+
+
+
+ {#each filtered() as iconName}
+
+ {/each}
+
+
+ {/if}
+
diff --git a/frontend/src/lib/components/MdiIcon.svelte b/frontend/src/lib/components/MdiIcon.svelte
new file mode 100644
index 0000000..31c4ecc
--- /dev/null
+++ b/frontend/src/lib/components/MdiIcon.svelte
@@ -0,0 +1,13 @@
+
+
+{#if name && getPath(name)}
+
+{/if}
diff --git a/frontend/src/routes/servers/+page.svelte b/frontend/src/routes/servers/+page.svelte
index 9da4a94..d2d04c6 100644
--- a/frontend/src/routes/servers/+page.svelte
+++ b/frontend/src/routes/servers/+page.svelte
@@ -5,11 +5,13 @@
import PageHeader from '$lib/components/PageHeader.svelte';
import Card from '$lib/components/Card.svelte';
import Loading from '$lib/components/Loading.svelte';
+ import IconPicker from '$lib/components/IconPicker.svelte';
+ import MdiIcon from '$lib/components/MdiIcon.svelte';
let servers = $state([]);
let showForm = $state(false);
let editing = $state(null);
- let form = $state({ name: 'Immich', url: '', api_key: '' });
+ let form = $state({ name: 'Immich', url: '', api_key: '', icon: '' });
let error = $state('');
let submitting = $state(false);
let loaded = $state(false);
@@ -27,11 +29,11 @@
}
function openNew() {
- form = { name: 'Immich', url: '', api_key: '' };
+ form = { name: 'Immich', url: '', api_key: '', icon: '' };
editing = null; showForm = true;
}
function edit(s: any) {
- form = { name: s.name, url: s.url, api_key: '' };
+ form = { name: s.name, url: s.url, api_key: '', icon: s.icon || '' };
editing = s.id; showForm = true;
}
@@ -72,8 +74,13 @@
{#if error}{error}
{/if}