Add Pattern Templates for Key Colors targets with visual canvas editor

Introduce Pattern Template entity as a reusable rectangle layout that
Key Colors targets reference via pattern_template_id. This replaces
inline rectangle storage with a shared template system.

Backend:
- New PatternTemplate data model, store (JSON persistence), CRUD API
- KC targets now reference pattern_template_id instead of inline rectangles
- ProcessorManager resolves pattern template at KC processing start
- Picture source test endpoint supports capture_duration=0 for single frame
- Delete protection: 409 when template is referenced by a KC target

Frontend:
- Pattern Templates section in Key Colors sub-tab with card UI
- Visual canvas editor with drag-to-move, 8-point resize handles
- Background capture from any picture source for visual alignment
- Precise coordinate list synced bidirectionally with canvas
- Resizable editor container, viewport-constrained modal
- KC target editor uses pattern template dropdown instead of inline rects
- Localization (en/ru) for all new UI elements

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-12 18:07:40 +03:00
parent 5f9bc9a37e
commit 87e7eee743
21 changed files with 1423 additions and 150 deletions

View File

@@ -360,21 +360,41 @@
"kc.interpolation.dominant": "Доминантный",
"kc.smoothing": "Сглаживание:",
"kc.smoothing.hint": "Временное смешивание между извлечениями (0=нет, 1=полное)",
"kc.rectangles": "Цветовые Прямоугольники",
"kc.rectangles.hint": "Определите именованные прямоугольники в относительных координатах (0.01.0) на захваченном изображении",
"kc.rect.name": "Имя",
"kc.rect.x": "X",
"kc.rect.y": "Y",
"kc.rect.width": "Ш",
"kc.rect.height": "В",
"kc.rect.add": "Добавить Прямоугольник",
"kc.rect.remove": "Удалить",
"kc.rect.empty": "Прямоугольники не определены. Добавьте хотя бы один для извлечения цветов.",
"kc.pattern_template": "Шаблон Паттерна:",
"kc.pattern_template.hint": "Выберите шаблон прямоугольников для извлечения цветов",
"kc.pattern_template.none": "-- Выберите шаблон паттерна --",
"kc.created": "Цель ключевых цветов успешно создана",
"kc.updated": "Цель ключевых цветов успешно обновлена",
"kc.deleted": "Цель ключевых цветов успешно удалена",
"kc.delete.confirm": "Вы уверены, что хотите удалить эту цель ключевых цветов?",
"kc.error.no_rectangles": "Пожалуйста, добавьте хотя бы один прямоугольник",
"kc.error.no_pattern": "Пожалуйста, выберите шаблон паттерна",
"kc.error.required": "Пожалуйста, заполните все обязательные поля",
"kc.colors.none": "Цвета пока не извлечены"
"kc.colors.none": "Цвета пока не извлечены",
"targets.section.pattern_templates": "📄 Шаблоны Паттернов",
"pattern.add": "📄 Добавить Шаблон Паттерна",
"pattern.edit": "📄 Редактировать Шаблон Паттерна",
"pattern.name": "Имя Шаблона:",
"pattern.name.placeholder": "Мой Шаблон Паттерна",
"pattern.description_label": "Описание (необязательно):",
"pattern.description_placeholder": "Опишите этот паттерн...",
"pattern.rectangles": "Прямоугольники",
"pattern.rect.name": "Имя",
"pattern.rect.x": "X",
"pattern.rect.y": "Y",
"pattern.rect.width": "Ш",
"pattern.rect.height": "В",
"pattern.rect.add": "Добавить Прямоугольник",
"pattern.rect.remove": "Удалить",
"pattern.rect.empty": "Прямоугольники не определены. Добавьте хотя бы один.",
"pattern.created": "Шаблон паттерна успешно создан",
"pattern.updated": "Шаблон паттерна успешно обновлён",
"pattern.deleted": "Шаблон паттерна успешно удалён",
"pattern.delete.confirm": "Вы уверены, что хотите удалить этот шаблон паттерна?",
"pattern.delete.referenced": "Невозможно удалить: шаблон используется целью",
"pattern.error.required": "Пожалуйста, заполните все обязательные поля",
"pattern.visual_editor": "Визуальный Редактор",
"pattern.capture_bg": "Захватить Фон",
"pattern.source_for_bg": "Источник для Фона:",
"pattern.source_for_bg.none": "-- Выберите источник --",
"pattern.delete_selected": "Удалить Выбранный"
}