diff --git a/interface/package-lock.json b/interface/package-lock.json
index 863fcf5f5..0dcacdd78 100644
--- a/interface/package-lock.json
+++ b/interface/package-lock.json
@@ -14,7 +14,7 @@
"jwt-decode": "^4.0.0",
"luxon": "^3.7.1",
"msgpack-lite": "^0.1.26",
- "svelte-dnd-list": "^0.1.8",
+ "svelte-dnd-action": "^0.9.65",
"svelte-modals": "^2.0.1"
},
"devDependencies": {
@@ -4132,11 +4132,14 @@
"url": "https://github.com/sponsors/jonschlinkert"
}
},
- "node_modules/svelte-dnd-list": {
- "version": "0.1.8",
- "resolved": "https://registry.npmjs.org/svelte-dnd-list/-/svelte-dnd-list-0.1.8.tgz",
- "integrity": "sha512-81Nt/niux7kf59lql0lxTAH0z8xwAxHdHC9dZT7MbfE32T6hgeLsLZ7RIBNAihQ040Io1KghqqPXD+k2viiKeA==",
- "license": "MIT"
+ "node_modules/svelte-dnd-action": {
+ "version": "0.9.65",
+ "resolved": "https://registry.npmjs.org/svelte-dnd-action/-/svelte-dnd-action-0.9.65.tgz",
+ "integrity": "sha512-GKFtrAtYAjcm27aMELoXOhkLtKA1AEoj2njjCReCer6jh1hnRtTHdEO4Kjfpayz+ZAvE0MMwIvLISW3tsiO9Qg==",
+ "license": "MIT",
+ "peerDependencies": {
+ "svelte": ">=3.23.0 || ^5.0.0-next.0"
+ }
},
"node_modules/svelte-eslint-parser": {
"version": "1.2.0",
diff --git a/interface/package.json b/interface/package.json
index badff56de..b83bd8a9b 100644
--- a/interface/package.json
+++ b/interface/package.json
@@ -3,7 +3,7 @@
"version": "0.2.0",
"private": true,
"scripts": {
- "dev": "vite dev",
+ "dev": "vite dev --host",
"build": "vite build",
"preview": "vite preview",
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
@@ -44,7 +44,7 @@
"jwt-decode": "^4.0.0",
"luxon": "^3.7.1",
"msgpack-lite": "^0.1.26",
- "svelte-dnd-list": "^0.1.8",
+ "svelte-dnd-action": "^0.9.65",
"svelte-modals": "^2.0.1"
}
}
\ No newline at end of file
diff --git a/interface/src/lib/components/Collapsible.svelte b/interface/src/lib/components/Collapsible.svelte
index 419083cba..af93c0a60 100644
--- a/interface/src/lib/components/Collapsible.svelte
+++ b/interface/src/lib/components/Collapsible.svelte
@@ -2,24 +2,54 @@
import { slide } from 'svelte/transition';
import { cubicOut } from 'svelte/easing';
import Down from '~icons/tabler/chevron-down';
+ import Alert from '~icons/tabler/alert-hexagon';
- let { icon, title, children, opened, closed, open = false, class: className = '' } = $props();
+ interface Props {
+ open?: boolean;
+ opened?: any;
+ closed?: any;
+ collapsible?: boolean;
+ icon?: import('svelte').Snippet;
+ title?: import('svelte').Snippet;
+ children?: import('svelte').Snippet;
+ class?: string;
+ isDirty?: boolean;
+ }
+
+ let {
+ open = $bindable(false),
+ opened,
+ closed,
+ icon,
+ title,
+ children,
+ class: className = '',
+ isDirty = false
+ }: Props = $props();
function openCollapsible() {
open = !open;
if (open) {
- opened();
+ if (opened) opened();
} else {
- closed();
+ if (closed) closed();
}
}
+ {#if isDirty}
+
+ {/if}
-
+
{@render icon?.()}
{@render title?.()}
+ {#if isDirty}
+
+ {/if}
diff --git a/interface/src/lib/components/DraggableList.svelte b/interface/src/lib/components/DraggableList.svelte
new file mode 100644
index 000000000..7b14e0cab
--- /dev/null
+++ b/interface/src/lib/components/DraggableList.svelte
@@ -0,0 +1,83 @@
+
+
+
+ {#each itemsWithIds as item, index (item.id)}
+ {@render children({ item, index, originalItem: items[index] })}
+ {/each}
+
+
+
diff --git a/interface/src/lib/components/InfoDialog.svelte b/interface/src/lib/components/InfoDialog.svelte
index d2dbf4181..d78eaa34b 100644
--- a/interface/src/lib/components/InfoDialog.svelte
+++ b/interface/src/lib/components/InfoDialog.svelte
@@ -35,7 +35,7 @@
>
{title}
-
{message}
+
{@html message}
-
+