import { FolderTree } from './folders/types';
import { Group, Props as GroupsProps } from './groups/types';
export interface Props {
    /**
     * id выбранной папки
     *
     * Если фильтр не нужен - 0, это значит корневая папка
     */
    folderId: number;
    /**
     * Выбранная папка
     */
    folder?: GroupsProps['folder'];
    /**
     * Id выбранной группы
     *
     * Укажите `0` для выбора первой группы в списке
     *
     * Если группа не выбрана - `null`
     */
    groupId: number | null;
    /**
     * Выбранная группа
     */
    group?: GroupsProps['group'];
    projectId: number;
    /**
     * Дерево папок
     *
     * Условно опциональный параметр, обязателен, если указан `props.groups`.
     * Режим, при котором загрузка папок идет через API, а группы указываются в props, не несет смысла и не поддерживается.
     *
     * Работает аналогично `props.groups`
     *
     * @see `props.groups`
     */
    folders?: FolderTree;
    /**
     * Группы
     *
     * Если параметр не указан:
     * - будет использовать загрузка групп через `props.client`
     *
     * Если параметр указан:
     * - загрузка через `props.client` производиться не будет
     * - требует указывать `props.folders`, так как в API нет `childsIds`
     *
     * @subcategory Группы
     */
    groups?: Group[];
    /**
     * Фильтр активности группы
     *
     * @subcategory Группы
     */
    on?: boolean;
    /**
     * Добавить возможность выбора всех групп
     *
     * В этом режиме вместо "Корневой папки" для гармоничного стиля будет выводиться "Все папки"
     *
     * @subcategory Группы
     */
    canSelectAllGroups?: boolean;
    /**
     * Добавить возможность добавления группы
     *
     * Если при поиске группа в указанной папке не найдена, то появится кнопка "Добавить группу"
     *
     * Работает в двух режимах:
     * - произвольный выбор группы, при `canAddGroup=true`
     * - автоматическое добавление новой группы через API, при `canAddGroup=api`, требует `props.client`
     *
     * После добавления группы через API выполняет `update:groups`
     *
     * @subcategory Группы
     */
    canAddGroup?: GroupsProps['canAdd'];
    /**
     * Правило атвовыбора группы при инициализации и смене папки
     * - `first`: будет выбрана первая группа, если ее нет будет использоваться режим `placeholder`
     * - `placeholder`: будет выбираться `id=ITEM_ID_ALL` с текстом "Выберите группу"
     *
     * Для фильтров, где есть `props.canSelectAll` рекомендуется использовать `first`
     *
     * Для форм, где автовыбор не желателен, рекомендуется использовать `placeholder`
     *
     * При отправке формы проверяйте, что указан не `ITEM_ID_ALL`, если требуется выбор конкретной группы
     *
     * @subcategory Группы
     */
    autoselect?: GroupsProps['autoselect'];
    /**
     * Отобразить кнопку смены значения для выбора группы
     */
    addChanger?: boolean;
    /**
     * Показывать поле для выбора папки
     *
     * Если не указано, то папки будут отображаться, если их больше 1
     */
    showFolders?: boolean;
    /**
     * Показывать поле для выбора группы
     */
    showGroups?: boolean;
    /**
     * Выводить иконку в полях выбора папки и группы
     */
    addIcon?: boolean;
    /**
     * Настроенный API клиент для выполнения запросов
     *
     * Будет использоваться:
     * - для загрузки групп, если не указан `props.groups`
     * - для добавления новых групп, если указан `props.canAddGroup=api`
     *
     * @const
     */
    client?: Api.Client<Api.TV.Paths, true>;
    /**
     * Сервис API клиента для выполнения запросов
     *
     * Используется совместно с props.client
     */
    service?: 'keywords_2' | 'keywordsAi_2';
}
export type Emits = {
    /**
     * Группы в проекте были изменены
     *
     * Вызывается, если указан api client, так как в других случаях группы не меняются
     *
     * Если `props.groups` не указан, то emit будет вызван без указания `groups`:
     * - кеш api всех `TopGroupSelector` на странице с тем же `projectId` будет сброшен автоматически
     * - при необходимости вручную реализовать обновления других состояний, связанных со списком групп проекта
     */
    'update:groups': [groups?: Group[]];
};
