@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,123 @@
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/MoveDialog.tsx
8
+ var d = ({ item: d, type: f, onClose: p, onMove: m, isLoading: h = !1 }) => {
9
+ let { t: g } = u(), [_, v] = n(null), [y, b] = n([]), [x, S] = n(null), { data: C, loading: w } = t(_ || void 0), T = C?.getFolders?.folders || [], E = (e) => {
10
+ v(e.id), b([...y, {
11
+ id: e.id,
12
+ name: e.name
13
+ }]);
14
+ }, D = (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
+ }, O = async () => {
21
+ x !== d.id && (await m(x), p());
22
+ }, k = T.filter((e) => !(f === "folder" && e.id === d.id));
23
+ return /* @__PURE__ */ c("div", {
24
+ className: "fixed inset-0 backdrop-blur-sm flex items-center justify-center z-[100] animate-in fade-in duration-200",
25
+ role: "dialog",
26
+ "aria-modal": "true",
27
+ "aria-label": e(g, "files.moveDialog.ariaLabel", "Move {{type}} {{name}}", {
28
+ type: f,
29
+ name: d.name
30
+ }),
31
+ children: /* @__PURE__ */ l("div", {
32
+ 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",
33
+ children: [
34
+ /* @__PURE__ */ l("div", {
35
+ className: "flex items-center justify-between px-6 py-4 border-b border-border-default",
36
+ children: [/* @__PURE__ */ c("h2", {
37
+ className: "text-lg font-semibold text-text-primary",
38
+ children: e(g, "files.moveDialog.title", "Move \"{{name}}\"", { name: d.name })
39
+ }), /* @__PURE__ */ c("button", {
40
+ onClick: p,
41
+ className: "p-1 text-text-tertiary hover:text-text-secondary hover:bg-action-ghost-bg-hover rounded transition-colors duration-200",
42
+ "aria-label": e(g, "files.moveDialog.actions.close", "Close move dialog"),
43
+ children: /* @__PURE__ */ c(s, { className: "size-5" })
44
+ })]
45
+ }),
46
+ /* @__PURE__ */ c("div", {
47
+ className: "px-6 py-3 border-b border-border-default bg-bg-muted",
48
+ children: /* @__PURE__ */ l("div", {
49
+ className: "flex items-center gap-2 text-sm overflow-x-auto",
50
+ children: [/* @__PURE__ */ l("button", {
51
+ onClick: () => D(-1),
52
+ 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",
53
+ children: [/* @__PURE__ */ c(a, { className: "size-4" }), /* @__PURE__ */ c("span", { children: e(g, "files.browser.rootLabel", "My Drive") })]
54
+ }), y.map((e, t) => /* @__PURE__ */ l("div", {
55
+ className: "flex items-center gap-2 whitespace-nowrap",
56
+ children: [/* @__PURE__ */ c(r, { className: "size-4 text-text-tertiary" }), /* @__PURE__ */ c("button", {
57
+ onClick: () => D(t),
58
+ 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"}`,
59
+ children: e.name
60
+ })]
61
+ }, e.id))]
62
+ })
63
+ }),
64
+ /* @__PURE__ */ c("div", {
65
+ className: "flex-1 overflow-y-auto px-6 py-4",
66
+ children: w ? /* @__PURE__ */ c("div", {
67
+ className: "flex items-center justify-center py-8",
68
+ children: /* @__PURE__ */ c(o, { className: "size-6 text-text-tertiary animate-spin" })
69
+ }) : k.length === 0 ? /* @__PURE__ */ l("div", {
70
+ className: "text-center py-8",
71
+ children: [/* @__PURE__ */ c(i, { className: "size-12 text-text-tertiary mx-auto mb-3" }), /* @__PURE__ */ c("p", {
72
+ className: "text-sm text-text-secondary",
73
+ children: e(g, "files.moveDialog.empty.noFolders", "No folders here")
74
+ })]
75
+ }) : /* @__PURE__ */ l("div", {
76
+ className: "space-y-1",
77
+ children: [/* @__PURE__ */ l("button", {
78
+ onClick: () => S(_),
79
+ 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"}`,
80
+ children: [/* @__PURE__ */ c(i, { className: "size-5 text-text-link" }), /* @__PURE__ */ c("span", {
81
+ className: "font-medium text-text-primary",
82
+ children: e(g, "files.moveDialog.actions.moveHere", "Move here")
83
+ })]
84
+ }), k.map((t) => /* @__PURE__ */ l("div", {
85
+ 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"}`,
86
+ children: [/* @__PURE__ */ l("button", {
87
+ onClick: () => S(t.id),
88
+ className: "flex items-center gap-3 flex-1 min-w-0",
89
+ children: [/* @__PURE__ */ c(i, { className: "size-5 text-text-link flex-shrink-0" }), /* @__PURE__ */ c("span", {
90
+ className: "font-medium text-text-primary truncate",
91
+ children: t.name
92
+ })]
93
+ }), /* @__PURE__ */ c("button", {
94
+ onClick: () => E(t),
95
+ 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",
96
+ title: e(g, "files.moveDialog.actions.openFolder", "Open folder"),
97
+ "aria-label": e(g, "files.moveDialog.actions.openFolderNamed", "Open {{name}}", { name: t.name }),
98
+ children: /* @__PURE__ */ c(r, { className: "size-4" })
99
+ })]
100
+ }, t.id))]
101
+ })
102
+ }),
103
+ /* @__PURE__ */ l("div", {
104
+ className: "flex items-center justify-end gap-2 px-6 py-4 border-t border-border-default",
105
+ children: [/* @__PURE__ */ c("button", {
106
+ onClick: p,
107
+ className: "px-4 py-2 text-sm font-medium text-text-primary hover:bg-action-ghost-bg-hover rounded-lg transition-colors duration-200",
108
+ children: e(g, "files.common.actions.cancel", "Cancel")
109
+ }), /* @__PURE__ */ l("button", {
110
+ onClick: O,
111
+ disabled: h || x === void 0,
112
+ 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",
113
+ children: [h && /* @__PURE__ */ c(o, { className: "size-4 animate-spin" }), h ? e(g, "files.moveDialog.actions.moving", "Moving...") : e(g, "files.common.actions.move", "Move")]
114
+ })]
115
+ })
116
+ ]
117
+ })
118
+ });
119
+ };
120
+ //#endregion
121
+ export { d as MoveDialog };
122
+
123
+ //# sourceMappingURL=MoveDialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MoveDialog.js","names":[],"sources":["../../../src/files/components/MoveDialog.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 MoveDialogProps {\n item: FileItem | FolderItem;\n type: \"file\" | \"folder\";\n onClose: () => void;\n onMove: (destinationFolderId: string | null) => Promise<void>;\n isLoading?: boolean;\n}\n\nexport const MoveDialog: FC<MoveDialogProps> = ({\n item,\n type,\n onClose,\n onMove,\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\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 handleMove = async () => {\n if (selectedDestination === item.id) {\n // Can't move to itself\n return;\n }\n\n await onMove(selectedDestination);\n onClose();\n };\n\n const filteredFolders = folders.filter((folder) => {\n // Don't show the item itself if it's a folder\n if (type === \"folder\" && folder.id === item.id) {\n return false;\n }\n return true;\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(\n t,\n \"files.moveDialog.ariaLabel\",\n \"Move {{type}} {{name}}\",\n { type, name: item.name },\n )}\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.moveDialog.title\", 'Move \"{{name}}\"', {\n name: item.name,\n })}\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.moveDialog.actions.close\",\n \"Close move dialog\",\n )}\n >\n <X className=\"size-5\" />\n </button>\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.browser.rootLabel\", \"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 ) : filteredFolders.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.moveDialog.empty.noFolders\",\n \"No folders here\",\n )}\n </p>\n </div>\n ) : (\n <div className=\"space-y-1\">\n {/* Option to move 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(\n t,\n \"files.moveDialog.actions.moveHere\",\n \"Move here\",\n )}\n </span>\n </button>\n\n {/* List of subfolders */}\n {filteredFolders.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.moveDialog.actions.openFolder\",\n \"Open folder\",\n )}\n aria-label={tWithFallback(\n t,\n \"files.moveDialog.actions.openFolderNamed\",\n \"Open {{name}}\",\n { name: folder.name },\n )}\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={handleMove}\n disabled={isLoading || selectedDestination === undefined}\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.moveDialog.actions.moving\", \"Moving...\")\n : tWithFallback(t, \"files.common.actions.move\", \"Move\")}\n </button>\n </div>\n </div>\n </div>\n );\n};\n"],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { FileFilterInput, FolderFilterInput } from '../graphql-types';
2
+ interface SearchBarProps {
3
+ onSearch: (query: string, filters?: {
4
+ fileFilter?: FileFilterInput;
5
+ folderFilter?: FolderFilterInput;
6
+ }) => void;
7
+ placeholder?: string;
8
+ initialQuery?: string;
9
+ showFilters?: boolean;
10
+ }
11
+ export declare function SearchBar({ onSearch, placeholder, initialQuery, showFilters, }: SearchBarProps): import("react/jsx-runtime").JSX.Element;
12
+ export {};
13
+ //# sourceMappingURL=SearchBar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchBar.d.ts","sourceRoot":"","sources":["../../../src/files/components/SearchBar.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAG3E,UAAU,cAAc;IACtB,QAAQ,EAAE,CACR,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;QACR,UAAU,CAAC,EAAE,eAAe,CAAC;QAC7B,YAAY,CAAC,EAAE,iBAAiB,CAAC;KAClC,KACE,IAAI,CAAC;IACV,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAgCD,wBAAgB,SAAS,CAAC,EACxB,QAAQ,EACR,WAA2C,EAC3C,YAAiB,EACjB,WAAkB,GACnB,EAAE,cAAc,2CA2WhB"}
@@ -0,0 +1,257 @@
1
+ import { tWithFallback as e } from "../utils/i18n.js";
2
+ import { useCallback as t, useEffect as n, useState as r } from "react";
3
+ import { Filter as i, Search as a, X as o } from "lucide-react";
4
+ import { jsx as s, jsxs as c } from "react/jsx-runtime";
5
+ import { useI18n as l } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
6
+ //#region src/files/components/SearchBar.tsx
7
+ var u = {
8
+ image: [
9
+ "image/jpeg",
10
+ "image/png",
11
+ "image/gif",
12
+ "image/webp",
13
+ "image/svg+xml"
14
+ ],
15
+ video: [
16
+ "video/mp4",
17
+ "video/webm",
18
+ "video/quicktime"
19
+ ],
20
+ document: [
21
+ "application/msword",
22
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
23
+ "application/vnd.ms-excel",
24
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
25
+ "application/vnd.ms-powerpoint",
26
+ "application/vnd.openxmlformats-officedocument.presentationml.presentation",
27
+ "text/plain",
28
+ "text/csv",
29
+ "application/json"
30
+ ],
31
+ pdf: ["application/pdf"],
32
+ archive: [
33
+ "application/zip",
34
+ "application/x-tar",
35
+ "application/x-7z-compressed",
36
+ "application/gzip",
37
+ "application/x-rar-compressed"
38
+ ]
39
+ };
40
+ function d({ onSearch: d, placeholder: f = "Search files and folders...", initialQuery: p = "", showFilters: m = !0 }) {
41
+ let { t: h } = l(), [g, _] = r(p), [v, y] = r(!1), [b, x] = r({}), S = b.status, C = b.status, w = b.visibility, T = b.fileType ? u[b.fileType] : void 0;
42
+ n(() => {
43
+ _(p);
44
+ }, [p]), n(() => {
45
+ let e = setTimeout(() => {
46
+ (g.length >= 2 || g.length === 0) && d(g, {
47
+ fileFilter: {
48
+ ...T && { mimeTypes: T },
49
+ ...S && { status: S },
50
+ ...w && { visibility: w },
51
+ ...b.starred !== void 0 && { starred: b.starred }
52
+ },
53
+ folderFilter: {
54
+ ...C && { status: C },
55
+ ...b.starred !== void 0 && { starred: b.starred }
56
+ }
57
+ });
58
+ }, 300);
59
+ return () => clearTimeout(e);
60
+ }, [
61
+ S,
62
+ T,
63
+ w,
64
+ C,
65
+ b,
66
+ d,
67
+ g
68
+ ]);
69
+ let E = t(() => {
70
+ _(""), x({}), d("");
71
+ }, [d]), D = Object.values(b).filter((e) => e !== void 0).length;
72
+ return /* @__PURE__ */ c("div", {
73
+ className: "relative",
74
+ children: [/* @__PURE__ */ c("div", {
75
+ className: "relative flex items-center",
76
+ children: [
77
+ /* @__PURE__ */ s(a, { className: "absolute left-3 size-4 text-text-tertiary" }),
78
+ /* @__PURE__ */ s("label", {
79
+ htmlFor: "files-search-input",
80
+ className: "sr-only",
81
+ children: e(h, "files.search.input.label", "Search files and folders")
82
+ }),
83
+ /* @__PURE__ */ s("input", {
84
+ id: "files-search-input",
85
+ type: "text",
86
+ value: g,
87
+ onChange: (e) => _(e.target.value),
88
+ placeholder: f,
89
+ className: "w-full pl-[3.25rem] pr-20 py-2 border border-border-default rounded-lg focus:outline-none focus:ring-2 focus:ring-action-primary-border focus:border-action-primary-border transition-colors duration-200"
90
+ }),
91
+ /* @__PURE__ */ c("div", {
92
+ className: "absolute right-2 flex items-center gap-1",
93
+ children: [g && /* @__PURE__ */ s("button", {
94
+ onClick: E,
95
+ className: "p-1.5 text-text-tertiary hover:text-text-secondary hover:bg-action-ghost-bg-hover rounded transition-colors duration-200",
96
+ title: e(h, "files.search.actions.clearSearch", "Clear search"),
97
+ "aria-label": e(h, "files.search.actions.clearSearch", "Clear search"),
98
+ children: /* @__PURE__ */ s(o, { className: "size-4" })
99
+ }), m && /* @__PURE__ */ c("button", {
100
+ onClick: () => y(!v),
101
+ "aria-expanded": v,
102
+ "aria-controls": "files-search-filter-panel",
103
+ "aria-label": e(h, "files.search.filters.toggleAria", "Toggle filters"),
104
+ className: `p-1.5 rounded transition-colors duration-200 relative ${v || D > 0 ? "text-text-link bg-bg-accent hover:bg-action-primary-bg/20" : "text-text-tertiary hover:text-text-secondary hover:bg-action-ghost-bg-hover"}`,
105
+ title: e(h, "files.search.filters.title", "Filters"),
106
+ children: [/* @__PURE__ */ s(i, { className: "size-4" }), D > 0 && /* @__PURE__ */ s("span", {
107
+ className: "absolute -top-1 -right-1 size-4 bg-action-primary-bg text-text-inverse text-[10px] font-bold rounded-full flex items-center justify-center",
108
+ children: D
109
+ })]
110
+ })]
111
+ })
112
+ ]
113
+ }), v && /* @__PURE__ */ s("div", {
114
+ id: "files-search-filter-panel",
115
+ className: "absolute top-full left-0 right-0 mt-2 p-4 bg-bg-surface border border-border-default rounded-lg shadow-lg z-10 animate-in fade-in duration-200",
116
+ children: /* @__PURE__ */ c("div", {
117
+ className: "space-y-4",
118
+ children: [
119
+ /* @__PURE__ */ c("div", { children: [/* @__PURE__ */ s("label", {
120
+ className: "block text-sm font-medium text-text-primary mb-1",
121
+ children: e(h, "files.search.filters.fileType.label", "File Type")
122
+ }), /* @__PURE__ */ c("select", {
123
+ value: b.fileType || "",
124
+ onChange: (e) => x({
125
+ ...b,
126
+ fileType: e.target.value || void 0
127
+ }),
128
+ className: "w-full px-3 py-2 border border-border-default rounded-lg focus:outline-none focus:ring-2 focus:ring-action-primary-border transition-colors duration-200",
129
+ children: [
130
+ /* @__PURE__ */ s("option", {
131
+ value: "",
132
+ children: e(h, "files.search.filters.fileType.options.all", "All types")
133
+ }),
134
+ /* @__PURE__ */ s("option", {
135
+ value: "image",
136
+ children: e(h, "files.search.filters.fileType.options.image", "Images")
137
+ }),
138
+ /* @__PURE__ */ s("option", {
139
+ value: "video",
140
+ children: e(h, "files.search.filters.fileType.options.video", "Videos")
141
+ }),
142
+ /* @__PURE__ */ s("option", {
143
+ value: "document",
144
+ children: e(h, "files.search.filters.fileType.options.document", "Documents")
145
+ }),
146
+ /* @__PURE__ */ s("option", {
147
+ value: "pdf",
148
+ children: e(h, "files.search.filters.fileType.options.pdf", "PDFs")
149
+ }),
150
+ /* @__PURE__ */ s("option", {
151
+ value: "archive",
152
+ children: e(h, "files.search.filters.fileType.options.archive", "Archives")
153
+ })
154
+ ]
155
+ })] }),
156
+ /* @__PURE__ */ c("div", { children: [/* @__PURE__ */ s("label", {
157
+ className: "block text-sm font-medium text-text-primary mb-1",
158
+ children: e(h, "files.search.filters.status.label", "Status")
159
+ }), /* @__PURE__ */ c("select", {
160
+ value: b.status || "",
161
+ onChange: (e) => x({
162
+ ...b,
163
+ status: e.target.value || void 0
164
+ }),
165
+ className: "w-full px-3 py-2 border border-border-default rounded-lg focus:outline-none focus:ring-2 focus:ring-action-primary-border transition-colors duration-200",
166
+ children: [
167
+ /* @__PURE__ */ s("option", {
168
+ value: "",
169
+ children: e(h, "files.search.filters.status.options.all", "All statuses")
170
+ }),
171
+ /* @__PURE__ */ s("option", {
172
+ value: "ACTIVE",
173
+ children: e(h, "files.search.filters.status.options.active", "Active")
174
+ }),
175
+ /* @__PURE__ */ s("option", {
176
+ value: "ARCHIVED",
177
+ children: e(h, "files.search.filters.status.options.archived", "Archived")
178
+ }),
179
+ /* @__PURE__ */ s("option", {
180
+ value: "DELETED",
181
+ children: e(h, "files.search.filters.status.options.deleted", "Deleted")
182
+ })
183
+ ]
184
+ })] }),
185
+ /* @__PURE__ */ c("div", { children: [/* @__PURE__ */ s("label", {
186
+ className: "block text-sm font-medium text-text-primary mb-1",
187
+ children: e(h, "files.search.filters.visibility.label", "Visibility")
188
+ }), /* @__PURE__ */ c("select", {
189
+ value: b.visibility || "",
190
+ onChange: (e) => x({
191
+ ...b,
192
+ visibility: e.target.value || void 0
193
+ }),
194
+ className: "w-full px-3 py-2 border border-border-default rounded-lg focus:outline-none focus:ring-2 focus:ring-action-primary-border transition-colors duration-200",
195
+ children: [
196
+ /* @__PURE__ */ s("option", {
197
+ value: "",
198
+ children: e(h, "files.search.filters.visibility.options.all", "All visibility")
199
+ }),
200
+ /* @__PURE__ */ s("option", {
201
+ value: "PRIVATE",
202
+ children: e(h, "files.search.filters.visibility.options.private", "Private")
203
+ }),
204
+ /* @__PURE__ */ s("option", {
205
+ value: "TEAM",
206
+ children: e(h, "files.search.filters.visibility.options.team", "Team")
207
+ }),
208
+ /* @__PURE__ */ s("option", {
209
+ value: "WORKSPACE",
210
+ children: e(h, "files.search.filters.visibility.options.workspace", "Workspace")
211
+ }),
212
+ /* @__PURE__ */ s("option", {
213
+ value: "PUBLIC",
214
+ children: e(h, "files.search.filters.visibility.options.public", "Public")
215
+ })
216
+ ]
217
+ })] }),
218
+ /* @__PURE__ */ c("div", {
219
+ className: "flex items-center",
220
+ children: [/* @__PURE__ */ s("input", {
221
+ type: "checkbox",
222
+ id: "starred-filter",
223
+ checked: b.starred || !1,
224
+ onChange: (e) => x({
225
+ ...b,
226
+ starred: e.target.checked || void 0
227
+ }),
228
+ className: "size-4 text-action-primary-bg border-border-default rounded focus:ring-action-primary-border transition-colors duration-200"
229
+ }), /* @__PURE__ */ s("label", {
230
+ htmlFor: "starred-filter",
231
+ className: "ml-2 text-sm text-text-primary",
232
+ children: e(h, "files.search.filters.starredOnly", "Starred only")
233
+ })]
234
+ }),
235
+ /* @__PURE__ */ c("div", {
236
+ className: "flex justify-end gap-2 pt-2 border-t border-border-default",
237
+ children: [/* @__PURE__ */ s("button", {
238
+ onClick: () => {
239
+ x({}), y(!1);
240
+ },
241
+ className: "px-3 py-1.5 text-sm text-text-primary hover:bg-action-ghost-bg-hover rounded transition-colors duration-200",
242
+ children: e(h, "files.search.filters.actions.clear", "Clear filters")
243
+ }), /* @__PURE__ */ s("button", {
244
+ onClick: () => y(!1),
245
+ className: "px-3 py-1.5 text-sm bg-action-primary-bg text-text-inverse rounded hover:bg-action-primary-bg-hover transition-colors duration-200",
246
+ children: e(h, "files.search.filters.actions.apply", "Apply")
247
+ })]
248
+ })
249
+ ]
250
+ })
251
+ })]
252
+ });
253
+ }
254
+ //#endregion
255
+ export { d as SearchBar };
256
+
257
+ //# sourceMappingURL=SearchBar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchBar.js","names":[],"sources":["../../../src/files/components/SearchBar.tsx"],"sourcesContent":["import { useState, useEffect, useCallback } from \"react\";\nimport { Search, X, Filter } from \"lucide-react\";\nimport { useI18n } from \"@burdenoff/fe-libs/shared/providers/shell/I18nProvider\";\nimport type { FileFilterInput, FolderFilterInput } from \"../graphql-types\";\nimport { tWithFallback } from \"../utils/i18n\";\n\ninterface SearchBarProps {\n onSearch: (\n query: string,\n filters?: {\n fileFilter?: FileFilterInput;\n folderFilter?: FolderFilterInput;\n },\n ) => void;\n placeholder?: string;\n initialQuery?: string;\n showFilters?: boolean;\n}\n\nconst FILE_TYPE_MIME_MAP: Record<string, string[]> = {\n image: [\n \"image/jpeg\",\n \"image/png\",\n \"image/gif\",\n \"image/webp\",\n \"image/svg+xml\",\n ],\n video: [\"video/mp4\", \"video/webm\", \"video/quicktime\"],\n document: [\n \"application/msword\",\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n \"application/vnd.ms-excel\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n \"application/vnd.ms-powerpoint\",\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation\",\n \"text/plain\",\n \"text/csv\",\n \"application/json\",\n ],\n pdf: [\"application/pdf\"],\n archive: [\n \"application/zip\",\n \"application/x-tar\",\n \"application/x-7z-compressed\",\n \"application/gzip\",\n \"application/x-rar-compressed\",\n ],\n};\n\nexport function SearchBar({\n onSearch,\n placeholder = \"Search files and folders...\",\n initialQuery = \"\",\n showFilters = true,\n}: SearchBarProps) {\n const { t } = useI18n();\n const [query, setQuery] = useState(initialQuery);\n const [showFilterPanel, setShowFilterPanel] = useState(false);\n const [filters, setFilters] = useState<{\n fileType?: string;\n status?: string;\n visibility?: string;\n starred?: boolean;\n }>({});\n const fileStatus = filters.status as FileFilterInput[\"status\"] | undefined;\n const folderStatus = filters.status as\n | FolderFilterInput[\"status\"]\n | undefined;\n const fileVisibility = filters.visibility as\n | FileFilterInput[\"visibility\"]\n | undefined;\n const fileMimeTypes = filters.fileType\n ? FILE_TYPE_MIME_MAP[filters.fileType]\n : undefined;\n\n useEffect(() => {\n setQuery(initialQuery);\n }, [initialQuery]);\n\n // Debounced search\n useEffect(() => {\n const timer = setTimeout(() => {\n if (query.length >= 2 || query.length === 0) {\n const fileFilter: FileFilterInput = {\n ...(fileMimeTypes && { mimeTypes: fileMimeTypes }),\n ...(fileStatus && { status: fileStatus }),\n ...(fileVisibility && { visibility: fileVisibility }),\n ...(filters.starred !== undefined && { starred: filters.starred }),\n };\n\n const folderFilter: FolderFilterInput = {\n ...(folderStatus && { status: folderStatus }),\n ...(filters.starred !== undefined && { starred: filters.starred }),\n };\n\n onSearch(query, { fileFilter, folderFilter });\n }\n }, 300);\n\n return () => clearTimeout(timer);\n }, [\n fileStatus,\n fileMimeTypes,\n fileVisibility,\n folderStatus,\n filters,\n onSearch,\n query,\n ]);\n\n const handleClear = useCallback(() => {\n setQuery(\"\");\n setFilters({});\n onSearch(\"\");\n }, [onSearch]);\n\n const activeFilterCount = Object.values(filters).filter(\n (v) => v !== undefined,\n ).length;\n\n return (\n <div className=\"relative\">\n {/* Search Input */}\n <div className=\"relative flex items-center\">\n <Search className=\"absolute left-3 size-4 text-text-tertiary\" />\n <label htmlFor=\"files-search-input\" className=\"sr-only\">\n {tWithFallback(\n t,\n \"files.search.input.label\",\n \"Search files and folders\",\n )}\n </label>\n <input\n id=\"files-search-input\"\n type=\"text\"\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n placeholder={placeholder}\n className=\"w-full pl-[3.25rem] pr-20 py-2 border border-border-default rounded-lg focus:outline-none focus:ring-2 focus:ring-action-primary-border focus:border-action-primary-border transition-colors duration-200\"\n />\n <div className=\"absolute right-2 flex items-center gap-1\">\n {query && (\n <button\n onClick={handleClear}\n className=\"p-1.5 text-text-tertiary hover:text-text-secondary hover:bg-action-ghost-bg-hover rounded transition-colors duration-200\"\n title={tWithFallback(\n t,\n \"files.search.actions.clearSearch\",\n \"Clear search\",\n )}\n aria-label={tWithFallback(\n t,\n \"files.search.actions.clearSearch\",\n \"Clear search\",\n )}\n >\n <X className=\"size-4\" />\n </button>\n )}\n {showFilters && (\n <button\n onClick={() => setShowFilterPanel(!showFilterPanel)}\n aria-expanded={showFilterPanel}\n aria-controls=\"files-search-filter-panel\"\n aria-label={tWithFallback(\n t,\n \"files.search.filters.toggleAria\",\n \"Toggle filters\",\n )}\n className={`p-1.5 rounded transition-colors duration-200 relative ${\n showFilterPanel || activeFilterCount > 0\n ? \"text-text-link bg-bg-accent hover:bg-action-primary-bg/20\"\n : \"text-text-tertiary hover:text-text-secondary hover:bg-action-ghost-bg-hover\"\n }`}\n title={tWithFallback(t, \"files.search.filters.title\", \"Filters\")}\n >\n <Filter className=\"size-4\" />\n {activeFilterCount > 0 && (\n <span className=\"absolute -top-1 -right-1 size-4 bg-action-primary-bg text-text-inverse text-[10px] font-bold rounded-full flex items-center justify-center\">\n {activeFilterCount}\n </span>\n )}\n </button>\n )}\n </div>\n </div>\n\n {/* Filter Panel */}\n {showFilterPanel && (\n <div\n id=\"files-search-filter-panel\"\n className=\"absolute top-full left-0 right-0 mt-2 p-4 bg-bg-surface border border-border-default rounded-lg shadow-lg z-10 animate-in fade-in duration-200\"\n >\n <div className=\"space-y-4\">\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1\">\n {tWithFallback(\n t,\n \"files.search.filters.fileType.label\",\n \"File Type\",\n )}\n </label>\n <select\n value={filters.fileType || \"\"}\n onChange={(e) =>\n setFilters({\n ...filters,\n fileType: e.target.value || undefined,\n })\n }\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 transition-colors duration-200\"\n >\n <option value=\"\">\n {tWithFallback(\n t,\n \"files.search.filters.fileType.options.all\",\n \"All types\",\n )}\n </option>\n <option value=\"image\">\n {tWithFallback(\n t,\n \"files.search.filters.fileType.options.image\",\n \"Images\",\n )}\n </option>\n <option value=\"video\">\n {tWithFallback(\n t,\n \"files.search.filters.fileType.options.video\",\n \"Videos\",\n )}\n </option>\n <option value=\"document\">\n {tWithFallback(\n t,\n \"files.search.filters.fileType.options.document\",\n \"Documents\",\n )}\n </option>\n <option value=\"pdf\">\n {tWithFallback(\n t,\n \"files.search.filters.fileType.options.pdf\",\n \"PDFs\",\n )}\n </option>\n <option value=\"archive\">\n {tWithFallback(\n t,\n \"files.search.filters.fileType.options.archive\",\n \"Archives\",\n )}\n </option>\n </select>\n </div>\n\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1\">\n {tWithFallback(\n t,\n \"files.search.filters.status.label\",\n \"Status\",\n )}\n </label>\n <select\n value={filters.status || \"\"}\n onChange={(e) =>\n setFilters({\n ...filters,\n status: e.target.value || undefined,\n })\n }\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 transition-colors duration-200\"\n >\n <option value=\"\">\n {tWithFallback(\n t,\n \"files.search.filters.status.options.all\",\n \"All statuses\",\n )}\n </option>\n <option value=\"ACTIVE\">\n {tWithFallback(\n t,\n \"files.search.filters.status.options.active\",\n \"Active\",\n )}\n </option>\n <option value=\"ARCHIVED\">\n {tWithFallback(\n t,\n \"files.search.filters.status.options.archived\",\n \"Archived\",\n )}\n </option>\n <option value=\"DELETED\">\n {tWithFallback(\n t,\n \"files.search.filters.status.options.deleted\",\n \"Deleted\",\n )}\n </option>\n </select>\n </div>\n\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1\">\n {tWithFallback(\n t,\n \"files.search.filters.visibility.label\",\n \"Visibility\",\n )}\n </label>\n <select\n value={filters.visibility || \"\"}\n onChange={(e) =>\n setFilters({\n ...filters,\n visibility: e.target.value || undefined,\n })\n }\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 transition-colors duration-200\"\n >\n <option value=\"\">\n {tWithFallback(\n t,\n \"files.search.filters.visibility.options.all\",\n \"All visibility\",\n )}\n </option>\n <option value=\"PRIVATE\">\n {tWithFallback(\n t,\n \"files.search.filters.visibility.options.private\",\n \"Private\",\n )}\n </option>\n <option value=\"TEAM\">\n {tWithFallback(\n t,\n \"files.search.filters.visibility.options.team\",\n \"Team\",\n )}\n </option>\n <option value=\"WORKSPACE\">\n {tWithFallback(\n t,\n \"files.search.filters.visibility.options.workspace\",\n \"Workspace\",\n )}\n </option>\n <option value=\"PUBLIC\">\n {tWithFallback(\n t,\n \"files.search.filters.visibility.options.public\",\n \"Public\",\n )}\n </option>\n </select>\n </div>\n\n <div className=\"flex items-center\">\n <input\n type=\"checkbox\"\n id=\"starred-filter\"\n checked={filters.starred || false}\n onChange={(e) =>\n setFilters({\n ...filters,\n starred: e.target.checked || undefined,\n })\n }\n className=\"size-4 text-action-primary-bg border-border-default rounded focus:ring-action-primary-border transition-colors duration-200\"\n />\n <label\n htmlFor=\"starred-filter\"\n className=\"ml-2 text-sm text-text-primary\"\n >\n {tWithFallback(\n t,\n \"files.search.filters.starredOnly\",\n \"Starred only\",\n )}\n </label>\n </div>\n\n <div className=\"flex justify-end gap-2 pt-2 border-t border-border-default\">\n <button\n onClick={() => {\n setFilters({});\n setShowFilterPanel(false);\n }}\n className=\"px-3 py-1.5 text-sm text-text-primary hover:bg-action-ghost-bg-hover rounded transition-colors duration-200\"\n >\n {tWithFallback(\n t,\n \"files.search.filters.actions.clear\",\n \"Clear filters\",\n )}\n </button>\n <button\n onClick={() => setShowFilterPanel(false)}\n className=\"px-3 py-1.5 text-sm bg-action-primary-bg text-text-inverse rounded hover:bg-action-primary-bg-hover transition-colors duration-200\"\n >\n {tWithFallback(\n t,\n \"files.search.filters.actions.apply\",\n \"Apply\",\n )}\n </button>\n </div>\n </div>\n </div>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { FileItem, FolderItem } from '../types';
2
+ export interface ShareDialogInput {
3
+ fileId?: string;
4
+ folderId?: string;
5
+ shareType: "PUBLIC_LINK" | "EMAIL_INVITE";
6
+ accessLevel: "VIEW" | "DOWNLOAD" | "EDIT";
7
+ expiresAt?: string;
8
+ maxDownloads?: number;
9
+ password?: string;
10
+ invitedEmail?: string;
11
+ }
12
+ interface ShareDialogProps {
13
+ item: FileItem | FolderItem;
14
+ itemType: "file" | "folder";
15
+ onClose: () => void;
16
+ onCreateShare: (input: ShareDialogInput) => Promise<{
17
+ publicUrl: string;
18
+ token: string;
19
+ }>;
20
+ isLoading?: boolean;
21
+ }
22
+ export declare function ShareDialog({ item, itemType, onClose, onCreateShare, isLoading, }: ShareDialogProps): import("react/jsx-runtime").JSX.Element;
23
+ export {};
24
+ //# sourceMappingURL=ShareDialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShareDialog.d.ts","sourceRoot":"","sources":["../../../src/files/components/ShareDialog.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAGrD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,aAAa,GAAG,cAAc,CAAC;IAC1C,WAAW,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM,CAAC;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,UAAU,gBAAgB;IACxB,IAAI,EAAE,QAAQ,GAAG,UAAU,CAAC;IAC5B,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC5B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,aAAa,EAAE,CACb,KAAK,EAAE,gBAAgB,KACpB,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnD,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,WAAW,CAAC,EAC1B,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,aAAa,EACb,SAAS,GACV,EAAE,gBAAgB,2CAkYlB"}