solidjs-dropzone
Version:
Dropzone Adapter For SOlidJS
65 lines (62 loc) • 2.63 kB
TypeScript
import * as solid_js from 'solid-js';
import { ComponentProps, JSX } from 'solid-js';
type ErrorCode = "file-invalid-type" | "file-too-large" | "file-too-small" | "too-many-files" | (string & {});
type FileError = {
code: ErrorCode;
message: string;
};
type FileRejection = {
file: File;
errors: FileError[];
};
type DropEvent = InputEvent | DragEvent | Event;
type OnDropHandler = <T extends File>(acceptedFiles: T[], fileRejections: FileRejection[], event: DropEvent | null) => void;
type RemoveBoundEventHandlers<TProps extends Record<string, any>> = {
[Key in keyof TProps]: NonNullable<TProps[Key]> extends JSX.EventHandlerUnion<infer Element, infer Event> ? JSX.EventHandler<Element, Event> : TProps[Key];
};
type DropzoneRootProps = RemoveBoundEventHandlers<ComponentProps<"div">> & {
refKey?: string;
};
type DropzoneInputProps = RemoveBoundEventHandlers<ComponentProps<"input">> & {
refKey?: string;
};
type CreateDropzoneProps = RemoveBoundEventHandlers<Pick<ComponentProps<"input">, "multiple" | "onDragEnter" | "onDragOver" | "onDragLeave">> & {
minSize?: number;
maxSize?: number;
maxFiles?: number;
preventDropOnDocument?: boolean;
noClick?: boolean;
noKeyboard?: boolean;
noDrag?: boolean;
noDragEventsBubbling?: boolean;
disabled?: boolean;
autoFocus?: boolean;
onDrop?: OnDropHandler;
getFilesFromEvent?: (event: DropEvent) => Promise<Array<File | DataTransferItem>>;
onFileDialogCancel?: () => void;
onFileDialogOpen?: () => void;
validator?: <T extends File>(file: T) => FileError | FileError[] | null;
onError?: (error: unknown) => void;
} & ({
useFsAccessApi: true;
accept?: Record<string, string[]>;
} | {
useFsAccessApi?: false;
accept?: string | string[];
});
type CreateDropzoneResult = ReturnType<typeof createDropzone>;
declare const createDropzone: (_props?: CreateDropzoneProps) => {
isFocused: boolean;
isFileDialogActive: boolean;
isDragActive: boolean;
isDragAccept: boolean;
isDragReject: boolean;
acceptedFiles: File[];
fileRejections: FileRejection[];
getInputProps: (_overrides?: DropzoneInputProps) => ComponentProps<"input">;
getRootProps: (_overrides?: DropzoneRootProps) => ComponentProps<"div">;
rootRef: solid_js.Setter<HTMLElement | null | undefined>;
inputRef: solid_js.Setter<HTMLInputElement | null | undefined>;
open: (() => void) | (() => void);
};
export { CreateDropzoneProps, CreateDropzoneResult, DropEvent, DropzoneInputProps, DropzoneRootProps, ErrorCode, FileError, FileRejection, OnDropHandler, createDropzone };