@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.
Files changed (289) hide show
  1. package/README.md +12 -0
  2. package/dist/config/index.d.ts +33 -0
  3. package/dist/config/index.d.ts.map +1 -0
  4. package/dist/config/index.js +28 -0
  5. package/dist/config/index.js.map +1 -0
  6. package/dist/dev/main.d.ts +1 -0
  7. package/dist/dev/main.d.ts.map +1 -0
  8. package/dist/files/FilesRoot.d.ts +31 -0
  9. package/dist/files/FilesRoot.d.ts.map +1 -0
  10. package/dist/files/FilesRoot.js +63 -0
  11. package/dist/files/FilesRoot.js.map +1 -0
  12. package/dist/files/FilesRoutes.d.ts +12 -0
  13. package/dist/files/FilesRoutes.d.ts.map +1 -0
  14. package/dist/files/FilesRoutes.js +45 -0
  15. package/dist/files/FilesRoutes.js.map +1 -0
  16. package/dist/files/components/ActionMenu.d.ts +19 -0
  17. package/dist/files/components/ActionMenu.d.ts.map +1 -0
  18. package/dist/files/components/ActionMenu.js +73 -0
  19. package/dist/files/components/ActionMenu.js.map +1 -0
  20. package/dist/files/components/ConfirmDialog.d.ts +14 -0
  21. package/dist/files/components/ConfirmDialog.d.ts.map +1 -0
  22. package/dist/files/components/ConfirmDialog.js +85 -0
  23. package/dist/files/components/ConfirmDialog.js.map +1 -0
  24. package/dist/files/components/ContextMenu.d.ts +59 -0
  25. package/dist/files/components/ContextMenu.d.ts.map +1 -0
  26. package/dist/files/components/ContextMenu.js +136 -0
  27. package/dist/files/components/ContextMenu.js.map +1 -0
  28. package/dist/files/components/CopyDialog.d.ts +12 -0
  29. package/dist/files/components/CopyDialog.d.ts.map +1 -0
  30. package/dist/files/components/CopyDialog.js +139 -0
  31. package/dist/files/components/CopyDialog.js.map +1 -0
  32. package/dist/files/components/EmptyState.d.ts +8 -0
  33. package/dist/files/components/EmptyState.d.ts.map +1 -0
  34. package/dist/files/components/EmptyState.js +66 -0
  35. package/dist/files/components/EmptyState.js.map +1 -0
  36. package/dist/files/components/FileBrowser.d.ts +37 -0
  37. package/dist/files/components/FileBrowser.d.ts.map +1 -0
  38. package/dist/files/components/FileBrowser.js +421 -0
  39. package/dist/files/components/FileBrowser.js.map +1 -0
  40. package/dist/files/components/FileCard.d.ts +30 -0
  41. package/dist/files/components/FileCard.d.ts.map +1 -0
  42. package/dist/files/components/FileCard.js +233 -0
  43. package/dist/files/components/FileCard.js.map +1 -0
  44. package/dist/files/components/FileInfoPanel.d.ts +9 -0
  45. package/dist/files/components/FileInfoPanel.d.ts.map +1 -0
  46. package/dist/files/components/FileInfoPanel.js +224 -0
  47. package/dist/files/components/FileInfoPanel.js.map +1 -0
  48. package/dist/files/components/FileListItem.d.ts +46 -0
  49. package/dist/files/components/FileListItem.d.ts.map +1 -0
  50. package/dist/files/components/FileListItem.js +235 -0
  51. package/dist/files/components/FileListItem.js.map +1 -0
  52. package/dist/files/components/FilePreviewModal.d.ts +17 -0
  53. package/dist/files/components/FilePreviewModal.d.ts.map +1 -0
  54. package/dist/files/components/FilePreviewModal.js +175 -0
  55. package/dist/files/components/FilePreviewModal.js.map +1 -0
  56. package/dist/files/components/FileVersionPanel.d.ts +9 -0
  57. package/dist/files/components/FileVersionPanel.d.ts.map +1 -0
  58. package/dist/files/components/FileVersionPanel.js +227 -0
  59. package/dist/files/components/FileVersionPanel.js.map +1 -0
  60. package/dist/files/components/FolderCard.d.ts +34 -0
  61. package/dist/files/components/FolderCard.d.ts.map +1 -0
  62. package/dist/files/components/FolderCard.js +225 -0
  63. package/dist/files/components/FolderCard.js.map +1 -0
  64. package/dist/files/components/MoveDialog.d.ts +12 -0
  65. package/dist/files/components/MoveDialog.d.ts.map +1 -0
  66. package/dist/files/components/MoveDialog.js +123 -0
  67. package/dist/files/components/MoveDialog.js.map +1 -0
  68. package/dist/files/components/SearchBar.d.ts +13 -0
  69. package/dist/files/components/SearchBar.d.ts.map +1 -0
  70. package/dist/files/components/SearchBar.js +257 -0
  71. package/dist/files/components/SearchBar.js.map +1 -0
  72. package/dist/files/components/ShareDialog.d.ts +24 -0
  73. package/dist/files/components/ShareDialog.d.ts.map +1 -0
  74. package/dist/files/components/ShareDialog.js +201 -0
  75. package/dist/files/components/ShareDialog.js.map +1 -0
  76. package/dist/files/components/TabBar.d.ts +14 -0
  77. package/dist/files/components/TabBar.d.ts.map +1 -0
  78. package/dist/files/components/TabBar.js +65 -0
  79. package/dist/files/components/TabBar.js.map +1 -0
  80. package/dist/files/components/Toast.d.ts +14 -0
  81. package/dist/files/components/Toast.d.ts.map +1 -0
  82. package/dist/files/components/Toast.js +51 -0
  83. package/dist/files/components/Toast.js.map +1 -0
  84. package/dist/files/components/UploadQueue.d.ts +21 -0
  85. package/dist/files/components/UploadQueue.d.ts.map +1 -0
  86. package/dist/files/components/UploadQueue.js +171 -0
  87. package/dist/files/components/UploadQueue.js.map +1 -0
  88. package/dist/files/components/index.d.ts +43 -0
  89. package/dist/files/components/index.d.ts.map +1 -0
  90. package/dist/files/components/viewers/AudioPlayer.d.ts +8 -0
  91. package/dist/files/components/viewers/AudioPlayer.d.ts.map +1 -0
  92. package/dist/files/components/viewers/AudioPlayer.js +102 -0
  93. package/dist/files/components/viewers/AudioPlayer.js.map +1 -0
  94. package/dist/files/components/viewers/CodeViewer.d.ts +16 -0
  95. package/dist/files/components/viewers/CodeViewer.d.ts.map +1 -0
  96. package/dist/files/components/viewers/CodeViewer.js +113 -0
  97. package/dist/files/components/viewers/CodeViewer.js.map +1 -0
  98. package/dist/files/components/viewers/ImageViewer.d.ts +8 -0
  99. package/dist/files/components/viewers/ImageViewer.d.ts.map +1 -0
  100. package/dist/files/components/viewers/ImageViewer.js +138 -0
  101. package/dist/files/components/viewers/ImageViewer.js.map +1 -0
  102. package/dist/files/components/viewers/PDFViewer.d.ts +15 -0
  103. package/dist/files/components/viewers/PDFViewer.d.ts.map +1 -0
  104. package/dist/files/components/viewers/PDFViewer.js +80 -0
  105. package/dist/files/components/viewers/PDFViewer.js.map +1 -0
  106. package/dist/files/components/viewers/TextViewer.d.ts +8 -0
  107. package/dist/files/components/viewers/TextViewer.d.ts.map +1 -0
  108. package/dist/files/components/viewers/TextViewer.js +121 -0
  109. package/dist/files/components/viewers/TextViewer.js.map +1 -0
  110. package/dist/files/components/viewers/VideoPlayer.d.ts +8 -0
  111. package/dist/files/components/viewers/VideoPlayer.d.ts.map +1 -0
  112. package/dist/files/components/viewers/VideoPlayer.js +138 -0
  113. package/dist/files/components/viewers/VideoPlayer.js.map +1 -0
  114. package/dist/files/components/viewers/index.d.ts +7 -0
  115. package/dist/files/components/viewers/index.d.ts.map +1 -0
  116. package/dist/files/components/viewers/index.js +6 -0
  117. package/dist/files/graphql-types.d.ts +317 -0
  118. package/dist/files/graphql-types.d.ts.map +1 -0
  119. package/dist/files/hooks/useBatchOperations.d.ts +32 -0
  120. package/dist/files/hooks/useBatchOperations.d.ts.map +1 -0
  121. package/dist/files/hooks/useBatchOperations.js +18 -0
  122. package/dist/files/hooks/useBatchOperations.js.map +1 -0
  123. package/dist/files/hooks/useBinItems.d.ts +11 -0
  124. package/dist/files/hooks/useBinItems.d.ts.map +1 -0
  125. package/dist/files/hooks/useBinItems.js +27 -0
  126. package/dist/files/hooks/useBinItems.js.map +1 -0
  127. package/dist/files/hooks/useBrowsePage.d.ts +18 -0
  128. package/dist/files/hooks/useBrowsePage.d.ts.map +1 -0
  129. package/dist/files/hooks/useBrowsePage.js +34 -0
  130. package/dist/files/hooks/useBrowsePage.js.map +1 -0
  131. package/dist/files/hooks/useCopyFile.d.ts +14 -0
  132. package/dist/files/hooks/useCopyFile.d.ts.map +1 -0
  133. package/dist/files/hooks/useCopyFile.js +22 -0
  134. package/dist/files/hooks/useCopyFile.js.map +1 -0
  135. package/dist/files/hooks/useCreateFolder.d.ts +14 -0
  136. package/dist/files/hooks/useCreateFolder.d.ts.map +1 -0
  137. package/dist/files/hooks/useCreateFolder.js +14 -0
  138. package/dist/files/hooks/useCreateFolder.js.map +1 -0
  139. package/dist/files/hooks/useCreateFolderShare.d.ts +16 -0
  140. package/dist/files/hooks/useCreateFolderShare.d.ts.map +1 -0
  141. package/dist/files/hooks/useCreateFolderShare.js +14 -0
  142. package/dist/files/hooks/useCreateFolderShare.js.map +1 -0
  143. package/dist/files/hooks/useCreateShare.d.ts +16 -0
  144. package/dist/files/hooks/useCreateShare.d.ts.map +1 -0
  145. package/dist/files/hooks/useCreateShare.js +14 -0
  146. package/dist/files/hooks/useCreateShare.js.map +1 -0
  147. package/dist/files/hooks/useDeleteFile.d.ts +9 -0
  148. package/dist/files/hooks/useDeleteFile.d.ts.map +1 -0
  149. package/dist/files/hooks/useDeleteFile.js +20 -0
  150. package/dist/files/hooks/useDeleteFile.js.map +1 -0
  151. package/dist/files/hooks/useDeleteFolder.d.ts +10 -0
  152. package/dist/files/hooks/useDeleteFolder.d.ts.map +1 -0
  153. package/dist/files/hooks/useDeleteFolder.js +24 -0
  154. package/dist/files/hooks/useDeleteFolder.js.map +1 -0
  155. package/dist/files/hooks/useDragDrop.d.ts +31 -0
  156. package/dist/files/hooks/useDragDrop.d.ts.map +1 -0
  157. package/dist/files/hooks/useDragDrop.js +45 -0
  158. package/dist/files/hooks/useDragDrop.js.map +1 -0
  159. package/dist/files/hooks/useFileVersions.d.ts +52 -0
  160. package/dist/files/hooks/useFileVersions.d.ts.map +1 -0
  161. package/dist/files/hooks/useFileVersions.js +52 -0
  162. package/dist/files/hooks/useFileVersions.js.map +1 -0
  163. package/dist/files/hooks/useFiles.d.ts +18 -0
  164. package/dist/files/hooks/useFiles.d.ts.map +1 -0
  165. package/dist/files/hooks/useFolder.d.ts +7 -0
  166. package/dist/files/hooks/useFolder.d.ts.map +1 -0
  167. package/dist/files/hooks/useFolderPath.d.ts +2 -0
  168. package/dist/files/hooks/useFolderPath.d.ts.map +1 -0
  169. package/dist/files/hooks/useFoldersQuery.d.ts +7 -0
  170. package/dist/files/hooks/useFoldersQuery.d.ts.map +1 -0
  171. package/dist/files/hooks/useFoldersQuery.js +13 -0
  172. package/dist/files/hooks/useFoldersQuery.js.map +1 -0
  173. package/dist/files/hooks/useKeyboardNavigation.d.ts +17 -0
  174. package/dist/files/hooks/useKeyboardNavigation.d.ts.map +1 -0
  175. package/dist/files/hooks/useKeyboardNavigation.js +105 -0
  176. package/dist/files/hooks/useKeyboardNavigation.js.map +1 -0
  177. package/dist/files/hooks/useMoveFile.d.ts +10 -0
  178. package/dist/files/hooks/useMoveFile.d.ts.map +1 -0
  179. package/dist/files/hooks/useMoveFile.js +21 -0
  180. package/dist/files/hooks/useMoveFile.js.map +1 -0
  181. package/dist/files/hooks/useMoveFolder.d.ts +10 -0
  182. package/dist/files/hooks/useMoveFolder.d.ts.map +1 -0
  183. package/dist/files/hooks/useMoveFolder.js +21 -0
  184. package/dist/files/hooks/useMoveFolder.js.map +1 -0
  185. package/dist/files/hooks/usePermanentlyDeleteFile.d.ts +9 -0
  186. package/dist/files/hooks/usePermanentlyDeleteFile.d.ts.map +1 -0
  187. package/dist/files/hooks/usePermanentlyDeleteFile.js +18 -0
  188. package/dist/files/hooks/usePermanentlyDeleteFile.js.map +1 -0
  189. package/dist/files/hooks/usePermanentlyDeleteFolder.d.ts +9 -0
  190. package/dist/files/hooks/usePermanentlyDeleteFolder.d.ts.map +1 -0
  191. package/dist/files/hooks/usePermanentlyDeleteFolder.js +18 -0
  192. package/dist/files/hooks/usePermanentlyDeleteFolder.js.map +1 -0
  193. package/dist/files/hooks/useRecentFiles.d.ts +10 -0
  194. package/dist/files/hooks/useRecentFiles.d.ts.map +1 -0
  195. package/dist/files/hooks/useRecentFiles.js +24 -0
  196. package/dist/files/hooks/useRecentFiles.js.map +1 -0
  197. package/dist/files/hooks/useRenameFile.d.ts +10 -0
  198. package/dist/files/hooks/useRenameFile.d.ts.map +1 -0
  199. package/dist/files/hooks/useRenameFile.js +21 -0
  200. package/dist/files/hooks/useRenameFile.js.map +1 -0
  201. package/dist/files/hooks/useRenameFolder.d.ts +10 -0
  202. package/dist/files/hooks/useRenameFolder.d.ts.map +1 -0
  203. package/dist/files/hooks/useRenameFolder.js +21 -0
  204. package/dist/files/hooks/useRenameFolder.js.map +1 -0
  205. package/dist/files/hooks/useRestoreFile.d.ts +9 -0
  206. package/dist/files/hooks/useRestoreFile.d.ts.map +1 -0
  207. package/dist/files/hooks/useRestoreFile.js +21 -0
  208. package/dist/files/hooks/useRestoreFile.js.map +1 -0
  209. package/dist/files/hooks/useRestoreFolder.d.ts +9 -0
  210. package/dist/files/hooks/useRestoreFolder.d.ts.map +1 -0
  211. package/dist/files/hooks/useRestoreFolder.js +21 -0
  212. package/dist/files/hooks/useRestoreFolder.js.map +1 -0
  213. package/dist/files/hooks/useSearch.d.ts +15 -0
  214. package/dist/files/hooks/useSearch.d.ts.map +1 -0
  215. package/dist/files/hooks/useSearch.js +27 -0
  216. package/dist/files/hooks/useSearch.js.map +1 -0
  217. package/dist/files/hooks/useStarredItems.d.ts +10 -0
  218. package/dist/files/hooks/useStarredItems.d.ts.map +1 -0
  219. package/dist/files/hooks/useStarredItems.js +18 -0
  220. package/dist/files/hooks/useStarredItems.js.map +1 -0
  221. package/dist/files/hooks/useToast.d.ts +11 -0
  222. package/dist/files/hooks/useToast.d.ts.map +1 -0
  223. package/dist/files/hooks/useToast.js +28 -0
  224. package/dist/files/hooks/useToast.js.map +1 -0
  225. package/dist/files/hooks/useToggleStar.d.ts +10 -0
  226. package/dist/files/hooks/useToggleStar.d.ts.map +1 -0
  227. package/dist/files/hooks/useToggleStar.js +26 -0
  228. package/dist/files/hooks/useToggleStar.js.map +1 -0
  229. package/dist/files/hooks/useUploadFile.d.ts +25 -0
  230. package/dist/files/hooks/useUploadFile.d.ts.map +1 -0
  231. package/dist/files/hooks/useUploadFile.js +74 -0
  232. package/dist/files/hooks/useUploadFile.js.map +1 -0
  233. package/dist/files/index.d.ts +29 -0
  234. package/dist/files/index.d.ts.map +1 -0
  235. package/dist/files/index.js +3 -0
  236. package/dist/files/pages/BrowserPage.d.ts +5 -0
  237. package/dist/files/pages/BrowserPage.d.ts.map +1 -0
  238. package/dist/files/pages/BrowserPage.js +1014 -0
  239. package/dist/files/pages/BrowserPage.js.map +1 -0
  240. package/dist/files/pages/ShareAccessPage.d.ts +2 -0
  241. package/dist/files/pages/ShareAccessPage.d.ts.map +1 -0
  242. package/dist/files/pages/ShareAccessPage.js +162 -0
  243. package/dist/files/pages/ShareAccessPage.js.map +1 -0
  244. package/dist/files/providers/FilesProvider.d.ts +25 -0
  245. package/dist/files/providers/FilesProvider.d.ts.map +1 -0
  246. package/dist/files/providers/FilesProvider.js +18 -0
  247. package/dist/files/providers/FilesProvider.js.map +1 -0
  248. package/dist/files/store/filesStore.d.ts +99 -0
  249. package/dist/files/store/filesStore.d.ts.map +1 -0
  250. package/dist/files/store/filesStore.js +129 -0
  251. package/dist/files/store/filesStore.js.map +1 -0
  252. package/dist/files/types.d.ts +266 -0
  253. package/dist/files/types.d.ts.map +1 -0
  254. package/dist/files/utils/events.d.ts +6 -0
  255. package/dist/files/utils/events.d.ts.map +1 -0
  256. package/dist/files/utils/events.js +16 -0
  257. package/dist/files/utils/events.js.map +1 -0
  258. package/dist/files/utils/i18n.d.ts +5 -0
  259. package/dist/files/utils/i18n.d.ts.map +1 -0
  260. package/dist/files/utils/i18n.js +15 -0
  261. package/dist/files/utils/i18n.js.map +1 -0
  262. package/dist/files/utils/index.d.ts +74 -0
  263. package/dist/files/utils/index.d.ts.map +1 -0
  264. package/dist/files/utils/index.js +50 -0
  265. package/dist/files/utils/index.js.map +1 -0
  266. package/dist/files/utils/thumbnail.d.ts +5 -0
  267. package/dist/files/utils/thumbnail.d.ts.map +1 -0
  268. package/dist/files/utils/thumbnail.js +39 -0
  269. package/dist/files/utils/thumbnail.js.map +1 -0
  270. package/dist/files.d.ts +2 -0
  271. package/dist/files.js +6 -0
  272. package/dist/generated/global-operations.d.ts +2 -0
  273. package/dist/generated/global-operations.d.ts.map +1 -0
  274. package/dist/generated/global-types.d.ts +21253 -0
  275. package/dist/generated/global-types.d.ts.map +1 -0
  276. package/dist/generated/wspace-operations.d.ts +2706 -0
  277. package/dist/generated/wspace-operations.d.ts.map +1 -0
  278. package/dist/generated/wspace-operations.js +1085 -0
  279. package/dist/generated/wspace-operations.js.map +1 -0
  280. package/dist/generated/wspace-types.d.ts +55214 -0
  281. package/dist/generated/wspace-types.d.ts.map +1 -0
  282. package/dist/index.d.ts +30 -0
  283. package/dist/index.d.ts.map +1 -0
  284. package/dist/shared/types/index.d.ts +101 -0
  285. package/dist/shared/types/index.d.ts.map +1 -0
  286. package/dist/utils/nativeBridge.d.ts +3 -0
  287. package/dist/utils/nativeBridge.d.ts.map +1 -0
  288. package/dist/utils/nativeBridge.js +2 -0
  289. package/package.json +126 -0
