diff --git a/platforms/file-manager/.gitignore b/platforms/file-manager/.gitignore
new file mode 100644
index 000000000..8ee847558
--- /dev/null
+++ b/platforms/file-manager/.gitignore
@@ -0,0 +1 @@
+.svelte-kit
diff --git a/platforms/file-manager/.svelte-kit/ambient.d.ts b/platforms/file-manager/.svelte-kit/ambient.d.ts
deleted file mode 100644
index a7344e26e..000000000
--- a/platforms/file-manager/.svelte-kit/ambient.d.ts
+++ /dev/null
@@ -1,400 +0,0 @@
-
-// this file is generated — do not edit it
-
-
-///
| + 0} + disabled={selectableFiles.length === 0} + onclick={toggleSelectAll} + class="w-4 h-4 text-blue-600 bg-gray-100 border-gray-300 rounded focus:ring-blue-500 cursor-pointer disabled:cursor-not-allowed disabled:opacity-50" + title={allFilesSelected + ? "Deselect all" + : "Select all files"} + /> + | Name | Size | Modified | @@ -1066,6 +1498,9 @@ class="hover:bg-gray-50 transition-colors cursor-pointer {item.type === 'folder' ? '' + : ''} {item.type === 'file' && + selectedFileIds.has(item.id) + ? 'bg-blue-50' : ''}" onclick={(e) => { e.stopPropagation(); @@ -1076,6 +1511,23 @@ } }} > + ++ {#if item.type === "file"} + + toggleFileSelection(item.id, e)} + class="w-4 h-4 text-blue-600 bg-gray-100 border-gray-300 rounded focus:ring-blue-500 cursor-pointer" + title="Select for download" + /> + {/if} + |
@@ -1982,7 +2434,7 @@
{/if}
{/if}
+
+
+{#if showDownloadModal}
+ {
+ if (
+ e.target === e.currentTarget &&
+ downloadProgress.status !== "downloading" &&
+ downloadProgress.status !== "zipping"
+ ) {
+ cancelDownload();
+ }
+ }}
+ >
+
+{/if}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 4ca51984a..261d08a01 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -2377,6 +2377,9 @@ importers:
axios:
specifier: ^1.6.7
version: 1.13.2
+ jszip:
+ specifier: ^3.10.1
+ version: 3.10.1
svelte-qrcode:
specifier: ^1.0.1
version: 1.0.1
@@ -6617,7 +6620,7 @@ packages:
'@mui/base@5.0.0-beta.40':
resolution: {integrity: sha512-I/lGHztkCzvwlXpjD2+SNmvNQvB4227xBXhISPjEaJUXGImOQ9f3D2Yj/T3KasSI/h0MLWy74X0J6clhPmsRbQ==}
engines: {node: '>=12.0.0'}
- deprecated: This package has been replaced by @base-ui-components/react
+ deprecated: This package has been replaced by @base-ui/react
peerDependencies:
'@types/react': 18.3.27
react: 18.3.1
@@ -13117,6 +13120,9 @@ packages:
engines: {node: '>=16.x'}
hasBin: true
+ immediate@3.0.6:
+ resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==}
+
immutable@3.7.6:
resolution: {integrity: sha512-AizQPcaofEtO11RZhPPHBOJRdo/20MKQF9mBLnVkBoyHi1/zXK8fzVdnEpSV9gxqtnh6Qomfp3F0xT5qP/vThw==}
engines: {node: '>=0.8.0'}
@@ -13910,6 +13916,9 @@ packages:
resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==}
engines: {node: '>=4.0'}
+ jszip@3.10.1:
+ resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==}
+
jwa@1.4.2:
resolution: {integrity: sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==}
@@ -13994,6 +14003,9 @@ packages:
resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
engines: {node: '>= 0.8.0'}
+ lie@3.3.0:
+ resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==}
+
light-my-request@5.14.0:
resolution: {integrity: sha512-aORPWntbpH5esaYpGOOmri0OHDOe3wC5M2MQxZ9dvMLZm6DnaAn0kJlcbU9hwsQgLzmZyReKwFwwPkR+nHu5kA==}
@@ -17501,10 +17513,12 @@ packages:
tar@6.2.1:
resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==}
engines: {node: '>=10'}
+ deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exhorbitant rates) by contacting i@izs.me
tar@7.5.2:
resolution: {integrity: sha512-7NyxrTE4Anh8km8iEy7o0QYPs+0JKBTj5ZaqHg6B39erLg0qYXN3BijtShwbsNSvQ+LN75+KV+C4QR/f6Gwnpg==}
engines: {node: '>=18'}
+ deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exhorbitant rates) by contacting i@izs.me
teeny-request@9.0.0:
resolution: {integrity: sha512-resvxdc6Mgb7YEThw6G6bExlXKkv6+YbuzGg9xuXxSgxJF7Ozs+o8Y9+2R3sArdWdW8nOokoQb1yrpFB0pQK2g==}
@@ -31916,6 +31930,8 @@ snapshots:
image-size@2.0.2: {}
+ immediate@3.0.6: {}
+
immutable@3.7.6: {}
immutable@5.1.4: {}
@@ -33197,6 +33213,13 @@ snapshots:
object.assign: 4.1.7
object.values: 1.2.1
+ jszip@3.10.1:
+ dependencies:
+ lie: 3.3.0
+ pako: 1.0.11
+ readable-stream: 2.3.8
+ setimmediate: 1.0.5
+
jwa@1.4.2:
dependencies:
buffer-equal-constant-time: 1.0.1
@@ -33293,6 +33316,10 @@ snapshots:
prelude-ls: 1.2.1
type-check: 0.4.0
+ lie@3.3.0:
+ dependencies:
+ immediate: 3.0.6
+
light-my-request@5.14.0:
dependencies:
cookie: 0.7.2
e.stopPropagation()}
+ >
+
+
+
+
+
+
+ + {#if downloadProgress.status === "preparing"} + Preparing Download... + {:else if downloadProgress.status === "downloading"} + Downloading Files + {:else if downloadProgress.status === "zipping"} + Creating Zip File + {:else if downloadProgress.status === "complete"} + Download Complete! + {:else if downloadProgress.status === "error"} + Download Failed + {/if} ++ {#if downloadProgress.status !== "downloading" && downloadProgress.status !== "zipping"} + + {/if} +
+ {#if downloadProgress.status === "error"}
+
+
+
+
+
+ {downloadProgress.errorMessage}
+
+ {:else if downloadProgress.status === "complete"}
+ {@const hasFailures = downloadProgress.downloadedFiles.some(f => f.status === "error")}
+
+
+ {downloadProgress.currentFile}
+
+ {:else}
+ + {#if downloadProgress.status === "downloading"} + Downloading file {downloadProgress.currentFileIndex} of + {downloadProgress.totalFiles} + {:else if downloadProgress.status === "zipping"} + Compressing {downloadProgress.totalFiles} files into a + zip... + {:else} + Please wait while we prepare your download... + {/if} + + {#if downloadProgress.currentFile && downloadProgress.status === "downloading"} ++ Current: {downloadProgress.currentFile} + + {/if} + {/if} +
+
+
+
+ {#if downloadProgress.downloadedFiles.length > 0}
+
+ Overall Progress
+ {downloadProgress.overallProgress}%
+
+
+
+
+
+
+ {/if}
+
+
+ {#if downloadProgress.status === "downloading" || downloadProgress.status === "zipping"}
+
+ {#each downloadProgress.downloadedFiles as file, idx}
+
+
+
+
+ {/each}
+
+ {#if file.status === "done"}
+
+ {:else if file.status === "downloading"}
+
+ {:else if file.status === "error"}
+
+ {:else}
+
+ {/if}
+
+
+
+
+ {file.name}
+
+ {#if file.status === "error" && file.errorMessage}
+
+ {file.errorMessage}
+
+ {/if}
+
+
+
+ {formatFileSize(file.size)}
+
+
+
+ {/if}
+
+
+
+
+
+ + Please don't close this window or navigate away + while the download is in progress. + +
+ {#if downloadProgress.status === "error"}
+
+
+ {:else if downloadProgress.status === "complete"}
+
+ {/if}
+
+ |
|---|