import React, { HTMLAttributes, forwardRef } from "react";
import { cl } from "../../../utils/helpers";
import { ComponentTranslation } from "../../../utils/i18n/i18n.types";
import {
FileUploadDropzone,
type FileUploadDropzoneProps,
} from "../dropzone/FileUploadDropzone";
import {
FileUploadItem,
type FileUploadItemProps,
} from "../item/FileUploadItem";
import {
FileUploadTrigger,
type FileUploadTriggerProps,
} from "../trigger/FileUploadTrigger";
import { FileUploadLocaleContextProvider } from "./FileUploadRoot.context";
interface FileUploadProps extends HTMLAttributes {
children: React.ReactNode;
/**
* i18n-API for customizing texts and labels
*/
translations?: ComponentTranslation<"FileUpload">;
}
interface FileUploadComponent extends React.ForwardRefExoticComponent<
FileUploadProps & React.RefAttributes
> {
/**
* Framed area to drag-n-drop files, upload files with button-click or copy-paste.
* @see 🏷️ {@link FileUploadDropzoneProps}
* @example
* Single file
* ```jsx
*
* ```
*
* @example
* Multiple files
* ```jsx
*
* ```
*
* @example
* Error
* ```jsx
*
* ```
*/
Dropzone: typeof FileUploadDropzone;
/**
* Displays a file with status, file size, action and error message.
* @see 🏷️ {@link FileUploadItemProps}
* @example
* Single
* ```jsx
*
* ```
*
* @example
* Multiple items can be semantically grouped as a list.
* ```jsx
*
*
*
*
*
*
*
* ```
*
* @example
* Custom file object
* ```jsx
*
* ```
*
* @example
* Error
* ```jsx
*
* ```
*
* @example
* Status & actions
* ```jsx
*
*
*
*
* ```
*/
Item: typeof FileUploadItem;
/**
* Wrapper for a button to trigger file select.
* @see 🏷️ {@link FileUploadTriggerProps}
* @example
* ```jsx
*
*
*
* ```
*/
Trigger: typeof FileUploadTrigger;
}
/**
* A set of components used to upload and display files.
* @see [📝 Documentation](https://aksel.nav.no/komponenter/core/fileupload)
* @example Dropzone
* ```jsx
*
* ```
*
* @example
* Items
* ```jsx
*
*
*
*
* ```
*/
export const FileUpload = forwardRef(
({ children, className, translations, ...rest }: FileUploadProps, ref) => {
return (
{children}
);
},
) as FileUploadComponent;
FileUpload.Dropzone = FileUploadDropzone;
FileUpload.Item = FileUploadItem;
FileUpload.Trigger = FileUploadTrigger;
export default FileUpload;
export { FileUploadTrigger, FileUploadDropzone, FileUploadItem };
export type {
FileUploadTriggerProps,
FileUploadDropzoneProps,
FileUploadItemProps,
};