@@ -0,0 +1,421 @@
1
+ import { useFilesStore as e } from "../store/filesStore.js";
2
+ import { sortFiles as t } from "../utils/index.js";
3
+ import { tWithFallback as n } from "../utils/i18n.js";
4
+ import { ActionMenu as ee } from "./ActionMenu.js";
5
+ import { useDragDrop as te } from "../hooks/useDragDrop.js";
6
+ import { FileCard as ne } from "./FileCard.js";
7
+ import { FileListItem as re } from "./FileListItem.js";
8
+ import { FolderCard as ie } from "./FolderCard.js";
9
+ import { ContextMenu as r, createFileMenuItems as ae, createFolderMenuItems as i } from "./ContextMenu.js";
10
+ import { useState as a } from "react";
11
+ import { Grid3x3 as oe, Loader2 as se, Star as ce } from "lucide-react";
12
+ import { Fragment as le, jsx as o, jsxs as s } from "react/jsx-runtime";
13
+ import { useI18n as ue } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
14
+ //#region src/files/components/FileBrowser.tsx
15
+ var c = ({ files: c, folders: l, loading: de = !1, error: u = null, preserveSortOrder: fe = !1, onFilePreview: d, onFileShare: f, onFileDelete: p, onFileRestore: m, onFileFavorite: h, onFileRename: g, onFileDownload: _, onFileCopy: v, onFileMove: y, onFileInfo: b, onFileActivity: x, onFolderOpen: S, onFolderShare: C, onFolderDelete: w, onFolderRestore: T, onFolderRename: E, onFolderFavorite: D, onFolderCopy: pe, onFolderMove: O, onFolderInfo: k, onFolderActivity: me, onMoveFile: he, onCopyFile: ge, onMoveFolder: _e, onCopyFolder: ve }) => {
16
+ let { t: A } = ue(), { viewMode: j, sortBy: M, sortDirection: ye, selectedFiles: N, selectedFolders: P } = e(), [be, xe] = a(null), [F, I] = a({
17
+ draggedItem: null,
18
+ dropTargetFolderId: null
19
+ }), [L, R] = a(null), { draggedItem: z, startDrag: Se, endDrag: Ce, handleDrop: we } = te({
20
+ onMoveFile: he,
21
+ onCopyFile: ge,
22
+ onMoveFolder: _e,
23
+ onCopyFolder: ve
24
+ }), Te = (e, t) => {
25
+ Se({
26
+ type: "file",
27
+ item: e,
28
+ operation: t
29
+ }), I({
30
+ draggedItem: {
31
+ type: "file",
32
+ item: e,
33
+ operation: t
34
+ },
35
+ dropTargetFolderId: null
36
+ });
37
+ }, Ee = (e, t) => {
38
+ Se({
39
+ type: "folder",
40
+ item: e,
41
+ operation: t
42
+ }), I({
43
+ draggedItem: {
44
+ type: "folder",
45
+ item: e,
46
+ operation: t
47
+ },
48
+ dropTargetFolderId: null
49
+ });
50
+ }, B = () => {
51
+ Ce(), I({
52
+ draggedItem: null,
53
+ dropTargetFolderId: null
54
+ });
55
+ }, V = async (e) => {
56
+ z && (await we(e.id), I({
57
+ draggedItem: null,
58
+ dropTargetFolderId: null
59
+ }));
60
+ }, De = (e) => {
61
+ I((t) => ({
62
+ ...t,
63
+ dropTargetFolderId: e
64
+ }));
65
+ }, Oe = () => {
66
+ I((e) => ({
67
+ ...e,
68
+ dropTargetFolderId: null
69
+ }));
70
+ }, H = (e, t, n) => {
71
+ R({
72
+ item: e,
73
+ type: "file",
74
+ x: t,
75
+ y: n
76
+ });
77
+ }, U = (e, t, n) => {
78
+ R({
79
+ item: e,
80
+ type: "folder",
81
+ x: t,
82
+ y: n
83
+ });
84
+ }, W = () => {
85
+ R(null);
86
+ }, G = (e) => e.canRead === !0, K = (e) => e.canUpdate === !0 || e.canWrite === !0, q = (e) => e.canShare === !0 || K(e), J = (e) => e.canDelete === !0, Y = (e) => e.canRead === !0 || e.permissions?.canRead === !0, X = (e) => e.canUpdate === !0 || e.permissions?.canWrite === !0, Z = (e) => e.permissions?.canShare === !0 || X(e), Q = (e) => e.canDelete === !0 || e.permissions?.canDelete === !0, $ = () => {
87
+ if (!L) return [];
88
+ if (L.type === "file") {
89
+ let e = L.item;
90
+ return ae({
91
+ onShare: f && q(e) ? () => f(e) : void 0,
92
+ onDownload: _ && G(e) ? () => _(e) : void 0,
93
+ onCopy: v && G(e) ? () => v(e) : void 0,
94
+ onRename: g && K(e) ? () => g(e) : void 0,
95
+ onStar: h && K(e) ? () => h(e) : void 0,
96
+ onMove: y && K(e) ? () => y(e) : void 0,
97
+ onInfo: b ? () => b(e) : void 0,
98
+ onActivity: x ? () => x(e) : void 0,
99
+ onDelete: p && J(e) ? () => p(e) : void 0,
100
+ onRestore: m && K(e) ? () => m(e) : void 0,
101
+ isStarred: e.starred
102
+ }, A);
103
+ } else {
104
+ let e = L.item;
105
+ return i({
106
+ onShare: C && Z(e) ? () => C(e) : void 0,
107
+ onRename: E && X(e) ? () => E(e) : void 0,
108
+ onStar: D && X(e) ? () => D(e) : void 0,
109
+ onMove: O && X(e) ? () => O(e) : void 0,
110
+ onInfo: k ? () => k(e) : void 0,
111
+ onDelete: w && Q(e) ? () => w(e) : void 0,
112
+ onRestore: T && X(e) ? () => T(e) : void 0,
113
+ isStarred: e.starred
114
+ }, A);
115
+ }
116
+ }, ke = fe ? c : t(c, M, ye), Ae = fe ? l : t(l, M, ye);
117
+ return de ? /* @__PURE__ */ o("div", {
118
+ className: "flex items-center justify-center min-h-[500px]",
119
+ children: /* @__PURE__ */ s("div", {
120
+ className: "flex flex-col items-center gap-4",
121
+ children: [/* @__PURE__ */ o(se, { className: "size-10 animate-spin text-action-primary-bg" }), /* @__PURE__ */ o("span", {
122
+ className: "text-sm text-text-secondary",
123
+ children: n(A, "files.browser.loading", "Loading files…")
124
+ })]
125
+ })
126
+ }) : u ? /* @__PURE__ */ o("div", {
127
+ className: "flex items-center justify-center min-h-[500px]",
128
+ children: /* @__PURE__ */ s("div", {
129
+ className: "text-center max-w-md",
130
+ children: [
131
+ /* @__PURE__ */ o("div", {
132
+ className: "mb-3 text-xl font-semibold text-status-error-text",
133
+ children: n(A, "files.browser.loadError", "Failed to load files")
134
+ }),
135
+ /* @__PURE__ */ o("p", {
136
+ className: "mb-6 text-sm text-text-secondary",
137
+ children: u.message || n(A, "files.browser.unexpectedError", "An unexpected error occurred")
138
+ }),
139
+ /* @__PURE__ */ o("button", {
140
+ onClick: () => window.location.reload(),
141
+ className: "rounded-lg bg-action-primary-bg px-6 py-2.5 text-sm font-medium text-text-inverse transition-colors hover:bg-action-primary-bg-hover",
142
+ children: n(A, "files.browser.retry", "Retry")
143
+ })
144
+ ]
145
+ })
146
+ }) : c.length === 0 && l.length === 0 ? /* @__PURE__ */ o(le, { children: L && /* @__PURE__ */ o(r, {
147
+ x: L.x,
148
+ y: L.y,
149
+ onClose: W,
150
+ items: $()
151
+ }) }) : j === "list" ? j === "list" ? /* @__PURE__ */ s("div", {
152
+ className: "@container bg-bg-canvas",
153
+ children: [
154
+ /* @__PURE__ */ s("div", {
155
+ className: "hidden @md:flex items-center gap-3 px-3 py-2 bg-bg-surface border-b border-border-subtle text-text-secondary font-text-sm font-weight-medium",
156
+ children: [
157
+ /* @__PURE__ */ o("div", { className: "flex-shrink-0 w-4" }),
158
+ /* @__PURE__ */ o("div", { className: "flex-shrink-0 w-6" }),
159
+ /* @__PURE__ */ o("div", {
160
+ className: "flex-1",
161
+ children: n(A, "files.browser.name", "Name")
162
+ }),
163
+ /* @__PURE__ */ o("div", {
164
+ className: "hidden @lg:block flex-shrink-0 w-40",
165
+ children: n(A, "files.browser.owner", "Owner")
166
+ }),
167
+ /* @__PURE__ */ o("div", {
168
+ className: "flex-shrink-0 w-24 text-right",
169
+ children: n(A, "files.browser.size", "Size")
170
+ }),
171
+ /* @__PURE__ */ o("div", {
172
+ className: "hidden @lg:block flex-shrink-0 w-32 text-right",
173
+ children: n(A, "files.browser.modified", "Modified")
174
+ }),
175
+ /* @__PURE__ */ o("div", { className: "flex-shrink-0 w-32" })
176
+ ]
177
+ }),
178
+ /* @__PURE__ */ s("div", {
179
+ className: "divide-y divide-border-subtle",
180
+ children: [Ae.map((t) => /* @__PURE__ */ s("div", {
181
+ className: `group flex items-center gap-3 border-b border-border-subtle bg-bg-surface p-3 transition-colors hover:bg-bg-sunken focus-within:bg-bg-sunken ${F.dropTargetFolderId === t.id && z?.item.id !== t.id ? "bg-action-primary-bg/10" : ""} ${z?.item.id === t.id ? "opacity-50" : ""}`,
182
+ onClick: () => {
183
+ Y(t) && S?.(t);
184
+ },
185
+ onKeyDown: (e) => {
186
+ (e.key === "Enter" || e.key === " ") && (e.preventDefault(), Y(t) && S?.(t));
187
+ },
188
+ onDragOver: (e) => {
189
+ z && z.item.id !== t.id && X(t) && (e.preventDefault(), De(t.id));
190
+ },
191
+ onDragLeave: Oe,
192
+ onDrop: async (e) => {
193
+ e.preventDefault(), z && z.item.id !== t.id && X(t) && await V(t);
194
+ },
195
+ onContextMenu: (e) => {
196
+ e.preventDefault(), U(t, e.clientX, e.clientY);
197
+ },
198
+ role: "button",
199
+ tabIndex: 0,
200
+ "aria-label": n(A, "files.browser.openFolder", "Open folder"),
201
+ children: [
202
+ /* @__PURE__ */ o("div", {
203
+ className: "flex-shrink-0",
204
+ children: /* @__PURE__ */ o("input", {
205
+ type: "checkbox",
206
+ checked: P.has(t.id),
207
+ onChange: (n) => {
208
+ n.stopPropagation(), e.getState().toggleFolderSelection(t.id);
209
+ },
210
+ 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",
211
+ "aria-label": `Select ${t.name}`
212
+ })
213
+ }),
214
+ /* @__PURE__ */ o(oe, { className: "size-6 text-action-primary-bg flex-shrink-0" }),
215
+ /* @__PURE__ */ o("div", {
216
+ className: "flex-1 min-w-0",
217
+ children: /* @__PURE__ */ s("div", {
218
+ className: "flex items-center gap-2",
219
+ children: [/* @__PURE__ */ o("span", {
220
+ className: "font-text-md font-weight-medium text-text-primary truncate",
221
+ children: t.name
222
+ }), t.starred && /* @__PURE__ */ o(ce, { className: "size-3 flex-shrink-0 fill-status-warning-text text-status-warning-text" })]
223
+ })
224
+ }),
225
+ /* @__PURE__ */ o("div", {
226
+ className: "hidden @lg:block flex-shrink-0 w-40",
227
+ children: t.createdBy && /* @__PURE__ */ s("div", {
228
+ className: "flex items-center gap-2",
229
+ children: [t.createdBy.avatar && /* @__PURE__ */ o("img", {
230
+ src: t.createdBy.avatar,
231
+ alt: t.createdBy.name,
232
+ className: "size-6 rounded-full"
233
+ }), /* @__PURE__ */ o("span", {
234
+ className: "font-text-sm text-text-secondary truncate",
235
+ children: t.createdBy.name
236
+ })]
237
+ })
238
+ }),
239
+ /* @__PURE__ */ o("div", {
240
+ className: "hidden @md:block flex-shrink-0 w-24 text-right",
241
+ children: /* @__PURE__ */ s("span", {
242
+ className: "font-text-sm text-text-secondary",
243
+ children: [
244
+ t.filesCount ?? 0,
245
+ " ",
246
+ n(A, "files.browser.items", "items")
247
+ ]
248
+ })
249
+ }),
250
+ /* @__PURE__ */ o("div", {
251
+ className: "hidden @lg:block flex-shrink-0 w-32 text-right",
252
+ children: /* @__PURE__ */ o("span", {
253
+ className: "font-text-sm text-text-secondary",
254
+ children: new Date(t.updatedAt).toLocaleDateString()
255
+ })
256
+ }),
257
+ /* @__PURE__ */ s("div", {
258
+ className: "flex w-32 flex-shrink-0 items-center gap-1 opacity-0 transition-opacity group-hover:opacity-100 group-focus-within:opacity-100",
259
+ children: [
260
+ Z(t) && C && /* @__PURE__ */ o("button", {
261
+ onClick: (e) => {
262
+ e.stopPropagation(), C(t);
263
+ },
264
+ className: "p-1.5 hover:bg-action-ghost-bg-hover rounded transition-colors",
265
+ "aria-label": n(A, "files.browser.share", "Share"),
266
+ title: n(A, "files.browser.shareFolder", "Share folder"),
267
+ children: /* @__PURE__ */ o("svg", {
268
+ className: "size-4 text-text-primary",
269
+ fill: "none",
270
+ viewBox: "0 0 24 24",
271
+ stroke: "currentColor",
272
+ children: /* @__PURE__ */ o("path", {
273
+ strokeLinecap: "round",
274
+ strokeLinejoin: "round",
275
+ strokeWidth: 2,
276
+ d: "M8.684 13.342C8.886 12.938 9 12.482 9 12c0-.482-.114-.938-.316-1.342m0 2.684a3 3 0 110-2.684m0 2.684l6.632 3.316m-6.632-6l6.632-3.316m0 0a3 3 0 105.367-2.684 3 3 0 00-5.367 2.684zm0 9.316a3 3 0 105.368 2.684 3 3 0 00-5.368-2.684z"
277
+ })
278
+ })
279
+ }),
280
+ X(t) && E && /* @__PURE__ */ o("button", {
281
+ onClick: (e) => {
282
+ e.stopPropagation(), E(t);
283
+ },
284
+ className: "hidden @md:block p-1.5 hover:bg-action-ghost-bg-hover rounded transition-colors",
285
+ "aria-label": n(A, "files.browser.rename", "Rename"),
286
+ title: n(A, "files.browser.rename", "Rename"),
287
+ children: /* @__PURE__ */ o("svg", {
288
+ className: "size-4 text-text-primary",
289
+ fill: "none",
290
+ viewBox: "0 0 24 24",
291
+ stroke: "currentColor",
292
+ children: /* @__PURE__ */ o("path", {
293
+ strokeLinecap: "round",
294
+ strokeLinejoin: "round",
295
+ strokeWidth: 2,
296
+ d: "M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z"
297
+ })
298
+ })
299
+ }),
300
+ Q(t) && w && /* @__PURE__ */ o("button", {
301
+ onClick: (e) => {
302
+ e.stopPropagation(), w(t);
303
+ },
304
+ className: "p-1.5 hover:bg-action-danger-bg-hover rounded transition-colors",
305
+ "aria-label": n(A, "files.browser.delete", "Delete"),
306
+ title: n(A, "files.browser.delete", "Delete"),
307
+ children: /* @__PURE__ */ o("svg", {
308
+ className: "size-4 text-status-error-text",
309
+ fill: "none",
310
+ viewBox: "0 0 24 24",
311
+ stroke: "currentColor",
312
+ children: /* @__PURE__ */ o("path", {
313
+ strokeLinecap: "round",
314
+ strokeLinejoin: "round",
315
+ strokeWidth: 2,
316
+ d: "M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"
317
+ })
318
+ })
319
+ }),
320
+ /* @__PURE__ */ o("div", {
321
+ onClick: (e) => e.stopPropagation(),
322
+ children: /* @__PURE__ */ o(ee, {
323
+ items: i({
324
+ onShare: Z(t) && C ? () => C(t) : void 0,
325
+ onRename: X(t) && E ? () => E(t) : void 0,
326
+ onStar: X(t) && D ? () => D(t) : void 0,
327
+ onMove: X(t) && O ? () => O(t) : void 0,
328
+ onInfo: () => k?.(t),
329
+ onRestore: X(t) && T ? () => T(t) : void 0,
330
+ onDelete: Q(t) && w ? () => w(t) : void 0,
331
+ isStarred: t.starred
332
+ }, A),
333
+ isOpen: be === t.id,
334
+ onToggle: (e) => xe(e ? t.id : null)
335
+ })
336
+ })
337
+ ]
338
+ })
339
+ ]
340
+ }, t.id)), ke.map((e) => /* @__PURE__ */ o(re, {
341
+ file: e,
342
+ isSelected: N.has(e.id),
343
+ isDragging: z?.item.id === e.id,
344
+ onPreview: G(e) ? d : void 0,
345
+ onShare: q(e) ? f : void 0,
346
+ onDelete: J(e) ? p : void 0,
347
+ onRestore: K(e) ? m : void 0,
348
+ onFavorite: K(e) ? h : void 0,
349
+ onRename: K(e) ? g : void 0,
350
+ onDownload: G(e) ? _ : void 0,
351
+ onCopy: G(e) ? v : void 0,
352
+ onMove: K(e) ? y : void 0,
353
+ onInfo: b,
354
+ onActivity: x,
355
+ onDragStart: K(e) ? Te : void 0,
356
+ onDragEnd: B,
357
+ onContextMenu: H
358
+ }, e.id))]
359
+ }),
360
+ L && /* @__PURE__ */ o(r, {
361
+ x: L.x,
362
+ y: L.y,
363
+ onClose: W,
364
+ items: $()
365
+ })
366
+ ]
367
+ }) : null : /* @__PURE__ */ s("div", {
368
+ className: "@container bg-bg-canvas p-page-padding",
369
+ children: [/* @__PURE__ */ s("div", {
370
+ className: "grid grid-cols-2 @md:grid-cols-3 @lg:grid-cols-4 @xl:grid-cols-5 gap-4",
371
+ children: [Ae.map((e) => /* @__PURE__ */ o(ie, {
372
+ folder: e,
373
+ isSelected: P.has(e.id),
374
+ isDragging: z?.item.id === e.id,
375
+ isDropTarget: F.dropTargetFolderId === e.id,
376
+ draggedItem: z,
377
+ onOpen: Y(e) ? S : void 0,
378
+ onShare: Z(e) ? C : void 0,
379
+ onDelete: Q(e) ? w : void 0,
380
+ onRestore: X(e) ? T : void 0,
381
+ onRename: X(e) ? E : void 0,
382
+ onFavorite: X(e) ? D : void 0,
383
+ onCopy: pe,
384
+ onMove: X(e) ? O : void 0,
385
+ onInfo: k,
386
+ onActivity: me,
387
+ onDragStart: X(e) ? Ee : void 0,
388
+ onDragEnd: B,
389
+ onDrop: X(e) ? V : void 0,
390
+ onContextMenu: U
391
+ }, e.id)), ke.map((e) => /* @__PURE__ */ o(ne, {
392
+ file: e,
393
+ isSelected: N.has(e.id),
394
+ isDragging: z?.item.id === e.id,
395
+ onPreview: G(e) ? d : void 0,
396
+ onShare: q(e) ? f : void 0,
397
+ onDelete: J(e) ? p : void 0,
398
+ onRestore: K(e) ? m : void 0,
399
+ onFavorite: K(e) ? h : void 0,
400
+ onRename: K(e) ? g : void 0,
401
+ onDownload: G(e) ? _ : void 0,
402
+ onCopy: G(e) ? v : void 0,
403
+ onMove: K(e) ? y : void 0,
404
+ onInfo: b,
405
+ onActivity: x,
406
+ onDragStart: K(e) ? Te : void 0,
407
+ onDragEnd: B,
408
+ onContextMenu: H
409
+ }, e.id))]
410
+ }), L && /* @__PURE__ */ o(r, {
411
+ x: L.x,
412
+ y: L.y,
413
+ onClose: W,
414
+ items: $()
415
+ })]
416
+ });
417
+ };
418
+ //#endregion
419
+ export { c as FileBrowser };
420
+
421
+ //# sourceMappingURL=FileBrowser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileBrowser.js","names":[],"sources":["../../../src/files/components/FileBrowser.tsx"],"sourcesContent":["import { type FC, useState } from \"react\";\nimport { Grid3x3, Loader2, Star } from \"lucide-react\";\nimport { useI18n } from \"@burdenoff/fe-libs/shared/providers/shell/I18nProvider\";\nimport type { FileItem, FolderItem } from \"../types\";\nimport { useFilesStore } from \"../store/filesStore\";\nimport { FileCard } from \"./FileCard\";\nimport { FileListItem } from \"./FileListItem\";\nimport { FolderCard } from \"./FolderCard\";\nimport { ActionMenu } from \"./ActionMenu\";\nimport {\n ContextMenu,\n createFileMenuItems,\n createFolderMenuItems,\n} from \"./ContextMenu\";\nimport { sortFiles } from \"../utils\";\nimport { tWithFallback } from \"../utils/i18n\";\nimport {\n useDragDrop,\n type DragData,\n type DragOperation,\n} from \"../hooks/useDragDrop\";\n\ninterface FileBrowserProps {\n files: FileItem[];\n folders: FolderItem[];\n loading?: boolean;\n error?: Error | null;\n preserveSortOrder?: boolean;\n onFilePreview?: (file: FileItem) => void;\n onFileShare?: (file: FileItem) => void;\n onFileDelete?: (file: FileItem) => void;\n onFileRestore?: (file: FileItem) => void;\n onFileFavorite?: (file: FileItem) => void;\n onFileRename?: (file: FileItem) => void;\n onFileDownload?: (file: FileItem) => void;\n onFileCopy?: (file: FileItem) => void;\n onFileMove?: (file: FileItem) => void;\n onFileInfo?: (file: FileItem) => void;\n onFileActivity?: (file: FileItem) => void;\n onFolderOpen?: (folder: FolderItem) => void;\n onFolderShare?: (folder: FolderItem) => void;\n onFolderDelete?: (folder: FolderItem) => void;\n onFolderRestore?: (folder: FolderItem) => void;\n onFolderRename?: (folder: FolderItem) => void;\n onFolderFavorite?: (folder: FolderItem) => void;\n onFolderCopy?: (folder: FolderItem) => void;\n onFolderMove?: (folder: FolderItem) => void;\n onFolderInfo?: (folder: FolderItem) => void;\n onFolderActivity?: (folder: FolderItem) => void;\n onMoveFile?: (fileId: string, targetFolderId: string) => Promise<void>;\n onCopyFile?: (fileId: string, targetFolderId: string) => Promise<void>;\n onMoveFolder?: (folderId: string, targetFolderId: string) => Promise<void>;\n onCopyFolder?: (folderId: string, targetFolderId: string) => Promise<void>;\n}\n\nexport const FileBrowser: FC<FileBrowserProps> = ({\n files,\n folders,\n loading = false,\n error = null,\n preserveSortOrder = false,\n onFilePreview,\n onFileShare,\n onFileDelete,\n onFileRestore,\n onFileFavorite,\n onFileRename,\n onFileDownload,\n onFileCopy,\n onFileMove,\n onFileInfo,\n onFileActivity,\n onFolderOpen,\n onFolderShare,\n onFolderDelete,\n onFolderRestore,\n onFolderRename,\n onFolderFavorite,\n onFolderCopy,\n onFolderMove,\n onFolderInfo,\n onFolderActivity,\n onMoveFile,\n onCopyFile,\n onMoveFolder,\n onCopyFolder,\n}) => {\n const { t } = useI18n();\n const { viewMode, sortBy, sortDirection, selectedFiles, selectedFolders } =\n useFilesStore();\n\n const [openMenuId, setOpenMenuId] = useState<string | null>(null);\n const [dragState, setDragState] = useState<{\n draggedItem: DragData | null;\n dropTargetFolderId: string | null;\n }>({ draggedItem: null, dropTargetFolderId: null });\n const [contextMenu, setContextMenu] = useState<{\n item: FileItem | FolderItem;\n type: \"file\" | \"folder\";\n x: number;\n y: number;\n } | null>(null);\n\n const { draggedItem, startDrag, endDrag, handleDrop } = useDragDrop({\n onMoveFile,\n onCopyFile,\n onMoveFolder,\n onCopyFolder,\n });\n\n const handleFileDragStart = (file: FileItem, operation: DragOperation) => {\n startDrag({ type: \"file\", item: file, operation });\n setDragState({\n draggedItem: { type: \"file\", item: file, operation },\n dropTargetFolderId: null,\n });\n };\n\n const handleFolderDragStart = (\n folder: FolderItem,\n operation: DragOperation,\n ) => {\n startDrag({ type: \"folder\", item: folder, operation });\n setDragState({\n draggedItem: { type: \"folder\", item: folder, operation },\n dropTargetFolderId: null,\n });\n };\n\n const handleDragEnd = () => {\n endDrag();\n setDragState({ draggedItem: null, dropTargetFolderId: null });\n };\n\n const handleFolderDrop = async (folder: FolderItem) => {\n if (draggedItem) {\n await handleDrop(folder.id);\n setDragState({ draggedItem: null, dropTargetFolderId: null });\n }\n };\n\n const handleFolderDragOver = (folderId: string) => {\n setDragState((prev) => ({ ...prev, dropTargetFolderId: folderId }));\n };\n\n const handleFolderDragLeave = () => {\n setDragState((prev) => ({ ...prev, dropTargetFolderId: null }));\n };\n\n const handleFileContextMenu = (file: FileItem, x: number, y: number) => {\n setContextMenu({ item: file, type: \"file\", x, y });\n };\n\n const handleFolderContextMenu = (\n folder: FolderItem,\n x: number,\n y: number,\n ) => {\n setContextMenu({ item: folder, type: \"folder\", x, y });\n };\n\n const closeContextMenu = () => {\n setContextMenu(null);\n };\n\n const fileCanRead = (file: FileItem) => file.canRead === true;\n const fileCanUpdate = (file: FileItem) =>\n file.canUpdate === true || file.canWrite === true;\n const fileCanShare = (file: FileItem) =>\n file.canShare === true || fileCanUpdate(file);\n const fileCanDelete = (file: FileItem) => file.canDelete === true;\n\n const folderCanRead = (folder: FolderItem) =>\n folder.canRead === true || folder.permissions?.canRead === true;\n const folderCanUpdate = (folder: FolderItem) =>\n folder.canUpdate === true || folder.permissions?.canWrite === true;\n const folderCanShare = (folder: FolderItem) =>\n folder.permissions?.canShare === true || folderCanUpdate(folder);\n const folderCanDelete = (folder: FolderItem) =>\n folder.canDelete === true || folder.permissions?.canDelete === true;\n\n const getContextMenuItems = () => {\n if (!contextMenu) return [];\n if (contextMenu.type === \"file\") {\n const file = contextMenu.item as FileItem;\n return createFileMenuItems(\n {\n onShare:\n onFileShare && fileCanShare(file)\n ? () => onFileShare(file)\n : undefined,\n onDownload:\n onFileDownload && fileCanRead(file)\n ? () => onFileDownload(file)\n : undefined,\n onCopy:\n onFileCopy && fileCanRead(file)\n ? () => onFileCopy(file)\n : undefined,\n onRename:\n onFileRename && fileCanUpdate(file)\n ? () => onFileRename(file)\n : undefined,\n onStar:\n onFileFavorite && fileCanUpdate(file)\n ? () => onFileFavorite(file)\n : undefined,\n onMove:\n onFileMove && fileCanUpdate(file)\n ? () => onFileMove(file)\n : undefined,\n onInfo: onFileInfo ? () => onFileInfo(file) : undefined,\n onActivity: onFileActivity ? () => onFileActivity(file) : undefined,\n onDelete:\n onFileDelete && fileCanDelete(file)\n ? () => onFileDelete(file)\n : undefined,\n onRestore:\n onFileRestore && fileCanUpdate(file)\n ? () => onFileRestore(file)\n : undefined,\n isStarred: file.starred,\n },\n t,\n );\n } else {\n const folder = contextMenu.item as FolderItem;\n return createFolderMenuItems(\n {\n onShare:\n onFolderShare && folderCanShare(folder)\n ? () => onFolderShare(folder)\n : undefined,\n onRename:\n onFolderRename && folderCanUpdate(folder)\n ? () => onFolderRename(folder)\n : undefined,\n onStar:\n onFolderFavorite && folderCanUpdate(folder)\n ? () => onFolderFavorite(folder)\n : undefined,\n onMove:\n onFolderMove && folderCanUpdate(folder)\n ? () => onFolderMove(folder)\n : undefined,\n onInfo: onFolderInfo ? () => onFolderInfo(folder) : undefined,\n onDelete:\n onFolderDelete && folderCanDelete(folder)\n ? () => onFolderDelete(folder)\n : undefined,\n onRestore:\n onFolderRestore && folderCanUpdate(folder)\n ? () => onFolderRestore(folder)\n : undefined,\n isStarred: folder.starred,\n },\n t,\n );\n }\n };\n\n const sortedFiles = preserveSortOrder\n ? files\n : sortFiles(files, sortBy, sortDirection);\n const sortedFolders = preserveSortOrder\n ? folders\n : sortFiles(folders, sortBy, sortDirection);\n\n if (loading) {\n return (\n <div className=\"flex items-center justify-center min-h-[500px]\">\n <div className=\"flex flex-col items-center gap-4\">\n <Loader2 className=\"size-10 animate-spin text-action-primary-bg\" />\n <span className=\"text-sm text-text-secondary\">\n {tWithFallback(t, \"files.browser.loading\", \"Loading files…\")}\n </span>\n </div>\n </div>\n );\n }\n\n if (error) {\n return (\n <div className=\"flex items-center justify-center min-h-[500px]\">\n <div className=\"text-center max-w-md\">\n <div className=\"mb-3 text-xl font-semibold text-status-error-text\">\n {tWithFallback(\n t,\n \"files.browser.loadError\",\n \"Failed to load files\",\n )}\n </div>\n <p className=\"mb-6 text-sm text-text-secondary\">\n {error.message ||\n tWithFallback(\n t,\n \"files.browser.unexpectedError\",\n \"An unexpected error occurred\",\n )}\n </p>\n <button\n onClick={() => window.location.reload()}\n className=\"rounded-lg bg-action-primary-bg px-6 py-2.5 text-sm font-medium text-text-inverse transition-colors hover:bg-action-primary-bg-hover\"\n >\n {tWithFallback(t, \"files.browser.retry\", \"Retry\")}\n </button>\n </div>\n </div>\n );\n }\n\n if (files.length === 0 && folders.length === 0) {\n return (\n <>\n {contextMenu && (\n <ContextMenu\n x={contextMenu.x}\n y={contextMenu.y}\n onClose={closeContextMenu}\n items={getContextMenuItems()}\n />\n )}\n </>\n );\n }\n\n if (viewMode !== \"list\") {\n return (\n <div className=\"@container bg-bg-canvas p-page-padding\">\n <div className=\"grid grid-cols-2 @md:grid-cols-3 @lg:grid-cols-4 @xl:grid-cols-5 gap-4\">\n {sortedFolders.map((folder) => (\n <FolderCard\n key={folder.id}\n folder={folder}\n isSelected={selectedFolders.has(folder.id)}\n isDragging={draggedItem?.item.id === folder.id}\n isDropTarget={dragState.dropTargetFolderId === folder.id}\n draggedItem={draggedItem}\n onOpen={folderCanRead(folder) ? onFolderOpen : undefined}\n onShare={folderCanShare(folder) ? onFolderShare : undefined}\n onDelete={folderCanDelete(folder) ? onFolderDelete : undefined}\n onRestore={folderCanUpdate(folder) ? onFolderRestore : undefined}\n onRename={folderCanUpdate(folder) ? onFolderRename : undefined}\n onFavorite={\n folderCanUpdate(folder) ? onFolderFavorite : undefined\n }\n onCopy={onFolderCopy}\n onMove={folderCanUpdate(folder) ? onFolderMove : undefined}\n onInfo={onFolderInfo}\n onActivity={onFolderActivity}\n onDragStart={\n folderCanUpdate(folder) ? handleFolderDragStart : undefined\n }\n onDragEnd={handleDragEnd}\n onDrop={folderCanUpdate(folder) ? handleFolderDrop : undefined}\n onContextMenu={handleFolderContextMenu}\n />\n ))}\n\n {sortedFiles.map((file) => (\n <FileCard\n key={file.id}\n file={file}\n isSelected={selectedFiles.has(file.id)}\n isDragging={draggedItem?.item.id === file.id}\n onPreview={fileCanRead(file) ? onFilePreview : undefined}\n onShare={fileCanShare(file) ? onFileShare : undefined}\n onDelete={fileCanDelete(file) ? onFileDelete : undefined}\n onRestore={fileCanUpdate(file) ? onFileRestore : undefined}\n onFavorite={fileCanUpdate(file) ? onFileFavorite : undefined}\n onRename={fileCanUpdate(file) ? onFileRename : undefined}\n onDownload={fileCanRead(file) ? onFileDownload : undefined}\n onCopy={fileCanRead(file) ? onFileCopy : undefined}\n onMove={fileCanUpdate(file) ? onFileMove : undefined}\n onInfo={onFileInfo}\n onActivity={onFileActivity}\n onDragStart={\n fileCanUpdate(file) ? handleFileDragStart : undefined\n }\n onDragEnd={handleDragEnd}\n onContextMenu={handleFileContextMenu}\n />\n ))}\n </div>\n {contextMenu && (\n <ContextMenu\n x={contextMenu.x}\n y={contextMenu.y}\n onClose={closeContextMenu}\n items={getContextMenuItems()}\n />\n )}\n </div>\n );\n }\n\n if (viewMode === \"list\") {\n return (\n <div className=\"@container bg-bg-canvas\">\n <div className=\"hidden @md:flex items-center gap-3 px-3 py-2 bg-bg-surface border-b border-border-subtle text-text-secondary font-text-sm font-weight-medium\">\n <div className=\"flex-shrink-0 w-4\" />\n <div className=\"flex-shrink-0 w-6\" />\n <div className=\"flex-1\">\n {tWithFallback(t, \"files.browser.name\", \"Name\")}\n </div>\n <div className=\"hidden @lg:block flex-shrink-0 w-40\">\n {tWithFallback(t, \"files.browser.owner\", \"Owner\")}\n </div>\n <div className=\"flex-shrink-0 w-24 text-right\">\n {tWithFallback(t, \"files.browser.size\", \"Size\")}\n </div>\n <div className=\"hidden @lg:block flex-shrink-0 w-32 text-right\">\n {tWithFallback(t, \"files.browser.modified\", \"Modified\")}\n </div>\n <div className=\"flex-shrink-0 w-32\" />\n </div>\n\n <div className=\"divide-y divide-border-subtle\">\n {sortedFolders.map((folder) => (\n <div\n key={folder.id}\n className={`group flex items-center gap-3 border-b border-border-subtle bg-bg-surface p-3 transition-colors hover:bg-bg-sunken focus-within:bg-bg-sunken ${dragState.dropTargetFolderId === folder.id && draggedItem?.item.id !== folder.id ? \"bg-action-primary-bg/10\" : \"\"} ${draggedItem?.item.id === folder.id ? \"opacity-50\" : \"\"}`}\n onClick={() => {\n if (folderCanRead(folder)) onFolderOpen?.(folder);\n }}\n onKeyDown={(event) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n if (folderCanRead(folder)) onFolderOpen?.(folder);\n }\n }}\n onDragOver={(e) => {\n if (\n draggedItem &&\n draggedItem.item.id !== folder.id &&\n folderCanUpdate(folder)\n ) {\n e.preventDefault();\n handleFolderDragOver(folder.id);\n }\n }}\n onDragLeave={handleFolderDragLeave}\n onDrop={async (e) => {\n e.preventDefault();\n if (\n draggedItem &&\n draggedItem.item.id !== folder.id &&\n folderCanUpdate(folder)\n ) {\n await handleFolderDrop(folder);\n }\n }}\n onContextMenu={(e) => {\n e.preventDefault();\n handleFolderContextMenu(folder, e.clientX, e.clientY);\n }}\n role=\"button\"\n tabIndex={0}\n aria-label={tWithFallback(\n t,\n \"files.browser.openFolder\",\n \"Open folder\",\n )}\n >\n <div className=\"flex-shrink-0\">\n <input\n type=\"checkbox\"\n checked={selectedFolders.has(folder.id)}\n onChange={(e) => {\n e.stopPropagation();\n useFilesStore.getState().toggleFolderSelection(folder.id);\n }}\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 ${folder.name}`}\n />\n </div>\n <Grid3x3 className=\"size-6 text-action-primary-bg flex-shrink-0\" />\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-2\">\n <span className=\"font-text-md font-weight-medium text-text-primary truncate\">\n {folder.name}\n </span>\n {folder.starred && (\n <Star className=\"size-3 flex-shrink-0 fill-status-warning-text text-status-warning-text\" />\n )}\n </div>\n </div>\n <div className=\"hidden @lg:block flex-shrink-0 w-40\">\n {folder.createdBy && (\n <div className=\"flex items-center gap-2\">\n {folder.createdBy.avatar && (\n <img\n src={folder.createdBy.avatar}\n alt={folder.createdBy.name}\n className=\"size-6 rounded-full\"\n />\n )}\n <span className=\"font-text-sm text-text-secondary truncate\">\n {folder.createdBy.name}\n </span>\n </div>\n )}\n </div>\n <div className=\"hidden @md:block flex-shrink-0 w-24 text-right\">\n <span className=\"font-text-sm text-text-secondary\">\n {folder.filesCount ?? 0}{\" \"}\n {tWithFallback(t, \"files.browser.items\", \"items\")}\n </span>\n </div>\n <div className=\"hidden @lg:block flex-shrink-0 w-32 text-right\">\n <span className=\"font-text-sm text-text-secondary\">\n {new Date(folder.updatedAt).toLocaleDateString()}\n </span>\n </div>\n\n <div className=\"flex w-32 flex-shrink-0 items-center gap-1 opacity-0 transition-opacity group-hover:opacity-100 group-focus-within:opacity-100\">\n {folderCanShare(folder) && onFolderShare && (\n <button\n onClick={(e) => {\n e.stopPropagation();\n onFolderShare(folder);\n }}\n className=\"p-1.5 hover:bg-action-ghost-bg-hover rounded transition-colors\"\n aria-label={tWithFallback(\n t,\n \"files.browser.share\",\n \"Share\",\n )}\n title={tWithFallback(\n t,\n \"files.browser.shareFolder\",\n \"Share folder\",\n )}\n >\n <svg\n className=\"size-4 text-text-primary\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M8.684 13.342C8.886 12.938 9 12.482 9 12c0-.482-.114-.938-.316-1.342m0 2.684a3 3 0 110-2.684m0 2.684l6.632 3.316m-6.632-6l6.632-3.316m0 0a3 3 0 105.367-2.684 3 3 0 00-5.367 2.684zm0 9.316a3 3 0 105.368 2.684 3 3 0 00-5.368-2.684z\"\n />\n </svg>\n </button>\n )}\n\n {folderCanUpdate(folder) && onFolderRename && (\n <button\n onClick={(e) => {\n e.stopPropagation();\n onFolderRename(folder);\n }}\n className=\"hidden @md:block p-1.5 hover:bg-action-ghost-bg-hover rounded transition-colors\"\n aria-label={tWithFallback(\n t,\n \"files.browser.rename\",\n \"Rename\",\n )}\n title={tWithFallback(t, \"files.browser.rename\", \"Rename\")}\n >\n <svg\n className=\"size-4 text-text-primary\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z\"\n />\n </svg>\n </button>\n )}\n\n {folderCanDelete(folder) && onFolderDelete && (\n <button\n onClick={(e) => {\n e.stopPropagation();\n onFolderDelete(folder);\n }}\n className=\"p-1.5 hover:bg-action-danger-bg-hover rounded transition-colors\"\n aria-label={tWithFallback(\n t,\n \"files.browser.delete\",\n \"Delete\",\n )}\n title={tWithFallback(t, \"files.browser.delete\", \"Delete\")}\n >\n <svg\n className=\"size-4 text-status-error-text\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16\"\n />\n </svg>\n </button>\n )}\n\n <div onClick={(e) => e.stopPropagation()}>\n <ActionMenu\n items={createFolderMenuItems(\n {\n onShare:\n folderCanShare(folder) && onFolderShare\n ? () => onFolderShare(folder)\n : undefined,\n onRename:\n folderCanUpdate(folder) && onFolderRename\n ? () => onFolderRename(folder)\n : undefined,\n onStar:\n folderCanUpdate(folder) && onFolderFavorite\n ? () => onFolderFavorite(folder)\n : undefined,\n onMove:\n folderCanUpdate(folder) && onFolderMove\n ? () => onFolderMove(folder)\n : undefined,\n onInfo: () => onFolderInfo?.(folder),\n onRestore:\n folderCanUpdate(folder) && onFolderRestore\n ? () => onFolderRestore(folder)\n : undefined,\n onDelete:\n folderCanDelete(folder) && onFolderDelete\n ? () => onFolderDelete(folder)\n : undefined,\n isStarred: folder.starred,\n },\n t,\n )}\n isOpen={openMenuId === folder.id}\n onToggle={(open) => setOpenMenuId(open ? folder.id : null)}\n />\n </div>\n </div>\n </div>\n ))}\n\n {sortedFiles.map((file) => (\n <FileListItem\n key={file.id}\n file={file}\n isSelected={selectedFiles.has(file.id)}\n isDragging={draggedItem?.item.id === file.id}\n onPreview={fileCanRead(file) ? onFilePreview : undefined}\n onShare={fileCanShare(file) ? onFileShare : undefined}\n onDelete={fileCanDelete(file) ? onFileDelete : undefined}\n onRestore={fileCanUpdate(file) ? onFileRestore : undefined}\n onFavorite={fileCanUpdate(file) ? onFileFavorite : undefined}\n onRename={fileCanUpdate(file) ? onFileRename : undefined}\n onDownload={fileCanRead(file) ? onFileDownload : undefined}\n onCopy={fileCanRead(file) ? onFileCopy : undefined}\n onMove={fileCanUpdate(file) ? onFileMove : undefined}\n onInfo={onFileInfo}\n onActivity={onFileActivity}\n onDragStart={\n fileCanUpdate(file) ? handleFileDragStart : undefined\n }\n onDragEnd={handleDragEnd}\n onContextMenu={handleFileContextMenu}\n />\n ))}\n </div>\n {contextMenu && (\n <ContextMenu\n x={contextMenu.x}\n y={contextMenu.y}\n onClose={closeContextMenu}\n items={getContextMenuItems()}\n />\n )}\n </div>\n );\n }\n\n return null;\n};\n"],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import { FC } from 'react';
2
+ import { FileItem } from '../types';
3
+ interface FileCardProps {
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 DraggableFileCardProps extends Omit<FileCardProps, "onDragStart" | "onDragEnd"> {
24
+ onDragStart?: (file: FileItem, operation: "move" | "copy") => void;
25
+ onDragEnd?: () => void;
26
+ onContextMenu?: (file: FileItem, x: number, y: number) => void;
27
+ }
28
+ export declare const FileCard: FC<DraggableFileCardProps>;
29
+ export {};
30
+ //# sourceMappingURL=FileCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileCard.d.ts","sourceRoot":"","sources":["../../../src/files/components/FileCard.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAqB,MAAM,OAAO,CAAC;AAcnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAOzC,UAAU,aAAa;IACrB,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IACrC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IACnC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IACpC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IACrC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IACtC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IACpC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IACtC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IAClC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IAClC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IAClC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IACtC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,CAAC;IACnE,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CAChE;AAED,UAAU,sBAAuB,SAAQ,IAAI,CAC3C,aAAa,EACb,aAAa,GAAG,WAAW,CAC5B;IACC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,CAAC;IACnE,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CAChE;AAED,eAAO,MAAM,QAAQ,EAAE,EAAE,CAAC,sBAAsB,CA2X/C,CAAC"}