/**
* @license
*-------------------------------------------------------------------------------------------
* Copyright © 2026 Progress Software Corporation. All rights reserved.
* Licensed under commercial license. See LICENSE.md in the package root for more information
*-------------------------------------------------------------------------------------------
*/
import { UploadAsyncProps } from './UploadAsyncProps.js';
import { UploadFileRestrictions } from './UploadFileRestrictions.js';
import { UploadFileInfo } from './UploadFileInfo.js';
import { UploadListItemProps } from './UploadListItemProps.js';
import { UploadOnAddEvent } from './UploadOnAddEvent.js';
import { UploadOnRemoveEvent } from './UploadOnRemoveEvent.js';
import { UploadOnStatusChangeEvent } from './UploadOnStatusChangeEvent.js';
import { UploadOnProgressEvent } from './UploadOnProgressEvent.js';
import { UploadOnBeforeUploadEvent } from './UploadOnBeforeUploadEvent.js';
import { UploadOnBeforeRemoveEvent } from './UploadOnBeforeRemoveEvent.js';
import { UploadOnCancelEvent } from './UploadOnCancelEvent.js';
import { UploadActionsLayout } from './UploadActionsLayout.js';
import { UploadSelectMessageProps } from './UploadSelectMessageProps.js';
/**
* Represents the props of the [KendoReact Upload component](https://www.telerik.com/kendo-react-ui/components/upload).
*/
export interface UploadProps extends UploadAsyncProps {
/**
* Adds a custom CSS class to the Upload container element.
*
* Example:
* ```jsx
*
* ```
*/
className?: string;
/**
* Enables or disables the selection of multiple files. Defaults to `true`.
*
* @default true
*
* @example
* ```jsx
*
* ```
*/
multiple?: boolean;
/**
* Disables the Upload component. Defaults to `false`.
*
* @default false
*
* @example
* ```jsx
*
* ```
*/
disabled?: boolean;
/**
* Toggles the visibility of the file list in the Upload component.
*
* @default true
*
* @example
* ```jsx
*
* ```
*/
showFileList?: boolean;
/**
* Toggles the visibility of action buttons when `autoUpload` is set to `false`.
*
* @default true
*
* @example
* ```jsx
*
* ```
*/
showActionButtons?: boolean;
/**
* Specifies the layout of the action buttons. Defaults to `end`.
*
* @default "end"
*
* @example
* ```jsx
*
* ```
*/
actionsLayout?: UploadActionsLayout;
/**
* Sets the `tabIndex` attribute of the Upload component.
*
* Example:
* ```jsx
*
* ```
*
* @remarks
* This property is related to accessibility.
*/
tabIndex?: number | string;
/**
* Specifies the `id` attribute of the Upload component.
*
* Example:
* ```jsx
*
* ```
*/
id?: string;
/**
* Identifies elements that describe the Upload component, similar to the `aria-describedby` attribute.
*
* Example:
* ```jsx
*
* ```
*
* @remarks
* This property is related to accessibility.
*/
ariaDescribedBy?: string;
/**
* Identifies elements that label the Upload component, similar to the `aria-labelledby` attribute.
*
* Example:
* ```jsx
*
* ```
*
* @remarks
* This property is related to accessibility.
*/
ariaLabelledBy?: string;
/**
* Sets the `accept` attribute of the file input element to specify allowed file types.
*
* Example:
* ```jsx
*
* ```
*/
accept?: string;
/**
* Configures file restrictions such as allowed extensions and maximum file size.
*
* Example:
* ```jsx
*
* ```
*/
restrictions?: UploadFileRestrictions;
/**
* Provides the list of files to be displayed in controlled mode.
*
* Example:
* ```jsx
*
* ```
*/
files?: Array;
/**
* Provides the initial list of files to be displayed in uncontrolled mode.
*
* Example:
* ```jsx
*
* ```
*/
defaultFiles?: Array;
/**
* Customizes the rendering of list items in the file list.
*
* Example:
* ```jsx
* } />
* ```
*/
listItemUI?: React.ComponentType;
/**
* Customizes the content of the add button in the Upload component.
*
* Example:
* ```jsx
* } />
* ```
*/
selectMessageUI?: React.ComponentType;
/**
* Triggered when new files are selected for upload.
*
* Example:
* ```jsx
* console.log(event.files)} />
* ```
*/
onAdd?: (event: UploadOnAddEvent) => void;
/**
* Triggered when files are removed. May include a server response if applicable.
*
* Example:
* ```jsx
* console.log(event.files)} />
* ```
*/
onRemove?: (event: UploadOnRemoveEvent) => void;
/**
* Triggered when the status of files changes. May include a server response if applicable.
*
* Example:
* ```jsx
* console.log(event.files)} />
* ```
*/
onStatusChange?: (event: UploadOnStatusChangeEvent) => void;
/**
* Triggered when the upload progress of a file changes.
*
* Example:
* ```jsx
* console.log(event.percentComplete)} />
* ```
*/
onProgress?: (event: UploadOnProgressEvent) => void;
/**
* Triggered before a file upload request is made. Can be used to add extra data to the request.
*
* Example:
* ```jsx
* console.log(event.additionalData)} />
* ```
*/
onBeforeUpload?: (event: UploadOnBeforeUploadEvent) => void;
/**
* Triggered before a file removal request is made. Can be used to add extra data to the request.
*
* Example:
* ```jsx
* console.log(event.additionalData)} />
* ```
*/
onBeforeRemove?: (event: UploadOnBeforeRemoveEvent) => void;
/**
* Triggered when the user cancels an upload in progress. Useful for custom cancellation logic.
*
* Example:
* ```jsx
* console.log('Upload canceled')} />
* ```
*/
onCancel?: (event: UploadOnCancelEvent) => void;
}