@zjlab-fe/data-hub-ui 0.9.0 → 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/.github/instructions/i.instructions.md +249 -0
  2. package/dist/types/components/feature-card/demo/moha.d.ts +1 -0
  3. package/dist/types/components/feature-card/index.d.ts +7 -1
  4. package/dist/types/components/file-uploader/components/circle-progress.d.ts +6 -0
  5. package/dist/types/components/file-uploader/components/hooks/use-drop-zone.d.ts +17 -0
  6. package/dist/types/components/file-uploader/components/hooks/use-file-validation.d.ts +12 -0
  7. package/dist/types/components/file-uploader/components/icons.d.ts +5 -0
  8. package/dist/types/components/file-uploader/components/uploader-drop-zone.d.ts +49 -0
  9. package/dist/types/components/file-uploader/components/uploader-file-item.d.ts +40 -0
  10. package/dist/types/components/file-uploader/components/uploader-file-list.d.ts +29 -0
  11. package/dist/types/components/file-uploader/components/uploader.d.ts +64 -0
  12. package/dist/types/components/file-uploader/components/utils/directory-reader.d.ts +4 -0
  13. package/dist/types/components/file-uploader/constants.d.ts +27 -0
  14. package/dist/types/components/file-uploader/context/file-state-store.d.ts +64 -0
  15. package/dist/types/components/file-uploader/context/handler-registry.d.ts +96 -0
  16. package/dist/types/components/file-uploader/context/upload-context.d.ts +14 -0
  17. package/dist/types/components/file-uploader/context/upload-provider.d.ts +47 -0
  18. package/dist/types/components/file-uploader/context/upload-reducer.d.ts +6 -0
  19. package/dist/types/components/file-uploader/context/use-upload-engine.d.ts +22 -0
  20. package/dist/types/components/file-uploader/demo/index.d.ts +2 -0
  21. package/dist/types/components/file-uploader/engine/queue-callbacks.d.ts +21 -0
  22. package/dist/types/components/file-uploader/engine/queue-manager.d.ts +63 -0
  23. package/dist/types/components/file-uploader/engine/queue-types.d.ts +37 -0
  24. package/dist/types/components/file-uploader/engine/queue-uploader.d.ts +8 -0
  25. package/dist/types/components/file-uploader/hooks/use-upload-batch.d.ts +36 -0
  26. package/dist/types/components/file-uploader/hooks/use-upload-control.d.ts +37 -0
  27. package/dist/types/components/file-uploader/hooks/use-upload-files.d.ts +40 -0
  28. package/dist/types/components/file-uploader/hooks/use-upload-operations.d.ts +43 -0
  29. package/dist/types/components/file-uploader/hooks/use-upload.d.ts +74 -0
  30. package/dist/types/components/file-uploader/index.d.ts +16 -0
  31. package/dist/types/components/file-uploader/persistence/file-blob-store.d.ts +71 -0
  32. package/dist/types/components/file-uploader/persistence/file-handle-store.d.ts +116 -0
  33. package/dist/types/components/file-uploader/persistence/index.d.ts +42 -0
  34. package/dist/types/components/file-uploader/persistence/metadata-store.d.ts +63 -0
  35. package/dist/types/components/file-uploader/persistence/persistence-context.d.ts +20 -0
  36. package/dist/types/components/file-uploader/persistence/persistence-manager.d.ts +103 -0
  37. package/dist/types/components/file-uploader/persistence/persistence-provider.d.ts +49 -0
  38. package/dist/types/components/file-uploader/persistence/types.d.ts +266 -0
  39. package/dist/types/components/file-uploader/persistence/use-persistence.d.ts +78 -0
  40. package/dist/types/components/file-uploader/types.d.ts +138 -0
  41. package/dist/types/components/file-uploader/utils/chunk-handlers.d.ts +40 -0
  42. package/dist/types/components/file-uploader/utils/ensure-handlers.d.ts +7 -0
  43. package/dist/types/components/file-uploader/utils/error-handler.d.ts +59 -0
  44. package/dist/types/components/file-uploader/utils/upload-controllers.d.ts +72 -0
  45. package/dist/types/components/file-uploader/utils/upload-handler.d.ts +17 -0
  46. package/dist/types/components/file-uploader/utils/validate-handlers.d.ts +6 -0
  47. package/dist/types/components/section-heading/index.d.ts +1 -1
  48. package/dist/types/components/tip-tap/extensions/index.d.ts +1 -1
  49. package/es/index.js +1 -1
  50. package/lib/index.js +1 -1
  51. package/package.json +1 -1
  52. package/tailwind.config.js +4 -0
