@burdenoff/microfe-files 2026.527.2 → 2026.527.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/files/components/ActionMenu.js +44 -40
- package/dist/files/components/ActionMenu.js.map +1 -1
- package/dist/files/components/ConfirmDialog.js +42 -40
- package/dist/files/components/ConfirmDialog.js.map +1 -1
- package/dist/files/components/CopyDialog.js +1 -0
- package/dist/files/components/CopyDialog.js.map +1 -1
- package/dist/files/components/FileCard.js.map +1 -1
- package/dist/files/components/FileInfoPanel.js +102 -102
- package/dist/files/components/FileInfoPanel.js.map +1 -1
- package/dist/files/components/FileListItem.js.map +1 -1
- package/dist/files/components/FolderCard.js.map +1 -1
- package/dist/files/components/SearchBar.js +125 -117
- package/dist/files/components/SearchBar.js.map +1 -1
- package/dist/files/components/ShareDialog.js +5 -0
- package/dist/files/components/ShareDialog.js.map +1 -1
- package/dist/files/components/Toast.js +27 -24
- package/dist/files/components/Toast.js.map +1 -1
- package/dist/files/components/UploadQueue.js +1 -1
- package/dist/files/components/UploadQueue.js.map +1 -1
- package/dist/files/components/viewers/AudioPlayer.js +3 -0
- package/dist/files/components/viewers/AudioPlayer.js.map +1 -1
- package/dist/files/components/viewers/TextViewer.js +1 -0
- package/dist/files/components/viewers/TextViewer.js.map +1 -1
- package/dist/files/components/viewers/VideoPlayer.js +3 -0
- package/dist/files/components/viewers/VideoPlayer.js.map +1 -1
- package/dist/files/hooks/useKeyboardNavigation.js +51 -51
- package/dist/files/hooks/useKeyboardNavigation.js.map +1 -1
- package/dist/files/pages/BrowserPage.js +8 -12
- package/dist/files/pages/BrowserPage.js.map +1 -1
- package/dist/files/pages/ShareAccessPage.js +1 -0
- package/dist/files/pages/ShareAccessPage.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,105 +1,105 @@
|
|
|
1
1
|
import { useFilesStore as e } from "../store/filesStore.js";
|
|
2
|
-
import { useCallback as t, useEffect as n,
|
|
2
|
+
import { useCallback as t, useEffect as n, useMemo as r, useRef as i } from "react";
|
|
3
3
|
//#region src/files/hooks/useKeyboardNavigation.ts
|
|
4
|
-
function
|
|
5
|
-
let
|
|
6
|
-
|
|
7
|
-
}, [
|
|
8
|
-
let e =
|
|
9
|
-
return
|
|
4
|
+
function a({ files: a, folders: o, onFilePreview: s, onFileDelete: c, onFolderOpen: l, onFolderDelete: u, activeTab: d }) {
|
|
5
|
+
let f = i(-1), { selectedFiles: p, selectedFolders: m, clearSelection: h, selectFile: g, selectFolder: _, toggleFileSelection: v, toggleFolderSelection: y, selectAllFiles: b, selectAllFolders: x } = e(), S = r(() => [...o, ...a], [o, a]), C = S.length, w = t((e) => {
|
|
6
|
+
f.current = Math.max(-1, Math.min(e, C - 1));
|
|
7
|
+
}, [C]), T = t(() => f.current >= 0 && f.current < C ? S[f.current] : null, [S, C]), E = t((e) => e < o.length, [o.length]), D = t((e) => e >= o.length, [o.length]), O = t(() => {
|
|
8
|
+
let e = f.current;
|
|
9
|
+
return D(e) ? a[e - o.length] ?? null : null;
|
|
10
10
|
}, [
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
]),
|
|
15
|
-
let e =
|
|
16
|
-
return
|
|
17
|
-
}, [
|
|
11
|
+
a,
|
|
12
|
+
o.length,
|
|
13
|
+
D
|
|
14
|
+
]), k = t(() => {
|
|
15
|
+
let e = f.current;
|
|
16
|
+
return E(e) ? o[e] ?? null : null;
|
|
17
|
+
}, [o, E]), A = t((e) => {
|
|
18
18
|
let t = e.target;
|
|
19
19
|
if (t.tagName === "INPUT" || t.tagName === "TEXTAREA" || t.isContentEditable) return;
|
|
20
|
-
let n =
|
|
20
|
+
let n = d === "bin";
|
|
21
21
|
switch (e.key) {
|
|
22
22
|
case "ArrowDown":
|
|
23
|
-
e.preventDefault(),
|
|
23
|
+
e.preventDefault(), w(f.current + 1);
|
|
24
24
|
break;
|
|
25
25
|
case "ArrowUp":
|
|
26
|
-
e.preventDefault(),
|
|
26
|
+
e.preventDefault(), w(f.current - 1);
|
|
27
27
|
break;
|
|
28
28
|
case "ArrowRight":
|
|
29
|
-
e.preventDefault(),
|
|
29
|
+
e.preventDefault(), w(f.current + 1);
|
|
30
30
|
break;
|
|
31
31
|
case "ArrowLeft":
|
|
32
|
-
e.preventDefault(),
|
|
32
|
+
e.preventDefault(), w(f.current - 1);
|
|
33
33
|
break;
|
|
34
34
|
case "Enter": {
|
|
35
35
|
e.preventDefault();
|
|
36
|
-
let t =
|
|
37
|
-
if (t)
|
|
36
|
+
let t = k();
|
|
37
|
+
if (t) l?.(t);
|
|
38
38
|
else {
|
|
39
|
-
let e =
|
|
40
|
-
e &&
|
|
39
|
+
let e = O();
|
|
40
|
+
e && s?.(e);
|
|
41
41
|
}
|
|
42
42
|
break;
|
|
43
43
|
}
|
|
44
44
|
case " ": {
|
|
45
45
|
e.preventDefault();
|
|
46
|
-
let t =
|
|
47
|
-
if (t)
|
|
46
|
+
let t = k();
|
|
47
|
+
if (t) y(t.id);
|
|
48
48
|
else {
|
|
49
|
-
let e =
|
|
50
|
-
e &&
|
|
49
|
+
let e = O();
|
|
50
|
+
e && v(e.id);
|
|
51
51
|
}
|
|
52
52
|
break;
|
|
53
53
|
}
|
|
54
54
|
case "Delete":
|
|
55
55
|
case "Backspace": {
|
|
56
56
|
if (e.preventDefault(), n) return;
|
|
57
|
-
let t =
|
|
58
|
-
if (t)
|
|
57
|
+
let t = k();
|
|
58
|
+
if (t) u?.(t);
|
|
59
59
|
else {
|
|
60
|
-
let e =
|
|
61
|
-
e &&
|
|
60
|
+
let e = O();
|
|
61
|
+
e && c?.(e);
|
|
62
62
|
}
|
|
63
63
|
break;
|
|
64
64
|
}
|
|
65
65
|
case "Escape":
|
|
66
|
-
e.preventDefault(),
|
|
66
|
+
e.preventDefault(), h(), w(-1);
|
|
67
67
|
break;
|
|
68
68
|
case "a":
|
|
69
69
|
case "A":
|
|
70
70
|
if (e.ctrlKey || e.metaKey) {
|
|
71
71
|
e.preventDefault();
|
|
72
|
-
let t =
|
|
73
|
-
|
|
72
|
+
let t = a.map((e) => e.id), n = o.map((e) => e.id);
|
|
73
|
+
b(t), x(n);
|
|
74
74
|
}
|
|
75
75
|
break;
|
|
76
76
|
}
|
|
77
77
|
}, [
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
i,
|
|
78
|
+
d,
|
|
79
|
+
h,
|
|
81
80
|
a,
|
|
82
|
-
|
|
81
|
+
o,
|
|
83
82
|
O,
|
|
83
|
+
k,
|
|
84
|
+
c,
|
|
84
85
|
s,
|
|
85
|
-
|
|
86
|
+
u,
|
|
86
87
|
l,
|
|
87
|
-
c,
|
|
88
|
-
y,
|
|
89
88
|
b,
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
v
|
|
89
|
+
x,
|
|
90
|
+
w,
|
|
91
|
+
v,
|
|
92
|
+
y
|
|
93
93
|
]);
|
|
94
|
-
return n(() => (document.addEventListener("keydown",
|
|
95
|
-
document.removeEventListener("keydown",
|
|
96
|
-
}), [
|
|
97
|
-
focusedIndex:
|
|
98
|
-
setFocusedIndex:
|
|
99
|
-
getFocusedItem:
|
|
94
|
+
return n(() => (document.addEventListener("keydown", A), () => {
|
|
95
|
+
document.removeEventListener("keydown", A);
|
|
96
|
+
}), [A]), {
|
|
97
|
+
focusedIndex: f.current,
|
|
98
|
+
setFocusedIndex: w,
|
|
99
|
+
getFocusedItem: T
|
|
100
100
|
};
|
|
101
101
|
}
|
|
102
102
|
//#endregion
|
|
103
|
-
export {
|
|
103
|
+
export { a as useKeyboardNavigation };
|
|
104
104
|
|
|
105
105
|
//# sourceMappingURL=useKeyboardNavigation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useKeyboardNavigation.js","names":[],"sources":["../../../src/files/hooks/useKeyboardNavigation.ts"],"sourcesContent":["import { useCallback, useEffect, useRef } from \"react\";\nimport type { FileItem, FolderItem } from \"../types\";\nimport { useFilesStore } from \"../store/filesStore\";\n\ninterface UseKeyboardNavigationOptions {\n files: FileItem[];\n folders: FolderItem[];\n onFilePreview?: (file: FileItem) => void;\n onFileDelete?: (file: FileItem) => void;\n onFolderOpen?: (folder: FolderItem) => void;\n onFolderDelete?: (folder: FolderItem) => void;\n activeTab: string;\n}\n\nexport function useKeyboardNavigation({\n files,\n folders,\n onFilePreview,\n onFileDelete,\n onFolderOpen,\n onFolderDelete,\n activeTab,\n}: UseKeyboardNavigationOptions) {\n const focusedIndexRef = useRef<number>(-1);\n const {\n selectedFiles,\n selectedFolders,\n clearSelection,\n selectFile,\n selectFolder,\n toggleFileSelection,\n toggleFolderSelection,\n selectAllFiles,\n selectAllFolders,\n } = useFilesStore();\n\n const allItems = [...folders, ...files];\n const totalItems = allItems.length;\n\n const setFocusedIndex = useCallback(\n (index: number) => {\n const clampedIndex = Math.max(-1, Math.min(index, totalItems - 1));\n focusedIndexRef.current = clampedIndex;\n },\n [totalItems],\n );\n\n const getFocusedItem = useCallback(() => {\n if (focusedIndexRef.current >= 0 && focusedIndexRef.current < totalItems) {\n return allItems[focusedIndexRef.current];\n }\n return null;\n }, [allItems, totalItems]);\n\n const isFocusedFolder = useCallback(\n (index: number): boolean => {\n return index < folders.length;\n },\n [folders.length],\n );\n\n const isFocusedFile = useCallback(\n (index: number): boolean => {\n return index >= folders.length;\n },\n [folders.length],\n );\n\n const getFocusedFile = useCallback((): FileItem | null => {\n const idx = focusedIndexRef.current;\n if (isFocusedFile(idx)) {\n return files[idx - folders.length] ?? null;\n }\n return null;\n }, [files, folders.length, isFocusedFile]);\n\n const getFocusedFolder = useCallback((): FolderItem | null => {\n const idx = focusedIndexRef.current;\n if (isFocusedFolder(idx)) {\n return folders[idx] ?? null;\n }\n return null;\n }, [folders, isFocusedFolder]);\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent) => {\n const target = event.target as HTMLElement;\n const isInputFocused =\n target.tagName === \"INPUT\" ||\n target.tagName === \"TEXTAREA\" ||\n target.isContentEditable;\n\n if (isInputFocused) {\n return;\n }\n\n const isBinTab = activeTab === \"bin\";\n\n switch (event.key) {\n case \"ArrowDown\": {\n event.preventDefault();\n setFocusedIndex(focusedIndexRef.current + 1);\n break;\n }\n case \"ArrowUp\": {\n event.preventDefault();\n setFocusedIndex(focusedIndexRef.current - 1);\n break;\n }\n case \"ArrowRight\": {\n event.preventDefault();\n setFocusedIndex(focusedIndexRef.current + 1);\n break;\n }\n case \"ArrowLeft\": {\n event.preventDefault();\n setFocusedIndex(focusedIndexRef.current - 1);\n break;\n }\n case \"Enter\": {\n event.preventDefault();\n const folder = getFocusedFolder();\n if (folder) {\n onFolderOpen?.(folder);\n } else {\n const file = getFocusedFile();\n if (file) {\n onFilePreview?.(file);\n }\n }\n break;\n }\n case \" \": {\n event.preventDefault();\n const folder = getFocusedFolder();\n if (folder) {\n toggleFolderSelection(folder.id);\n } else {\n const file = getFocusedFile();\n if (file) {\n toggleFileSelection(file.id);\n }\n }\n break;\n }\n case \"Delete\":\n case \"Backspace\": {\n event.preventDefault();\n if (isBinTab) {\n return;\n }\n const folder = getFocusedFolder();\n if (folder) {\n onFolderDelete?.(folder);\n } else {\n const file = getFocusedFile();\n if (file) {\n onFileDelete?.(file);\n }\n }\n break;\n }\n case \"Escape\": {\n event.preventDefault();\n clearSelection();\n setFocusedIndex(-1);\n break;\n }\n case \"a\":\n case \"A\": {\n if (event.ctrlKey || event.metaKey) {\n event.preventDefault();\n const fileIds = files.map((f) => f.id);\n const folderIds = folders.map((f) => f.id);\n selectAllFiles(fileIds);\n selectAllFolders(folderIds);\n }\n break;\n }\n }\n },\n [\n activeTab,\n clearSelection,\n files,\n folders,\n getFocusedFile,\n getFocusedFolder,\n onFileDelete,\n onFilePreview,\n onFolderDelete,\n onFolderOpen,\n selectAllFiles,\n selectAllFolders,\n setFocusedIndex,\n toggleFileSelection,\n toggleFolderSelection,\n ],\n );\n\n useEffect(() => {\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, [handleKeyDown]);\n\n return {\n focusedIndex: focusedIndexRef.current,\n setFocusedIndex,\n getFocusedItem,\n };\n}\n"],"mappings":";;;AAcA,SAAgB,EAAsB,EACpC,UACA,YACA,kBACA,iBACA,iBACA,mBACA,gBAC+B;CAC/B,IAAM,IAAkB,EAAe,GAAG,EACpC,EACJ,kBACA,oBACA,mBACA,eACA,iBACA,wBACA,0BACA,mBACA,wBACE,GAAe,EAEb,IAAW,CAAC,GAAG,GAAS,GAAG,EAAM,
|
|
1
|
+
{"version":3,"file":"useKeyboardNavigation.js","names":[],"sources":["../../../src/files/hooks/useKeyboardNavigation.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef } from \"react\";\nimport type { FileItem, FolderItem } from \"../types\";\nimport { useFilesStore } from \"../store/filesStore\";\n\ninterface UseKeyboardNavigationOptions {\n files: FileItem[];\n folders: FolderItem[];\n onFilePreview?: (file: FileItem) => void;\n onFileDelete?: (file: FileItem) => void;\n onFolderOpen?: (folder: FolderItem) => void;\n onFolderDelete?: (folder: FolderItem) => void;\n activeTab: string;\n}\n\nexport function useKeyboardNavigation({\n files,\n folders,\n onFilePreview,\n onFileDelete,\n onFolderOpen,\n onFolderDelete,\n activeTab,\n}: UseKeyboardNavigationOptions) {\n const focusedIndexRef = useRef<number>(-1);\n const {\n selectedFiles,\n selectedFolders,\n clearSelection,\n selectFile,\n selectFolder,\n toggleFileSelection,\n toggleFolderSelection,\n selectAllFiles,\n selectAllFolders,\n } = useFilesStore();\n\n const allItems = useMemo(() => [...folders, ...files], [folders, files]);\n const totalItems = allItems.length;\n\n const setFocusedIndex = useCallback(\n (index: number) => {\n const clampedIndex = Math.max(-1, Math.min(index, totalItems - 1));\n focusedIndexRef.current = clampedIndex;\n },\n [totalItems],\n );\n\n const getFocusedItem = useCallback(() => {\n if (focusedIndexRef.current >= 0 && focusedIndexRef.current < totalItems) {\n return allItems[focusedIndexRef.current];\n }\n return null;\n }, [allItems, totalItems]);\n\n const isFocusedFolder = useCallback(\n (index: number): boolean => {\n return index < folders.length;\n },\n [folders.length],\n );\n\n const isFocusedFile = useCallback(\n (index: number): boolean => {\n return index >= folders.length;\n },\n [folders.length],\n );\n\n const getFocusedFile = useCallback((): FileItem | null => {\n const idx = focusedIndexRef.current;\n if (isFocusedFile(idx)) {\n return files[idx - folders.length] ?? null;\n }\n return null;\n }, [files, folders.length, isFocusedFile]);\n\n const getFocusedFolder = useCallback((): FolderItem | null => {\n const idx = focusedIndexRef.current;\n if (isFocusedFolder(idx)) {\n return folders[idx] ?? null;\n }\n return null;\n }, [folders, isFocusedFolder]);\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent) => {\n const target = event.target as HTMLElement;\n const isInputFocused =\n target.tagName === \"INPUT\" ||\n target.tagName === \"TEXTAREA\" ||\n target.isContentEditable;\n\n if (isInputFocused) {\n return;\n }\n\n const isBinTab = activeTab === \"bin\";\n\n switch (event.key) {\n case \"ArrowDown\": {\n event.preventDefault();\n setFocusedIndex(focusedIndexRef.current + 1);\n break;\n }\n case \"ArrowUp\": {\n event.preventDefault();\n setFocusedIndex(focusedIndexRef.current - 1);\n break;\n }\n case \"ArrowRight\": {\n event.preventDefault();\n setFocusedIndex(focusedIndexRef.current + 1);\n break;\n }\n case \"ArrowLeft\": {\n event.preventDefault();\n setFocusedIndex(focusedIndexRef.current - 1);\n break;\n }\n case \"Enter\": {\n event.preventDefault();\n const folder = getFocusedFolder();\n if (folder) {\n onFolderOpen?.(folder);\n } else {\n const file = getFocusedFile();\n if (file) {\n onFilePreview?.(file);\n }\n }\n break;\n }\n case \" \": {\n event.preventDefault();\n const folder = getFocusedFolder();\n if (folder) {\n toggleFolderSelection(folder.id);\n } else {\n const file = getFocusedFile();\n if (file) {\n toggleFileSelection(file.id);\n }\n }\n break;\n }\n case \"Delete\":\n case \"Backspace\": {\n event.preventDefault();\n if (isBinTab) {\n return;\n }\n const folder = getFocusedFolder();\n if (folder) {\n onFolderDelete?.(folder);\n } else {\n const file = getFocusedFile();\n if (file) {\n onFileDelete?.(file);\n }\n }\n break;\n }\n case \"Escape\": {\n event.preventDefault();\n clearSelection();\n setFocusedIndex(-1);\n break;\n }\n case \"a\":\n case \"A\": {\n if (event.ctrlKey || event.metaKey) {\n event.preventDefault();\n const fileIds = files.map((f) => f.id);\n const folderIds = folders.map((f) => f.id);\n selectAllFiles(fileIds);\n selectAllFolders(folderIds);\n }\n break;\n }\n }\n },\n [\n activeTab,\n clearSelection,\n files,\n folders,\n getFocusedFile,\n getFocusedFolder,\n onFileDelete,\n onFilePreview,\n onFolderDelete,\n onFolderOpen,\n selectAllFiles,\n selectAllFolders,\n setFocusedIndex,\n toggleFileSelection,\n toggleFolderSelection,\n ],\n );\n\n useEffect(() => {\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, [handleKeyDown]);\n\n return {\n focusedIndex: focusedIndexRef.current,\n setFocusedIndex,\n getFocusedItem,\n };\n}\n"],"mappings":"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"}
|
|
@@ -565,13 +565,13 @@ function d() {
|
|
|
565
565
|
activeTab: v
|
|
566
566
|
}), m === void 0 ? /* @__PURE__ */ u("div", {
|
|
567
567
|
className: "flex flex-col items-center justify-center min-h-[60vh] gap-3 text-center px-6",
|
|
568
|
-
children: [/* @__PURE__ */ l(s, { className: "
|
|
568
|
+
children: [/* @__PURE__ */ l(s, { className: "size-8 animate-spin text-text-tertiary" }), /* @__PURE__ */ l("p", {
|
|
569
569
|
className: "text-sm text-text-secondary max-w-md",
|
|
570
570
|
children: a(d, "files.browser.workspace.waiting", "Waiting for workspace context. If this persists, the app shell may not have provided a workspaceId to the Files module. Try reloading the page or switching workspaces.")
|
|
571
571
|
})]
|
|
572
572
|
}) : m === "" ? /* @__PURE__ */ u("div", {
|
|
573
573
|
className: "flex flex-col items-center justify-center min-h-[60vh] gap-3 text-center px-6",
|
|
574
|
-
children: [/* @__PURE__ */ l(Ue, { className: "
|
|
574
|
+
children: [/* @__PURE__ */ l(Ue, { className: "size-8 text-text-tertiary" }), /* @__PURE__ */ l("p", {
|
|
575
575
|
className: "text-sm text-text-secondary max-w-md",
|
|
576
576
|
children: a(d, "files.browser.workspace.notSelected", "No workspace selected. Please select a workspace to view files.")
|
|
577
577
|
})]
|
|
@@ -723,9 +723,7 @@ function d() {
|
|
|
723
723
|
type: "button",
|
|
724
724
|
onClick: async () => {
|
|
725
725
|
try {
|
|
726
|
-
|
|
727
|
-
for (let e of Array.from(g)) await Lt.mutateAsync({ id: e });
|
|
728
|
-
_(), x.success(`${M} item${M > 1 ? "s" : ""} restored`);
|
|
726
|
+
await Promise.all([...Array.from(h).map((e) => It.mutateAsync({ id: e })), ...Array.from(g).map((e) => Lt.mutateAsync({ id: e }))]), _(), x.success(`${M} item${M > 1 ? "s" : ""} restored`);
|
|
729
727
|
} catch (e) {
|
|
730
728
|
x.error(e instanceof Error ? e.message : "Failed to restore some items");
|
|
731
729
|
}
|
|
@@ -745,9 +743,7 @@ function d() {
|
|
|
745
743
|
variant: "danger",
|
|
746
744
|
onConfirm: async () => {
|
|
747
745
|
try {
|
|
748
|
-
|
|
749
|
-
for (let e of Array.from(g)) await zt.mutateAsync({ id: e });
|
|
750
|
-
_(), x.success(a(d, "files.bulk.permanentDelete.success", "{{count}} item{{plural}} deleted permanently", {
|
|
746
|
+
await Promise.all([...Array.from(h).map((e) => Rt.mutateAsync({ id: e })), ...Array.from(g).map((e) => zt.mutateAsync({ id: e }))]), _(), x.success(a(d, "files.bulk.permanentDelete.success", "{{count}} item{{plural}} deleted permanently", {
|
|
751
747
|
count: M,
|
|
752
748
|
plural: M > 1 ? "s" : ""
|
|
753
749
|
}));
|
|
@@ -773,12 +769,10 @@ function d() {
|
|
|
773
769
|
onConfirm: async () => {
|
|
774
770
|
try {
|
|
775
771
|
let e = Array.from(h), t = Array.from(g);
|
|
776
|
-
e.length > 0 && await Jt.mutateAsync(e)
|
|
777
|
-
for (let e of t) await Ft.mutateAsync({
|
|
772
|
+
e.length > 0 && await Jt.mutateAsync(e), await Promise.all(t.map((e) => Ft.mutateAsync({
|
|
778
773
|
id: e,
|
|
779
774
|
recursive: !0
|
|
780
|
-
})
|
|
781
|
-
_(), x.success(a(d, "files.bulk.delete.success", "{{count}} item{{plural}} moved to bin", {
|
|
775
|
+
}))), _(), x.success(a(d, "files.bulk.delete.success", "{{count}} item{{plural}} moved to bin", {
|
|
782
776
|
count: M,
|
|
783
777
|
plural: M > 1 ? "s" : ""
|
|
784
778
|
}));
|
|
@@ -852,6 +846,7 @@ function d() {
|
|
|
852
846
|
onKeyDown: (e) => {
|
|
853
847
|
e.key === "Enter" && rn(), e.key === "Escape" && (N(!1), K(""));
|
|
854
848
|
},
|
|
849
|
+
"aria-label": a(d, "files.browser.newFolderDialog.title", "New folder"),
|
|
855
850
|
placeholder: a(d, "files.browser.newFolderDialog.placeholder", "Folder name"),
|
|
856
851
|
className: "w-full px-4 py-3 border-2 border-border-default rounded-lg focus:outline-none focus:border-action-primary-border text-sm transition-colors duration-200"
|
|
857
852
|
}),
|
|
@@ -895,6 +890,7 @@ function d() {
|
|
|
895
890
|
onKeyDown: (e) => {
|
|
896
891
|
e.key === "Enter" && On(), e.key === "Escape" && (P(!1), H(null), W(""));
|
|
897
892
|
},
|
|
893
|
+
"aria-label": a(d, "files.browser.renameDialog.title", "Rename"),
|
|
898
894
|
placeholder: a(d, "files.browser.renameDialog.placeholder", "New name"),
|
|
899
895
|
className: "w-full px-4 py-3 border-2 border-border-default rounded-lg focus:outline-none focus:border-action-primary-border text-sm transition-colors duration-200"
|
|
900
896
|
}),
|