diff --git a/apps/kimi-web/src/components/AddWorkspaceDialog.vue b/apps/kimi-web/src/components/AddWorkspaceDialog.vue index b02bdf1b7..f24a4b11f 100644 --- a/apps/kimi-web/src/components/AddWorkspaceDialog.vue +++ b/apps/kimi-web/src/components/AddWorkspaceDialog.vue @@ -30,6 +30,14 @@ const currentPath = ref(''); const parentPath = ref(null); const entries = ref([]); +// Live filter over the current folder's subfolders (case-insensitive substring). +const filter = ref(''); +const filteredEntries = computed(() => { + const q = filter.value.trim().toLowerCase(); + if (q === '') return entries.value; + return entries.value.filter((e) => e.name.toLowerCase().includes(q)); +}); + // Paste-path escape hatch const pathInput = ref(''); const pathTrimmed = computed(() => pathInput.value.trim()); @@ -63,6 +71,7 @@ async function navigate(path?: string): Promise { currentPath.value = result.path; parentPath.value = result.parent; entries.value = result.entries; + filter.value = ''; // a fresh folder starts unfiltered browseFailed.value = false; } catch { browseFailed.value = true; @@ -153,12 +162,28 @@ onUnmounted(() => document.removeEventListener('keydown', handleKeydown)); + +
+ + +
+
{{ t('workspace.browsing') }}
@@ -309,6 +335,28 @@ onUnmounted(() => document.removeEventListener('keydown', handleKeydown)); .crumb:hover { color: var(--blue); background: var(--panel2); } .crumb.last { color: var(--ink); font-weight: 600; } +/* Subfolder filter */ +.filterbar { + display: flex; + align-items: center; + gap: 6px; + padding: 6px 14px; + border-bottom: 1px solid var(--line2); +} +.filter-icon { flex: none; color: var(--faint); } +.filter-input { + flex: 1; + min-width: 0; + font-family: var(--mono); + font-size: 12px; + padding: 3px 4px; + border: none; + background: none; + color: var(--ink); + outline: none; +} +.filter-input::placeholder { color: var(--faint); } + /* Folder list */ .folder-list { max-height: 280px; diff --git a/apps/kimi-web/src/i18n/locales/en/workspace.ts b/apps/kimi-web/src/i18n/locales/en/workspace.ts index d092d7d8d..092f95575 100644 --- a/apps/kimi-web/src/i18n/locales/en/workspace.ts +++ b/apps/kimi-web/src/i18n/locales/en/workspace.ts @@ -28,6 +28,8 @@ export default { openThisFolder: 'Open this folder', up: 'Up', browsing: 'Browsing…', + filterPlaceholder: 'Filter subfolders…', + noFilterMatch: 'No subfolders match “{q}”', noSubfolders: 'No subfolders here', gitTag: 'git', browseHint: 'Click a folder to enter it, then "Open this folder" to add it as a workspace.', diff --git a/apps/kimi-web/src/i18n/locales/zh/workspace.ts b/apps/kimi-web/src/i18n/locales/zh/workspace.ts index fe53a36fc..407ef0304 100644 --- a/apps/kimi-web/src/i18n/locales/zh/workspace.ts +++ b/apps/kimi-web/src/i18n/locales/zh/workspace.ts @@ -28,6 +28,8 @@ export default { openThisFolder: '打开此文件夹', up: '上一级', browsing: '加载中…', + filterPlaceholder: '过滤子文件夹…', + noFilterMatch: '没有匹配「{q}」的子文件夹', noSubfolders: '此处没有子文件夹', gitTag: 'git', browseHint: '点击文件夹进入,再点"打开此文件夹"将其添加为工作区。',