diff --git a/frontend/src/components/storage/StorageBrowser.vue b/frontend/src/components/storage/StorageBrowser.vue
index 8aa1970..f3fb4cf 100644
--- a/frontend/src/components/storage/StorageBrowser.vue
+++ b/frontend/src/components/storage/StorageBrowser.vue
@@ -10,7 +10,7 @@
@navigate="$emit('breadcrumb-navigate', $event)"
/>
-
+
-
+
@@ -321,6 +321,11 @@ function topicColor(name) {
return props.topicColorFn(name)
}
+// ── Child component refs ──────────────────────────────────────────────────────
+
+const dropZoneRef = ref(null)
+const searchBarRef = ref(null)
+
// ── New folder inline input ───────────────────────────────────────────────────
const showNewFolderInput = ref(false)
@@ -346,8 +351,12 @@ async function submitNewFolder() {
emit('folder-create', { name, onError: (msg) => { newFolderError.value = msg }, onSuccess: cancelNewFolder })
}
-/** Called by the parent view when the toolbar "New folder" button is clicked. */
-defineExpose({ startNewFolder })
+defineExpose({
+ startNewFolder,
+ triggerUpload: () => dropZoneRef.value?.triggerInput?.(),
+ focusSearch: () => searchBarRef.value?.focus?.(),
+ clearSearch: () => emit('search-change', ''),
+})
// ── Rename ────────────────────────────────────────────────────────────────────
diff --git a/frontend/src/components/upload/DropZone.vue b/frontend/src/components/upload/DropZone.vue
index 68c298e..9791950 100644
--- a/frontend/src/components/upload/DropZone.vue
+++ b/frontend/src/components/upload/DropZone.vue
@@ -48,6 +48,8 @@ function triggerInput() {
inputRef.value?.click()
}
+defineExpose({ triggerInput })
+
function onDrop(e) {
dragging.value = false
const files = Array.from(e.dataTransfer?.files || [])
diff --git a/frontend/src/views/FileManagerView.vue b/frontend/src/views/FileManagerView.vue
index ba7a35f..c26ea75 100644
--- a/frontend/src/views/FileManagerView.vue
+++ b/frontend/src/views/FileManagerView.vue
@@ -180,4 +180,11 @@ async function doDeleteDoc(docId) {
function topicColor(name) {
return topicsStore.topics.find(t => t.name === name)?.color ?? '#6366f1'
}
+
+defineExpose({
+ focusSearch: () => browserRef.value?.focusSearch?.(),
+ triggerUpload: () => browserRef.value?.triggerUpload?.(),
+ startNewFolder: () => browserRef.value?.startNewFolder?.(),
+ clearSearch: () => browserRef.value?.clearSearch?.(),
+})