import { components as componentsTagId } from 'topvisor-openapi/src/ts/Tags_2/Types/TagId';
import { Styling } from '../../forms/button/types';
import { Props as OpenerProps } from './popupOpener/types';
/**
 * Информация о теге
 */
export interface Tag {
    /**
     * Индекс тега
     *
     * Определяет цвет, не зависит от порядка сортирвоки тегов
     */
    id: componentsTagId['schemas']['Tags_2.Types.TagId'];
    /**
     * Индекс цвета тега
     */
    color_id: '' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | '10';
    /**
     * Имя тега
     */
    name: string;
}
export type TagId = Tag['id'];
export type TagIdExclude = `-${Tag['id']}`;
export interface Props {
    /**
     * Список выбранных тегов
     *
     * Положительны значения - выбранные теги
     *
     * Отрицательные значения - исключенные теги
     *
     * В режиме редактирования исключение тегов недоступно
     */
    modelValue: (Tag['id'] | TagIdExclude)[];
    /**
     * Список возможных тегов
     *
     * Если не указано, будет выведен список по умолчанию на английском языке
     *
     * Цвет тегов определяется в css в переменных, пример: `--color-tag-1`
     *
     * В режиме редактирования реализуют v-model поведение
     */
    tags?: Tag[];
    /**
     * Разрешить переименовывать и сортировать теги
     *
     * Требует указания `tags`
     *
     * Изменения фиксируется через `v-model` `tags`
     */
    tagsEditable?: boolean;
    /**
     * Максимальное количество тегов
     *
     * Если тегов меньше, появится кнопка добавления тега
     *
     * Если не указано теги добавлять нельзя
     *
     * Может быть от 10 до 20
     */
    tagsMax?: number;
    /**
     * Уникальный id для взаимодейсвтия с компонентом
     *
     * Для работы вне Vue используется в паре с `TopPopupWorker.genElPopupOpener()`
     *
     * @see import('../../popup/lib/worker').default.genElPopupOpener
     */
    id?: string;
    /**
     * Режим выбора одного тега
     */
    singleMode?: boolean;
    /**
     * Требуется ли указать хотя бы один тег, при установке тегов у объекта
     */
    requiredForSetter?: boolean;
    /**
     * Максимальное количество тегов, которые можно установить у объекта
     *
     * Если не указано, ограничения нет
     */
    maxTagsForSetter?: number;
    /**
     * Задержка перед вызовом emit в ms
     *
     * Имитирует ожидание завершения действий пользователя
     *
     * Не рекомендуется менять
     */
    emitDelay?: number;
    /**
     * Использовать TopButton
     *
     * См. описание в TopPopupOpener
     */
    useTopButton?: OpenerProps['useTopButton'];
    styling?: Styling;
}
export type FiltersAction = 'add' | 'replace' | 'delete';
export type Emits = {
    /**
     * Изменен выбор тегов
     *
     * При выборе тегов в режиме `filter`
     */
    selector: [tagsIds: Props['modelValue']];
    /**
     * У объекта были изменены теги
     *
     * При выборе тегов в режиме `setter`
     */
    setter: [
        event: {
            /**
             * Список выбранных тегов
             */
            tagsIds: Tag['id'][];
            /**
             * К какому объекту следует привязать теги
             *
             * Не будет указан, если указаны `filters`
             */
            targetId?: number | string;
            /**
             * По каким фильтрам следует установить теги
             *
             * Не будут указаны, если указан `targetId`
             */
            filters?: [];
            /**
             * Какое действие необходимо применить по указанным `filters`
             */
            filtersAction?: FiltersAction;
            /**
             * Полезная нагрузка, передаваямая кнопкой
             */
            payload?: Record<string, any>;
        }
    ];
    /**
     * Изменен список тегов
     */
    tagsChanged: [tags: NonNullable<Props['tags']>];
};
