import PropTypes from 'prop-types'; import React from 'react'; import { MarginProps, MaxWidthProps, WidthProps } from 'styled-system'; import { CactusEventTarget } from '../helpers/events'; import { Status } from '../helpers/status'; declare type FileStatus = 'unloaded' | 'loading' | 'loaded' | 'error'; declare type Target = CactusEventTarget; declare type WrapperProps = Omit, 'onChange' | 'onDrop' | 'onFocus' | 'onBlur'>; declare type InputProps = Pick, 'disabled' | 'form' | 'required' | 'multiple' | 'capture'>; interface CommonProps extends MarginProps, MaxWidthProps, WidthProps, InputProps, WrapperProps { name: string; status?: Status | null; accept?: string[]; labels?: FileInfoLabels; buttonText?: React.ReactNode; prompt?: React.ReactNode; children?: never; } export interface FileInputProps extends CommonProps { value?: '' | FileObject[]; onChange?: React.ChangeEventHandler; onFocus?: React.FocusEventHandler; onBlur?: React.FocusEventHandler; } interface FileInputState { inputKey: number; files: FileObject[]; } declare type FileInfoLabels = { [K in FileStatus | 'delete']?: string; }; declare type LoadFunc = (file: File) => Promise; export interface FileObject { file: File; status: FileStatus; contents?: unknown; error?: Error & { original?: any; }; errorMsg?: React.ReactNode; load: (l?: LoadFunc) => Promise; } /** Handles all external-facing event & state logic */ declare class FileInput extends React.Component { static displayName: string; static propTypes: { name: PropTypes.Validator; status: PropTypes.Requireable<"error" | "success" | "warning">; accept: PropTypes.Requireable<(string | null | undefined)[]>; disabled: PropTypes.Requireable; labels: PropTypes.Requireable; error: PropTypes.Requireable; loading: PropTypes.Requireable; loaded: PropTypes.Requireable; unloaded: PropTypes.Requireable; }>>; buttonText: PropTypes.Requireable; prompt: PropTypes.Requireable; onChange: PropTypes.Requireable<(...args: any[]) => any>; onFocus: PropTypes.Requireable<(...args: any[]) => any>; onBlur: PropTypes.Requireable<(...args: any[]) => any>; multiple: PropTypes.Requireable; value: PropTypes.Validator<"" | FileObject[] | undefined>; }; private hasFocus; private eventTarget; state: FileInputState; static getDerivedStateFromProps(props: Readonly, state: FileInputState): Partial | null; private deleteFile; private handleDrop; private handleChange; private syncTarget; private raiseChange; private handleFocus; private handleBlur; render(): React.ReactElement; private toFileObj; static toFileObj(file: File, accept?: string[]): FileObject; static toString(): string; } export default FileInput;