import { useCallback, useEffect, useMemo, useState, type KeyboardEvent } from 'react' import { convertFileSrc } from '@tauri-apps/api/core' import { ArrowSquareOut, ClipboardText, FileDashed, FilePdf, FolderOpen, ImageSquare, WarningCircle } from '@phosphor-icons/react' import type { VaultEntry } from '../types' import { trackFilePreviewAction, trackFilePreviewFailed, trackFilePreviewOpened } from '../lib/productAnalytics' import { filePreviewKind, previewFileTypeLabel, type FilePreviewKind } from '../utils/filePreview' import { focusNoteListContainer } from '../utils/neighborhoodHistory' import { openLocalFile } from '../utils/url' import { Button } from './ui/button' interface FilePreviewProps { entry: VaultEntry onCopyFilePath?: (path: string) => void onOpenExternalFile?: (path: string) => void onRevealFile?: (path: string) => void } interface FilePreviewFallbackProps { icon: 'warning' | 'file' title: string description: string onOpenExternal: () => void } function fallbackContentForPreviewKind(previewKind: FilePreviewKind | null): Omit { if (previewKind === 'image') { return { icon: 'warning', title: 'Image preview failed', description: 'Tolaria could not render this image file in the preview.', } } if (previewKind === 'pdf') { return { icon: 'warning', title: 'PDF preview failed', description: 'Tolaria could not render this PDF file in the preview.', } } return { icon: 'file', title: 'Preview unavailable', description: 'Tolaria does not have an in-app preview for this file type.', } } function FilePreviewHeaderIcon({ previewKind }: { previewKind: FilePreviewKind | null }) { if (previewKind === 'image') { return