diff --git a/frontend/src/components/drive/dialogs/PreviewDialog.jsx b/frontend/src/components/drive/dialogs/PreviewDialog.jsx
index 4c7094c..09d2748 100644
--- a/frontend/src/components/drive/dialogs/PreviewDialog.jsx
+++ b/frontend/src/components/drive/dialogs/PreviewDialog.jsx
@@ -22,6 +22,7 @@ function Preview({ item, url, onError, fullscreen }) {
const textHeight = fullscreen ? 'h-full min-h-0' : 'h-[65dvh]'
if ((mime.startsWith('image/') && mime !== 'image/svg+xml') || /\.(jpe?g|png|gif|webp|avif|bmp)$/.test(name)) return

+ if (/\.(gdoc|gsheet|gslides)$/.test(name)) return
if (/\.(docx|odt|ods|odp)$/.test(name)) return
if (mime === 'application/pdf' || name.endsWith('.pdf')) return
if (mime.startsWith('video/') || /\.(mp4|webm|ogv|mov|m4v)$/.test(name)) return
diff --git a/frontend/src/components/ui/scroll-area.jsx b/frontend/src/components/ui/scroll-area.jsx
index e9909ac..efc04da 100644
--- a/frontend/src/components/ui/scroll-area.jsx
+++ b/frontend/src/components/ui/scroll-area.jsx
@@ -36,14 +36,14 @@ function ScrollBar({
data-orientation={orientation}
orientation={orientation}
className={cn(
- "flex touch-none p-px transition-colors select-none data-horizontal:h-2.5 data-horizontal:flex-col data-horizontal:border-t data-horizontal:border-t-transparent data-vertical:h-full data-vertical:w-2.5 data-vertical:border-l data-vertical:border-l-transparent",
+ "flex touch-none rounded-full bg-muted/40 p-px transition-colors select-none hover:bg-muted/60 data-horizontal:h-2.5 data-horizontal:flex-col data-vertical:h-full data-vertical:w-2.5",
className
)}
{...props}
>
)
diff --git a/frontend/src/config/creatable-files.js b/frontend/src/config/creatable-files.js
index 7755e2f..13465c1 100644
--- a/frontend/src/config/creatable-files.js
+++ b/frontend/src/config/creatable-files.js
@@ -24,11 +24,3 @@ export const localFileGroups = [
{ label: 'Impress', extension: 'odp', suggestedName: 'Présentation' },
] },
]
-
-// Google-native Docs/Sheets/Slides are cloud objects, not blank local files.
-// These links create them on Google's service; they are not saved to GoodDrive.
-export const googleFileTypes = [
- { label: 'Google Docs (externe)', url: 'https://docs.google.com/document/u/0/create' },
- { label: 'Google Sheets (externe)', url: 'https://docs.google.com/spreadsheets/u/0/create' },
- { label: 'Google Slides (externe)', url: 'https://docs.google.com/presentation/u/0/create' },
-]
diff --git a/frontend/src/index.css b/frontend/src/index.css
index ffd382a..df23d2d 100644
--- a/frontend/src/index.css
+++ b/frontend/src/index.css
@@ -47,3 +47,18 @@
.gooddrive-preview-dialog[data-preview-fullscreen="true"] {
transition: width 120ms ease, height 120ms ease;
}
+
+/* Scrollbars consistent with the shadcn theme, including native overflow panels. */
+:root { scrollbar-color: color-mix(in oklab, var(--muted-foreground) 42%, transparent) transparent; scrollbar-width: thin; }
+*::-webkit-scrollbar { width: 9px; height: 9px; }
+*::-webkit-scrollbar-track { background: transparent; }
+*::-webkit-scrollbar-thumb {
+ border: 2px solid transparent;
+ border-radius: 999px;
+ background: color-mix(in oklab, var(--muted-foreground) 35%, transparent);
+ background-clip: padding-box;
+}
+*::-webkit-scrollbar-thumb:hover {
+ background: color-mix(in oklab, var(--primary) 62%, transparent);
+ background-clip: padding-box;
+}
diff --git a/frontend/src/pages/AdminUsersPage.jsx b/frontend/src/pages/AdminUsersPage.jsx
index 7f4da5d..331fd21 100644
--- a/frontend/src/pages/AdminUsersPage.jsx
+++ b/frontend/src/pages/AdminUsersPage.jsx
@@ -1,12 +1,13 @@
import { useCallback, useEffect, useState } from 'react'
-import { Users, LoaderCircle, Trash2, KeyRound, Menu } from 'lucide-react'
+import { Users, LoaderCircle, Trash2, KeyRound, Menu, Search, Moon, Sun, RefreshCcw } from 'lucide-react'
+import { ScrollArea } from '@/components/ui/scroll-area'
import { Input } from '@/components/ui/input'
import { Button } from '@/components/ui/button'
import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from '@/components/ui/dialog'
import { drive, message } from '@/api/client'
import PermissionsEditor from '@/components/drive/PermissionsEditor'
-export default function AdminUsersPage({onOpenSidebar}){
+export default function AdminUsersPage({onOpenSidebar, dark, setDark}){
const [query,setQuery] = useState('')
const [record,setRecord] = useState({users:[]})
const [busy,setBusy] = useState(true)
@@ -63,13 +64,32 @@ export default function AdminUsersPage({onOpenSidebar}){
catch(e){setDeleteError(message(e))}
finally{setDeleting(false)}
}
- return
-
-
-
-
Utilisateurs
+ return <>
+
+
+
+
+
+
+ setQuery(e.target.value)}/>
+
+
+
+
Utilisateurs
{busy?'Chargement…':`${record.users.length} utilisateur${record.users.length>1?'s':''}`}
+
{error && {error}
}
{busy?:
| Utilisateur | Identifiant | E-mail | Espace attribué | Statut | Actions |
@@ -85,7 +105,8 @@ export default function AdminUsersPage({onOpenSidebar}){
{!record.users.length && Aucun utilisateur.
}
}
{record.limited && 200 résultats affichés. Précise la recherche.
}
-
+
+
-
+ >
}
function AccessPermissionsRow({access,busy,save,revoke}) {
diff --git a/frontend/src/pages/DrivePage.jsx b/frontend/src/pages/DrivePage.jsx
index fff2dc6..7b622e9 100644
--- a/frontend/src/pages/DrivePage.jsx
+++ b/frontend/src/pages/DrivePage.jsx
@@ -19,7 +19,7 @@ export default function DrivePage({user, onLogout}) {
{sidebar &&