"use client"; import React from "react"; import { useDropzone } from "react-dropzone"; import { fieldBackgroundHoverMixin, fieldBackgroundMixin } from "../styles"; import { cls } from "../util"; import { Typography } from "./Typography"; export interface FileUploadError { message: string; code: string; } export type OnFileUploadRejected = (fileRejections: { file: File; errors: readonly FileUploadError[]; }[], event: object) => void; export type OnFilesUploadAdded = (files: File[]) => void; export type FileUploadProps = { // e.g. accept={{ "*/image": [] }} accept: Record, onFilesAdded: OnFilesUploadAdded, onFilesRejected?: OnFileUploadRejected, maxSize?: number, disabled?: boolean; maxFiles?: number; title?: React.ReactNode; uploadDescription?: React.ReactNode; preventDropOnDocument?: boolean; size?: "small" | "medium" | "large"; }; export function FileUpload({ accept, onFilesAdded, onFilesRejected, maxSize, disabled, maxFiles, title, uploadDescription, children, preventDropOnDocument = true, size }: React.PropsWithChildren) { const { getRootProps, getInputProps, isDragActive, isDragAccept, isDragReject } = useDropzone({ accept, noDragEventsBubbling: true, maxSize, onDrop: onFilesAdded, onDropRejected: onFilesRejected, disabled, maxFiles, preventDropOnDocument } ); return
{title} {children}
{uploadDescription}
}