refactor(frontend): extract FilesTab safely
- New component: frontend/src/lib/components/files/FilesTab.svelte
- Owns all file tab state: loadingFiles, currentFolderId, folderStack,
fileItems, preview*, clipboard, selectedIds, dragIds, importing, importSummary, etc.
- Public API via bind:this: resetToNode(), addFile(), loadFolder(),
openFileById(), focusItem(), handleFilesKeydown(), resetState()
- Events: openNote, refreshParent, error
- Inline modals: rename, confirm, import dialog, file preview
- App.svelte changes:
- Removed all file-specific state variables and functions
- Preview state renamed to trashPreview* (for trash preview only)
- Files tab inline markup replaced with <FilesTab> component
- Overview 'Add file' button delegates to filesTabRef.addFile()
- openInboxArtifact, navigateToFile, openActivityTarget, openSearchResult
delegate to filesTabRef for file operations
- Node rename (tree context menu) uses separate openNodeRename/submitNodeRename
functions (file rename is now in FilesTab)
- closeTrashPreview for trash file preview modal
- Build: npm run build ✅, go test ./... ✅, build.sh gui ✅