Сначала: Как создать мероприятие?
Чтобы добавить готовый шаблон в мероприятие (event), пользователь на странице Templates (Шаблоны) через кнопку "Добавить ещё" открывает библиотечное модальное окно «Добавить шаблоны», выбирает один или несколько готовых шаблонов и нажимает "Добавить". В РЕАЛЬНОМ коде это ЕДИНСТВЕННЫЙ доступный пользователю способ импорта (добавление из готовой библиотеки). Хотя в кодовой базе определены методы импорта из файла (.aktemplate) (TemplateFileService.ImportFromFileAsync/ExportToFileAsync) и загрузчик встроенных шаблонов (LoadBundledTemplateJsonAsync), НИ ОДИН интерфейс их не вызывает — то есть функции импорта из файла в интерфейсе сейчас НЕТ.
- Пользователь должен войти в систему, и должно быть выбрано мероприятие (event) — если currentEventInfo равно null, AddTemplateToCurrentEvent тихо завершается неудачей (RepositoryResponse.Success=false).
- В библиотеке (AllLocalPhotoTemplates / AllLocalВидеоGifTemplates) должны быть готовые шаблоны; этот список заполняется из server/CloudSync и шаблонов по умолчанию, а если он пуст, в модальном окне отображается Шаблонов пока нет.
Пошагово
Шаг 1 · Откройте страницу шаблонов
Settings → Templates (/templates)
Перейдите со страницы настроек на страницу Шаблоны (Templates). Страница открывается по маршруту /templates, и вверху отображаются две вкладки (Фото, Video & GIF) и раздел Активные шаблоны.
🔎 Элементы на экране: Вкладки: Фото, Video & GIF; заголовок Активные шаблоны + значок-счётчик

Шаг 2 · Выберите нужную вкладку
Templates (/templates) → панель вкладок
Выберите вкладку в зависимости от типа импортируемого шаблона: Фото для фотовывода, Video & GIF для видео/GIF-вывода. Выбранная вкладка определяет список библиотеки (фото или видео), который отобразится в модальном окне.
🔎 Элементы на экране: вкладка Фото, вкладка Video & GIF
Шаг 3 · Нажмите кнопку Добавить ещё
Templates (/templates) → действия заголовка раздела
Нажмите кнопку Добавить ещё справа от заголовка раздела. Это вызывает OpenBrowseModal() в VM редактора и открывает библиотечное модальное окно 'Добавить шаблоны' (с вкладки фото — библиотека фото, с вкладки видео — библиотека видео).
🔎 Элементы на экране: кнопка Добавить ещё (btn-outline); рядом кнопка Создать новый (фиолетовая)
Шаг 4 · Просмотрите библиотечное модальное окно «Добавить шаблоны»
BrowseLibraryModal — модальное окно Добавить шаблоны
В открывшемся модальном окне Добавить шаблоны просмотрите карточки готовых шаблонов. Карточки располагаются в виде masonry-раскладки, а при прокрутке вниз подгружаются новые страницами по 30 штук (бесконечная прокрутка). Шаблоны, уже добавленные в мероприятие, отмечены значком Добавлено и не могут быть выбраны.
🔎 Элементы на экране: заголовок модального окна Добавить шаблоны, подзаголовок Выберите шаблоны для добавления; на карточках флажок и значок Добавлено; на каждой карточке название + формат (OutputSize.DisplayName)

Шаг 5 · Выберите один или несколько шаблонов
BrowseLibraryModal — сетка карточек
Нажмите на карточку(и) шаблона, которую хотите добавить. Каждое нажатие включает/выключает выбор карточки (флажок заполняется фиолетовым). Карточки со значком Добавлено нельзя нажать (пропускаются в OnCardClick). Число на кнопке Добавить внизу показывает только количество выбранных, ещё не добавленных карточек.
🔎 Элементы на экране: фиолетовый флажок на карточке (browse-selected), кнопка 'Добавить (N)' в footer

