@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,233 @@
|
|
|
1
|
+
import { useFilesStore as e } from "../store/filesStore.js";
|
|
2
|
+
import { formatFileDate as t, formatFileSize as n, getFileIcon as r } from "../utils/index.js";
|
|
3
|
+
import { tWithFallback as i } from "../utils/i18n.js";
|
|
4
|
+
import { ActionMenu as a } from "./ActionMenu.js";
|
|
5
|
+
import { getDragOperation as o } from "../hooks/useDragDrop.js";
|
|
6
|
+
import { useMemo as s, useState as c } from "react";
|
|
7
|
+
import { Activity as l, Copy as u, Download as d, Edit as f, FolderInput as p, Info as m, RotateCcw as h, Share2 as g, Star as _, Trash2 as v } from "lucide-react";
|
|
8
|
+
import { Fragment as y, jsx as b, jsxs as x } from "react/jsx-runtime";
|
|
9
|
+
import { useI18n as S } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
10
|
+
//#region src/files/components/FileCard.tsx
|
|
11
|
+
var C = ({ file: C, isSelected: w = !1, isDragging: T = !1, onSelect: E, onPreview: D, onShare: O, onDelete: k, onRestore: A, onFavorite: j, onRename: M, onDownload: N, onCopy: P, onMove: F, onInfo: I, onActivity: L, onDragStart: R, onDragEnd: z, onContextMenu: B }) => {
|
|
12
|
+
let { t: V } = S(), [H, U] = c(!1), [W, G] = c(!1), { toggleFileSelection: K } = e(), q = () => {
|
|
13
|
+
D && D(C);
|
|
14
|
+
}, J = (e) => {
|
|
15
|
+
e.stopPropagation(), E ? E(C.id) : K(C.id);
|
|
16
|
+
}, Y = (e, t) => {
|
|
17
|
+
e.stopPropagation(), t(), U(!1);
|
|
18
|
+
}, X = (e) => {
|
|
19
|
+
e.dataTransfer.effectAllowed = "copyMove", e.dataTransfer.setData("application/x-file-id", C.id), e.dataTransfer.setData("application/x-file-type", "file");
|
|
20
|
+
let t = o(e);
|
|
21
|
+
e.dataTransfer.setData("application/x-drag-operation", t), R?.(C, t);
|
|
22
|
+
}, Z = () => {
|
|
23
|
+
z?.();
|
|
24
|
+
}, Q = (e) => {
|
|
25
|
+
e.preventDefault(), e.stopPropagation(), B?.(C, e.clientX, e.clientY);
|
|
26
|
+
}, $ = r(C.mimeType), ee = s(() => [
|
|
27
|
+
...N ? [{
|
|
28
|
+
label: i(V, "files.card.download", "Download"),
|
|
29
|
+
icon: /* @__PURE__ */ b(d, { className: "size-4" }),
|
|
30
|
+
onClick: () => N(C)
|
|
31
|
+
}] : [],
|
|
32
|
+
...O ? [{
|
|
33
|
+
label: i(V, "files.card.share", "Share"),
|
|
34
|
+
icon: /* @__PURE__ */ b(g, { className: "size-4" }),
|
|
35
|
+
onClick: () => O(C)
|
|
36
|
+
}] : [],
|
|
37
|
+
...P ? [{
|
|
38
|
+
label: i(V, "files.card.makeCopy", "Make a copy"),
|
|
39
|
+
icon: /* @__PURE__ */ b(u, { className: "size-4" }),
|
|
40
|
+
onClick: () => P(C)
|
|
41
|
+
}] : [],
|
|
42
|
+
...F ? [{
|
|
43
|
+
label: i(V, "files.card.moveTo", "Move to"),
|
|
44
|
+
icon: /* @__PURE__ */ b(p, { className: "size-4" }),
|
|
45
|
+
onClick: () => F(C)
|
|
46
|
+
}] : [],
|
|
47
|
+
...M ? [{
|
|
48
|
+
label: i(V, "files.card.rename", "Rename"),
|
|
49
|
+
icon: /* @__PURE__ */ b(f, { className: "size-4" }),
|
|
50
|
+
onClick: () => M(C),
|
|
51
|
+
divider: !0
|
|
52
|
+
}] : [],
|
|
53
|
+
...j ? [{
|
|
54
|
+
label: C.starred ? i(V, "files.card.removeFromStarred", "Remove from starred") : i(V, "files.card.addToStarred", "Add to starred"),
|
|
55
|
+
icon: /* @__PURE__ */ b(_, { className: "size-4" }),
|
|
56
|
+
onClick: () => j(C)
|
|
57
|
+
}] : [],
|
|
58
|
+
...I ? [{
|
|
59
|
+
label: i(V, "files.card.details", "Details"),
|
|
60
|
+
icon: /* @__PURE__ */ b(m, { className: "size-4" }),
|
|
61
|
+
onClick: () => I(C)
|
|
62
|
+
}] : [],
|
|
63
|
+
...L ? [{
|
|
64
|
+
label: i(V, "files.card.activity", "Activity"),
|
|
65
|
+
icon: /* @__PURE__ */ b(l, { className: "size-4" }),
|
|
66
|
+
onClick: () => L(C)
|
|
67
|
+
}] : [],
|
|
68
|
+
...k ? [{
|
|
69
|
+
label: i(V, "files.card.delete", "Delete"),
|
|
70
|
+
icon: /* @__PURE__ */ b(v, { className: "size-4" }),
|
|
71
|
+
onClick: () => k(C),
|
|
72
|
+
variant: "danger",
|
|
73
|
+
divider: !0
|
|
74
|
+
}] : [],
|
|
75
|
+
...A ? [{
|
|
76
|
+
label: i(V, "files.card.restore", "Restore"),
|
|
77
|
+
icon: /* @__PURE__ */ b(h, { className: "size-4" }),
|
|
78
|
+
onClick: () => A(C)
|
|
79
|
+
}] : []
|
|
80
|
+
], [
|
|
81
|
+
C,
|
|
82
|
+
N,
|
|
83
|
+
O,
|
|
84
|
+
P,
|
|
85
|
+
F,
|
|
86
|
+
M,
|
|
87
|
+
j,
|
|
88
|
+
I,
|
|
89
|
+
L,
|
|
90
|
+
k,
|
|
91
|
+
A,
|
|
92
|
+
V
|
|
93
|
+
]);
|
|
94
|
+
return /* @__PURE__ */ x("div", {
|
|
95
|
+
className: `@container group relative cursor-pointer overflow-hidden rounded-card border bg-bg-surface shadow-elevation-1 transition-shadow hover:shadow-elevation-2 focus-within:shadow-elevation-2 ${T ? "opacity-50" : "border-border-subtle"}`,
|
|
96
|
+
onClick: q,
|
|
97
|
+
onContextMenu: Q,
|
|
98
|
+
onMouseEnter: () => U(!0),
|
|
99
|
+
onMouseLeave: () => U(!1),
|
|
100
|
+
onFocus: () => U(!0),
|
|
101
|
+
onBlur: (e) => {
|
|
102
|
+
e.currentTarget.contains(e.relatedTarget) || U(!1);
|
|
103
|
+
},
|
|
104
|
+
onKeyDown: (e) => {
|
|
105
|
+
(e.key === "Enter" || e.key === " ") && (e.preventDefault(), q());
|
|
106
|
+
},
|
|
107
|
+
draggable: !!R,
|
|
108
|
+
onDragStart: X,
|
|
109
|
+
onDragEnd: Z,
|
|
110
|
+
role: "button",
|
|
111
|
+
tabIndex: 0,
|
|
112
|
+
"aria-label": `Preview ${C.name}`,
|
|
113
|
+
children: [
|
|
114
|
+
/* @__PURE__ */ b("div", {
|
|
115
|
+
className: `absolute top-2 left-2 z-10 transition-opacity ${w ? "opacity-100" : "opacity-0 group-hover:opacity-100 group-focus-within:opacity-100"}`,
|
|
116
|
+
children: /* @__PURE__ */ b("input", {
|
|
117
|
+
type: "checkbox",
|
|
118
|
+
checked: w,
|
|
119
|
+
onChange: J,
|
|
120
|
+
className: "size-4 rounded border-border-default bg-bg-surface text-action-primary-bg focus:ring-2 focus:ring-action-primary-bg focus:ring-offset-2",
|
|
121
|
+
"aria-label": `Select ${C.name}`
|
|
122
|
+
})
|
|
123
|
+
}),
|
|
124
|
+
C.starred && /* @__PURE__ */ b("div", {
|
|
125
|
+
className: "absolute top-2 right-2 z-10",
|
|
126
|
+
children: /* @__PURE__ */ b(_, { className: "size-4 fill-status-warning-text text-status-warning-text" })
|
|
127
|
+
}),
|
|
128
|
+
/* @__PURE__ */ b("div", {
|
|
129
|
+
className: "aspect-[4/3] bg-bg-sunken flex items-center justify-center overflow-hidden",
|
|
130
|
+
children: C.thumbnailUrl ? /* @__PURE__ */ b("img", {
|
|
131
|
+
src: C.thumbnailUrl,
|
|
132
|
+
alt: C.name,
|
|
133
|
+
className: "h-full w-full object-contain p-2"
|
|
134
|
+
}) : /* @__PURE__ */ b($, { className: "size-12 @md:size-16 text-text-muted" })
|
|
135
|
+
}),
|
|
136
|
+
/* @__PURE__ */ x("div", {
|
|
137
|
+
className: "p-3 @md:p-4",
|
|
138
|
+
children: [
|
|
139
|
+
/* @__PURE__ */ b("h3", {
|
|
140
|
+
className: "font-text-md font-weight-medium text-text-primary truncate mb-1",
|
|
141
|
+
children: C.name
|
|
142
|
+
}),
|
|
143
|
+
/* @__PURE__ */ x("div", {
|
|
144
|
+
className: "hidden @sm:flex items-center gap-2 text-text-secondary font-text-sm",
|
|
145
|
+
children: [
|
|
146
|
+
/* @__PURE__ */ b("span", { children: n(C.size) }),
|
|
147
|
+
/* @__PURE__ */ b("span", {
|
|
148
|
+
className: "text-border-subtle",
|
|
149
|
+
children: "•"
|
|
150
|
+
}),
|
|
151
|
+
/* @__PURE__ */ b("span", { children: t(C.updatedAt) })
|
|
152
|
+
]
|
|
153
|
+
}),
|
|
154
|
+
/* @__PURE__ */ x("div", {
|
|
155
|
+
className: "hidden @md:flex items-center gap-2 mt-2 text-text-muted font-text-xs",
|
|
156
|
+
children: [C.createdBy && /* @__PURE__ */ x("div", {
|
|
157
|
+
className: "flex items-center gap-1",
|
|
158
|
+
children: [C.createdBy.avatar && /* @__PURE__ */ b("img", {
|
|
159
|
+
src: C.createdBy.avatar,
|
|
160
|
+
alt: C.createdBy.name,
|
|
161
|
+
className: "size-4 rounded-full"
|
|
162
|
+
}), /* @__PURE__ */ b("span", { children: C.createdBy.name })]
|
|
163
|
+
}), C.isShared && /* @__PURE__ */ x(y, { children: [
|
|
164
|
+
/* @__PURE__ */ b("span", {
|
|
165
|
+
className: "text-border-subtle",
|
|
166
|
+
children: "•"
|
|
167
|
+
}),
|
|
168
|
+
/* @__PURE__ */ b(g, { className: "size-3" }),
|
|
169
|
+
/* @__PURE__ */ b("span", { children: i(V, "files.card.shared", "Shared") })
|
|
170
|
+
] })]
|
|
171
|
+
}),
|
|
172
|
+
C.tags && C.tags.length > 0 && /* @__PURE__ */ x("div", {
|
|
173
|
+
className: "hidden @lg:flex flex-wrap gap-1 mt-2",
|
|
174
|
+
children: [C.tags.slice(0, 3).map((e) => /* @__PURE__ */ b("span", {
|
|
175
|
+
className: "px-2 py-0.5 bg-bg-accent text-text-primary font-text-xs rounded-sm",
|
|
176
|
+
children: e
|
|
177
|
+
}, e)), C.tags.length > 3 && /* @__PURE__ */ x("span", {
|
|
178
|
+
className: "px-2 py-0.5 text-text-muted font-text-xs",
|
|
179
|
+
children: ["+", C.tags.length - 3]
|
|
180
|
+
})]
|
|
181
|
+
})
|
|
182
|
+
]
|
|
183
|
+
}),
|
|
184
|
+
H && /* @__PURE__ */ x("div", {
|
|
185
|
+
className: "absolute bottom-3 right-3 flex items-center gap-1 bg-bg-elevated border border-border-subtle rounded shadow-elevation-2 p-1",
|
|
186
|
+
children: [
|
|
187
|
+
N && /* @__PURE__ */ b("button", {
|
|
188
|
+
onClick: (e) => Y(e, () => N(C)),
|
|
189
|
+
className: "p-1.5 hover:bg-action-ghost-bg-hover rounded transition-colors",
|
|
190
|
+
"aria-label": i(V, "files.card.download", "Download"),
|
|
191
|
+
title: i(V, "files.card.download", "Download"),
|
|
192
|
+
children: /* @__PURE__ */ b(d, { className: "size-4 text-text-primary" })
|
|
193
|
+
}),
|
|
194
|
+
O && /* @__PURE__ */ b("button", {
|
|
195
|
+
onClick: (e) => Y(e, () => O(C)),
|
|
196
|
+
className: "p-1.5 hover:bg-action-ghost-bg-hover rounded transition-colors",
|
|
197
|
+
"aria-label": i(V, "files.card.share", "Share"),
|
|
198
|
+
title: i(V, "files.card.share", "Share"),
|
|
199
|
+
children: /* @__PURE__ */ b(g, { className: "size-4 text-text-primary" })
|
|
200
|
+
}),
|
|
201
|
+
j && /* @__PURE__ */ b("button", {
|
|
202
|
+
onClick: (e) => Y(e, () => j(C)),
|
|
203
|
+
className: "p-1.5 hover:bg-action-ghost-bg-hover rounded transition-colors",
|
|
204
|
+
"aria-label": C.starred ? i(V, "files.card.unfavorite", "Unfavorite") : i(V, "files.card.favorite", "Favorite"),
|
|
205
|
+
title: C.starred ? i(V, "files.card.unfavorite", "Unfavorite") : i(V, "files.card.favorite", "Favorite"),
|
|
206
|
+
children: /* @__PURE__ */ b(_, { className: `size-4 ${C.starred ? "fill-status-warning-text text-status-warning-text" : "text-text-primary"}` })
|
|
207
|
+
}),
|
|
208
|
+
A && /* @__PURE__ */ b("button", {
|
|
209
|
+
onClick: (e) => Y(e, () => A(C)),
|
|
210
|
+
className: "p-1.5 hover:bg-status-success-bg-subtle rounded transition-colors",
|
|
211
|
+
"aria-label": i(V, "files.card.restore", "Restore"),
|
|
212
|
+
title: i(V, "files.card.restore", "Restore"),
|
|
213
|
+
children: /* @__PURE__ */ b(h, { className: "size-4 text-status-success-text" })
|
|
214
|
+
}),
|
|
215
|
+
/* @__PURE__ */ b("div", {
|
|
216
|
+
onClick: (e) => e.stopPropagation(),
|
|
217
|
+
children: /* @__PURE__ */ b(a, {
|
|
218
|
+
items: ee,
|
|
219
|
+
align: "right",
|
|
220
|
+
triggerClassName: "p-1.5",
|
|
221
|
+
isOpen: W,
|
|
222
|
+
onToggle: G
|
|
223
|
+
})
|
|
224
|
+
})
|
|
225
|
+
]
|
|
226
|
+
})
|
|
227
|
+
]
|
|
228
|
+
});
|
|
229
|
+
};
|
|
230
|
+
//#endregion
|
|
231
|
+
export { C as FileCard };
|
|
232
|
+
|
|
233
|
+
//# sourceMappingURL=FileCard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileCard.js","names":[],"sources":["../../../src/files/components/FileCard.tsx"],"sourcesContent":["import { type FC, useState, useMemo } from \"react\";\nimport {\n Download,\n Share2,\n Trash2,\n Star,\n RotateCcw,\n Copy,\n Edit,\n FolderInput,\n Info,\n Activity,\n} from \"lucide-react\";\nimport { useI18n } from \"@burdenoff/fe-libs/shared/providers/shell/I18nProvider\";\nimport type { FileItem } from \"../types\";\nimport { formatFileSize, formatFileDate, getFileIcon } from \"../utils\";\nimport { useFilesStore } from \"../store/filesStore\";\nimport { ActionMenu } from \"./ActionMenu\";\nimport { getDragOperation } from \"../hooks/useDragDrop\";\nimport { tWithFallback } from \"../utils/i18n\";\n\ninterface FileCardProps {\n file: FileItem;\n isSelected?: boolean;\n isDragging?: boolean;\n onSelect?: (fileId: string) => void;\n onPreview?: (file: FileItem) => void;\n onShare?: (file: FileItem) => void;\n onDelete?: (file: FileItem) => void;\n onRestore?: (file: FileItem) => void;\n onFavorite?: (file: FileItem) => void;\n onRename?: (file: FileItem) => void;\n onDownload?: (file: FileItem) => void;\n onCopy?: (file: FileItem) => void;\n onMove?: (file: FileItem) => void;\n onInfo?: (file: FileItem) => void;\n onActivity?: (file: FileItem) => void;\n onDragStart?: (file: FileItem, operation: \"move\" | \"copy\") => void;\n onDragEnd?: () => void;\n onContextMenu?: (file: FileItem, x: number, y: number) => void;\n}\n\ninterface DraggableFileCardProps extends Omit<\n FileCardProps,\n \"onDragStart\" | \"onDragEnd\"\n> {\n onDragStart?: (file: FileItem, operation: \"move\" | \"copy\") => void;\n onDragEnd?: () => void;\n onContextMenu?: (file: FileItem, x: number, y: number) => void;\n}\n\nexport const FileCard: FC<DraggableFileCardProps> = ({\n file,\n isSelected = false,\n isDragging = false,\n onSelect,\n onPreview,\n onShare,\n onDelete,\n onRestore,\n onFavorite,\n onRename,\n onDownload,\n onCopy,\n onMove,\n onInfo,\n onActivity,\n onDragStart,\n onDragEnd,\n onContextMenu,\n}) => {\n const { t } = useI18n();\n const [showActions, setShowActions] = useState(false);\n const [menuOpen, setMenuOpen] = useState(false);\n const { toggleFileSelection } = useFilesStore();\n\n const handleClick = () => {\n if (onPreview) {\n onPreview(file);\n }\n };\n\n const handleCheckboxChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n e.stopPropagation();\n if (onSelect) {\n onSelect(file.id);\n } else {\n toggleFileSelection(file.id);\n }\n };\n\n const handleActionClick = (e: React.MouseEvent, action: () => void) => {\n e.stopPropagation();\n action();\n setShowActions(false);\n };\n\n const handleDragStart = (e: React.DragEvent<HTMLDivElement>) => {\n e.dataTransfer.effectAllowed = \"copyMove\";\n e.dataTransfer.setData(\"application/x-file-id\", file.id);\n e.dataTransfer.setData(\"application/x-file-type\", \"file\");\n const operation = getDragOperation(e);\n e.dataTransfer.setData(\"application/x-drag-operation\", operation);\n onDragStart?.(file, operation);\n };\n\n const handleDragEnd = () => {\n onDragEnd?.();\n };\n\n const handleContextMenu = (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n onContextMenu?.(file, e.clientX, e.clientY);\n };\n\n const FileIconComponent = getFileIcon(file.mimeType);\n\n // Memoize menu items to prevent re-renders\n const menuItems = useMemo(\n () => [\n ...(onDownload\n ? [\n {\n label: tWithFallback(t, \"files.card.download\", \"Download\"),\n icon: <Download className=\"size-4\" />,\n onClick: () => onDownload(file),\n },\n ]\n : []),\n ...(onShare\n ? [\n {\n label: tWithFallback(t, \"files.card.share\", \"Share\"),\n icon: <Share2 className=\"size-4\" />,\n onClick: () => onShare(file),\n },\n ]\n : []),\n ...(onCopy\n ? [\n {\n label: tWithFallback(t, \"files.card.makeCopy\", \"Make a copy\"),\n icon: <Copy className=\"size-4\" />,\n onClick: () => onCopy(file),\n },\n ]\n : []),\n ...(onMove\n ? [\n {\n label: tWithFallback(t, \"files.card.moveTo\", \"Move to\"),\n icon: <FolderInput className=\"size-4\" />,\n onClick: () => onMove(file),\n },\n ]\n : []),\n ...(onRename\n ? [\n {\n label: tWithFallback(t, \"files.card.rename\", \"Rename\"),\n icon: <Edit className=\"size-4\" />,\n onClick: () => onRename(file),\n divider: true,\n },\n ]\n : []),\n ...(onFavorite\n ? [\n {\n label: file.starred\n ? tWithFallback(\n t,\n \"files.card.removeFromStarred\",\n \"Remove from starred\",\n )\n : tWithFallback(t, \"files.card.addToStarred\", \"Add to starred\"),\n icon: <Star className=\"size-4\" />,\n onClick: () => onFavorite(file),\n },\n ]\n : []),\n ...(onInfo\n ? [\n {\n label: tWithFallback(t, \"files.card.details\", \"Details\"),\n icon: <Info className=\"size-4\" />,\n onClick: () => onInfo(file),\n },\n ]\n : []),\n ...(onActivity\n ? [\n {\n label: tWithFallback(t, \"files.card.activity\", \"Activity\"),\n icon: <Activity className=\"size-4\" />,\n onClick: () => onActivity(file),\n },\n ]\n : []),\n ...(onDelete\n ? [\n {\n label: tWithFallback(t, \"files.card.delete\", \"Delete\"),\n icon: <Trash2 className=\"size-4\" />,\n onClick: () => onDelete(file),\n variant: \"danger\" as const,\n divider: true,\n },\n ]\n : []),\n ...(onRestore\n ? [\n {\n label: tWithFallback(t, \"files.card.restore\", \"Restore\"),\n icon: <RotateCcw className=\"size-4\" />,\n onClick: () => onRestore(file),\n },\n ]\n : []),\n ],\n [\n file,\n onDownload,\n onShare,\n onCopy,\n onMove,\n onRename,\n onFavorite,\n onInfo,\n onActivity,\n onDelete,\n onRestore,\n t,\n ],\n );\n\n return (\n <div\n className={`@container group relative cursor-pointer overflow-hidden rounded-card border bg-bg-surface shadow-elevation-1 transition-shadow hover:shadow-elevation-2 focus-within:shadow-elevation-2 ${isDragging ? \"opacity-50\" : \"border-border-subtle\"}`}\n onClick={handleClick}\n onContextMenu={handleContextMenu}\n onMouseEnter={() => setShowActions(true)}\n onMouseLeave={() => setShowActions(false)}\n onFocus={() => setShowActions(true)}\n onBlur={(event) => {\n if (!event.currentTarget.contains(event.relatedTarget)) {\n setShowActions(false);\n }\n }}\n onKeyDown={(event) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n handleClick();\n }\n }}\n draggable={Boolean(onDragStart)}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n role=\"button\"\n tabIndex={0}\n aria-label={`Preview ${file.name}`}\n >\n {/* Selection checkbox */}\n <div\n className={`absolute top-2 left-2 z-10 transition-opacity ${\n isSelected\n ? \"opacity-100\"\n : \"opacity-0 group-hover:opacity-100 group-focus-within:opacity-100\"\n }`}\n >\n <input\n type=\"checkbox\"\n checked={isSelected}\n onChange={handleCheckboxChange}\n className=\"size-4 rounded border-border-default bg-bg-surface text-action-primary-bg focus:ring-2 focus:ring-action-primary-bg focus:ring-offset-2\"\n aria-label={`Select ${file.name}`}\n />\n </div>\n\n {/* Favorite indicator */}\n {file.starred && (\n <div className=\"absolute top-2 right-2 z-10\">\n <Star className=\"size-4 fill-status-warning-text text-status-warning-text\" />\n </div>\n )}\n\n {/* Thumbnail or icon */}\n <div className=\"aspect-[4/3] bg-bg-sunken flex items-center justify-center overflow-hidden\">\n {file.thumbnailUrl ? (\n <img\n src={file.thumbnailUrl}\n alt={file.name}\n className=\"h-full w-full object-contain p-2\"\n />\n ) : (\n <FileIconComponent className=\"size-12 @md:size-16 text-text-muted\" />\n )}\n </div>\n\n {/* File info */}\n <div className=\"p-3 @md:p-4\">\n <h3 className=\"font-text-md font-weight-medium text-text-primary truncate mb-1\">\n {file.name}\n </h3>\n\n <div className=\"hidden @sm:flex items-center gap-2 text-text-secondary font-text-sm\">\n <span>{formatFileSize(file.size)}</span>\n <span className=\"text-border-subtle\">•</span>\n <span>{formatFileDate(file.updatedAt)}</span>\n </div>\n\n {/* Extended metadata on larger containers */}\n <div className=\"hidden @md:flex items-center gap-2 mt-2 text-text-muted font-text-xs\">\n {file.createdBy && (\n <div className=\"flex items-center gap-1\">\n {file.createdBy.avatar && (\n <img\n src={file.createdBy.avatar}\n alt={file.createdBy.name}\n className=\"size-4 rounded-full\"\n />\n )}\n <span>{file.createdBy.name}</span>\n </div>\n )}\n {file.isShared && (\n <>\n <span className=\"text-border-subtle\">•</span>\n <Share2 className=\"size-3\" />\n <span>{tWithFallback(t, \"files.card.shared\", \"Shared\")}</span>\n </>\n )}\n </div>\n\n {/* Tags */}\n {file.tags && file.tags.length > 0 && (\n <div className=\"hidden @lg:flex flex-wrap gap-1 mt-2\">\n {file.tags.slice(0, 3).map((tag) => (\n <span\n key={tag}\n className=\"px-2 py-0.5 bg-bg-accent text-text-primary font-text-xs rounded-sm\"\n >\n {tag}\n </span>\n ))}\n {file.tags.length > 3 && (\n <span className=\"px-2 py-0.5 text-text-muted font-text-xs\">\n +{file.tags.length - 3}\n </span>\n )}\n </div>\n )}\n </div>\n\n {/* Action buttons (on hover) with dropdown menu */}\n {showActions && (\n <div className=\"absolute bottom-3 right-3 flex items-center gap-1 bg-bg-elevated border border-border-subtle rounded shadow-elevation-2 p-1\">\n {onDownload && (\n <button\n onClick={(e) => handleActionClick(e, () => onDownload(file))}\n className=\"p-1.5 hover:bg-action-ghost-bg-hover rounded transition-colors\"\n aria-label={tWithFallback(t, \"files.card.download\", \"Download\")}\n title={tWithFallback(t, \"files.card.download\", \"Download\")}\n >\n <Download className=\"size-4 text-text-primary\" />\n </button>\n )}\n\n {onShare && (\n <button\n onClick={(e) => handleActionClick(e, () => onShare(file))}\n className=\"p-1.5 hover:bg-action-ghost-bg-hover rounded transition-colors\"\n aria-label={tWithFallback(t, \"files.card.share\", \"Share\")}\n title={tWithFallback(t, \"files.card.share\", \"Share\")}\n >\n <Share2 className=\"size-4 text-text-primary\" />\n </button>\n )}\n\n {onFavorite && (\n <button\n onClick={(e) => handleActionClick(e, () => onFavorite(file))}\n className=\"p-1.5 hover:bg-action-ghost-bg-hover rounded transition-colors\"\n aria-label={\n file.starred\n ? tWithFallback(t, \"files.card.unfavorite\", \"Unfavorite\")\n : tWithFallback(t, \"files.card.favorite\", \"Favorite\")\n }\n title={\n file.starred\n ? tWithFallback(t, \"files.card.unfavorite\", \"Unfavorite\")\n : tWithFallback(t, \"files.card.favorite\", \"Favorite\")\n }\n >\n <Star\n className={`size-4 ${\n file.starred\n ? \"fill-status-warning-text text-status-warning-text\"\n : \"text-text-primary\"\n }`}\n />\n </button>\n )}\n\n {onRestore && (\n <button\n onClick={(e) => handleActionClick(e, () => onRestore(file))}\n className=\"p-1.5 hover:bg-status-success-bg-subtle rounded transition-colors\"\n aria-label={tWithFallback(t, \"files.card.restore\", \"Restore\")}\n title={tWithFallback(t, \"files.card.restore\", \"Restore\")}\n >\n <RotateCcw className=\"size-4 text-status-success-text\" />\n </button>\n )}\n\n {/* More options dropdown */}\n <div onClick={(e) => e.stopPropagation()}>\n <ActionMenu\n items={menuItems}\n align=\"right\"\n triggerClassName=\"p-1.5\"\n isOpen={menuOpen}\n onToggle={setMenuOpen}\n />\n </div>\n </div>\n )}\n </div>\n );\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { FileItem, FolderItem } from '../types';
|
|
2
|
+
interface FileInfoPanelProps {
|
|
3
|
+
item: FileItem | FolderItem;
|
|
4
|
+
type: "file" | "folder";
|
|
5
|
+
onClose: () => void;
|
|
6
|
+
}
|
|
7
|
+
export declare function FileInfoPanel({ item, type, onClose }: FileInfoPanelProps): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=FileInfoPanel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileInfoPanel.d.ts","sourceRoot":"","sources":["../../../src/files/components/FileInfoPanel.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAQrD,UAAU,kBAAkB;IAC1B,IAAI,EAAE,QAAQ,GAAG,UAAU,CAAC;IAC5B,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC;IACxB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,wBAAgB,aAAa,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,kBAAkB,2CA6RxE"}
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
import { tWithFallback as e } from "../utils/i18n.js";
|
|
2
|
+
import { Suspense as t, lazy as n, useEffect as r, useState as i } from "react";
|
|
3
|
+
import { Calendar as a, Clock as o, FileText as s, HardDrive as c, Link as l, User as u, X as d } from "lucide-react";
|
|
4
|
+
import { Fragment as f, jsx as p, jsxs as m } from "react/jsx-runtime";
|
|
5
|
+
import { useI18n as h } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
6
|
+
//#region src/files/components/FileInfoPanel.tsx
|
|
7
|
+
var g = n(() => import("./FileVersionPanel.js").then((e) => ({ default: e.FileVersionPanel })));
|
|
8
|
+
function _({ item: n, type: _, onClose: v }) {
|
|
9
|
+
let { t: y } = h(), b = _ === "file", x = b ? n : null, S = b ? null : n, [C, w] = i(!1);
|
|
10
|
+
r(() => {
|
|
11
|
+
let e = (e) => {
|
|
12
|
+
if (e.key === "Escape") {
|
|
13
|
+
if (C) {
|
|
14
|
+
w(!1);
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
v();
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
return document.addEventListener("keydown", e), () => document.removeEventListener("keydown", e);
|
|
21
|
+
}, [v, C]);
|
|
22
|
+
let T = (e) => new Date(e).toLocaleString("en-US", {
|
|
23
|
+
year: "numeric",
|
|
24
|
+
month: "long",
|
|
25
|
+
day: "numeric",
|
|
26
|
+
hour: "2-digit",
|
|
27
|
+
minute: "2-digit"
|
|
28
|
+
});
|
|
29
|
+
return /* @__PURE__ */ m("div", {
|
|
30
|
+
className: "fixed inset-y-0 right-0 z-[90] w-full max-w-full overflow-y-auto border-l border-border-default bg-bg-surface shadow-2xl animate-in slide-in-from-right duration-300 sm:w-96",
|
|
31
|
+
role: "dialog",
|
|
32
|
+
"aria-modal": "false",
|
|
33
|
+
"aria-label": b ? e(y, "files.info.fileInfo", "File information") : e(y, "files.info.folderInfo", "Folder information"),
|
|
34
|
+
children: [
|
|
35
|
+
/* @__PURE__ */ m("div", {
|
|
36
|
+
className: "sticky top-0 bg-bg-surface border-b border-border-default px-6 py-4 flex items-center justify-between",
|
|
37
|
+
children: [/* @__PURE__ */ p("h2", {
|
|
38
|
+
className: "text-lg font-semibold text-text-primary",
|
|
39
|
+
children: b ? e(y, "files.info.fileInfo", "File Information") : e(y, "files.info.folderInfo", "Folder Information")
|
|
40
|
+
}), /* @__PURE__ */ p("button", {
|
|
41
|
+
onClick: v,
|
|
42
|
+
className: "p-1.5 rounded-md border border-border-default text-text-secondary bg-bg-muted hover:bg-action-ghost-bg-hover hover:text-text-primary transition-colors",
|
|
43
|
+
"aria-label": e(y, "files.info.closePanel", "Close information panel"),
|
|
44
|
+
children: /* @__PURE__ */ p(d, { className: "size-5" })
|
|
45
|
+
})]
|
|
46
|
+
}),
|
|
47
|
+
/* @__PURE__ */ m("div", {
|
|
48
|
+
className: "p-6 space-y-6",
|
|
49
|
+
children: [
|
|
50
|
+
/* @__PURE__ */ p("div", {
|
|
51
|
+
className: "flex items-center justify-center py-8 bg-bg-muted rounded-lg",
|
|
52
|
+
children: b && x?.mimeType.startsWith("image/") ? /* @__PURE__ */ p("img", {
|
|
53
|
+
src: x.downloadUrl || x.url,
|
|
54
|
+
alt: n.name,
|
|
55
|
+
className: "max-w-full max-h-48 object-contain rounded"
|
|
56
|
+
}) : /* @__PURE__ */ p(s, { className: "size-20 text-text-muted" })
|
|
57
|
+
}),
|
|
58
|
+
/* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("h3", {
|
|
59
|
+
className: "text-xl font-semibold text-text-primary break-words",
|
|
60
|
+
children: n.name
|
|
61
|
+
}), n.description && /* @__PURE__ */ p("p", {
|
|
62
|
+
className: "mt-2 text-sm text-text-secondary",
|
|
63
|
+
children: n.description
|
|
64
|
+
})] }),
|
|
65
|
+
/* @__PURE__ */ m("div", {
|
|
66
|
+
className: "space-y-4",
|
|
67
|
+
children: [
|
|
68
|
+
/* @__PURE__ */ m("div", {
|
|
69
|
+
className: "flex items-start gap-3",
|
|
70
|
+
children: [/* @__PURE__ */ p(s, { className: "size-5 text-text-muted mt-0.5" }), /* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("p", {
|
|
71
|
+
className: "text-sm font-medium text-text-primary",
|
|
72
|
+
children: e(y, "files.info.type", "Type")
|
|
73
|
+
}), /* @__PURE__ */ p("p", {
|
|
74
|
+
className: "text-sm text-text-secondary",
|
|
75
|
+
children: b ? x?.mimeType || e(y, "files.info.unknown", "Unknown") : e(y, "files.info.folder", "Folder")
|
|
76
|
+
})] })]
|
|
77
|
+
}),
|
|
78
|
+
b && x && /* @__PURE__ */ m("div", {
|
|
79
|
+
className: "flex items-start gap-3",
|
|
80
|
+
children: [/* @__PURE__ */ p(c, { className: "size-5 text-text-muted mt-0.5" }), /* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("p", {
|
|
81
|
+
className: "text-sm font-medium text-text-primary",
|
|
82
|
+
children: e(y, "files.info.size", "Size")
|
|
83
|
+
}), /* @__PURE__ */ p("p", {
|
|
84
|
+
className: "text-sm text-text-secondary",
|
|
85
|
+
children: ((e) => e < 1024 ? `${e} B` : e < 1024 * 1024 ? `${(e / 1024).toFixed(2)} KB` : e < 1024 * 1024 * 1024 ? `${(e / 1024 / 1024).toFixed(2)} MB` : `${(e / 1024 / 1024 / 1024).toFixed(2)} GB`)(x.size)
|
|
86
|
+
})] })]
|
|
87
|
+
}),
|
|
88
|
+
!b && S && /* @__PURE__ */ m(f, { children: [/* @__PURE__ */ m("div", {
|
|
89
|
+
className: "flex items-start gap-3",
|
|
90
|
+
children: [/* @__PURE__ */ p(s, { className: "size-5 text-text-muted mt-0.5" }), /* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("p", {
|
|
91
|
+
className: "text-sm font-medium text-text-primary",
|
|
92
|
+
children: e(y, "files.info.contents", "Contents")
|
|
93
|
+
}), /* @__PURE__ */ m("p", {
|
|
94
|
+
className: "text-sm text-text-secondary",
|
|
95
|
+
children: [
|
|
96
|
+
S.filesCount,
|
|
97
|
+
" ",
|
|
98
|
+
e(y, "files.info.files", "files"),
|
|
99
|
+
",",
|
|
100
|
+
" ",
|
|
101
|
+
S.subfoldersCount,
|
|
102
|
+
" ",
|
|
103
|
+
e(y, "files.info.folders", "folders")
|
|
104
|
+
]
|
|
105
|
+
})] })]
|
|
106
|
+
}), S.path && /* @__PURE__ */ m("div", {
|
|
107
|
+
className: "flex items-start gap-3",
|
|
108
|
+
children: [/* @__PURE__ */ p(l, { className: "size-5 text-text-muted mt-0.5" }), /* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("p", {
|
|
109
|
+
className: "text-sm font-medium text-text-primary",
|
|
110
|
+
children: e(y, "files.info.path", "Path")
|
|
111
|
+
}), /* @__PURE__ */ p("p", {
|
|
112
|
+
className: "text-sm text-text-secondary break-all",
|
|
113
|
+
children: S.path
|
|
114
|
+
})] })]
|
|
115
|
+
})] }),
|
|
116
|
+
/* @__PURE__ */ m("div", {
|
|
117
|
+
className: "flex items-start gap-3",
|
|
118
|
+
children: [/* @__PURE__ */ p(a, { className: "size-5 text-text-muted mt-0.5" }), /* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("p", {
|
|
119
|
+
className: "text-sm font-medium text-text-primary",
|
|
120
|
+
children: e(y, "files.info.created", "Created")
|
|
121
|
+
}), /* @__PURE__ */ p("p", {
|
|
122
|
+
className: "text-sm text-text-secondary",
|
|
123
|
+
children: T(n.createdAt)
|
|
124
|
+
})] })]
|
|
125
|
+
}),
|
|
126
|
+
n.updatedAt && /* @__PURE__ */ m("div", {
|
|
127
|
+
className: "flex items-start gap-3",
|
|
128
|
+
children: [/* @__PURE__ */ p(a, { className: "size-5 text-text-muted mt-0.5" }), /* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("p", {
|
|
129
|
+
className: "text-sm font-medium text-text-primary",
|
|
130
|
+
children: e(y, "files.info.modified", "Modified")
|
|
131
|
+
}), /* @__PURE__ */ p("p", {
|
|
132
|
+
className: "text-sm text-text-secondary",
|
|
133
|
+
children: T(n.updatedAt)
|
|
134
|
+
})] })]
|
|
135
|
+
}),
|
|
136
|
+
/* @__PURE__ */ m("div", {
|
|
137
|
+
className: "flex items-start gap-3",
|
|
138
|
+
children: [/* @__PURE__ */ p(u, { className: "size-5 text-text-muted mt-0.5" }), /* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("p", {
|
|
139
|
+
className: "text-sm font-medium text-text-primary",
|
|
140
|
+
children: e(y, "files.info.owner", "Owner")
|
|
141
|
+
}), /* @__PURE__ */ p("p", {
|
|
142
|
+
className: "text-sm text-text-secondary",
|
|
143
|
+
children: n.createdBy?.name || n.createdById || e(y, "files.info.unknown", "Unknown")
|
|
144
|
+
})] })]
|
|
145
|
+
})
|
|
146
|
+
]
|
|
147
|
+
}),
|
|
148
|
+
/* @__PURE__ */ m("div", {
|
|
149
|
+
className: "pt-6 border-t border-border-default",
|
|
150
|
+
children: [/* @__PURE__ */ p("h4", {
|
|
151
|
+
className: "text-sm font-semibold text-text-primary mb-3",
|
|
152
|
+
children: e(y, "files.info.properties", "Properties")
|
|
153
|
+
}), /* @__PURE__ */ m("dl", {
|
|
154
|
+
className: "space-y-2",
|
|
155
|
+
children: [
|
|
156
|
+
/* @__PURE__ */ m("div", {
|
|
157
|
+
className: "flex justify-between",
|
|
158
|
+
children: [/* @__PURE__ */ p("dt", {
|
|
159
|
+
className: "text-sm text-text-secondary",
|
|
160
|
+
children: e(y, "files.info.status", "Status")
|
|
161
|
+
}), /* @__PURE__ */ p("dd", {
|
|
162
|
+
className: "text-sm font-medium text-text-primary",
|
|
163
|
+
children: n.status
|
|
164
|
+
})]
|
|
165
|
+
}),
|
|
166
|
+
/* @__PURE__ */ m("div", {
|
|
167
|
+
className: "flex justify-between",
|
|
168
|
+
children: [/* @__PURE__ */ p("dt", {
|
|
169
|
+
className: "text-sm text-text-secondary",
|
|
170
|
+
children: e(y, "files.info.visibility", "Visibility")
|
|
171
|
+
}), /* @__PURE__ */ p("dd", {
|
|
172
|
+
className: "text-sm font-medium text-text-primary",
|
|
173
|
+
children: n.visibility
|
|
174
|
+
})]
|
|
175
|
+
}),
|
|
176
|
+
/* @__PURE__ */ m("div", {
|
|
177
|
+
className: "flex justify-between",
|
|
178
|
+
children: [/* @__PURE__ */ p("dt", {
|
|
179
|
+
className: "text-sm text-text-secondary",
|
|
180
|
+
children: e(y, "files.info.starred", "Starred")
|
|
181
|
+
}), /* @__PURE__ */ p("dd", {
|
|
182
|
+
className: "text-sm font-medium text-text-primary",
|
|
183
|
+
children: n.starred ? e(y, "files.info.yes", "Yes") : e(y, "files.info.no", "No")
|
|
184
|
+
})]
|
|
185
|
+
})
|
|
186
|
+
]
|
|
187
|
+
})]
|
|
188
|
+
}),
|
|
189
|
+
b && x && /* @__PURE__ */ p("div", {
|
|
190
|
+
className: "pt-6 border-t border-border-default",
|
|
191
|
+
children: /* @__PURE__ */ m("button", {
|
|
192
|
+
onClick: () => w(!0),
|
|
193
|
+
className: "w-full flex items-center justify-center gap-2 px-4 py-3 text-sm font-medium text-action-primary-text bg-action-primary-bg/10 hover:bg-action-primary-bg/20 rounded-lg transition-all duration-200",
|
|
194
|
+
children: [/* @__PURE__ */ p(o, { className: "size-4" }), e(y, "files.info.viewVersionHistory", "View Version History")]
|
|
195
|
+
})
|
|
196
|
+
})
|
|
197
|
+
]
|
|
198
|
+
}),
|
|
199
|
+
b && x && C && /* @__PURE__ */ p(t, {
|
|
200
|
+
fallback: /* @__PURE__ */ p("div", {
|
|
201
|
+
className: "fixed inset-0 z-50 bg-bg-overlay flex items-center justify-center",
|
|
202
|
+
children: /* @__PURE__ */ p("div", {
|
|
203
|
+
className: "bg-bg-surface rounded-lg p-8 animate-in fade-in zoom-in duration-200",
|
|
204
|
+
children: /* @__PURE__ */ m("div", {
|
|
205
|
+
className: "flex items-center gap-3",
|
|
206
|
+
children: [/* @__PURE__ */ p(o, { className: "size-6 text-action-primary-bg animate-spin" }), /* @__PURE__ */ p("span", {
|
|
207
|
+
className: "text-text-primary",
|
|
208
|
+
children: e(y, "files.info.loadingVersionHistory", "Loading version history...")
|
|
209
|
+
})]
|
|
210
|
+
})
|
|
211
|
+
})
|
|
212
|
+
}),
|
|
213
|
+
children: /* @__PURE__ */ p(g, {
|
|
214
|
+
file: x,
|
|
215
|
+
onClose: () => w(!1)
|
|
216
|
+
})
|
|
217
|
+
})
|
|
218
|
+
]
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
//#endregion
|
|
222
|
+
export { _ as FileInfoPanel };
|
|
223
|
+
|
|
224
|
+
//# sourceMappingURL=FileInfoPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileInfoPanel.js","names":[],"sources":["../../../src/files/components/FileInfoPanel.tsx"],"sourcesContent":["import { useEffect, useState, lazy, Suspense } from \"react\";\nimport {\n X,\n FileText,\n Calendar,\n User,\n HardDrive,\n Link as LinkIcon,\n Clock,\n} from \"lucide-react\";\nimport { useI18n } from \"@burdenoff/fe-libs/shared/providers/shell/I18nProvider\";\nimport type { FileItem, FolderItem } from \"../types\";\nimport { tWithFallback } from \"../utils/i18n\";\n\n// Lazy load FileVersionPanel to avoid loading heavy dependencies until needed\nconst FileVersionPanel = lazy(() =>\n import(\"./FileVersionPanel\").then((m) => ({ default: m.FileVersionPanel })),\n);\n\ninterface FileInfoPanelProps {\n item: FileItem | FolderItem;\n type: \"file\" | \"folder\";\n onClose: () => void;\n}\n\nexport function FileInfoPanel({ item, type, onClose }: FileInfoPanelProps) {\n const { t } = useI18n();\n const isFile = type === \"file\";\n const file = isFile ? (item as FileItem) : null;\n const folder = !isFile ? (item as FolderItem) : null;\n const [showVersionHistory, setShowVersionHistory] = useState(false);\n\n useEffect(() => {\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n if (showVersionHistory) {\n setShowVersionHistory(false);\n return;\n }\n\n onClose();\n }\n };\n\n document.addEventListener(\"keydown\", handleEscape);\n return () => document.removeEventListener(\"keydown\", handleEscape);\n }, [onClose, showVersionHistory]);\n\n const formatDate = (date: string) => {\n return new Date(date).toLocaleString(\"en-US\", {\n year: \"numeric\",\n month: \"long\",\n day: \"numeric\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n });\n };\n\n const formatSize = (bytes: number) => {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(2)} KB`;\n if (bytes < 1024 * 1024 * 1024)\n return `${(bytes / 1024 / 1024).toFixed(2)} MB`;\n return `${(bytes / 1024 / 1024 / 1024).toFixed(2)} GB`;\n };\n\n return (\n <div\n className=\"fixed inset-y-0 right-0 z-[90] w-full max-w-full overflow-y-auto border-l border-border-default bg-bg-surface shadow-2xl animate-in slide-in-from-right duration-300 sm:w-96\"\n role=\"dialog\"\n aria-modal=\"false\"\n aria-label={\n isFile\n ? tWithFallback(t, \"files.info.fileInfo\", \"File information\")\n : tWithFallback(t, \"files.info.folderInfo\", \"Folder information\")\n }\n >\n {/* Header */}\n <div className=\"sticky top-0 bg-bg-surface border-b border-border-default px-6 py-4 flex items-center justify-between\">\n <h2 className=\"text-lg font-semibold text-text-primary\">\n {isFile\n ? tWithFallback(t, \"files.info.fileInfo\", \"File Information\")\n : tWithFallback(t, \"files.info.folderInfo\", \"Folder Information\")}\n </h2>\n <button\n onClick={onClose}\n className=\"p-1.5 rounded-md border border-border-default text-text-secondary bg-bg-muted hover:bg-action-ghost-bg-hover hover:text-text-primary transition-colors\"\n aria-label={tWithFallback(\n t,\n \"files.info.closePanel\",\n \"Close information panel\",\n )}\n >\n <X className=\"size-5\" />\n </button>\n </div>\n\n {/* Content */}\n <div className=\"p-6 space-y-6\">\n {/* Preview/Icon */}\n <div className=\"flex items-center justify-center py-8 bg-bg-muted rounded-lg\">\n {isFile && file?.mimeType.startsWith(\"image/\") ? (\n <img\n src={file.downloadUrl || file.url}\n alt={item.name}\n className=\"max-w-full max-h-48 object-contain rounded\"\n />\n ) : (\n <FileText className=\"size-20 text-text-muted\" />\n )}\n </div>\n\n {/* Name */}\n <div>\n <h3 className=\"text-xl font-semibold text-text-primary break-words\">\n {item.name}\n </h3>\n {item.description && (\n <p className=\"mt-2 text-sm text-text-secondary\">\n {item.description}\n </p>\n )}\n </div>\n\n {/* Details */}\n <div className=\"space-y-4\">\n <div className=\"flex items-start gap-3\">\n <FileText className=\"size-5 text-text-muted mt-0.5\" />\n <div>\n <p className=\"text-sm font-medium text-text-primary\">\n {tWithFallback(t, \"files.info.type\", \"Type\")}\n </p>\n <p className=\"text-sm text-text-secondary\">\n {isFile\n ? file?.mimeType ||\n tWithFallback(t, \"files.info.unknown\", \"Unknown\")\n : tWithFallback(t, \"files.info.folder\", \"Folder\")}\n </p>\n </div>\n </div>\n\n {isFile && file && (\n <div className=\"flex items-start gap-3\">\n <HardDrive className=\"size-5 text-text-muted mt-0.5\" />\n <div>\n <p className=\"text-sm font-medium text-text-primary\">\n {tWithFallback(t, \"files.info.size\", \"Size\")}\n </p>\n <p className=\"text-sm text-text-secondary\">\n {formatSize(file.size)}\n </p>\n </div>\n </div>\n )}\n\n {!isFile && folder && (\n <>\n <div className=\"flex items-start gap-3\">\n <FileText className=\"size-5 text-text-muted mt-0.5\" />\n <div>\n <p className=\"text-sm font-medium text-text-primary\">\n {tWithFallback(t, \"files.info.contents\", \"Contents\")}\n </p>\n <p className=\"text-sm text-text-secondary\">\n {folder.filesCount}{\" \"}\n {tWithFallback(t, \"files.info.files\", \"files\")},{\" \"}\n {folder.subfoldersCount}{\" \"}\n {tWithFallback(t, \"files.info.folders\", \"folders\")}\n </p>\n </div>\n </div>\n\n {folder.path && (\n <div className=\"flex items-start gap-3\">\n <LinkIcon className=\"size-5 text-text-muted mt-0.5\" />\n <div>\n <p className=\"text-sm font-medium text-text-primary\">\n {tWithFallback(t, \"files.info.path\", \"Path\")}\n </p>\n <p className=\"text-sm text-text-secondary break-all\">\n {folder.path}\n </p>\n </div>\n </div>\n )}\n </>\n )}\n\n <div className=\"flex items-start gap-3\">\n <Calendar className=\"size-5 text-text-muted mt-0.5\" />\n <div>\n <p className=\"text-sm font-medium text-text-primary\">\n {tWithFallback(t, \"files.info.created\", \"Created\")}\n </p>\n <p className=\"text-sm text-text-secondary\">\n {formatDate(item.createdAt)}\n </p>\n </div>\n </div>\n\n {item.updatedAt && (\n <div className=\"flex items-start gap-3\">\n <Calendar className=\"size-5 text-text-muted mt-0.5\" />\n <div>\n <p className=\"text-sm font-medium text-text-primary\">\n {tWithFallback(t, \"files.info.modified\", \"Modified\")}\n </p>\n <p className=\"text-sm text-text-secondary\">\n {formatDate(item.updatedAt)}\n </p>\n </div>\n </div>\n )}\n\n <div className=\"flex items-start gap-3\">\n <User className=\"size-5 text-text-muted mt-0.5\" />\n <div>\n <p className=\"text-sm font-medium text-text-primary\">\n {tWithFallback(t, \"files.info.owner\", \"Owner\")}\n </p>\n <p className=\"text-sm text-text-secondary\">\n {item.createdBy?.name ||\n item.createdById ||\n tWithFallback(t, \"files.info.unknown\", \"Unknown\")}\n </p>\n </div>\n </div>\n </div>\n\n {/* Additional Info */}\n <div className=\"pt-6 border-t border-border-default\">\n <h4 className=\"text-sm font-semibold text-text-primary mb-3\">\n {tWithFallback(t, \"files.info.properties\", \"Properties\")}\n </h4>\n <dl className=\"space-y-2\">\n <div className=\"flex justify-between\">\n <dt className=\"text-sm text-text-secondary\">\n {tWithFallback(t, \"files.info.status\", \"Status\")}\n </dt>\n <dd className=\"text-sm font-medium text-text-primary\">\n {item.status}\n </dd>\n </div>\n <div className=\"flex justify-between\">\n <dt className=\"text-sm text-text-secondary\">\n {tWithFallback(t, \"files.info.visibility\", \"Visibility\")}\n </dt>\n <dd className=\"text-sm font-medium text-text-primary\">\n {item.visibility}\n </dd>\n </div>\n <div className=\"flex justify-between\">\n <dt className=\"text-sm text-text-secondary\">\n {tWithFallback(t, \"files.info.starred\", \"Starred\")}\n </dt>\n <dd className=\"text-sm font-medium text-text-primary\">\n {item.starred\n ? tWithFallback(t, \"files.info.yes\", \"Yes\")\n : tWithFallback(t, \"files.info.no\", \"No\")}\n </dd>\n </div>\n </dl>\n </div>\n\n {/* Version History Button (Files only) */}\n {isFile && file && (\n <div className=\"pt-6 border-t border-border-default\">\n <button\n onClick={() => setShowVersionHistory(true)}\n className=\"w-full flex items-center justify-center gap-2 px-4 py-3 text-sm font-medium text-action-primary-text bg-action-primary-bg/10 hover:bg-action-primary-bg/20 rounded-lg transition-all duration-200\"\n >\n <Clock className=\"size-4\" />\n {tWithFallback(\n t,\n \"files.info.viewVersionHistory\",\n \"View Version History\",\n )}\n </button>\n </div>\n )}\n </div>\n\n {/* Version History Modal */}\n {isFile && file && showVersionHistory && (\n <Suspense\n fallback={\n <div className=\"fixed inset-0 z-50 bg-bg-overlay flex items-center justify-center\">\n <div className=\"bg-bg-surface rounded-lg p-8 animate-in fade-in zoom-in duration-200\">\n <div className=\"flex items-center gap-3\">\n <Clock className=\"size-6 text-action-primary-bg animate-spin\" />\n <span className=\"text-text-primary\">\n {tWithFallback(\n t,\n \"files.info.loadingVersionHistory\",\n \"Loading version history...\",\n )}\n </span>\n </div>\n </div>\n </div>\n }\n >\n <FileVersionPanel\n file={file}\n onClose={() => setShowVersionHistory(false)}\n />\n </Suspense>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
import { FileItem } from '../types';
|
|
3
|
+
interface FileListItemProps {
|
|
4
|
+
file: FileItem;
|
|
5
|
+
isSelected?: boolean;
|
|
6
|
+
isDragging?: boolean;
|
|
7
|
+
onSelect?: (fileId: string) => void;
|
|
8
|
+
onPreview?: (file: FileItem) => void;
|
|
9
|
+
onShare?: (file: FileItem) => void;
|
|
10
|
+
onDelete?: (file: FileItem) => void;
|
|
11
|
+
onRestore?: (file: FileItem) => void;
|
|
12
|
+
onFavorite?: (file: FileItem) => void;
|
|
13
|
+
onRename?: (file: FileItem) => void;
|
|
14
|
+
onDownload?: (file: FileItem) => void;
|
|
15
|
+
onCopy?: (file: FileItem) => void;
|
|
16
|
+
onMove?: (file: FileItem) => void;
|
|
17
|
+
onInfo?: (file: FileItem) => void;
|
|
18
|
+
onActivity?: (file: FileItem) => void;
|
|
19
|
+
onDragStart?: (file: FileItem, operation: "move" | "copy") => void;
|
|
20
|
+
onDragEnd?: () => void;
|
|
21
|
+
onContextMenu?: (file: FileItem, x: number, y: number) => void;
|
|
22
|
+
}
|
|
23
|
+
interface DraggableFileListItemProps extends Omit<FileListItemProps, "onDragStart" | "onDragEnd"> {
|
|
24
|
+
onDragStart?: (file: FileItem, operation: "move" | "copy") => void;
|
|
25
|
+
onDragEnd?: () => void;
|
|
26
|
+
}
|
|
27
|
+
interface FileListItemProps {
|
|
28
|
+
file: FileItem;
|
|
29
|
+
isSelected?: boolean;
|
|
30
|
+
onSelect?: (fileId: string) => void;
|
|
31
|
+
onPreview?: (file: FileItem) => void;
|
|
32
|
+
onShare?: (file: FileItem) => void;
|
|
33
|
+
onDelete?: (file: FileItem) => void;
|
|
34
|
+
onRestore?: (file: FileItem) => void;
|
|
35
|
+
onFavorite?: (file: FileItem) => void;
|
|
36
|
+
onRename?: (file: FileItem) => void;
|
|
37
|
+
onDownload?: (file: FileItem) => void;
|
|
38
|
+
onCopy?: (file: FileItem) => void;
|
|
39
|
+
onMove?: (file: FileItem) => void;
|
|
40
|
+
onInfo?: (file: FileItem) => void;
|
|
41
|
+
onActivity?: (file: FileItem) => void;
|
|
42
|
+
onContextMenu?: (file: FileItem, x: number, y: number) => void;
|
|
43
|
+
}
|
|
44
|
+
export declare const FileListItem: FC<DraggableFileListItemProps>;
|
|
45
|
+
export {};
|
|
46
|
+
//# sourceMappingURL=FileListItem.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileListItem.d.ts","sourceRoot":"","sources":["../../../src/files/components/FileListItem.tsx"],"names":[],"mappings":"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"}
|