@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,136 @@
|
|
|
1
|
+
import { tWithFallback as e } from "../utils/i18n.js";
|
|
2
|
+
import { useEffect as t, useRef as n } from "react";
|
|
3
|
+
import { Clock as r, Copy as i, Download as a, Edit3 as o, FolderInput as s, Info as c, RotateCcw as l, Share2 as u, Star as d, Trash2 as f } from "lucide-react";
|
|
4
|
+
import { jsx as p, jsxs as m } from "react/jsx-runtime";
|
|
5
|
+
//#region src/files/components/ContextMenu.tsx
|
|
6
|
+
function h({ x: e, y: r, onClose: i, items: a }) {
|
|
7
|
+
let o = n(null);
|
|
8
|
+
return t(() => {
|
|
9
|
+
let e = (e) => {
|
|
10
|
+
o.current && !o.current.contains(e.target) && i();
|
|
11
|
+
}, t = (e) => {
|
|
12
|
+
e.key === "Escape" && i();
|
|
13
|
+
};
|
|
14
|
+
return document.addEventListener("mousedown", e), document.addEventListener("keydown", t), () => {
|
|
15
|
+
document.removeEventListener("mousedown", e), document.removeEventListener("keydown", t);
|
|
16
|
+
};
|
|
17
|
+
}, [i]), /* @__PURE__ */ p("div", {
|
|
18
|
+
ref: o,
|
|
19
|
+
className: "fixed bg-bg-elevated rounded-lg shadow-xl border border-border-default py-1 min-w-48 z-50 animate-in fade-in-0 zoom-in-95 duration-150",
|
|
20
|
+
style: {
|
|
21
|
+
left: `${e}px`,
|
|
22
|
+
top: `${r}px`
|
|
23
|
+
},
|
|
24
|
+
children: a.map((e, t) => /* @__PURE__ */ m("button", {
|
|
25
|
+
onClick: () => {
|
|
26
|
+
e.onClick(), i();
|
|
27
|
+
},
|
|
28
|
+
disabled: e.disabled,
|
|
29
|
+
className: `
|
|
30
|
+
w-full flex items-center gap-3 px-4 py-2 text-sm transition-all duration-150 text-left
|
|
31
|
+
${e.variant === "danger" ? "text-status-error-text hover:bg-status-error-bg-subtle" : "text-text-primary hover:bg-action-ghost-bg-hover"}
|
|
32
|
+
${e.disabled ? "opacity-50 cursor-not-allowed" : "cursor-pointer"}
|
|
33
|
+
`,
|
|
34
|
+
children: [e.icon, e.label]
|
|
35
|
+
}, t))
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
function g(t, n) {
|
|
39
|
+
return [
|
|
40
|
+
...t.onShare ? [{
|
|
41
|
+
label: e(n, "files.contextMenu.share", "Share"),
|
|
42
|
+
icon: /* @__PURE__ */ p(u, { className: "size-4" }),
|
|
43
|
+
onClick: t.onShare
|
|
44
|
+
}] : [],
|
|
45
|
+
...t.onDownload ? [{
|
|
46
|
+
label: e(n, "files.contextMenu.download", "Download"),
|
|
47
|
+
icon: /* @__PURE__ */ p(a, { className: "size-4" }),
|
|
48
|
+
onClick: t.onDownload
|
|
49
|
+
}] : [],
|
|
50
|
+
...t.onCopy ? [{
|
|
51
|
+
label: e(n, "files.contextMenu.makeCopy", "Make a copy"),
|
|
52
|
+
icon: /* @__PURE__ */ p(i, { className: "size-4" }),
|
|
53
|
+
onClick: t.onCopy
|
|
54
|
+
}] : [],
|
|
55
|
+
...t.onRename ? [{
|
|
56
|
+
label: e(n, "files.contextMenu.rename", "Rename"),
|
|
57
|
+
icon: /* @__PURE__ */ p(o, { className: "size-4" }),
|
|
58
|
+
onClick: t.onRename
|
|
59
|
+
}] : [],
|
|
60
|
+
...t.onStar ? [{
|
|
61
|
+
label: t.isStarred ? e(n, "files.contextMenu.removeStar", "Remove star") : e(n, "files.contextMenu.addToStarred", "Add to starred"),
|
|
62
|
+
icon: /* @__PURE__ */ p(d, { className: "size-4" }),
|
|
63
|
+
onClick: t.onStar
|
|
64
|
+
}] : [],
|
|
65
|
+
...t.onMove ? [{
|
|
66
|
+
label: e(n, "files.contextMenu.moveTo", "Move to"),
|
|
67
|
+
icon: /* @__PURE__ */ p(s, { className: "size-4" }),
|
|
68
|
+
onClick: t.onMove
|
|
69
|
+
}] : [],
|
|
70
|
+
...t.onInfo ? [{
|
|
71
|
+
label: e(n, "files.contextMenu.fileInfo", "File information"),
|
|
72
|
+
icon: /* @__PURE__ */ p(c, { className: "size-4" }),
|
|
73
|
+
onClick: t.onInfo
|
|
74
|
+
}] : [],
|
|
75
|
+
...t.onActivity ? [{
|
|
76
|
+
label: e(n, "files.contextMenu.activity", "Activity"),
|
|
77
|
+
icon: /* @__PURE__ */ p(r, { className: "size-4" }),
|
|
78
|
+
onClick: t.onActivity
|
|
79
|
+
}] : [],
|
|
80
|
+
...t.onRestore ? [{
|
|
81
|
+
label: e(n, "files.contextMenu.restore", "Restore"),
|
|
82
|
+
icon: /* @__PURE__ */ p(l, { className: "size-4" }),
|
|
83
|
+
onClick: t.onRestore
|
|
84
|
+
}] : [],
|
|
85
|
+
...t.onDelete ? [{
|
|
86
|
+
label: e(n, "files.contextMenu.delete", "Delete"),
|
|
87
|
+
icon: /* @__PURE__ */ p(f, { className: "size-4" }),
|
|
88
|
+
onClick: t.onDelete,
|
|
89
|
+
variant: "danger"
|
|
90
|
+
}] : []
|
|
91
|
+
];
|
|
92
|
+
}
|
|
93
|
+
function _(t, n) {
|
|
94
|
+
return [
|
|
95
|
+
...t.onShare ? [{
|
|
96
|
+
label: e(n, "files.contextMenu.share", "Share"),
|
|
97
|
+
icon: /* @__PURE__ */ p(u, { className: "size-4" }),
|
|
98
|
+
onClick: t.onShare
|
|
99
|
+
}] : [],
|
|
100
|
+
...t.onRename ? [{
|
|
101
|
+
label: e(n, "files.contextMenu.rename", "Rename"),
|
|
102
|
+
icon: /* @__PURE__ */ p(o, { className: "size-4" }),
|
|
103
|
+
onClick: t.onRename
|
|
104
|
+
}] : [],
|
|
105
|
+
...t.onStar ? [{
|
|
106
|
+
label: t.isStarred ? e(n, "files.contextMenu.removeStar", "Remove star") : e(n, "files.contextMenu.addToStarred", "Add to starred"),
|
|
107
|
+
icon: /* @__PURE__ */ p(d, { className: "size-4" }),
|
|
108
|
+
onClick: t.onStar
|
|
109
|
+
}] : [],
|
|
110
|
+
...t.onMove ? [{
|
|
111
|
+
label: e(n, "files.contextMenu.moveTo", "Move to"),
|
|
112
|
+
icon: /* @__PURE__ */ p(s, { className: "size-4" }),
|
|
113
|
+
onClick: t.onMove
|
|
114
|
+
}] : [],
|
|
115
|
+
...t.onInfo ? [{
|
|
116
|
+
label: e(n, "files.contextMenu.folderInfo", "Folder information"),
|
|
117
|
+
icon: /* @__PURE__ */ p(c, { className: "size-4" }),
|
|
118
|
+
onClick: t.onInfo
|
|
119
|
+
}] : [],
|
|
120
|
+
...t.onRestore ? [{
|
|
121
|
+
label: e(n, "files.contextMenu.restore", "Restore"),
|
|
122
|
+
icon: /* @__PURE__ */ p(l, { className: "size-4" }),
|
|
123
|
+
onClick: t.onRestore
|
|
124
|
+
}] : [],
|
|
125
|
+
...t.onDelete ? [{
|
|
126
|
+
label: e(n, "files.contextMenu.delete", "Delete"),
|
|
127
|
+
icon: /* @__PURE__ */ p(f, { className: "size-4" }),
|
|
128
|
+
onClick: t.onDelete,
|
|
129
|
+
variant: "danger"
|
|
130
|
+
}] : []
|
|
131
|
+
];
|
|
132
|
+
}
|
|
133
|
+
//#endregion
|
|
134
|
+
export { h as ContextMenu, g as createFileMenuItems, _ as createFolderMenuItems };
|
|
135
|
+
|
|
136
|
+
//# sourceMappingURL=ContextMenu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContextMenu.js","names":[],"sources":["../../../src/files/components/ContextMenu.tsx"],"sourcesContent":["import { useEffect, useRef } from \"react\";\nimport {\n Share2,\n Download,\n Copy,\n Trash2,\n Edit3,\n Star,\n FolderInput,\n Info,\n Clock,\n RotateCcw,\n} from \"lucide-react\";\nimport type { I18nContextValue } from \"@burdenoff/fe-libs/shared/providers/shell/I18nProvider\";\nimport { tWithFallback } from \"../utils/i18n\";\n\ninterface ContextMenuProps {\n x: number;\n y: number;\n onClose: () => void;\n items: {\n label: string;\n icon: React.ReactNode;\n onClick: () => void;\n variant?: \"default\" | \"danger\";\n disabled?: boolean;\n }[];\n}\n\nexport function ContextMenu({ x, y, onClose, items }: ContextMenuProps) {\n const menuRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (menuRef.current && !menuRef.current.contains(event.target as Node)) {\n onClose();\n }\n };\n\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n onClose();\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n document.addEventListener(\"keydown\", handleEscape);\n\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n document.removeEventListener(\"keydown\", handleEscape);\n };\n }, [onClose]);\n\n return (\n <div\n ref={menuRef}\n className=\"fixed bg-bg-elevated rounded-lg shadow-xl border border-border-default py-1 min-w-48 z-50 animate-in fade-in-0 zoom-in-95 duration-150\"\n style={{\n left: `${x}px`,\n top: `${y}px`,\n }}\n >\n {items.map((item, index) => (\n <button\n key={index}\n onClick={() => {\n item.onClick();\n onClose();\n }}\n disabled={item.disabled}\n className={`\n w-full flex items-center gap-3 px-4 py-2 text-sm transition-all duration-150 text-left\n ${\n item.variant === \"danger\"\n ? \"text-status-error-text hover:bg-status-error-bg-subtle\"\n : \"text-text-primary hover:bg-action-ghost-bg-hover\"\n }\n ${item.disabled ? \"opacity-50 cursor-not-allowed\" : \"cursor-pointer\"}\n `}\n >\n {item.icon}\n {item.label}\n </button>\n ))}\n </div>\n );\n}\n\n// Helper to create menu items\nexport function createFileMenuItems(\n options: {\n onShare?: () => void;\n onDownload?: () => void;\n onCopy?: () => void;\n onRename?: () => void;\n onStar?: () => void;\n onMove?: () => void;\n onInfo?: () => void;\n onActivity?: () => void;\n onRestore?: () => void;\n onDelete?: () => void;\n isStarred?: boolean;\n },\n t: I18nContextValue[\"t\"],\n) {\n return [\n ...(options.onShare\n ? [\n {\n label: tWithFallback(t, \"files.contextMenu.share\", \"Share\"),\n icon: <Share2 className=\"size-4\" />,\n onClick: options.onShare,\n },\n ]\n : []),\n ...(options.onDownload\n ? [\n {\n label: tWithFallback(t, \"files.contextMenu.download\", \"Download\"),\n icon: <Download className=\"size-4\" />,\n onClick: options.onDownload,\n },\n ]\n : []),\n ...(options.onCopy\n ? [\n {\n label: tWithFallback(\n t,\n \"files.contextMenu.makeCopy\",\n \"Make a copy\",\n ),\n icon: <Copy className=\"size-4\" />,\n onClick: options.onCopy,\n },\n ]\n : []),\n ...(options.onRename\n ? [\n {\n label: tWithFallback(t, \"files.contextMenu.rename\", \"Rename\"),\n icon: <Edit3 className=\"size-4\" />,\n onClick: options.onRename,\n },\n ]\n : []),\n ...(options.onStar\n ? [\n {\n label: options.isStarred\n ? tWithFallback(t, \"files.contextMenu.removeStar\", \"Remove star\")\n : tWithFallback(\n t,\n \"files.contextMenu.addToStarred\",\n \"Add to starred\",\n ),\n icon: <Star className=\"size-4\" />,\n onClick: options.onStar,\n },\n ]\n : []),\n ...(options.onMove\n ? [\n {\n label: tWithFallback(t, \"files.contextMenu.moveTo\", \"Move to\"),\n icon: <FolderInput className=\"size-4\" />,\n onClick: options.onMove,\n },\n ]\n : []),\n ...(options.onInfo\n ? [\n {\n label: tWithFallback(\n t,\n \"files.contextMenu.fileInfo\",\n \"File information\",\n ),\n icon: <Info className=\"size-4\" />,\n onClick: options.onInfo,\n },\n ]\n : []),\n ...(options.onActivity\n ? [\n {\n label: tWithFallback(t, \"files.contextMenu.activity\", \"Activity\"),\n icon: <Clock className=\"size-4\" />,\n onClick: options.onActivity,\n },\n ]\n : []),\n ...(options.onRestore\n ? [\n {\n label: tWithFallback(t, \"files.contextMenu.restore\", \"Restore\"),\n icon: <RotateCcw className=\"size-4\" />,\n onClick: options.onRestore,\n },\n ]\n : []),\n ...(options.onDelete\n ? [\n {\n label: tWithFallback(t, \"files.contextMenu.delete\", \"Delete\"),\n icon: <Trash2 className=\"size-4\" />,\n onClick: options.onDelete,\n variant: \"danger\" as const,\n },\n ]\n : []),\n ];\n}\n\nexport function createFolderMenuItems(\n options: {\n onShare?: () => void;\n onRename?: () => void;\n onStar?: () => void;\n onMove?: () => void;\n onInfo?: () => void;\n onRestore?: () => void;\n onDelete?: () => void;\n isStarred?: boolean;\n },\n t: I18nContextValue[\"t\"],\n) {\n return [\n ...(options.onShare\n ? [\n {\n label: tWithFallback(t, \"files.contextMenu.share\", \"Share\"),\n icon: <Share2 className=\"size-4\" />,\n onClick: options.onShare,\n },\n ]\n : []),\n ...(options.onRename\n ? [\n {\n label: tWithFallback(t, \"files.contextMenu.rename\", \"Rename\"),\n icon: <Edit3 className=\"size-4\" />,\n onClick: options.onRename,\n },\n ]\n : []),\n ...(options.onStar\n ? [\n {\n label: options.isStarred\n ? tWithFallback(t, \"files.contextMenu.removeStar\", \"Remove star\")\n : tWithFallback(\n t,\n \"files.contextMenu.addToStarred\",\n \"Add to starred\",\n ),\n icon: <Star className=\"size-4\" />,\n onClick: options.onStar,\n },\n ]\n : []),\n ...(options.onMove\n ? [\n {\n label: tWithFallback(t, \"files.contextMenu.moveTo\", \"Move to\"),\n icon: <FolderInput className=\"size-4\" />,\n onClick: options.onMove,\n },\n ]\n : []),\n ...(options.onInfo\n ? [\n {\n label: tWithFallback(\n t,\n \"files.contextMenu.folderInfo\",\n \"Folder information\",\n ),\n icon: <Info className=\"size-4\" />,\n onClick: options.onInfo,\n },\n ]\n : []),\n ...(options.onRestore\n ? [\n {\n label: tWithFallback(t, \"files.contextMenu.restore\", \"Restore\"),\n icon: <RotateCcw className=\"size-4\" />,\n onClick: options.onRestore,\n },\n ]\n : []),\n ...(options.onDelete\n ? [\n {\n label: tWithFallback(t, \"files.contextMenu.delete\", \"Delete\"),\n icon: <Trash2 className=\"size-4\" />,\n onClick: options.onDelete,\n variant: \"danger\" as const,\n },\n ]\n : []),\n ];\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
import { FileItem, FolderItem } from '../types';
|
|
3
|
+
interface CopyDialogProps {
|
|
4
|
+
item: FileItem | FolderItem;
|
|
5
|
+
type: "file" | "folder";
|
|
6
|
+
onClose: () => void;
|
|
7
|
+
onCopy: (destinationFolderId: string | null, newName?: string) => Promise<void>;
|
|
8
|
+
isLoading?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export declare const CopyDialog: FC<CopyDialogProps>;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=CopyDialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CopyDialog.d.ts","sourceRoot":"","sources":["../../../src/files/components/CopyDialog.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAY,MAAM,OAAO,CAAC;AAG1C,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAIrD,UAAU,eAAe;IACvB,IAAI,EAAE,QAAQ,GAAG,UAAU,CAAC;IAC5B,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC;IACxB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,EAAE,CACN,mBAAmB,EAAE,MAAM,GAAG,IAAI,EAClC,OAAO,CAAC,EAAE,MAAM,KACb,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,eAAO,MAAM,UAAU,EAAE,EAAE,CAAC,eAAe,CA4N1C,CAAC"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { tWithFallback as e } from "../utils/i18n.js";
|
|
2
|
+
import { useFoldersQuery as t } from "../hooks/useFoldersQuery.js";
|
|
3
|
+
import { useState as n } from "react";
|
|
4
|
+
import { ChevronRight as r, Folder as i, Home as a, Loader2 as o, X as s } from "lucide-react";
|
|
5
|
+
import { jsx as c, jsxs as l } from "react/jsx-runtime";
|
|
6
|
+
import { useI18n as u } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
7
|
+
//#region src/files/components/CopyDialog.tsx
|
|
8
|
+
var d = ({ item: d, type: f, onClose: p, onCopy: m, isLoading: h = !1 }) => {
|
|
9
|
+
let { t: g } = u(), [_, v] = n(null), [y, b] = n([]), [x, S] = n(null), [C, w] = n(`${e(g, "files.copyDialog.copyOf", "Copy of")} ${d.name}`), { data: T, loading: E } = t(_ || void 0), D = T?.getFolders?.folders || [], O = (e) => {
|
|
10
|
+
v(e.id), b([...y, {
|
|
11
|
+
id: e.id,
|
|
12
|
+
name: e.name
|
|
13
|
+
}]);
|
|
14
|
+
}, k = (e) => {
|
|
15
|
+
if (e === -1) v(null), b([]);
|
|
16
|
+
else {
|
|
17
|
+
let t = y[e];
|
|
18
|
+
v(t.id), b(y.slice(0, e + 1));
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
return /* @__PURE__ */ c("div", {
|
|
22
|
+
className: "fixed inset-0 backdrop-blur-sm flex items-center justify-center z-[100] animate-in fade-in duration-200",
|
|
23
|
+
role: "dialog",
|
|
24
|
+
"aria-modal": "true",
|
|
25
|
+
"aria-label": e(g, "files.copyDialog.title", "Copy"),
|
|
26
|
+
children: /* @__PURE__ */ l("div", {
|
|
27
|
+
className: "bg-bg-surface rounded-lg shadow-xl w-full max-w-md mx-4 max-h-[80vh] flex flex-col animate-in zoom-in-95 duration-200",
|
|
28
|
+
children: [
|
|
29
|
+
/* @__PURE__ */ l("div", {
|
|
30
|
+
className: "flex items-center justify-between px-6 py-4 border-b border-border-default",
|
|
31
|
+
children: [/* @__PURE__ */ l("h2", {
|
|
32
|
+
className: "text-lg font-semibold text-text-primary",
|
|
33
|
+
children: [
|
|
34
|
+
e(g, "files.copyDialog.makeCopyOf", "Make a copy of"),
|
|
35
|
+
" ",
|
|
36
|
+
"\"",
|
|
37
|
+
d.name,
|
|
38
|
+
"\""
|
|
39
|
+
]
|
|
40
|
+
}), /* @__PURE__ */ c("button", {
|
|
41
|
+
onClick: p,
|
|
42
|
+
className: "p-1 text-text-tertiary hover:text-text-secondary hover:bg-action-ghost-bg-hover rounded transition-colors duration-200",
|
|
43
|
+
"aria-label": e(g, "files.copyDialog.close", "Close copy dialog"),
|
|
44
|
+
children: /* @__PURE__ */ c(s, { className: "size-5" })
|
|
45
|
+
})]
|
|
46
|
+
}),
|
|
47
|
+
/* @__PURE__ */ l("div", {
|
|
48
|
+
className: "px-6 py-4 border-b border-border-default",
|
|
49
|
+
children: [/* @__PURE__ */ c("label", {
|
|
50
|
+
className: "block text-sm font-medium text-text-primary mb-2",
|
|
51
|
+
children: e(g, "files.copyDialog.name", "Name")
|
|
52
|
+
}), /* @__PURE__ */ c("input", {
|
|
53
|
+
type: "text",
|
|
54
|
+
value: C,
|
|
55
|
+
onChange: (e) => w(e.target.value),
|
|
56
|
+
className: "w-full px-3 py-2 border border-border-default rounded-lg focus:outline-none focus:ring-2 focus:ring-action-primary-border text-sm transition-colors duration-200",
|
|
57
|
+
placeholder: e(g, "files.copyDialog.enterName", "Enter name for the copy")
|
|
58
|
+
})]
|
|
59
|
+
}),
|
|
60
|
+
/* @__PURE__ */ c("div", {
|
|
61
|
+
className: "px-6 py-3 border-b border-border-default bg-bg-muted",
|
|
62
|
+
children: /* @__PURE__ */ l("div", {
|
|
63
|
+
className: "flex items-center gap-2 text-sm overflow-x-auto",
|
|
64
|
+
children: [/* @__PURE__ */ l("button", {
|
|
65
|
+
onClick: () => k(-1),
|
|
66
|
+
className: "flex items-center gap-1.5 text-text-primary hover:bg-action-ghost-bg-hover px-2 py-1 rounded transition-colors duration-200 whitespace-nowrap",
|
|
67
|
+
children: [/* @__PURE__ */ c(a, { className: "size-4" }), /* @__PURE__ */ c("span", { children: e(g, "files.copyDialog.myDrive", "My Drive") })]
|
|
68
|
+
}), y.map((e, t) => /* @__PURE__ */ l("div", {
|
|
69
|
+
className: "flex items-center gap-2 whitespace-nowrap",
|
|
70
|
+
children: [/* @__PURE__ */ c(r, { className: "size-4 text-text-tertiary" }), /* @__PURE__ */ c("button", {
|
|
71
|
+
onClick: () => k(t),
|
|
72
|
+
className: `hover:bg-action-ghost-bg-hover px-2 py-1 rounded transition-colors duration-200 ${t === y.length - 1 ? "text-text-primary font-medium" : "text-text-secondary"}`,
|
|
73
|
+
children: e.name
|
|
74
|
+
})]
|
|
75
|
+
}, e.id))]
|
|
76
|
+
})
|
|
77
|
+
}),
|
|
78
|
+
/* @__PURE__ */ c("div", {
|
|
79
|
+
className: "flex-1 overflow-y-auto px-6 py-4",
|
|
80
|
+
children: E ? /* @__PURE__ */ c("div", {
|
|
81
|
+
className: "flex items-center justify-center py-8",
|
|
82
|
+
children: /* @__PURE__ */ c(o, { className: "size-6 text-text-tertiary animate-spin" })
|
|
83
|
+
}) : D.length === 0 ? /* @__PURE__ */ l("div", {
|
|
84
|
+
className: "text-center py-8",
|
|
85
|
+
children: [/* @__PURE__ */ c(i, { className: "size-12 text-text-tertiary mx-auto mb-3" }), /* @__PURE__ */ c("p", {
|
|
86
|
+
className: "text-sm text-text-secondary",
|
|
87
|
+
children: e(g, "files.copyDialog.noFolders", "No folders here")
|
|
88
|
+
})]
|
|
89
|
+
}) : /* @__PURE__ */ l("div", {
|
|
90
|
+
className: "space-y-1",
|
|
91
|
+
children: [/* @__PURE__ */ l("button", {
|
|
92
|
+
onClick: () => S(_),
|
|
93
|
+
className: `w-full flex items-center gap-3 px-3 py-2.5 rounded-lg text-left transition-all duration-200 ${x === _ ? "bg-bg-accent border-2 border-action-primary-border" : "hover:bg-action-ghost-bg-hover border-2 border-transparent"}`,
|
|
94
|
+
children: [/* @__PURE__ */ c(i, { className: "size-5 text-text-link" }), /* @__PURE__ */ c("span", {
|
|
95
|
+
className: "font-medium text-text-primary",
|
|
96
|
+
children: e(g, "files.copyDialog.copyHere", "Copy here")
|
|
97
|
+
})]
|
|
98
|
+
}), D.map((t) => /* @__PURE__ */ l("div", {
|
|
99
|
+
className: `flex items-center justify-between gap-3 px-3 py-2.5 rounded-lg transition-all duration-200 ${x === t.id ? "bg-bg-accent border-2 border-action-primary-border" : "hover:bg-action-ghost-bg-hover border-2 border-transparent"}`,
|
|
100
|
+
children: [/* @__PURE__ */ l("button", {
|
|
101
|
+
onClick: () => S(t.id),
|
|
102
|
+
className: "flex items-center gap-3 flex-1 min-w-0",
|
|
103
|
+
children: [/* @__PURE__ */ c(i, { className: "size-5 text-text-link flex-shrink-0" }), /* @__PURE__ */ c("span", {
|
|
104
|
+
className: "font-medium text-text-primary truncate",
|
|
105
|
+
children: t.name
|
|
106
|
+
})]
|
|
107
|
+
}), /* @__PURE__ */ c("button", {
|
|
108
|
+
onClick: () => O(t),
|
|
109
|
+
className: "p-1.5 text-text-tertiary hover:text-text-secondary hover:bg-action-ghost-bg-hover rounded transition-colors duration-200 flex-shrink-0",
|
|
110
|
+
title: e(g, "files.copyDialog.openFolder", "Open folder"),
|
|
111
|
+
"aria-label": `Open ${t.name}`,
|
|
112
|
+
children: /* @__PURE__ */ c(r, { className: "size-4" })
|
|
113
|
+
})]
|
|
114
|
+
}, t.id))]
|
|
115
|
+
})
|
|
116
|
+
}),
|
|
117
|
+
/* @__PURE__ */ l("div", {
|
|
118
|
+
className: "flex items-center justify-end gap-2 px-6 py-4 border-t border-border-default",
|
|
119
|
+
children: [/* @__PURE__ */ c("button", {
|
|
120
|
+
onClick: p,
|
|
121
|
+
className: "px-4 py-2 text-sm font-medium text-text-primary hover:bg-action-ghost-bg-hover rounded-lg transition-colors duration-200",
|
|
122
|
+
children: e(g, "files.common.actions.cancel", "Cancel")
|
|
123
|
+
}), /* @__PURE__ */ l("button", {
|
|
124
|
+
onClick: async () => {
|
|
125
|
+
await m(x, C.trim() || void 0), p();
|
|
126
|
+
},
|
|
127
|
+
disabled: h || x === void 0 || !C.trim(),
|
|
128
|
+
className: "px-4 py-2 text-sm font-medium text-text-inverse bg-action-primary-bg rounded-lg hover:bg-action-primary-bg-hover disabled:bg-bg-muted disabled:text-text-tertiary disabled:cursor-not-allowed transition-colors duration-200 flex items-center gap-2",
|
|
129
|
+
children: [h && /* @__PURE__ */ c(o, { className: "size-4 animate-spin" }), h ? e(g, "files.copyDialog.copying", "Copying...") : e(g, "files.copyDialog.copy", "Copy")]
|
|
130
|
+
})]
|
|
131
|
+
})
|
|
132
|
+
]
|
|
133
|
+
})
|
|
134
|
+
});
|
|
135
|
+
};
|
|
136
|
+
//#endregion
|
|
137
|
+
export { d as CopyDialog };
|
|
138
|
+
|
|
139
|
+
//# sourceMappingURL=CopyDialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CopyDialog.js","names":[],"sources":["../../../src/files/components/CopyDialog.tsx"],"sourcesContent":["import { type FC, useState } from \"react\";\nimport { Folder, Home, ChevronRight, Loader2, X } from \"lucide-react\";\nimport { useI18n } from \"@burdenoff/fe-libs/shared/providers/shell/I18nProvider\";\nimport type { FileItem, FolderItem } from \"../types\";\nimport { useFoldersQuery } from \"../hooks/useFoldersQuery\";\nimport { tWithFallback } from \"../utils/i18n\";\n\ninterface CopyDialogProps {\n item: FileItem | FolderItem;\n type: \"file\" | \"folder\";\n onClose: () => void;\n onCopy: (\n destinationFolderId: string | null,\n newName?: string,\n ) => Promise<void>;\n isLoading?: boolean;\n}\n\nexport const CopyDialog: FC<CopyDialogProps> = ({\n item,\n type,\n onClose,\n onCopy,\n isLoading = false,\n}) => {\n const { t } = useI18n();\n const [currentFolderId, setCurrentFolderId] = useState<string | null>(null);\n const [breadcrumbs, setBreadcrumbs] = useState<\n Array<{ id: string; name: string }>\n >([]);\n const [selectedDestination, setSelectedDestination] = useState<string | null>(\n null,\n );\n const [newName, setNewName] = useState(\n `${tWithFallback(t, \"files.copyDialog.copyOf\", \"Copy of\")} ${item.name}`,\n );\n\n // Fetch folders in current location\n const { data, loading: loadingFolders } = useFoldersQuery(\n currentFolderId || undefined,\n );\n const folders = (data?.getFolders?.folders || []) as FolderItem[];\n\n const handleFolderClick = (folder: FolderItem) => {\n setCurrentFolderId(folder.id);\n setBreadcrumbs([...breadcrumbs, { id: folder.id, name: folder.name }]);\n };\n\n const handleBreadcrumbClick = (index: number) => {\n if (index === -1) {\n // Go to root\n setCurrentFolderId(null);\n setBreadcrumbs([]);\n } else {\n const crumb = breadcrumbs[index];\n setCurrentFolderId(crumb.id);\n setBreadcrumbs(breadcrumbs.slice(0, index + 1));\n }\n };\n\n const handleCopy = async () => {\n await onCopy(selectedDestination, newName.trim() || undefined);\n onClose();\n };\n\n return (\n <div\n className=\"fixed inset-0 backdrop-blur-sm flex items-center justify-center z-[100] animate-in fade-in duration-200\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={tWithFallback(t, \"files.copyDialog.title\", \"Copy\")}\n >\n <div className=\"bg-bg-surface rounded-lg shadow-xl w-full max-w-md mx-4 max-h-[80vh] flex flex-col animate-in zoom-in-95 duration-200\">\n {/* Header */}\n <div className=\"flex items-center justify-between px-6 py-4 border-b border-border-default\">\n <h2 className=\"text-lg font-semibold text-text-primary\">\n {tWithFallback(t, \"files.copyDialog.makeCopyOf\", \"Make a copy of\")}{\" \"}\n \"{item.name}\"\n </h2>\n <button\n onClick={onClose}\n className=\"p-1 text-text-tertiary hover:text-text-secondary hover:bg-action-ghost-bg-hover rounded transition-colors duration-200\"\n aria-label={tWithFallback(\n t,\n \"files.copyDialog.close\",\n \"Close copy dialog\",\n )}\n >\n <X className=\"size-5\" />\n </button>\n </div>\n\n {/* Name input */}\n <div className=\"px-6 py-4 border-b border-border-default\">\n <label className=\"block text-sm font-medium text-text-primary mb-2\">\n {tWithFallback(t, \"files.copyDialog.name\", \"Name\")}\n </label>\n <input\n type=\"text\"\n value={newName}\n onChange={(e) => setNewName(e.target.value)}\n className=\"w-full px-3 py-2 border border-border-default rounded-lg focus:outline-none focus:ring-2 focus:ring-action-primary-border text-sm transition-colors duration-200\"\n placeholder={tWithFallback(\n t,\n \"files.copyDialog.enterName\",\n \"Enter name for the copy\",\n )}\n />\n </div>\n\n {/* Breadcrumb navigation */}\n <div className=\"px-6 py-3 border-b border-border-default bg-bg-muted\">\n <div className=\"flex items-center gap-2 text-sm overflow-x-auto\">\n <button\n onClick={() => handleBreadcrumbClick(-1)}\n className=\"flex items-center gap-1.5 text-text-primary hover:bg-action-ghost-bg-hover px-2 py-1 rounded transition-colors duration-200 whitespace-nowrap\"\n >\n <Home className=\"size-4\" />\n <span>\n {tWithFallback(t, \"files.copyDialog.myDrive\", \"My Drive\")}\n </span>\n </button>\n {breadcrumbs.map((crumb, index) => (\n <div\n key={crumb.id}\n className=\"flex items-center gap-2 whitespace-nowrap\"\n >\n <ChevronRight className=\"size-4 text-text-tertiary\" />\n <button\n onClick={() => handleBreadcrumbClick(index)}\n className={`hover:bg-action-ghost-bg-hover px-2 py-1 rounded transition-colors duration-200 ${\n index === breadcrumbs.length - 1\n ? \"text-text-primary font-medium\"\n : \"text-text-secondary\"\n }`}\n >\n {crumb.name}\n </button>\n </div>\n ))}\n </div>\n </div>\n\n {/* Folder list */}\n <div className=\"flex-1 overflow-y-auto px-6 py-4\">\n {loadingFolders ? (\n <div className=\"flex items-center justify-center py-8\">\n <Loader2 className=\"size-6 text-text-tertiary animate-spin\" />\n </div>\n ) : folders.length === 0 ? (\n <div className=\"text-center py-8\">\n <Folder className=\"size-12 text-text-tertiary mx-auto mb-3\" />\n <p className=\"text-sm text-text-secondary\">\n {tWithFallback(\n t,\n \"files.copyDialog.noFolders\",\n \"No folders here\",\n )}\n </p>\n </div>\n ) : (\n <div className=\"space-y-1\">\n {/* Option to copy to current folder */}\n <button\n onClick={() => setSelectedDestination(currentFolderId)}\n className={`w-full flex items-center gap-3 px-3 py-2.5 rounded-lg text-left transition-all duration-200 ${\n selectedDestination === currentFolderId\n ? \"bg-bg-accent border-2 border-action-primary-border\"\n : \"hover:bg-action-ghost-bg-hover border-2 border-transparent\"\n }`}\n >\n <Folder className=\"size-5 text-text-link\" />\n <span className=\"font-medium text-text-primary\">\n {tWithFallback(t, \"files.copyDialog.copyHere\", \"Copy here\")}\n </span>\n </button>\n\n {/* List of subfolders */}\n {folders.map((folder) => (\n <div\n key={folder.id}\n className={`flex items-center justify-between gap-3 px-3 py-2.5 rounded-lg transition-all duration-200 ${\n selectedDestination === folder.id\n ? \"bg-bg-accent border-2 border-action-primary-border\"\n : \"hover:bg-action-ghost-bg-hover border-2 border-transparent\"\n }`}\n >\n <button\n onClick={() => setSelectedDestination(folder.id)}\n className=\"flex items-center gap-3 flex-1 min-w-0\"\n >\n <Folder className=\"size-5 text-text-link flex-shrink-0\" />\n <span className=\"font-medium text-text-primary truncate\">\n {folder.name}\n </span>\n </button>\n <button\n onClick={() => handleFolderClick(folder)}\n className=\"p-1.5 text-text-tertiary hover:text-text-secondary hover:bg-action-ghost-bg-hover rounded transition-colors duration-200 flex-shrink-0\"\n title={tWithFallback(\n t,\n \"files.copyDialog.openFolder\",\n \"Open folder\",\n )}\n aria-label={`Open ${folder.name}`}\n >\n <ChevronRight className=\"size-4\" />\n </button>\n </div>\n ))}\n </div>\n )}\n </div>\n\n {/* Footer */}\n <div className=\"flex items-center justify-end gap-2 px-6 py-4 border-t border-border-default\">\n <button\n onClick={onClose}\n className=\"px-4 py-2 text-sm font-medium text-text-primary hover:bg-action-ghost-bg-hover rounded-lg transition-colors duration-200\"\n >\n {tWithFallback(t, \"files.common.actions.cancel\", \"Cancel\")}\n </button>\n <button\n onClick={handleCopy}\n disabled={\n isLoading || selectedDestination === undefined || !newName.trim()\n }\n className=\"px-4 py-2 text-sm font-medium text-text-inverse bg-action-primary-bg rounded-lg hover:bg-action-primary-bg-hover disabled:bg-bg-muted disabled:text-text-tertiary disabled:cursor-not-allowed transition-colors duration-200 flex items-center gap-2\"\n >\n {isLoading && <Loader2 className=\"size-4 animate-spin\" />}\n {isLoading\n ? tWithFallback(t, \"files.copyDialog.copying\", \"Copying...\")\n : tWithFallback(t, \"files.copyDialog.copy\", \"Copy\")}\n </button>\n </div>\n </div>\n </div>\n );\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
interface EmptyStateProps {
|
|
2
|
+
type: "all" | "recent" | "starred" | "bin";
|
|
3
|
+
onUpload?: () => void;
|
|
4
|
+
onNewFolder?: () => void;
|
|
5
|
+
}
|
|
6
|
+
export declare function EmptyState({ type, onUpload, onNewFolder }: EmptyStateProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=EmptyState.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmptyState.d.ts","sourceRoot":"","sources":["../../../src/files/components/EmptyState.tsx"],"names":[],"mappings":"AAIA,UAAU,eAAe;IACvB,IAAI,EAAE,KAAK,GAAG,QAAQ,GAAG,SAAS,GAAG,KAAK,CAAC;IAC3C,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;CAC1B;AAED,wBAAgB,UAAU,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,eAAe,2CAqF1E"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { tWithFallback as e } from "../utils/i18n.js";
|
|
2
|
+
import { Clock as t, FolderOpen as n, Star as r, Trash2 as i } from "lucide-react";
|
|
3
|
+
import { jsx as a, jsxs as o } from "react/jsx-runtime";
|
|
4
|
+
import { useI18n as s } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
5
|
+
//#region src/files/components/EmptyState.tsx
|
|
6
|
+
function c({ type: c, onUpload: l, onNewFolder: u }) {
|
|
7
|
+
let { t: d } = s(), f = {
|
|
8
|
+
all: {
|
|
9
|
+
icon: /* @__PURE__ */ a(n, { className: "size-16 text-text-tertiary" }),
|
|
10
|
+
title: e(d, "files.empty.all.title", "No files or folders yet"),
|
|
11
|
+
description: e(d, "files.empty.all.description", "Upload files or create folders to get started"),
|
|
12
|
+
showActions: !0
|
|
13
|
+
},
|
|
14
|
+
recent: {
|
|
15
|
+
icon: /* @__PURE__ */ a(t, { className: "size-16 text-text-tertiary" }),
|
|
16
|
+
title: e(d, "files.empty.recent.title", "No recent files"),
|
|
17
|
+
description: e(d, "files.empty.recent.description", "Files you recently opened will appear here"),
|
|
18
|
+
showActions: !1
|
|
19
|
+
},
|
|
20
|
+
starred: {
|
|
21
|
+
icon: /* @__PURE__ */ a(r, { className: "size-16 text-text-tertiary" }),
|
|
22
|
+
title: e(d, "files.empty.starred.title", "No starred items"),
|
|
23
|
+
description: e(d, "files.empty.starred.description", "Star files and folders to find them easily"),
|
|
24
|
+
showActions: !1
|
|
25
|
+
},
|
|
26
|
+
bin: {
|
|
27
|
+
icon: /* @__PURE__ */ a(i, { className: "size-16 text-text-tertiary" }),
|
|
28
|
+
title: e(d, "files.empty.bin.title", "Bin is empty"),
|
|
29
|
+
description: e(d, "files.empty.bin.description", "Deleted files and folders will appear here"),
|
|
30
|
+
showActions: !1
|
|
31
|
+
}
|
|
32
|
+
}[c];
|
|
33
|
+
return /* @__PURE__ */ o("div", {
|
|
34
|
+
className: "flex flex-col items-center justify-center py-20 px-4 animate-in fade-in duration-500",
|
|
35
|
+
children: [
|
|
36
|
+
/* @__PURE__ */ a("div", {
|
|
37
|
+
className: "mb-4 animate-in zoom-in duration-300 delay-100",
|
|
38
|
+
children: f.icon
|
|
39
|
+
}),
|
|
40
|
+
/* @__PURE__ */ a("h3", {
|
|
41
|
+
className: "text-lg font-semibold text-text-primary mb-2",
|
|
42
|
+
children: f.title
|
|
43
|
+
}),
|
|
44
|
+
/* @__PURE__ */ a("p", {
|
|
45
|
+
className: "text-sm text-text-secondary mb-6 text-center max-w-md",
|
|
46
|
+
children: f.description
|
|
47
|
+
}),
|
|
48
|
+
f.showActions && /* @__PURE__ */ o("div", {
|
|
49
|
+
className: "flex gap-3 animate-in fade-in slide-in-from-bottom-2 duration-300 delay-200",
|
|
50
|
+
children: [u && /* @__PURE__ */ a("button", {
|
|
51
|
+
onClick: u,
|
|
52
|
+
className: "px-4 py-2 text-sm font-medium text-text-primary bg-bg-surface border border-border-default rounded-lg hover:bg-action-ghost-bg-hover transition-all duration-200",
|
|
53
|
+
children: e(d, "files.empty.newFolder", "New Folder")
|
|
54
|
+
}), l && /* @__PURE__ */ a("button", {
|
|
55
|
+
onClick: l,
|
|
56
|
+
className: "px-4 py-2 text-sm font-medium text-action-primary-text bg-action-primary-bg rounded-lg hover:bg-action-primary-bg-hover transition-all duration-200",
|
|
57
|
+
children: e(d, "files.empty.uploadFiles", "Upload Files")
|
|
58
|
+
})]
|
|
59
|
+
})
|
|
60
|
+
]
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
//#endregion
|
|
64
|
+
export { c as EmptyState };
|
|
65
|
+
|
|
66
|
+
//# sourceMappingURL=EmptyState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmptyState.js","names":[],"sources":["../../../src/files/components/EmptyState.tsx"],"sourcesContent":["import { FolderOpen, Star, Trash2, Clock } from \"lucide-react\";\nimport { useI18n } from \"@burdenoff/fe-libs/shared/providers/shell/I18nProvider\";\nimport { tWithFallback } from \"../utils/i18n\";\n\ninterface EmptyStateProps {\n type: \"all\" | \"recent\" | \"starred\" | \"bin\";\n onUpload?: () => void;\n onNewFolder?: () => void;\n}\n\nexport function EmptyState({ type, onUpload, onNewFolder }: EmptyStateProps) {\n const { t } = useI18n();\n const configs = {\n all: {\n icon: <FolderOpen className=\"size-16 text-text-tertiary\" />,\n title: tWithFallback(\n t,\n \"files.empty.all.title\",\n \"No files or folders yet\",\n ),\n description: tWithFallback(\n t,\n \"files.empty.all.description\",\n \"Upload files or create folders to get started\",\n ),\n showActions: true,\n },\n recent: {\n icon: <Clock className=\"size-16 text-text-tertiary\" />,\n title: tWithFallback(t, \"files.empty.recent.title\", \"No recent files\"),\n description: tWithFallback(\n t,\n \"files.empty.recent.description\",\n \"Files you recently opened will appear here\",\n ),\n showActions: false,\n },\n starred: {\n icon: <Star className=\"size-16 text-text-tertiary\" />,\n title: tWithFallback(t, \"files.empty.starred.title\", \"No starred items\"),\n description: tWithFallback(\n t,\n \"files.empty.starred.description\",\n \"Star files and folders to find them easily\",\n ),\n showActions: false,\n },\n bin: {\n icon: <Trash2 className=\"size-16 text-text-tertiary\" />,\n title: tWithFallback(t, \"files.empty.bin.title\", \"Bin is empty\"),\n description: tWithFallback(\n t,\n \"files.empty.bin.description\",\n \"Deleted files and folders will appear here\",\n ),\n showActions: false,\n },\n };\n\n const config = configs[type];\n\n return (\n <div className=\"flex flex-col items-center justify-center py-20 px-4 animate-in fade-in duration-500\">\n <div className=\"mb-4 animate-in zoom-in duration-300 delay-100\">\n {config.icon}\n </div>\n <h3 className=\"text-lg font-semibold text-text-primary mb-2\">\n {config.title}\n </h3>\n <p className=\"text-sm text-text-secondary mb-6 text-center max-w-md\">\n {config.description}\n </p>\n\n {config.showActions && (\n <div className=\"flex gap-3 animate-in fade-in slide-in-from-bottom-2 duration-300 delay-200\">\n {onNewFolder && (\n <button\n onClick={onNewFolder}\n className=\"px-4 py-2 text-sm font-medium text-text-primary bg-bg-surface border border-border-default rounded-lg hover:bg-action-ghost-bg-hover transition-all duration-200\"\n >\n {tWithFallback(t, \"files.empty.newFolder\", \"New Folder\")}\n </button>\n )}\n {onUpload && (\n <button\n onClick={onUpload}\n className=\"px-4 py-2 text-sm font-medium text-action-primary-text bg-action-primary-bg rounded-lg hover:bg-action-primary-bg-hover transition-all duration-200\"\n >\n {tWithFallback(t, \"files.empty.uploadFiles\", \"Upload Files\")}\n </button>\n )}\n </div>\n )}\n </div>\n );\n}\n"],"mappings":";;;;;AAUA,SAAgB,EAAW,EAAE,SAAM,aAAU,kBAAgC;CAC3E,IAAM,EAAE,SAAM,GAAS,EAgDjB,IA/CU;EACd,KAAK;GACH,MAAM,kBAAC,GAAD,EAAY,WAAU,8BAA+B,CAAA;GAC3D,OAAO,EACL,GACA,yBACA,0BACD;GACD,aAAa,EACX,GACA,+BACA,gDACD;GACD,aAAa;GACd;EACD,QAAQ;GACN,MAAM,kBAAC,GAAD,EAAO,WAAU,8BAA+B,CAAA;GACtD,OAAO,EAAc,GAAG,4BAA4B,kBAAkB;GACtE,aAAa,EACX,GACA,kCACA,6CACD;GACD,aAAa;GACd;EACD,SAAS;GACP,MAAM,kBAAC,GAAD,EAAM,WAAU,8BAA+B,CAAA;GACrD,OAAO,EAAc,GAAG,6BAA6B,mBAAmB;GACxE,aAAa,EACX,GACA,mCACA,6CACD;GACD,aAAa;GACd;EACD,KAAK;GACH,MAAM,kBAAC,GAAD,EAAQ,WAAU,8BAA+B,CAAA;GACvD,OAAO,EAAc,GAAG,yBAAyB,eAAe;GAChE,aAAa,EACX,GACA,+BACA,6CACD;GACD,aAAa;GACd;EACF,CAEsB;AAEvB,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,OAAD;IAAK,WAAU;cACZ,EAAO;IACJ,CAAA;GACN,kBAAC,MAAD;IAAI,WAAU;cACX,EAAO;IACL,CAAA;GACL,kBAAC,KAAD;IAAG,WAAU;cACV,EAAO;IACN,CAAA;GAEH,EAAO,eACN,kBAAC,OAAD;IAAK,WAAU;cAAf,CACG,KACC,kBAAC,UAAD;KACE,SAAS;KACT,WAAU;eAET,EAAc,GAAG,yBAAyB,aAAa;KACjD,CAAA,EAEV,KACC,kBAAC,UAAD;KACE,SAAS;KACT,WAAU;eAET,EAAc,GAAG,2BAA2B,eAAe;KACrD,CAAA,CAEP;;GAEJ"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
import { FileItem, FolderItem } from '../types';
|
|
3
|
+
interface FileBrowserProps {
|
|
4
|
+
files: FileItem[];
|
|
5
|
+
folders: FolderItem[];
|
|
6
|
+
loading?: boolean;
|
|
7
|
+
error?: Error | null;
|
|
8
|
+
preserveSortOrder?: boolean;
|
|
9
|
+
onFilePreview?: (file: FileItem) => void;
|
|
10
|
+
onFileShare?: (file: FileItem) => void;
|
|
11
|
+
onFileDelete?: (file: FileItem) => void;
|
|
12
|
+
onFileRestore?: (file: FileItem) => void;
|
|
13
|
+
onFileFavorite?: (file: FileItem) => void;
|
|
14
|
+
onFileRename?: (file: FileItem) => void;
|
|
15
|
+
onFileDownload?: (file: FileItem) => void;
|
|
16
|
+
onFileCopy?: (file: FileItem) => void;
|
|
17
|
+
onFileMove?: (file: FileItem) => void;
|
|
18
|
+
onFileInfo?: (file: FileItem) => void;
|
|
19
|
+
onFileActivity?: (file: FileItem) => void;
|
|
20
|
+
onFolderOpen?: (folder: FolderItem) => void;
|
|
21
|
+
onFolderShare?: (folder: FolderItem) => void;
|
|
22
|
+
onFolderDelete?: (folder: FolderItem) => void;
|
|
23
|
+
onFolderRestore?: (folder: FolderItem) => void;
|
|
24
|
+
onFolderRename?: (folder: FolderItem) => void;
|
|
25
|
+
onFolderFavorite?: (folder: FolderItem) => void;
|
|
26
|
+
onFolderCopy?: (folder: FolderItem) => void;
|
|
27
|
+
onFolderMove?: (folder: FolderItem) => void;
|
|
28
|
+
onFolderInfo?: (folder: FolderItem) => void;
|
|
29
|
+
onFolderActivity?: (folder: FolderItem) => void;
|
|
30
|
+
onMoveFile?: (fileId: string, targetFolderId: string) => Promise<void>;
|
|
31
|
+
onCopyFile?: (fileId: string, targetFolderId: string) => Promise<void>;
|
|
32
|
+
onMoveFolder?: (folderId: string, targetFolderId: string) => Promise<void>;
|
|
33
|
+
onCopyFolder?: (folderId: string, targetFolderId: string) => Promise<void>;
|
|
34
|
+
}
|
|
35
|
+
export declare const FileBrowser: FC<FileBrowserProps>;
|
|
36
|
+
export {};
|
|
37
|
+
//# sourceMappingURL=FileBrowser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileBrowser.d.ts","sourceRoot":"","sources":["../../../src/files/components/FileBrowser.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAY,MAAM,OAAO,CAAC;AAG1C,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAmBrD,UAAU,gBAAgB;IACxB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IACrB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IACzC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IACvC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IACxC,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IACzC,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IAC1C,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IACxC,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IAC1C,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IACtC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IACtC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IACtC,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IAC1C,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;IAC5C,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;IAC7C,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;IAC9C,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;IAC/C,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;IAC9C,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;IAChD,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;IAC5C,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;IAC5C,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;IAC5C,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;IAChD,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvE,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvE,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3E,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5E;AAED,eAAO,MAAM,WAAW,EAAE,EAAE,CAAC,gBAAgB,CA0nB5C,CAAC"}
|