diff --git a/frontend/src/routes/favorites/+page.svelte b/frontend/src/routes/favorites/+page.svelte
index f000a467..158db8c4 100644
--- a/frontend/src/routes/favorites/+page.svelte
+++ b/frontend/src/routes/favorites/+page.svelte
@@ -19,8 +19,6 @@
import { renameFolder, deleteFolder } from '$lib/api/endpoints/folders';
import type { FileItem } from '$lib/api/types';
import { lazyComponent } from '$lib/composables/lazyComponent.svelte';
- import MoveDialog from '$lib/components/MoveDialog.svelte';
- import ShareDialog from '$lib/components/ShareDialog.svelte';
import ResourceList, {
type ContextAction,
type GroupByDef,
@@ -127,8 +125,12 @@
// The file preview is loaded the first time a file is opened, keeping its
// module out of this route's initial chunk.
const fileViewer = lazyComponent(() => import('$lib/components/FileViewer.svelte'));
+ const moveDialog = lazyComponent(() => import('$lib/components/MoveDialog.svelte'));
+ const shareDialog = lazyComponent(() => import('$lib/components/ShareDialog.svelte'));
$effect(() => {
if (viewerOpen) void fileViewer.load();
+ if (moveOpen) void moveDialog.load();
+ if (shareOpen) void shareDialog.load();
});
function open(entry: ResourceEntry) {
@@ -317,13 +319,19 @@
{@const FileViewer = fileViewer.component}
{/if}
- {
- selectedIds = new Set();
- load(true, orderByForGroup());
- }}
-/>
-
+{#if moveDialog.component}
+ {@const MoveDialog = moveDialog.component}
+ {
+ selectedIds = new Set();
+ load(true, orderByForGroup());
+ }}
+ />
+{/if}
+{#if shareDialog.component}
+ {@const ShareDialog = shareDialog.component}
+
+{/if}
diff --git a/frontend/src/routes/files/[...path]/+page.svelte b/frontend/src/routes/files/[...path]/+page.svelte
index 7294eb9c..9768caed 100644
--- a/frontend/src/routes/files/[...path]/+page.svelte
+++ b/frontend/src/routes/files/[...path]/+page.svelte
@@ -44,8 +44,6 @@
import type { FileItem, FolderItem, ItemType } from '$lib/api/types';
import ListToolbar from '$lib/components/ListToolbar.svelte';
import VirtualList from '$lib/components/VirtualList.svelte';
- import MoveDialog from '$lib/components/MoveDialog.svelte';
- import ShareDialog from '$lib/components/ShareDialog.svelte';
import { lazyComponent } from '$lib/composables/lazyComponent.svelte';
import { t } from '$lib/i18n/index.svelte';
import { confirmDialog, promptDialog } from '$lib/stores/dialogs.svelte';
@@ -69,6 +67,8 @@
// call `.load()` when `viewerOpen` / `wopiOpen` flip true).
const fileViewer = lazyComponent(() => import('$lib/components/FileViewer.svelte'));
const wopiEditor = lazyComponent(() => import('$lib/components/WopiEditor.svelte'));
+ const moveDialog = lazyComponent(() => import('$lib/components/MoveDialog.svelte'));
+ const shareDialog = lazyComponent(() => import('$lib/components/ShareDialog.svelte'));
// The URL rest param is the trail of folder ids from home's children down.
// /files → home root; /files/a/b → folder b inside a inside home.
@@ -1083,6 +1083,8 @@
$effect(() => {
if (viewerOpen) void fileViewer.load();
if (wopiOpen) void wopiEditor.load();
+ if (moveOpen) void moveDialog.load();
+ if (shareOpen) void shareDialog.load();
});
// Editability of the current context-menu target file, resolved async.
let ctxCanEditWopi = $state(false);
@@ -1936,21 +1938,27 @@
{/snippet}
- {
- clearSelection();
- void reload();
- }}
-/>
- (sharedIds = new SvelteSet(sharedIds).add(id))}
-/>
+{#if moveDialog.component}
+ {@const MoveDialog = moveDialog.component}
+ {
+ clearSelection();
+ void reload();
+ }}
+ />
+{/if}
+{#if shareDialog.component}
+ {@const ShareDialog = shareDialog.component}
+ (sharedIds = new SvelteSet(sharedIds).add(id))}
+ />
+{/if}
{#if fileViewer.component}
{@const FileViewer = fileViewer.component}
diff --git a/frontend/src/routes/recent/+page.svelte b/frontend/src/routes/recent/+page.svelte
index 7094e0e0..71f1abb7 100644
--- a/frontend/src/routes/recent/+page.svelte
+++ b/frontend/src/routes/recent/+page.svelte
@@ -20,8 +20,6 @@
import { renameFolder, deleteFolder } from '$lib/api/endpoints/folders';
import type { FileItem, ItemType } from '$lib/api/types';
import { lazyComponent } from '$lib/composables/lazyComponent.svelte';
- import MoveDialog from '$lib/components/MoveDialog.svelte';
- import ShareDialog from '$lib/components/ShareDialog.svelte';
import ResourceList, {
type ContextAction,
type GroupByDef,
@@ -139,8 +137,12 @@
// The file preview is loaded the first time a file is opened, keeping its
// module out of this route's initial chunk.
const fileViewer = lazyComponent(() => import('$lib/components/FileViewer.svelte'));
+ const moveDialog = lazyComponent(() => import('$lib/components/MoveDialog.svelte'));
+ const shareDialog = lazyComponent(() => import('$lib/components/ShareDialog.svelte'));
$effect(() => {
if (viewerOpen) void fileViewer.load();
+ if (moveOpen) void moveDialog.load();
+ if (shareOpen) void shareDialog.load();
});
function open(entry: ResourceEntry) {
@@ -362,13 +364,19 @@
{@const FileViewer = fileViewer.component}
{/if}
- {
- selectedIds = new Set();
- load(true, orderByForGroup());
- }}
-/>
-
+{#if moveDialog.component}
+ {@const MoveDialog = moveDialog.component}
+ {
+ selectedIds = new Set();
+ load(true, orderByForGroup());
+ }}
+ />
+{/if}
+{#if shareDialog.component}
+ {@const ShareDialog = shareDialog.component}
+
+{/if}
diff --git a/frontend/src/routes/shared/+page.svelte b/frontend/src/routes/shared/+page.svelte
index 3c6fdd6b..eb5641ea 100644
--- a/frontend/src/routes/shared/+page.svelte
+++ b/frontend/src/routes/shared/+page.svelte
@@ -22,7 +22,7 @@
import type { FileItem, FolderItem, ItemType } from '$lib/api/types';
import Icon from '$lib/icons/Icon.svelte';
import ListToolbar from '$lib/components/ListToolbar.svelte';
- import ShareDialog from '$lib/components/ShareDialog.svelte';
+ import { lazyComponent } from '$lib/composables/lazyComponent.svelte';
import UserVignette from '$lib/components/UserVignette.svelte';
import { t } from '$lib/i18n/index.svelte';
import { ui } from '$lib/stores/ui.svelte';
@@ -55,6 +55,13 @@
let dialogOpen = $state(false);
let dialogItem = $state<{ id: string; name: string; kind: ItemType } | null>(null);
+ // ShareDialog is heavy and only opens on demand — keep it out of this route's
+ // initial chunk and load it the first time the dialog is opened.
+ const shareDialog = lazyComponent(() => import('$lib/components/ShareDialog.svelte'));
+ $effect(() => {
+ if (dialogOpen) void shareDialog.load();
+ });
+
// Open kebab menu, keyed by grant id.
let menuFor = $state(null);
@@ -580,7 +587,10 @@
{/if}
-
+{#if shareDialog.component}
+ {@const ShareDialog = shareDialog.component}
+
+{/if}