@burdenoff/microfe-files 2026.510.101
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.
- package/README.md +12 -0
- package/dist/config/index.d.ts +33 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +28 -0
- package/dist/config/index.js.map +1 -0
- package/dist/dev/main.d.ts +1 -0
- package/dist/dev/main.d.ts.map +1 -0
- package/dist/files/FilesRoot.d.ts +31 -0
- package/dist/files/FilesRoot.d.ts.map +1 -0
- package/dist/files/FilesRoot.js +63 -0
- package/dist/files/FilesRoot.js.map +1 -0
- package/dist/files/FilesRoutes.d.ts +12 -0
- package/dist/files/FilesRoutes.d.ts.map +1 -0
- package/dist/files/FilesRoutes.js +45 -0
- package/dist/files/FilesRoutes.js.map +1 -0
- package/dist/files/components/ActionMenu.d.ts +19 -0
- package/dist/files/components/ActionMenu.d.ts.map +1 -0
- package/dist/files/components/ActionMenu.js +73 -0
- package/dist/files/components/ActionMenu.js.map +1 -0
- package/dist/files/components/ConfirmDialog.d.ts +14 -0
- package/dist/files/components/ConfirmDialog.d.ts.map +1 -0
- package/dist/files/components/ConfirmDialog.js +85 -0
- package/dist/files/components/ConfirmDialog.js.map +1 -0
- package/dist/files/components/ContextMenu.d.ts +59 -0
- package/dist/files/components/ContextMenu.d.ts.map +1 -0
- package/dist/files/components/ContextMenu.js +136 -0
- package/dist/files/components/ContextMenu.js.map +1 -0
- package/dist/files/components/CopyDialog.d.ts +12 -0
- package/dist/files/components/CopyDialog.d.ts.map +1 -0
- package/dist/files/components/CopyDialog.js +139 -0
- package/dist/files/components/CopyDialog.js.map +1 -0
- package/dist/files/components/EmptyState.d.ts +8 -0
- package/dist/files/components/EmptyState.d.ts.map +1 -0
- package/dist/files/components/EmptyState.js +66 -0
- package/dist/files/components/EmptyState.js.map +1 -0
- package/dist/files/components/FileBrowser.d.ts +37 -0
- package/dist/files/components/FileBrowser.d.ts.map +1 -0
- package/dist/files/components/FileBrowser.js +421 -0
- package/dist/files/components/FileBrowser.js.map +1 -0
- package/dist/files/components/FileCard.d.ts +30 -0
- package/dist/files/components/FileCard.d.ts.map +1 -0
- package/dist/files/components/FileCard.js +233 -0
- package/dist/files/components/FileCard.js.map +1 -0
- package/dist/files/components/FileInfoPanel.d.ts +9 -0
- package/dist/files/components/FileInfoPanel.d.ts.map +1 -0
- package/dist/files/components/FileInfoPanel.js +224 -0
- package/dist/files/components/FileInfoPanel.js.map +1 -0
- package/dist/files/components/FileListItem.d.ts +46 -0
- package/dist/files/components/FileListItem.d.ts.map +1 -0
- package/dist/files/components/FileListItem.js +235 -0
- package/dist/files/components/FileListItem.js.map +1 -0
- package/dist/files/components/FilePreviewModal.d.ts +17 -0
- package/dist/files/components/FilePreviewModal.d.ts.map +1 -0
- package/dist/files/components/FilePreviewModal.js +175 -0
- package/dist/files/components/FilePreviewModal.js.map +1 -0
- package/dist/files/components/FileVersionPanel.d.ts +9 -0
- package/dist/files/components/FileVersionPanel.d.ts.map +1 -0
- package/dist/files/components/FileVersionPanel.js +227 -0
- package/dist/files/components/FileVersionPanel.js.map +1 -0
- package/dist/files/components/FolderCard.d.ts +34 -0
- package/dist/files/components/FolderCard.d.ts.map +1 -0
- package/dist/files/components/FolderCard.js +225 -0
- package/dist/files/components/FolderCard.js.map +1 -0
- package/dist/files/components/MoveDialog.d.ts +12 -0
- package/dist/files/components/MoveDialog.d.ts.map +1 -0
- package/dist/files/components/MoveDialog.js +123 -0
- package/dist/files/components/MoveDialog.js.map +1 -0
- package/dist/files/components/SearchBar.d.ts +13 -0
- package/dist/files/components/SearchBar.d.ts.map +1 -0
- package/dist/files/components/SearchBar.js +257 -0
- package/dist/files/components/SearchBar.js.map +1 -0
- package/dist/files/components/ShareDialog.d.ts +24 -0
- package/dist/files/components/ShareDialog.d.ts.map +1 -0
- package/dist/files/components/ShareDialog.js +201 -0
- package/dist/files/components/ShareDialog.js.map +1 -0
- package/dist/files/components/TabBar.d.ts +14 -0
- package/dist/files/components/TabBar.d.ts.map +1 -0
- package/dist/files/components/TabBar.js +65 -0
- package/dist/files/components/TabBar.js.map +1 -0
- package/dist/files/components/Toast.d.ts +14 -0
- package/dist/files/components/Toast.d.ts.map +1 -0
- package/dist/files/components/Toast.js +51 -0
- package/dist/files/components/Toast.js.map +1 -0
- package/dist/files/components/UploadQueue.d.ts +21 -0
- package/dist/files/components/UploadQueue.d.ts.map +1 -0
- package/dist/files/components/UploadQueue.js +171 -0
- package/dist/files/components/UploadQueue.js.map +1 -0
- package/dist/files/components/index.d.ts +43 -0
- package/dist/files/components/index.d.ts.map +1 -0
- package/dist/files/components/viewers/AudioPlayer.d.ts +8 -0
- package/dist/files/components/viewers/AudioPlayer.d.ts.map +1 -0
- package/dist/files/components/viewers/AudioPlayer.js +102 -0
- package/dist/files/components/viewers/AudioPlayer.js.map +1 -0
- package/dist/files/components/viewers/CodeViewer.d.ts +16 -0
- package/dist/files/components/viewers/CodeViewer.d.ts.map +1 -0
- package/dist/files/components/viewers/CodeViewer.js +113 -0
- package/dist/files/components/viewers/CodeViewer.js.map +1 -0
- package/dist/files/components/viewers/ImageViewer.d.ts +8 -0
- package/dist/files/components/viewers/ImageViewer.d.ts.map +1 -0
- package/dist/files/components/viewers/ImageViewer.js +138 -0
- package/dist/files/components/viewers/ImageViewer.js.map +1 -0
- package/dist/files/components/viewers/PDFViewer.d.ts +15 -0
- package/dist/files/components/viewers/PDFViewer.d.ts.map +1 -0
- package/dist/files/components/viewers/PDFViewer.js +80 -0
- package/dist/files/components/viewers/PDFViewer.js.map +1 -0
- package/dist/files/components/viewers/TextViewer.d.ts +8 -0
- package/dist/files/components/viewers/TextViewer.d.ts.map +1 -0
- package/dist/files/components/viewers/TextViewer.js +121 -0
- package/dist/files/components/viewers/TextViewer.js.map +1 -0
- package/dist/files/components/viewers/VideoPlayer.d.ts +8 -0
- package/dist/files/components/viewers/VideoPlayer.d.ts.map +1 -0
- package/dist/files/components/viewers/VideoPlayer.js +138 -0
- package/dist/files/components/viewers/VideoPlayer.js.map +1 -0
- package/dist/files/components/viewers/index.d.ts +7 -0
- package/dist/files/components/viewers/index.d.ts.map +1 -0
- package/dist/files/components/viewers/index.js +6 -0
- package/dist/files/graphql-types.d.ts +317 -0
- package/dist/files/graphql-types.d.ts.map +1 -0
- package/dist/files/hooks/useBatchOperations.d.ts +32 -0
- package/dist/files/hooks/useBatchOperations.d.ts.map +1 -0
- package/dist/files/hooks/useBatchOperations.js +18 -0
- package/dist/files/hooks/useBatchOperations.js.map +1 -0
- package/dist/files/hooks/useBinItems.d.ts +11 -0
- package/dist/files/hooks/useBinItems.d.ts.map +1 -0
- package/dist/files/hooks/useBinItems.js +27 -0
- package/dist/files/hooks/useBinItems.js.map +1 -0
- package/dist/files/hooks/useBrowsePage.d.ts +18 -0
- package/dist/files/hooks/useBrowsePage.d.ts.map +1 -0
- package/dist/files/hooks/useBrowsePage.js +34 -0
- package/dist/files/hooks/useBrowsePage.js.map +1 -0
- package/dist/files/hooks/useCopyFile.d.ts +14 -0
- package/dist/files/hooks/useCopyFile.d.ts.map +1 -0
- package/dist/files/hooks/useCopyFile.js +22 -0
- package/dist/files/hooks/useCopyFile.js.map +1 -0
- package/dist/files/hooks/useCreateFolder.d.ts +14 -0
- package/dist/files/hooks/useCreateFolder.d.ts.map +1 -0
- package/dist/files/hooks/useCreateFolder.js +14 -0
- package/dist/files/hooks/useCreateFolder.js.map +1 -0
- package/dist/files/hooks/useCreateFolderShare.d.ts +16 -0
- package/dist/files/hooks/useCreateFolderShare.d.ts.map +1 -0
- package/dist/files/hooks/useCreateFolderShare.js +14 -0
- package/dist/files/hooks/useCreateFolderShare.js.map +1 -0
- package/dist/files/hooks/useCreateShare.d.ts +16 -0
- package/dist/files/hooks/useCreateShare.d.ts.map +1 -0
- package/dist/files/hooks/useCreateShare.js +14 -0
- package/dist/files/hooks/useCreateShare.js.map +1 -0
- package/dist/files/hooks/useDeleteFile.d.ts +9 -0
- package/dist/files/hooks/useDeleteFile.d.ts.map +1 -0
- package/dist/files/hooks/useDeleteFile.js +20 -0
- package/dist/files/hooks/useDeleteFile.js.map +1 -0
- package/dist/files/hooks/useDeleteFolder.d.ts +10 -0
- package/dist/files/hooks/useDeleteFolder.d.ts.map +1 -0
- package/dist/files/hooks/useDeleteFolder.js +24 -0
- package/dist/files/hooks/useDeleteFolder.js.map +1 -0
- package/dist/files/hooks/useDragDrop.d.ts +31 -0
- package/dist/files/hooks/useDragDrop.d.ts.map +1 -0
- package/dist/files/hooks/useDragDrop.js +45 -0
- package/dist/files/hooks/useDragDrop.js.map +1 -0
- package/dist/files/hooks/useFileVersions.d.ts +52 -0
- package/dist/files/hooks/useFileVersions.d.ts.map +1 -0
- package/dist/files/hooks/useFileVersions.js +52 -0
- package/dist/files/hooks/useFileVersions.js.map +1 -0
- package/dist/files/hooks/useFiles.d.ts +18 -0
- package/dist/files/hooks/useFiles.d.ts.map +1 -0
- package/dist/files/hooks/useFolder.d.ts +7 -0
- package/dist/files/hooks/useFolder.d.ts.map +1 -0
- package/dist/files/hooks/useFolderPath.d.ts +2 -0
- package/dist/files/hooks/useFolderPath.d.ts.map +1 -0
- package/dist/files/hooks/useFoldersQuery.d.ts +7 -0
- package/dist/files/hooks/useFoldersQuery.d.ts.map +1 -0
- package/dist/files/hooks/useFoldersQuery.js +13 -0
- package/dist/files/hooks/useFoldersQuery.js.map +1 -0
- package/dist/files/hooks/useKeyboardNavigation.d.ts +17 -0
- package/dist/files/hooks/useKeyboardNavigation.d.ts.map +1 -0
- package/dist/files/hooks/useKeyboardNavigation.js +105 -0
- package/dist/files/hooks/useKeyboardNavigation.js.map +1 -0
- package/dist/files/hooks/useMoveFile.d.ts +10 -0
- package/dist/files/hooks/useMoveFile.d.ts.map +1 -0
- package/dist/files/hooks/useMoveFile.js +21 -0
- package/dist/files/hooks/useMoveFile.js.map +1 -0
- package/dist/files/hooks/useMoveFolder.d.ts +10 -0
- package/dist/files/hooks/useMoveFolder.d.ts.map +1 -0
- package/dist/files/hooks/useMoveFolder.js +21 -0
- package/dist/files/hooks/useMoveFolder.js.map +1 -0
- package/dist/files/hooks/usePermanentlyDeleteFile.d.ts +9 -0
- package/dist/files/hooks/usePermanentlyDeleteFile.d.ts.map +1 -0
- package/dist/files/hooks/usePermanentlyDeleteFile.js +18 -0
- package/dist/files/hooks/usePermanentlyDeleteFile.js.map +1 -0
- package/dist/files/hooks/usePermanentlyDeleteFolder.d.ts +9 -0
- package/dist/files/hooks/usePermanentlyDeleteFolder.d.ts.map +1 -0
- package/dist/files/hooks/usePermanentlyDeleteFolder.js +18 -0
- package/dist/files/hooks/usePermanentlyDeleteFolder.js.map +1 -0
- package/dist/files/hooks/useRecentFiles.d.ts +10 -0
- package/dist/files/hooks/useRecentFiles.d.ts.map +1 -0
- package/dist/files/hooks/useRecentFiles.js +24 -0
- package/dist/files/hooks/useRecentFiles.js.map +1 -0
- package/dist/files/hooks/useRenameFile.d.ts +10 -0
- package/dist/files/hooks/useRenameFile.d.ts.map +1 -0
- package/dist/files/hooks/useRenameFile.js +21 -0
- package/dist/files/hooks/useRenameFile.js.map +1 -0
- package/dist/files/hooks/useRenameFolder.d.ts +10 -0
- package/dist/files/hooks/useRenameFolder.d.ts.map +1 -0
- package/dist/files/hooks/useRenameFolder.js +21 -0
- package/dist/files/hooks/useRenameFolder.js.map +1 -0
- package/dist/files/hooks/useRestoreFile.d.ts +9 -0
- package/dist/files/hooks/useRestoreFile.d.ts.map +1 -0
- package/dist/files/hooks/useRestoreFile.js +21 -0
- package/dist/files/hooks/useRestoreFile.js.map +1 -0
- package/dist/files/hooks/useRestoreFolder.d.ts +9 -0
- package/dist/files/hooks/useRestoreFolder.d.ts.map +1 -0
- package/dist/files/hooks/useRestoreFolder.js +21 -0
- package/dist/files/hooks/useRestoreFolder.js.map +1 -0
- package/dist/files/hooks/useSearch.d.ts +15 -0
- package/dist/files/hooks/useSearch.d.ts.map +1 -0
- package/dist/files/hooks/useSearch.js +27 -0
- package/dist/files/hooks/useSearch.js.map +1 -0
- package/dist/files/hooks/useStarredItems.d.ts +10 -0
- package/dist/files/hooks/useStarredItems.d.ts.map +1 -0
- package/dist/files/hooks/useStarredItems.js +18 -0
- package/dist/files/hooks/useStarredItems.js.map +1 -0
- package/dist/files/hooks/useToast.d.ts +11 -0
- package/dist/files/hooks/useToast.d.ts.map +1 -0
- package/dist/files/hooks/useToast.js +28 -0
- package/dist/files/hooks/useToast.js.map +1 -0
- package/dist/files/hooks/useToggleStar.d.ts +10 -0
- package/dist/files/hooks/useToggleStar.d.ts.map +1 -0
- package/dist/files/hooks/useToggleStar.js +26 -0
- package/dist/files/hooks/useToggleStar.js.map +1 -0
- package/dist/files/hooks/useUploadFile.d.ts +25 -0
- package/dist/files/hooks/useUploadFile.d.ts.map +1 -0
- package/dist/files/hooks/useUploadFile.js +74 -0
- package/dist/files/hooks/useUploadFile.js.map +1 -0
- package/dist/files/index.d.ts +29 -0
- package/dist/files/index.d.ts.map +1 -0
- package/dist/files/index.js +3 -0
- package/dist/files/pages/BrowserPage.d.ts +5 -0
- package/dist/files/pages/BrowserPage.d.ts.map +1 -0
- package/dist/files/pages/BrowserPage.js +1014 -0
- package/dist/files/pages/BrowserPage.js.map +1 -0
- package/dist/files/pages/ShareAccessPage.d.ts +2 -0
- package/dist/files/pages/ShareAccessPage.d.ts.map +1 -0
- package/dist/files/pages/ShareAccessPage.js +162 -0
- package/dist/files/pages/ShareAccessPage.js.map +1 -0
- package/dist/files/providers/FilesProvider.d.ts +25 -0
- package/dist/files/providers/FilesProvider.d.ts.map +1 -0
- package/dist/files/providers/FilesProvider.js +18 -0
- package/dist/files/providers/FilesProvider.js.map +1 -0
- package/dist/files/store/filesStore.d.ts +99 -0
- package/dist/files/store/filesStore.d.ts.map +1 -0
- package/dist/files/store/filesStore.js +129 -0
- package/dist/files/store/filesStore.js.map +1 -0
- package/dist/files/types.d.ts +266 -0
- package/dist/files/types.d.ts.map +1 -0
- package/dist/files/utils/events.d.ts +6 -0
- package/dist/files/utils/events.d.ts.map +1 -0
- package/dist/files/utils/events.js +16 -0
- package/dist/files/utils/events.js.map +1 -0
- package/dist/files/utils/i18n.d.ts +5 -0
- package/dist/files/utils/i18n.d.ts.map +1 -0
- package/dist/files/utils/i18n.js +15 -0
- package/dist/files/utils/i18n.js.map +1 -0
- package/dist/files/utils/index.d.ts +74 -0
- package/dist/files/utils/index.d.ts.map +1 -0
- package/dist/files/utils/index.js +50 -0
- package/dist/files/utils/index.js.map +1 -0
- package/dist/files/utils/thumbnail.d.ts +5 -0
- package/dist/files/utils/thumbnail.d.ts.map +1 -0
- package/dist/files/utils/thumbnail.js +39 -0
- package/dist/files/utils/thumbnail.js.map +1 -0
- package/dist/files.d.ts +2 -0
- package/dist/files.js +6 -0
- package/dist/generated/global-operations.d.ts +2 -0
- package/dist/generated/global-operations.d.ts.map +1 -0
- package/dist/generated/global-types.d.ts +21253 -0
- package/dist/generated/global-types.d.ts.map +1 -0
- package/dist/generated/wspace-operations.d.ts +2706 -0
- package/dist/generated/wspace-operations.d.ts.map +1 -0
- package/dist/generated/wspace-operations.js +1085 -0
- package/dist/generated/wspace-operations.js.map +1 -0
- package/dist/generated/wspace-types.d.ts +55214 -0
- package/dist/generated/wspace-types.d.ts.map +1 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/shared/types/index.d.ts +101 -0
- package/dist/shared/types/index.d.ts.map +1 -0
- package/dist/utils/nativeBridge.d.ts +3 -0
- package/dist/utils/nativeBridge.d.ts.map +1 -0
- package/dist/utils/nativeBridge.js +2 -0
- package/package.json +126 -0
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { create as e } from "zustand";
|
|
2
|
+
import { devtools as t, persist as n } from "zustand/middleware";
|
|
3
|
+
import { createProfileScopedStorage as r } from "@burdenoff/fe-libs/shared/utils";
|
|
4
|
+
//#region src/files/store/filesStore.ts
|
|
5
|
+
var i = {
|
|
6
|
+
currentFolder: null,
|
|
7
|
+
viewMode: "grid",
|
|
8
|
+
sortBy: "date",
|
|
9
|
+
sortDirection: "desc",
|
|
10
|
+
selectedFiles: /* @__PURE__ */ new Set(),
|
|
11
|
+
selectedFolders: /* @__PURE__ */ new Set(),
|
|
12
|
+
uploadQueue: [],
|
|
13
|
+
isUploadPanelOpen: !1,
|
|
14
|
+
previewFile: null,
|
|
15
|
+
isPreviewOpen: !1,
|
|
16
|
+
filters: {},
|
|
17
|
+
breadcrumbs: [],
|
|
18
|
+
isSidebarOpen: !0,
|
|
19
|
+
isShareDialogOpen: !1,
|
|
20
|
+
shareDialogFile: null
|
|
21
|
+
}, a = e()(t(n((e, t) => ({
|
|
22
|
+
...i,
|
|
23
|
+
setCurrentFolder: (t) => e({ currentFolder: t }),
|
|
24
|
+
setBreadcrumbs: (t) => e({ breadcrumbs: t }),
|
|
25
|
+
navigateToFolder: (t, n) => e((e) => ({ breadcrumbs: [...e.breadcrumbs, {
|
|
26
|
+
id: t,
|
|
27
|
+
name: n
|
|
28
|
+
}] })),
|
|
29
|
+
navigateUp: () => e((e) => ({ breadcrumbs: e.breadcrumbs.slice(0, -1) })),
|
|
30
|
+
navigateToRoot: () => e({
|
|
31
|
+
breadcrumbs: [],
|
|
32
|
+
currentFolder: null
|
|
33
|
+
}),
|
|
34
|
+
setViewMode: (t) => e({ viewMode: t }),
|
|
35
|
+
setSortBy: (t) => e({ sortBy: t }),
|
|
36
|
+
toggleSortDirection: () => e((e) => ({ sortDirection: e.sortDirection === "asc" ? "desc" : "asc" })),
|
|
37
|
+
selectFile: (t) => e((e) => {
|
|
38
|
+
let n = new Set(e.selectedFiles);
|
|
39
|
+
return n.add(t), { selectedFiles: n };
|
|
40
|
+
}),
|
|
41
|
+
deselectFile: (t) => e((e) => {
|
|
42
|
+
let n = new Set(e.selectedFiles);
|
|
43
|
+
return n.delete(t), { selectedFiles: n };
|
|
44
|
+
}),
|
|
45
|
+
toggleFileSelection: (t) => e((e) => {
|
|
46
|
+
let n = new Set(e.selectedFiles);
|
|
47
|
+
return n.has(t) ? n.delete(t) : n.add(t), { selectedFiles: n };
|
|
48
|
+
}),
|
|
49
|
+
selectAllFiles: (t) => e({ selectedFiles: new Set(t) }),
|
|
50
|
+
clearFileSelection: () => e({ selectedFiles: /* @__PURE__ */ new Set() }),
|
|
51
|
+
selectFolder: (t) => e((e) => {
|
|
52
|
+
let n = new Set(e.selectedFolders);
|
|
53
|
+
return n.add(t), { selectedFolders: n };
|
|
54
|
+
}),
|
|
55
|
+
deselectFolder: (t) => e((e) => {
|
|
56
|
+
let n = new Set(e.selectedFolders);
|
|
57
|
+
return n.delete(t), { selectedFolders: n };
|
|
58
|
+
}),
|
|
59
|
+
toggleFolderSelection: (t) => e((e) => {
|
|
60
|
+
let n = new Set(e.selectedFolders);
|
|
61
|
+
return n.has(t) ? n.delete(t) : n.add(t), { selectedFolders: n };
|
|
62
|
+
}),
|
|
63
|
+
selectAllFolders: (t) => e({ selectedFolders: new Set(t) }),
|
|
64
|
+
clearSelection: () => e({
|
|
65
|
+
selectedFiles: /* @__PURE__ */ new Set(),
|
|
66
|
+
selectedFolders: /* @__PURE__ */ new Set()
|
|
67
|
+
}),
|
|
68
|
+
addToUploadQueue: (t) => e((e) => ({
|
|
69
|
+
uploadQueue: [...e.uploadQueue, ...t],
|
|
70
|
+
isUploadPanelOpen: !0
|
|
71
|
+
})),
|
|
72
|
+
updateUploadItem: (t, n) => e((e) => ({ uploadQueue: e.uploadQueue.map((e) => e.id === t ? {
|
|
73
|
+
...e,
|
|
74
|
+
...n
|
|
75
|
+
} : e) })),
|
|
76
|
+
removeFromUploadQueue: (t) => e((e) => ({ uploadQueue: e.uploadQueue.filter((e) => e.id !== t) })),
|
|
77
|
+
clearUploadQueue: () => e({ uploadQueue: [] }),
|
|
78
|
+
setUploadPanelOpen: (t) => e({ isUploadPanelOpen: t }),
|
|
79
|
+
openPreview: (t) => e({
|
|
80
|
+
previewFile: t,
|
|
81
|
+
isPreviewOpen: !0
|
|
82
|
+
}),
|
|
83
|
+
closePreview: () => e({
|
|
84
|
+
previewFile: null,
|
|
85
|
+
isPreviewOpen: !1
|
|
86
|
+
}),
|
|
87
|
+
previewNextFile: (t) => e((e) => {
|
|
88
|
+
if (!e.previewFile) return {};
|
|
89
|
+
let n = t.findIndex((t) => t.id === e.previewFile?.id) + 1;
|
|
90
|
+
return n < t.length ? { previewFile: t[n] } : {};
|
|
91
|
+
}),
|
|
92
|
+
previewPreviousFile: (t) => e((e) => {
|
|
93
|
+
if (!e.previewFile) return {};
|
|
94
|
+
let n = t.findIndex((t) => t.id === e.previewFile?.id) - 1;
|
|
95
|
+
return n >= 0 ? { previewFile: t[n] } : {};
|
|
96
|
+
}),
|
|
97
|
+
setFilters: (t) => e((e) => ({ filters: {
|
|
98
|
+
...e.filters,
|
|
99
|
+
...t
|
|
100
|
+
} })),
|
|
101
|
+
clearFilters: () => e({ filters: {} }),
|
|
102
|
+
toggleSidebar: () => e((e) => ({ isSidebarOpen: !e.isSidebarOpen })),
|
|
103
|
+
setSidebarOpen: (t) => e({ isSidebarOpen: t }),
|
|
104
|
+
openShareDialog: (t) => e({
|
|
105
|
+
isShareDialogOpen: !0,
|
|
106
|
+
shareDialogFile: t
|
|
107
|
+
}),
|
|
108
|
+
closeShareDialog: () => e({
|
|
109
|
+
isShareDialogOpen: !1,
|
|
110
|
+
shareDialogFile: null
|
|
111
|
+
}),
|
|
112
|
+
reset: () => e(i)
|
|
113
|
+
}), {
|
|
114
|
+
name: "burdenoff-files-storage",
|
|
115
|
+
storage: r(),
|
|
116
|
+
partialize: (e) => ({
|
|
117
|
+
viewMode: e.viewMode,
|
|
118
|
+
sortBy: e.sortBy,
|
|
119
|
+
sortDirection: e.sortDirection,
|
|
120
|
+
isSidebarOpen: e.isSidebarOpen
|
|
121
|
+
})
|
|
122
|
+
}), {
|
|
123
|
+
name: "Files Store",
|
|
124
|
+
enabled: !1
|
|
125
|
+
}));
|
|
126
|
+
//#endregion
|
|
127
|
+
export { a as useFilesStore };
|
|
128
|
+
|
|
129
|
+
//# sourceMappingURL=filesStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filesStore.js","names":[],"sources":["../../../src/files/store/filesStore.ts"],"sourcesContent":["import { create } from \"zustand\";\nimport { devtools, persist } from \"zustand/middleware\";\nimport { createProfileScopedStorage } from \"@burdenoff/fe-libs/shared/utils\";\nimport type {\n FileViewMode,\n FileSortBy,\n FileSortDirection,\n FolderItem,\n FileItem,\n UploadItem,\n FileFilters,\n} from \"../types\";\n\ninterface FilesState {\n // View state\n currentFolder: FolderItem | null;\n viewMode: FileViewMode;\n sortBy: FileSortBy;\n sortDirection: FileSortDirection;\n\n // Selection state\n selectedFiles: Set<string>;\n selectedFolders: Set<string>;\n\n // Upload state\n uploadQueue: UploadItem[];\n isUploadPanelOpen: boolean;\n\n // Preview state\n previewFile: FileItem | null;\n isPreviewOpen: boolean;\n\n // Filter state\n filters: FileFilters;\n\n // Breadcrumb state\n breadcrumbs: Array<{ id: string; name: string }>;\n\n // UI state\n isSidebarOpen: boolean;\n isShareDialogOpen: boolean;\n shareDialogFile: FileItem | null;\n\n // Actions - Folder navigation\n setCurrentFolder: (folder: FolderItem | null) => void;\n setBreadcrumbs: (breadcrumbs: Array<{ id: string; name: string }>) => void;\n navigateToFolder: (folderId: string, folderName: string) => void;\n navigateUp: () => void;\n navigateToRoot: () => void;\n\n // Actions - View\n setViewMode: (mode: FileViewMode) => void;\n setSortBy: (sortBy: FileSortBy) => void;\n toggleSortDirection: () => void;\n\n // Actions - Selection\n selectFile: (fileId: string) => void;\n deselectFile: (fileId: string) => void;\n toggleFileSelection: (fileId: string) => void;\n selectAllFiles: (fileIds: string[]) => void;\n clearFileSelection: () => void;\n selectFolder: (folderId: string) => void;\n deselectFolder: (folderId: string) => void;\n toggleFolderSelection: (folderId: string) => void;\n selectAllFolders: (folderIds: string[]) => void;\n clearSelection: () => void;\n\n // Actions - Upload\n addToUploadQueue: (items: UploadItem[]) => void;\n updateUploadItem: (id: string, updates: Partial<UploadItem>) => void;\n removeFromUploadQueue: (id: string) => void;\n clearUploadQueue: () => void;\n setUploadPanelOpen: (open: boolean) => void;\n\n // Actions - Preview\n openPreview: (file: FileItem) => void;\n closePreview: () => void;\n previewNextFile: (files: FileItem[]) => void;\n previewPreviousFile: (files: FileItem[]) => void;\n\n // Actions - Filters\n setFilters: (filters: Partial<FileFilters>) => void;\n clearFilters: () => void;\n\n // Actions - UI\n toggleSidebar: () => void;\n setSidebarOpen: (open: boolean) => void;\n openShareDialog: (file: FileItem) => void;\n closeShareDialog: () => void;\n\n // Actions - Reset\n reset: () => void;\n}\n\nconst initialState = {\n currentFolder: null,\n viewMode: \"grid\" as FileViewMode,\n sortBy: \"date\" as FileSortBy,\n sortDirection: \"desc\" as FileSortDirection,\n selectedFiles: new Set<string>(),\n selectedFolders: new Set<string>(),\n uploadQueue: [],\n isUploadPanelOpen: false,\n previewFile: null,\n isPreviewOpen: false,\n filters: {},\n breadcrumbs: [],\n isSidebarOpen: true,\n isShareDialogOpen: false,\n shareDialogFile: null,\n};\n\nexport const useFilesStore = create<FilesState>()(\n devtools(\n persist(\n (set, get) => ({\n ...initialState,\n\n // Folder navigation\n setCurrentFolder: (folder) => set({ currentFolder: folder }),\n\n setBreadcrumbs: (breadcrumbs) => set({ breadcrumbs }),\n\n navigateToFolder: (folderId, folderName) =>\n set((state) => ({\n breadcrumbs: [\n ...state.breadcrumbs,\n { id: folderId, name: folderName },\n ],\n })),\n\n navigateUp: () =>\n set((state) => ({\n breadcrumbs: state.breadcrumbs.slice(0, -1),\n })),\n\n navigateToRoot: () =>\n set({\n breadcrumbs: [],\n currentFolder: null,\n }),\n\n // View\n setViewMode: (mode) => set({ viewMode: mode }),\n setSortBy: (sortBy) => set({ sortBy }),\n toggleSortDirection: () =>\n set((state) => ({\n sortDirection: state.sortDirection === \"asc\" ? \"desc\" : \"asc\",\n })),\n\n // Selection\n selectFile: (fileId) =>\n set((state) => {\n const newSelected = new Set(state.selectedFiles);\n newSelected.add(fileId);\n return { selectedFiles: newSelected };\n }),\n\n deselectFile: (fileId) =>\n set((state) => {\n const newSelected = new Set(state.selectedFiles);\n newSelected.delete(fileId);\n return { selectedFiles: newSelected };\n }),\n\n toggleFileSelection: (fileId) =>\n set((state) => {\n const newSelected = new Set(state.selectedFiles);\n if (newSelected.has(fileId)) {\n newSelected.delete(fileId);\n } else {\n newSelected.add(fileId);\n }\n return { selectedFiles: newSelected };\n }),\n\n selectAllFiles: (fileIds) => set({ selectedFiles: new Set(fileIds) }),\n\n clearFileSelection: () => set({ selectedFiles: new Set() }),\n\n selectFolder: (folderId) =>\n set((state) => {\n const newSelected = new Set(state.selectedFolders);\n newSelected.add(folderId);\n return { selectedFolders: newSelected };\n }),\n\n deselectFolder: (folderId) =>\n set((state) => {\n const newSelected = new Set(state.selectedFolders);\n newSelected.delete(folderId);\n return { selectedFolders: newSelected };\n }),\n\n toggleFolderSelection: (folderId) =>\n set((state) => {\n const newSelected = new Set(state.selectedFolders);\n if (newSelected.has(folderId)) {\n newSelected.delete(folderId);\n } else {\n newSelected.add(folderId);\n }\n return { selectedFolders: newSelected };\n }),\n\n selectAllFolders: (folderIds) =>\n set({ selectedFolders: new Set(folderIds) }),\n\n clearSelection: () =>\n set({\n selectedFiles: new Set(),\n selectedFolders: new Set(),\n }),\n\n // Upload\n addToUploadQueue: (items) =>\n set((state) => ({\n uploadQueue: [...state.uploadQueue, ...items],\n isUploadPanelOpen: true,\n })),\n\n updateUploadItem: (id, updates) =>\n set((state) => ({\n uploadQueue: state.uploadQueue.map((item) =>\n item.id === id ? { ...item, ...updates } : item,\n ),\n })),\n\n removeFromUploadQueue: (id) =>\n set((state) => ({\n uploadQueue: state.uploadQueue.filter((item) => item.id !== id),\n })),\n\n clearUploadQueue: () => set({ uploadQueue: [] }),\n\n setUploadPanelOpen: (open) => set({ isUploadPanelOpen: open }),\n\n // Preview\n openPreview: (file) =>\n set({\n previewFile: file,\n isPreviewOpen: true,\n }),\n\n closePreview: () =>\n set({\n previewFile: null,\n isPreviewOpen: false,\n }),\n\n previewNextFile: (files) =>\n set((state) => {\n if (!state.previewFile) return {};\n const currentIndex = files.findIndex(\n (f) => f.id === state.previewFile?.id,\n );\n const nextIndex = currentIndex + 1;\n if (nextIndex < files.length) {\n return { previewFile: files[nextIndex] };\n }\n return {};\n }),\n\n previewPreviousFile: (files) =>\n set((state) => {\n if (!state.previewFile) return {};\n const currentIndex = files.findIndex(\n (f) => f.id === state.previewFile?.id,\n );\n const prevIndex = currentIndex - 1;\n if (prevIndex >= 0) {\n return { previewFile: files[prevIndex] };\n }\n return {};\n }),\n\n // Filters\n setFilters: (filters) =>\n set((state) => ({\n filters: { ...state.filters, ...filters },\n })),\n\n clearFilters: () => set({ filters: {} }),\n\n // UI\n toggleSidebar: () =>\n set((state) => ({ isSidebarOpen: !state.isSidebarOpen })),\n\n setSidebarOpen: (open) => set({ isSidebarOpen: open }),\n\n openShareDialog: (file) =>\n set({\n isShareDialogOpen: true,\n shareDialogFile: file,\n }),\n\n closeShareDialog: () =>\n set({\n isShareDialogOpen: false,\n shareDialogFile: null,\n }),\n\n // Reset\n reset: () => set(initialState),\n }),\n {\n name: \"burdenoff-files-storage\",\n storage: createProfileScopedStorage(),\n partialize: (state) => ({\n viewMode: state.viewMode,\n sortBy: state.sortBy,\n sortDirection: state.sortDirection,\n isSidebarOpen: state.isSidebarOpen,\n }),\n },\n ),\n { name: \"Files Store\", enabled: import.meta.env.DEV },\n ),\n);\n"],"mappings":";;;;AA8FA,IAAM,IAAe;CACnB,eAAe;CACf,UAAU;CACV,QAAQ;CACR,eAAe;CACf,+BAAe,IAAI,KAAa;CAChC,iCAAiB,IAAI,KAAa;CAClC,aAAa,EAAE;CACf,mBAAmB;CACnB,aAAa;CACb,eAAe;CACf,SAAS,EAAE;CACX,aAAa,EAAE;CACf,eAAe;CACf,mBAAmB;CACnB,iBAAiB;CAClB,EAEY,IAAgB,GAAoB,CAC/C,EACE,GACG,GAAK,OAAS;CACb,GAAG;CAGH,mBAAmB,MAAW,EAAI,EAAE,eAAe,GAAQ,CAAC;CAE5D,iBAAiB,MAAgB,EAAI,EAAE,gBAAa,CAAC;CAErD,mBAAmB,GAAU,MAC3B,GAAK,OAAW,EACd,aAAa,CACX,GAAG,EAAM,aACT;EAAE,IAAI;EAAU,MAAM;EAAY,CACnC,EACF,EAAE;CAEL,kBACE,GAAK,OAAW,EACd,aAAa,EAAM,YAAY,MAAM,GAAG,GAAG,EAC5C,EAAE;CAEL,sBACE,EAAI;EACF,aAAa,EAAE;EACf,eAAe;EAChB,CAAC;CAGJ,cAAc,MAAS,EAAI,EAAE,UAAU,GAAM,CAAC;CAC9C,YAAY,MAAW,EAAI,EAAE,WAAQ,CAAC;CACtC,2BACE,GAAK,OAAW,EACd,eAAe,EAAM,kBAAkB,QAAQ,SAAS,OACzD,EAAE;CAGL,aAAa,MACX,GAAK,MAAU;EACb,IAAM,IAAc,IAAI,IAAI,EAAM,cAAc;AAEhD,SADA,EAAY,IAAI,EAAO,EAChB,EAAE,eAAe,GAAa;GACrC;CAEJ,eAAe,MACb,GAAK,MAAU;EACb,IAAM,IAAc,IAAI,IAAI,EAAM,cAAc;AAEhD,SADA,EAAY,OAAO,EAAO,EACnB,EAAE,eAAe,GAAa;GACrC;CAEJ,sBAAsB,MACpB,GAAK,MAAU;EACb,IAAM,IAAc,IAAI,IAAI,EAAM,cAAc;AAMhD,SALI,EAAY,IAAI,EAAO,GACzB,EAAY,OAAO,EAAO,GAE1B,EAAY,IAAI,EAAO,EAElB,EAAE,eAAe,GAAa;GACrC;CAEJ,iBAAiB,MAAY,EAAI,EAAE,eAAe,IAAI,IAAI,EAAQ,EAAE,CAAC;CAErE,0BAA0B,EAAI,EAAE,+BAAe,IAAI,KAAK,EAAE,CAAC;CAE3D,eAAe,MACb,GAAK,MAAU;EACb,IAAM,IAAc,IAAI,IAAI,EAAM,gBAAgB;AAElD,SADA,EAAY,IAAI,EAAS,EAClB,EAAE,iBAAiB,GAAa;GACvC;CAEJ,iBAAiB,MACf,GAAK,MAAU;EACb,IAAM,IAAc,IAAI,IAAI,EAAM,gBAAgB;AAElD,SADA,EAAY,OAAO,EAAS,EACrB,EAAE,iBAAiB,GAAa;GACvC;CAEJ,wBAAwB,MACtB,GAAK,MAAU;EACb,IAAM,IAAc,IAAI,IAAI,EAAM,gBAAgB;AAMlD,SALI,EAAY,IAAI,EAAS,GAC3B,EAAY,OAAO,EAAS,GAE5B,EAAY,IAAI,EAAS,EAEpB,EAAE,iBAAiB,GAAa;GACvC;CAEJ,mBAAmB,MACjB,EAAI,EAAE,iBAAiB,IAAI,IAAI,EAAU,EAAE,CAAC;CAE9C,sBACE,EAAI;EACF,+BAAe,IAAI,KAAK;EACxB,iCAAiB,IAAI,KAAK;EAC3B,CAAC;CAGJ,mBAAmB,MACjB,GAAK,OAAW;EACd,aAAa,CAAC,GAAG,EAAM,aAAa,GAAG,EAAM;EAC7C,mBAAmB;EACpB,EAAE;CAEL,mBAAmB,GAAI,MACrB,GAAK,OAAW,EACd,aAAa,EAAM,YAAY,KAAK,MAClC,EAAK,OAAO,IAAK;EAAE,GAAG;EAAM,GAAG;EAAS,GAAG,EAC5C,EACF,EAAE;CAEL,wBAAwB,MACtB,GAAK,OAAW,EACd,aAAa,EAAM,YAAY,QAAQ,MAAS,EAAK,OAAO,EAAG,EAChE,EAAE;CAEL,wBAAwB,EAAI,EAAE,aAAa,EAAE,EAAE,CAAC;CAEhD,qBAAqB,MAAS,EAAI,EAAE,mBAAmB,GAAM,CAAC;CAG9D,cAAc,MACZ,EAAI;EACF,aAAa;EACb,eAAe;EAChB,CAAC;CAEJ,oBACE,EAAI;EACF,aAAa;EACb,eAAe;EAChB,CAAC;CAEJ,kBAAkB,MAChB,GAAK,MAAU;AACb,MAAI,CAAC,EAAM,YAAa,QAAO,EAAE;EAIjC,IAAM,IAHe,EAAM,WACxB,MAAM,EAAE,OAAO,EAAM,aAAa,GACpC,GACgC;AAIjC,SAHI,IAAY,EAAM,SACb,EAAE,aAAa,EAAM,IAAY,GAEnC,EAAE;GACT;CAEJ,sBAAsB,MACpB,GAAK,MAAU;AACb,MAAI,CAAC,EAAM,YAAa,QAAO,EAAE;EAIjC,IAAM,IAHe,EAAM,WACxB,MAAM,EAAE,OAAO,EAAM,aAAa,GACpC,GACgC;AAIjC,SAHI,KAAa,IACR,EAAE,aAAa,EAAM,IAAY,GAEnC,EAAE;GACT;CAGJ,aAAa,MACX,GAAK,OAAW,EACd,SAAS;EAAE,GAAG,EAAM;EAAS,GAAG;EAAS,EAC1C,EAAE;CAEL,oBAAoB,EAAI,EAAE,SAAS,EAAE,EAAE,CAAC;CAGxC,qBACE,GAAK,OAAW,EAAE,eAAe,CAAC,EAAM,eAAe,EAAE;CAE3D,iBAAiB,MAAS,EAAI,EAAE,eAAe,GAAM,CAAC;CAEtD,kBAAkB,MAChB,EAAI;EACF,mBAAmB;EACnB,iBAAiB;EAClB,CAAC;CAEJ,wBACE,EAAI;EACF,mBAAmB;EACnB,iBAAiB;EAClB,CAAC;CAGJ,aAAa,EAAI,EAAa;CAC/B,GACD;CACE,MAAM;CACN,SAAS,GAA4B;CACrC,aAAa,OAAW;EACtB,UAAU,EAAM;EAChB,QAAQ,EAAM;EACd,eAAe,EAAM;EACrB,eAAe,EAAM;EACtB;CACF,CACF,EACD;CAAE,MAAM;CAAe,SAAA;CAA8B,CACtD,CACF"}
|
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
import { MicrofrontendRootProps, NavItem, FooterItem } from '../shared/types/index';
|
|
2
|
+
export type { NavItem, FooterItem };
|
|
3
|
+
/**
|
|
4
|
+
* Props for the FilesRoot component
|
|
5
|
+
*/
|
|
6
|
+
export interface FilesRootProps extends MicrofrontendRootProps {
|
|
7
|
+
/**
|
|
8
|
+
* Optional function to register navigation items with the shell
|
|
9
|
+
* Injected by the shell app
|
|
10
|
+
*/
|
|
11
|
+
registerNavItems?: (items: NavItem | NavItem[]) => () => void;
|
|
12
|
+
/**
|
|
13
|
+
* Optional function to register footer items with the shell
|
|
14
|
+
* Injected by the shell app
|
|
15
|
+
*/
|
|
16
|
+
registerFooterItems?: (items: FooterItem | FooterItem[]) => () => void;
|
|
17
|
+
/**
|
|
18
|
+
* Optional callback when a file is selected
|
|
19
|
+
*/
|
|
20
|
+
onFileSelect?: (file: FileSummary) => void;
|
|
21
|
+
/**
|
|
22
|
+
* Optional callback when files are uploaded
|
|
23
|
+
*/
|
|
24
|
+
onFilesUploaded?: (files: FileSummary[]) => void;
|
|
25
|
+
/**
|
|
26
|
+
* Optional storage quota limit in bytes
|
|
27
|
+
*/
|
|
28
|
+
storageQuotaBytes?: number;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* File summary for callbacks
|
|
32
|
+
*/
|
|
33
|
+
export interface FileSummary {
|
|
34
|
+
id: string;
|
|
35
|
+
name: string;
|
|
36
|
+
size: number;
|
|
37
|
+
mimeType: string;
|
|
38
|
+
url: string;
|
|
39
|
+
thumbnailUrl?: string;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* View mode for file browser
|
|
43
|
+
*/
|
|
44
|
+
export type FileViewMode = "grid" | "list" | "tree";
|
|
45
|
+
/**
|
|
46
|
+
* File sort options
|
|
47
|
+
*/
|
|
48
|
+
export type FileSortBy = "name" | "date" | "size" | "type";
|
|
49
|
+
/**
|
|
50
|
+
* File sort direction
|
|
51
|
+
*/
|
|
52
|
+
export type FileSortDirection = "asc" | "desc";
|
|
53
|
+
/**
|
|
54
|
+
* File upload status
|
|
55
|
+
*/
|
|
56
|
+
export type UploadStatus = "pending" | "uploading" | "paused" | "completed" | "failed";
|
|
57
|
+
/**
|
|
58
|
+
* File item in the browser
|
|
59
|
+
*/
|
|
60
|
+
export interface FileItem {
|
|
61
|
+
id: string;
|
|
62
|
+
name: string;
|
|
63
|
+
description?: string;
|
|
64
|
+
size: number;
|
|
65
|
+
mimeType: string;
|
|
66
|
+
extension: string;
|
|
67
|
+
url: string;
|
|
68
|
+
s3Key: string;
|
|
69
|
+
thumbnailUrl?: string;
|
|
70
|
+
versionNumber?: number;
|
|
71
|
+
workspaceId: string;
|
|
72
|
+
folderId?: string | null;
|
|
73
|
+
status?: string;
|
|
74
|
+
visibility?: string;
|
|
75
|
+
starred?: boolean;
|
|
76
|
+
createdAt: string;
|
|
77
|
+
createdBy?: {
|
|
78
|
+
id: string;
|
|
79
|
+
name: string;
|
|
80
|
+
avatar?: string;
|
|
81
|
+
};
|
|
82
|
+
createdById?: string;
|
|
83
|
+
updatedAt: string;
|
|
84
|
+
updatedBy?: {
|
|
85
|
+
id: string;
|
|
86
|
+
name: string;
|
|
87
|
+
avatar?: string;
|
|
88
|
+
};
|
|
89
|
+
tags?: string[];
|
|
90
|
+
isFavorite?: boolean;
|
|
91
|
+
isShared?: boolean;
|
|
92
|
+
downloadUrl?: string;
|
|
93
|
+
canRead?: boolean;
|
|
94
|
+
canUpdate?: boolean;
|
|
95
|
+
canWrite?: boolean;
|
|
96
|
+
canDelete?: boolean;
|
|
97
|
+
canShare?: boolean;
|
|
98
|
+
canAdmin?: boolean;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Folder item in the browser
|
|
102
|
+
*/
|
|
103
|
+
export interface FolderItem {
|
|
104
|
+
id: string;
|
|
105
|
+
name: string;
|
|
106
|
+
description?: string;
|
|
107
|
+
workspaceId: string;
|
|
108
|
+
parentFolderId?: string | null;
|
|
109
|
+
path?: string;
|
|
110
|
+
level?: number;
|
|
111
|
+
status?: string;
|
|
112
|
+
visibility?: string;
|
|
113
|
+
color?: string;
|
|
114
|
+
icon?: string;
|
|
115
|
+
starred?: boolean;
|
|
116
|
+
fileCount?: number;
|
|
117
|
+
filesCount?: number;
|
|
118
|
+
subfoldersCount?: number;
|
|
119
|
+
createdAt: string;
|
|
120
|
+
createdBy?: {
|
|
121
|
+
id: string;
|
|
122
|
+
name: string;
|
|
123
|
+
avatar?: string;
|
|
124
|
+
};
|
|
125
|
+
createdById?: string;
|
|
126
|
+
updatedAt: string;
|
|
127
|
+
parentId?: string;
|
|
128
|
+
subfolders?: FolderItem[];
|
|
129
|
+
canRead?: boolean;
|
|
130
|
+
canUpdate?: boolean;
|
|
131
|
+
canDelete?: boolean;
|
|
132
|
+
permissions?: FolderPermissions;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* File permissions
|
|
136
|
+
*/
|
|
137
|
+
export interface FilePermissions {
|
|
138
|
+
canRead: boolean;
|
|
139
|
+
canWrite: boolean;
|
|
140
|
+
canDelete: boolean;
|
|
141
|
+
canShare: boolean;
|
|
142
|
+
canAdmin: boolean;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Folder permissions
|
|
146
|
+
*/
|
|
147
|
+
export interface FolderPermissions {
|
|
148
|
+
canRead: boolean;
|
|
149
|
+
canWrite: boolean;
|
|
150
|
+
canDelete: boolean;
|
|
151
|
+
canShare: boolean;
|
|
152
|
+
canAdmin: boolean;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Upload item in the queue
|
|
156
|
+
*/
|
|
157
|
+
export interface UploadItem {
|
|
158
|
+
id: string;
|
|
159
|
+
file: File;
|
|
160
|
+
status: UploadStatus;
|
|
161
|
+
progress: number;
|
|
162
|
+
error?: string;
|
|
163
|
+
uploadedFileId?: string;
|
|
164
|
+
folderId?: string;
|
|
165
|
+
uploadedBytes?: number;
|
|
166
|
+
sessionId?: string;
|
|
167
|
+
uploadUrl?: string;
|
|
168
|
+
thumbnailUrl?: string;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* File version
|
|
172
|
+
*/
|
|
173
|
+
export interface FileVersion {
|
|
174
|
+
id: string;
|
|
175
|
+
fileId: string;
|
|
176
|
+
versionNumber: number;
|
|
177
|
+
size: number;
|
|
178
|
+
url: string;
|
|
179
|
+
createdAt: string;
|
|
180
|
+
createdBy: {
|
|
181
|
+
id: string;
|
|
182
|
+
name: string;
|
|
183
|
+
avatar?: string;
|
|
184
|
+
};
|
|
185
|
+
notes?: string;
|
|
186
|
+
isCurrent: boolean;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Share link
|
|
190
|
+
*/
|
|
191
|
+
export interface ShareLink {
|
|
192
|
+
id: string;
|
|
193
|
+
fileId: string;
|
|
194
|
+
token: string;
|
|
195
|
+
url: string;
|
|
196
|
+
expiresAt?: string;
|
|
197
|
+
password?: string;
|
|
198
|
+
accessCount: number;
|
|
199
|
+
maxAccessCount?: number;
|
|
200
|
+
createdAt: string;
|
|
201
|
+
createdBy: {
|
|
202
|
+
id: string;
|
|
203
|
+
name: string;
|
|
204
|
+
};
|
|
205
|
+
isActive: boolean;
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* File share permissions
|
|
209
|
+
*/
|
|
210
|
+
export interface FileShare {
|
|
211
|
+
id: string;
|
|
212
|
+
fileId: string;
|
|
213
|
+
userId?: string;
|
|
214
|
+
groupId?: string;
|
|
215
|
+
email?: string;
|
|
216
|
+
permission: "view" | "comment" | "edit" | "admin";
|
|
217
|
+
expiresAt?: string;
|
|
218
|
+
createdAt: string;
|
|
219
|
+
createdBy: {
|
|
220
|
+
id: string;
|
|
221
|
+
name: string;
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Storage quota information
|
|
226
|
+
*/
|
|
227
|
+
export interface StorageQuota {
|
|
228
|
+
used: number;
|
|
229
|
+
limit: number;
|
|
230
|
+
percentage: number;
|
|
231
|
+
breakdown: {
|
|
232
|
+
images: number;
|
|
233
|
+
documents: number;
|
|
234
|
+
videos: number;
|
|
235
|
+
audio: number;
|
|
236
|
+
other: number;
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* File preview type
|
|
241
|
+
*/
|
|
242
|
+
export type FilePreviewType = "image" | "pdf" | "video" | "audio" | "code" | "text" | "unsupported";
|
|
243
|
+
/**
|
|
244
|
+
* Breadcrumb item
|
|
245
|
+
*/
|
|
246
|
+
export interface BreadcrumbItem {
|
|
247
|
+
id: string;
|
|
248
|
+
name: string;
|
|
249
|
+
path: string;
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* File filters
|
|
253
|
+
*/
|
|
254
|
+
export interface FileFilters {
|
|
255
|
+
search?: string;
|
|
256
|
+
mimeType?: string[];
|
|
257
|
+
tags?: string[];
|
|
258
|
+
dateFrom?: string;
|
|
259
|
+
dateTo?: string;
|
|
260
|
+
minSize?: number;
|
|
261
|
+
maxSize?: number;
|
|
262
|
+
createdBy?: string[];
|
|
263
|
+
isFavorite?: boolean;
|
|
264
|
+
isShared?: boolean;
|
|
265
|
+
}
|
|
266
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/files/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { FilesRootProps } from '../types';
|
|
2
|
+
export type FilesEventName = "files.file.uploaded" | "files.file.deleted" | "files.file.restored" | "files.file.downloaded" | "files.file.starred" | "files.file.moved" | "files.file.copied" | "files.file.renamed" | "files.folder.created" | "files.folder.deleted" | "files.folder.restored" | "files.folder.starred" | "files.folder.moved" | "files.folder.renamed" | "files.share.created" | "files.share.downloaded" | "files.api.failed";
|
|
3
|
+
type FilesEventPayload = Record<string, unknown>;
|
|
4
|
+
export declare function emitFilesEvent(context: Pick<FilesRootProps, "eventBus" | "workspaceId">, name: FilesEventName, payload?: FilesEventPayload): void;
|
|
5
|
+
export {};
|
|
6
|
+
//# sourceMappingURL=events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/files/utils/events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/C,MAAM,MAAM,cAAc,GACtB,qBAAqB,GACrB,oBAAoB,GACpB,qBAAqB,GACrB,uBAAuB,GACvB,oBAAoB,GACpB,kBAAkB,GAClB,mBAAmB,GACnB,oBAAoB,GACpB,sBAAsB,GACtB,sBAAsB,GACtB,uBAAuB,GACvB,sBAAsB,GACtB,oBAAoB,GACpB,sBAAsB,GACtB,qBAAqB,GACrB,wBAAwB,GACxB,kBAAkB,CAAC;AAEvB,KAAK,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEjD,wBAAgB,cAAc,CAC5B,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,UAAU,GAAG,aAAa,CAAC,EACzD,IAAI,EAAE,cAAc,EACpB,OAAO,GAAE,iBAAsB,GAC9B,IAAI,CAmBN"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
//#region src/files/utils/events.ts
|
|
2
|
+
function e(e, t, n = {}) {
|
|
3
|
+
let r = {
|
|
4
|
+
workspaceId: e.workspaceId,
|
|
5
|
+
...n
|
|
6
|
+
};
|
|
7
|
+
e.eventBus?.emit?.(t, r), typeof window < "u" && window.dispatchEvent(new CustomEvent("burdenoff:mfe-event", { detail: {
|
|
8
|
+
name: t,
|
|
9
|
+
source: { mfe: "microfe-files" },
|
|
10
|
+
payload: r
|
|
11
|
+
} }));
|
|
12
|
+
}
|
|
13
|
+
//#endregion
|
|
14
|
+
export { e as emitFilesEvent };
|
|
15
|
+
|
|
16
|
+
//# sourceMappingURL=events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.js","names":[],"sources":["../../../src/files/utils/events.ts"],"sourcesContent":["import type { FilesRootProps } from \"../types\";\n\nexport type FilesEventName =\n | \"files.file.uploaded\"\n | \"files.file.deleted\"\n | \"files.file.restored\"\n | \"files.file.downloaded\"\n | \"files.file.starred\"\n | \"files.file.moved\"\n | \"files.file.copied\"\n | \"files.file.renamed\"\n | \"files.folder.created\"\n | \"files.folder.deleted\"\n | \"files.folder.restored\"\n | \"files.folder.starred\"\n | \"files.folder.moved\"\n | \"files.folder.renamed\"\n | \"files.share.created\"\n | \"files.share.downloaded\"\n | \"files.api.failed\";\n\ntype FilesEventPayload = Record<string, unknown>;\n\nexport function emitFilesEvent(\n context: Pick<FilesRootProps, \"eventBus\" | \"workspaceId\">,\n name: FilesEventName,\n payload: FilesEventPayload = {},\n): void {\n const eventPayload = {\n workspaceId: context.workspaceId,\n ...payload,\n };\n\n context.eventBus?.emit?.(name, eventPayload);\n\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent(\"burdenoff:mfe-event\", {\n detail: {\n name,\n source: { mfe: \"microfe-files\" },\n payload: eventPayload,\n },\n }),\n );\n }\n}\n"],"mappings":";AAuBA,SAAgB,EACd,GACA,GACA,IAA6B,EAAE,EACzB;CACN,IAAM,IAAe;EACnB,aAAa,EAAQ;EACrB,GAAG;EACJ;AAID,CAFA,EAAQ,UAAU,OAAO,GAAM,EAAa,EAExC,OAAO,SAAW,OACpB,OAAO,cACL,IAAI,YAAY,uBAAuB,EACrC,QAAQ;EACN;EACA,QAAQ,EAAE,KAAK,iBAAiB;EAChC,SAAS;EACV,EACF,CAAC,CACH"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { I18nContextValue } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';
|
|
2
|
+
type TranslationParams = Record<string, string | number>;
|
|
3
|
+
export declare function tWithFallback(t: I18nContextValue["t"], key: string, fallback: string, params?: TranslationParams): string;
|
|
4
|
+
export {};
|
|
5
|
+
//# sourceMappingURL=i18n.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../../src/files/utils/i18n.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wDAAwD,CAAC;AAE/F,KAAK,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;AAgBzD,wBAAgB,aAAa,CAC3B,CAAC,EAAE,gBAAgB,CAAC,GAAG,CAAC,EACxB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,iBAAiB,GACzB,MAAM,CAOR"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
//#region src/files/utils/i18n.ts
|
|
2
|
+
function e(e, t) {
|
|
3
|
+
return t ? e.replace(/\{\{\s*(\w+)\s*\}\}/g, (e, n) => {
|
|
4
|
+
let r = t[n];
|
|
5
|
+
return r === void 0 ? `{{${n}}}` : String(r);
|
|
6
|
+
}) : e;
|
|
7
|
+
}
|
|
8
|
+
function t(t, n, r, i) {
|
|
9
|
+
let a = t(n, i);
|
|
10
|
+
return a === n ? e(r, i) : a;
|
|
11
|
+
}
|
|
12
|
+
//#endregion
|
|
13
|
+
export { t as tWithFallback };
|
|
14
|
+
|
|
15
|
+
//# sourceMappingURL=i18n.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i18n.js","names":[],"sources":["../../../src/files/utils/i18n.ts"],"sourcesContent":["import type { I18nContextValue } from \"@burdenoff/fe-libs/shared/providers/shell/I18nProvider\";\n\ntype TranslationParams = Record<string, string | number>;\n\nfunction interpolateFallback(\n fallback: string,\n params?: TranslationParams,\n): string {\n if (!params) {\n return fallback;\n }\n\n return fallback.replace(/\\{\\{\\s*(\\w+)\\s*\\}\\}/g, (_, key: string) => {\n const value = params[key];\n return value === undefined ? `{{${key}}}` : String(value);\n });\n}\n\nexport function tWithFallback(\n t: I18nContextValue[\"t\"],\n key: string,\n fallback: string,\n params?: TranslationParams,\n): string {\n const translated = t(key, params);\n if (translated === key) {\n return interpolateFallback(fallback, params);\n }\n\n return translated;\n}\n"],"mappings":";AAIA,SAAS,EACP,GACA,GACQ;AAKR,QAJK,IAIE,EAAS,QAAQ,yBAAyB,GAAG,MAAgB;EAClE,IAAM,IAAQ,EAAO;AACrB,SAAO,MAAU,KAAA,IAAY,KAAK,EAAI,MAAM,OAAO,EAAM;GACzD,GANO;;AASX,SAAgB,EACd,GACA,GACA,GACA,GACQ;CACR,IAAM,IAAa,EAAE,GAAK,EAAO;AAKjC,QAJI,MAAe,IACV,EAAoB,GAAU,EAAO,GAGvC"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { LucideIcon } from 'lucide-react';
|
|
2
|
+
import { formatBytes, formatRelativeTime } from '@burdenoff/fe-libs/shared/utils';
|
|
3
|
+
import { FilePreviewType } from '../types';
|
|
4
|
+
export { isImageType, generateThumbnail, revokeThumbnail, revokeThumbnails, } from './thumbnail';
|
|
5
|
+
/**
|
|
6
|
+
* Format file size in bytes to human readable format
|
|
7
|
+
* Re-exports formatBytes from fe-libs for convenience
|
|
8
|
+
*/
|
|
9
|
+
export declare const formatFileSize: typeof formatBytes;
|
|
10
|
+
/**
|
|
11
|
+
* Get file extension from filename
|
|
12
|
+
*/
|
|
13
|
+
export declare function getFileExtension(filename: string): string;
|
|
14
|
+
/**
|
|
15
|
+
* Determine file preview type from MIME type
|
|
16
|
+
*/
|
|
17
|
+
export declare function getFilePreviewType(mimeType: string): FilePreviewType;
|
|
18
|
+
/**
|
|
19
|
+
* Check if file can be previewed
|
|
20
|
+
*/
|
|
21
|
+
export declare function canPreviewFile(mimeType: string): boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Get file icon component based on MIME type
|
|
24
|
+
*/
|
|
25
|
+
export declare function getFileIcon(mimeType: string): LucideIcon;
|
|
26
|
+
/**
|
|
27
|
+
* Generate unique upload ID
|
|
28
|
+
*/
|
|
29
|
+
export declare function generateUploadId(): string;
|
|
30
|
+
/**
|
|
31
|
+
* Validate file name
|
|
32
|
+
*/
|
|
33
|
+
export declare function isValidFileName(name: string): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Sort files by various criteria
|
|
36
|
+
*/
|
|
37
|
+
export declare function sortFiles<T extends {
|
|
38
|
+
name: string;
|
|
39
|
+
createdAt: string;
|
|
40
|
+
size?: number;
|
|
41
|
+
}>(files: T[], sortBy: "name" | "date" | "size" | "type", direction?: "asc" | "desc"): T[];
|
|
42
|
+
/**
|
|
43
|
+
* Check if file type is allowed
|
|
44
|
+
*/
|
|
45
|
+
export declare function isFileTypeAllowed(mimeType: string, allowedTypes?: string[]): boolean;
|
|
46
|
+
/**
|
|
47
|
+
* Calculate upload progress percentage
|
|
48
|
+
*/
|
|
49
|
+
export declare function calculateUploadProgress(uploadedBytes: number, totalBytes: number): number;
|
|
50
|
+
/**
|
|
51
|
+
* Format date for file display
|
|
52
|
+
* Uses shared formatRelativeTime from fe-libs
|
|
53
|
+
*/
|
|
54
|
+
export declare const formatFileDate: typeof formatRelativeTime;
|
|
55
|
+
/**
|
|
56
|
+
* Truncate filename to max length
|
|
57
|
+
*/
|
|
58
|
+
export declare function truncateFileName(name: string, maxLength?: number): string;
|
|
59
|
+
/**
|
|
60
|
+
* Check if storage quota exceeded
|
|
61
|
+
*/
|
|
62
|
+
export declare function isStorageQuotaExceeded(usedBytes: number, limitBytes: number, fileSize: number): boolean;
|
|
63
|
+
/**
|
|
64
|
+
* Generate breadcrumb path from folder navigation
|
|
65
|
+
*/
|
|
66
|
+
export declare function generateBreadcrumbs(currentFolderId: string | null, folderMap: Map<string, {
|
|
67
|
+
id: string;
|
|
68
|
+
name: string;
|
|
69
|
+
parentId?: string;
|
|
70
|
+
}>): Array<{
|
|
71
|
+
id: string;
|
|
72
|
+
name: string;
|
|
73
|
+
}>;
|
|
74
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/files/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAU/C,OAAO,EACL,WAAW,EACX,kBAAkB,EAEnB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,eAAe,EACf,gBAAgB,GACjB,MAAM,aAAa,CAAC;AAErB;;;GAGG;AACH,eAAO,MAAM,cAAc,oBAAc,CAAC;AAE1C;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGzD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,CA6BpE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAGxD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,CAmBxD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAoBrD;AAED;;GAEG;AACH,wBAAgB,SAAS,CACvB,CAAC,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,EAE5D,KAAK,EAAE,CAAC,EAAE,EACV,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,EACzC,SAAS,GAAE,KAAK,GAAG,MAAc,GAChC,CAAC,EAAE,CA4BL;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,YAAY,CAAC,EAAE,MAAM,EAAE,GACtB,OAAO,CAmBT;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,GACjB,MAAM,CAGR;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,2BAAqB,CAAC;AAEjD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,GAAE,MAAW,GAAG,MAAM,CAc7E;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACf,OAAO,CAET;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,eAAe,EAAE,MAAM,GAAG,IAAI,EAC9B,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GACtE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAiBrC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import "./thumbnail.js";
|
|
2
|
+
import { Code as e, File as t, FileText as n, Film as r, Image as i, Music as a } from "lucide-react";
|
|
3
|
+
import { formatBytes as o, formatRelativeTime as s } from "@burdenoff/fe-libs/shared/utils";
|
|
4
|
+
//#region src/files/utils/index.ts
|
|
5
|
+
var c = o;
|
|
6
|
+
function l(e) {
|
|
7
|
+
let t = e.split(".");
|
|
8
|
+
return t.length > 1 ? t[t.length - 1].toLowerCase() : "";
|
|
9
|
+
}
|
|
10
|
+
function u(e) {
|
|
11
|
+
return e.startsWith("image/") ? "image" : e === "application/pdf" ? "pdf" : e.startsWith("video/") ? "video" : e.startsWith("audio/") ? "audio" : e.startsWith("text/") || e === "application/json" || e === "application/xml" ? "text" : e.includes("javascript") || e.includes("typescript") || e.includes("python") || e.includes("java") ? "code" : "unsupported";
|
|
12
|
+
}
|
|
13
|
+
function d(o) {
|
|
14
|
+
switch (u(o)) {
|
|
15
|
+
case "image": return i;
|
|
16
|
+
case "pdf": return n;
|
|
17
|
+
case "video": return r;
|
|
18
|
+
case "audio": return a;
|
|
19
|
+
case "code": return e;
|
|
20
|
+
case "text": return n;
|
|
21
|
+
default: return t;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
function f(e, t, n = "asc") {
|
|
25
|
+
return [...e].sort((e, r) => {
|
|
26
|
+
let i = 0;
|
|
27
|
+
switch (t) {
|
|
28
|
+
case "name":
|
|
29
|
+
i = e.name.localeCompare(r.name);
|
|
30
|
+
break;
|
|
31
|
+
case "date":
|
|
32
|
+
i = new Date(e.createdAt).getTime() - new Date(r.createdAt).getTime();
|
|
33
|
+
break;
|
|
34
|
+
case "size":
|
|
35
|
+
i = (e.size || 0) - (r.size || 0);
|
|
36
|
+
break;
|
|
37
|
+
case "type": {
|
|
38
|
+
let t = l(e.name), n = l(r.name);
|
|
39
|
+
i = t.localeCompare(n);
|
|
40
|
+
break;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return n === "asc" ? i : -i;
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
var p = s;
|
|
47
|
+
//#endregion
|
|
48
|
+
export { p as formatFileDate, c as formatFileSize, d as getFileIcon, f as sortFiles };
|
|
49
|
+
|
|
50
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/files/utils/index.ts"],"sourcesContent":["import type { LucideIcon } from \"lucide-react\";\nimport {\n File,\n Image,\n FileText,\n Film,\n Music,\n Code,\n Archive,\n} from \"lucide-react\";\nimport {\n formatBytes,\n formatRelativeTime,\n formatDate,\n} from \"@burdenoff/fe-libs/shared/utils\";\nimport type { FilePreviewType } from \"../types\";\nexport {\n isImageType,\n generateThumbnail,\n revokeThumbnail,\n revokeThumbnails,\n} from \"./thumbnail\";\n\n/**\n * Format file size in bytes to human readable format\n * Re-exports formatBytes from fe-libs for convenience\n */\nexport const formatFileSize = formatBytes;\n\n/**\n * Get file extension from filename\n */\nexport function getFileExtension(filename: string): string {\n const parts = filename.split(\".\");\n return parts.length > 1 ? parts[parts.length - 1].toLowerCase() : \"\";\n}\n\n/**\n * Determine file preview type from MIME type\n */\nexport function getFilePreviewType(mimeType: string): FilePreviewType {\n if (mimeType.startsWith(\"image/\")) {\n return \"image\";\n }\n if (mimeType === \"application/pdf\") {\n return \"pdf\";\n }\n if (mimeType.startsWith(\"video/\")) {\n return \"video\";\n }\n if (mimeType.startsWith(\"audio/\")) {\n return \"audio\";\n }\n if (\n mimeType.startsWith(\"text/\") ||\n mimeType === \"application/json\" ||\n mimeType === \"application/xml\"\n ) {\n return \"text\";\n }\n if (\n mimeType.includes(\"javascript\") ||\n mimeType.includes(\"typescript\") ||\n mimeType.includes(\"python\") ||\n mimeType.includes(\"java\")\n ) {\n return \"code\";\n }\n return \"unsupported\";\n}\n\n/**\n * Check if file can be previewed\n */\nexport function canPreviewFile(mimeType: string): boolean {\n const previewType = getFilePreviewType(mimeType);\n return previewType !== \"unsupported\";\n}\n\n/**\n * Get file icon component based on MIME type\n */\nexport function getFileIcon(mimeType: string): LucideIcon {\n const previewType = getFilePreviewType(mimeType);\n\n switch (previewType) {\n case \"image\":\n return Image;\n case \"pdf\":\n return FileText;\n case \"video\":\n return Film;\n case \"audio\":\n return Music;\n case \"code\":\n return Code;\n case \"text\":\n return FileText;\n default:\n return File;\n }\n}\n\n/**\n * Generate unique upload ID\n */\nexport function generateUploadId(): string {\n return `upload-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n}\n\n/**\n * Validate file name\n */\nexport function isValidFileName(name: string): boolean {\n // Check for empty name\n if (!name || name.trim().length === 0) {\n return false;\n }\n\n // Check for invalid characters (OS-specific)\n // eslint-disable-next-line no-control-regex\n const invalidChars = /[<>:\"/\\\\|?*\\u0000-\\u001f]/;\n if (invalidChars.test(name)) {\n return false;\n }\n\n // Check for reserved names (Windows)\n const reservedNames = /^(con|prn|aux|nul|com[1-9]|lpt[1-9])(\\..*)?$/i;\n if (reservedNames.test(name)) {\n return false;\n }\n\n return true;\n}\n\n/**\n * Sort files by various criteria\n */\nexport function sortFiles<\n T extends { name: string; createdAt: string; size?: number },\n>(\n files: T[],\n sortBy: \"name\" | \"date\" | \"size\" | \"type\",\n direction: \"asc\" | \"desc\" = \"asc\",\n): T[] {\n const sorted = [...files].sort((a, b) => {\n let comparison = 0;\n\n switch (sortBy) {\n case \"name\":\n comparison = a.name.localeCompare(b.name);\n break;\n case \"date\":\n comparison =\n new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime();\n break;\n case \"size\":\n comparison = (a.size || 0) - (b.size || 0);\n break;\n case \"type\": {\n // For now, sort by extension\n const extA = getFileExtension(a.name);\n const extB = getFileExtension(b.name);\n comparison = extA.localeCompare(extB);\n break;\n }\n }\n\n return direction === \"asc\" ? comparison : -comparison;\n });\n\n return sorted;\n}\n\n/**\n * Check if file type is allowed\n */\nexport function isFileTypeAllowed(\n mimeType: string,\n allowedTypes?: string[],\n): boolean {\n if (!allowedTypes || allowedTypes.length === 0) {\n return true;\n }\n\n return allowedTypes.some((allowed) => {\n // Exact match\n if (allowed === mimeType) {\n return true;\n }\n\n // Wildcard match (e.g., \"image/*\")\n if (allowed.endsWith(\"/*\")) {\n const prefix = allowed.slice(0, -2);\n return mimeType.startsWith(prefix);\n }\n\n return false;\n });\n}\n\n/**\n * Calculate upload progress percentage\n */\nexport function calculateUploadProgress(\n uploadedBytes: number,\n totalBytes: number,\n): number {\n if (totalBytes === 0) return 0;\n return Math.round((uploadedBytes / totalBytes) * 100);\n}\n\n/**\n * Format date for file display\n * Uses shared formatRelativeTime from fe-libs\n */\nexport const formatFileDate = formatRelativeTime;\n\n/**\n * Truncate filename to max length\n */\nexport function truncateFileName(name: string, maxLength: number = 30): string {\n if (name.length <= maxLength) {\n return name;\n }\n\n const ext = getFileExtension(name);\n const nameWithoutExt = name.slice(0, name.lastIndexOf(\".\"));\n const truncatedLength = maxLength - ext.length - 4; // -4 for \"...\" and \".\"\n\n if (truncatedLength <= 0) {\n return `${name.slice(0, maxLength - 3)}...`;\n }\n\n return `${nameWithoutExt.slice(0, truncatedLength)}...${ext}`;\n}\n\n/**\n * Check if storage quota exceeded\n */\nexport function isStorageQuotaExceeded(\n usedBytes: number,\n limitBytes: number,\n fileSize: number,\n): boolean {\n return usedBytes + fileSize > limitBytes;\n}\n\n/**\n * Generate breadcrumb path from folder navigation\n */\nexport function generateBreadcrumbs(\n currentFolderId: string | null,\n folderMap: Map<string, { id: string; name: string; parentId?: string }>,\n): Array<{ id: string; name: string }> {\n if (!currentFolderId) {\n return [{ id: \"root\", name: \"Files\" }];\n }\n\n const breadcrumbs: Array<{ id: string; name: string }> = [];\n let current = folderMap.get(currentFolderId);\n\n while (current) {\n breadcrumbs.unshift({ id: current.id, name: current.name });\n current = current.parentId ? folderMap.get(current.parentId) : undefined;\n }\n\n // Add root\n breadcrumbs.unshift({ id: \"root\", name: \"Files\" });\n\n return breadcrumbs;\n}\n"],"mappings":";;;;AA2BA,IAAa,IAAiB;AAK9B,SAAgB,EAAiB,GAA0B;CACzD,IAAM,IAAQ,EAAS,MAAM,IAAI;AACjC,QAAO,EAAM,SAAS,IAAI,EAAM,EAAM,SAAS,GAAG,aAAa,GAAG;;AAMpE,SAAgB,EAAmB,GAAmC;AA4BpE,QA3BI,EAAS,WAAW,SAAS,GACxB,UAEL,MAAa,oBACR,QAEL,EAAS,WAAW,SAAS,GACxB,UAEL,EAAS,WAAW,SAAS,GACxB,UAGP,EAAS,WAAW,QAAQ,IAC5B,MAAa,sBACb,MAAa,oBAEN,SAGP,EAAS,SAAS,aAAa,IAC/B,EAAS,SAAS,aAAa,IAC/B,EAAS,SAAS,SAAS,IAC3B,EAAS,SAAS,OAAO,GAElB,SAEF;;AAcT,SAAgB,EAAY,GAA8B;AAGxD,SAFoB,EAAmB,EAAS,EAEhD;EACE,KAAK,QACH,QAAO;EACT,KAAK,MACH,QAAO;EACT,KAAK,QACH,QAAO;EACT,KAAK,QACH,QAAO;EACT,KAAK,OACH,QAAO;EACT,KAAK,OACH,QAAO;EACT,QACE,QAAO;;;AAuCb,SAAgB,EAGd,GACA,GACA,IAA4B,OACvB;AA2BL,QA1Be,CAAC,GAAG,EAAM,CAAC,MAAM,GAAG,MAAM;EACvC,IAAI,IAAa;AAEjB,UAAQ,GAAR;GACE,KAAK;AACH,QAAa,EAAE,KAAK,cAAc,EAAE,KAAK;AACzC;GACF,KAAK;AACH,QACE,IAAI,KAAK,EAAE,UAAU,CAAC,SAAS,GAAG,IAAI,KAAK,EAAE,UAAU,CAAC,SAAS;AACnE;GACF,KAAK;AACH,SAAc,EAAE,QAAQ,MAAM,EAAE,QAAQ;AACxC;GACF,KAAK,QAAQ;IAEX,IAAM,IAAO,EAAiB,EAAE,KAAK,EAC/B,IAAO,EAAiB,EAAE,KAAK;AACrC,QAAa,EAAK,cAAc,EAAK;AACrC;;;AAIJ,SAAO,MAAc,QAAQ,IAAa,CAAC;GAC3C;;AA+CJ,IAAa,IAAiB"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare function isImageType(mimeType: string): boolean;
|
|
2
|
+
export declare function generateThumbnail(file: File, maxSize?: number): Promise<string | null>;
|
|
3
|
+
export declare function revokeThumbnail(thumbnailUrl: string): void;
|
|
4
|
+
export declare function revokeThumbnails(thumbnailUrls: (string | undefined)[]): void;
|
|
5
|
+
//# sourceMappingURL=thumbnail.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thumbnail.d.ts","sourceRoot":"","sources":["../../../src/files/utils/thumbnail.ts"],"names":[],"mappings":"AAaA,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAErD;AAED,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,IAAI,EACV,OAAO,GAAE,MAA2B,GACnC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA0DxB;AAED,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAI1D;AAED,wBAAgB,gBAAgB,CAAC,aAAa,EAAE,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,GAAG,IAAI,CAM5E"}
|