+ {/* Toolbar */}
+
+
+ {name}
+
+
+
+
+ {/* Image */}
+ {/* eslint-disable-next-line @next/next/no-img-element */}
+

e.stopPropagation()}
+ />
+
+ )
+}
diff --git a/src/components/mixed/MixedView.tsx b/src/components/mixed/MixedView.tsx
new file mode 100644
index 0000000..3e6c76f
--- /dev/null
+++ b/src/components/mixed/MixedView.tsx
@@ -0,0 +1,210 @@
+'use client'
+
+import { useEffect, useState, useCallback } from 'react'
+import type { DirectoryListing, FileEntry } from '@/types'
+import VideoPlayerModal from './VideoPlayerModal'
+import ImageLightbox from './ImageLightbox'
+
+interface Props {
+ libraryId: string
+ initialPath: string
+}
+
+type ModalState =
+ | { type: 'video'; url: string; name: string }
+ | { type: 'image'; url: string; name: string }
+ | null
+
+export default function MixedView({ libraryId, initialPath }: Props) {
+ const [currentPath, setCurrentPath] = useState(initialPath)
+ const [listing, setListing] = useState