feat(viewer): Add data source dialog

Introduce a dialog for switching between built-in content and a
user-selected local folder. Persist the folder handle in IndexedDB
so the selection survives page refreshes. Scan the folder for .md,
.yarn, and .csv files to build the file index.

Update App and Sidebar to pass file tree and heading data, and
add TypeScript declarations for the File System Access API.
This commit is contained in:
hyper
2026-06-30 19:20:08 +08:00
parent a05b0f4291
commit 53c8ce0677
7 changed files with 523 additions and 29 deletions
+35
View File
@@ -1,5 +1,40 @@
/// <reference types="vite/client" />
// File System Access API (Chrome / Edge)
interface FileSystemHandlePermissionDescriptor {
mode?: "read" | "readwrite";
}
interface FileSystemDirectoryHandle {
kind: "directory";
name: string;
entries(): AsyncIterableIterator<[string, FileSystemHandle]>;
queryPermission?(
descriptor?: FileSystemHandlePermissionDescriptor,
): Promise<PermissionState>;
requestPermission?(
descriptor?: FileSystemHandlePermissionDescriptor,
): Promise<PermissionState>;
}
interface FileSystemFileHandle {
kind: "file";
name: string;
getFile(): Promise<File>;
}
type FileSystemHandle = FileSystemDirectoryHandle | FileSystemFileHandle;
interface DirectoryPickerOptions {
mode?: "read" | "readwrite";
}
interface Window {
showDirectoryPicker(
options?: DirectoryPickerOptions,
): Promise<FileSystemDirectoryHandle>;
}
interface WebpackContext {
(path: string): { default?: string } | string;
keys(): string[];