@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.
Files changed (32) hide show
  1. package/dist/files/components/ActionMenu.js +44 -40
  2. package/dist/files/components/ActionMenu.js.map +1 -1
  3. package/dist/files/components/ConfirmDialog.js +42 -40
  4. package/dist/files/components/ConfirmDialog.js.map +1 -1
  5. package/dist/files/components/CopyDialog.js +1 -0
  6. package/dist/files/components/CopyDialog.js.map +1 -1
  7. package/dist/files/components/FileCard.js.map +1 -1
  8. package/dist/files/components/FileInfoPanel.js +102 -102
  9. package/dist/files/components/FileInfoPanel.js.map +1 -1
  10. package/dist/files/components/FileListItem.js.map +1 -1
  11. package/dist/files/components/FolderCard.js.map +1 -1
  12. package/dist/files/components/SearchBar.js +125 -117
  13. package/dist/files/components/SearchBar.js.map +1 -1
  14. package/dist/files/components/ShareDialog.js +5 -0
  15. package/dist/files/components/ShareDialog.js.map +1 -1
  16. package/dist/files/components/Toast.js +27 -24
  17. package/dist/files/components/Toast.js.map +1 -1
  18. package/dist/files/components/UploadQueue.js +1 -1
  19. package/dist/files/components/UploadQueue.js.map +1 -1
  20. package/dist/files/components/viewers/AudioPlayer.js +3 -0
  21. package/dist/files/components/viewers/AudioPlayer.js.map +1 -1
  22. package/dist/files/components/viewers/TextViewer.js +1 -0
  23. package/dist/files/components/viewers/TextViewer.js.map +1 -1
  24. package/dist/files/components/viewers/VideoPlayer.js +3 -0
  25. package/dist/files/components/viewers/VideoPlayer.js.map +1 -1
  26. package/dist/files/hooks/useKeyboardNavigation.js +51 -51
  27. package/dist/files/hooks/useKeyboardNavigation.js.map +1 -1
  28. package/dist/files/pages/BrowserPage.js +8 -12
  29. package/dist/files/pages/BrowserPage.js.map +1 -1
  30. package/dist/files/pages/ShareAccessPage.js +1 -0
  31. package/dist/files/pages/ShareAccessPage.js.map +1 -1
  32. 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, useRef as r } from "react";
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 i({ files: i, folders: a, onFilePreview: o, onFileDelete: s, onFolderOpen: c, onFolderDelete: l, activeTab: u }) {
5
- let d = r(-1), { selectedFiles: f, selectedFolders: p, clearSelection: m, selectFile: h, selectFolder: g, toggleFileSelection: _, toggleFolderSelection: v, selectAllFiles: y, selectAllFolders: b } = e(), x = [...a, ...i], S = x.length, C = t((e) => {
6
- d.current = Math.max(-1, Math.min(e, S - 1));
7
- }, [S]), w = t(() => d.current >= 0 && d.current < S ? x[d.current] : null, [x, S]), T = t((e) => e < a.length, [a.length]), E = t((e) => e >= a.length, [a.length]), D = t(() => {
8
- let e = d.current;
9
- return E(e) ? i[e - a.length] ?? null : null;
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
- i,
12
- a.length,
13
- E
14
- ]), O = t(() => {
15
- let e = d.current;
16
- return T(e) ? a[e] ?? null : null;
17
- }, [a, T]), k = t((e) => {
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 = u === "bin";
20
+ let n = d === "bin";
21
21
  switch (e.key) {
22
22
  case "ArrowDown":
23
- e.preventDefault(), C(d.current + 1);
23
+ e.preventDefault(), w(f.current + 1);
24
24
  break;
25
25
  case "ArrowUp":
26
- e.preventDefault(), C(d.current - 1);
26
+ e.preventDefault(), w(f.current - 1);
27
27
  break;
28
28
  case "ArrowRight":
29
- e.preventDefault(), C(d.current + 1);
29
+ e.preventDefault(), w(f.current + 1);
30
30
  break;
31
31
  case "ArrowLeft":
32
- e.preventDefault(), C(d.current - 1);
32
+ e.preventDefault(), w(f.current - 1);
33
33
  break;
34
34
  case "Enter": {
35
35
  e.preventDefault();
36
- let t = O();
37
- if (t) c?.(t);
36
+ let t = k();
37
+ if (t) l?.(t);
38
38
  else {
39
- let e = D();
40
- e && o?.(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 = O();
47
- if (t) v(t.id);
46
+ let t = k();
47
+ if (t) y(t.id);
48
48
  else {
49
- let e = D();
50
- e && _(e.id);
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 = O();
58
- if (t) l?.(t);
57
+ let t = k();
58
+ if (t) u?.(t);
59
59
  else {
60
- let e = D();
61
- e && s?.(e);
60
+ let e = O();
61
+ e && c?.(e);
62
62
  }
63
63
  break;
64
64
  }
65
65
  case "Escape":
66
- e.preventDefault(), m(), C(-1);
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 = i.map((e) => e.id), n = a.map((e) => e.id);
73
- y(t), b(n);
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
- u,
79
- m,
80
- i,
78
+ d,
79
+ h,
81
80
  a,
82
- D,
81
+ o,
83
82
  O,
83
+ k,
84
+ c,
84
85
  s,
85
- o,
86
+ u,
86
87
  l,
87
- c,
88
- y,
89
88
  b,
90
- C,
91
- _,
92
- v
89
+ x,
90
+ w,
91
+ v,
92
+ y
93
93
  ]);
94
- return n(() => (document.addEventListener("keydown", k), () => {
95
- document.removeEventListener("keydown", k);
96
- }), [k]), {
97
- focusedIndex: d.current,
98
- setFocusedIndex: C,
99
- getFocusedItem: w
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 { i as useKeyboardNavigation };
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":"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"}
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: "h-8 w-8 animate-spin text-text-tertiary" }), /* @__PURE__ */ l("p", {
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: "h-8 w-8 text-text-tertiary" }), /* @__PURE__ */ l("p", {
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
- for (let e of Array.from(h)) await It.mutateAsync({ id: e });
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
- for (let e of Array.from(h)) await Rt.mutateAsync({ id: e });
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
  }),