import { ModelRef, Ref } from 'vue';
import { Props as TagSelectorProps, Tag } from '../types';
import { Styling } from '../../../forms/button/types';
export type TagSelectorTarget = {
    model: ModelRef<TagSelectorProps['modelValue']> | Ref<TagSelectorProps['modelValue']>;
    mode: Props['mode'];
    targetId: Props['targetId'];
    filters: Props['filters'];
    payload: Props['payload'];
};
export interface Props {
    /**
     * Список выбранных тегов
     *
     * Настройка происходит в TopTagSelector, после открытия popup с помощью кнопки данного компонента
     */
    modelValue: TagSelectorProps['modelValue'];
    /**
     * Уникальный id для взаимодейсвтия с компонентом TopTagSelectorSetter
     *
     * Этот компонент может работать только с TopTagSelectorSetter с `props.id`
     */
    id: string;
    /**
     * Список возможных тегов
     */
    tags: Tag[];
    /**
     * Режим работы:
     * - `filter`: для фильтра (как правило, 1 элемент на 1 подключение TopTagSelector)
     * - `setter`: для установки тегов объекту (как правило, N элементов на 1 подключение TopTagSelector)
     */
    mode: 'filter' | 'setter';
    /**
     * id целевого объекта, к которому привязываются теги
     *
     * Для режима `setter`
     *
     * Нельзя использовать вместе с `filters`
     */
    targetId?: number | string;
    /**
     * Фильтры для настройки тегов
     *
     * Для режима `setter`
     *
     * При указании фильтров, будет включен режим массового редактирования
     *
     * Нельзя использовать вместе с `targetId`
     */
    filters?: [];
    /**
     * Использовать TopButton
     * - TopButton удобно использовать для фильтров и форм
     * - Не TopButton удобно использовать, когда надо сделать вывод выбранных тегов в произвольном дизайне
     *
     * При `useTopButton`, если выбран один тег, то его имя будет выводиться справа от него
     *
     * Без `useTopButton`, имена тегов выводятся в `title` их элементов
     */
    useTopButton?: boolean;
    /**
     * Полезная нагрузка, при редактировании целевого объекта
     */
    payload?: Record<string, any>;
    styling?: Styling;
}
