import { useRef, useState, type ChangeEvent, type DragEvent } from 'react'; interface FileDropZoneProps { disabled?: boolean; onFiles(files: File[]): void; } export function FileDropZone({ disabled = false, onFiles }: FileDropZoneProps) { const input = useRef(null); const [dragging, setDragging] = useState(false); const selectFiles = (event: ChangeEvent) => { const files = [...(event.target.files ?? [])]; event.target.value = ''; if (files.length > 0) onFiles(files); }; const dropFiles = (event: DragEvent) => { event.preventDefault(); setDragging(false); if (disabled) return; const files = [...event.dataTransfer.files]; if (files.length > 0) onFiles(files); }; return (
{ event.preventDefault(); if (!disabled) setDragging(true); }} onDragOver={(event) => event.preventDefault()} onDragLeave={(event) => { if (!event.currentTarget.contains(event.relatedTarget as Node | null)) { setDragging(false); } }} onDrop={dropFiles} data-testid="file-drop-zone" >

Private, local-first reader

Open a OneNote file

Inspect a .one section, or a .onepkg notebook with any linked .cab parts, without sending it to a server.

or drop one .one, or one .onepkg with its .cab parts, here
); }