gradio.dispatch("change")}
+ />
+ {/key}
diff --git a/js/fileexplorer/shared/Checkbox.svelte b/js/fileexplorer/shared/Checkbox.svelte
index 0a9fd0dd95..6e35e30b27 100644
--- a/js/fileexplorer/shared/Checkbox.svelte
+++ b/js/fileexplorer/shared/Checkbox.svelte
@@ -7,10 +7,8 @@
dispatch("change", !value)}
type="checkbox"
- on:click={() => dispatch("change", value)}
- on:keydown={({ key }) =>
- (key === " " || key === "Enter") && dispatch("change", value)}
{disabled}
class:disabled={disabled && !value}
/>
@@ -47,14 +45,6 @@
}
.disabled {
- cursor: not-allowed;
- border-color: var(--checkbox-border-color-hover);
- background-color: var(--checkbox-background-color-hover);
- }
-
- input:disabled:checked,
- input:disabled:checked:hover,
- .disabled:checked:focus {
opacity: 0.8 !important;
cursor: not-allowed;
}
diff --git a/js/fileexplorer/shared/DirectoryExplorer.svelte b/js/fileexplorer/shared/DirectoryExplorer.svelte
index 754dbff5d7..2b4ace8d05 100644
--- a/js/fileexplorer/shared/DirectoryExplorer.svelte
+++ b/js/fileexplorer/shared/DirectoryExplorer.svelte
@@ -1,72 +1,65 @@
-{#if $tree && $tree.length}
-
- handle_select(detail)}
- {file_count}
- />
-
-{:else}
-
-{/if}
+
+ {
+ const { path, checked, type } = e.detail;
+ if (checked) {
+ if (file_count === "single") {
+ value = [path];
+ } else if (type === "folder") {
+ if (!path_in_set(path, selected_folders)) {
+ selected_folders = [...selected_folders, path];
+ }
+ } else {
+ if (!path_in_set(path, value)) {
+ value = [...value, path];
+ }
+ }
+ } else {
+ selected_folders = selected_folders.filter(
+ (folder) => !path_inside(path, folder)
+ ); // deselect all parent folders
+ if (type === "folder") {
+ selected_folders = selected_folders.filter(
+ (folder) => !path_inside(folder, path)
+ ); // deselect all children folders
+ value = value.filter((file) => !path_inside(file, path)); // deselect all children files
+ } else {
+ value = value.filter((x) => !paths_equal(x, path));
+ }
+ }
+ }}
+ />
+