@burdenoff/microfe-files 2026.525.2 → 2026.527.1

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 (221) hide show
  1. package/dist/files/components/ActionMenu.js +3 -1
  2. package/dist/files/components/ActionMenu.js.map +1 -1
  3. package/dist/files/components/ContextMenu.js +16 -112
  4. package/dist/files/components/ContextMenu.js.map +1 -1
  5. package/dist/files/components/CopyDialog.js +8 -0
  6. package/dist/files/components/CopyDialog.js.map +1 -1
  7. package/dist/files/components/EmptyState.js +2 -0
  8. package/dist/files/components/EmptyState.js.map +1 -1
  9. package/dist/files/components/FileBrowser.js +6 -1
  10. package/dist/files/components/FileBrowser.js.map +1 -1
  11. package/dist/files/components/FileCard.js +4 -0
  12. package/dist/files/components/FileCard.js.map +1 -1
  13. package/dist/files/components/FileInfoPanel.js +2 -0
  14. package/dist/files/components/FileInfoPanel.js.map +1 -1
  15. package/dist/files/components/FileListItem.js +6 -0
  16. package/dist/files/components/FileListItem.js.map +1 -1
  17. package/dist/files/components/FilePreviewModal.js +9 -3
  18. package/dist/files/components/FilePreviewModal.js.map +1 -1
  19. package/dist/files/components/FileVersionPanel.js +5 -0
  20. package/dist/files/components/FileVersionPanel.js.map +1 -1
  21. package/dist/files/components/FolderCard.js +3 -0
  22. package/dist/files/components/FolderCard.js.map +1 -1
  23. package/dist/files/components/MoveDialog.js +8 -0
  24. package/dist/files/components/MoveDialog.js.map +1 -1
  25. package/dist/files/components/SearchBar.js +4 -0
  26. package/dist/files/components/SearchBar.js.map +1 -1
  27. package/dist/files/components/ShareDialog.js +109 -104
  28. package/dist/files/components/ShareDialog.js.map +1 -1
  29. package/dist/files/components/TabBar.js +1 -0
  30. package/dist/files/components/TabBar.js.map +1 -1
  31. package/dist/files/components/Toast.js +1 -0
  32. package/dist/files/components/Toast.js.map +1 -1
  33. package/dist/files/components/UploadQueue.js +5 -0
  34. package/dist/files/components/UploadQueue.js.map +1 -1
  35. package/dist/files/components/contextMenuItems.js +103 -0
  36. package/dist/files/components/contextMenuItems.js.map +1 -0
  37. package/dist/files/components/viewers/AudioPlayer.js +4 -1
  38. package/dist/files/components/viewers/AudioPlayer.js.map +1 -1
  39. package/dist/files/components/viewers/CodeViewer.js +2 -0
  40. package/dist/files/components/viewers/CodeViewer.js.map +1 -1
  41. package/dist/files/components/viewers/ImageViewer.js +4 -0
  42. package/dist/files/components/viewers/ImageViewer.js.map +1 -1
  43. package/dist/files/components/viewers/PDFViewer.js +2 -0
  44. package/dist/files/components/viewers/PDFViewer.js.map +1 -1
  45. package/dist/files/components/viewers/TextViewer.js +4 -2
  46. package/dist/files/components/viewers/TextViewer.js.map +1 -1
  47. package/dist/files/components/viewers/VideoPlayer.js +5 -1
  48. package/dist/files/components/viewers/VideoPlayer.js.map +1 -1
  49. package/dist/files/hooks/useBatchOperations.js.map +1 -1
  50. package/dist/files/hooks/useFileVersions.js.map +1 -1
  51. package/dist/files/pages/BrowserPage.js +18 -2
  52. package/dist/files/pages/BrowserPage.js.map +1 -1
  53. package/dist/files/pages/ShareAccessPage.js +6 -5
  54. package/dist/files/pages/ShareAccessPage.js.map +1 -1
  55. package/dist/files/utils/index.js +1 -1
  56. package/dist/files/utils/index.js.map +1 -1
  57. package/dist/files/utils/thumbnail.js.map +1 -1
  58. package/dist/files.js +2 -1
  59. package/dist/translations/en.js +259 -0
  60. package/dist/translations/en.js.map +1 -0
  61. package/package.json +1 -4
  62. package/dist/config/index.d.ts +0 -33
  63. package/dist/config/index.d.ts.map +0 -1
  64. package/dist/dev/main.d.ts +0 -1
  65. package/dist/dev/main.d.ts.map +0 -1
  66. package/dist/files/FilesRoot.d.ts +0 -31
  67. package/dist/files/FilesRoot.d.ts.map +0 -1
  68. package/dist/files/FilesRoutes.d.ts +0 -12
  69. package/dist/files/FilesRoutes.d.ts.map +0 -1
  70. package/dist/files/components/ActionMenu.d.ts +0 -19
  71. package/dist/files/components/ActionMenu.d.ts.map +0 -1
  72. package/dist/files/components/ConfirmDialog.d.ts +0 -14
  73. package/dist/files/components/ConfirmDialog.d.ts.map +0 -1
  74. package/dist/files/components/ContextMenu.d.ts +0 -59
  75. package/dist/files/components/ContextMenu.d.ts.map +0 -1
  76. package/dist/files/components/CopyDialog.d.ts +0 -12
  77. package/dist/files/components/CopyDialog.d.ts.map +0 -1
  78. package/dist/files/components/EmptyState.d.ts +0 -8
  79. package/dist/files/components/EmptyState.d.ts.map +0 -1
  80. package/dist/files/components/FileBrowser.d.ts +0 -37
  81. package/dist/files/components/FileBrowser.d.ts.map +0 -1
  82. package/dist/files/components/FileCard.d.ts +0 -30
  83. package/dist/files/components/FileCard.d.ts.map +0 -1
  84. package/dist/files/components/FileInfoPanel.d.ts +0 -9
  85. package/dist/files/components/FileInfoPanel.d.ts.map +0 -1
  86. package/dist/files/components/FileListItem.d.ts +0 -29
  87. package/dist/files/components/FileListItem.d.ts.map +0 -1
  88. package/dist/files/components/FilePreviewModal.d.ts +0 -17
  89. package/dist/files/components/FilePreviewModal.d.ts.map +0 -1
  90. package/dist/files/components/FileVersionPanel.d.ts +0 -9
  91. package/dist/files/components/FileVersionPanel.d.ts.map +0 -1
  92. package/dist/files/components/FolderCard.d.ts +0 -34
  93. package/dist/files/components/FolderCard.d.ts.map +0 -1
  94. package/dist/files/components/MoveDialog.d.ts +0 -12
  95. package/dist/files/components/MoveDialog.d.ts.map +0 -1
  96. package/dist/files/components/SearchBar.d.ts +0 -13
  97. package/dist/files/components/SearchBar.d.ts.map +0 -1
  98. package/dist/files/components/ShareDialog.d.ts +0 -24
  99. package/dist/files/components/ShareDialog.d.ts.map +0 -1
  100. package/dist/files/components/TabBar.d.ts +0 -14
  101. package/dist/files/components/TabBar.d.ts.map +0 -1
  102. package/dist/files/components/Toast.d.ts +0 -14
  103. package/dist/files/components/Toast.d.ts.map +0 -1
  104. package/dist/files/components/UploadQueue.d.ts +0 -21
  105. package/dist/files/components/UploadQueue.d.ts.map +0 -1
  106. package/dist/files/components/index.d.ts +0 -43
  107. package/dist/files/components/index.d.ts.map +0 -1
  108. package/dist/files/components/viewers/AudioPlayer.d.ts +0 -8
  109. package/dist/files/components/viewers/AudioPlayer.d.ts.map +0 -1
  110. package/dist/files/components/viewers/CodeViewer.d.ts +0 -16
  111. package/dist/files/components/viewers/CodeViewer.d.ts.map +0 -1
  112. package/dist/files/components/viewers/ImageViewer.d.ts +0 -8
  113. package/dist/files/components/viewers/ImageViewer.d.ts.map +0 -1
  114. package/dist/files/components/viewers/PDFViewer.d.ts +0 -15
  115. package/dist/files/components/viewers/PDFViewer.d.ts.map +0 -1
  116. package/dist/files/components/viewers/TextViewer.d.ts +0 -8
  117. package/dist/files/components/viewers/TextViewer.d.ts.map +0 -1
  118. package/dist/files/components/viewers/VideoPlayer.d.ts +0 -8
  119. package/dist/files/components/viewers/VideoPlayer.d.ts.map +0 -1
  120. package/dist/files/components/viewers/index.d.ts +0 -7
  121. package/dist/files/components/viewers/index.d.ts.map +0 -1
  122. package/dist/files/components/viewers/index.js +0 -6
  123. package/dist/files/graphql-types.d.ts +0 -317
  124. package/dist/files/graphql-types.d.ts.map +0 -1
  125. package/dist/files/hooks/useBatchOperations.d.ts +0 -32
  126. package/dist/files/hooks/useBatchOperations.d.ts.map +0 -1
  127. package/dist/files/hooks/useBinItems.d.ts +0 -11
  128. package/dist/files/hooks/useBinItems.d.ts.map +0 -1
  129. package/dist/files/hooks/useBrowsePage.d.ts +0 -18
  130. package/dist/files/hooks/useBrowsePage.d.ts.map +0 -1
  131. package/dist/files/hooks/useCopyFile.d.ts +0 -14
  132. package/dist/files/hooks/useCopyFile.d.ts.map +0 -1
  133. package/dist/files/hooks/useCreateFolder.d.ts +0 -14
  134. package/dist/files/hooks/useCreateFolder.d.ts.map +0 -1
  135. package/dist/files/hooks/useCreateFolderShare.d.ts +0 -16
  136. package/dist/files/hooks/useCreateFolderShare.d.ts.map +0 -1
  137. package/dist/files/hooks/useCreateShare.d.ts +0 -16
  138. package/dist/files/hooks/useCreateShare.d.ts.map +0 -1
  139. package/dist/files/hooks/useDeleteFile.d.ts +0 -9
  140. package/dist/files/hooks/useDeleteFile.d.ts.map +0 -1
  141. package/dist/files/hooks/useDeleteFolder.d.ts +0 -10
  142. package/dist/files/hooks/useDeleteFolder.d.ts.map +0 -1
  143. package/dist/files/hooks/useDragDrop.d.ts +0 -31
  144. package/dist/files/hooks/useDragDrop.d.ts.map +0 -1
  145. package/dist/files/hooks/useFileVersions.d.ts +0 -52
  146. package/dist/files/hooks/useFileVersions.d.ts.map +0 -1
  147. package/dist/files/hooks/useFiles.d.ts +0 -18
  148. package/dist/files/hooks/useFiles.d.ts.map +0 -1
  149. package/dist/files/hooks/useFolder.d.ts +0 -7
  150. package/dist/files/hooks/useFolder.d.ts.map +0 -1
  151. package/dist/files/hooks/useFolderPath.d.ts +0 -2
  152. package/dist/files/hooks/useFolderPath.d.ts.map +0 -1
  153. package/dist/files/hooks/useFoldersQuery.d.ts +0 -7
  154. package/dist/files/hooks/useFoldersQuery.d.ts.map +0 -1
  155. package/dist/files/hooks/useKeyboardNavigation.d.ts +0 -17
  156. package/dist/files/hooks/useKeyboardNavigation.d.ts.map +0 -1
  157. package/dist/files/hooks/useMoveFile.d.ts +0 -10
  158. package/dist/files/hooks/useMoveFile.d.ts.map +0 -1
  159. package/dist/files/hooks/useMoveFolder.d.ts +0 -10
  160. package/dist/files/hooks/useMoveFolder.d.ts.map +0 -1
  161. package/dist/files/hooks/usePermanentlyDeleteFile.d.ts +0 -9
  162. package/dist/files/hooks/usePermanentlyDeleteFile.d.ts.map +0 -1
  163. package/dist/files/hooks/usePermanentlyDeleteFolder.d.ts +0 -9
  164. package/dist/files/hooks/usePermanentlyDeleteFolder.d.ts.map +0 -1
  165. package/dist/files/hooks/useRecentFiles.d.ts +0 -10
  166. package/dist/files/hooks/useRecentFiles.d.ts.map +0 -1
  167. package/dist/files/hooks/useRenameFile.d.ts +0 -10
  168. package/dist/files/hooks/useRenameFile.d.ts.map +0 -1
  169. package/dist/files/hooks/useRenameFolder.d.ts +0 -10
  170. package/dist/files/hooks/useRenameFolder.d.ts.map +0 -1
  171. package/dist/files/hooks/useRestoreFile.d.ts +0 -9
  172. package/dist/files/hooks/useRestoreFile.d.ts.map +0 -1
  173. package/dist/files/hooks/useRestoreFolder.d.ts +0 -9
  174. package/dist/files/hooks/useRestoreFolder.d.ts.map +0 -1
  175. package/dist/files/hooks/useSearch.d.ts +0 -15
  176. package/dist/files/hooks/useSearch.d.ts.map +0 -1
  177. package/dist/files/hooks/useStarredItems.d.ts +0 -10
  178. package/dist/files/hooks/useStarredItems.d.ts.map +0 -1
  179. package/dist/files/hooks/useToast.d.ts +0 -11
  180. package/dist/files/hooks/useToast.d.ts.map +0 -1
  181. package/dist/files/hooks/useToggleStar.d.ts +0 -10
  182. package/dist/files/hooks/useToggleStar.d.ts.map +0 -1
  183. package/dist/files/hooks/useUploadFile.d.ts +0 -25
  184. package/dist/files/hooks/useUploadFile.d.ts.map +0 -1
  185. package/dist/files/index.d.ts +0 -29
  186. package/dist/files/index.d.ts.map +0 -1
  187. package/dist/files/pages/BrowserPage.d.ts +0 -5
  188. package/dist/files/pages/BrowserPage.d.ts.map +0 -1
  189. package/dist/files/pages/ShareAccessPage.d.ts +0 -2
  190. package/dist/files/pages/ShareAccessPage.d.ts.map +0 -1
  191. package/dist/files/providers/FilesProvider.d.ts +0 -25
  192. package/dist/files/providers/FilesProvider.d.ts.map +0 -1
  193. package/dist/files/store/filesStore.d.ts +0 -99
  194. package/dist/files/store/filesStore.d.ts.map +0 -1
  195. package/dist/files/types.d.ts +0 -266
  196. package/dist/files/types.d.ts.map +0 -1
  197. package/dist/files/utils/events.d.ts +0 -6
  198. package/dist/files/utils/events.d.ts.map +0 -1
  199. package/dist/files/utils/i18n.d.ts +0 -5
  200. package/dist/files/utils/i18n.d.ts.map +0 -1
  201. package/dist/files/utils/index.d.ts +0 -74
  202. package/dist/files/utils/index.d.ts.map +0 -1
  203. package/dist/files/utils/thumbnail.d.ts +0 -5
  204. package/dist/files/utils/thumbnail.d.ts.map +0 -1
  205. package/dist/files.d.ts +0 -2
  206. package/dist/generated/global-operations.d.ts +0 -2
  207. package/dist/generated/global-operations.d.ts.map +0 -1
  208. package/dist/generated/global-types.d.ts +0 -23527
  209. package/dist/generated/global-types.d.ts.map +0 -1
  210. package/dist/generated/wspace-operations.d.ts +0 -2706
  211. package/dist/generated/wspace-operations.d.ts.map +0 -1
  212. package/dist/generated/wspace-types.d.ts +0 -57851
  213. package/dist/generated/wspace-types.d.ts.map +0 -1
  214. package/dist/index.d.ts +0 -30
  215. package/dist/index.d.ts.map +0 -1
  216. package/dist/shared/types/index.d.ts +0 -101
  217. package/dist/shared/types/index.d.ts.map +0 -1
  218. package/dist/translations/en.d.ts +0 -315
  219. package/dist/translations/en.d.ts.map +0 -1
  220. package/dist/utils/nativeBridge.d.ts +0 -3
  221. package/dist/utils/nativeBridge.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"VideoPlayer.js","names":[],"sources":["../../../../src/files/components/viewers/VideoPlayer.tsx"],"sourcesContent":["import { useState, useRef, useEffect } from \"react\";\nimport { Play, Pause, Volume2, VolumeX, Maximize } from \"lucide-react\";\nimport type { FileItem } from \"../../types\";\n\ninterface VideoPlayerProps {\n file: FileItem;\n url: string;\n}\n\nexport function VideoPlayer({ file, url }: VideoPlayerProps) {\n const videoRef = useRef<HTMLVideoElement>(null);\n const [isPlaying, setIsPlaying] = useState(false);\n const [currentTime, setCurrentTime] = useState(0);\n const [duration, setDuration] = useState(0);\n const [volume, setVolume] = useState(1);\n const [isMuted, setIsMuted] = useState(false);\n const [playbackRate, setPlaybackRate] = useState(1);\n\n useEffect(() => {\n const video = videoRef.current;\n if (!video) return;\n\n const handleTimeUpdate = () => setCurrentTime(video.currentTime);\n const handleLoadedMetadata = () => setDuration(video.duration);\n const handleEnded = () => setIsPlaying(false);\n\n video.addEventListener(\"timeupdate\", handleTimeUpdate);\n video.addEventListener(\"loadedmetadata\", handleLoadedMetadata);\n video.addEventListener(\"ended\", handleEnded);\n\n return () => {\n video.removeEventListener(\"timeupdate\", handleTimeUpdate);\n video.removeEventListener(\"loadedmetadata\", handleLoadedMetadata);\n video.removeEventListener(\"ended\", handleEnded);\n };\n }, []);\n\n const togglePlay = () => {\n if (videoRef.current) {\n if (isPlaying) {\n videoRef.current.pause();\n } else {\n videoRef.current.play();\n }\n setIsPlaying(!isPlaying);\n }\n };\n\n const handleSeek = (time: number) => {\n if (videoRef.current) {\n videoRef.current.currentTime = time;\n setCurrentTime(time);\n }\n };\n\n const handleVolumeChange = (newVolume: number) => {\n setVolume(newVolume);\n setIsMuted(newVolume === 0);\n if (videoRef.current) {\n videoRef.current.volume = newVolume;\n }\n };\n\n const toggleMute = () => {\n if (videoRef.current) {\n const newMuted = !isMuted;\n setIsMuted(newMuted);\n videoRef.current.muted = newMuted;\n }\n };\n\n const handlePlaybackRateChange = (rate: number) => {\n setPlaybackRate(rate);\n if (videoRef.current) {\n videoRef.current.playbackRate = rate;\n }\n };\n\n const handleFullscreen = () => {\n if (videoRef.current) {\n videoRef.current.requestFullscreen();\n }\n };\n\n const formatTime = (seconds: number): string => {\n const mins = Math.floor(seconds / 60);\n const secs = Math.floor(seconds % 60);\n return `${mins}:${secs.toString().padStart(2, \"0\")}`;\n };\n\n return (\n <div className=\"flex h-full flex-col bg-bg-canvas\">\n {/* Video */}\n <div className=\"flex-1 flex items-center justify-center\">\n <video\n ref={videoRef}\n src={url}\n className=\"max-w-full max-h-full\"\n onClick={togglePlay}\n />\n </div>\n\n {/* Controls */}\n <div className=\"bg-bg-surface border-t border-border-default p-4\">\n {/* Progress Bar */}\n <div className=\"mb-4\">\n <input\n type=\"range\"\n min={0}\n max={duration || 0}\n value={currentTime}\n onChange={(e) => handleSeek(Number(e.target.value))}\n className=\"w-full h-1 bg-bg-muted rounded-lg appearance-none cursor-pointer accent-action-primary-bg\"\n />\n <div className=\"flex justify-between mt-1 text-xs text-text-secondary\">\n <span>{formatTime(currentTime)}</span>\n <span>{formatTime(duration)}</span>\n </div>\n </div>\n\n {/* Control Buttons */}\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n {/* Play/Pause */}\n <button\n onClick={togglePlay}\n className=\"p-2 text-text-primary hover:bg-action-ghost-bg-hover rounded transition-colors duration-200\"\n title={isPlaying ? \"Pause\" : \"Play\"}\n aria-label={isPlaying ? \"Pause video\" : \"Play video\"}\n >\n {isPlaying ? (\n <Pause className=\"size-5\" />\n ) : (\n <Play className=\"size-5\" />\n )}\n </button>\n\n {/* Volume */}\n <div className=\"flex items-center gap-2\">\n <button\n onClick={toggleMute}\n className=\"p-2 text-text-secondary hover:text-text-primary hover:bg-action-ghost-bg-hover rounded transition-colors duration-200\"\n title={isMuted ? \"Unmute\" : \"Mute\"}\n aria-label={isMuted ? \"Unmute video\" : \"Mute video\"}\n >\n {isMuted ? (\n <VolumeX className=\"size-5\" />\n ) : (\n <Volume2 className=\"size-5\" />\n )}\n </button>\n <input\n type=\"range\"\n min={0}\n max={1}\n step={0.1}\n value={volume}\n onChange={(e) => handleVolumeChange(Number(e.target.value))}\n className=\"w-20 h-1 bg-bg-muted rounded-lg appearance-none cursor-pointer accent-action-primary-bg\"\n />\n </div>\n\n {/* Playback Speed */}\n <select\n value={playbackRate}\n onChange={(e) => handlePlaybackRateChange(Number(e.target.value))}\n className=\"px-2 py-1 text-sm bg-bg-surface border border-border-default rounded text-text-primary cursor-pointer\"\n >\n <option value=\"0.5\">0.5x</option>\n <option value=\"0.75\">0.75x</option>\n <option value=\"1\">1x</option>\n <option value=\"1.25\">1.25x</option>\n <option value=\"1.5\">1.5x</option>\n <option value=\"2\">2x</option>\n </select>\n </div>\n\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm text-text-secondary\">{file.name}</span>\n <button\n onClick={handleFullscreen}\n className=\"p-2 text-text-secondary hover:text-text-primary hover:bg-action-ghost-bg-hover rounded transition-colors duration-200\"\n title=\"Fullscreen\"\n aria-label=\"Open fullscreen\"\n >\n <Maximize className=\"size-5\" />\n </button>\n </div>\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"VideoPlayer.js","names":[],"sources":["../../../../src/files/components/viewers/VideoPlayer.tsx"],"sourcesContent":["import { useState, useRef, useEffect } from \"react\";\nimport { Play, Pause, Volume2, VolumeX, Maximize } from \"lucide-react\";\nimport type { FileItem } from \"../../types\";\n\ninterface VideoPlayerProps {\n file: FileItem;\n url: string;\n}\n\nexport function VideoPlayer({ file, url }: VideoPlayerProps) {\n const videoRef = useRef<HTMLVideoElement>(null);\n const [isPlaying, setIsPlaying] = useState(false);\n const [currentTime, setCurrentTime] = useState(0);\n const [duration, setDuration] = useState(0);\n const [volume, setVolume] = useState(1);\n const [isMuted, setIsMuted] = useState(false);\n const [playbackRate, setPlaybackRate] = useState(1);\n\n useEffect(() => {\n const video = videoRef.current;\n if (!video) return;\n\n const handleTimeUpdate = () => setCurrentTime(video.currentTime);\n const handleLoadedMetadata = () => setDuration(video.duration);\n const handleEnded = () => setIsPlaying(false);\n\n video.addEventListener(\"timeupdate\", handleTimeUpdate);\n video.addEventListener(\"loadedmetadata\", handleLoadedMetadata);\n video.addEventListener(\"ended\", handleEnded);\n\n return () => {\n video.removeEventListener(\"timeupdate\", handleTimeUpdate);\n video.removeEventListener(\"loadedmetadata\", handleLoadedMetadata);\n video.removeEventListener(\"ended\", handleEnded);\n };\n }, []);\n\n const togglePlay = () => {\n if (videoRef.current) {\n if (isPlaying) {\n videoRef.current.pause();\n } else {\n videoRef.current.play();\n }\n setIsPlaying(!isPlaying);\n }\n };\n\n const handleSeek = (time: number) => {\n if (videoRef.current) {\n videoRef.current.currentTime = time;\n setCurrentTime(time);\n }\n };\n\n const handleVolumeChange = (newVolume: number) => {\n setVolume(newVolume);\n setIsMuted(newVolume === 0);\n if (videoRef.current) {\n videoRef.current.volume = newVolume;\n }\n };\n\n const toggleMute = () => {\n if (videoRef.current) {\n const newMuted = !isMuted;\n setIsMuted(newMuted);\n videoRef.current.muted = newMuted;\n }\n };\n\n const handlePlaybackRateChange = (rate: number) => {\n setPlaybackRate(rate);\n if (videoRef.current) {\n videoRef.current.playbackRate = rate;\n }\n };\n\n const handleFullscreen = () => {\n if (videoRef.current) {\n videoRef.current.requestFullscreen();\n }\n };\n\n const formatTime = (seconds: number): string => {\n const mins = Math.floor(seconds / 60);\n const secs = Math.floor(seconds % 60);\n return `${mins}:${secs.toString().padStart(2, \"0\")}`;\n };\n\n return (\n <div className=\"flex h-full flex-col bg-bg-canvas\">\n {/* Video */}\n <div className=\"flex-1 flex items-center justify-center\">\n <video\n ref={videoRef}\n src={url}\n className=\"max-w-full max-h-full\"\n onClick={togglePlay}\n >\n <track kind=\"captions\" />\n </video>\n </div>\n\n {/* Controls */}\n <div className=\"bg-bg-surface border-t border-border-default p-4\">\n {/* Progress Bar */}\n <div className=\"mb-4\">\n <input\n type=\"range\"\n min={0}\n max={duration || 0}\n value={currentTime}\n onChange={(e) => handleSeek(Number(e.target.value))}\n className=\"w-full h-1 bg-bg-muted rounded-lg appearance-none cursor-pointer accent-action-primary-bg\"\n />\n <div className=\"flex justify-between mt-1 text-xs text-text-secondary\">\n <span>{formatTime(currentTime)}</span>\n <span>{formatTime(duration)}</span>\n </div>\n </div>\n\n {/* Control Buttons */}\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n {/* Play/Pause */}\n <button\n type=\"button\"\n onClick={togglePlay}\n className=\"p-2 text-text-primary hover:bg-action-ghost-bg-hover rounded transition-colors duration-200\"\n title={isPlaying ? \"Pause\" : \"Play\"}\n aria-label={isPlaying ? \"Pause video\" : \"Play video\"}\n >\n {isPlaying ? (\n <Pause className=\"size-5\" />\n ) : (\n <Play className=\"size-5\" />\n )}\n </button>\n\n {/* Volume */}\n <div className=\"flex items-center gap-2\">\n <button\n type=\"button\"\n onClick={toggleMute}\n className=\"p-2 text-text-secondary hover:text-text-primary hover:bg-action-ghost-bg-hover rounded transition-colors duration-200\"\n title={isMuted ? \"Unmute\" : \"Mute\"}\n aria-label={isMuted ? \"Unmute video\" : \"Mute video\"}\n >\n {isMuted ? (\n <VolumeX className=\"size-5\" />\n ) : (\n <Volume2 className=\"size-5\" />\n )}\n </button>\n <input\n type=\"range\"\n min={0}\n max={1}\n step={0.1}\n value={volume}\n onChange={(e) => handleVolumeChange(Number(e.target.value))}\n className=\"w-20 h-1 bg-bg-muted rounded-lg appearance-none cursor-pointer accent-action-primary-bg\"\n />\n </div>\n\n {/* Playback Speed */}\n <select\n value={playbackRate}\n onChange={(e) => handlePlaybackRateChange(Number(e.target.value))}\n className=\"px-2 py-1 text-sm bg-bg-surface border border-border-default rounded text-text-primary cursor-pointer\"\n >\n <option value=\"0.5\">0.5x</option>\n <option value=\"0.75\">0.75x</option>\n <option value=\"1\">1x</option>\n <option value=\"1.25\">1.25x</option>\n <option value=\"1.5\">1.5x</option>\n <option value=\"2\">2x</option>\n </select>\n </div>\n\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm text-text-secondary\">{file.name}</span>\n <button\n type=\"button\"\n onClick={handleFullscreen}\n className=\"p-2 text-text-secondary hover:text-text-primary hover:bg-action-ghost-bg-hover rounded transition-colors duration-200\"\n title=\"Fullscreen\"\n aria-label=\"Open fullscreen\"\n >\n <Maximize className=\"size-5\" />\n </button>\n </div>\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useBatchOperations.js","names":[],"sources":["../../../src/files/hooks/useBatchOperations.ts"],"sourcesContent":["import {\n useBulkDeleteFilesMutation,\n useBulkMoveFilesMutation,\n useBulkPermanentlyDeleteFilesMutation,\n useBulkPermanentlyDeleteFoldersMutation,\n useBulkUpdateVisibilityMutation,\n} from \"../../generated/wspace-operations\";\n\nexport const useBulkDelete = () => {\n const [bulkDeleteFilesMutation, { loading, error }] =\n useBulkDeleteFilesMutation({\n refetchQueries: [\"GetFiles\", \"GetFolders\", \"GetBinFiles\"],\n });\n\n return {\n mutateAsync: async (ids: string[]) => {\n const result = await bulkDeleteFilesMutation({\n variables: { ids },\n });\n\n return result.data?.bulkDeleteFiles;\n },\n isPending: loading,\n error,\n };\n};\n\nexport const useBulkMove = () => {\n const [bulkMoveFilesMutation, { loading, error }] = useBulkMoveFilesMutation({\n refetchQueries: [\"GetFiles\", \"GetFolders\", \"GetRecentFiles\"],\n });\n\n return {\n mutateAsync: async (input: {\n ids: string[];\n targetFolderId: string | null;\n }) => {\n const result = await bulkMoveFilesMutation({\n variables: {\n ids: input.ids,\n targetFolderId: input.targetFolderId,\n },\n });\n\n return result.data?.bulkMoveFiles;\n },\n isPending: loading,\n error,\n };\n};\n\nexport const useBulkUpdateVisibility = () => {\n const [bulkUpdateVisibilityMutation, { loading, error }] =\n useBulkUpdateVisibilityMutation({\n refetchQueries: [\"GetFiles\", \"GetFolders\"],\n });\n\n return {\n mutateAsync: async (input: { ids: string[]; visibility: string }) => {\n const result = await bulkUpdateVisibilityMutation({\n variables: {\n ids: input.ids,\n visibility: input.visibility as never,\n },\n });\n\n return result.data?.bulkUpdateVisibility;\n },\n isPending: loading,\n error,\n };\n};\n\nexport const useBulkPermanentlyDeleteFiles = () => {\n const [bulkPermanentlyDeleteFilesMutation, { loading, error }] =\n useBulkPermanentlyDeleteFilesMutation({\n refetchQueries: [\"GetBinFiles\", \"GetFiles\"],\n });\n\n return {\n mutateAsync: async (ids: string[]) => {\n const result = await bulkPermanentlyDeleteFilesMutation({\n variables: { ids },\n });\n\n return result.data?.bulkPermanentlyDeleteFiles;\n },\n isPending: loading,\n error,\n };\n};\n\nexport const useBulkPermanentlyDeleteFolders = () => {\n const [bulkPermanentlyDeleteFoldersMutation, { loading, error }] =\n useBulkPermanentlyDeleteFoldersMutation({\n refetchQueries: [\"GetBinFolders\", \"GetFolders\"],\n });\n\n return {\n mutateAsync: async (ids: string[]) => {\n const result = await bulkPermanentlyDeleteFoldersMutation({\n variables: { ids },\n });\n\n return result.data?.bulkPermanentlyDeleteFolders;\n },\n isPending: loading,\n error,\n };\n};\n"],"mappings":";;AAQA,IAAa,UAAsB;CACjC,IAAM,CAAC,GAAyB,EAAE,YAAS,cACzC,EAA2B,EACzB,gBAAgB;EAAC;EAAY;EAAc;EAAc,EAC1D,CAAC;AAEJ,QAAO;EACL,aAAa,OAAO,OACH,MAAM,EAAwB,EAC3C,WAAW,EAAE,QAAK,EACnB,CAAC,EAEY,MAAM;EAEtB,WAAW;EACX;EACD"}