Шаг 6 · Добавьте в мероприятие кнопкой Добавить
BrowseLibraryModal — footer
Нажмите кнопку 'Добавить (N)' в footer. Для каждого выбранного шаблона вызывается AddTemplateToCurrentEvent(templateLocalId); это создаёт junction (TemplateEventJunction) между шаблоном и текущим мероприятием и привязывает шаблон к мероприятию. Выбор сбрасывается, и модальное окно закрывается.
🔎 Элементы на экране: кнопка 'Добавить (N)' (btn-update-now); кнопка Отмена; слева красная кнопка 'Удалить (N)'
Шаг 7 · (Промежуточный шаг) Всплывающее окно с предложением включить режим
Диалог подтверждения (BlazorUserDialogService)
Если режим вывода добавленного шаблона (Фото/GIF/Видео) в мероприятии выключен, после закрытия модального окна появляется всплывающее окно подтверждения 'включить режим?' (TemplateModeSuggestionService.CheckAndOfferAsync). Если нажать 'Да', соответствующая настройка (например, PhotoOutputFormatActive / GifOutputFormatActive / ВидеоOutputFormatActive) включается; если нажать Нет, ничего не меняется. Многокадровый (2+) фотошаблон может дополнительно предложить режим GIF.
🔎 Элементы на экране: заголовок информационного диалога (например, 'EnableGifModeTitle'), кнопки Да / Нет

Шаг 8 · Добавленный шаблон появляется в сетке активных шаблонов
Templates (/templates) → сетка активных шаблонов
Модальное окно закрывается, и выбранный(е) шаблон(ы) попадают в сетку Активные шаблоны вкладки. Если выполняется загрузка/синхронизация, в заголовке появляется индикатор 'Импорт...' и счётчик X/Y; когда всё готово, карточка отображается полностью.
🔎 Элементы на экране: значок-счётчик в заголовке (X/Y) + метка Импорт...; новая карточка шаблона в сетке

Шаг 9 · Отредактируйте шаблон (по желанию)
Сетка Templates → действия GalleryItemCard / TemplateEditor (/templateeditor)
Наведите курсор на карточку в сетке активных шаблонов и нажмите значок Редактировать (карандаш) или прямо на карточку → вызывается LoadTemplateForEditing и происходит переход на /templateeditor. Если шаблон 'pristine' (по умолчанию/создан мастером, ни разу не изменённый), у него есть значок 'Заблокировано', и редактирование фактически создаёт копию (подсказка Клонировать & Редактировать); для изменённых шаблонов это напрямую Редактировать. Кроме того, на карточке есть действия Дублировать и Удалить.
🔎 Элементы на экране: действия карточки: Клонировать & Редактировать / Редактировать, Дублировать, Удалить, переместить (перетащить); значок Заблокировано

Шаг 10 · (Не альтернативный импорт) Создание с нуля
Templates (/templates) → мастер CreateNewTemplateModal
Вместо импорта готового шаблона кнопка Создать новый открывает мастер (CreateNewTemplateModal: тип → формат → раскладка → стиль) и создаёт шаблон с нуля. Это НЕ импорт, а процесс создания нового шаблона; он отличается от добавления из готовой библиотеки.
🔎 Элементы на экране: кнопка Создать новый; шаги мастера (Тип/Формат/Раскладка/Стиль)
Модальное окно допускает множественный выбор: можно отметить несколько карточек и добавить их все сразу одним нажатием Добавить.
Число на кнопке 'Добавить (N)' учитывает только выбранные, ещё не добавленные карточки (без значка «Добавлено»); уже добавленную карточку выбрать нельзя.
В том же модальном окне красной кнопкой 'Удалить (N)' в левом нижнем углу можно полностью удалить выбранные шаблоны из библиотеки (junction мероприятия + запись в библиотеке) — это требует диалога подтверждения.
Редактирование pristine-шаблона (Заблокировано) не портит оригинал; автоматически создаётся копия, которая и редактируется (Клонировать & Редактировать).
Если после добавления шаблона режим вывода выключен, ответ Да на предложение 'включить режим?' сразу включает соответствующий переключатель на экране приветствия киоска и на странице настроек Mode.
Ожидать импорт из файла (.aktemplate): код (TemplateFileService.ImportFromFileAsync/ExportToFileAsync и загрузчик встроенных wwwroot/templates) существует, но не привязан ни к одной кнопке интерфейса — для пользователя импорта из файла НЕТ; единственный способ — добавление из готовой библиотеки.
Пытаться добавить, когда не выбрано мероприятие: при currentEventInfo равном null AddTemplateToCurrentEvent тихо возвращает Success=false, и шаблон не добавляется.
Добавлять не с той вкладки: модальное окно с вкладки Фото показывает библиотеку фото, а с вкладки Video & GIF — библиотеку видео; нужный шаблон может быть на другой вкладке.
Принимать Создать новый за импорт: он создаёт шаблон с нуля через мастер, а не импортирует готовый шаблон.
Как создать фотошаблон? · Как отредактировать существующий шаблон?