@@ -0,0 +1,96 @@
1
+ import type { UploadHandlers } from '../types';
2
+ /**
3
+ * Per-file handler storage.
4
+ *
5
+ * When a file is added for upload, its handlers are registered here.
6
+ * Even if the originating component unmounts, the handlers remain
7
+ * available for the QueueManager to use during background uploads.
8
+ */
9
+ export interface FileHandlerEntry {
10
+ /** The handlers specific to this file's upload context */
11
+ handlers: UploadHandlers;
12
+ /** Timestamp when handlers were registered */
13
+ registeredAt: number;
14
+ /** Optional metadata for debugging */
15
+ context?: string;
16
+ }
17
+ /**
18
+ * Global handler registry for background uploads.
19
+ *
20
+ * This registry stores handlers per-file, allowing uploads to continue
21
+ * even when the user navigates away from the page that initiated the upload.
22
+ *
23
+ * Flow:
24
+ * 1. Component calls addFiles() -> handlers are registered per file ID
25
+ * 2. User navigates away -> component unmounts but handlers persist
26
+ * 3. QueueManager continues -> looks up handlers by file ID
27
+ * 4. Upload completes -> handlers are cleaned up
28
+ *
29
+ * @example
30
+ * ```tsx
31
+ * // In page component
32
+ * const { addFiles } = useUpload();
33
+ * addFiles(files, {
34
+ * getHandlers: (file) => ({
35
+ * onGetUploadUrls: (name, parts) => api.getUrls(datasetId, name, parts, folderFromUI()),
36
+ * // ... other handlers
37
+ * })
38
+ * });
39
+ *
40
+ * // When user adds files, handlers are registered:
41
+ * // handlerRegistry.register(file.id, handlers)
42
+ *
43
+ * // User navigates away - no problem!
44
+ * // QueueManager uses: handlerRegistry.get(fileId)
45
+ * ```
46
+ */
47
+ declare class HandlerRegistry {
48
+ private registry;
49
+ /**
50
+ * Register handlers for a file.
51
+ * Called when a file is added for upload.
52
+ */
53
+ register(fileId: string, handlers: UploadHandlers, context?: string): void;
54
+ /**
55
+ * Get handlers for a file.
56
+ * Returns undefined if file has no registered handlers.
57
+ */
58
+ get(fileId: string): UploadHandlers | undefined;
59
+ /**
60
+ * Check if handlers exist for a file.
61
+ */
62
+ has(fileId: string): boolean;
63
+ /**
64
+ * Remove handlers for a file.
65
+ * Called when upload completes, fails permanently, or is cancelled.
66
+ */
67
+ unregister(fileId: string): void;
68
+ /**
69
+ * Get all registered file IDs.
70
+ * Useful for debugging and cleanup.
71
+ */
72
+ getRegisteredFileIds(): string[];
73
+ /**
74
+ * Get entry with metadata for debugging.
75
+ */
76
+ getEntry(fileId: string): FileHandlerEntry | undefined;
77
+ /**
78
+ * Clear all registrations.
79
+ * Use with caution - mainly for testing or complete reset.
80
+ */
81
+ clear(): void;
82
+ /**
83
+ * Get count of registered handlers.
84
+ */
85
+ get size(): number;
86
+ }
87
+ /**
88
+ * Singleton instance of the handler registry.
89
+ * This is intentionally a module-level singleton, not React context,
90
+ * because it needs to persist completely independently of React lifecycle.
91
+ */
92
+ export declare const handlerRegistry: HandlerRegistry;
93
+ export {};
94
+ /**
95
+ * Debug helper to log current registry state.
96
+ */
@@ -0,0 +1,14 @@
1
+ import type { UploadState, UploadContextValue, UploadConfig } from '../types';
2
+ export declare const initialUploadState: UploadState;
3
+ /**
4
+ * Default upload configuration (Provider level).
5
+ * Controls chunk sizes and concurrency - typically same across app.
6
+ */
7
+ export declare const defaultUploadConfig: Required<UploadConfig>;
8
+ export declare const UploadContext: import("react").Context<UploadContextValue | null>;
9
+ /**
10
+ * Hook to consume upload context
11
+ * Must be used within UploadProvider
12
+ * @throws Error if used outside of UploadProvider
13
+ */
14
+ export declare function useUploadContext(): UploadContextValue;
@@ -0,0 +1,47 @@
1
+ import { type ReactNode } from 'react';
2
+ import type { UploadConfig } from '../types';
3
+ /**
4
+ * Props for UploadProvider component
5
+ *
6
+ * The provider manages shared state (files list, queue manager) and
7
+ * global upload configuration (chunk sizes, concurrency).
8
+ *
9
+ * For persistence, wrap with PersistenceProvider inside UploadProvider.
10
+ */
11
+ export interface UploadProviderProps {
12
+ /** Global upload configuration (chunk sizes, concurrency) */
13
+ config?: UploadConfig;
14
+ /** Child components */
15
+ children: ReactNode;
16
+ }
17
+ /**
18
+ * Upload Provider Component
19
+ *
20
+ * Provides shared upload state and global configuration across the application.
21
+ * Manages:
22
+ * - Files state (list of files, their status, progress)
23
+ * - QueueManager singleton (shared upload queue)
24
+ * - Global config (chunk sizes, concurrency)
25
+ *
26
+ * For persistence support, wrap your app with PersistenceProvider inside UploadProvider:
27
+ *
28
+ * @example
29
+ * ```tsx
30
+ * // App level - state management + global config
31
+ * <UploadProvider config={{ concurrentFiles: 3 }}>
32
+ * <PersistenceProvider config={{ mode: 'indexeddb' }}>
33
+ * <App />
34
+ * </PersistenceProvider>
35
+ * </UploadProvider>
36
+ *
37
+ * // In App - use persistence hook
38
+ * const { pendingFiles, restoreFiles } = usePersistence();
39
+ *
40
+ * // Component level - provide handlers & per-usage options
41
+ * const { addFiles } = useUpload();
42
+ * ```
43
+ */
44
+ export declare function UploadProvider({ config, children }: UploadProviderProps): import("react/jsx-runtime").JSX.Element;
45
+ export declare namespace UploadProvider {
46
+ var displayName: string;
47
+ }
@@ -0,0 +1,6 @@
1
+ import type { UploadState, UploadAction } from '../types';
2
+ /**
3
+ * Reducer for upload state management
4
+ * Handles all file upload state transitions
5
+ */
6
+ export declare function uploadReducer(state: UploadState, action: UploadAction): UploadState;
@@ -0,0 +1,22 @@
1
+ import type { UploadFile } from '../types';
2
+ /**
3
+ * Hook that integrates QueueManager with React context.
4
+ *
5
+ * This hook bridges the imperative QueueManager with React's declarative state.
6
+ * It provides functions to control uploads while keeping UI state in sync.
7
+ *
8
+ * Global config (chunk sizes, concurrency) comes from context.
9
+ * Handlers are provided per-file via addFiles().
10
+ *
11
+ * @returns Upload control functions: startUpload, pauseUpload, resumeUpload, cancelUpload
12
+ */
13
+ export declare function useUploadEngine(): {
14
+ /** Start uploading a file */
15
+ startUpload: (uploadFile: UploadFile) => Promise<void>;
16
+ /** Pause an uploading file */
17
+ pauseUpload: (fileId: string) => void;
18
+ /** Resume a paused file */
19
+ resumeUpload: (fileId: string) => Promise<void>;
20
+ /** Cancel a file upload */
21
+ cancelUpload: (fileId: string) => Promise<void>;
22
+ };
@@ -0,0 +1,2 @@
1
+ declare function App(): import("react/jsx-runtime").JSX.Element;
2
+ export default App;
@@ -0,0 +1,21 @@
1
+ import type { Dispatch } from 'react';
2
+ import type { QueueCallbacks } from './queue-types';
3
+ import type { UploadAction } from '../types';
4
+ /**
5
+ * Dependencies required to create queue callbacks.
6
+ * These are injected from the React hook to maintain reactivity.
7
+ */
8
+ export interface QueueCallbackDeps {
9
+ /** React dispatch function for state updates */
10
+ dispatch: Dispatch<UploadAction>;
11
+ }
12
+ /**
13
+ * Creates QueueManager callbacks that integrate with React state.
14
+ *
15
+ * These callbacks are called by QueueManager during upload lifecycle:
16
+ * - onChunkProgress: When chunk upload progress updates
17
+ * - onChunkComplete: When a chunk finishes uploading
18
+ * - onChunkError: When a chunk upload fails
19
+ * - onFileComplete: When all chunks of a file are uploaded
20
+ */
21
+ export declare function createQueueCallbacks({ dispatch }: QueueCallbackDeps): QueueCallbacks;
@@ -0,0 +1,63 @@
1
+ import type { UploadFile } from '../types';
2
+ import type { QueueCallbacks, QueueConfig } from './queue-types';
3
+ export type { QueueItem, QueueCallbacks, QueueConfig } from './queue-types';
4
+ /**
5
+ * Manages upload queue with configurable concurrency.
6
+ *
7
+ * Handles scheduling of chunk uploads across multiple files,
8
+ * respecting concurrency limits for both files and chunks per file.
9
+ */
10
+ export declare class QueueManager {
11
+ /** Pending items waiting to be uploaded */
12
+ private queue;
13
+ /** Currently uploading items, grouped by file ID */
14
+ private activeByFile;
15
+ /** Set of file IDs that are paused */
16
+ private pausedFiles;
17
+ /** Track chunk completion counts per file */
18
+ private fileChunkCounts;
19
+ private config;
20
+ private callbacks;
21
+ constructor(config: QueueConfig, callbacks: QueueCallbacks);
22
+ /**
23
+ * Add a file's chunks to the upload queue.
24
+ * Only pending chunks are added; completed chunks are skipped.
25
+ */
26
+ addFile(uploadFile: UploadFile): void;
27
+ /**
28
+ * Process queue and start uploads respecting concurrency limits.
29
+ * - Max `concurrentFiles` files can upload simultaneously
30
+ * - Each file can have max `concurrentChunks` chunks uploading
31
+ */
32
+ private processQueue;
33
+ /**
34
+ * Start uploading a single chunk.
35
+ * Handles progress, completion, and error callbacks.
36
+ */
37
+ private startUpload;
38
+ /** Remove an item from the active uploads map */
39
+ private removeFromActive;
40
+ /** Pause uploads for a file (aborts active uploads) */
41
+ pauseFile(fileId: string): void;
42
+ /** Resume uploads for a paused file */
43
+ resumeFile(fileId: string): void;
44
+ /** Cancel all uploads for a file and clean up */
45
+ cancelFile(fileId: string): void;
46
+ /** Abort all active uploads for a file */
47
+ private abortFileUploads;
48
+ /** Get count of active files and total active chunks */
49
+ getActiveCount(): {
50
+ files: number;
51
+ chunks: number;
52
+ };
53
+ /** Check if a file is currently paused */
54
+ isFilePaused(fileId: string): boolean;
55
+ /** Get number of items waiting in queue */
56
+ getQueueLength(): number;
57
+ /** Get number of pending queue items for a specific file */
58
+ getFileQueueLength(fileId: string): number;
59
+ /** Check if file has any items in queue or active uploads */
60
+ hasFileInQueue(fileId: string): boolean;
61
+ /** Clear all queue items for a file (used before re-adding on resume) */
62
+ clearFileFromQueue(fileId: string): void;
63
+ }
@@ -0,0 +1,37 @@
1
+ import type { ChunkState } from '../types';
2
+ import type { UploadRequestConfig } from '../utils/upload-handler';
3
+ /** Item in the upload queue */
4
+ export interface QueueItem {
5
+ fileId: string;
6
+ file: File;
7
+ chunk: ChunkState;
8
+ uploadUrl: string;
9
+ chunkSize: number;
10
+ abortController: AbortController;
11
+ }
12
+ /** Callbacks for queue events */
13
+ export interface QueueCallbacks {
14
+ onChunkUploadComplete: (fileId: string, partNum: number) => void;
15
+ onChunkComplete: (fileId: string, partNum: number) => Promise<{
16
+ success: boolean;
17
+ reason?: string;
18
+ }>;
19
+ onChunkError: (fileId: string, partNum: number, error: Error) => void;
20
+ onFileComplete: (fileId: string, result: {
21
+ succeeded: number;
22
+ total: number;
23
+ allSucceeded: boolean;
24
+ }) => Promise<void>;
25
+ }
26
+ /** Queue manager configuration */
27
+ export interface QueueConfig {
28
+ concurrentFiles: number;
29
+ concurrentChunks: number;
30
+ requestConfig?: UploadRequestConfig;
31
+ }
32
+ /** Chunk count tracker for a file */
33
+ export interface FileChunkCount {
34
+ total: number;
35
+ completed: number;
36
+ succeeded: number;
37
+ }
@@ -0,0 +1,8 @@
1
+ import type { QueueItem, QueueConfig } from './queue-types';
2
+ export interface UploadResult {
3
+ item: QueueItem;
4
+ success: boolean;
5
+ error?: Error;
6
+ }
7
+ /** Upload a single queue item and return result */
8
+ export declare function uploadQueueItem(item: QueueItem, config: QueueConfig): Promise<UploadResult>;
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Hook for batch upload operations.
3
+ *
4
+ * Provides:
5
+ * - Start all pending files
6
+ * - Pause all uploading files
7
+ * - Resume all paused files
8
+ * - Cancel all uploads
9
+ *
10
+ * Use this hook when you need bulk control over multiple files.
11
+ *
12
+ * @example
13
+ * ```tsx
14
+ * function BatchControls() {
15
+ * const { startAll, pauseAll, cancelAll } = useUploadBatch();
16
+ *
17
+ * return (
18
+ * <div>
19
+ * <button onClick={startAll}>Start All</button>
20
+ * <button onClick={pauseAll}>Pause All</button>
21
+ * <button onClick={cancelAll}>Cancel All</button>
22
+ * </div>
23
+ * );
24
+ * }
25
+ * ```
26
+ */
27
+ export declare function useUploadBatch(): {
28
+ /** Start all pending files */
29
+ startAll: () => Promise<void>;
30
+ /** Pause all uploading files */
31
+ pauseAll: () => void;
32
+ /** Resume all paused files */
33
+ resumeAll: () => Promise<void>;
34
+ /** Cancel all uploads */
35
+ cancelAll: () => void;
36
+ };
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Hook for single file upload controls.
3
+ *
4
+ * Provides:
5
+ * - Start a pending file
6
+ * - Pause an uploading file
7
+ * - Resume a paused file
8
+ * - Cancel an upload
9
+ *
10
+ * Use this hook when you only need to control individual file uploads.
11
+ *
12
+ * @example
13
+ * ```tsx
14
+ * function FileControlButtons({ fileId, status }: { fileId: string; status: string }) {
15
+ * const { start, pause, resume, cancel } = useUploadControl();
16
+ *
17
+ * return (
18
+ * <div>
19
+ * {status === 'pending' && <button onClick={() => start(fileId)}>Start</button>}
20
+ * {status === 'uploading' && <button onClick={() => pause(fileId)}>Pause</button>}
21
+ * {status === 'paused' && <button onClick={() => resume(fileId)}>Resume</button>}
22
+ * <button onClick={() => cancel(fileId)}>Cancel</button>
23
+ * </div>
24
+ * );
25
+ * }
26
+ * ```
27
+ */
28
+ export declare function useUploadControl(): {
29
+ /** Start uploading a pending file */
30
+ start: (id: string) => Promise<void>;
31
+ /** Pause an uploading file */
32
+ pause: (id: string) => void;
33
+ /** Resume a paused file */
34
+ resume: (id: string) => Promise<void>;
35
+ /** Cancel a file upload */
36
+ cancel: (id: string) => Promise<void>;
37
+ };
@@ -0,0 +1,40 @@
1
+ import type { UploadFile } from '../types';
2
+ /**
3
+ * Hook for accessing upload file state and filtered lists.
4
+ *
5
+ * Provides:
6
+ * - All files in the upload queue
7
+ * - Filtered lists by status (pending, uploading, completed, failed, paused)
8
+ * - File lookup by ID
9
+ *
10
+ * Use this hook when you only need to display/read file data without controlling uploads.
11
+ *
12
+ * @example
13
+ * ```tsx
14
+ * function FileList() {
15
+ * const { files, pendingFiles, completedFiles } = useUploadFiles();
16
+ * return (
17
+ * <div>
18
+ * <h3>Pending: {pendingFiles.length}</h3>
19
+ * <ul>{files.map(f => <li key={f.id}>{f.fileName}</li>)}</ul>
20
+ * </div>
21
+ * );
22
+ * }
23
+ * ```
24
+ */
25
+ export declare function useUploadFiles(): {
26
+ /** All files in the upload queue */
27
+ files: UploadFile[];
28
+ /** Get a specific file by ID */
29
+ getFileById: (id: string) => UploadFile | undefined;
30
+ /** Files waiting to be uploaded */
31
+ pendingFiles: UploadFile[];
32
+ /** Files currently uploading */
33
+ uploadingFiles: UploadFile[];
34
+ /** Successfully completed uploads */
35
+ completedFiles: UploadFile[];
36
+ /** Failed uploads */
37
+ failedFiles: UploadFile[];
38
+ /** Paused uploads */
39
+ pausedFiles: UploadFile[];
40
+ };
@@ -0,0 +1,43 @@
1
+ import type { UploadFile, AddFilesOptions } from '../types';
2
+ /**
3
+ * Hook for file management operations.
4
+ *
5
+ * Provides:
6
+ * - Adding files to the upload queue
7
+ * - Removing individual files
8
+ * - Clearing completed/all files
9
+ *
10
+ * Use this hook when you need to manage the file queue without upload controls.
11
+ *
12
+ * @example
13
+ * ```tsx
14
+ * function FileInput({ datasetId }: { datasetId: string }) {
15
+ * const { addFiles } = useUploadOperations();
16
+ *
17
+ * return (
18
+ * <input
19
+ * type="file"
20
+ * onChange={(e) =>
21
+ * addFiles(e.target.files, {
22
+ * getHandlers: (file) => ({
23
+ * onGetUploadUrls: (fileName, partCount) =>
24
+ * api.getUploadUrls(datasetId, fileName, partCount),
25
+ * // ... other handlers
26
+ * }),
27
+ * })
28
+ * }
29
+ * />
30
+ * );
31
+ * }
32
+ * ```
33
+ */
34
+ export declare function useUploadOperations(): {
35
+ /** Add files to the upload queue */
36
+ addFiles: (files: FileList | File[], addOptions: AddFilesOptions, runtime?: unknown) => UploadFile[] | undefined;
37
+ /** Remove a file from the queue */
38
+ removeFile: (id: string) => Promise<void>;
39
+ /** Clear all completed files */
40
+ clearCompleted: () => void;
41
+ /** Clear all files */
42
+ clearAll: () => void;
43
+ };
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Main consumer hook for file uploads - Composition of all specialized hooks.
3
+ *
4
+ * This hook provides the complete upload API by composing:
5
+ * - `useUploadFiles` - File state and selectors
6
+ * - `useUploadOperations` - File management (add, remove, clear)
7
+ * - `useUploadControl` - Single file controls (start, pause, resume, cancel)
8
+ * - `useUploadBatch` - Batch operations (startAll, pauseAll, etc.)
9
+ *
10
+ * Use this hook when you need the full upload functionality.
11
+ * For more focused components, use the specialized hooks directly.
12
+ *
13
+ * Global config (chunk sizes, concurrency) comes from UploadProvider.
14
+ * Handlers are provided per-file at selection time via addFiles options,
15
+ * allowing runtime-dependent targets (e.g., different folders/datasets).
16
+ *
17
+ * @example
18
+ * ```tsx
19
+ * // Full featured uploader
20
+ * function MyUploader({ datasetId }: { datasetId: string }) {
21
+ * const { files, addFiles, start, pause, startAll } = useUpload();
22
+ *
23
+ * return (
24
+ * <input
25
+ * type="file"
26
+ * onChange={(e) =>
27
+ * addFiles(e.target.files, {
28
+ * getHandlers: (file) => ({
29
+ * onGetUploadUrls: (fileName, partCount) =>
30
+ * api.getUploadUrls(datasetId, fileName, partCount),
31
+ * onPartComplete: (fileName, uploadId, partNum) =>
32
+ * api.markPartComplete(datasetId, uploadId, partNum),
33
+ * onFileComplete: (fileName, uploadId) =>
34
+ * api.completeUpload(datasetId, uploadId),
35
+ * }),
36
+ * })
37
+ * }
38
+ * />
39
+ * );
40
+ * }
41
+ *
42
+ * // Or use specialized hooks for focused components:
43
+ * function FileList() {
44
+ * const { files, pendingFiles } = useUploadFiles();
45
+ * // ...
46
+ * }
47
+ *
48
+ * function ControlButtons({ fileId }) {
49
+ * const { start, pause } = useUploadControl();
50
+ * // ...
51
+ * }
52
+ * ```
53
+ */
54
+ export declare function useUpload(): {
55
+ startAll: () => Promise<void>;
56
+ pauseAll: () => void;
57
+ resumeAll: () => Promise<void>;
58
+ cancelAll: () => void;
59
+ start: (id: string) => Promise<void>;
60
+ pause: (id: string) => void;
61
+ resume: (id: string) => Promise<void>;
62
+ cancel: (id: string) => Promise<void>;
63
+ addFiles: (files: FileList | File[], addOptions: import("..").AddFilesOptions, runtime?: unknown) => import("..").UploadFile[] | undefined;
64
+ removeFile: (id: string) => Promise<void>;
65
+ clearCompleted: () => void;
66
+ clearAll: () => void;
67
+ files: import("..").UploadFile[];
68
+ getFileById: (id: string) => import("..").UploadFile | undefined;
69
+ pendingFiles: import("..").UploadFile[];
70
+ uploadingFiles: import("..").UploadFile[];
71
+ completedFiles: import("..").UploadFile[];
72
+ failedFiles: import("..").UploadFile[];
73
+ pausedFiles: import("..").UploadFile[];
74
+ };
@@ -0,0 +1,16 @@
1
+ export { UploadProvider } from './context/upload-provider';
2
+ export { Uploader as FileUploader } from './components/uploader';
3
+ export { UploadDropZone as UploaderDropZone } from './components/uploader-drop-zone';
4
+ export { UploaderFileListLayout } from './components/uploader-file-list';
5
+ export { UploaderFileItem } from './components/uploader-file-item';
6
+ export { useUpload } from './hooks/use-upload';
7
+ export { useUploadFiles } from './hooks/use-upload-files';
8
+ export { useUploadOperations } from './hooks/use-upload-operations';
9
+ export { useUploadControl } from './hooks/use-upload-control';
10
+ export { useUploadBatch } from './hooks/use-upload-batch';
11
+ export type { UploadFile, ChunkState, UploadHandlers, CallbackResult, GetUploadUrlsResult, UploadUrl, UploadConfig, AddFilesOptions, } from './types';
12
+ export type { DropZoneError, UploadDropZoneClassNames, UploadDropZoneProps, } from './components/uploader-drop-zone';
13
+ export type { FileListClassNames } from './components/uploader-file-list';
14
+ export type { UploaderFileItemClassNames } from './components/uploader-file-item';
15
+ export { UploadStatus } from './constants';
16
+ export type { UploadStatusType } from './constants';
@@ -0,0 +1,71 @@
1
+ /**
2
+ * File Blob Store - IndexedDB storage for file blobs
3
+ *
4
+ * This store handles file blob persistence for the 'indexeddb' mode.
5
+ * Separate from metadata storage for cleaner data management and quota handling.
6
+ */
7
+ /**
8
+ * File Blob Store class for file data persistence
9
+ */
10
+ export declare class FileBlobStore {
11
+ private prefix;
12
+ private db;
13
+ constructor(prefix?: string);
14
+ /**
15
+ * Initialize the store (open database connection)
16
+ */
17
+ initialize(): Promise<void>;
18
+ /**
19
+ * Ensure database is initialized
20
+ */
21
+ private ensureDb;
22
+ /**
23
+ * Save a file blob
24
+ * @param fileId - Unique file identifier
25
+ * @param file - File object to store
26
+ */
27
+ saveBlob(fileId: string, file: File): Promise<void>;
28
+ /**
29
+ * Get a file by ID
30
+ * @param fileId - Unique file identifier
31
+ * @returns Reconstructed File object or null
32
+ */
33
+ getFile(fileId: string): Promise<File | null>;
34
+ /**
35
+ * Check if a file blob exists
36
+ */
37
+ hasBlob(fileId: string): Promise<boolean>;
38
+ /**
39
+ * Delete a file blob
40
+ */
41
+ deleteBlob(fileId: string): Promise<void>;
42
+ /**
43
+ * Delete multiple file blobs
44
+ */
45
+ deleteMany(fileIds: string[]): Promise<void>;
46
+ /**
47
+ * Clear all blobs
48
+ */
49
+ clearAll(): Promise<void>;
50
+ /**
51
+ * Get all stored file IDs
52
+ */
53
+ getAllIds(): Promise<string[]>;
54
+ /**
55
+ * Estimate storage usage for blobs
56
+ * @returns Estimated bytes used
57
+ */
58
+ estimateUsage(): Promise<number>;
59
+ /**
60
+ * Close the database connection
61
+ */
62
+ close(): void;
63
+ /**
64
+ * Delete the entire database (for mode switching)
65
+ */
66
+ deleteDatabase(): Promise<void>;
67
+ }
68
+ /**
69
+ * Default singleton instance
70
+ */
71
+ export declare const fileBlobStore: FileBlobStore;