1
+ {"version":3,"file":"useBatchOperations.js","names":[],"sources":["../../../src/files/hooks/useBatchOperations.ts"],"sourcesContent":["import { useBulkDeleteFilesMutation } from \"../../generated/wspace-operations\";\n\nexport const useBulkDelete = () => {\n const [bulkDeleteFilesMutation, { loading, error }] =\n useBulkDeleteFilesMutation({\n refetchQueries: [\"GetFiles\", \"GetFolders\", \"GetBinFiles\"],\n });\n\n return {\n mutateAsync: async (ids: string[]) => {\n const result = await bulkDeleteFilesMutation({\n variables: { ids },\n });\n\n return result.data?.bulkDeleteFiles;\n },\n isPending: loading,\n error,\n };\n};\n"],"mappings":";;AAEA,IAAa,UAAsB;CACjC,IAAM,CAAC,GAAyB,EAAE,YAAS,cACzC,EAA2B,EACzB,gBAAgB;EAAC;EAAY;EAAc;EAAc,EAC1D,CAAC;AAEJ,QAAO;EACL,aAAa,OAAO,OACH,MAAM,EAAwB,EAC3C,WAAW,EAAE,QAAK,EACnB,CAAC,EAEY,MAAM;EAEtB,WAAW;EACX;EACD"}
@@ -1 +1 @@
1
- {"version":3,"file":"useFileVersions.js","names":[],"sources":["../../../src/files/hooks/useFileVersions.ts"],"sourcesContent":["import {\n useCreateFileVersionMutation,\n useDeleteFileVersionMutation,\n useGetFileVersionDownloadUrlLazyQuery,\n useGetFileVersionsQuery,\n useRestoreFileVersionMutation,\n} from \"../../generated/wspace-operations\";\n\n/**\n * Hook to fetch all versions for a file\n */\nexport const useFileVersions = (_fileId: string, _enabled: boolean = true) => {\n const query = useGetFileVersionsQuery({\n variables: {\n fileId: _fileId,\n pagination: { limit: 50 },\n },\n skip: !_enabled || !_fileId,\n });\n\n return {\n data: query.data?.getFileVersions ?? null,\n isLoading: query.loading,\n error: (query.error as Error | null) ?? null,\n refetch: query.refetch,\n };\n};\n\n/**\n * Hook to create a new file version\n */\nexport const useCreateFileVersion = () => {\n const [createFileVersionMutation, { loading, error }] =\n useCreateFileVersionMutation({\n refetchQueries: [\"GetFileVersions\"],\n });\n\n return {\n mutateAsync: async (input: {\n fileId: string;\n versionLabel?: string;\n changeMessage?: string;\n isMajorVersion?: boolean;\n }) => {\n const result = await createFileVersionMutation({\n variables: { input },\n });\n\n return result.data?.createFileVersion;\n },\n isPending: loading,\n error,\n };\n};\n\n/**\n * Hook to restore a previous version\n */\nexport const useRestoreFileVersion = () => {\n const [restoreFileVersionMutation, { loading, error }] =\n useRestoreFileVersionMutation({\n refetchQueries: [\"GetFileVersions\"],\n });\n\n return {\n mutateAsync: async (input: {\n versionId: string;\n createNewVersion?: boolean;\n changeMessage?: string;\n }) => {\n const result = await restoreFileVersionMutation({\n variables: {\n input: {\n versionId: input.versionId,\n createNewVersion: input.createNewVersion,\n changeMessage: input.changeMessage,\n },\n },\n });\n\n return result.data?.restoreFileVersion;\n },\n isPending: loading,\n error,\n };\n};\n\n/**\n * Hook to delete a specific version\n */\nexport const useDeleteFileVersion = () => {\n const [deleteFileVersionMutation, { loading, error }] =\n useDeleteFileVersionMutation({\n refetchQueries: [\"GetFileVersions\"],\n });\n\n return {\n mutateAsync: async (versionId: string) => {\n const result = await deleteFileVersionMutation({\n variables: { versionId },\n });\n\n return result.data?.deleteFileVersion;\n },\n isPending: loading,\n error,\n };\n};\n\n/**\n * Hook to get download URL for a specific version\n */\nexport const useVersionDownloadUrl = (\n _versionId?: string,\n _expiresIn?: number,\n) => {\n const [getDownloadUrl, { data, loading, error }] =\n useGetFileVersionDownloadUrlLazyQuery();\n\n return {\n data: data?.getFileVersionDownloadUrl,\n isLoading: loading,\n error,\n getDownloadUrl: async (versionId = _versionId, expiresIn = _expiresIn) => {\n if (!versionId) {\n return undefined;\n }\n\n const result = await getDownloadUrl({\n variables: { versionId, expiresIn },\n });\n\n return result.data?.getFileVersionDownloadUrl;\n },\n };\n};\n"],"mappings":";;AAWA,IAAa,KAAmB,GAAiB,IAAoB,OAAS;CAC5E,IAAM,IAAQ,EAAwB;EACpC,WAAW;GACT,QAAQ;GACR,YAAY,EAAE,OAAO,IAAI;GAC1B;EACD,MAAM,CAAC,KAAY,CAAC;EACrB,CAAC;AAEF,QAAO;EACL,MAAM,EAAM,MAAM,mBAAmB;EACrC,WAAW,EAAM;EACjB,OAAQ,EAAM,SAA0B;EACxC,SAAS,EAAM;EAChB;GAiCU,UAA8B;CACzC,IAAM,CAAC,GAA4B,EAAE,YAAS,cAC5C,EAA8B,EAC5B,gBAAgB,CAAC,kBAAkB,EACpC,CAAC;AAEJ,QAAO;EACL,aAAa,OAAO,OAKH,MAAM,EAA2B,EAC9C,WAAW,EACT,OAAO;GACL,WAAW,EAAM;GACjB,kBAAkB,EAAM;GACxB,eAAe,EAAM;GACtB,EACF,EACF,CAAC,EAEY,MAAM;EAEtB,WAAW;EACX;EACD;GAMU,UAA6B;CACxC,IAAM,CAAC,GAA2B,EAAE,YAAS,cAC3C,EAA6B,EAC3B,gBAAgB,CAAC,kBAAkB,EACpC,CAAC;AAEJ,QAAO;EACL,aAAa,OAAO,OACH,MAAM,EAA0B,EAC7C,WAAW,EAAE,cAAW,EACzB,CAAC,EAEY,MAAM;EAEtB,WAAW;EACX;EACD;GAMU,KACX,GACA,MACG;CACH,IAAM,CAAC,GAAgB,EAAE,SAAM,YAAS,cACtC,GAAuC;AAEzC,QAAO;EACL,MAAM,GAAM;EACZ,WAAW;EACX;EACA,gBAAgB,OAAO,IAAY,GAAY,IAAY,MAAe;AACnE,SAQL,SAJe,MAAM,EAAe,EAClC,WAAW;IAAE;IAAW;IAAW,EACpC,CAAC,EAEY,MAAM;;EAEvB"}
1
+ {"version":3,"file":"useFileVersions.js","names":[],"sources":["../../../src/files/hooks/useFileVersions.ts"],"sourcesContent":["import {\n useDeleteFileVersionMutation,\n useGetFileVersionDownloadUrlLazyQuery,\n useGetFileVersionsQuery,\n useRestoreFileVersionMutation,\n} from \"../../generated/wspace-operations\";\n\nexport const useFileVersions = (_fileId: string, _enabled: boolean = true) => {\n const query = useGetFileVersionsQuery({\n variables: {\n fileId: _fileId,\n pagination: { limit: 50 },\n },\n skip: !_enabled || !_fileId,\n });\n\n return {\n data: query.data?.getFileVersions ?? null,\n isLoading: query.loading,\n error: (query.error as Error | null) ?? null,\n refetch: query.refetch,\n };\n};\n\n/**\n * Hook to restore a previous version\n */\nexport const useRestoreFileVersion = () => {\n const [restoreFileVersionMutation, { loading, error }] =\n useRestoreFileVersionMutation({\n refetchQueries: [\"GetFileVersions\"],\n });\n\n return {\n mutateAsync: async (input: {\n versionId: string;\n createNewVersion?: boolean;\n changeMessage?: string;\n }) => {\n const result = await restoreFileVersionMutation({\n variables: {\n input: {\n versionId: input.versionId,\n createNewVersion: input.createNewVersion,\n changeMessage: input.changeMessage,\n },\n },\n });\n\n return result.data?.restoreFileVersion;\n },\n isPending: loading,\n error,\n };\n};\n\n/**\n * Hook to delete a specific version\n */\nexport const useDeleteFileVersion = () => {\n const [deleteFileVersionMutation, { loading, error }] =\n useDeleteFileVersionMutation({\n refetchQueries: [\"GetFileVersions\"],\n });\n\n return {\n mutateAsync: async (versionId: string) => {\n const result = await deleteFileVersionMutation({\n variables: { versionId },\n });\n\n return result.data?.deleteFileVersion;\n },\n isPending: loading,\n error,\n };\n};\n\n/**\n * Hook to get download URL for a specific version\n */\nexport const useVersionDownloadUrl = (\n _versionId?: string,\n _expiresIn?: number,\n) => {\n const [getDownloadUrl, { data, loading, error }] =\n useGetFileVersionDownloadUrlLazyQuery();\n\n return {\n data: data?.getFileVersionDownloadUrl,\n isLoading: loading,\n error,\n getDownloadUrl: async (versionId = _versionId, expiresIn = _expiresIn) => {\n if (!versionId) {\n return undefined;\n }\n\n const result = await getDownloadUrl({\n variables: { versionId, expiresIn },\n });\n\n return result.data?.getFileVersionDownloadUrl;\n },\n };\n};\n"],"mappings":";;AAOA,IAAa,KAAmB,GAAiB,IAAoB,OAAS;CAC5E,IAAM,IAAQ,EAAwB;EACpC,WAAW;GACT,QAAQ;GACR,YAAY,EAAE,OAAO,IAAI;GAC1B;EACD,MAAM,CAAC,KAAY,CAAC;EACrB,CAAC;AAEF,QAAO;EACL,MAAM,EAAM,MAAM,mBAAmB;EACrC,WAAW,EAAM;EACjB,OAAQ,EAAM,SAA0B;EACxC,SAAS,EAAM;EAChB;GAMU,UAA8B;CACzC,IAAM,CAAC,GAA4B,EAAE,YAAS,cAC5C,EAA8B,EAC5B,gBAAgB,CAAC,kBAAkB,EACpC,CAAC;AAEJ,QAAO;EACL,aAAa,OAAO,OAKH,MAAM,EAA2B,EAC9C,WAAW,EACT,OAAO;GACL,WAAW,EAAM;GACjB,kBAAkB,EAAM;GACxB,eAAe,EAAM;GACtB,EACF,EACF,CAAC,EAEY,MAAM;EAEtB,WAAW;EACX;EACD;GAMU,UAA6B;CACxC,IAAM,CAAC,GAA2B,EAAE,YAAS,cAC3C,EAA6B,EAC3B,gBAAgB,CAAC,kBAAkB,EACpC,CAAC;AAEJ,QAAO;EACL,aAAa,OAAO,OACH,MAAM,EAA0B,EAC7C,WAAW,EAAE,cAAW,EACzB,CAAC,EAEY,MAAM;EAEtB,WAAW;EACX;EACD;GAMU,KACX,GACA,MACG;CACH,IAAM,CAAC,GAAgB,EAAE,SAAM,YAAS,cACtC,GAAuC;AAEzC,QAAO;EACL,MAAM,GAAM;EACZ,WAAW;EACX;EACA,gBAAgB,OAAO,IAAY,GAAY,IAAY,MAAe;AACnE,SAQL,SAJe,MAAM,EAAe,EAClC,WAAW;IAAE;IAAW;IAAW,EACpC,CAAC,EAEY,MAAM;;EAEvB"}
@@ -581,6 +581,7 @@ function d() {
581
581
  children: /* @__PURE__ */ u("div", {
582
582
  className: "flex items-center gap-1 sm:gap-2 text-sm overflow-x-auto",
583
583
  children: [/* @__PURE__ */ u("button", {
584
+ type: "button",
584
585
  onClick: () => et("/files/browse"),
585
586
  className: "flex items-center gap-1 text-text-primary hover:bg-action-ghost-bg-hover px-2 py-1 rounded transition-colors duration-200 whitespace-nowrap",
586
587
  title: a(d, "files.browser.actions.goToRoot", "Go to root"),
@@ -594,6 +595,7 @@ function d() {
594
595
  className: "text-text-tertiary",
595
596
  children: "/"
596
597
  }), /* @__PURE__ */ l("button", {
598
+ type: "button",
597
599
  onClick: () => et(`/files/browse/${e.id}`),
598
600
  className: `hover:bg-action-ghost-bg-hover px-2 py-1 rounded transition-colors duration-200 whitespace-nowrap ${t === it.length - 1 ? "text-text-primary font-medium" : "text-text-secondary"}`,
599
601
  title: `Go to ${e.name}`,
@@ -630,6 +632,7 @@ function d() {
630
632
  className: "flex items-center gap-2 order-1 sm:order-2 w-full sm:w-auto justify-between sm:justify-end",
631
633
  children: [
632
634
  !y && (D.length > 0 || O.length > 0) && /* @__PURE__ */ l("button", {
635
+ type: "button",
633
636
  onClick: () => {
634
637
  let e = D.map((e) => e.id), n = O.map((e) => e.id);
635
638
  t.getState().selectAllFiles(e), n.forEach((e) => t.getState().selectFolder(e));
@@ -639,6 +642,7 @@ function d() {
639
642
  }),
640
643
  !y && /* @__PURE__ */ u(c, { children: [
641
644
  /* @__PURE__ */ u("button", {
645
+ type: "button",
642
646
  onClick: $t,
643
647
  className: "flex items-center gap-1 sm:gap-2 px-2 sm:px-4 py-2 text-xs sm:text-sm font-medium text-text-primary bg-bg-surface border border-border-default rounded-lg hover:bg-action-ghost-bg-hover hover:border-border-default transition-all duration-200 shadow-sm",
644
648
  children: [/* @__PURE__ */ l(Be, { className: "size-4" }), /* @__PURE__ */ l("span", {
@@ -647,6 +651,7 @@ function d() {
647
651
  })]
648
652
  }),
649
653
  /* @__PURE__ */ l("button", {
654
+ type: "button",
650
655
  onClick: qt,
651
656
  disabled: Dt,
652
657
  className: "flex items-center gap-1 sm:gap-2 px-2 sm:px-4 py-2 text-xs sm:text-sm font-medium text-text-primary bg-bg-surface border border-border-default rounded-lg hover:bg-action-ghost-bg-hover hover:border-border-default transition-all duration-200 shadow-sm disabled:opacity-50 disabled:cursor-not-allowed",
@@ -659,6 +664,7 @@ function d() {
659
664
  })] })
660
665
  }),
661
666
  /* @__PURE__ */ u("button", {
667
+ type: "button",
662
668
  onClick: Qt,
663
669
  disabled: Dt,
664
670
  className: "hidden sm:flex items-center gap-2 px-4 py-2.5 text-sm font-medium text-text-primary bg-bg-surface border border-border-default rounded-lg hover:bg-action-ghost-bg-hover hover:border-border-default transition-all duration-200 shadow-sm disabled:opacity-50 disabled:cursor-not-allowed",
@@ -669,11 +675,13 @@ function d() {
669
675
  /* @__PURE__ */ u("div", {
670
676
  className: "flex items-center border border-border-default rounded-lg overflow-hidden",
671
677
  children: [/* @__PURE__ */ l("button", {
678
+ type: "button",
672
679
  onClick: () => rt("grid"),
673
680
  className: `p-2 transition-colors duration-200 ${nt === "grid" ? "bg-bg-accent text-text-link" : "text-text-secondary hover:bg-action-ghost-bg-hover"}`,
674
681
  "aria-label": a(d, "files.browser.view.grid", "Grid view"),
675
682
  children: /* @__PURE__ */ l(Ue, { className: "size-5" })
676
683
  }), /* @__PURE__ */ l("button", {
684
+ type: "button",
677
685
  onClick: () => rt("list"),
678
686
  className: `p-2 transition-colors duration-200 ${nt === "list" ? "bg-bg-accent text-text-link" : "text-text-secondary hover:bg-action-ghost-bg-hover"}`,
679
687
  "aria-label": a(d, "files.browser.view.list", "List view"),
@@ -689,6 +697,7 @@ function d() {
689
697
  className: "text-sm font-medium text-status-success-text",
690
698
  children: [a(d, "files.browser.search.showingResults", "Showing search results for \"{{query}}\"", { query: v }), E.data && ` (${(E.data.files?.length || 0) + (E.data.folders?.length || 0)} items)`]
691
699
  }), /* @__PURE__ */ u("button", {
700
+ type: "button",
692
701
  onClick: () => dt(""),
693
702
  className: "flex items-center gap-2 text-status-success-text hover:text-status-success-text/80 text-sm font-medium transition-colors duration-200",
694
703
  children: [/* @__PURE__ */ l(Ye, { className: "size-4" }), a(d, "files.browser.search.clear", "Clear search")]
@@ -707,6 +716,7 @@ function d() {
707
716
  }), /* @__PURE__ */ l("div", {
708
717
  className: "flex items-center gap-2",
709
718
  children: _ === "bin" ? /* @__PURE__ */ u(c, { children: [/* @__PURE__ */ l("button", {
719
+ type: "button",
710
720
  onClick: async () => {
711
721
  try {
712
722
  for (let e of Array.from(m)) await Pt.mutateAsync({ id: e });
@@ -719,6 +729,7 @@ function d() {
719
729
  className: "flex items-center gap-1.5 rounded-lg border border-status-success-border bg-bg-surface px-3 py-1.5 text-sm font-medium text-status-success-text transition-colors duration-200 hover:bg-status-success-bg-subtle",
720
730
  children: a(d, "files.browser.selection.actions.restore", "Restore")
721
731
  }), /* @__PURE__ */ u("button", {
732
+ type: "button",
722
733
  onClick: async () => {
723
734
  X({
724
735
  title: a(d, "files.confirm.bulkPermanentDelete.title", "Permanently delete selected items"),
@@ -745,6 +756,7 @@ function d() {
745
756
  className: "flex items-center gap-1.5 px-3 py-1.5 text-sm font-medium text-status-error-text bg-bg-surface border border-status-error-border rounded-lg hover:bg-status-error-bg-subtle transition-colors duration-200",
746
757
  children: [/* @__PURE__ */ l(qe, { className: "size-4" }), a(d, "files.browser.selection.actions.deletePermanently", "Delete permanently")]
747
758
  })] }) : /* @__PURE__ */ u("button", {
759
+ type: "button",
748
760
  onClick: async () => {
749
761
  X({
750
762
  title: a(d, "files.confirm.bulkDelete.title", "Delete selected items"),
@@ -777,6 +789,7 @@ function d() {
777
789
  })
778
790
  })]
779
791
  }), /* @__PURE__ */ u("button", {
792
+ type: "button",
780
793
  onClick: g,
781
794
  className: "flex items-center gap-2 text-text-link hover:text-action-primary-bg-hover text-sm font-medium transition-colors duration-200",
782
795
  children: [/* @__PURE__ */ l(Ye, { className: "size-4" }), a(d, "files.common.actions.clear", "Clear")]
@@ -836,18 +849,19 @@ function d() {
836
849
  e.key === "Enter" && en(), e.key === "Escape" && (yt(!1), G(""));
837
850
  },
838
851
  placeholder: a(d, "files.browser.newFolderDialog.placeholder", "Folder name"),
839
- autoFocus: !0,
840
852
  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"
841
853
  }),
842
854
  /* @__PURE__ */ u("div", {
843
855
  className: "flex justify-end gap-2 mt-6",
844
856
  children: [/* @__PURE__ */ l("button", {
857
+ type: "button",
845
858
  onClick: () => {
846
859
  yt(!1), G("");
847
860
  },
848
861
  className: "px-6 py-2.5 text-sm font-medium text-text-primary hover:bg-action-ghost-bg-hover rounded-lg transition-colors duration-200",
849
862
  children: a(d, "files.common.actions.cancel", "Cancel")
850
863
  }), /* @__PURE__ */ u("button", {
864
+ type: "button",
851
865
  onClick: en,
852
866
  disabled: !W.trim() || Q.isPending,
853
867
  className: "px-6 py-2.5 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",
@@ -878,18 +892,19 @@ function d() {
878
892
  e.key === "Enter" && Tn(), e.key === "Escape" && (N(!1), V(null), U(""));
879
893
  },
880
894
  placeholder: a(d, "files.browser.renameDialog.placeholder", "New name"),
881
- autoFocus: !0,
882
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"
883
896
  }),
884
897
  /* @__PURE__ */ u("div", {
885
898
  className: "flex justify-end gap-2 mt-6",
886
899
  children: [/* @__PURE__ */ l("button", {
900
+ type: "button",
887
901
  onClick: () => {
888
902
  N(!1), V(null), U("");
889
903
  },
890
904
  className: "px-6 py-2.5 text-sm font-medium text-text-primary hover:bg-action-ghost-bg-hover rounded-lg transition-colors duration-200",
891
905
  children: a(d, "files.common.actions.cancel", "Cancel")
892
906
  }), /* @__PURE__ */ u("button", {
907
+ type: "button",
893
908
  onClick: Tn,
894
909
  disabled: !H.trim() || H.trim() === B.name || zt.isPending || Bt.isPending,
895
910
  className: "px-6 py-2.5 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",
@@ -986,6 +1001,7 @@ function d() {
986
1001
  children: a(d, "files.browser.empty.search.description", "Try adjusting your search query or filters")
987
1002
  }),
988
1003
  /* @__PURE__ */ l("button", {
1004
+ type: "button",
989
1005
  onClick: () => {
990
1006
  dt(""), pt(void 0);
991
1007
  },