@dickpy/dsh-imagegen 1.5.2 → 1.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/client.js CHANGED
@@ -1117,16 +1117,425 @@ window.__ModuleLoader__.load({
1117
1117
  "channels.presetCustomHint": "Configure the API URL, key, and model catalog yourself",
1118
1118
  "channels.presetLoadFailed": "Failed to load providers: {error}"
1119
1119
  };
1120
+ /** Russian mirror of every key (полный словарь интерфейса). */
1121
+ const ru = {
1122
+ "entry.label": "ИИ-генерация",
1123
+ "entry.tooltip": "Панель ИИ-генерации изображений (gpt-image-2 / glm-image / grok-imagine-image / nanobanana / seedream)",
1124
+ "entry.newSession": "Новая сессия",
1125
+ "entry.newSessionTooltip": "Создать новую сессию DSH",
1126
+ "entry.image": "Генерация",
1127
+ "panel.title": "ИИ-генерация изображений",
1128
+ "panel.githubTip": "Понравился плагин или есть идеи? Поставьте звезду или откройте issue на GitHub!",
1129
+ "conversation.add": "В диалог",
1130
+ "conversation.adding": "Добавляем…",
1131
+ "conversation.added": "Изображение добавлено в текущий диалог",
1132
+ "conversation.addHint": "После добавления можно править через /edit_image; команда использует модель плагина",
1133
+ "conversation.noSession": "Сначала откройте сессию, затем добавьте изображение",
1134
+ "conversation.unavailable": "Текущая сессия недоступна",
1135
+ "conversation.busy": "Диалог отправляет сообщение, попробуйте позже",
1136
+ "mode.text": "Из текста",
1137
+ "mode.edit": "Из изображения",
1138
+ "workspace.label": "Режим работы",
1139
+ "workspace.normal": "Генерация",
1140
+ "workspace.ecommerce": "E-commerce",
1141
+ "chat.expand": "Показать диалог",
1142
+ "chat.collapse": "Скрыть диалог",
1143
+ "chat.toggle": "Диалог",
1144
+ "config.resizeHint": "Потяните, чтобы изменить ширину панели параметров",
1145
+ "ecommerce.generation": "Параметры генерации",
1146
+ "ecommerce.title": "Режим e-commerce",
1147
+ "ecommerce.badge": "Превью",
1148
+ "ecommerce.short": "E-com",
1149
+ "ecommerce.anchorPending": "Главное изображение готово, остальные генерируются по нему для единого стиля…",
1150
+ "ecommerce.anchorFailed": "Не удалось создать главное изображение, остальные приостановлены. Повторите главное (или всю группу) и продолжите.",
1151
+ "ecommerce.anchorNote": "Якорная генерация: сначала главное изображение, остальные создаются по нему для единого стиля",
1152
+ "ecommerce.noAssetWarn": "Товар не загружен: главное изображение будет создано по описанию и станет якорем; загрузите фото товара для большей точности",
1153
+ "ecommerce.product": "Товар",
1154
+ "ecommerce.productName": "Название товара (обязательно)",
1155
+ "ecommerce.projectName": "Название проекта (необязательно)",
1156
+ "ecommerce.constraints": "Преимущества и ограничения",
1157
+ "ecommerce.sellingPoints": "Преимущества товара, например: водостойкость / большая вместимость / компактность",
1158
+ "ecommerce.protectedFeatures": "Что обязательно сохранить: цвет, логотип, текст упаковки, конструкцию",
1159
+ "ecommerce.styleHint": "Стиль, например: премиальный / реалистичный / естественный свет",
1160
+ "ecommerce.setStructure": "Структура комплекта",
1161
+ "ecommerce.preview": "Создать превью комплекта",
1162
+ "ecommerce.planTitle": "Будет сгенерировано изображений: {count}",
1163
+ "ecommerce.planSlot": "{count} шт. · {description}",
1164
+ "ecommerce.confirm": "Сгенерировать весь комплект",
1165
+ "ecommerce.uploadRef": "Материалы товара (необязательно, до 4 шт.: товар / упаковка / детали / стиль)",
1166
+ "ecommerce.uploadShort": "Загрузить материалы",
1167
+ "ecommerce.sellingTitle": "Преимущества товара",
1168
+ "ecommerce.advanced": "Дополнительно (проект / площадка / ограничения)",
1169
+ "ecommerce.params": "Параметры",
1170
+ "ecommerce.platformLabel": "Площадка",
1171
+ "ecommerce.languageLabel": "Язык текста",
1172
+ "ecommerce.ratioLabel": "Пропорции",
1173
+ "ecommerce.categoryLabel": "Категория",
1174
+ "ecommerce.multiSelect": "Можно выбрать несколько",
1175
+ "ecommerce.countHint": "Нажмите, чтобы изменить количество (1-4)",
1176
+ "ecommerce.refSettings": "Настройки референсов (необязательно)",
1177
+ "ecommerce.styleTitle": "Стиль / дополнения",
1178
+ "ecommerce.protectedLabel": "Обязательно сохранить (необязательно)",
1179
+ "ecommerce.assetsFull": "Не более 4 материалов",
1180
+ "ecommerce.refSelect": "Референс для этого назначения",
1181
+ "ecommerce.refNone": "Без референса",
1182
+ "ecommerce.role.product": "Товар",
1183
+ "ecommerce.role.packaging": "Упаковка",
1184
+ "ecommerce.role.detail": "Детали/ракурс",
1185
+ "ecommerce.role.style": "Стиль",
1186
+ "ecommerce.footerReady": "Будет сгенерировано {count} изображений",
1187
+ "ecommerce.footerEmpty": "Выберите структуру комплекта",
1188
+ "ecommerce.results.title": "Результаты комплекта",
1189
+ "ecommerce.results.progress": "{done}/{total} готово",
1190
+ "ecommerce.results.failed": "{count} с ошибкой",
1191
+ "ecommerce.results.empty": "После запуска генерации здесь появятся статус и результат каждого изображения",
1192
+ "ecommerce.results.regenerate": "Сгенерировать заново",
1193
+ "ecommerce.results.export": "Экспорт списка",
1194
+ "ecommerce.results.newProduct": "Новый товар",
1195
+ "prompt.placeholder": "Опишите желаемое изображение, например: рыжий кот в шлеме космонавта смотрит в телескоп на Луне, акварель, мягкий свет…",
1196
+ "prompt.required": "Введите промпт",
1197
+ "prompt.count": "{count}",
1198
+ "prompt.enhance": "Улучш.",
1199
+ "prompt.enhancing": "Улучшаем…",
1200
+ "prompt.enhanceHint": "Развернуть краткий промпт через настроенную диалоговую модель",
1201
+ "prompt.configTitle": "Сначала настройте модель улучшения промптов",
1202
+ "prompt.configHint": "Настройки открыты. Перейдите в «Плагины → ИИ-генерация», укажите или переиспользуйте API-адрес и ключ, выберите диалоговую модель и сохраните.",
1203
+ "tasks.title": "Задачи генерации",
1204
+ "tasks.queued": "В очереди",
1205
+ "tasks.running": "Генерация",
1206
+ "tasks.completed": "Готово",
1207
+ "tasks.failed": "Ошибка",
1208
+ "tasks.cancelled": "Отменено",
1209
+ "tasks.cancel": "Отменить",
1210
+ "tasks.retry": "Повторить",
1211
+ "params.size": "Размер",
1212
+ "params.quality": "Чёткость",
1213
+ "params.count": "Количество",
1214
+ "params.detail": "Детализация",
1215
+ "size.auto": "Авто",
1216
+ "size.square": "1:1 квадрат",
1217
+ "size.portrait34": "3:4 верт.",
1218
+ "size.landscape43": "4:3 гориз.",
1219
+ "size.portrait916": "9:16 верт.",
1220
+ "size.portrait23": "2:3 верт.",
1221
+ "size.landscape32": "3:2 гориз.",
1222
+ "size.wide169": "16:9 шир.",
1223
+ "size.ultrawide21": "21:9 ультрашир.",
1224
+ "quality.auto": "Авто",
1225
+ "quality.1k": "1K",
1226
+ "quality.2k": "2K",
1227
+ "quality.4k": "4K",
1228
+ "count.one": "1 шт.",
1229
+ "count.two": "2 шт.",
1230
+ "count.three": "3 шт.",
1231
+ "count.four": "4 шт.",
1232
+ "detail.auto": "Авто",
1233
+ "detail.standard": "Стандарт",
1234
+ "detail.high": "Высокая",
1235
+ "detail.hint": "Сквозной параметр, поддерживают некоторые шлюзы gpt-image-2; для официального API оставьте «Авто»",
1236
+ "model.label": "Модель",
1237
+ "model.noEditModels": "В текущем режиме нет доступных моделей",
1238
+ "compare.enable": "Сравнение моделей",
1239
+ "compare.models": "Модели для сравнения",
1240
+ "compare.title": "Сравнение результатов моделей",
1241
+ "compare.fullscreen": "Полноэкранное сравнение",
1242
+ "compare.selectRequired": "Выберите хотя бы одну модель для сравнения",
1243
+ "generate": "Сгенерировать",
1244
+ "generating": "Генерация…",
1245
+ "edit.upload": "Нажмите или перетащите референс",
1246
+ "edit.uploadHint": "PNG / JPG / WEBP, до 10 МБ",
1247
+ "edit.change": "Заменить изображение",
1248
+ "edit.remove": "Убрать",
1249
+ "edit.required": "Сначала загрузите референс",
1250
+ "canvas.emptyTitle": "Начните творить",
1251
+ "canvas.emptyHint": "Введите промпт слева и нажмите «Сгенерировать» — результат появится здесь",
1252
+ "canvas.new": "Новая генерация",
1253
+ "canvas.newHint": "Начать новую генерацию и очистить просмотр",
1254
+ "canvas.error": "Ошибка генерации: {error}",
1255
+ "canvas.submitting": "Ставим в очередь…",
1256
+ "canvas.queued": "Задача в очереди",
1257
+ "canvas.queueHint": "Сейчас ожидают {count} задач",
1258
+ "canvas.generating": "Генерируем изображение…",
1259
+ "canvas.elapsed": "Прошло {seconds} с",
1260
+ "canvas.images": "Сгенерировано: {count}",
1261
+ "download": "Скачать",
1262
+ "revisedPrompt": "Улучшенный промпт: {prompt}",
1263
+ "history.title": "История",
1264
+ "history.empty": "Истории пока нет — созданные изображения появятся здесь",
1265
+ "history.clear": "Очистить",
1266
+ "history.clearConfirm": "Очистить всю историю? Действие необратимо.",
1267
+ "history.restore": "Восстановить",
1268
+ "history.delete": "Удалить",
1269
+ "history.images": "шт.",
1270
+ "history.viewing": "История · {time}",
1271
+ "history.search": "Поиск по промптам и моделям…",
1272
+ "history.model": "Фильтр по модели",
1273
+ "history.ratio": "Фильтр по пропорциям",
1274
+ "history.allModels": "Все модели",
1275
+ "history.allRatios": "Все пропорции",
1276
+ "gallery.title": "Галерея",
1277
+ "gallery.categories": "Категории",
1278
+ "gallery.all": "Все работы",
1279
+ "gallery.gpt": "gpt-image-2",
1280
+ "gallery.grok": "grok-imagine-image",
1281
+ "gallery.ratio": "Пропорции",
1282
+ "gallery.tags": "Метки",
1283
+ "gallery.filterHint": "Фильтр галереи по режиму, модели и пропорциям",
1284
+ "gallery.count": "· всего {count}",
1285
+ "gallery.viewMode": "Вид",
1286
+ "gallery.masonry": "Плитка",
1287
+ "gallery.grid": "Сетка",
1288
+ "gallery.sort": "Сортировка",
1289
+ "gallery.newest": "Сначала новые",
1290
+ "gallery.oldest": "Сначала старые",
1291
+ "gallery.untitled": "Без названия",
1292
+ "gallery.search": "Поиск по работам и моделям…",
1293
+ "gallery.tagsPlaceholder": "Метки через запятую",
1294
+ "gallery.tagsApply": "Добавить метки",
1295
+ "gallery.editTags": "Править метки",
1296
+ "gallery.tagsEditShort": "Правка",
1297
+ "gallery.tagsSave": "Сохранить",
1298
+ "gallery.tagsCancel": "Отмена",
1299
+ "gallery.selected": "Выбрано: {count}",
1300
+ "gallery.selectionDone": "Завершить выбор",
1301
+ "gallery.selectionClear": "Снять выбор",
1302
+ "gallery.downloadSelected": "Скачать выбранные",
1303
+ "gallery.exportJson": "Экспорт JSON",
1304
+ "gallery.select": "Выбрать работы",
1305
+ "gallery.add": "В галерею",
1306
+ "gallery.added": "Добавлено в галерею",
1307
+ "gallery.already": "Уже в галерее",
1308
+ "gallery.delete": "Убрать из галереи",
1309
+ "gallery.clear": "Очистить галерею",
1310
+ "gallery.clearConfirm": "Очистить всю галерею? Действие необратимо.",
1311
+ "gallery.empty": "Галерея пуста — добавьте понравившиеся изображения",
1312
+ "gallery.viewing": "Галерея · {time}",
1313
+ "preview.title": "Просмотр изображения",
1314
+ "preview.open": "Открыть просмотр",
1315
+ "preview.close": "Закрыть",
1316
+ "preview.prev": "Назад",
1317
+ "preview.next": "Вперёд",
1318
+ "preview.index": "{index} / {total}",
1319
+ "preview.zoomControls": "Управление масштабом",
1320
+ "preview.zoomIn": "Увеличить",
1321
+ "preview.zoomOut": "Уменьшить",
1322
+ "preview.zoomReset": "Сбросить масштаб",
1323
+ "preview.zoomLevel": "{percent}%",
1324
+ "preview.copyPrompt": "Копировать промпт",
1325
+ "preview.copied": "Скопировано",
1326
+ "preview.addToEdit": "В режим img2img",
1327
+ "config.missing": "API не настроен: откройте «Настройки → Плагины → Настраиваемые» и заполните api_url и api_key для ИИ-генерации.",
1328
+ "config.generationTitle": "Сначала настройте API генерации",
1329
+ "config.generationHint": "Открыты «Настройки → Плагины → ИИ-генерация». Укажите адрес и ключ API генерации, сохраните — и можно творить.",
1330
+ "config.enhancementTitle": "Сначала настройте модель улучшения промптов",
1331
+ "config.enhancementHint": "Открыты «Настройки → Плагины → ИИ-генерация». Укажите или переиспользуйте адрес и ключ диалогового API, выберите модель и сохраните.",
1332
+ "config.disabledTitle": "Плагин ИИ-генерации отключён",
1333
+ "config.disabledHint": "Открыты «Настройки → Плагины → ИИ-генерация». Включите плагин — и генерация заработает.",
1334
+ "config.configured": "Подключено: {url}",
1335
+ "config.disabled": "Плагин отключён — включите его в настройках.",
1336
+ "connection.connected": "Подключено",
1337
+ "connection.disconnected": "Нет подключения",
1338
+ "panel.collapseConfig": "Свернуть параметры",
1339
+ "panel.expandConfig": "Развернуть параметры",
1340
+ "update.available": "Доступна новая версия: {version}",
1341
+ "update.install": "Обновить онлайн",
1342
+ "update.installing": "Обновляем…",
1343
+ "update.success": "Обновлено до {version}, перезапустите DSH",
1344
+ "update.failed": "Не удалось обновить, попробуйте ещё раз",
1345
+ "update.release": "Открыть релиз",
1346
+ "settings.title": "ИИ-генерация (dsh-imagegen)",
1347
+ "settings.description": "Адрес и ключ API генерации изображений",
1348
+ "settings.currentVersion": "Текущая версия",
1349
+ "settings.apiUrl": "Адрес API (api_url)",
1350
+ "settings.apiUrlHint": "База OpenAI-совместимого API, например https://api.openai.com/v1; /images/generations и /images/edits дописываются автоматически",
1351
+ "settings.apiKey": "Ключ API (api_key)",
1352
+ "settings.apiKeyHint": "Bearer-ключ хранится открыто в локальном документе настроек; интерфейс показывает лишь факт его наличия",
1353
+ "settings.apiKeySet": "Ключ сохранён; введите новый, чтобы заменить, или нажмите «Очистить»",
1354
+ "settings.apiKeyClear": "Очистить",
1355
+ "settings.imageModelsTitle": "Модели генерации",
1356
+ "settings.imageModelsHint": "После сохранения адреса и ключа будут найдены кандидаты; выбирайте только те, что реально умеют генерировать изображения.",
1357
+ "settings.imageModels": "Разрешённые модели генерации",
1358
+ "settings.imageModelsManualHint": "По одной модели в строке; можно заполнить вручную, если API не отдаёт /models. Панель и агент используют только этот список.",
1359
+ "settings.imageModelsFetch": "Найти модели",
1360
+ "settings.imageModelsLoading": "Ищем…",
1361
+ "settings.imageModelsCandidates": "Найденные кандидаты (отметьте и сохраните)",
1362
+ "settings.addModel": "+ Добавить вручную",
1363
+ "settings.cancelAddModel": "Скрыть добавление",
1364
+ "settings.addModelPlaceholder": "Имя модели, например qwen-image",
1365
+ "settings.addModelConfirm": "Добавить",
1366
+ "settings.removeModel": "Удалить модель",
1367
+ "settings.optional": "необязательно",
1368
+ "settings.moreOptions": "Дополнительно",
1369
+ "settings.promptEnhanceTitle": "Модель улучшения промптов",
1370
+ "settings.promptEnhanceHint": "Разворачивает краткое описание в полноценный промпт; пустые адрес и ключ наследуют настройки генерации.",
1371
+ "settings.promptApiUrl": "Адрес диалогового API (необязательно)",
1372
+ "settings.promptApiUrlHint": "OpenAI-совместимая база; если пусто — используется адрес API генерации.",
1373
+ "settings.promptApiKey": "Ключ диалогового API (необязательно)",
1374
+ "settings.promptApiKeyHint": "Если пусто — используется ключ API генерации.",
1375
+ "settings.promptModel": "Диалоговая модель",
1376
+ "settings.promptModelHint": "Выберите или впишите модель с поддержкой /chat/completions.",
1377
+ "settings.promptModelDetectionHint": "По умолчанию используется API генерации; после поиска просто выберите модель.",
1378
+ "settings.promptModelsFetch": "Получить модели",
1379
+ "settings.promptModelsLoading": "Получаем…",
1380
+ "settings.promptModelsSelect": "Выберите модель",
1381
+ "settings.promptModelsCandidates": "Найденные диалоговые модели",
1382
+ "settings.addPromptModelPlaceholder": "Имя диалоговой модели, например gpt-4.1-mini",
1383
+ "settings.promptApiAdvanced": "Отдельный диалоговый API (необязательно)",
1384
+ "settings.announceToAgent": "Оповещать агентов о плагине",
1385
+ "settings.announceToAgentHint": "Включено — возможности плагина добавляются в системный промпт каждого агента",
1386
+ "settings.allowAgentImageGeneration": "Разрешить агентам генерацию",
1387
+ "settings.allowAgentImageGenerationHint": "Включено по умолчанию. Выключено — агенты не могут создавать, смотреть или отменять задачи; боковая панель работает.",
1388
+ "settings.enabled": "Включить плагин",
1389
+ "settings.enabledHint": "Выключено — панель генерации недоступна (карточка настроек работает всегда)",
1390
+ "settings.save": "Сохранить",
1391
+ "settings.saving": "Сохраняем…",
1392
+ "settings.discard": "Отменить правки",
1393
+ "settings.unsaved": "Есть несохранённые правки",
1394
+ "settings.saveFailed": "Не удалось сохранить, попробуйте ещё раз",
1395
+ "settings.readOnly": "Документ настроек сейчас только для чтения, сохранить нельзя.",
1396
+ "settings.notExposed": "Пространство настроек недоступно: этот деплой не предоставляет сервис настроек плагина.",
1397
+ "settings.expand": "Развернуть",
1398
+ "settings.collapse": "Свернуть",
1399
+ "settings.inherit": "Наследовать",
1400
+ "settings.on": "Вкл",
1401
+ "settings.off": "Выкл",
1402
+ "settings.overridden": "Переопределено",
1403
+ "settings.reset": "Сбросить",
1404
+ "settings.invalidNumber": "Введите корректное число",
1405
+ "templates.open": "Шаблоны",
1406
+ "templates.title": "Библиотека промпт-шаблонов",
1407
+ "templates.sources": "Источники шаблонов",
1408
+ "templates.meta": "Всего шаблонов: {count} · {origin}",
1409
+ "templates.origin.bundled": "встроенный снимок",
1410
+ "templates.origin.refreshed": "обновлено онлайн",
1411
+ "templates.search": "Поиск по названиям и промптам…",
1412
+ "templates.all": "Все",
1413
+ "templates.close": "Закрыть",
1414
+ "templates.back": "К списку",
1415
+ "templates.use": "Использовать промпт",
1416
+ "templates.copy": "Копировать промпт",
1417
+ "templates.copied": "Скопировано",
1418
+ "templates.refresh": "Обновить библиотеку",
1419
+ "templates.refreshing": "Обновляем…",
1420
+ "templates.refreshed": "Обновлено, шаблонов: {count}",
1421
+ "templates.refreshFailed": "Ошибка обновления: {error}",
1422
+ "templates.favorites": "Избранное",
1423
+ "templates.favoritesHint": "Показать только избранные шаблоны",
1424
+ "templates.favoritesEmpty": "Пока пусто — нажмите звёздочку в углу карточки, чтобы сохранить шаблон",
1425
+ "templates.favoriteAdd": "Добавить в избранное",
1426
+ "templates.favoriteRemove": "Убрать из избранного",
1427
+ "templates.favorite": "В избранное",
1428
+ "templates.unfavorite": "В избранном",
1429
+ "templates.cacheAll": "Кэшировать все картинки",
1430
+ "templates.cacheAllHint": "Через локальный прокси сохранит все референсы этой библиотеки на диск — дальше доступно офлайн",
1431
+ "templates.caching": "Кэшируем {done}/{total}…",
1432
+ "templates.cached": "Все картинки закэшированы",
1433
+ "templates.empty": "Нет подходящих шаблонов",
1434
+ "templates.loading": "Загружаем библиотеку…",
1435
+ "templates.loadFailed": "Не удалось загрузить библиотеку: {error}",
1436
+ "templates.retry": "Повторить",
1437
+ "templates.attribution": "Шаблоны и изображения принадлежат сайтам-источникам; ссылки на авторов — в карточках",
1438
+ "templates.source": "Источник: {label}",
1439
+ "templates.featured": "Выбор редакции",
1440
+ "inspiration.title": "Вдохновение",
1441
+ "inspiration.shuffle": "Другие",
1442
+ "inspiration.shuffling": "Подбираем…",
1443
+ "inspiration.useHint": "Нажмите, чтобы использовать промпт",
1444
+ "channels.title": "Каналы",
1445
+ "channels.hint": "Укажите адрес и ключ API каждого канала — и модели станут доступны",
1446
+ "channels.empty": "Каналов пока нет — добавьте кнопкой ниже",
1447
+ "channels.addProvider": "Добавить провайдера",
1448
+ "channels.addCustom": "Добавить свой канал",
1449
+ "channels.untitled": "Канал без названия",
1450
+ "channels.keySet": "Ключ задан",
1451
+ "channels.keyMissing": "Ключ не задан",
1452
+ "channels.modelCount": "Моделей: {n}",
1453
+ "channels.noModels": "Модели не настроены",
1454
+ "channels.defaultLabel": "По умолчанию",
1455
+ "channels.statusReady": "Готов",
1456
+ "channels.statusIncomplete": "Настройка не завершена",
1457
+ "channels.edit": "Править",
1458
+ "channels.delete": "Удалить",
1459
+ "channels.deleteConfirmTitle": "Удалить канал «{name}»? Ключ канала будет удалён; история и галерея сохранятся.",
1460
+ "channels.confirm": "Удалить",
1461
+ "channels.cancel": "Отмена",
1462
+ "channels.editorTitle": "Канал",
1463
+ "channels.editorSaveNote": "Изменения вступят в силу после «Сохранить» внизу карточки",
1464
+ "channels.displayName": "Название",
1465
+ "channels.apiUrl": "Адрес API",
1466
+ "channels.apiKey": "Ключ API",
1467
+ "channels.keyReplaceHint": "Задан — введите новый, чтобы заменить",
1468
+ "channels.keyMissingHint": "Введите ключ",
1469
+ "channels.keyClear": "Очистить ключ",
1470
+ "channels.modelCatalogTitle": "Каталог моделей",
1471
+ "channels.noModelsHint": "Моделей пока нет: нажмите «Найти» для списка кандидатов или добавьте вручную; псевдоним по умолчанию равен id модели и его можно менять.",
1472
+ "channels.detect": "Найти снова",
1473
+ "channels.detecting": "Ищем…",
1474
+ "channels.detectSuccess": "Связь есть ✓ · кандидатов: {n}",
1475
+ "channels.detectFailed": "Ошибка поиска: {error}",
1476
+ "channels.detectOk": "API отвечает",
1477
+ "channels.modelAliasLabel": "Псевдоним (отображается)",
1478
+ "channels.modelIdLabel": "id модели у провайдера",
1479
+ "channels.generated": "Сгенерировано: {n}",
1480
+ "channels.unknownProtocol": "Протокол неизвестен — пробуем универсальный OpenAI",
1481
+ "channels.removeModel": "Удалить модель",
1482
+ "channels.manualAddPlaceholder": "id модели, например qwen-image",
1483
+ "channels.addModelConfirm": "Добавить",
1484
+ "channels.copyFrom": "Скопировать из канала…",
1485
+ "channels.copyApply": "Копировать",
1486
+ "channels.candidatesTitle": "Кандидаты (нажмите, чтобы добавить)",
1487
+ "channels.deleteThisChannel": "Удалить этот канал",
1488
+ "channels.setDefault": "Сделать каналом по умолчанию",
1489
+ "channels.presetPickerTitle": "Добавить провайдера",
1490
+ "channels.presetPickerHint": "Выберите встроенного провайдера — останется ввести только ключ API",
1491
+ "channels.presetCustomHint": "Свой адрес, ключ и каталог моделей",
1492
+ "channels.presetLoadFailed": "Не удалось загрузить провайдеров: {error}"
1493
+ };
1120
1494
  //#endregion
1121
1495
  //#region src/client/helpers.ts
1122
1496
  /**
1123
- * Shared panel helpers: the active-dictionary pick (document-language based,
1124
- * dsh-ssh precedent) bound to the dsh-imagegen interpolator, plus a small
1497
+ * Shared panel helpers: the active-dictionary pick bound to the dsh-imagegen
1498
+ * interpolator, the plugin locale that follows the DSH interface language
1499
+ * (bridged in client/index.ts from ctx.locale — the plugin ships zh / en / ru
1500
+ * and registers itself as a DSH language pack for Русский), plus a small
1125
1501
  * error-message extractor. All copy stays in the locale dictionaries.
1126
1502
  */
1127
- /** Active dictionary, picked by the document language at call time. */
1503
+ const DICTIONARIES = {
1504
+ zh,
1505
+ en,
1506
+ ru
1507
+ };
1508
+ /** The active DSH locale mapped onto our dictionary (module-level, one value per app). */
1509
+ let activeLocale = "zh";
1510
+ /** Bumped on every locale change; useSyncExternalStore version. */
1511
+ let languageVersion = 0;
1512
+ const languageListeners = /* @__PURE__ */ new Set();
1513
+ /**
1514
+ * Adopt the DSH interface language. Unknown ids (future language packs)
1515
+ * resolve to English — the same per-key fallback convention the host locale
1516
+ * chain uses.
1517
+ */
1518
+ function applyHostLocale(id) {
1519
+ const next = id === "zh" || id === "ru" ? id : "en";
1520
+ if (next === activeLocale) return;
1521
+ activeLocale = next;
1522
+ languageVersion += 1;
1523
+ for (const listener of [...languageListeners]) listener();
1524
+ }
1525
+ /** Monotonic version of the active locale (external-store snapshot). */
1526
+ function getImageGenLanguageVersion() {
1527
+ return languageVersion;
1528
+ }
1529
+ /** Observe locale changes; returns the unsubscriber. */
1530
+ function subscribeImageGenLanguage(listener) {
1531
+ languageListeners.add(listener);
1532
+ return () => {
1533
+ languageListeners.delete(listener);
1534
+ };
1535
+ }
1536
+ /** Active dictionary for the current DSH language. */
1128
1537
  function dictionary() {
1129
- return (typeof document !== "undefined" ? document.documentElement.lang : "zh").toLowerCase().startsWith("en") ? { ...en } : { ...zh };
1538
+ return DICTIONARIES[activeLocale];
1130
1539
  }
1131
1540
  /** Translate a key with optional {name} template params (current language). */
1132
1541
  function tt(key, values) {
@@ -1153,51 +1562,51 @@ window.__ModuleLoader__.load({
1153
1562
  document.head.appendChild(tag);
1154
1563
  }
1155
1564
  var templates_module_css_default = {
1156
- "card": "o0mAxG_card",
1157
- "shell": "o0mAxG_shell",
1158
- "detailPrompt": "o0mAxG_detailPrompt",
1159
- "footer": "o0mAxG_footer",
1160
- "sourceLink": "o0mAxG_sourceLink",
1161
- "detail": "o0mAxG_detail",
1162
- "cardTitle": "o0mAxG_cardTitle",
1163
- "heading": "o0mAxG_heading",
1164
- "thumbPlaceholder": "o0mAxG_thumbPlaceholder",
1165
- "overlay": "o0mAxG_overlay",
1565
+ "detailActions": "o0mAxG_detailActions",
1566
+ "spinner": "o0mAxG_spinner",
1567
+ "thumbWrap": "o0mAxG_thumbWrap",
1568
+ "cardCategory": "o0mAxG_cardCategory",
1569
+ "search": "o0mAxG_search",
1570
+ "favStar": "o0mAxG_favStar",
1166
1571
  "detailOverlay": "o0mAxG_detailOverlay",
1167
- "cardSource": "o0mAxG_cardSource",
1168
- "meta": "o0mAxG_meta",
1169
- "cardBody": "o0mAxG_cardBody",
1170
- "sourceTabCount": "o0mAxG_sourceTabCount",
1572
+ "close": "o0mAxG_close",
1573
+ "featuredBadge": "o0mAxG_featuredBadge",
1574
+ "detailPrompt": "o0mAxG_detailPrompt",
1575
+ "cardMeta": "o0mAxG_cardMeta",
1576
+ "detailMeta": "o0mAxG_detailMeta",
1577
+ "card": "o0mAxG_card",
1578
+ "dsh-imagegen-templates-spin": "o0mAxG_dsh-imagegen-templates-spin",
1171
1579
  "toolbar": "o0mAxG_toolbar",
1172
- "detailImage": "o0mAxG_detailImage",
1173
- "detailLink": "o0mAxG_detailLink",
1580
+ "categoryRow": "o0mAxG_categoryRow",
1174
1581
  "categoryPill": "o0mAxG_categoryPill",
1582
+ "overlay": "o0mAxG_overlay",
1583
+ "meta": "o0mAxG_meta",
1584
+ "detailMedia": "o0mAxG_detailMedia",
1175
1585
  "body": "o0mAxG_body",
1176
- "grid": "o0mAxG_grid",
1177
- "thumb": "o0mAxG_thumb",
1178
- "close": "o0mAxG_close",
1179
- "cardCategory": "o0mAxG_cardCategory",
1586
+ "detailImage": "o0mAxG_detailImage",
1180
1587
  "header": "o0mAxG_header",
1181
- "detailActions": "o0mAxG_detailActions",
1182
- "categoryRow": "o0mAxG_categoryRow",
1588
+ "detailLink": "o0mAxG_detailLink",
1589
+ "heading": "o0mAxG_heading",
1590
+ "headerActions": "o0mAxG_headerActions",
1183
1591
  "sourceTabs": "o0mAxG_sourceTabs",
1592
+ "sourceTab": "o0mAxG_sourceTab",
1593
+ "state": "o0mAxG_state",
1594
+ "shell": "o0mAxG_shell",
1595
+ "thumb": "o0mAxG_thumb",
1596
+ "detailInfo": "o0mAxG_detailInfo",
1597
+ "cardTitle": "o0mAxG_cardTitle",
1598
+ "sourceTabCount": "o0mAxG_sourceTabCount",
1599
+ "grid": "o0mAxG_grid",
1600
+ "thumbPlaceholder": "o0mAxG_thumbPlaceholder",
1601
+ "sourceLink": "o0mAxG_sourceLink",
1184
1602
  "notice": "o0mAxG_notice",
1185
- "headerActions": "o0mAxG_headerActions",
1186
- "dsh-imagegen-templates-spin": "o0mAxG_dsh-imagegen-templates-spin",
1187
- "featuredBadge": "o0mAxG_featuredBadge",
1188
- "detailMedia": "o0mAxG_detailMedia",
1189
- "favStar": "o0mAxG_favStar",
1603
+ "cardBody": "o0mAxG_cardBody",
1190
1604
  "attribution": "o0mAxG_attribution",
1191
- "spinner": "o0mAxG_spinner",
1192
- "state": "o0mAxG_state",
1193
- "title": "o0mAxG_title",
1194
- "cardMeta": "o0mAxG_cardMeta",
1195
- "sourceTab": "o0mAxG_sourceTab",
1605
+ "detail": "o0mAxG_detail",
1196
1606
  "detailTitle": "o0mAxG_detailTitle",
1197
- "detailInfo": "o0mAxG_detailInfo",
1198
- "search": "o0mAxG_search",
1199
- "thumbWrap": "o0mAxG_thumbWrap",
1200
- "detailMeta": "o0mAxG_detailMeta"
1607
+ "title": "o0mAxG_title",
1608
+ "cardSource": "o0mAxG_cardSource",
1609
+ "footer": "o0mAxG_footer"
1201
1610
  };
1202
1611
  //#endregion
1203
1612
  //#region src/client/TemplateLibrary.tsx
@@ -1825,19 +2234,19 @@ window.__ModuleLoader__.load({
1825
2234
  document.head.appendChild(tag);
1826
2235
  }
1827
2236
  var inspiration_module_css_default = {
1828
- "thumbWrap": "IgRnJG_thumbWrap",
1829
- "thumbTitle": "IgRnJG_thumbTitle",
1830
2237
  "emptyIcon": "IgRnJG_emptyIcon",
1831
- "thumb": "IgRnJG_thumb",
2238
+ "wrap": "IgRnJG_wrap",
2239
+ "spinner": "IgRnJG_spinner",
2240
+ "thumbWrap": "IgRnJG_thumbWrap",
1832
2241
  "grid": "IgRnJG_grid",
2242
+ "thumb": "IgRnJG_thumb",
2243
+ "title": "IgRnJG_title",
2244
+ "emptyTitle": "IgRnJG_emptyTitle",
1833
2245
  "emptyHint": "IgRnJG_emptyHint",
1834
- "thumbFallback": "IgRnJG_thumbFallback",
1835
- "spinner": "IgRnJG_spinner",
1836
- "dsh-imagegen-inspiration-spin": "IgRnJG_dsh-imagegen-inspiration-spin",
1837
2246
  "tile": "IgRnJG_tile",
1838
- "wrap": "IgRnJG_wrap",
1839
- "title": "IgRnJG_title",
1840
- "emptyTitle": "IgRnJG_emptyTitle"
2247
+ "thumbFallback": "IgRnJG_thumbFallback",
2248
+ "thumbTitle": "IgRnJG_thumbTitle",
2249
+ "dsh-imagegen-inspiration-spin": "IgRnJG_dsh-imagegen-inspiration-spin"
1841
2250
  };
1842
2251
  //#endregion
1843
2252
  //#region src/client/InspirationGallery.tsx
@@ -1984,6 +2393,18 @@ window.__ModuleLoader__.load({
1984
2393
  });
1985
2394
  }
1986
2395
  //#endregion
2396
+ //#region src/client/use-language.ts
2397
+ /**
2398
+ * React binding for the plugin locale, which follows the DSH interface
2399
+ * language (bridged from ctx.locale in client/index.ts). Surfaces that render
2400
+ * tt() output subscribe to this tick so a DSH language switch re-renders them
2401
+ * immediately.
2402
+ */
2403
+ /** Re-render the calling component whenever the DSH language changes. */
2404
+ function useImageGenLanguageTick() {
2405
+ return (0, react.useSyncExternalStore)(subscribeImageGenLanguage, getImageGenLanguageVersion);
2406
+ }
2407
+ //#endregion
1987
2408
  //#region src/client/settings-scope.ts
1988
2409
  /**
1989
2410
  * Browser-side settings scope for the dsh-imagegen namespace, served by the
@@ -2296,6 +2717,14 @@ window.__ModuleLoader__.load({
2296
2717
  supportsEdit: false,
2297
2718
  supportsAspectRatio: false,
2298
2719
  qualityTiers: ["HD"]
2720
+ },
2721
+ qwen: {
2722
+ label: "qwen-image",
2723
+ labelZh: "千问图像",
2724
+ known: true,
2725
+ supportsEdit: true,
2726
+ supportsAspectRatio: true,
2727
+ qualityTiers: ["auto"]
2299
2728
  }
2300
2729
  };
2301
2730
  /** Official Gemini image ids served by Nano Banana gateways. */
@@ -2334,6 +2763,10 @@ window.__ModuleLoader__.load({
2334
2763
  family: "zhipu",
2335
2764
  ...ENTRIES.zhipu
2336
2765
  };
2766
+ if (/^qwen-image(?:[-_.]|$)/i.test(id)) return {
2767
+ family: "qwen",
2768
+ ...ENTRIES.qwen
2769
+ };
2337
2770
  return {
2338
2771
  family: "unknown",
2339
2772
  label: "unknown",
@@ -2360,226 +2793,226 @@ window.__ModuleLoader__.load({
2360
2793
  document.head.appendChild(tag);
2361
2794
  }
2362
2795
  var panel_module_css_default = {
2363
- "modelMenuList": "Yvqh9W_modelMenuList",
2364
- "lightboxCopy": "Yvqh9W_lightboxCopy",
2365
- "panelTitle": "Yvqh9W_panelTitle",
2366
- "taskRows": "Yvqh9W_taskRows",
2367
- "modePill": "Yvqh9W_modePill",
2368
- "modelSelect": "Yvqh9W_modelSelect",
2369
- "lightboxCaption": "Yvqh9W_lightboxCaption",
2370
- "sessionTabs": "Yvqh9W_sessionTabs",
2371
- "lightboxScaleFrame": "Yvqh9W_lightboxScaleFrame",
2372
- "galleryTagFilterList": "Yvqh9W_galleryTagFilterList",
2373
- "ecommerceGroupGrid": "Yvqh9W_ecommerceGroupGrid",
2374
- "historyHeaderActions": "Yvqh9W_historyHeaderActions",
2796
+ "galleryRatio": "Yvqh9W_galleryRatio",
2797
+ "lightboxMeta": "Yvqh9W_lightboxMeta",
2798
+ "ecommerceAsset": "Yvqh9W_ecommerceAsset",
2375
2799
  "configGuideBody": "Yvqh9W_configGuideBody",
2376
- "updateActions": "Yvqh9W_updateActions",
2800
+ "enhanceButton": "Yvqh9W_enhanceButton",
2801
+ "imageCaption": "Yvqh9W_imageCaption",
2802
+ "ecommercePlanNote": "Yvqh9W_ecommercePlanNote",
2803
+ "zoomHint": "Yvqh9W_zoomHint",
2804
+ "historyTitle": "Yvqh9W_historyTitle",
2805
+ "comparisonImageButton": "Yvqh9W_comparisonImageButton",
2806
+ "topNavDivider": "Yvqh9W_topNavDivider",
2807
+ "modelWrap": "Yvqh9W_modelWrap",
2808
+ "galleryAdd": "Yvqh9W_galleryAdd",
2809
+ "historyHeaderActions": "Yvqh9W_historyHeaderActions",
2810
+ "historyFilters": "Yvqh9W_historyFilters",
2811
+ "configGuide": "Yvqh9W_configGuide",
2812
+ "previewBadge": "Yvqh9W_previewBadge",
2813
+ "updateBanner": "Yvqh9W_updateBanner",
2814
+ "ecommerceAssetAdd": "Yvqh9W_ecommerceAssetAdd",
2815
+ "panelHeaderActions": "Yvqh9W_panelHeaderActions",
2816
+ "modelLabel": "Yvqh9W_modelLabel",
2817
+ "galleryFilterHeading": "Yvqh9W_galleryFilterHeading",
2818
+ "gallerySelectMode": "Yvqh9W_gallerySelectMode",
2819
+ "gallerySort": "Yvqh9W_gallerySort",
2820
+ "historyMeta": "Yvqh9W_historyMeta",
2821
+ "grid": "Yvqh9W_grid",
2822
+ "download": "Yvqh9W_download",
2823
+ "galleryTagEditor": "Yvqh9W_galleryTagEditor",
2824
+ "ecommerceField": "Yvqh9W_ecommerceField",
2825
+ "canvas": "Yvqh9W_canvas",
2826
+ "panelHeading": "Yvqh9W_panelHeading",
2827
+ "taskRow": "Yvqh9W_taskRow",
2377
2828
  "historyList": "Yvqh9W_historyList",
2829
+ "historySearch": "Yvqh9W_historySearch",
2830
+ "ecommerceAdvancedBody": "Yvqh9W_ecommerceAdvancedBody",
2831
+ "galleryToolbarActions": "Yvqh9W_galleryToolbarActions",
2832
+ "galleryBulkButton": "Yvqh9W_galleryBulkButton",
2833
+ "galleryFilter": "Yvqh9W_galleryFilter",
2834
+ "connectionStatus": "Yvqh9W_connectionStatus",
2835
+ "panel": "Yvqh9W_panel",
2836
+ "reference": "Yvqh9W_reference",
2837
+ "galleryToast": "Yvqh9W_galleryToast",
2838
+ "comparisonFullscreenGrid": "Yvqh9W_comparisonFullscreenGrid",
2839
+ "modelMenuItem": "Yvqh9W_modelMenuItem",
2840
+ "panelTitle": "Yvqh9W_panelTitle",
2841
+ "githubLink": "Yvqh9W_githubLink",
2842
+ "galleryTagInput": "Yvqh9W_galleryTagInput",
2378
2843
  "topNavItem": "Yvqh9W_topNavItem",
2379
- "ecommerceFieldLabel": "Yvqh9W_ecommerceFieldLabel",
2380
- "galleryWorkspace": "Yvqh9W_galleryWorkspace",
2381
- "ecommerceAdvancedToggle": "Yvqh9W_ecommerceAdvancedToggle",
2382
- "panelHeader": "Yvqh9W_panelHeader",
2383
- "historyMeta": "Yvqh9W_historyMeta",
2384
- "galleryToolbar": "Yvqh9W_galleryToolbar",
2385
- "galleryCardInfo": "Yvqh9W_galleryCardInfo",
2386
- "historyNew": "Yvqh9W_historyNew",
2387
- "updateBanner": "Yvqh9W_updateBanner",
2388
- "ecommerceTaskState": "Yvqh9W_ecommerceTaskState",
2389
- "gallerySearch": "Yvqh9W_gallerySearch",
2844
+ "optionGrid": "Yvqh9W_optionGrid",
2845
+ "lightboxDownload": "Yvqh9W_lightboxDownload",
2846
+ "configResizer": "Yvqh9W_configResizer",
2847
+ "ecommerceResultBadge": "Yvqh9W_ecommerceResultBadge",
2390
2848
  "configHeader": "Yvqh9W_configHeader",
2391
- "sessionTab": "Yvqh9W_sessionTab",
2849
+ "gallerySearch": "Yvqh9W_gallerySearch",
2392
2850
  "ecommerceSlotCard": "Yvqh9W_ecommerceSlotCard",
2851
+ "ecommerceSlotCount": "Yvqh9W_ecommerceSlotCount",
2852
+ "uploadBox": "Yvqh9W_uploadBox",
2853
+ "lightboxZoomLevel": "Yvqh9W_lightboxZoomLevel",
2393
2854
  "optionPill": "Yvqh9W_optionPill",
2394
- "galleryCardActions": "Yvqh9W_galleryCardActions",
2395
- "canvas": "Yvqh9W_canvas",
2396
- "ecommercePrimaryAction": "Yvqh9W_ecommercePrimaryAction",
2397
- "galleryViewToggle": "Yvqh9W_galleryViewToggle",
2398
- "galleryFilterHeading": "Yvqh9W_galleryFilterHeading",
2399
- "ecommerceTaskActions": "Yvqh9W_ecommerceTaskActions",
2400
- "optionRow": "Yvqh9W_optionRow",
2401
- "dshImageGenSpin": "Yvqh9W_dshImageGenSpin",
2402
- "entryIcon": "Yvqh9W_entryIcon",
2403
- "panelHeaderActions": "Yvqh9W_panelHeaderActions",
2404
- "galleryAdd": "Yvqh9W_galleryAdd",
2405
- "ecommerceSectionHint": "Yvqh9W_ecommerceSectionHint",
2406
- "ecommerceResultBadge": "Yvqh9W_ecommerceResultBadge",
2407
- "taskTrayHeader": "Yvqh9W_taskTrayHeader",
2408
2855
  "lightboxStage": "Yvqh9W_lightboxStage",
2409
- "studio": "Yvqh9W_studio",
2410
- "taskTrayCount": "Yvqh9W_taskTrayCount",
2411
- "ecommerceAssetAdd": "Yvqh9W_ecommerceAssetAdd",
2412
- "chatToggle": "Yvqh9W_chatToggle",
2413
- "uploadBox": "Yvqh9W_uploadBox",
2414
- "generateButton": "Yvqh9W_generateButton",
2415
- "canvasMeta": "Yvqh9W_canvasMeta",
2416
- "entry": "Yvqh9W_entry",
2417
- "sessionTabIcon": "Yvqh9W_sessionTabIcon",
2418
- "ecommerceResultsActions": "Yvqh9W_ecommerceResultsActions",
2419
- "canvasStateHint": "Yvqh9W_canvasStateHint",
2420
- "lightboxActions": "Yvqh9W_lightboxActions",
2421
- "modeRow": "Yvqh9W_modeRow",
2422
2856
  "galleryFilterCount": "Yvqh9W_galleryFilterCount",
2423
- "prompt": "Yvqh9W_prompt",
2424
- "lightboxZoomLevel": "Yvqh9W_lightboxZoomLevel",
2425
- "lightboxEdit": "Yvqh9W_lightboxEdit",
2426
- "galleryFilterNote": "Yvqh9W_galleryFilterNote",
2427
- "compareModelChoices": "Yvqh9W_compareModelChoices",
2857
+ "imageCard": "Yvqh9W_imageCard",
2858
+ "galleryCardActions": "Yvqh9W_galleryCardActions",
2859
+ "galleryRatioList": "Yvqh9W_galleryRatioList",
2860
+ "connectionDot": "Yvqh9W_connectionDot",
2861
+ "ecommerceSectionHint": "Yvqh9W_ecommerceSectionHint",
2428
2862
  "comparisonFullscreen": "Yvqh9W_comparisonFullscreen",
2863
+ "galleryRemove": "Yvqh9W_galleryRemove",
2864
+ "ecommerceRefRow": "Yvqh9W_ecommerceRefRow",
2865
+ "gallerySelectionBar": "Yvqh9W_gallerySelectionBar",
2866
+ "galleryWorkspace": "Yvqh9W_galleryWorkspace",
2867
+ "galleryImage": "Yvqh9W_galleryImage",
2868
+ "historyEmpty": "Yvqh9W_historyEmpty",
2429
2869
  "galleryTagEdit": "Yvqh9W_galleryTagEdit",
2430
- "galleryRatio": "Yvqh9W_galleryRatio",
2431
- "topNavDivider": "Yvqh9W_topNavDivider",
2432
- "canvasEmptyIcon": "Yvqh9W_canvasEmptyIcon",
2433
- "comparisonGrid": "Yvqh9W_comparisonGrid",
2434
- "historyPrompt": "Yvqh9W_historyPrompt",
2435
- "galleryCount": "Yvqh9W_galleryCount",
2436
- "sessionTabLabel": "Yvqh9W_sessionTabLabel",
2437
- "historyTitle": "Yvqh9W_historyTitle",
2438
- "updateRelease": "Yvqh9W_updateRelease",
2439
- "historyFilters": "Yvqh9W_historyFilters",
2440
- "historyItem": "Yvqh9W_historyItem",
2441
- "ecommerceWorkspace": "Yvqh9W_ecommerceWorkspace",
2442
- "chatResizer": "Yvqh9W_chatResizer",
2443
- "ecommerceStructureGrid": "Yvqh9W_ecommerceStructureGrid",
2444
- "ecommerceAsset": "Yvqh9W_ecommerceAsset",
2445
- "ecommercePlanBack": "Yvqh9W_ecommercePlanBack",
2446
- "uploadIcon": "Yvqh9W_uploadIcon",
2870
+ "taskTrayChevron": "Yvqh9W_taskTrayChevron",
2871
+ "taskTrayClose": "Yvqh9W_taskTrayClose",
2872
+ "historyThumb": "Yvqh9W_historyThumb",
2873
+ "ecommerceAdvancedToggle": "Yvqh9W_ecommerceAdvancedToggle",
2874
+ "galleryHeading": "Yvqh9W_galleryHeading",
2875
+ "galleryCard": "Yvqh9W_galleryCard",
2447
2876
  "uploadHint": "Yvqh9W_uploadHint",
2448
- "modelMenuItem": "Yvqh9W_modelMenuItem",
2449
- "canvasStateTitle": "Yvqh9W_canvasStateTitle",
2450
- "canvasBody": "Yvqh9W_canvasBody",
2451
- "ecommercePlanMini": "Yvqh9W_ecommercePlanMini",
2452
- "conversationAdd": "Yvqh9W_conversationAdd",
2453
- "conversationToast": "Yvqh9W_conversationToast",
2454
- "compareControl": "Yvqh9W_compareControl",
2455
- "historyActions": "Yvqh9W_historyActions",
2456
- "promptFooter": "Yvqh9W_promptFooter",
2457
- "configGuide": "Yvqh9W_configGuide",
2458
- "gallerySort": "Yvqh9W_gallerySort",
2459
- "ecommerceSection": "Yvqh9W_ecommerceSection",
2877
+ "promptCount": "Yvqh9W_promptCount",
2878
+ "modelSelect": "Yvqh9W_modelSelect",
2879
+ "lightboxIndex": "Yvqh9W_lightboxIndex",
2880
+ "ecommerceStructureGrid": "Yvqh9W_ecommerceStructureGrid",
2881
+ "lightbox": "Yvqh9W_lightbox",
2882
+ "comparisonGrid": "Yvqh9W_comparisonGrid",
2883
+ "entryIcon": "Yvqh9W_entryIcon",
2460
2884
  "paramGroup": "Yvqh9W_paramGroup",
2461
- "ecommerceAdvancedChevron": "Yvqh9W_ecommerceAdvancedChevron",
2885
+ "historyHeader": "Yvqh9W_historyHeader",
2886
+ "gallerySelectionClear": "Yvqh9W_gallerySelectionClear",
2887
+ "galleryCardAction": "Yvqh9W_galleryCardAction",
2888
+ "gallerySelect": "Yvqh9W_gallerySelect",
2889
+ "updateText": "Yvqh9W_updateText",
2890
+ "lightboxCaption": "Yvqh9W_lightboxCaption",
2891
+ "ecommercePrimaryAction": "Yvqh9W_ecommercePrimaryAction",
2892
+ "canvasEmptyIcon": "Yvqh9W_canvasEmptyIcon",
2893
+ "panelHeader": "Yvqh9W_panelHeader",
2894
+ "historyPrompt": "Yvqh9W_historyPrompt",
2462
2895
  "generateInner": "Yvqh9W_generateInner",
2463
- "galleryCard": "Yvqh9W_galleryCard",
2464
- "imageCard": "Yvqh9W_imageCard",
2465
- "grid": "Yvqh9W_grid",
2466
- "configResizer": "Yvqh9W_configResizer",
2467
- "canvasHistoryTag": "Yvqh9W_canvasHistoryTag",
2896
+ "lightboxTools": "Yvqh9W_lightboxTools",
2897
+ "compareModelChoices": "Yvqh9W_compareModelChoices",
2468
2898
  "configScroll": "Yvqh9W_configScroll",
2469
- "view": "Yvqh9W_view",
2470
- "lightbox": "Yvqh9W_lightbox",
2899
+ "historyClear": "Yvqh9W_historyClear",
2900
+ "configToggle": "Yvqh9W_configToggle",
2471
2901
  "historyInfo": "Yvqh9W_historyInfo",
2902
+ "referenceActions": "Yvqh9W_referenceActions",
2903
+ "lightboxNav": "Yvqh9W_lightboxNav",
2904
+ "galleryFilterNote": "Yvqh9W_galleryFilterNote",
2472
2905
  "comparisonBoard": "Yvqh9W_comparisonBoard",
2473
- "templatesButton": "Yvqh9W_templatesButton",
2474
- "compareToggle": "Yvqh9W_compareToggle",
2475
- "paramLabel": "Yvqh9W_paramLabel",
2906
+ "galleryTagFilter": "Yvqh9W_galleryTagFilter",
2907
+ "historyMain": "Yvqh9W_historyMain",
2908
+ "galleryCount": "Yvqh9W_galleryCount",
2909
+ "lightboxActions": "Yvqh9W_lightboxActions",
2476
2910
  "ecommerceParamGrid": "Yvqh9W_ecommerceParamGrid",
2477
- "galleryClear": "Yvqh9W_galleryClear",
2478
- "taskRow": "Yvqh9W_taskRow",
2479
- "ecommerceTaskCard": "Yvqh9W_ecommerceTaskCard",
2911
+ "ecommercePlanBack": "Yvqh9W_ecommercePlanBack",
2912
+ "canvasBody": "Yvqh9W_canvasBody",
2913
+ "galleryBadge": "Yvqh9W_galleryBadge",
2914
+ "card": "Yvqh9W_card",
2915
+ "canvasState": "Yvqh9W_canvasState",
2916
+ "galleryFilterDivider": "Yvqh9W_galleryFilterDivider",
2917
+ "historyActions": "Yvqh9W_historyActions",
2918
+ "view": "Yvqh9W_view",
2919
+ "galleryImageButton": "Yvqh9W_galleryImageButton",
2920
+ "sessionTab": "Yvqh9W_sessionTab",
2921
+ "history": "Yvqh9W_history",
2922
+ "sessionTabIcon": "Yvqh9W_sessionTabIcon",
2923
+ "ecommerceFooterHint": "Yvqh9W_ecommerceFooterHint",
2924
+ "modeRow": "Yvqh9W_modeRow",
2925
+ "lightboxCopy": "Yvqh9W_lightboxCopy",
2926
+ "entryLabel": "Yvqh9W_entryLabel",
2927
+ "ecommercePlanWarn": "Yvqh9W_ecommercePlanWarn",
2928
+ "promptFooter": "Yvqh9W_promptFooter",
2480
2929
  "ecommerceResults": "Yvqh9W_ecommerceResults",
2481
- "enhanceButton": "Yvqh9W_enhanceButton",
2482
- "config": "Yvqh9W_config",
2930
+ "ecommerceResultsHeader": "Yvqh9W_ecommerceResultsHeader",
2931
+ "historyThumbPlaceholder": "Yvqh9W_historyThumbPlaceholder",
2932
+ "ecommercePlanMini": "Yvqh9W_ecommercePlanMini",
2933
+ "referenceImage": "Yvqh9W_referenceImage",
2934
+ "templatesButton": "Yvqh9W_templatesButton",
2935
+ "uploadIcon": "Yvqh9W_uploadIcon",
2936
+ "ecommerceGroup": "Yvqh9W_ecommerceGroup",
2937
+ "modelMenu": "Yvqh9W_modelMenu",
2938
+ "canvasMeta": "Yvqh9W_canvasMeta",
2483
2939
  "bigSpinner": "Yvqh9W_bigSpinner",
2484
- "historySearch": "Yvqh9W_historySearch",
2485
- "footer": "Yvqh9W_footer",
2486
- "zoomHint": "Yvqh9W_zoomHint",
2487
- "galleryToast": "Yvqh9W_galleryToast",
2488
- "generation": "Yvqh9W_generation",
2489
- "ecommerceAssets": "Yvqh9W_ecommerceAssets",
2490
- "dshImageGenToastIn": "Yvqh9W_dshImageGenToastIn",
2491
- "topNav": "Yvqh9W_topNav",
2492
- "historyEmpty": "Yvqh9W_historyEmpty",
2493
- "ecommerceRefRow": "Yvqh9W_ecommerceRefRow",
2494
- "galleryFilter": "Yvqh9W_galleryFilter",
2495
- "galleryRatioList": "Yvqh9W_galleryRatioList",
2496
- "comparisonImageButton": "Yvqh9W_comparisonImageButton",
2497
- "spinner": "Yvqh9W_spinner",
2498
- "comparisonFullscreenGrid": "Yvqh9W_comparisonFullscreenGrid",
2940
+ "image": "Yvqh9W_image",
2941
+ "dshImageGenSpin": "Yvqh9W_dshImageGenSpin",
2942
+ "sessionTabLabel": "Yvqh9W_sessionTabLabel",
2943
+ "chatToggle": "Yvqh9W_chatToggle",
2944
+ "modePill": "Yvqh9W_modePill",
2945
+ "lightboxScaleFrame": "Yvqh9W_lightboxScaleFrame",
2499
2946
  "lightboxCaptionRow": "Yvqh9W_lightboxCaptionRow",
2500
- "gallerySelect": "Yvqh9W_gallerySelect",
2501
- "ecommerceFooterBody": "Yvqh9W_ecommerceFooterBody",
2502
- "ecommerceGroup": "Yvqh9W_ecommerceGroup",
2503
- "history": "Yvqh9W_history",
2504
- "ecommerceField": "Yvqh9W_ecommerceField",
2947
+ "galleryMasonry": "Yvqh9W_galleryMasonry",
2948
+ "ecommerceWorkspace": "Yvqh9W_ecommerceWorkspace",
2949
+ "ecommerceTaskActions": "Yvqh9W_ecommerceTaskActions",
2950
+ "lightboxImage": "Yvqh9W_lightboxImage",
2505
2951
  "ecommerceGroups": "Yvqh9W_ecommerceGroups",
2506
- "referenceActions": "Yvqh9W_referenceActions",
2507
- "paramHint": "Yvqh9W_paramHint",
2508
- "ecommercePlanList": "Yvqh9W_ecommercePlanList",
2509
- "lightboxFigure": "Yvqh9W_lightboxFigure",
2510
- "image": "Yvqh9W_image",
2952
+ "ecommerceActionChip": "Yvqh9W_ecommerceActionChip",
2953
+ "ecommerceAdvancedChevron": "Yvqh9W_ecommerceAdvancedChevron",
2511
2954
  "sidebarHistoryHost": "Yvqh9W_sidebarHistoryHost",
2512
- "galleryFilterDivider": "Yvqh9W_galleryFilterDivider",
2513
- "ecommercePlanWarn": "Yvqh9W_ecommercePlanWarn",
2514
- "galleryToolbarActions": "Yvqh9W_galleryToolbarActions",
2515
- "updateText": "Yvqh9W_updateText",
2516
- "taskTrayClose": "Yvqh9W_taskTrayClose",
2517
- "gallerySelectMode": "Yvqh9W_gallerySelectMode",
2518
- "gallerySelectionClear": "Yvqh9W_gallerySelectionClear",
2955
+ "taskRows": "Yvqh9W_taskRows",
2519
2956
  "taskTray": "Yvqh9W_taskTray",
2520
- "imageCaption": "Yvqh9W_imageCaption",
2521
- "galleryImageButton": "Yvqh9W_galleryImageButton",
2522
- "taskTrayToggle": "Yvqh9W_taskTrayToggle",
2523
- "ecommerceAdvancedBody": "Yvqh9W_ecommerceAdvancedBody",
2524
- "ecommerceActionChip": "Yvqh9W_ecommerceActionChip",
2525
- "previewBadge": "Yvqh9W_previewBadge",
2526
- "galleryMasonry": "Yvqh9W_galleryMasonry",
2957
+ "ecommerceResultsActions": "Yvqh9W_ecommerceResultsActions",
2958
+ "paramLabel": "Yvqh9W_paramLabel",
2959
+ "galleryFilters": "Yvqh9W_galleryFilters",
2960
+ "chatResizer": "Yvqh9W_chatResizer",
2961
+ "galleryClear": "Yvqh9W_galleryClear",
2962
+ "config": "Yvqh9W_config",
2963
+ "taskTrayHeader": "Yvqh9W_taskTrayHeader",
2964
+ "ecommerceFieldLabel": "Yvqh9W_ecommerceFieldLabel",
2965
+ "historyNew": "Yvqh9W_historyNew",
2966
+ "ecommerceGroupGrid": "Yvqh9W_ecommerceGroupGrid",
2967
+ "modelMenuList": "Yvqh9W_modelMenuList",
2968
+ "ecommercePlanList": "Yvqh9W_ecommercePlanList",
2969
+ "generateButton": "Yvqh9W_generateButton",
2970
+ "canvasStateHint": "Yvqh9W_canvasStateHint",
2971
+ "lightboxTool": "Yvqh9W_lightboxTool",
2972
+ "ecommerceFooterBody": "Yvqh9W_ecommerceFooterBody",
2973
+ "footer": "Yvqh9W_footer",
2974
+ "conversationToast": "Yvqh9W_conversationToast",
2975
+ "galleryViewToggle": "Yvqh9W_galleryViewToggle",
2976
+ "compareToggle": "Yvqh9W_compareToggle",
2977
+ "paramHint": "Yvqh9W_paramHint",
2978
+ "galleryTagFilterList": "Yvqh9W_galleryTagFilterList",
2979
+ "lightboxFigure": "Yvqh9W_lightboxFigure",
2527
2980
  "galleryCardFooter": "Yvqh9W_galleryCardFooter",
2528
- "lightboxTools": "Yvqh9W_lightboxTools",
2529
- "promptCount": "Yvqh9W_promptCount",
2530
- "lightboxImage": "Yvqh9W_lightboxImage",
2531
- "lightboxMeta": "Yvqh9W_lightboxMeta",
2532
- "gallerySelectionBar": "Yvqh9W_gallerySelectionBar",
2533
- "galleryBulkButton": "Yvqh9W_galleryBulkButton",
2981
+ "historyAction": "Yvqh9W_historyAction",
2982
+ "galleryAvatar": "Yvqh9W_galleryAvatar",
2983
+ "galleryTags": "Yvqh9W_galleryTags",
2984
+ "sessionTabs": "Yvqh9W_sessionTabs",
2534
2985
  "lightboxClose": "Yvqh9W_lightboxClose",
2535
- "galleryTagEditor": "Yvqh9W_galleryTagEditor",
2536
2986
  "ecommerceResultsEmpty": "Yvqh9W_ecommerceResultsEmpty",
2537
- "ecommercePlanNote": "Yvqh9W_ecommercePlanNote",
2538
- "githubLink": "Yvqh9W_githubLink",
2539
- "galleryRemove": "Yvqh9W_galleryRemove",
2540
- "referenceImage": "Yvqh9W_referenceImage",
2541
- "lightboxNav": "Yvqh9W_lightboxNav",
2542
- "ecommerceFooterHint": "Yvqh9W_ecommerceFooterHint",
2543
- "lightboxTool": "Yvqh9W_lightboxTool",
2544
- "ecommerceSlotCount": "Yvqh9W_ecommerceSlotCount",
2545
- "panelHeading": "Yvqh9W_panelHeading",
2546
- "optionGrid": "Yvqh9W_optionGrid",
2547
- "download": "Yvqh9W_download",
2548
- "lightboxDownload": "Yvqh9W_lightboxDownload",
2549
- "canvasError": "Yvqh9W_canvasError",
2550
- "taskTrayChevron": "Yvqh9W_taskTrayChevron",
2551
- "galleryTagInput": "Yvqh9W_galleryTagInput",
2552
- "card": "Yvqh9W_card",
2553
- "lightboxIndex": "Yvqh9W_lightboxIndex",
2554
- "galleryCardAction": "Yvqh9W_galleryCardAction",
2555
- "galleryImage": "Yvqh9W_galleryImage",
2556
- "historyMain": "Yvqh9W_historyMain",
2557
- "galleryBadge": "Yvqh9W_galleryBadge",
2558
- "taskStatus": "Yvqh9W_taskStatus",
2559
- "modelMenu": "Yvqh9W_modelMenu",
2987
+ "ecommerceTaskCard": "Yvqh9W_ecommerceTaskCard",
2988
+ "topNav": "Yvqh9W_topNav",
2989
+ "optionRow": "Yvqh9W_optionRow",
2990
+ "updateActions": "Yvqh9W_updateActions",
2991
+ "studio": "Yvqh9W_studio",
2992
+ "updateRelease": "Yvqh9W_updateRelease",
2993
+ "generation": "Yvqh9W_generation",
2994
+ "canvasStateTitle": "Yvqh9W_canvasStateTitle",
2995
+ "taskTrayToggle": "Yvqh9W_taskTrayToggle",
2996
+ "ecommerceTaskState": "Yvqh9W_ecommerceTaskState",
2560
2997
  "ecommerceUploadHero": "Yvqh9W_ecommerceUploadHero",
2561
- "galleryAvatar": "Yvqh9W_galleryAvatar",
2562
- "galleryTags": "Yvqh9W_galleryTags",
2563
- "galleryHeading": "Yvqh9W_galleryHeading",
2564
- "panel": "Yvqh9W_panel",
2565
- "galleryFilters": "Yvqh9W_galleryFilters",
2566
- "canvasState": "Yvqh9W_canvasState",
2567
- "ecommerceResultsHeader": "Yvqh9W_ecommerceResultsHeader",
2568
- "connectionDot": "Yvqh9W_connectionDot",
2569
- "galleryTagFilter": "Yvqh9W_galleryTagFilter",
2570
- "historyAction": "Yvqh9W_historyAction",
2571
- "entryLabel": "Yvqh9W_entryLabel",
2572
- "connectionStatus": "Yvqh9W_connectionStatus",
2573
- "historyClear": "Yvqh9W_historyClear",
2574
- "historyThumb": "Yvqh9W_historyThumb",
2575
- "configToggle": "Yvqh9W_configToggle",
2998
+ "compareControl": "Yvqh9W_compareControl",
2999
+ "galleryCardInfo": "Yvqh9W_galleryCardInfo",
3000
+ "taskTrayCount": "Yvqh9W_taskTrayCount",
2576
3001
  "taskPrompt": "Yvqh9W_taskPrompt",
2577
- "historyHeader": "Yvqh9W_historyHeader",
2578
- "reference": "Yvqh9W_reference",
2579
- "modelWrap": "Yvqh9W_modelWrap",
2580
- "modelLabel": "Yvqh9W_modelLabel",
3002
+ "prompt": "Yvqh9W_prompt",
3003
+ "conversationAdd": "Yvqh9W_conversationAdd",
3004
+ "spinner": "Yvqh9W_spinner",
2581
3005
  "hiddenFile": "Yvqh9W_hiddenFile",
2582
- "historyThumbPlaceholder": "Yvqh9W_historyThumbPlaceholder"
3006
+ "ecommerceSection": "Yvqh9W_ecommerceSection",
3007
+ "taskStatus": "Yvqh9W_taskStatus",
3008
+ "lightboxEdit": "Yvqh9W_lightboxEdit",
3009
+ "canvasHistoryTag": "Yvqh9W_canvasHistoryTag",
3010
+ "ecommerceAssets": "Yvqh9W_ecommerceAssets",
3011
+ "historyItem": "Yvqh9W_historyItem",
3012
+ "entry": "Yvqh9W_entry",
3013
+ "galleryToolbar": "Yvqh9W_galleryToolbar",
3014
+ "canvasError": "Yvqh9W_canvasError",
3015
+ "dshImageGenToastIn": "Yvqh9W_dshImageGenToastIn"
2583
3016
  };
2584
3017
  //#endregion
2585
3018
  //#region src/client/ImageGenPanel.tsx
@@ -3013,6 +3446,7 @@ window.__ModuleLoader__.load({
3013
3446
  function ImageGenPanel(props) {
3014
3447
  const { api, scope, sessions, conversation } = props;
3015
3448
  const config = useConfig(scope);
3449
+ useImageGenLanguageTick();
3016
3450
  const enabled = config?.enabled ?? true;
3017
3451
  const modelOptions = imageModelOptions(config);
3018
3452
  const imageModels = (config?.channels ?? []).length > 0 ? modelOptions.models : normalizeImageModels(config?.imageModels);
@@ -7025,97 +7459,97 @@ window.__ModuleLoader__.load({
7025
7459
  document.head.appendChild(tag);
7026
7460
  }
7027
7461
  var settings_card_module_css_default = {
7028
- "pending": "i1cc5G_pending",
7029
- "card": "i1cc5G_card",
7030
- "badge": "i1cc5G_badge",
7031
- "optionalContent": "i1cc5G_optionalContent",
7032
- "presetList": "i1cc5G_presetList",
7033
- "headText": "i1cc5G_headText",
7034
- "header": "i1cc5G_header",
7035
- "notExposed": "i1cc5G_notExposed",
7462
+ "channelAction": "i1cc5G_channelAction",
7463
+ "channelHost": "i1cc5G_channelHost",
7464
+ "presetMeta": "i1cc5G_presetMeta",
7036
7465
  "disclosure": "i1cc5G_disclosure",
7466
+ "modelFetchRow": "i1cc5G_modelFetchRow",
7467
+ "sectionHint": "i1cc5G_sectionHint",
7037
7468
  "footer": "i1cc5G_footer",
7038
- "channelRow": "i1cc5G_channelRow",
7039
- "editorPanel": "i1cc5G_editorPanel",
7040
- "badges": "i1cc5G_badges",
7041
- "editorField": "i1cc5G_editorField",
7042
- "select": "i1cc5G_select",
7043
- "chevronOpen": "i1cc5G_chevronOpen",
7044
- "editorFooter": "i1cc5G_editorFooter",
7045
- "presetMeta": "i1cc5G_presetMeta",
7046
- "modelCandidate": "i1cc5G_modelCandidate",
7047
- "channelList": "i1cc5G_channelList",
7048
- "channelMain": "i1cc5G_channelMain",
7049
- "name": "i1cc5G_name",
7050
- "chevron": "i1cc5G_chevron",
7051
- "modelBadge": "i1cc5G_modelBadge",
7052
- "editorHeader": "i1cc5G_editorHeader",
7053
- "presetInline": "i1cc5G_presetInline",
7054
- "modelChip": "i1cc5G_modelChip",
7055
- "failed": "i1cc5G_failed",
7056
- "versionValue": "i1cc5G_versionValue",
7057
- "head": "i1cc5G_head",
7469
+ "presetRow": "i1cc5G_presetRow",
7058
7470
  "editorSectionHeader": "i1cc5G_editorSectionHeader",
7059
- "editorDivider": "i1cc5G_editorDivider",
7060
- "sectionHint": "i1cc5G_sectionHint",
7061
- "versionLabel": "i1cc5G_versionLabel",
7062
- "sectionDivider": "i1cc5G_sectionDivider",
7063
- "channelDotWarn": "i1cc5G_channelDotWarn",
7064
- "channelDanger": "i1cc5G_channelDanger",
7065
- "label": "i1cc5G_label",
7066
- "save": "i1cc5G_save",
7067
- "editorClose": "i1cc5G_editorClose",
7471
+ "modelArrow": "i1cc5G_modelArrow",
7472
+ "inlineDisclosure": "i1cc5G_inlineDisclosure",
7068
7473
  "presetInlineHeader": "i1cc5G_presetInlineHeader",
7069
- "channelHost": "i1cc5G_channelHost",
7070
- "channelMeta": "i1cc5G_channelMeta",
7071
- "presetName": "i1cc5G_presetName",
7072
- "presetRow": "i1cc5G_presetRow",
7073
7474
  "reset": "i1cc5G_reset",
7074
- "description": "i1cc5G_description",
7075
- "inputInvalid": "i1cc5G_inputInvalid",
7076
- "modelFetchRow": "i1cc5G_modelFetchRow",
7475
+ "channelDanger": "i1cc5G_channelDanger",
7476
+ "modelSection": "i1cc5G_modelSection",
7477
+ "channelMeta": "i1cc5G_channelMeta",
7478
+ "editorBackdrop": "i1cc5G_editorBackdrop",
7479
+ "modelRowBadges": "i1cc5G_modelRowBadges",
7480
+ "modelRow": "i1cc5G_modelRow",
7481
+ "chevron": "i1cc5G_chevron",
7077
7482
  "body": "i1cc5G_body",
7078
- "invalid": "i1cc5G_invalid",
7483
+ "versionRow": "i1cc5G_versionRow",
7484
+ "sectionTitle": "i1cc5G_sectionTitle",
7485
+ "inputInvalid": "i1cc5G_inputInvalid",
7079
7486
  "textareaInvalid": "i1cc5G_textareaInvalid",
7487
+ "failed": "i1cc5G_failed",
7488
+ "modelChip": "i1cc5G_modelChip",
7489
+ "select": "i1cc5G_select",
7490
+ "channelName": "i1cc5G_channelName",
7491
+ "channelAdd": "i1cc5G_channelAdd",
7492
+ "spacer": "i1cc5G_spacer",
7493
+ "card": "i1cc5G_card",
7494
+ "channelEmpty": "i1cc5G_channelEmpty",
7495
+ "modelRows": "i1cc5G_modelRows",
7496
+ "presetList": "i1cc5G_presetList",
7497
+ "editorField": "i1cc5G_editorField",
7498
+ "presetName": "i1cc5G_presetName",
7499
+ "badges": "i1cc5G_badges",
7500
+ "notExposed": "i1cc5G_notExposed",
7080
7501
  "sectionHeader": "i1cc5G_sectionHeader",
7081
7502
  "modelChoices": "i1cc5G_modelChoices",
7082
- "channelAction": "i1cc5G_channelAction",
7083
- "editorTools": "i1cc5G_editorTools",
7503
+ "modelCandidateLabel": "i1cc5G_modelCandidateLabel",
7084
7504
  "discard": "i1cc5G_discard",
7085
- "channelSection": "i1cc5G_channelSection",
7086
- "channelName": "i1cc5G_channelName",
7087
- "modelRowRemove": "i1cc5G_modelRowRemove",
7088
- "modelRow": "i1cc5G_modelRow",
7089
- "modelRowBadges": "i1cc5G_modelRowBadges",
7090
- "modelArrow": "i1cc5G_modelArrow",
7091
- "channelControls": "i1cc5G_channelControls",
7092
- "field": "i1cc5G_field",
7093
- "deleteConfirmText": "i1cc5G_deleteConfirmText",
7094
- "addModel": "i1cc5G_addModel",
7095
- "modelRows": "i1cc5G_modelRows",
7096
- "channelBadge": "i1cc5G_channelBadge",
7097
- "inlineDisclosure": "i1cc5G_inlineDisclosure",
7098
- "channelAdd": "i1cc5G_channelAdd",
7099
- "presetHint": "i1cc5G_presetHint",
7100
7505
  "textarea": "i1cc5G_textarea",
7506
+ "versionLabel": "i1cc5G_versionLabel",
7507
+ "header": "i1cc5G_header",
7508
+ "editorFooter": "i1cc5G_editorFooter",
7509
+ "deleteConfirmText": "i1cc5G_deleteConfirmText",
7510
+ "label": "i1cc5G_label",
7511
+ "input": "i1cc5G_input",
7101
7512
  "modelSummary": "i1cc5G_modelSummary",
7102
- "manualModelRow": "i1cc5G_manualModelRow",
7513
+ "channelAddRow": "i1cc5G_channelAddRow",
7103
7514
  "modelFetch": "i1cc5G_modelFetch",
7104
- "readOnly": "i1cc5G_readOnly",
7515
+ "editorTools": "i1cc5G_editorTools",
7516
+ "modelRowRemove": "i1cc5G_modelRowRemove",
7517
+ "head": "i1cc5G_head",
7105
7518
  "hint": "i1cc5G_hint",
7106
- "spacer": "i1cc5G_spacer",
7107
- "editorBackdrop": "i1cc5G_editorBackdrop",
7108
- "modelSection": "i1cc5G_modelSection",
7109
- "input": "i1cc5G_input",
7110
7519
  "detectOk": "i1cc5G_detectOk",
7111
- "versionRow": "i1cc5G_versionRow",
7112
- "sectionTitle": "i1cc5G_sectionTitle",
7520
+ "editorHeader": "i1cc5G_editorHeader",
7521
+ "chevronOpen": "i1cc5G_chevronOpen",
7522
+ "channelSection": "i1cc5G_channelSection",
7523
+ "invalid": "i1cc5G_invalid",
7524
+ "channelBadge": "i1cc5G_channelBadge",
7525
+ "editorClose": "i1cc5G_editorClose",
7526
+ "headText": "i1cc5G_headText",
7527
+ "channelList": "i1cc5G_channelList",
7528
+ "pending": "i1cc5G_pending",
7529
+ "channelDotWarn": "i1cc5G_channelDotWarn",
7530
+ "manualModelRow": "i1cc5G_manualModelRow",
7531
+ "presetHint": "i1cc5G_presetHint",
7532
+ "channelMain": "i1cc5G_channelMain",
7533
+ "editorPanel": "i1cc5G_editorPanel",
7534
+ "addModel": "i1cc5G_addModel",
7535
+ "channelControls": "i1cc5G_channelControls",
7536
+ "versionValue": "i1cc5G_versionValue",
7537
+ "badge": "i1cc5G_badge",
7538
+ "channelDotReady": "i1cc5G_channelDotReady",
7539
+ "editorDivider": "i1cc5G_editorDivider",
7540
+ "modelBadge": "i1cc5G_modelBadge",
7541
+ "save": "i1cc5G_save",
7542
+ "description": "i1cc5G_description",
7543
+ "field": "i1cc5G_field",
7544
+ "name": "i1cc5G_name",
7545
+ "channelRow": "i1cc5G_channelRow",
7546
+ "optionalContent": "i1cc5G_optionalContent",
7547
+ "sectionDivider": "i1cc5G_sectionDivider",
7113
7548
  "modelRowInputs": "i1cc5G_modelRowInputs",
7549
+ "presetInline": "i1cc5G_presetInline",
7114
7550
  "modelCandidateList": "i1cc5G_modelCandidateList",
7115
- "modelCandidateLabel": "i1cc5G_modelCandidateLabel",
7116
- "channelEmpty": "i1cc5G_channelEmpty",
7117
- "channelAddRow": "i1cc5G_channelAddRow",
7118
- "channelDotReady": "i1cc5G_channelDotReady"
7551
+ "readOnly": "i1cc5G_readOnly",
7552
+ "modelCandidate": "i1cc5G_modelCandidate"
7119
7553
  };
7120
7554
  //#endregion
7121
7555
  //#region src/client/SettingsCard.tsx
@@ -7186,7 +7620,8 @@ window.__ModuleLoader__.load({
7186
7620
  * @returns the card, or nothing while the namespace is still loading.
7187
7621
  */
7188
7622
  function ImageGenSettingsCard(props) {
7189
- const { t } = props;
7623
+ const t = tt;
7624
+ useImageGenLanguageTick();
7190
7625
  const state = props.useImageGenSettingsCard((snapshot) => snapshot);
7191
7626
  const [open, setOpen] = (0, react.useState)(false);
7192
7627
  const [promptModels, setPromptModels] = (0, react.useState)([]);
@@ -7688,10 +8123,10 @@ window.__ModuleLoader__.load({
7688
8123
  ...fieldProps,
7689
8124
  ...state.allowAgentImageGeneration,
7690
8125
  onEdit: (text) => {
7691
- props.edit("allowAgentImageGeneration", text);
8126
+ props.edit("enabled", text);
7692
8127
  },
7693
8128
  onReset: () => {
7694
- props.resetField("allowAgentImageGeneration");
8129
+ props.resetField("enabled");
7695
8130
  }
7696
8131
  })
7697
8132
  ]
@@ -8378,16 +8813,16 @@ window.__ModuleLoader__.load({
8378
8813
  document.head.appendChild(tag);
8379
8814
  }
8380
8815
  var image_toolview_module_css_default = {
8816
+ "root": "_3eGrYG_root",
8817
+ "status": "_3eGrYG_status",
8818
+ "error": "_3eGrYG_error",
8381
8819
  "images": "_3eGrYG_images",
8820
+ "imageLink": "_3eGrYG_imageLink",
8382
8821
  "message": "_3eGrYG_message",
8383
- "loading": "_3eGrYG_loading",
8822
+ "image": "_3eGrYG_image",
8384
8823
  "header": "_3eGrYG_header",
8385
8824
  "icon": "_3eGrYG_icon",
8386
- "error": "_3eGrYG_error",
8387
- "image": "_3eGrYG_image",
8388
- "imageLink": "_3eGrYG_imageLink",
8389
- "status": "_3eGrYG_status",
8390
- "root": "_3eGrYG_root"
8825
+ "loading": "_3eGrYG_loading"
8391
8826
  };
8392
8827
  //#endregion
8393
8828
  //#region src/client/image-toolview.tsx
@@ -8578,6 +9013,34 @@ window.__ModuleLoader__.load({
8578
9013
  zh,
8579
9014
  en
8580
9015
  }), "dsh-imagegen: dictionaries");
9016
+ ctx.effect(() => {
9017
+ try {
9018
+ return ctx.locale.register(NS, "ru", ru);
9019
+ } catch (error) {
9020
+ console.warn("[dsh-imagegen] ru dictionary not registered:", error);
9021
+ return () => {};
9022
+ }
9023
+ }, "dsh-imagegen: ru dictionary");
9024
+ ctx.effect(() => {
9025
+ try {
9026
+ if (ctx.locale.getLocale().locales.some((locale) => locale.id === "ru")) return () => {};
9027
+ return ctx.locale.addLanguage({
9028
+ id: "ru",
9029
+ label: "Русский",
9030
+ fallback: "en"
9031
+ });
9032
+ } catch (error) {
9033
+ console.warn("[dsh-imagegen] ru language not added to the catalog:", error);
9034
+ return () => {};
9035
+ }
9036
+ }, "dsh-imagegen: ru language pack");
9037
+ ctx.effect(() => {
9038
+ const applyLocale = () => {
9039
+ applyHostLocale(ctx.locale.getLocale().active);
9040
+ };
9041
+ applyLocale();
9042
+ return ctx.locale.subscribe(applyLocale);
9043
+ }, "dsh-imagegen: follow host locale");
8581
9044
  registerImageToolviews(ctx);
8582
9045
  const scope = bindImageGenScope(ctx.get("connection")?.isLoopback === true ? (input, init) => fetch(input, init) : () => {
8583
9046
  throw new Error("settings bridge is loopback-only");
@@ -8611,6 +9074,28 @@ window.__ModuleLoader__.load({
8611
9074
  sessions,
8612
9075
  conversation
8613
9076
  }));
9077
+ disposers.push(ctx.locale.subscribe(() => {
9078
+ const root = document.querySelector("[data-dsh-imagegen-sidebar-root]");
9079
+ if (root === null) return;
9080
+ const labels = [[
9081
+ "new-session",
9082
+ tt("entry.newSession"),
9083
+ tt("entry.newSessionTooltip")
9084
+ ], [
9085
+ "image",
9086
+ tt("entry.image"),
9087
+ tt("entry.tooltip")
9088
+ ]];
9089
+ for (const [tab, label, tooltip] of labels) {
9090
+ const button = root.querySelector(`[data-dsh-imagegen-tab="${tab}"]`);
9091
+ if (button === null) continue;
9092
+ button.setAttribute("aria-label", label);
9093
+ button.setAttribute("title", tooltip);
9094
+ const labelSpan = button.querySelector("span:nth-child(2)");
9095
+ if (labelSpan !== null) labelSpan.textContent = label;
9096
+ }
9097
+ root.querySelector("[role=\"tablist\"][data-dsh-imagegen-session-tabs]")?.setAttribute("aria-label", tt("entry.tooltip"));
9098
+ }));
8614
9099
  } catch (error) {
8615
9100
  console.warn("[dsh-imagegen] mount failed:", error);
8616
9101
  }