import type { CSSProperties, InputHTMLAttributes, ReactNode } from 'react';
import React from 'react';
import { ButtonProps } from '../Button/Button.types';
import { DropdownPlacement, DropdownTrigger } from '../Dropdown/Dropdown.types';
export type FileInfo = {
extension: string;
filenameWithoutExtension: string;
cellContentLeft: ReactNode;
isVisible?: boolean;
};
export type DropdownOptions = {
/**
* Dropdown открыт всегда.
*/
alwaysOpened?: boolean;
/**
* Способ открытия Dropdown окна - наведение или клик мышью.
* @default click
*/
trigger?: DropdownTrigger;
/**
* Сторона открытия Dropdown относительно элемента, у которого оно вызвано.
* @default bottom
*/
placement?: DropdownPlacement;
/**
* Отступ Dropdown относительно элемента, у которого оно вызвано.
* @default [0, 8]
*/
offset?: [number, number];
/**
* Максимальная высота выпадающего списка.
*/
listMaxHeight?: CSSProperties['height'];
/**
* Значение css width для выпадающего списка.
* @example width="200px"
*/
listWidth?: CSSProperties['width'];
/**
* Закрывать окно при нажатии вне области Dropdown.
* @default true
*/
closeOnOverlayClick?: boolean;
/**
* Портал для выпадающего списка. Принимает id контейнера или ref.
*/
portal?: string | React.RefObject;
/**
* CSS-свойство z-index для выпадающего списка.
*/
zIndex?: CSSProperties['zIndex'];
};
type FlowProps = {
/**
* Расположение элементов.
* По умолчанию 'auto' – автоматический перенос элемента в случае нехватки ширины контейнера.
* @default 'auto'
*/
flow?: 'horizontal';
/**
* Возможность прикрепить один или несколько файлов.
*/
multiple?: boolean;
/**
* Свойства для настройки выпадающего списка с прикрепленными файлами.
*/
dropdownOptions?: DropdownOptions;
} | {
/**
* Расположение элементов.
* По умолчанию 'auto' – автоматический перенос элемента в случае нехватки ширины контейнера.
* @default 'auto'
*/
flow?: 'vertical' | 'auto';
/**
* Возможность прикрепить один или несколько файлов.
*/
multiple?: boolean;
/**
* Свойства для настройки выпадающего списка с прикрепленными файлами.
*/
dropdownOptions?: never;
};
export type BaseAttachProps = {
/**
* Массив форматов файлов, которые могут быть прикреплены (см. HTML-атрибут 'accept' для 'input').
*/
acceptedFileFormats?: string[];
/**
* Скрыть кнопку после выбора файла
* @default false
*/
hideButtonOnAttach?: boolean;
/**
* Отображать прикрепленный файл
* @description Если `hideButtonOnAttach` установлен как `false`,
* данное свойство будет всегда иметь значение `true`
* @default true
*/
hasAttachment?: boolean;
/**
* Вспомогательный текст снизу слева под кнопкой
*/
helperText?: string;
/**
* Размер Attach
*/
size?: string;
/**
* Вид Attach
*/
view?: string;
/**
* Вид вспомогательного текста
*/
helperTextView?: string;
/**
* Вид кастомной иконки слева
*/
customIcon?: React.ReactNode;
/**
* Callback при удалении прикрепленного файла
*/
onClear?: (fileInfo: FileInfo) => void;
} & FlowProps;
export type AttachButtonProps = ({
/**
* Тип кнопки. 'button' – обычная кнопка. 'iconButton' – кнопка с иконкой.
* @default 'button'
*/
buttonType?: 'button';
} | {
buttonType?: 'iconButton';
/**
* Иконка
*/
icon?: React.ReactNode;
}) & ButtonProps;
export type AttachProps = Omit, 'size'> & ButtonProps & BaseAttachProps & AttachButtonProps;
export {};
//# sourceMappingURL=Attach.types.d.ts.map