"use client" import { useEffect, useRef, useState } from "react" import { useQueryClient } from "@tanstack/react-query" import { Play } from "lucide-react" import type { DriveFileInfo } from "@/lib/api/types" import { useDrivePreviewThumb } from "@/lib/api/hooks/use-drive-preview-thumb" import { usePublicSharePreviewThumb, type PublicShareThumbContext, } from "@/lib/api/hooks/use-public-share-preview-thumb" import { DriveFileTypeIcon } from "@/lib/drive/drive-file-icon" import { drivePreviewKind, driveServerThumbnail, isOfficeFormat, } from "@/lib/drive/drive-preview" import { shouldOpenMountFileExternally } from "@/lib/drive/cloud-native-open" import { cn } from "@/lib/utils" function useInView(rootMargin = "200px") { const ref = useRef(null) const [inView, setInView] = useState(false) useEffect(() => { const el = ref.current if (!el) return const observer = new IntersectionObserver( ([entry]) => { if (entry?.isIntersecting) { setInView(true) observer.disconnect() } }, { rootMargin } ) observer.observe(el) return () => observer.disconnect() }, [rootMargin]) return { ref, inView } } function PreviewContent({ url, display, darkInvert, onError, }: { url: string display: "image" | "video" darkInvert?: boolean onError: () => void }) { if (display === "video") { return ( <>