@dickpy/dsh-imagegen 1.4.0 → 1.5.1
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/LICENSE +201 -201
- package/README.md +270 -124
- package/cordis.patch.yml +8 -8
- package/docs/images/ecommerce-mode.png +0 -0
- package/docs/images/image-generation-studio-three-column.png +0 -0
- package/docs/images/imagegen-overview.png +0 -0
- package/docs/videos/agent-chat-edit.gif +0 -0
- package/docs/videos/agent-chat-edit.mp4 +0 -0
- package/lib/client.js +1873 -431
- package/lib/client.js.map +1 -1
- package/lib/index.js +355 -116
- package/package.json +77 -70
- package/src/agent-image-tools.ts +447 -418
- package/src/client/ImageGenPanel.tsx +1243 -348
- package/src/client/SettingsCard.tsx +936 -936
- package/src/client/TemplateLibrary.tsx +336 -336
- package/src/client/api.ts +203 -193
- package/src/client/channels-form.ts +263 -263
- package/src/client/controller.ts +46 -46
- package/src/client/conversation-sync.ts +14 -14
- package/src/client/css-modules.d.ts +5 -5
- package/src/client/helpers.ts +33 -33
- package/src/client/image-toolview.module.css +73 -73
- package/src/client/image-toolview.tsx +34 -28
- package/src/client/index.ts +25 -24
- package/src/client/locales.ts +156 -28
- package/src/client/mount.tsx +117 -117
- package/src/client/panel.module.css +1243 -455
- package/src/client/settings-card.module.css +1023 -1023
- package/src/client/settings-form.ts +337 -336
- package/src/client/settings-scope.ts +302 -298
- package/src/client/sidebar-entry.ts +190 -190
- package/src/client/templates.module.css +453 -453
- package/src/edit-image-command.ts +110 -0
- package/src/engine.ts +520 -520
- package/src/gallery-store.ts +306 -286
- package/src/generation-runtime.ts +84 -79
- package/src/history-store.ts +270 -250
- package/src/image-format.ts +11 -11
- package/src/image-models.ts +19 -19
- package/src/index.ts +337 -318
- package/src/model-catalog.ts +115 -115
- package/src/presets.ts +71 -71
- package/src/prompt-enhancer.ts +137 -137
- package/src/protocol.ts +380 -338
- package/src/routes.ts +966 -916
- package/src/settings-compat.ts +60 -0
- package/src/task-queue.ts +113 -113
- package/src/templates/cases.json +10196 -10196
- package/src/templates-store.ts +278 -278
- package/src/updater.ts +117 -117
- package/docs/images/agent-chat-edit.png +0 -0
- package/docs/images/agent-chat-generate.png +0 -0
- package/docs/images/agent-chat-poster-workflow.png +0 -0
package/lib/client.js
CHANGED
|
@@ -9,7 +9,7 @@ window.__ModuleLoader__.load({
|
|
|
9
9
|
let react_dom = require("react-dom");
|
|
10
10
|
let _deepseek_ai_dsh_client_ui_primitives = require("@deepseek-ai/dsh-client-ui-primitives");
|
|
11
11
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
12
|
-
let
|
|
12
|
+
let _deepseek_ai_dsh_client_store = require("@deepseek-ai/dsh-client-store");
|
|
13
13
|
//#region src/protocol.ts
|
|
14
14
|
/** Same-origin route family (loopback-only, mirroring the dsh-ssh fence). */
|
|
15
15
|
const SETTINGS_API = {
|
|
@@ -29,6 +29,8 @@ window.__ModuleLoader__.load({
|
|
|
29
29
|
const PRESETS_API = "/api/dsh-imagegen/presets";
|
|
30
30
|
/** Loopback-only image reader for Agent tool-result previews. */
|
|
31
31
|
const AGENT_IMAGE_API = "/api/dsh-imagegen/agent-image";
|
|
32
|
+
/** Store the current composer image for the direct edit_image command. */
|
|
33
|
+
const CONVERSATION_IMAGE_API = "/api/dsh-imagegen/conversation-image";
|
|
32
34
|
/**
|
|
33
35
|
* Host-computed per-channel usage counters (generation-count badges in the
|
|
34
36
|
* settings card): entries are tallied from the persisted history and gallery
|
|
@@ -152,6 +154,18 @@ window.__ModuleLoader__.load({
|
|
|
152
154
|
body: JSON.stringify({ prompt })
|
|
153
155
|
}))).prompt;
|
|
154
156
|
}
|
|
157
|
+
/** Stage a generated image as a durable reference for `/edit_image`. */
|
|
158
|
+
async attachConversationImage(sessionId, dataUrl, name) {
|
|
159
|
+
await readEnvelope(await fetch(CONVERSATION_IMAGE_API, {
|
|
160
|
+
method: "POST",
|
|
161
|
+
headers: { "content-type": "application/json" },
|
|
162
|
+
body: JSON.stringify({
|
|
163
|
+
sessionId,
|
|
164
|
+
dataUrl,
|
|
165
|
+
name
|
|
166
|
+
})
|
|
167
|
+
}));
|
|
168
|
+
}
|
|
155
169
|
async taskSubmit(request) {
|
|
156
170
|
return (await readEnvelope(await fetch(TASK_API.submit, {
|
|
157
171
|
method: "POST",
|
|
@@ -300,11 +314,69 @@ window.__ModuleLoader__.load({
|
|
|
300
314
|
"conversation.add": "加入对话",
|
|
301
315
|
"conversation.adding": "加入中…",
|
|
302
316
|
"conversation.added": "图片已加入当前对话",
|
|
317
|
+
"conversation.addHint": "加入对话后可使用 /edit_image 修改;命令使用插件图片模型",
|
|
303
318
|
"conversation.noSession": "请先打开一个会话,再加入图片",
|
|
304
319
|
"conversation.unavailable": "当前会话暂不可用",
|
|
305
320
|
"conversation.busy": "当前对话正在发送,请稍后再试",
|
|
306
321
|
"mode.text": "文生图",
|
|
307
322
|
"mode.edit": "图生图",
|
|
323
|
+
"workspace.label": "创作模式",
|
|
324
|
+
"workspace.normal": "普通生图",
|
|
325
|
+
"workspace.ecommerce": "电商模式",
|
|
326
|
+
"chat.expand": "展开右侧对话",
|
|
327
|
+
"chat.collapse": "收起右侧对话",
|
|
328
|
+
"chat.toggle": "对话",
|
|
329
|
+
"config.resizeHint": "拖拽调整参数栏宽度",
|
|
330
|
+
"ecommerce.generation": "生成设置",
|
|
331
|
+
"ecommerce.title": "电商模式",
|
|
332
|
+
"ecommerce.badge": "预览",
|
|
333
|
+
"ecommerce.short": "电商",
|
|
334
|
+
"ecommerce.anchorPending": "已生成主图,其余图片正在自动参考主图生成,保证整套同款…",
|
|
335
|
+
"ecommerce.anchorFailed": "主图生成失败,其余图片已暂停。请重试主图(或整组重新生成)后再继续。",
|
|
336
|
+
"ecommerce.anchorNote": "锚定生成:先出主图,其余图片自动参考主图,保证整套同款",
|
|
337
|
+
"ecommerce.noAssetWarn": "未上传商品图:主图将按文字描述生成并作为锚定基准,建议先上传商品主图获得更高一致性",
|
|
338
|
+
"ecommerce.product": "商品信息",
|
|
339
|
+
"ecommerce.productName": "商品名称(必填)",
|
|
340
|
+
"ecommerce.projectName": "项目名称(可选)",
|
|
341
|
+
"ecommerce.constraints": "卖点与约束",
|
|
342
|
+
"ecommerce.sellingPoints": "商品卖点,例如:防水防污 / 大容量 / 便携",
|
|
343
|
+
"ecommerce.protectedFeatures": "必须保留的特征,例如:颜色、Logo、包装文字、结构",
|
|
344
|
+
"ecommerce.styleHint": "风格补充,例如:高级感 / 写实 / 自然光",
|
|
345
|
+
"ecommerce.setStructure": "套图结构",
|
|
346
|
+
"ecommerce.preview": "生成套图预览",
|
|
347
|
+
"ecommerce.planTitle": "预计生成 {count} 张图片",
|
|
348
|
+
"ecommerce.planSlot": "{count} 张 · {description}",
|
|
349
|
+
"ecommerce.confirm": "确认生成整套图片",
|
|
350
|
+
"ecommerce.uploadRef": "上传商品素材(可选,最多 4 张:主体 / 包装 / 细节 / 风格)",
|
|
351
|
+
"ecommerce.uploadShort": "上传素材",
|
|
352
|
+
"ecommerce.sellingTitle": "商品卖点",
|
|
353
|
+
"ecommerce.advanced": "高级选项(项目 / 平台 / 约束)",
|
|
354
|
+
"ecommerce.params": "参数选择",
|
|
355
|
+
"ecommerce.platformLabel": "平台",
|
|
356
|
+
"ecommerce.languageLabel": "文案语言",
|
|
357
|
+
"ecommerce.ratioLabel": "比例",
|
|
358
|
+
"ecommerce.categoryLabel": "类目",
|
|
359
|
+
"ecommerce.multiSelect": "可多选",
|
|
360
|
+
"ecommerce.countHint": "点击调整数量(1-4)",
|
|
361
|
+
"ecommerce.refSettings": "参考图设置(可选)",
|
|
362
|
+
"ecommerce.styleTitle": "风格 / 补充提示",
|
|
363
|
+
"ecommerce.protectedLabel": "必须保留的特征(可选)",
|
|
364
|
+
"ecommerce.assetsFull": "最多上传 4 张素材",
|
|
365
|
+
"ecommerce.refSelect": "该用途使用的参考图",
|
|
366
|
+
"ecommerce.refNone": "不使用参考图",
|
|
367
|
+
"ecommerce.role.product": "商品主体",
|
|
368
|
+
"ecommerce.role.packaging": "包装",
|
|
369
|
+
"ecommerce.role.detail": "细节/角度",
|
|
370
|
+
"ecommerce.role.style": "风格参考",
|
|
371
|
+
"ecommerce.footerReady": "将生成 {count} 张套图",
|
|
372
|
+
"ecommerce.footerEmpty": "请选择套图结构",
|
|
373
|
+
"ecommerce.results.title": "套图结果",
|
|
374
|
+
"ecommerce.results.progress": "{done}/{total} 已完成",
|
|
375
|
+
"ecommerce.results.failed": "{count} 张失败",
|
|
376
|
+
"ecommerce.results.empty": "确认生成后,每张图片的任务状态和结果会按用途显示在这里",
|
|
377
|
+
"ecommerce.results.regenerate": "重新生成",
|
|
378
|
+
"ecommerce.results.export": "导出清单",
|
|
379
|
+
"ecommerce.results.newProduct": "新商品",
|
|
308
380
|
"prompt.placeholder": "描述你想要的画面,例如:一只戴着宇航员头盔的橘猫,在月球上举起望远镜,水彩风格,柔和光线…",
|
|
309
381
|
"prompt.required": "请输入提示词",
|
|
310
382
|
"prompt.count": "{count}",
|
|
@@ -362,6 +434,8 @@ window.__ModuleLoader__.load({
|
|
|
362
434
|
"edit.required": "请先上传参考图片",
|
|
363
435
|
"canvas.emptyTitle": "开始你的创作",
|
|
364
436
|
"canvas.emptyHint": "在左侧输入提示词并点击「开始生成」,结果将显示在这里",
|
|
437
|
+
"canvas.new": "新建作图",
|
|
438
|
+
"canvas.newHint": "开始新的作图并清空预览",
|
|
365
439
|
"canvas.error": "生成失败:{error}",
|
|
366
440
|
"canvas.submitting": "正在加入生成队列…",
|
|
367
441
|
"canvas.queued": "已加入生成队列",
|
|
@@ -374,6 +448,7 @@ window.__ModuleLoader__.load({
|
|
|
374
448
|
"history.title": "历史记录",
|
|
375
449
|
"history.empty": "暂无历史记录,生成图片后会保存在这里",
|
|
376
450
|
"history.clear": "清空",
|
|
451
|
+
"history.clearConfirm": "确定要清空全部历史记录吗?此操作不可撤销。",
|
|
377
452
|
"history.restore": "恢复",
|
|
378
453
|
"history.delete": "删除",
|
|
379
454
|
"history.images": "张",
|
|
@@ -417,6 +492,7 @@ window.__ModuleLoader__.load({
|
|
|
417
492
|
"gallery.already": "已在画廊中",
|
|
418
493
|
"gallery.delete": "移出画廊",
|
|
419
494
|
"gallery.clear": "清空画廊",
|
|
495
|
+
"gallery.clearConfirm": "确定要清空整个画廊吗?此操作不可撤销。",
|
|
420
496
|
"gallery.empty": "画廊还是空的,把喜欢的图片加入进来吧",
|
|
421
497
|
"gallery.viewing": "画廊 · {time}",
|
|
422
498
|
"preview.title": "图片预览",
|
|
@@ -444,6 +520,8 @@ window.__ModuleLoader__.load({
|
|
|
444
520
|
"config.disabled": "插件已停用,请在设置中重新启用。",
|
|
445
521
|
"connection.connected": "已连接",
|
|
446
522
|
"connection.disconnected": "未连接",
|
|
523
|
+
"panel.collapseConfig": "收起参数栏",
|
|
524
|
+
"panel.expandConfig": "展开参数栏",
|
|
447
525
|
"update.available": "检测到新版本:{version}",
|
|
448
526
|
"update.install": "在线更新",
|
|
449
527
|
"update.installing": "更新中…",
|
|
@@ -597,11 +675,69 @@ window.__ModuleLoader__.load({
|
|
|
597
675
|
"conversation.add": "Add to chat",
|
|
598
676
|
"conversation.adding": "Adding…",
|
|
599
677
|
"conversation.added": "Image added to the current chat",
|
|
678
|
+
"conversation.addHint": "After adding to chat, use /edit_image to modify it; the command uses the plugin image model",
|
|
600
679
|
"conversation.noSession": "Open a session before adding an image",
|
|
601
680
|
"conversation.unavailable": "The current session is unavailable",
|
|
602
681
|
"conversation.busy": "The chat is sending a message; try again shortly",
|
|
603
682
|
"mode.text": "Text to Image",
|
|
604
683
|
"mode.edit": "Image to Image",
|
|
684
|
+
"workspace.label": "Workspace",
|
|
685
|
+
"workspace.normal": "Standard",
|
|
686
|
+
"workspace.ecommerce": "E-commerce",
|
|
687
|
+
"chat.expand": "Expand the conversation pane",
|
|
688
|
+
"chat.collapse": "Collapse the conversation pane",
|
|
689
|
+
"chat.toggle": "Chat",
|
|
690
|
+
"config.resizeHint": "Drag to resize the parameter panel",
|
|
691
|
+
"ecommerce.generation": "Generation settings",
|
|
692
|
+
"ecommerce.title": "E-commerce Mode",
|
|
693
|
+
"ecommerce.badge": "Beta",
|
|
694
|
+
"ecommerce.short": "Store",
|
|
695
|
+
"ecommerce.anchorPending": "Main image generated — remaining images are being generated with the main image as reference to keep the set consistent…",
|
|
696
|
+
"ecommerce.anchorFailed": "Main image failed; remaining images are paused. Retry the main image or regenerate the set.",
|
|
697
|
+
"ecommerce.anchorNote": "Anchored: main image first, remaining images reference it automatically for a consistent set",
|
|
698
|
+
"ecommerce.noAssetWarn": "No product image uploaded: the main image will be generated from text as the anchor. Upload one for higher consistency.",
|
|
699
|
+
"ecommerce.product": "Product details",
|
|
700
|
+
"ecommerce.productName": "Product name (required)",
|
|
701
|
+
"ecommerce.projectName": "Project name (optional)",
|
|
702
|
+
"ecommerce.constraints": "Selling points & constraints",
|
|
703
|
+
"ecommerce.sellingPoints": "Selling points, e.g. waterproof / large capacity / portable",
|
|
704
|
+
"ecommerce.protectedFeatures": "Features to preserve: color, logo, packaging text, structure",
|
|
705
|
+
"ecommerce.styleHint": "Style hint, e.g. premium / realistic / natural light",
|
|
706
|
+
"ecommerce.setStructure": "Image set structure",
|
|
707
|
+
"ecommerce.preview": "Preview product set",
|
|
708
|
+
"ecommerce.planTitle": "Plan to generate {count} images",
|
|
709
|
+
"ecommerce.planSlot": "{count} images · {description}",
|
|
710
|
+
"ecommerce.confirm": "Confirm and generate set",
|
|
711
|
+
"ecommerce.uploadRef": "Upload product assets (optional, up to 4: product / packaging / detail / style)",
|
|
712
|
+
"ecommerce.uploadShort": "Upload",
|
|
713
|
+
"ecommerce.sellingTitle": "Selling points",
|
|
714
|
+
"ecommerce.advanced": "Advanced (project / platform / constraints)",
|
|
715
|
+
"ecommerce.params": "Parameters",
|
|
716
|
+
"ecommerce.platformLabel": "Platform",
|
|
717
|
+
"ecommerce.languageLabel": "Copy language",
|
|
718
|
+
"ecommerce.ratioLabel": "Aspect ratio",
|
|
719
|
+
"ecommerce.categoryLabel": "Category",
|
|
720
|
+
"ecommerce.multiSelect": "multi-select",
|
|
721
|
+
"ecommerce.countHint": "Click to adjust count (1-4)",
|
|
722
|
+
"ecommerce.refSettings": "Reference images (optional)",
|
|
723
|
+
"ecommerce.styleTitle": "Style / extra hints",
|
|
724
|
+
"ecommerce.protectedLabel": "Features to preserve (optional)",
|
|
725
|
+
"ecommerce.assetsFull": "Up to 4 assets",
|
|
726
|
+
"ecommerce.refSelect": "Reference image for this slot",
|
|
727
|
+
"ecommerce.refNone": "No reference",
|
|
728
|
+
"ecommerce.role.product": "Product",
|
|
729
|
+
"ecommerce.role.packaging": "Packaging",
|
|
730
|
+
"ecommerce.role.detail": "Detail / angle",
|
|
731
|
+
"ecommerce.role.style": "Style",
|
|
732
|
+
"ecommerce.footerReady": "{count} images in this set",
|
|
733
|
+
"ecommerce.footerEmpty": "Select the image set structure",
|
|
734
|
+
"ecommerce.results.title": "Product set results",
|
|
735
|
+
"ecommerce.results.progress": "{done}/{total} completed",
|
|
736
|
+
"ecommerce.results.failed": "{count} failed",
|
|
737
|
+
"ecommerce.results.empty": "After confirming, each image task and result will show here grouped by purpose",
|
|
738
|
+
"ecommerce.results.regenerate": "Regenerate",
|
|
739
|
+
"ecommerce.results.export": "Export manifest",
|
|
740
|
+
"ecommerce.results.newProduct": "New product",
|
|
605
741
|
"prompt.placeholder": "Describe the picture you want, e.g. an orange cat in an astronaut helmet raising a telescope on the moon, watercolor style, soft light…",
|
|
606
742
|
"prompt.required": "Enter a prompt first",
|
|
607
743
|
"prompt.count": "{count}",
|
|
@@ -659,6 +795,8 @@ window.__ModuleLoader__.load({
|
|
|
659
795
|
"edit.required": "Upload a reference image first",
|
|
660
796
|
"canvas.emptyTitle": "Start creating",
|
|
661
797
|
"canvas.emptyHint": "Enter a prompt on the left and click \"Generate\"; results appear here",
|
|
798
|
+
"canvas.new": "New creation",
|
|
799
|
+
"canvas.newHint": "Start a new creation and clear the preview",
|
|
662
800
|
"canvas.error": "Generation failed: {error}",
|
|
663
801
|
"canvas.submitting": "Adding to the generation queue…",
|
|
664
802
|
"canvas.queued": "Added to the generation queue",
|
|
@@ -671,6 +809,7 @@ window.__ModuleLoader__.load({
|
|
|
671
809
|
"history.title": "History",
|
|
672
810
|
"history.empty": "No history yet — generations will be saved here",
|
|
673
811
|
"history.clear": "Clear",
|
|
812
|
+
"history.clearConfirm": "Clear all history? This action cannot be undone.",
|
|
674
813
|
"history.restore": "Restore",
|
|
675
814
|
"history.delete": "Delete",
|
|
676
815
|
"history.images": "images",
|
|
@@ -714,6 +853,7 @@ window.__ModuleLoader__.load({
|
|
|
714
853
|
"gallery.already": "Already in gallery",
|
|
715
854
|
"gallery.delete": "Remove",
|
|
716
855
|
"gallery.clear": "Clear gallery",
|
|
856
|
+
"gallery.clearConfirm": "Clear the entire gallery? This action cannot be undone.",
|
|
717
857
|
"gallery.empty": "The gallery is empty — add images you like here",
|
|
718
858
|
"gallery.viewing": "Gallery · {time}",
|
|
719
859
|
"preview.title": "Image preview",
|
|
@@ -741,6 +881,8 @@ window.__ModuleLoader__.load({
|
|
|
741
881
|
"config.disabled": "The plugin is disabled — re-enable it in Settings.",
|
|
742
882
|
"connection.connected": "Connected",
|
|
743
883
|
"connection.disconnected": "Disconnected",
|
|
884
|
+
"panel.collapseConfig": "Collapse settings panel",
|
|
885
|
+
"panel.expandConfig": "Expand settings panel",
|
|
744
886
|
"update.available": "A new version is available: {version}",
|
|
745
887
|
"update.install": "Update online",
|
|
746
888
|
"update.installing": "Updating…",
|
|
@@ -908,8 +1050,8 @@ window.__ModuleLoader__.load({
|
|
|
908
1050
|
return String(error);
|
|
909
1051
|
}
|
|
910
1052
|
//#endregion
|
|
911
|
-
//#region \0dsh-css:
|
|
912
|
-
const css$3 = ".
|
|
1053
|
+
//#region \0dsh-css:E:\dsh-plugin\src\client\templates.module.css.mjs
|
|
1054
|
+
const css$3 = ".o0mAxG_overlay,.o0mAxG_overlay *,.o0mAxG_overlay :before,.o0mAxG_overlay :after{box-sizing:border-box}.o0mAxG_overlay{z-index:130;background:var(--dsw-alias-bg-mask-1);color:var(--dsw-alias-label-primary);font-family:var(--dsw-font-family);justify-content:center;align-items:center;padding:28px;display:flex;position:fixed;inset:0}.o0mAxG_shell{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);border-radius:14px;flex-direction:column;width:min(1180px,100%);height:100%;max-height:100%;display:flex;overflow:hidden;box-shadow:0 18px 60px #00000047}.o0mAxG_header{flex:none;justify-content:space-between;align-items:center;gap:12px;padding:14px 18px 10px;display:flex}.o0mAxG_heading{align-items:baseline;gap:10px;min-width:0;display:flex}.o0mAxG_title{margin:0;font-size:15px;font-weight:650}.o0mAxG_meta{color:var(--dsw-alias-label-tertiary);white-space:nowrap;font-size:12px}.o0mAxG_headerActions{flex:none;align-items:center;gap:8px;display:inline-flex}.o0mAxG_close{width:28px;height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:8px;justify-content:center;align-items:center;display:inline-flex}.o0mAxG_close:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.o0mAxG_toolbar{flex-direction:column;flex:none;gap:10px;padding:0 18px 12px;display:flex}.o0mAxG_search{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);width:100%;height:34px;color:var(--dsw-alias-label-primary);border-radius:9px;outline:none;padding:0 12px;font-family:inherit;font-size:13px}.o0mAxG_search:focus{border-color:var(--dsw-alias-brand-primary)}.o0mAxG_search::placeholder{color:var(--dsw-alias-label-dimmed)}.o0mAxG_categoryRow{flex-wrap:wrap;gap:6px;max-height:64px;display:flex;overflow-y:auto}.o0mAxG_categoryPill{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);height:26px;color:var(--dsw-alias-label-secondary);cursor:pointer;white-space:nowrap;border-radius:999px;padding:0 11px;font-family:inherit;font-size:12px}.o0mAxG_categoryPill:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-hover)}.o0mAxG_categoryPill[data-active]{border-color:var(--dsw-alias-brand-primary);background:var(--dsw-alias-brand-primary);color:var(--dsw-alias-bg-base)}.o0mAxG_notice{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-secondary);border-radius:9px;flex:none;margin:0 18px 10px;padding:8px 12px;font-size:12px}.o0mAxG_body{flex:1;min-height:0;padding:2px 18px 14px;overflow-y:auto}.o0mAxG_state{height:100%;min-height:220px;color:var(--dsw-alias-label-tertiary);flex-direction:column;justify-content:center;align-items:center;gap:12px;font-size:13px;display:flex}.o0mAxG_spinner{border:2px solid var(--dsw-alias-border-l2);border-top-color:var(--dsw-alias-brand-primary);border-radius:50%;width:26px;height:26px;animation:.9s linear infinite o0mAxG_dsh-imagegen-templates-spin}@keyframes o0mAxG_dsh-imagegen-templates-spin{to{transform:rotate(360deg)}}.o0mAxG_grid{grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:12px;display:grid}.o0mAxG_card{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);cursor:pointer;text-align:left;color:var(--dsw-alias-label-primary);border-radius:11px;flex-direction:column;gap:0;padding:0;font-family:inherit;transition:border-color .15s,transform .15s;display:flex;overflow:hidden}.o0mAxG_card:hover{border-color:var(--dsw-alias-brand-primary);transform:translateY(-1px)}.o0mAxG_thumbWrap{aspect-ratio:1;background:var(--dsw-alias-bg-layer-2);width:100%;display:block;position:relative}.o0mAxG_thumb{object-fit:cover;width:100%;height:100%;display:block}.o0mAxG_thumbPlaceholder{width:100%;height:100%;color:var(--dsw-alias-label-dimmed);justify-content:center;align-items:center;display:flex}.o0mAxG_featuredBadge{background:var(--dsw-alias-brand-primary);color:var(--dsw-alias-bg-base);border-radius:999px;padding:2px 8px;font-size:11px;font-weight:600;position:absolute;top:8px;left:8px}.o0mAxG_cardBody{flex-direction:column;gap:4px;min-width:0;padding:9px 11px 10px;display:flex}.o0mAxG_cardTitle{-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:12.5px;font-weight:600;line-height:1.35;display:-webkit-box;overflow:hidden}.o0mAxG_cardMeta{min-width:0;color:var(--dsw-alias-label-tertiary);align-items:center;gap:6px;font-size:11px;display:flex}.o0mAxG_cardCategory{background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-secondary);border-radius:999px;flex:none;padding:1px 7px}.o0mAxG_cardSource{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.o0mAxG_footer{border-top:1px solid var(--dsw-alias-border-l1);flex:none;justify-content:space-between;align-items:center;gap:10px;padding:9px 18px;display:flex}.o0mAxG_attribution{color:var(--dsw-alias-label-dimmed);min-width:0;font-size:11.5px}.o0mAxG_sourceLink{color:var(--dsw-alias-brand-primary);white-space:nowrap;flex:none;font-size:11.5px;font-weight:600;text-decoration:none}.o0mAxG_sourceLink:hover{text-decoration:underline}.o0mAxG_detailOverlay{background:var(--dsw-alias-bg-mask-1);justify-content:center;align-items:center;padding:34px;display:flex;position:absolute;inset:0}.o0mAxG_detail{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);border-radius:14px;grid-template-rows:minmax(0,1fr);grid-template-columns:minmax(0,5fr) minmax(0,4fr);gap:0;width:min(980px,100%);max-height:100%;display:grid;overflow:hidden;box-shadow:0 18px 60px #00000052}.o0mAxG_detailMedia{background:var(--dsw-alias-bg-layer-2);justify-content:center;align-items:center;min-height:0;display:flex;overflow:hidden}.o0mAxG_detailImage{object-fit:contain;width:100%;height:100%;display:block}.o0mAxG_detailInfo{flex-direction:column;gap:10px;min-height:0;padding:18px;display:flex;overflow-y:auto}.o0mAxG_detailTitle{margin:0;font-size:15px;font-weight:650;line-height:1.4}.o0mAxG_detailMeta{color:var(--dsw-alias-label-tertiary);flex-wrap:wrap;align-items:center;gap:8px;font-size:12px;display:flex}.o0mAxG_detailLink{color:var(--dsw-alias-brand-primary);text-overflow:ellipsis;white-space:nowrap;text-decoration:none;overflow:hidden}.o0mAxG_detailLink:hover{text-decoration:underline}.o0mAxG_detailPrompt{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);min-height:0;color:var(--dsw-alias-label-primary);white-space:pre-wrap;word-break:break-word;user-select:text;border-radius:10px;flex:1;margin:0;padding:12px;font-family:inherit;font-size:12.5px;line-height:1.6;overflow-y:auto}.o0mAxG_detailActions{background:var(--dsw-alias-bg-base);border-top:1px solid var(--dsw-alias-border-l1);flex:none;gap:8px;margin:0 -18px -18px;padding:12px 18px;display:flex;position:sticky;bottom:0}@media (width<=760px){.o0mAxG_detail{grid-template-rows:minmax(0,3fr) minmax(0,4fr);grid-template-columns:1fr}}";
|
|
913
1055
|
const tagId$3 = "@dickpy/dsh-imagegen/templates.module.css";
|
|
914
1056
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$3) + "]") === null) {
|
|
915
1057
|
const tag = document.createElement("style");
|
|
@@ -919,47 +1061,47 @@ window.__ModuleLoader__.load({
|
|
|
919
1061
|
document.head.appendChild(tag);
|
|
920
1062
|
}
|
|
921
1063
|
var templates_module_css_default = {
|
|
922
|
-
"
|
|
923
|
-
"
|
|
924
|
-
"
|
|
925
|
-
"
|
|
926
|
-
"
|
|
927
|
-
"
|
|
928
|
-
"
|
|
929
|
-
"
|
|
930
|
-
"
|
|
931
|
-
"
|
|
932
|
-
"
|
|
933
|
-
"
|
|
934
|
-
"
|
|
935
|
-
"
|
|
936
|
-
"
|
|
937
|
-
"
|
|
938
|
-
"
|
|
939
|
-
"
|
|
940
|
-
"
|
|
941
|
-
"
|
|
942
|
-
"
|
|
943
|
-
"
|
|
944
|
-
"
|
|
945
|
-
"
|
|
946
|
-
"
|
|
947
|
-
"
|
|
948
|
-
"
|
|
949
|
-
"
|
|
950
|
-
"
|
|
951
|
-
"
|
|
952
|
-
"
|
|
953
|
-
"
|
|
954
|
-
"
|
|
955
|
-
"
|
|
956
|
-
"
|
|
957
|
-
"
|
|
958
|
-
"
|
|
959
|
-
"
|
|
960
|
-
"
|
|
961
|
-
"
|
|
962
|
-
"
|
|
1064
|
+
"categoryRow": "o0mAxG_categoryRow",
|
|
1065
|
+
"headerActions": "o0mAxG_headerActions",
|
|
1066
|
+
"state": "o0mAxG_state",
|
|
1067
|
+
"detailLink": "o0mAxG_detailLink",
|
|
1068
|
+
"toolbar": "o0mAxG_toolbar",
|
|
1069
|
+
"card": "o0mAxG_card",
|
|
1070
|
+
"cardCategory": "o0mAxG_cardCategory",
|
|
1071
|
+
"categoryPill": "o0mAxG_categoryPill",
|
|
1072
|
+
"thumbPlaceholder": "o0mAxG_thumbPlaceholder",
|
|
1073
|
+
"spinner": "o0mAxG_spinner",
|
|
1074
|
+
"thumbWrap": "o0mAxG_thumbWrap",
|
|
1075
|
+
"sourceLink": "o0mAxG_sourceLink",
|
|
1076
|
+
"featuredBadge": "o0mAxG_featuredBadge",
|
|
1077
|
+
"footer": "o0mAxG_footer",
|
|
1078
|
+
"search": "o0mAxG_search",
|
|
1079
|
+
"cardBody": "o0mAxG_cardBody",
|
|
1080
|
+
"cardSource": "o0mAxG_cardSource",
|
|
1081
|
+
"detailOverlay": "o0mAxG_detailOverlay",
|
|
1082
|
+
"detailInfo": "o0mAxG_detailInfo",
|
|
1083
|
+
"detailTitle": "o0mAxG_detailTitle",
|
|
1084
|
+
"detailActions": "o0mAxG_detailActions",
|
|
1085
|
+
"body": "o0mAxG_body",
|
|
1086
|
+
"attribution": "o0mAxG_attribution",
|
|
1087
|
+
"cardMeta": "o0mAxG_cardMeta",
|
|
1088
|
+
"heading": "o0mAxG_heading",
|
|
1089
|
+
"thumb": "o0mAxG_thumb",
|
|
1090
|
+
"detailPrompt": "o0mAxG_detailPrompt",
|
|
1091
|
+
"grid": "o0mAxG_grid",
|
|
1092
|
+
"shell": "o0mAxG_shell",
|
|
1093
|
+
"overlay": "o0mAxG_overlay",
|
|
1094
|
+
"header": "o0mAxG_header",
|
|
1095
|
+
"meta": "o0mAxG_meta",
|
|
1096
|
+
"close": "o0mAxG_close",
|
|
1097
|
+
"cardTitle": "o0mAxG_cardTitle",
|
|
1098
|
+
"notice": "o0mAxG_notice",
|
|
1099
|
+
"detailImage": "o0mAxG_detailImage",
|
|
1100
|
+
"title": "o0mAxG_title",
|
|
1101
|
+
"dsh-imagegen-templates-spin": "o0mAxG_dsh-imagegen-templates-spin",
|
|
1102
|
+
"detailMedia": "o0mAxG_detailMedia",
|
|
1103
|
+
"detail": "o0mAxG_detail",
|
|
1104
|
+
"detailMeta": "o0mAxG_detailMeta"
|
|
963
1105
|
};
|
|
964
1106
|
//#endregion
|
|
965
1107
|
//#region src/client/TemplateLibrary.tsx
|
|
@@ -1492,7 +1634,7 @@ window.__ModuleLoader__.load({
|
|
|
1492
1634
|
constructor(api, spec) {
|
|
1493
1635
|
this.api = api;
|
|
1494
1636
|
this.spec = spec;
|
|
1495
|
-
this.store = (0,
|
|
1637
|
+
this.store = (0, _deepseek_ai_dsh_client_store.createSnapshotStore)({
|
|
1496
1638
|
status: "loading",
|
|
1497
1639
|
value: void 0,
|
|
1498
1640
|
base: void 0,
|
|
@@ -1501,8 +1643,8 @@ window.__ModuleLoader__.load({
|
|
|
1501
1643
|
writable: false,
|
|
1502
1644
|
mode: "host"
|
|
1503
1645
|
});
|
|
1504
|
-
this.keySet = (0,
|
|
1505
|
-
this.secretSets = (0,
|
|
1646
|
+
this.keySet = (0, _deepseek_ai_dsh_client_store.createSnapshotStore)(false);
|
|
1647
|
+
this.secretSets = (0, _deepseek_ai_dsh_client_store.createSnapshotStore)({});
|
|
1506
1648
|
}
|
|
1507
1649
|
getSnapshot() {
|
|
1508
1650
|
return this.store.getSnapshot();
|
|
@@ -1543,6 +1685,9 @@ window.__ModuleLoader__.load({
|
|
|
1543
1685
|
path: [field]
|
|
1544
1686
|
}]));
|
|
1545
1687
|
}
|
|
1688
|
+
mutate(ops, expectedRevision) {
|
|
1689
|
+
return this.enqueue(() => this.writeOps([...ops], expectedRevision));
|
|
1690
|
+
}
|
|
1546
1691
|
/** Apply several path ops in one revision-fenced mutate call (atomic save).
|
|
1547
1692
|
* Path ops may address plain-object fields (e.g. `channelSecrets.<id>`),
|
|
1548
1693
|
* but never navigate *inside* arrays — write array fields wholesale. */
|
|
@@ -1591,8 +1736,8 @@ window.__ModuleLoader__.load({
|
|
|
1591
1736
|
}
|
|
1592
1737
|
this.accept(view, writable);
|
|
1593
1738
|
}
|
|
1594
|
-
async writeOps(ops) {
|
|
1595
|
-
const revision = this.getSnapshot().revision;
|
|
1739
|
+
async writeOps(ops, expectedRevision) {
|
|
1740
|
+
const revision = expectedRevision ?? this.getSnapshot().revision;
|
|
1596
1741
|
let response;
|
|
1597
1742
|
try {
|
|
1598
1743
|
response = await this.api.mutate({
|
|
@@ -1797,8 +1942,8 @@ window.__ModuleLoader__.load({
|
|
|
1797
1942
|
/** Document event used to bridge chat tool results into the image workspace. */
|
|
1798
1943
|
const CHAT_IMAGE_EVENT = "dsh-imagegen:chat-images";
|
|
1799
1944
|
//#endregion
|
|
1800
|
-
//#region \0dsh-css:
|
|
1801
|
-
const css$2 = "[data-pane=conversation],[class*=centerCol]{min-width:0;min-height:0;position:relative}[data-dsh-imagegen-view]{z-index:60;background:var(--dsw-alias-bg-base);grid-area:1/1;min-width:0;min-height:0;display:none;position:relative}html[data-dsh-imagegen-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) [data-pane=conversation],html[data-dsh-imagegen-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) [class*=centerCol]{grid-template-columns:minmax(0, 1fr) 8px minmax(320px, clamp(320px, var(--dsh-imagegen-chat-width,36%), 70%));background:var(--dsw-alias-border-l1);grid-template-rows:minmax(0,1fr);gap:1px;overflow:hidden;display:grid!important}html[data-dsh-imagegen-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) [data-dsh-imagegen-view]{display:block}html[data-dsh-imagegen-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) [data-slot=conversation]{background:var(--dsw-alias-bg-base);grid-area:1/3;align-items:stretch;width:auto;min-width:0;min-height:0;overflow:hidden;display:flex!important}html[data-dsh-imagegen-active] [data-slot=conversation]>[data-phase]{flex:auto;align-self:stretch;width:100%;min-width:0;max-width:none}html[data-dsh-imagegen-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) [data-dsh-imagegen-chat-resizer]{grid-area:1/2}.kUIMeq_chatResizer{z-index:70;width:8px;min-width:8px;color:var(--dsw-alias-label-tertiary);background:var(--dsw-alias-border-l1);cursor:col-resize;touch-action:none;justify-content:center;align-items:center;display:none;position:relative}.kUIMeq_chatResizer:before{content:\"\";opacity:.55;background:currentColor;border-radius:3px;width:3px;height:36px}.kUIMeq_chatResizer:hover,.kUIMeq_chatResizer:focus-visible{color:var(--dsw-alias-brand-primary);background:var(--dsw-alias-bg-layer-2);outline:none}html[data-dsh-imagegen-active] [data-dsh-imagegen-chat-resizer]{display:flex!important}html[data-dsh-imagegen-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) [data-pane=conversation]>:not([data-dsh-imagegen-view]):not([data-slot=conversation]):not([data-dsh-imagegen-chat-resizer]),html[data-dsh-imagegen-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) [class*=centerCol]>:not([data-dsh-imagegen-view]):not([data-slot=conversation]):not([data-dsh-imagegen-chat-resizer]),html[data-dsh-imagegen-active] [data-dsh-imagegen-sidebar-root]>:not([data-dsh-imagegen-session-tabs]):not([class*=logoRow]):not([class*=regionArea]):not([class*=footArea]){display:none!important}@media (width<=760px){html[data-dsh-imagegen-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) [data-pane=conversation],html[data-dsh-imagegen-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) [class*=centerCol]{grid-template-rows:minmax(0,1fr) minmax(340px,.9fr);grid-template-columns:minmax(0,1fr);overflow-y:auto}html[data-dsh-imagegen-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) [data-slot=conversation]{grid-area:2/1}html[data-dsh-imagegen-active] [data-dsh-imagegen-chat-resizer]{display:none!important}}.kUIMeq_entry{width:100%;height:32px;color:var(--dsw-alias-label-secondary);cursor:pointer;white-space:nowrap;background:0 0;border:none;border-radius:8px;align-items:center;gap:8px;padding:0 12px;font-size:13px;display:flex}.kUIMeq_entry:hover{background:var(--dsw-specific-sidebar-nav-item-hover);color:var(--dsw-alias-label-primary)}.kUIMeq_entry[data-active]{background:var(--dsw-specific-sidebar-nav-item-active);color:var(--dsw-alias-label-primary);font-weight:600}.kUIMeq_entryIcon{flex:none;justify-content:center;align-items:center;display:inline-flex}.kUIMeq_entryLabel{text-overflow:ellipsis;overflow:hidden}.kUIMeq_sessionTabs{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:9px;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:2px;width:100%;min-width:0;padding:3px;display:grid}.kUIMeq_sessionTab{min-width:0;height:30px;color:var(--dsw-alias-label-secondary);cursor:pointer;font:inherit;white-space:nowrap;background:0 0;border:0;border-radius:7px;justify-content:center;align-items:center;gap:6px;padding:0 8px;font-size:12px;display:inline-flex}.kUIMeq_sessionTab:hover,.kUIMeq_sessionTab[data-active]{color:var(--dsw-alias-label-primary);background:var(--dsw-specific-sidebar-nav-item-active)}.kUIMeq_sessionTabIcon{flex:none;justify-content:center;align-items:center;display:inline-flex}.kUIMeq_sessionTabLabel{text-overflow:ellipsis;min-width:0;overflow:hidden}[class*=regionArea]{min-height:0;position:relative}.kUIMeq_sidebarHistoryHost{z-index:30;background:var(--dsw-alias-bg-base);min-width:0;min-height:0;padding:6px 4px;display:none;position:absolute;inset:0;overflow:hidden}html[data-dsh-imagegen-active] .kUIMeq_sidebarHistoryHost{display:flex}.kUIMeq_sidebarHistoryHost .kUIMeq_history{background:0 0;border:0;border-radius:8px;width:100%;height:100%}[data-dsh-frame][data-sidebar-collapsed] .kUIMeq_sidebarHistoryHost{display:none}[data-dsh-frame][data-sidebar-collapsed] .kUIMeq_entry{justify-content:center;width:100%;padding:0}[data-dsh-frame][data-sidebar-collapsed] .kUIMeq_entryLabel{display:none}.kUIMeq_view{width:100%;min-width:0;min-height:0;overflow:hidden}.kUIMeq_panel,.kUIMeq_panel *,.kUIMeq_panel :before,.kUIMeq_panel :after{box-sizing:border-box}.kUIMeq_panel{background:var(--dsw-alias-bg-base);min-width:0;height:100%;min-height:0;color:var(--dsw-alias-label-primary);font-family:var(--dsw-font-family);flex-direction:column;gap:10px;padding:14px 16px 16px;display:flex;position:relative;overflow:hidden}.kUIMeq_panelHeader{flex:none;justify-content:space-between;align-items:center;gap:12px;display:flex}.kUIMeq_panelHeading{align-items:baseline;gap:10px;min-width:0;display:flex}.kUIMeq_panelTitle{color:var(--dsw-alias-label-primary);white-space:nowrap;margin:0;font-size:16px;font-weight:700}.kUIMeq_githubLink{width:22px;height:22px;color:var(--dsw-alias-label-secondary);border-radius:6px;flex:none;justify-content:center;align-items:center;text-decoration:none;transition:color .12s,background .12s;display:inline-flex}.kUIMeq_githubLink:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2)}.kUIMeq_connectionStatus{border:1px solid var(--dsw-alias-label-error);height:28px;color:var(--dsw-alias-label-error);font:inherit;white-space:nowrap;background:0 0;border-radius:8px;flex:none;align-items:center;gap:6px;padding:0 10px;font-size:12px;line-height:1;display:inline-flex}.kUIMeq_connectionStatus[data-connected=true]{border-color:var(--dsw-alias-state-success-primary);color:var(--dsw-alias-state-success-primary)}.kUIMeq_connectionDot{background:currentColor;border-radius:50%;width:6px;height:6px}.kUIMeq_updateBanner{border:1px solid var(--dsw-alias-state-warn-primary);color:var(--dsw-alias-state-warn-primary);overflow-wrap:anywhere;border-radius:10px;flex:none;justify-content:space-between;align-items:center;gap:12px;padding:7px 10px 7px 12px;font-size:12px;line-height:1.5;display:flex}.kUIMeq_updateBanner[data-kind=ok]{color:var(--dsw-alias-state-success-primary);border-color:var(--dsw-alias-state-success-primary)}.kUIMeq_updateText{min-width:0}.kUIMeq_updateActions{flex:none;align-items:center;gap:10px;display:inline-flex}.kUIMeq_updateRelease{color:inherit;text-underline-offset:2px;white-space:nowrap;text-decoration:underline}@media (width<=700px){.kUIMeq_panelHeader{align-items:flex-start}.kUIMeq_panelHeading{flex-direction:column;align-items:flex-start;gap:2px}.kUIMeq_updateBanner{flex-direction:column;align-items:flex-start}.kUIMeq_updateActions{justify-content:space-between;width:100%}}.kUIMeq_studio{flex:1;min-width:0;min-height:0;display:flex}.kUIMeq_generation{gap:14px;width:100%;min-width:0;min-height:0;display:flex}.kUIMeq_config{flex-direction:column;flex:none;gap:12px;width:min(300px,42%);min-width:220px;max-width:300px;height:100%;min-height:0;display:flex;overflow:hidden}.kUIMeq_configScroll{scrollbar-width:thin;scrollbar-color:var(--dsw-alias-border-l2) transparent;flex-direction:column;flex:1;gap:12px;min-height:0;padding-right:2px;display:flex;overflow-y:auto}.kUIMeq_configScroll::-webkit-scrollbar{width:8px}.kUIMeq_configScroll::-webkit-scrollbar-thumb{background:var(--dsw-alias-border-l2);border-radius:999px}.kUIMeq_canvas{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:12px;flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;position:relative;overflow:hidden}.kUIMeq_taskTray{z-index:6;border:1px solid var(--dsw-alias-border-l2);background:color-mix(in srgb, var(--dsw-alias-bg-layer-1) 92%, transparent);backdrop-filter:blur(10px);border-radius:9px;flex-direction:column;width:min(360px,100% - 24px);max-height:calc(100% - 24px);display:flex;position:absolute;top:12px;right:12px;overflow:hidden;box-shadow:0 8px 24px #0000001f}.kUIMeq_taskTray[data-open=false]{width:auto;max-width:calc(100% - 24px)}.kUIMeq_taskTrayHeader{min-height:34px;color:var(--dsw-alias-label-primary);border-bottom:1px solid var(--dsw-alias-border-l1);align-items:stretch;font-size:12px;font-weight:600;display:flex}.kUIMeq_taskTray[data-open=false] .kUIMeq_taskTrayHeader{border-bottom:0}.kUIMeq_taskTrayToggle{min-width:0;color:inherit;cursor:pointer;font:inherit;font-size:inherit;font-weight:inherit;text-align:left;background:0 0;border:0;flex:1;align-items:center;gap:8px;padding:8px 10px;display:flex}.kUIMeq_taskTrayToggle:hover{background:var(--dsw-alias-bg-layer-2)}.kUIMeq_taskTrayCount{min-width:18px;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-2);text-align:center;border-radius:999px;padding:1px 5px;font-size:11px;font-weight:500}.kUIMeq_taskTrayChevron{color:var(--dsw-alias-label-tertiary);margin-left:auto;font-size:12px;font-weight:400}.kUIMeq_taskTrayClose{border:0;border-left:1px solid var(--dsw-alias-border-l1);width:32px;color:var(--dsw-alias-label-tertiary);cursor:pointer;font:inherit;background:0 0;font-size:17px}.kUIMeq_taskTrayClose:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2)}.kUIMeq_taskTray[data-open=false] .kUIMeq_taskTrayToggle{min-height:34px}.kUIMeq_taskRows{min-height:0;overflow-y:auto}.kUIMeq_taskTray[data-open=false] .kUIMeq_taskRows{display:none}.kUIMeq_taskRow{border-top:1px solid var(--dsw-alias-border-l1);grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:7px;padding:7px 10px;display:grid}.kUIMeq_taskRow:first-of-type{border-top:0}.kUIMeq_taskStatus{color:var(--dsw-alias-label-tertiary);white-space:nowrap;font-size:11px}.kUIMeq_taskRow[data-status=running] .kUIMeq_taskStatus{color:var(--dsw-alias-brand-primary)}.kUIMeq_taskRow[data-status=failed] .kUIMeq_taskStatus{color:var(--dsw-alias-label-error)}.kUIMeq_taskPrompt{color:var(--dsw-alias-label-secondary);text-overflow:ellipsis;white-space:nowrap;font-size:11px;overflow:hidden}.kUIMeq_taskRow button{color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-2);cursor:pointer;font:inherit;border:0;border-radius:5px;padding:2px 7px;font-size:11px}.kUIMeq_taskRow button:hover{color:var(--dsw-alias-brand-primary)}.kUIMeq_configGuide{z-index:1100;background:#00000059;place-items:center;padding:20px;display:grid;position:fixed;inset:0}.kUIMeq_configGuideBody{border:1px solid var(--dsw-alias-border-l2);width:min(360px,100%);color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-1);border-radius:10px;flex-direction:column;gap:12px;padding:18px;display:flex;box-shadow:0 14px 40px #0003}.kUIMeq_configGuideBody span{color:var(--dsw-alias-label-secondary);font-size:13px;line-height:1.55}.kUIMeq_configGuideBody button{min-height:30px;color:var(--dsw-alias-bg-layer-1);background:var(--dsw-alias-brand-primary);cursor:pointer;font:inherit;border:0;border-radius:7px;align-self:flex-end;padding:0 12px;font-size:12px}.kUIMeq_history{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:12px;flex-direction:column;width:auto;min-width:0;max-width:none;min-height:0;display:flex;overflow:hidden}.kUIMeq_historyHeader{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;justify-content:space-between;align-items:center;gap:8px;padding:10px 12px;display:flex}.kUIMeq_historyFilters{border-bottom:1px solid var(--dsw-alias-border-l1);grid-template-columns:1fr 1fr;gap:6px;padding:8px 10px;display:grid}.kUIMeq_historySearch,.kUIMeq_historyFilters select,.kUIMeq_gallerySearch{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);min-width:0;min-height:29px;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2);font:inherit;border-radius:7px;padding:0 8px;font-size:11px}.kUIMeq_historySearch{grid-column:1/-1}.kUIMeq_gallerySearch{width:156px}.kUIMeq_galleryTagInput{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);width:130px;min-height:29px;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2);font:inherit;border-radius:7px;padding:0 8px;font-size:11px}.kUIMeq_galleryBulkButton{border:1px solid var(--dsw-alias-border-l2);min-height:29px;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-1);cursor:pointer;font:inherit;border-radius:7px;padding:0 8px;font-size:11px}.kUIMeq_galleryBulkButton:hover:not(:disabled){color:var(--dsw-alias-brand-primary);border-color:var(--dsw-alias-brand-primary)}.kUIMeq_galleryBulkButton:disabled{opacity:.45;cursor:default}.kUIMeq_historyTitle{color:var(--dsw-alias-label-primary);font-size:13px;font-weight:600}.kUIMeq_historyClear{font:inherit;color:var(--dsw-alias-label-tertiary);border:1px solid var(--dsw-alias-border-l2);cursor:pointer;background:0 0;border-radius:999px;padding:2px 8px;font-size:11.5px}.kUIMeq_historyClear:hover{color:var(--dsw-alias-label-error);border-color:var(--dsw-alias-label-error)}.kUIMeq_historyList{scrollbar-width:thin;scrollbar-color:var(--dsw-alias-border-l2) transparent;flex-direction:column;flex:1;gap:8px;min-height:0;padding:10px;display:flex;overflow-y:auto}.kUIMeq_historyList::-webkit-scrollbar{width:8px}.kUIMeq_historyList::-webkit-scrollbar-thumb{background:var(--dsw-alias-border-l2);border-radius:999px}.kUIMeq_historyEmpty{text-align:center;color:var(--dsw-alias-label-tertiary);flex:1;justify-content:center;align-items:center;padding:20px;font-size:12px;line-height:1.6;display:flex}.kUIMeq_historyItem{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);border-radius:10px;flex-direction:column;flex:none;gap:6px;padding:8px;display:flex}.kUIMeq_historyItem:hover{border-color:var(--dsw-alias-border-l2)}.kUIMeq_historyItem[data-active]{border-color:var(--dsw-alias-brand-primary)}.kUIMeq_historyMain{font:inherit;color:inherit;text-align:left;cursor:pointer;background:0 0;border:none;align-items:flex-start;gap:8px;min-width:0;padding:0;display:flex}.kUIMeq_historyThumb{object-fit:cover;background:var(--dsw-alias-bg-base);border-radius:8px;flex:none;width:52px;height:52px}.kUIMeq_historyThumbPlaceholder{background:var(--dsw-alias-bg-layer-3);border-radius:8px;flex:none;width:52px;height:52px}.kUIMeq_historyInfo{flex-direction:column;flex:1;gap:4px;min-width:0;display:flex}.kUIMeq_historyPrompt{color:var(--dsw-alias-label-primary);-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:12px;line-height:1.4;display:-webkit-box;overflow:hidden}.kUIMeq_historyMeta{color:var(--dsw-alias-label-tertiary);white-space:nowrap;text-overflow:ellipsis;font-size:11px;overflow:hidden}.kUIMeq_historyActions{justify-content:flex-end;gap:6px;display:flex}.kUIMeq_historyAction{font:inherit;color:var(--dsw-alias-label-secondary);border:1px solid var(--dsw-alias-border-l2);cursor:pointer;background:0 0;border-radius:999px;padding:2px 8px;font-size:11.5px}.kUIMeq_historyAction:hover{color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-label-dimmed)}.kUIMeq_historyAction[data-danger]:hover{color:var(--dsw-alias-label-error);border-color:var(--dsw-alias-label-error)}.kUIMeq_card{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);border-radius:12px;flex-direction:column;flex:none;gap:10px;padding:12px;display:flex}.kUIMeq_modeRow{align-items:center;gap:8px;display:flex}.kUIMeq_modePill{flex:1;justify-content:center;height:28px;font-size:13px}.kUIMeq_uploadBox{min-height:128px;color:var(--dsw-alias-label-secondary);border:1.5px dashed var(--dsw-alias-border-l2);cursor:pointer;font:inherit;text-align:center;background:0 0;border-radius:12px;flex-direction:column;justify-content:center;align-items:center;gap:6px;padding:16px;font-size:12.5px;display:flex}.kUIMeq_uploadBox:hover{color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-label-dimmed);background:var(--dsw-alias-interactive-bg-hover)}.kUIMeq_uploadBox:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:1px}.kUIMeq_uploadIcon{color:var(--dsw-alias-label-tertiary);display:inline-flex}.kUIMeq_uploadHint{color:var(--dsw-alias-label-tertiary);font-size:11px}.kUIMeq_reference{flex-direction:column;gap:8px;display:flex}.kUIMeq_referenceImage{object-fit:contain;background:var(--dsw-alias-bg-base);border:1px solid var(--dsw-alias-border-l1);border-radius:10px;width:100%;max-height:176px}.kUIMeq_referenceActions{gap:8px;display:flex}.kUIMeq_hiddenFile{display:none}.kUIMeq_prompt{width:100%;min-height:120px;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-3);border:1px solid var(--dsw-alias-border-l2);resize:vertical;box-sizing:border-box;border-radius:10px;outline:none;padding:10px 12px;font-family:inherit;font-size:13px;line-height:1.6}.kUIMeq_prompt:focus-visible{border-color:var(--dsw-alias-brand-primary)}.kUIMeq_prompt::placeholder{color:var(--dsw-alias-label-tertiary)}.kUIMeq_promptFooter{justify-content:space-between;align-items:center;gap:8px;margin-top:-6px;display:flex}.kUIMeq_templatesButton{border:1px solid var(--dsw-alias-brand-primary);background:linear-gradient(135deg, color-mix(in srgb, var(--dsw-alias-brand-primary) 14%, transparent), color-mix(in srgb, var(--dsw-alias-brand-primary) 5%, transparent));height:26px;color:var(--dsw-alias-brand-primary);cursor:pointer;box-shadow:0 1px 0 color-mix(in srgb, var(--dsw-alias-brand-primary) 22%, transparent);border-radius:999px;align-items:center;gap:6px;padding:0 12px;font-family:inherit;font-size:12px;font-weight:600;transition:transform .12s,box-shadow .12s,background .12s;display:inline-flex}.kUIMeq_templatesButton svg{flex:none}.kUIMeq_templatesButton:hover{background:linear-gradient(135deg, color-mix(in srgb, var(--dsw-alias-brand-primary) 24%, transparent), color-mix(in srgb, var(--dsw-alias-brand-primary) 8%, transparent));color:var(--dsw-alias-brand-primary);box-shadow:0 2px 6px color-mix(in srgb, var(--dsw-alias-brand-primary) 30%, transparent);transform:translateY(-1px)}.kUIMeq_templatesButton:active{transform:translateY(0)}.kUIMeq_enhanceButton{border:1px solid var(--dsw-alias-border-l2);height:26px;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-2);font:inherit;cursor:pointer;border-radius:999px;margin-left:auto;padding:0 11px;font-size:12px}.kUIMeq_enhanceButton:hover:not(:disabled){color:var(--dsw-alias-brand-primary);border-color:var(--dsw-alias-brand-primary)}.kUIMeq_enhanceButton:disabled{opacity:.5;cursor:default}.kUIMeq_promptCount{color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;font-size:11px}.kUIMeq_paramGroup{flex-direction:column;gap:8px;display:flex}.kUIMeq_paramLabel{color:var(--dsw-alias-label-secondary);font-size:12px;font-weight:600}.kUIMeq_optionRow{flex-wrap:wrap;gap:6px;display:flex}.kUIMeq_optionGrid{grid-template-columns:repeat(3,1fr);gap:6px;display:grid}.kUIMeq_optionPill{justify-content:center}.kUIMeq_paramHint{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:1.45}.kUIMeq_footer{border-top:1px solid var(--dsw-alias-border-l1);flex-direction:column;flex:none;align-items:stretch;gap:8px;padding:10px 2px 0 0;display:flex}.kUIMeq_modelWrap{flex-direction:column;gap:5px;min-width:0;display:flex}.kUIMeq_modelLabel{color:var(--dsw-alias-label-secondary);font-size:12px;font-weight:600}.kUIMeq_modelSelect{width:100%;height:36px;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l2);cursor:pointer;text-align:left;border-radius:18px;outline:none;justify-content:space-between;align-items:center;gap:8px;padding:0 12px;font-family:inherit;font-size:13px;display:flex}.kUIMeq_modelSelect:focus-visible{border-color:var(--dsw-alias-brand-primary)}.kUIMeq_modelSelect:disabled{opacity:.55;cursor:default}.kUIMeq_modelMenu{min-width:0;display:block;position:relative}.kUIMeq_modelMenuList{z-index:40;background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l2);border-radius:12px;flex-direction:column;padding:4px;display:flex;position:absolute;bottom:calc(100% + 6px);left:0;right:0;overflow:hidden;box-shadow:0 -8px 24px #0000002e}.kUIMeq_modelMenuItem{width:100%;font:inherit;color:var(--dsw-alias-label-primary);cursor:pointer;text-align:left;white-space:nowrap;text-overflow:ellipsis;background:0 0;border:none;border-radius:8px;padding:7px 10px;font-size:13px;display:block;overflow:hidden}.kUIMeq_modelMenuItem:hover{background:var(--dsw-alias-bg-hover)}.kUIMeq_modelMenuItem[data-selected]{color:var(--dsw-alias-brand-primary);background:var(--dsw-alias-bg-layer-1);font-weight:600}.kUIMeq_generateButton{width:100%}.kUIMeq_generateInner{align-items:center;gap:7px;display:inline-flex}.kUIMeq_canvasState{text-align:center;color:var(--dsw-alias-label-tertiary);flex-direction:column;flex:1;justify-content:center;align-items:center;gap:8px;padding:24px;display:flex}.kUIMeq_canvasStateTitle{color:var(--dsw-alias-label-secondary);font-size:14px;font-weight:600}.kUIMeq_canvasStateHint{max-width:380px;font-size:12px;line-height:1.6}.kUIMeq_canvasEmptyIcon{color:var(--dsw-alias-label-tertiary);margin-bottom:4px;display:inline-flex}.kUIMeq_canvasError{color:var(--dsw-alias-label-error);background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-label-error);overflow-wrap:anywhere;border-radius:10px;flex:none;margin:14px;padding:10px 14px;font-size:12.5px;line-height:1.6}.kUIMeq_canvasBody{scrollbar-width:thin;scrollbar-color:var(--dsw-alias-border-l2) transparent;flex-direction:column;flex:1;gap:10px;min-height:0;padding:14px;display:flex;overflow-y:auto}.kUIMeq_canvasBody::-webkit-scrollbar{width:8px}.kUIMeq_canvasBody::-webkit-scrollbar-thumb{background:var(--dsw-alias-border-l2);border-radius:999px}.kUIMeq_canvasMeta{color:var(--dsw-alias-label-tertiary);flex:none;align-items:center;gap:8px;font-size:12px;display:flex}.kUIMeq_canvasHistoryTag{color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l2);white-space:nowrap;border-radius:999px;padding:1px 8px;font-size:11px}.kUIMeq_grid{flex:1;grid-template-rows:repeat(2,minmax(0,1fr));grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;min-height:0;display:grid}.kUIMeq_grid[data-count=\"1\"] .kUIMeq_imageCard{grid-area:1/1/3/3}.kUIMeq_imageCard{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);cursor:zoom-in;border-radius:12px;flex-direction:column;min-height:0;margin:0;display:flex;position:relative;overflow:hidden}.kUIMeq_imageCard:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:1px}.kUIMeq_image{object-fit:cover;background:var(--dsw-alias-bg-base);flex:1;width:100%;min-height:0;display:block}.kUIMeq_imageCaption{color:var(--dsw-alias-label-tertiary);white-space:nowrap;text-overflow:ellipsis;border-top:1px solid var(--dsw-alias-border-l1);padding:7px 10px;font-size:11px;line-height:1.5;overflow:hidden}.kUIMeq_download{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-mask-1);border:1px solid var(--dsw-alias-border-l2);opacity:0;backdrop-filter:blur(4px);border-radius:999px;padding:2px 10px;font-size:12px;font-weight:500;line-height:20px;text-decoration:none;transition:opacity .12s;position:absolute;top:8px;right:8px}.kUIMeq_imageCard:hover .kUIMeq_download{opacity:1}.kUIMeq_download:hover{background:var(--dsw-alias-bg-base)}.kUIMeq_galleryAdd{font:inherit;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-mask-1);border:1px solid var(--dsw-alias-border-l2);cursor:pointer;opacity:0;backdrop-filter:blur(4px);border-radius:999px;align-items:center;gap:5px;padding:2px 10px;font-size:12px;font-weight:500;line-height:20px;transition:opacity .12s;display:inline-flex;position:absolute;top:8px;left:8px}.kUIMeq_imageCard:hover .kUIMeq_galleryAdd{opacity:1}.kUIMeq_galleryAdd:hover{background:var(--dsw-alias-bg-base)}.kUIMeq_galleryAdd:disabled{opacity:.4;cursor:default}.kUIMeq_conversationAdd{border:1px solid var(--dsw-alias-border-l2);color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-mask-1);cursor:pointer;font:inherit;opacity:0;backdrop-filter:blur(4px);border-radius:999px;align-items:center;gap:5px;padding:2px 10px;font-size:12px;font-weight:500;line-height:20px;transition:opacity .12s;display:inline-flex;position:absolute;top:38px;left:8px}.kUIMeq_imageCard:hover .kUIMeq_conversationAdd,.kUIMeq_conversationAdd:focus-visible{opacity:1}.kUIMeq_conversationAdd:hover{background:var(--dsw-alias-bg-base)}.kUIMeq_conversationAdd:disabled{opacity:.4;cursor:default}.kUIMeq_zoomHint{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-mask-1);border:1px solid var(--dsw-alias-border-l2);opacity:0;backdrop-filter:blur(4px);pointer-events:none;border-radius:999px;align-items:center;gap:5px;padding:2px 10px;font-size:12px;font-weight:500;line-height:20px;transition:opacity .12s;display:inline-flex;position:absolute;bottom:8px;left:8px}.kUIMeq_imageCard:hover .kUIMeq_zoomHint{opacity:1}.kUIMeq_spinner,.kUIMeq_bigSpinner{border:2px solid;border-top-color:#0000;border-radius:50%;flex:none;animation:.8s linear infinite kUIMeq_dshImageGenSpin;display:inline-block}.kUIMeq_spinner{width:11px;height:11px}.kUIMeq_bigSpinner{width:30px;height:30px;color:var(--dsw-alias-state-business-primary);border-width:3px;margin-bottom:6px}.kUIMeq_lightbox{z-index:1000;backdrop-filter:blur(6px);background:#000000b8;justify-content:center;align-items:center;padding:24px;display:flex;position:fixed;inset:0}.kUIMeq_lightboxClose{color:#fff;cursor:pointer;background:#ffffff24;border:1px solid #ffffff47;border-radius:50%;justify-content:center;align-items:center;width:38px;height:38px;display:inline-flex;position:absolute;top:16px;right:16px}.kUIMeq_lightboxClose:hover{background:#ffffff42}.kUIMeq_lightboxNav{color:#fff;cursor:pointer;background:#ffffff24;border:1px solid #ffffff47;border-radius:50%;justify-content:center;align-items:center;width:42px;height:42px;display:inline-flex;position:absolute;top:50%;transform:translateY(-50%)}.kUIMeq_lightboxNav:hover{background:#ffffff42}.kUIMeq_lightboxNav[data-dir=prev]{left:max(20px,50% - 640px)}.kUIMeq_lightboxNav[data-dir=next]{right:max(20px,50% - 640px)}.kUIMeq_lightboxFigure{flex-direction:column;gap:10px;width:min(1100px,100vw - 160px);max-width:min(1100px,100vw - 160px);height:min(820px,100vh - 48px);min-height:0;margin:0;display:flex}.kUIMeq_lightboxStage{background:#ffffff0a;border-radius:10px;flex:1;min-height:0;position:relative;overflow:auto}.kUIMeq_lightboxScaleFrame{justify-content:center;align-items:center;min-width:100%;min-height:100%;display:flex}.kUIMeq_lightboxImage{object-fit:contain;border-radius:10px;max-width:100%;max-height:100%;display:block;box-shadow:0 24px 80px #00000080}.kUIMeq_lightboxTools{justify-content:center;align-items:center;gap:6px;display:flex}.kUIMeq_lightboxTool,.kUIMeq_lightboxZoomLevel,.kUIMeq_lightboxCopy{color:#fff;cursor:pointer;background:#ffffff24;border:1px solid #ffffff47;justify-content:center;align-items:center;display:inline-flex}.kUIMeq_lightboxTool,.kUIMeq_lightboxZoomLevel{height:32px}.kUIMeq_lightboxTool{border-radius:50%;width:32px}.kUIMeq_lightboxZoomLevel{min-width:58px;font:inherit;font-variant-numeric:tabular-nums;border-radius:999px;padding:0 9px;font-size:12px}.kUIMeq_lightboxTool:hover,.kUIMeq_lightboxZoomLevel:hover,.kUIMeq_lightboxCopy:hover{background:#ffffff42}.kUIMeq_lightboxCaptionRow{align-items:flex-start;gap:8px;min-width:0;display:flex}.kUIMeq_lightboxCaption{color:#ffffffe6;-webkit-line-clamp:3;-webkit-box-orient:vertical;flex:1;min-width:0;font-size:12px;line-height:1.6;display:-webkit-box;overflow:hidden}.kUIMeq_lightboxCopy{min-height:28px;font:inherit;white-space:nowrap;border-radius:999px;flex:none;gap:5px;padding:4px 9px;font-size:12px}.kUIMeq_lightboxMeta{justify-content:space-between;align-items:center;gap:12px;display:flex}.kUIMeq_lightboxIndex{color:#fffc;font-variant-numeric:tabular-nums;font-size:12px}.kUIMeq_lightboxActions{align-items:center;gap:8px;display:inline-flex}.kUIMeq_lightboxDownload,.kUIMeq_lightboxEdit{font:inherit;color:#fff;cursor:pointer;background:#ffffff24;border:1px solid #ffffff47;border-radius:999px;padding:4px 14px;font-size:12.5px;font-weight:500;text-decoration:none}.kUIMeq_lightboxDownload:hover,.kUIMeq_lightboxEdit:hover{background:#ffffff42}.kUIMeq_lightboxEdit{color:#fff;background:#ffffff24;border:1px solid #ffffff47;border-radius:999px}@media (width<=720px){.kUIMeq_lightbox{padding:16px}.kUIMeq_lightboxFigure{width:calc(100vw - 32px);max-width:none}.kUIMeq_lightboxNav[data-dir=prev]{left:20px}.kUIMeq_lightboxNav[data-dir=next]{right:20px}.kUIMeq_lightboxCaptionRow,.kUIMeq_lightboxMeta{flex-direction:column;align-items:stretch}.kUIMeq_lightboxCopy,.kUIMeq_lightboxActions{align-self:flex-end}}@keyframes kUIMeq_dshImageGenSpin{to{transform:rotate(360deg)}}.kUIMeq_galleryToast{z-index:30;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-mask-1);border:1px solid var(--dsw-alias-border-l2);backdrop-filter:blur(6px);pointer-events:none;border-radius:999px;align-items:center;gap:7px;padding:6px 16px;font-size:13px;font-weight:500;animation:.16s ease-out kUIMeq_dshImageGenToastIn;display:inline-flex;position:absolute;bottom:24px;left:50%;transform:translate(-50%);box-shadow:0 8px 24px #00000038}@keyframes kUIMeq_dshImageGenToastIn{0%{opacity:0;transform:translate(-50%,6px)}to{opacity:1;transform:translate(-50%)}}.kUIMeq_conversationToast{z-index:30;border:1px solid var(--dsw-alias-border-l2);max-width:calc(100% - 32px);color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-mask-1);pointer-events:none;backdrop-filter:blur(6px);border-radius:999px;align-items:center;gap:7px;padding:6px 16px;font-size:13px;font-weight:500;animation:.16s ease-out kUIMeq_dshImageGenToastIn;display:inline-flex;position:absolute;bottom:24px;left:50%;transform:translate(-50%);box-shadow:0 8px 24px #00000038}@media (prefers-reduced-motion:reduce){.kUIMeq_download,.kUIMeq_spinner,.kUIMeq_bigSpinner{transition:none;animation-duration:1.5s}}.kUIMeq_config[data-gallery=true] .kUIMeq_configScroll>:not(:first-child),.kUIMeq_config[data-gallery=true] .kUIMeq_footer,.kUIMeq_canvas[data-gallery=true]>.kUIMeq_canvasState,.kUIMeq_canvas[data-gallery=true]>.kUIMeq_canvasError,.kUIMeq_canvas[data-gallery=true]>.kUIMeq_canvasBody,.kUIMeq_studio:has(.kUIMeq_config[data-gallery=true])>.kUIMeq_history{display:none}.kUIMeq_config[data-gallery=true] .kUIMeq_configScroll{flex:none;order:1;display:flex;overflow:visible}.kUIMeq_config[data-gallery=true] .kUIMeq_galleryFilters{flex:1;order:2;min-height:0}.kUIMeq_galleryFilters{padding:18px 14px;overflow:hidden auto}.kUIMeq_galleryFilterHeading{color:var(--dsw-alias-label-tertiary);margin:0 4px 10px;font-size:12px;font-weight:600}.kUIMeq_galleryFilter{width:100%;min-height:34px;color:var(--dsw-alias-label-secondary);cursor:pointer;text-align:left;background:0 0;border:0;border-radius:9px;justify-content:space-between;align-items:center;padding:0 10px;display:flex}.kUIMeq_galleryFilter:hover,.kUIMeq_galleryFilter[data-active]{color:var(--dsw-alias-brand-primary);background:color-mix(in srgb, var(--dsw-alias-brand-primary) 10%, transparent)}.kUIMeq_galleryFilterCount{min-width:20px;color:var(--dsw-alias-label-tertiary);background:var(--dsw-alias-bg-layer-2);text-align:center;border-radius:999px;padding:1px 6px;font-size:11px}.kUIMeq_galleryFilterDivider{background:var(--dsw-alias-border-l1);height:1px;margin:18px 4px}.kUIMeq_galleryRatioList{flex-wrap:wrap;gap:6px;display:flex}.kUIMeq_galleryRatio{color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-2);cursor:pointer;border:0;border-radius:999px;padding:6px 10px;font-size:12px}.kUIMeq_galleryRatio[data-active]{color:var(--dsw-alias-brand-primary);background:color-mix(in srgb, var(--dsw-alias-brand-primary) 13%, transparent)}.kUIMeq_galleryTagFilterList{flex-wrap:wrap;gap:6px;display:flex}.kUIMeq_galleryTagFilter{border:1px solid var(--dsw-alias-border-l1);min-width:0;max-width:100%;min-height:27px;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-2);cursor:pointer;font:inherit;border-radius:6px;align-items:center;gap:5px;padding:0 8px;font-size:11px;display:inline-flex}.kUIMeq_galleryTagFilter span:first-child{text-overflow:ellipsis;white-space:nowrap;max-width:112px;overflow:hidden}.kUIMeq_galleryTagFilter span:last-child{color:var(--dsw-alias-label-tertiary);font-size:10px}.kUIMeq_galleryTagFilter:hover,.kUIMeq_galleryTagFilter[data-active]{color:var(--dsw-alias-brand-primary);background:color-mix(in srgb, var(--dsw-alias-brand-primary) 10%, transparent)}.kUIMeq_galleryFilterNote{color:var(--dsw-alias-label-quaternary);margin:20px 4px 0;font-size:11px;line-height:1.5}.kUIMeq_galleryWorkspace{box-sizing:border-box;flex-direction:column;width:100%;min-width:0;height:100%;min-height:0;padding:22px 24px 26px;display:flex;position:absolute;inset:0;overflow:hidden}.kUIMeq_galleryToolbar{flex:none;justify-content:space-between;align-items:center;gap:16px;min-width:0;margin-bottom:18px;display:flex}.kUIMeq_galleryHeading{color:var(--dsw-alias-label-primary);margin:0;font-size:20px;font-weight:700;display:inline}.kUIMeq_galleryCount{color:var(--dsw-alias-label-tertiary);margin-left:8px;font-size:13px}.kUIMeq_galleryToolbarActions{flex-wrap:wrap;align-items:center;gap:10px;min-width:0;display:flex}.kUIMeq_gallerySelectMode,.kUIMeq_galleryBulkButton,.kUIMeq_gallerySelectionClear{border:1px solid var(--dsw-alias-border-l1);min-height:30px;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-1);cursor:pointer;font:inherit;border-radius:7px;padding:0 10px;font-size:12px}.kUIMeq_gallerySelectMode:hover,.kUIMeq_gallerySelectMode[data-active],.kUIMeq_galleryBulkButton:hover:not(:disabled){color:var(--dsw-alias-brand-primary);border-color:color-mix(in srgb, var(--dsw-alias-brand-primary) 38%, var(--dsw-alias-border-l1));background:color-mix(in srgb, var(--dsw-alias-brand-primary) 11%, transparent)}.kUIMeq_galleryBulkButton:disabled{cursor:not-allowed;opacity:.45}.kUIMeq_gallerySelectionBar{border:1px solid color-mix(in srgb, var(--dsw-alias-brand-primary) 35%, var(--dsw-alias-border-l1));background:color-mix(in srgb, var(--dsw-alias-brand-primary) 7%, var(--dsw-alias-bg-layer-1));border-radius:9px;flex:none;align-items:center;gap:10px;min-width:0;margin:-4px 0 16px;padding:10px 12px;display:flex}.kUIMeq_gallerySelectionBar strong{color:var(--dsw-alias-brand-primary);flex:none;font-size:12px}.kUIMeq_gallerySelectionClear{margin-left:auto}.kUIMeq_gallerySelectionClear:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2)}.kUIMeq_galleryTagInput,.kUIMeq_gallerySearch{border:1px solid var(--dsw-alias-border-l1);min-width:0;height:30px;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-1);font:inherit;border-radius:7px;outline:none;padding:0 10px;font-size:12px}.kUIMeq_galleryTagInput{flex:190px}.kUIMeq_galleryTagInput:focus,.kUIMeq_gallerySearch:focus{border-color:var(--dsw-alias-brand-primary)}.kUIMeq_galleryViewToggle{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:9px;padding:3px;display:flex}.kUIMeq_galleryViewToggle button,.kUIMeq_gallerySort,.kUIMeq_galleryClear{min-height:30px;color:var(--dsw-alias-label-secondary);cursor:pointer;font:inherit;background:0 0;border:0;border-radius:7px;padding:0 10px;font-size:12px}.kUIMeq_galleryViewToggle button[data-active],.kUIMeq_galleryViewToggle button:hover,.kUIMeq_gallerySort:hover,.kUIMeq_galleryClear:hover{color:var(--dsw-alias-brand-primary);background:color-mix(in srgb, var(--dsw-alias-brand-primary) 11%, transparent)}.kUIMeq_gallerySort{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1)}.kUIMeq_galleryClear{border:1px solid var(--dsw-alias-border-l1)}.kUIMeq_compareControl{flex-direction:column;gap:6px;margin:0 0 10px;display:flex}.kUIMeq_compareToggle,.kUIMeq_compareModelChoices label{color:var(--dsw-alias-label-secondary);cursor:pointer;align-items:center;gap:6px;font-size:12px;display:flex}.kUIMeq_compareToggle input,.kUIMeq_compareModelChoices input{accent-color:var(--dsw-alias-brand-primary)}.kUIMeq_compareModelChoices{flex-wrap:wrap;gap:6px;display:flex}.kUIMeq_compareModelChoices label{border:1px solid var(--dsw-alias-border-l1);border-radius:5px;padding:4px 6px;font-size:10px}.kUIMeq_comparisonBoard{z-index:4;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);border-radius:8px;flex-direction:column;display:flex;position:absolute;inset:14px;overflow:hidden;box-shadow:0 8px 24px #0000001f}.kUIMeq_comparisonBoard>header{border-bottom:1px solid var(--dsw-alias-border-l1);justify-content:space-between;align-items:center;padding:10px 12px;display:flex}.kUIMeq_comparisonBoard>header div{align-items:baseline;gap:7px;display:flex}.kUIMeq_comparisonBoard>header strong{color:var(--dsw-alias-label-primary);font-size:13px}.kUIMeq_comparisonBoard>header span{color:var(--dsw-alias-label-tertiary);font-size:11px}.kUIMeq_comparisonBoard>header button{border:1px solid var(--dsw-alias-border-l1);min-height:28px;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-2);cursor:pointer;font:inherit;border-radius:5px;padding:0 9px;font-size:11px}.kUIMeq_comparisonGrid{flex:1;grid-template-rows:minmax(0,1fr);grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;min-height:0;padding:12px;display:grid;overflow:auto}.kUIMeq_comparisonGrid article{flex-direction:column;gap:7px;min-width:0;height:100%;min-height:0;display:flex}.kUIMeq_comparisonGrid article>strong{color:var(--dsw-alias-label-primary);font-size:12px}.kUIMeq_comparisonImageButton{cursor:zoom-in;background:var(--dsw-alias-bg-base);border:0;flex:1;width:100%;min-height:0;padding:0;display:flex;overflow:hidden}.kUIMeq_comparisonImageButton:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:-2px}.kUIMeq_comparisonGrid article>span{min-height:0;color:var(--dsw-alias-label-tertiary);background:var(--dsw-alias-bg-layer-2);flex:1;place-items:center;font-size:12px;display:grid}.kUIMeq_comparisonGrid img{object-fit:contain;background:var(--dsw-alias-bg-base);flex:1;width:100%;height:100%;min-height:0;max-height:none;display:block}.kUIMeq_comparisonFullscreen{z-index:1200;background:#000000eb;padding:54px 24px 24px;position:fixed;inset:0;overflow:auto}.kUIMeq_comparisonFullscreenGrid{grid-template-columns:repeat(auto-fit,minmax(300px,1fr));align-items:start;gap:18px;min-height:100%;display:grid}.kUIMeq_comparisonFullscreen figure{min-width:0;margin:0}.kUIMeq_comparisonFullscreen figcaption{color:#fff;margin-bottom:8px;font-size:13px;font-weight:600}.kUIMeq_comparisonFullscreen img{background:#111;width:100%;margin-bottom:10px;display:block}.kUIMeq_historyItem[data-comparison]{border-color:color-mix(in srgb, var(--dsw-alias-brand-primary) 55%, var(--dsw-alias-border-l1))}.kUIMeq_galleryMasonry{box-sizing:border-box;overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:var(--dsw-alias-border-l2) transparent;flex:auto;grid-template-columns:repeat(3,minmax(0,1fr));grid-auto-rows:max-content;align-content:start;gap:16px;width:100%;min-width:0;max-width:100%;height:0;min-height:0;padding:2px 8px 16px 2px;display:grid;overflow:hidden scroll}.kUIMeq_galleryMasonry::-webkit-scrollbar{width:8px}.kUIMeq_galleryMasonry::-webkit-scrollbar-thumb{background:var(--dsw-alias-border-l2);border-radius:999px}.kUIMeq_galleryCard{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:14px;width:100%;margin:0;display:block;position:relative;overflow:hidden;box-shadow:0 5px 18px #18203612}.kUIMeq_galleryCard[data-selected]{border-color:var(--dsw-alias-brand-primary);box-shadow:0 0 0 2px color-mix(in srgb, var(--dsw-alias-brand-primary) 26%, transparent), 0 5px 18px #18203612}.kUIMeq_gallerySelect{z-index:2;cursor:pointer;background:#00000094;border:1px solid #ffffffbf;border-radius:7px;place-items:center;width:26px;height:26px;display:grid;position:absolute;top:9px;right:9px}.kUIMeq_gallerySelect input{width:16px;height:16px;accent-color:var(--dsw-alias-brand-primary);cursor:pointer;margin:0}.kUIMeq_galleryImageButton{background:var(--dsw-alias-bg-base);cursor:zoom-in;border:0;width:100%;padding:0;display:block;position:relative}.kUIMeq_galleryImageButton[data-selecting]{cursor:pointer}.kUIMeq_galleryImage{aspect-ratio:4/3;object-fit:cover;width:100%;display:block}.kUIMeq_galleryMasonry[data-view=masonry] .kUIMeq_galleryCard:nth-child(3n+1) .kUIMeq_galleryImage{aspect-ratio:4/5}.kUIMeq_galleryMasonry[data-view=masonry] .kUIMeq_galleryCard:nth-child(3n+2) .kUIMeq_galleryImage{aspect-ratio:4/3}.kUIMeq_galleryMasonry[data-view=masonry] .kUIMeq_galleryCard:nth-child(3n) .kUIMeq_galleryImage{aspect-ratio:3/4}.kUIMeq_galleryBadge{color:#fff;backdrop-filter:blur(4px);background:#121724c2;border-radius:999px;padding:4px 9px;font-size:11px;position:absolute;top:10px;left:10px}.kUIMeq_galleryCardFooter{align-items:center;gap:9px;min-width:0;padding:10px 12px;display:flex}.kUIMeq_galleryAvatar{color:#fff;background:var(--dsw-alias-brand-primary);border-radius:50%;flex:none;place-items:center;width:27px;height:27px;font-size:12px;font-weight:700;display:grid}.kUIMeq_galleryCardInfo{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.kUIMeq_galleryCardInfo strong,.kUIMeq_galleryCardInfo small{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.kUIMeq_galleryCardInfo strong{color:var(--dsw-alias-label-primary);font-size:12px}.kUIMeq_galleryCardInfo small{color:var(--dsw-alias-label-tertiary);font-size:10px}.kUIMeq_galleryTags{flex-wrap:wrap;gap:4px;margin-top:4px;display:flex}.kUIMeq_galleryTags button{max-width:96px;min-height:19px;color:var(--dsw-alias-brand-primary);background:color-mix(in srgb, var(--dsw-alias-brand-primary) 10%, transparent);cursor:pointer;font:inherit;text-overflow:ellipsis;white-space:nowrap;border:0;border-radius:4px;padding:1px 6px;font-size:10px;line-height:1.35;overflow:hidden}.kUIMeq_galleryTags button:hover{background:color-mix(in srgb, var(--dsw-alias-brand-primary) 17%, transparent)}.kUIMeq_galleryTags .kUIMeq_galleryTagEdit{color:var(--dsw-alias-label-tertiary);background:0 0;flex:none}.kUIMeq_galleryTagEditor{align-items:center;gap:6px;padding:0 12px 10px 48px;display:flex}.kUIMeq_galleryTagEditor input{border:1px solid var(--dsw-alias-border-l2);min-width:0;height:27px;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2);font:inherit;border-radius:6px;outline:none;flex:1;padding:0 8px;font-size:11px}.kUIMeq_galleryTagEditor input:focus{border-color:var(--dsw-alias-brand-primary)}.kUIMeq_galleryTagEditor button{border:1px solid var(--dsw-alias-border-l2);height:27px;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-1);cursor:pointer;font:inherit;border-radius:6px;padding:0 8px;font-size:11px}.kUIMeq_galleryTagEditor button[type=submit]{color:var(--dsw-alias-brand-primary)}.kUIMeq_galleryRemove{width:24px;height:24px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:0;border-radius:50%;flex:none;padding:0;font-size:18px}.kUIMeq_galleryRemove:hover{color:var(--dsw-alias-state-error);background:var(--dsw-alias-bg-layer-2)}@media (width<=1100px){.kUIMeq_galleryMasonry{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (width<=760px){.kUIMeq_studio{grid-template-rows:minmax(220px,36%) minmax(0,1fr);grid-template-columns:minmax(0,1fr);overflow-y:auto}.kUIMeq_history{grid-area:1/1;min-height:220px}.kUIMeq_generation{flex-direction:column;grid-area:2/1;min-height:0}.kUIMeq_config{width:auto;max-width:none;height:auto;min-height:0}.kUIMeq_config[data-gallery=true]{flex:none}.kUIMeq_canvas{min-height:560px}.kUIMeq_galleryToolbar{flex-direction:column;align-items:flex-start}.kUIMeq_galleryToolbarActions{flex-wrap:wrap;width:100%}.kUIMeq_galleryMasonry{grid-template-columns:1fr}}";
|
|
1945
|
+
//#region \0dsh-css:E:\dsh-plugin\src\client\panel.module.css.mjs
|
|
1946
|
+
const css$2 = "[data-pane=conversation],[class*=centerCol]{min-width:0;min-height:0;position:relative}[data-dsh-imagegen-view]{z-index:60;background:var(--dsw-alias-bg-base);grid-area:1/1;min-width:0;min-height:0;display:none;position:relative}html[data-dsh-imagegen-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) [data-pane=conversation],html[data-dsh-imagegen-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) [class*=centerCol]{grid-template-columns:minmax(0, 1fr) 8px minmax(320px, clamp(320px, var(--dsh-imagegen-chat-width,36%), 70%));background:var(--dsw-alias-border-l1);grid-template-rows:minmax(0,1fr);gap:1px;overflow:hidden;display:grid!important}html[data-dsh-imagegen-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) [data-dsh-imagegen-view]{display:block}html[data-dsh-imagegen-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) [data-slot=conversation]{background:var(--dsw-alias-bg-base);grid-area:1/3;align-items:stretch;width:auto;min-width:0;min-height:0;overflow:hidden;display:flex!important}html[data-dsh-imagegen-active] [data-slot=conversation]>[data-phase]{flex:auto;align-self:stretch;width:100%;min-width:0;max-width:none}html[data-dsh-imagegen-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) [data-dsh-imagegen-chat-resizer]{grid-area:1/2}.Yvqh9W_chatResizer{z-index:70;width:8px;min-width:8px;color:var(--dsw-alias-label-tertiary);background:var(--dsw-alias-border-l1);cursor:col-resize;touch-action:none;justify-content:center;align-items:center;display:none;position:relative}.Yvqh9W_chatResizer:before{content:\"\";opacity:.55;background:currentColor;border-radius:3px;width:3px;height:36px}.Yvqh9W_chatResizer:hover,.Yvqh9W_chatResizer:focus-visible{color:var(--dsw-alias-brand-primary);background:var(--dsw-alias-bg-layer-2);outline:none}html[data-dsh-imagegen-active] [data-dsh-imagegen-chat-resizer]{display:flex!important}html[data-dsh-imagegen-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) [data-pane=conversation]>:not([data-dsh-imagegen-view]):not([data-slot=conversation]):not([data-dsh-imagegen-chat-resizer]),html[data-dsh-imagegen-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) [class*=centerCol]>:not([data-dsh-imagegen-view]):not([data-slot=conversation]):not([data-dsh-imagegen-chat-resizer]),html[data-dsh-imagegen-active] [data-dsh-imagegen-sidebar-root]>:not([data-dsh-imagegen-session-tabs]):not([class*=logoRow]):not([class*=regionArea]):not([class*=footArea]){display:none!important}@media (width<=760px){html[data-dsh-imagegen-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) [data-pane=conversation],html[data-dsh-imagegen-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) [class*=centerCol]{grid-template-rows:minmax(0,1fr) minmax(340px,.9fr);grid-template-columns:minmax(0,1fr);overflow-y:auto}html[data-dsh-imagegen-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) [data-slot=conversation]{grid-area:2/1}html[data-dsh-imagegen-active] [data-dsh-imagegen-chat-resizer]{display:none!important}}.Yvqh9W_entry{width:100%;height:32px;color:var(--dsw-alias-label-secondary);cursor:pointer;white-space:nowrap;background:0 0;border:none;border-radius:8px;align-items:center;gap:8px;padding:0 12px;font-size:13px;display:flex}.Yvqh9W_entry:hover{background:var(--dsw-specific-sidebar-nav-item-hover);color:var(--dsw-alias-label-primary)}.Yvqh9W_entry[data-active]{background:var(--dsw-specific-sidebar-nav-item-active);color:var(--dsw-alias-label-primary);font-weight:600}.Yvqh9W_entryIcon{flex:none;justify-content:center;align-items:center;display:inline-flex}.Yvqh9W_entryLabel{text-overflow:ellipsis;overflow:hidden}.Yvqh9W_sessionTabs{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:9px;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:2px;width:100%;min-width:0;padding:3px;display:grid}.Yvqh9W_sessionTab{min-width:0;height:30px;color:var(--dsw-alias-label-secondary);cursor:pointer;font:inherit;white-space:nowrap;background:0 0;border:0;border-radius:7px;justify-content:center;align-items:center;gap:6px;padding:0 8px;font-size:12px;display:inline-flex}[data-sidebar-collapsed] .Yvqh9W_sessionTabs{background:0 0;border:none;border-radius:0;flex-direction:column;gap:6px;width:auto;padding:0;display:flex}[data-sidebar-collapsed] .Yvqh9W_sessionTab{border-radius:9px;width:34px;height:34px;padding:0;font-size:0}[data-sidebar-collapsed] .Yvqh9W_sessionTabLabel{display:none}.Yvqh9W_sessionTab:hover,.Yvqh9W_sessionTab[data-active]{color:var(--dsw-alias-label-primary);background:var(--dsw-specific-sidebar-nav-item-active)}.Yvqh9W_sessionTabIcon{flex:none;justify-content:center;align-items:center;display:inline-flex}.Yvqh9W_sessionTabLabel{text-overflow:ellipsis;min-width:0;overflow:hidden}[class*=regionArea]{min-height:0;position:relative}.Yvqh9W_sidebarHistoryHost{z-index:30;background:var(--dsw-alias-bg-base);min-width:0;min-height:0;padding:6px 4px;display:none;position:absolute;inset:0;overflow:hidden}html[data-dsh-imagegen-active] .Yvqh9W_sidebarHistoryHost{display:flex}.Yvqh9W_sidebarHistoryHost .Yvqh9W_history{background:0 0;border:0;border-radius:8px;width:100%;height:100%}[data-dsh-frame][data-sidebar-collapsed] .Yvqh9W_sidebarHistoryHost{display:none}[data-dsh-frame][data-sidebar-collapsed] .Yvqh9W_entry{justify-content:center;width:100%;padding:0}[data-dsh-frame][data-sidebar-collapsed] .Yvqh9W_entryLabel{display:none}.Yvqh9W_view{width:100%;min-width:0;min-height:0;overflow:hidden}.Yvqh9W_panel,.Yvqh9W_panel *,.Yvqh9W_panel :before,.Yvqh9W_panel :after{box-sizing:border-box}.Yvqh9W_panel{background:var(--dsw-alias-bg-base);min-width:0;height:100%;min-height:0;color:var(--dsw-alias-label-primary);font-family:var(--dsw-font-family);flex-direction:column;gap:10px;padding:14px 16px 16px;display:flex;position:relative;overflow:hidden}.Yvqh9W_panelHeader{flex:none;justify-content:space-between;align-items:center;gap:12px;display:flex;position:relative}.Yvqh9W_panelHeading{align-items:baseline;gap:10px;min-width:0;display:flex}.Yvqh9W_panelTitle{color:var(--dsw-alias-label-primary);white-space:nowrap;margin:0;font-size:16px;font-weight:700}.Yvqh9W_githubLink{width:22px;height:22px;color:var(--dsw-alias-label-secondary);border-radius:6px;flex:none;justify-content:center;align-items:center;text-decoration:none;transition:color .12s,background .12s;display:inline-flex}.Yvqh9W_githubLink:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2)}.Yvqh9W_connectionStatus{border:1px solid var(--dsw-alias-label-error);height:28px;color:var(--dsw-alias-label-error);font:inherit;white-space:nowrap;background:0 0;border-radius:8px;flex:none;align-items:center;gap:6px;padding:0 10px;font-size:12px;line-height:1;display:inline-flex}.Yvqh9W_connectionStatus[data-connected=true]{border-color:var(--dsw-alias-state-success-primary);color:var(--dsw-alias-state-success-primary)}.Yvqh9W_connectionDot{background:currentColor;border-radius:50%;width:6px;height:6px}.Yvqh9W_updateBanner{border:1px solid var(--dsw-alias-state-warn-primary);color:var(--dsw-alias-state-warn-primary);overflow-wrap:anywhere;border-radius:10px;flex:none;justify-content:space-between;align-items:center;gap:12px;padding:7px 10px 7px 12px;font-size:12px;line-height:1.5;display:flex}.Yvqh9W_updateBanner[data-kind=ok]{color:var(--dsw-alias-state-success-primary);border-color:var(--dsw-alias-state-success-primary)}.Yvqh9W_updateText{min-width:0}.Yvqh9W_updateActions{flex:none;align-items:center;gap:10px;display:inline-flex}.Yvqh9W_updateRelease{color:inherit;text-underline-offset:2px;white-space:nowrap;text-decoration:underline}@media (width<=700px){.Yvqh9W_panelHeader{align-items:flex-start}.Yvqh9W_panelHeading{flex-direction:column;align-items:flex-start;gap:2px}.Yvqh9W_updateBanner{flex-direction:column;align-items:flex-start}.Yvqh9W_updateActions{justify-content:space-between;width:100%}}.Yvqh9W_studio{flex:1;min-width:0;min-height:0;display:flex}.Yvqh9W_generation{gap:14px;width:100%;min-width:0;min-height:0;display:flex}.Yvqh9W_config{width:clamp(240px, var(--dsh-imagegen-config-width,300px), 480px);flex-direction:column;flex:none;gap:12px;min-width:240px;max-width:480px;height:100%;min-height:0;display:flex;position:relative;overflow:hidden}.Yvqh9W_configHeader{flex:none;justify-content:flex-end;min-height:28px;display:flex}.Yvqh9W_configToggle{border:1px solid var(--dsw-alias-border-l1);width:28px;height:28px;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-1);cursor:pointer;border-radius:7px;justify-content:center;align-items:center;padding:0;display:inline-flex}.Yvqh9W_configToggle:hover,.Yvqh9W_configToggle:focus-visible{border-color:var(--dsw-alias-brand-primary);color:var(--dsw-alias-brand-primary);outline:none}.Yvqh9W_config[data-collapsed=true]{gap:0;width:38px;min-width:38px;max-width:38px}.Yvqh9W_config[data-collapsed=true] .Yvqh9W_configHeader{justify-content:center}.Yvqh9W_config[data-collapsed=true]>:not(.Yvqh9W_configHeader){display:none}.Yvqh9W_configScroll{scrollbar-width:thin;scrollbar-color:var(--dsw-alias-border-l2) transparent;flex-direction:column;flex:1;gap:12px;min-height:0;padding-right:2px;display:flex;overflow-y:auto}.Yvqh9W_configScroll::-webkit-scrollbar{width:8px}.Yvqh9W_configScroll::-webkit-scrollbar-thumb{background:var(--dsw-alias-border-l2);border-radius:999px}.Yvqh9W_canvas{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:12px;flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;position:relative;overflow:hidden}.Yvqh9W_taskTray{z-index:6;border:1px solid var(--dsw-alias-border-l2);background:color-mix(in srgb, var(--dsw-alias-bg-layer-1) 92%, transparent);backdrop-filter:blur(10px);border-radius:9px;flex-direction:column;width:min(360px,100% - 24px);max-height:calc(100% - 24px);display:flex;position:absolute;top:12px;right:12px;overflow:hidden;box-shadow:0 8px 24px #0000001f}.Yvqh9W_taskTray[data-open=false]{width:auto;max-width:calc(100% - 24px)}.Yvqh9W_taskTrayHeader{min-height:34px;color:var(--dsw-alias-label-primary);border-bottom:1px solid var(--dsw-alias-border-l1);align-items:stretch;font-size:12px;font-weight:600;display:flex}.Yvqh9W_taskTray[data-open=false] .Yvqh9W_taskTrayHeader{border-bottom:0}.Yvqh9W_taskTrayToggle{min-width:0;color:inherit;cursor:pointer;font:inherit;font-size:inherit;font-weight:inherit;text-align:left;background:0 0;border:0;flex:1;align-items:center;gap:8px;padding:8px 10px;display:flex}.Yvqh9W_taskTrayToggle:hover{background:var(--dsw-alias-bg-layer-2)}.Yvqh9W_taskTrayCount{min-width:18px;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-2);text-align:center;border-radius:999px;padding:1px 5px;font-size:11px;font-weight:500}.Yvqh9W_taskTrayChevron{color:var(--dsw-alias-label-tertiary);margin-left:auto;font-size:12px;font-weight:400}.Yvqh9W_taskTrayClose{border:0;border-left:1px solid var(--dsw-alias-border-l1);width:32px;color:var(--dsw-alias-label-tertiary);cursor:pointer;font:inherit;background:0 0;font-size:17px}.Yvqh9W_taskTrayClose:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2)}.Yvqh9W_taskTray[data-open=false] .Yvqh9W_taskTrayToggle{min-height:34px}.Yvqh9W_taskRows{min-height:0;overflow-y:auto}.Yvqh9W_taskTray[data-open=false] .Yvqh9W_taskRows{display:none}.Yvqh9W_taskRow{border-top:1px solid var(--dsw-alias-border-l1);grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:7px;padding:7px 10px;display:grid}.Yvqh9W_taskRow:first-of-type{border-top:0}.Yvqh9W_taskStatus{color:var(--dsw-alias-label-tertiary);white-space:nowrap;font-size:11px}.Yvqh9W_taskRow[data-status=running] .Yvqh9W_taskStatus{color:var(--dsw-alias-brand-primary)}.Yvqh9W_taskRow[data-status=failed] .Yvqh9W_taskStatus{color:var(--dsw-alias-label-error)}.Yvqh9W_taskPrompt{color:var(--dsw-alias-label-secondary);text-overflow:ellipsis;white-space:nowrap;font-size:11px;overflow:hidden}.Yvqh9W_taskRow button{color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-2);cursor:pointer;font:inherit;border:0;border-radius:5px;padding:2px 7px;font-size:11px}.Yvqh9W_taskRow button:hover{color:var(--dsw-alias-brand-primary)}.Yvqh9W_configGuide{z-index:1100;background:#00000059;place-items:center;padding:20px;display:grid;position:fixed;inset:0}.Yvqh9W_configGuideBody{border:1px solid var(--dsw-alias-border-l2);width:min(360px,100%);color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-1);border-radius:10px;flex-direction:column;gap:12px;padding:18px;display:flex;box-shadow:0 14px 40px #0003}.Yvqh9W_configGuideBody span{color:var(--dsw-alias-label-secondary);font-size:13px;line-height:1.55}.Yvqh9W_configGuideBody button{min-height:30px;color:var(--dsw-alias-bg-layer-1);background:var(--dsw-alias-brand-primary);cursor:pointer;font:inherit;border:0;border-radius:7px;align-self:flex-end;padding:0 12px;font-size:12px}.Yvqh9W_history{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:12px;flex-direction:column;width:auto;min-width:0;max-width:none;min-height:0;display:flex;overflow:hidden}.Yvqh9W_historyHeader{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;justify-content:space-between;align-items:center;gap:8px;padding:10px 12px;display:flex}.Yvqh9W_historyHeaderActions{flex:none;align-items:center;gap:6px;display:flex}.Yvqh9W_historyFilters{border-bottom:1px solid var(--dsw-alias-border-l1);grid-template-columns:1fr 1fr;gap:6px;padding:8px 10px;display:grid}.Yvqh9W_historySearch,.Yvqh9W_historyFilters select,.Yvqh9W_gallerySearch{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);min-width:0;min-height:29px;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2);font:inherit;border-radius:7px;padding:0 8px;font-size:11px}.Yvqh9W_historySearch{grid-column:1/-1}.Yvqh9W_gallerySearch{width:156px}.Yvqh9W_galleryTagInput{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);width:130px;min-height:29px;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2);font:inherit;border-radius:7px;padding:0 8px;font-size:11px}.Yvqh9W_galleryBulkButton{border:1px solid var(--dsw-alias-border-l2);min-height:29px;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-1);cursor:pointer;font:inherit;border-radius:7px;padding:0 8px;font-size:11px}.Yvqh9W_galleryBulkButton:hover:not(:disabled){color:var(--dsw-alias-brand-primary);border-color:var(--dsw-alias-brand-primary)}.Yvqh9W_galleryBulkButton:disabled{opacity:.45;cursor:default}.Yvqh9W_historyTitle{color:var(--dsw-alias-label-primary);font-size:13px;font-weight:600}.Yvqh9W_historyNew{width:26px;height:26px;color:var(--dsw-alias-label-secondary);border:1px solid var(--dsw-alias-border-l2);cursor:pointer;background:0 0;border-radius:7px;justify-content:center;align-items:center;padding:0;display:inline-flex}.Yvqh9W_historyNew:hover{color:var(--dsw-alias-brand-primary);border-color:var(--dsw-alias-brand-primary)}.Yvqh9W_historyClear{font:inherit;color:var(--dsw-alias-label-tertiary);border:1px solid var(--dsw-alias-border-l2);cursor:pointer;background:0 0;border-radius:999px;padding:2px 8px;font-size:11.5px}.Yvqh9W_historyClear:hover{color:var(--dsw-alias-label-error);border-color:var(--dsw-alias-label-error)}.Yvqh9W_historyList{scrollbar-width:thin;scrollbar-color:var(--dsw-alias-border-l2) transparent;flex-direction:column;flex:1;gap:8px;min-height:0;padding:10px;display:flex;overflow-y:auto}.Yvqh9W_historyList::-webkit-scrollbar{width:8px}.Yvqh9W_historyList::-webkit-scrollbar-thumb{background:var(--dsw-alias-border-l2);border-radius:999px}.Yvqh9W_historyEmpty{text-align:center;color:var(--dsw-alias-label-tertiary);flex:1;justify-content:center;align-items:center;padding:20px;font-size:12px;line-height:1.6;display:flex}.Yvqh9W_historyItem{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);border-radius:10px;flex-direction:column;flex:none;gap:6px;padding:8px;display:flex}.Yvqh9W_historyItem:hover{border-color:var(--dsw-alias-border-l2)}.Yvqh9W_historyItem[data-active]{border-color:var(--dsw-alias-brand-primary)}.Yvqh9W_historyMain{font:inherit;color:inherit;text-align:left;cursor:pointer;background:0 0;border:none;align-items:flex-start;gap:8px;min-width:0;padding:0;display:flex}.Yvqh9W_historyThumb{object-fit:cover;background:var(--dsw-alias-bg-base);border-radius:8px;flex:none;width:52px;height:52px}.Yvqh9W_historyThumbPlaceholder{background:var(--dsw-alias-bg-layer-3);border-radius:8px;flex:none;width:52px;height:52px}.Yvqh9W_historyInfo{flex-direction:column;flex:1;gap:4px;min-width:0;display:flex}.Yvqh9W_historyPrompt{color:var(--dsw-alias-label-primary);-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:12px;line-height:1.4;display:-webkit-box;overflow:hidden}.Yvqh9W_historyMeta{color:var(--dsw-alias-label-tertiary);white-space:nowrap;text-overflow:ellipsis;font-size:11px;overflow:hidden}.Yvqh9W_historyActions{justify-content:flex-end;gap:6px;display:flex}.Yvqh9W_historyAction{font:inherit;color:var(--dsw-alias-label-secondary);border:1px solid var(--dsw-alias-border-l2);cursor:pointer;background:0 0;border-radius:999px;padding:2px 8px;font-size:11.5px}.Yvqh9W_historyAction:hover{color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-label-dimmed)}.Yvqh9W_historyAction[data-danger]:hover{color:var(--dsw-alias-label-error);border-color:var(--dsw-alias-label-error)}.Yvqh9W_card{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);border-radius:12px;flex-direction:column;flex:none;gap:10px;padding:12px;display:flex}.Yvqh9W_ecommerceWorkspace{flex-direction:column;gap:16px;max-width:720px;margin:0 auto;padding:6px 2px 12px;display:flex}.Yvqh9W_ecommerceSection{background:0 0;border:none;border-radius:0;flex-direction:column;gap:8px;padding:0;display:flex}.Yvqh9W_ecommerceSection h3{align-items:baseline;gap:6px;margin:0;font-size:13.5px;font-weight:600;display:flex}.Yvqh9W_ecommerceSectionHint{color:var(--dsw-alias-label-tertiary);font-size:11px;font-weight:400}.Yvqh9W_ecommerceSection input:not([type=checkbox]),.Yvqh9W_ecommerceSection select,.Yvqh9W_ecommerceSection textarea{box-sizing:border-box;width:100%;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-3);border:1px solid var(--dsw-alias-border-l2);font:inherit;border-radius:8px;padding:8px 10px}.Yvqh9W_ecommerceSection textarea{resize:vertical;min-height:60px}.Yvqh9W_ecommerceField{flex-direction:column;gap:4px;min-width:0;display:flex}.Yvqh9W_ecommerceFieldLabel{color:var(--dsw-alias-label-secondary);font-size:11.5px}.Yvqh9W_ecommerceParamGrid{grid-template-columns:1fr 1fr;gap:10px 8px;display:grid}.Yvqh9W_ecommerceUploadHero{border:1.5px dashed var(--dsw-alias-border-l2);min-height:78px;color:var(--dsw-alias-label-secondary);cursor:pointer;font:inherit;text-align:center;background:0 0;border-radius:10px;flex-direction:column;justify-content:center;align-items:center;gap:4px;padding:12px;display:flex}.Yvqh9W_ecommerceUploadHero:hover{color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-label-dimmed);background:var(--dsw-alias-interactive-bg-hover)}.Yvqh9W_ecommerceUploadHero span{font-size:12px}.Yvqh9W_ecommerceUploadHero small{color:var(--dsw-alias-label-tertiary);font-size:10.5px}.Yvqh9W_ecommerceStructureGrid{grid-template-columns:repeat(3,1fr);gap:6px;display:grid}.Yvqh9W_ecommerceSlotCard{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);height:34px;color:var(--dsw-alias-label-primary);cursor:pointer;font:inherit;white-space:nowrap;border-radius:8px;justify-content:center;align-items:center;font-size:12px;display:flex;position:relative}.Yvqh9W_ecommerceSlotCard:hover{border-color:var(--dsw-alias-label-dimmed)}.Yvqh9W_ecommerceSlotCard[data-active]{background:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-label-primary);color:var(--dsw-alias-bg-base);font-weight:600}.Yvqh9W_ecommerceSlotCount{background:var(--dsw-alias-brand-primary);color:#fff;text-align:center;border-radius:8px;min-width:16px;height:16px;padding:0 4px;font-size:10px;font-weight:600;line-height:16px;position:absolute;top:-6px;right:-6px}.Yvqh9W_ecommerceRefRow{grid-template-columns:64px 1fr;align-items:center;gap:8px;display:grid}.Yvqh9W_ecommerceRefRow>span{color:var(--dsw-alias-label-secondary);font-size:12px}.Yvqh9W_ecommercePrimaryAction{border-radius:999px;width:100%;height:38px;font-size:13.5px}.Yvqh9W_previewBadge{background:var(--dsw-alias-brand-primary);color:#fff;letter-spacing:.02em;border-radius:4px;margin-left:5px;padding:0 4px;font-size:9px;font-weight:700;line-height:13px}.Yvqh9W_ecommercePlanNote{color:var(--dsw-alias-label-secondary);font-size:11.5px;line-height:1.5}.Yvqh9W_ecommercePlanWarn{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-secondary);border-radius:6px;padding:6px 8px;font-size:11.5px;line-height:1.5}.Yvqh9W_ecommerceAssets{grid-template-columns:repeat(3,1fr);gap:6px;display:grid}.Yvqh9W_ecommerceAsset{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-3);border-radius:8px;flex-direction:column;gap:3px;padding:4px;display:flex;position:relative}.Yvqh9W_ecommerceAsset img{object-fit:cover;border-radius:5px;width:100%;height:44px}.Yvqh9W_ecommerceAsset select{width:100%;min-width:0;padding:2px;font-size:10px}.Yvqh9W_ecommerceAsset button{color:#fff;cursor:pointer;text-align:center;background:#0000008c;border:none;border-radius:50%;width:16px;height:16px;padding:0;font-size:11px;line-height:15px;position:absolute;top:7px;right:7px}.Yvqh9W_ecommerceAsset button:hover{background:#000c}.Yvqh9W_ecommerceAssetAdd{border:1.5px dashed var(--dsw-alias-border-l2);min-height:78px;color:var(--dsw-alias-label-secondary);cursor:pointer;font:inherit;background:0 0;border-radius:8px;flex-direction:column;justify-content:center;align-items:center;gap:2px;display:flex}.Yvqh9W_ecommerceAssetAdd:hover{color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-label-dimmed)}.Yvqh9W_ecommerceAssetAdd span{font-size:16px;line-height:1}.Yvqh9W_ecommerceAssetAdd small{font-size:10px}.Yvqh9W_ecommerceAdvancedToggle{width:100%;color:var(--dsw-alias-label-secondary);cursor:pointer;font:inherit;background:0 0;border:none;justify-content:space-between;align-items:center;padding:0;font-size:12.5px;display:flex}.Yvqh9W_ecommerceAdvancedToggle:hover{color:var(--dsw-alias-label-primary)}.Yvqh9W_ecommerceAdvancedChevron{font-size:11px}.Yvqh9W_ecommerceAdvancedBody{flex-direction:column;gap:8px;margin-top:8px;display:flex}.Yvqh9W_ecommerceFooterBody{flex-direction:column;gap:8px;display:flex}.Yvqh9W_ecommercePlanMini{border:1px solid var(--dsw-alias-brand-primary);border-radius:10px;flex-direction:column;gap:6px;padding:10px;display:flex}.Yvqh9W_ecommercePlanMini>strong{font-size:12.5px}.Yvqh9W_ecommercePlanList{flex-direction:column;gap:3px;max-height:116px;display:flex;overflow-y:auto}.Yvqh9W_ecommercePlanList>div{color:var(--dsw-alias-label-secondary);justify-content:space-between;gap:12px;font-size:11.5px;display:flex}.Yvqh9W_ecommercePlanBack{color:var(--dsw-alias-label-tertiary);cursor:pointer;font:inherit;background:0 0;border:none;padding:0;font-size:12px}.Yvqh9W_ecommercePlanBack:hover{color:var(--dsw-alias-label-primary)}.Yvqh9W_ecommerceFooterHint{color:var(--dsw-alias-label-secondary);font-size:12px}.Yvqh9W_ecommerceResults{flex-direction:column;gap:14px;width:100%;margin:0 auto;padding:16px 18px;display:flex;overflow-y:auto}.Yvqh9W_ecommerceResultsHeader{justify-content:space-between;align-items:center;gap:12px;display:flex}.Yvqh9W_ecommerceResultsHeader h3{margin:0;font-size:15px}.Yvqh9W_ecommerceResultsHeader>div:first-child{align-items:baseline;gap:10px;display:flex}.Yvqh9W_ecommerceResultsHeader span{color:var(--dsw-alias-label-secondary);font-size:12px}.Yvqh9W_ecommerceResultsActions{gap:8px;display:flex}.Yvqh9W_ecommerceResultsEmpty{color:var(--dsw-alias-label-tertiary);text-align:center;border:1.5px dashed var(--dsw-alias-border-l2);border-radius:12px;padding:32px 16px;font-size:13px}.Yvqh9W_ecommerceGroups{flex-direction:column;gap:16px;display:flex}.Yvqh9W_ecommerceGroup{background:0 0;border:none;border-radius:0;flex-direction:column;gap:8px;padding:0;display:flex}.Yvqh9W_ecommerceGroup>header{align-items:center;gap:10px;font-size:13px;display:flex}.Yvqh9W_ecommerceGroup>header strong{font-size:13px}.Yvqh9W_ecommerceGroup>header span{color:var(--dsw-alias-label-secondary);font-size:12px}.Yvqh9W_ecommerceGroup>header button{margin-left:auto}.Yvqh9W_ecommerceGroupGrid{grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px;display:grid}.Yvqh9W_ecommerceTaskCard{aspect-ratio:1;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-3);border-radius:10px;justify-content:center;align-items:center;width:100%;min-height:0;padding:0;display:flex;position:relative;overflow:hidden}.Yvqh9W_ecommerceTaskCard[data-status=failed],.Yvqh9W_ecommerceTaskCard[data-status=cancelled]{color:var(--dsw-alias-label-tertiary);font-size:12px}.Yvqh9W_ecommerceTaskCard .Yvqh9W_imageCard{border:none;border-radius:0;width:100%;height:100%;margin:0}.Yvqh9W_ecommerceTaskCard .Yvqh9W_image{object-fit:cover;width:100%;height:100%}.Yvqh9W_ecommerceResultBadge{color:#fff;pointer-events:none;background:#0000008c;border-radius:999px;padding:0 7px;font-size:10px;line-height:16px;position:absolute;top:6px;left:6px}.Yvqh9W_ecommerceTaskActions{opacity:0;background:linear-gradient(#0000,#0000008c);justify-content:center;gap:4px;padding:10px 4px 5px;transition:opacity .12s;display:flex;position:absolute;bottom:0;left:0;right:0}.Yvqh9W_ecommerceTaskCard:hover .Yvqh9W_ecommerceTaskActions{opacity:1}.Yvqh9W_ecommerceActionChip{color:#111;cursor:pointer;white-space:nowrap;background:#ffffffeb;border:none;border-radius:6px;padding:0 6px;font-size:10px;font-weight:500;line-height:18px;text-decoration:none}.Yvqh9W_ecommerceActionChip:hover{background:#fff}.Yvqh9W_ecommerceActionChip:disabled{opacity:.5;cursor:default}.Yvqh9W_ecommerceTaskState{color:var(--dsw-alias-label-secondary);text-align:center;word-break:break-all;flex-direction:column;gap:3px;padding:10px 8px;font-size:11px;display:flex}.Yvqh9W_ecommerceTaskState b{color:var(--dsw-alias-label-primary);font-size:12px}.Yvqh9W_topNav{flex:none;justify-content:center;align-items:center;gap:2px;display:flex;position:absolute;left:50%;transform:translate(-50%)}.Yvqh9W_topNavItem{height:30px;color:var(--dsw-alias-label-secondary);cursor:pointer;font:inherit;background:0 0;border:none;border-radius:999px;align-items:center;gap:4px;padding:0 14px;font-size:13px;display:inline-flex}.Yvqh9W_topNavItem,.Yvqh9W_topNavItem span{white-space:nowrap}.Yvqh9W_topNavItem:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-hover)}.Yvqh9W_topNavItem[data-active]{background:var(--dsw-alias-label-primary);color:var(--dsw-alias-bg-base);font-weight:600}.Yvqh9W_topNavDivider{background:var(--dsw-alias-border-l2);width:1px;height:16px;margin:0 8px}.Yvqh9W_panelHeaderActions{align-items:center;gap:10px;display:inline-flex}.Yvqh9W_chatToggle{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);height:26px;color:var(--dsw-alias-label-secondary);cursor:pointer;font:inherit;border-radius:999px;align-items:center;gap:5px;padding:0 10px;font-size:12px;display:inline-flex}.Yvqh9W_chatToggle:hover{color:var(--dsw-alias-label-primary)}.Yvqh9W_chatToggle[data-open=true]{color:var(--dsw-alias-brand-primary);border-color:var(--dsw-alias-brand-primary)}html[data-dsh-imagegen-chat-collapsed][data-dsh-imagegen-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) [data-pane=conversation],html[data-dsh-imagegen-chat-collapsed][data-dsh-imagegen-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) [class*=centerCol]{grid-template-columns:minmax(0,1fr)}html[data-dsh-imagegen-chat-collapsed][data-dsh-imagegen-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) [data-slot=conversation],html[data-dsh-imagegen-chat-collapsed] [data-dsh-imagegen-chat-resizer]{display:none!important}.Yvqh9W_configResizer{cursor:col-resize;z-index:6;width:6px;height:100%;position:absolute;top:0;right:0}.Yvqh9W_configResizer:hover{background:linear-gradient(90deg, transparent, var(--dsw-alias-border-l2))}.Yvqh9W_config[data-collapsed=true] .Yvqh9W_configResizer{display:none}.Yvqh9W_modeRow{align-items:center;gap:8px;display:flex}.Yvqh9W_modePill{flex:1;justify-content:center;height:28px;font-size:12.5px}.Yvqh9W_modePill,.Yvqh9W_modePill span,.Yvqh9W_modePill div{white-space:nowrap;min-width:0}.Yvqh9W_uploadBox{min-height:128px;color:var(--dsw-alias-label-secondary);border:1.5px dashed var(--dsw-alias-border-l2);cursor:pointer;font:inherit;text-align:center;background:0 0;border-radius:12px;flex-direction:column;justify-content:center;align-items:center;gap:6px;padding:16px;font-size:12.5px;display:flex}.Yvqh9W_uploadBox:hover{color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-label-dimmed);background:var(--dsw-alias-interactive-bg-hover)}.Yvqh9W_uploadBox:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:1px}.Yvqh9W_uploadIcon{color:var(--dsw-alias-label-tertiary);display:inline-flex}.Yvqh9W_uploadHint{color:var(--dsw-alias-label-tertiary);font-size:11px}.Yvqh9W_reference{flex-direction:column;gap:8px;display:flex}.Yvqh9W_referenceImage{object-fit:contain;background:var(--dsw-alias-bg-base);border:1px solid var(--dsw-alias-border-l1);border-radius:10px;width:100%;max-height:176px}.Yvqh9W_referenceActions{gap:8px;display:flex}.Yvqh9W_hiddenFile{display:none}.Yvqh9W_prompt{width:100%;min-height:120px;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-3);border:1px solid var(--dsw-alias-border-l2);resize:vertical;box-sizing:border-box;border-radius:10px;outline:none;padding:10px 12px;font-family:inherit;font-size:13px;line-height:1.6}.Yvqh9W_prompt:focus-visible{border-color:var(--dsw-alias-brand-primary)}.Yvqh9W_prompt::placeholder{color:var(--dsw-alias-label-tertiary)}.Yvqh9W_promptFooter{justify-content:space-between;align-items:center;gap:8px;margin-top:-6px;display:flex}.Yvqh9W_templatesButton{border:1px solid var(--dsw-alias-brand-primary);background:linear-gradient(135deg, color-mix(in srgb, var(--dsw-alias-brand-primary) 14%, transparent), color-mix(in srgb, var(--dsw-alias-brand-primary) 5%, transparent));height:26px;color:var(--dsw-alias-brand-primary);cursor:pointer;box-shadow:0 1px 0 color-mix(in srgb, var(--dsw-alias-brand-primary) 22%, transparent);border-radius:999px;align-items:center;gap:6px;padding:0 12px;font-family:inherit;font-size:12px;font-weight:600;transition:transform .12s,box-shadow .12s,background .12s;display:inline-flex}.Yvqh9W_templatesButton svg{flex:none}.Yvqh9W_templatesButton:hover{background:linear-gradient(135deg, color-mix(in srgb, var(--dsw-alias-brand-primary) 24%, transparent), color-mix(in srgb, var(--dsw-alias-brand-primary) 8%, transparent));color:var(--dsw-alias-brand-primary);box-shadow:0 2px 6px color-mix(in srgb, var(--dsw-alias-brand-primary) 30%, transparent);transform:translateY(-1px)}.Yvqh9W_templatesButton:active{transform:translateY(0)}.Yvqh9W_enhanceButton{border:1px solid var(--dsw-alias-border-l2);height:26px;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-2);font:inherit;cursor:pointer;border-radius:999px;margin-left:auto;padding:0 11px;font-size:12px}.Yvqh9W_enhanceButton:hover:not(:disabled){color:var(--dsw-alias-brand-primary);border-color:var(--dsw-alias-brand-primary)}.Yvqh9W_enhanceButton:disabled{opacity:.5;cursor:default}.Yvqh9W_promptCount{color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;font-size:11px}.Yvqh9W_paramGroup{flex-direction:column;gap:8px;display:flex}.Yvqh9W_paramLabel{color:var(--dsw-alias-label-secondary);font-size:12px;font-weight:600}.Yvqh9W_optionRow{flex-wrap:wrap;gap:6px;display:flex}.Yvqh9W_optionGrid{grid-template-columns:repeat(3,1fr);gap:6px;display:grid}.Yvqh9W_optionPill{justify-content:center}.Yvqh9W_paramHint{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:1.45}.Yvqh9W_footer{border-top:1px solid var(--dsw-alias-border-l1);flex-direction:column;flex:none;align-items:stretch;gap:8px;padding:10px 2px 0 0;display:flex}.Yvqh9W_modelWrap{flex-direction:column;gap:5px;min-width:0;display:flex}.Yvqh9W_modelLabel{color:var(--dsw-alias-label-secondary);font-size:12px;font-weight:600}.Yvqh9W_modelSelect{width:100%;height:36px;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l2);cursor:pointer;text-align:left;border-radius:18px;outline:none;justify-content:space-between;align-items:center;gap:8px;padding:0 12px;font-family:inherit;font-size:13px;display:flex}.Yvqh9W_modelSelect:focus-visible{border-color:var(--dsw-alias-brand-primary)}.Yvqh9W_modelSelect:disabled{opacity:.55;cursor:default}.Yvqh9W_modelMenu{min-width:0;display:block;position:relative}.Yvqh9W_modelMenuList{z-index:40;background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l2);border-radius:12px;flex-direction:column;padding:4px;display:flex;position:absolute;bottom:calc(100% + 6px);left:0;right:0;overflow:hidden;box-shadow:0 -8px 24px #0000002e}.Yvqh9W_modelMenuItem{width:100%;font:inherit;color:var(--dsw-alias-label-primary);cursor:pointer;text-align:left;white-space:nowrap;text-overflow:ellipsis;background:0 0;border:none;border-radius:8px;padding:7px 10px;font-size:13px;display:block;overflow:hidden}.Yvqh9W_modelMenuItem:hover{background:var(--dsw-alias-bg-hover)}.Yvqh9W_modelMenuItem[data-selected]{color:var(--dsw-alias-brand-primary);background:var(--dsw-alias-bg-layer-1);font-weight:600}.Yvqh9W_generateButton{width:100%}.Yvqh9W_generateInner{align-items:center;gap:7px;display:inline-flex}.Yvqh9W_canvasState{text-align:center;color:var(--dsw-alias-label-tertiary);flex-direction:column;flex:1;justify-content:center;align-items:center;gap:8px;padding:24px;display:flex}.Yvqh9W_canvasStateTitle{color:var(--dsw-alias-label-secondary);font-size:14px;font-weight:600}.Yvqh9W_canvasStateHint{max-width:380px;font-size:12px;line-height:1.6}.Yvqh9W_canvasEmptyIcon{color:var(--dsw-alias-label-tertiary);margin-bottom:4px;display:inline-flex}.Yvqh9W_canvasError{color:var(--dsw-alias-label-error);background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-label-error);overflow-wrap:anywhere;border-radius:10px;flex:none;margin:14px;padding:10px 14px;font-size:12.5px;line-height:1.6}.Yvqh9W_canvasBody{scrollbar-width:thin;scrollbar-color:var(--dsw-alias-border-l2) transparent;flex-direction:column;flex:1;gap:10px;min-height:0;padding:14px;display:flex;overflow-y:auto}.Yvqh9W_canvasBody::-webkit-scrollbar{width:8px}.Yvqh9W_canvasBody::-webkit-scrollbar-thumb{background:var(--dsw-alias-border-l2);border-radius:999px}.Yvqh9W_canvasMeta{color:var(--dsw-alias-label-tertiary);flex:none;align-items:center;gap:8px;font-size:12px;display:flex}.Yvqh9W_canvasHistoryTag{color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l2);white-space:nowrap;border-radius:999px;padding:1px 8px;font-size:11px}.Yvqh9W_grid{flex:1;grid-template-rows:repeat(2,minmax(0,1fr));grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;min-height:0;display:grid}.Yvqh9W_grid[data-count=\"1\"] .Yvqh9W_imageCard{grid-area:1/1/3/3}.Yvqh9W_imageCard{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);cursor:zoom-in;border-radius:12px;flex-direction:column;min-height:0;margin:0;display:flex;position:relative;overflow:hidden}.Yvqh9W_imageCard:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:1px}.Yvqh9W_image{object-fit:cover;background:var(--dsw-alias-bg-base);flex:1;width:100%;min-height:0;display:block}.Yvqh9W_imageCaption{color:var(--dsw-alias-label-tertiary);white-space:nowrap;text-overflow:ellipsis;border-top:1px solid var(--dsw-alias-border-l1);padding:7px 10px;font-size:11px;line-height:1.5;overflow:hidden}.Yvqh9W_download{color:#fff;opacity:0;backdrop-filter:blur(4px);background:#0f1218d1;border:1px solid #ffffff9e;border-radius:999px;padding:2px 10px;font-size:12px;font-weight:500;line-height:20px;text-decoration:none;transition:opacity .12s;position:absolute;top:8px;right:8px;box-shadow:0 2px 8px #00000047}.Yvqh9W_imageCard:hover .Yvqh9W_download{opacity:1}.Yvqh9W_download:hover{background:#0f1218f0}.Yvqh9W_download:focus-visible{opacity:1;outline-offset:2px;outline:2px solid #fff}.Yvqh9W_galleryAdd{font:inherit;color:#fff;cursor:pointer;opacity:0;backdrop-filter:blur(4px);background:#0f1218d1;border:1px solid #ffffff9e;border-radius:999px;align-items:center;gap:5px;padding:2px 10px;font-size:12px;font-weight:500;line-height:20px;transition:opacity .12s;display:inline-flex;position:absolute;top:8px;left:8px;box-shadow:0 2px 8px #00000047}.Yvqh9W_imageCard:hover .Yvqh9W_galleryAdd{opacity:1}.Yvqh9W_galleryAdd:hover{background:#0f1218f0}.Yvqh9W_galleryAdd:focus-visible{opacity:1;outline-offset:2px;outline:2px solid #fff}.Yvqh9W_galleryAdd:disabled{opacity:.4;cursor:default}.Yvqh9W_conversationAdd{color:#fff;cursor:pointer;font:inherit;opacity:0;backdrop-filter:blur(4px);background:#0f1218d1;border:1px solid #ffffff9e;border-radius:999px;align-items:center;gap:5px;padding:2px 10px;font-size:12px;font-weight:500;line-height:20px;transition:opacity .12s;display:inline-flex;position:absolute;top:38px;left:8px;box-shadow:0 2px 8px #00000047}.Yvqh9W_imageCard:hover .Yvqh9W_conversationAdd,.Yvqh9W_conversationAdd:focus-visible{opacity:1}.Yvqh9W_conversationAdd:hover{background:#0f1218f0}.Yvqh9W_conversationAdd:focus-visible{opacity:1;outline-offset:2px;outline:2px solid #fff}.Yvqh9W_conversationAdd:disabled{opacity:.4;cursor:default}.Yvqh9W_zoomHint{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-mask-1);border:1px solid var(--dsw-alias-border-l2);opacity:0;backdrop-filter:blur(4px);pointer-events:none;border-radius:999px;align-items:center;gap:5px;padding:2px 10px;font-size:12px;font-weight:500;line-height:20px;transition:opacity .12s;display:inline-flex;position:absolute;bottom:8px;left:8px}.Yvqh9W_imageCard:hover .Yvqh9W_zoomHint{opacity:1}.Yvqh9W_spinner,.Yvqh9W_bigSpinner{border:2px solid;border-top-color:#0000;border-radius:50%;flex:none;animation:.8s linear infinite Yvqh9W_dshImageGenSpin;display:inline-block}.Yvqh9W_spinner{width:11px;height:11px}.Yvqh9W_bigSpinner{width:30px;height:30px;color:var(--dsw-alias-state-business-primary);border-width:3px;margin-bottom:6px}.Yvqh9W_lightbox{z-index:1000;backdrop-filter:blur(6px);background:#000000b8;justify-content:center;align-items:center;padding:24px;display:flex;position:fixed;inset:0}.Yvqh9W_lightboxClose{color:#fff;cursor:pointer;background:#ffffff24;border:1px solid #ffffff47;border-radius:50%;justify-content:center;align-items:center;width:38px;height:38px;display:inline-flex;position:absolute;top:16px;right:16px}.Yvqh9W_lightboxClose:hover{background:#ffffff42}.Yvqh9W_lightboxNav{color:#fff;cursor:pointer;background:#ffffff24;border:1px solid #ffffff47;border-radius:50%;justify-content:center;align-items:center;width:42px;height:42px;display:inline-flex;position:absolute;top:50%;transform:translateY(-50%)}.Yvqh9W_lightboxNav:hover{background:#ffffff42}.Yvqh9W_lightboxNav[data-dir=prev]{left:max(20px,50% - 640px)}.Yvqh9W_lightboxNav[data-dir=next]{right:max(20px,50% - 640px)}.Yvqh9W_lightboxFigure{flex-direction:column;gap:10px;width:min(1100px,100vw - 160px);max-width:min(1100px,100vw - 160px);height:min(820px,100vh - 48px);min-height:0;margin:0;display:flex}.Yvqh9W_lightboxStage{background:#ffffff0a;border-radius:10px;flex:1;min-height:0;position:relative;overflow:auto}.Yvqh9W_lightboxScaleFrame{justify-content:center;align-items:center;min-width:100%;min-height:100%;display:flex}.Yvqh9W_lightboxImage{object-fit:contain;border-radius:10px;max-width:100%;max-height:100%;display:block;box-shadow:0 24px 80px #00000080}.Yvqh9W_lightboxTools{justify-content:center;align-items:center;gap:6px;display:flex}.Yvqh9W_lightboxTool,.Yvqh9W_lightboxZoomLevel,.Yvqh9W_lightboxCopy{color:#fff;cursor:pointer;background:#ffffff24;border:1px solid #ffffff47;justify-content:center;align-items:center;display:inline-flex}.Yvqh9W_lightboxTool,.Yvqh9W_lightboxZoomLevel{height:32px}.Yvqh9W_lightboxTool{border-radius:50%;width:32px}.Yvqh9W_lightboxZoomLevel{min-width:58px;font:inherit;font-variant-numeric:tabular-nums;border-radius:999px;padding:0 9px;font-size:12px}.Yvqh9W_lightboxTool:hover,.Yvqh9W_lightboxZoomLevel:hover,.Yvqh9W_lightboxCopy:hover{background:#ffffff42}.Yvqh9W_lightboxCaptionRow{align-items:flex-start;gap:8px;min-width:0;display:flex}.Yvqh9W_lightboxCaption{color:#ffffffe6;-webkit-line-clamp:3;-webkit-box-orient:vertical;flex:1;min-width:0;font-size:12px;line-height:1.6;display:-webkit-box;overflow:hidden}.Yvqh9W_lightboxCopy{min-height:28px;font:inherit;white-space:nowrap;border-radius:999px;flex:none;gap:5px;padding:4px 9px;font-size:12px}.Yvqh9W_lightboxMeta{justify-content:space-between;align-items:center;gap:12px;display:flex}.Yvqh9W_lightboxIndex{color:#fffc;font-variant-numeric:tabular-nums;font-size:12px}.Yvqh9W_lightboxActions{align-items:center;gap:8px;display:inline-flex}.Yvqh9W_lightboxDownload,.Yvqh9W_lightboxEdit{font:inherit;color:#fff;cursor:pointer;background:#ffffff24;border:1px solid #ffffff47;border-radius:999px;padding:4px 14px;font-size:12.5px;font-weight:500;text-decoration:none}.Yvqh9W_lightboxDownload:hover,.Yvqh9W_lightboxEdit:hover{background:#ffffff42}.Yvqh9W_lightboxEdit{color:#fff;background:#ffffff24;border:1px solid #ffffff47;border-radius:999px}@media (width<=720px){.Yvqh9W_lightbox{padding:16px}.Yvqh9W_lightboxFigure{width:calc(100vw - 32px);max-width:none}.Yvqh9W_lightboxNav[data-dir=prev]{left:20px}.Yvqh9W_lightboxNav[data-dir=next]{right:20px}.Yvqh9W_lightboxCaptionRow,.Yvqh9W_lightboxMeta{flex-direction:column;align-items:stretch}.Yvqh9W_lightboxCopy,.Yvqh9W_lightboxActions{align-self:flex-end}}@keyframes Yvqh9W_dshImageGenSpin{to{transform:rotate(360deg)}}.Yvqh9W_galleryToast{z-index:30;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-mask-1);border:1px solid var(--dsw-alias-border-l2);backdrop-filter:blur(6px);pointer-events:none;border-radius:999px;align-items:center;gap:7px;padding:6px 16px;font-size:13px;font-weight:500;animation:.16s ease-out Yvqh9W_dshImageGenToastIn;display:inline-flex;position:absolute;bottom:24px;left:50%;transform:translate(-50%);box-shadow:0 8px 24px #00000038}@keyframes Yvqh9W_dshImageGenToastIn{0%{opacity:0;transform:translate(-50%,6px)}to{opacity:1;transform:translate(-50%)}}.Yvqh9W_conversationToast{z-index:30;border:1px solid var(--dsw-alias-border-l2);max-width:calc(100% - 32px);color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-mask-1);pointer-events:none;backdrop-filter:blur(6px);border-radius:999px;align-items:center;gap:7px;padding:6px 16px;font-size:13px;font-weight:500;animation:.16s ease-out Yvqh9W_dshImageGenToastIn;display:inline-flex;position:absolute;bottom:24px;left:50%;transform:translate(-50%);box-shadow:0 8px 24px #00000038}@media (prefers-reduced-motion:reduce){.Yvqh9W_download,.Yvqh9W_spinner,.Yvqh9W_bigSpinner{transition:none;animation-duration:1.5s}}.Yvqh9W_config[data-gallery=true] .Yvqh9W_configScroll>:not(:first-child),.Yvqh9W_config[data-gallery=true] .Yvqh9W_footer,.Yvqh9W_canvas[data-gallery=true]>.Yvqh9W_canvasState,.Yvqh9W_canvas[data-gallery=true]>.Yvqh9W_canvasError,.Yvqh9W_canvas[data-gallery=true]>.Yvqh9W_canvasBody,.Yvqh9W_studio:has(.Yvqh9W_config[data-gallery=true])>.Yvqh9W_history{display:none}.Yvqh9W_config[data-gallery=true] .Yvqh9W_configScroll{flex:none;order:1;display:flex;overflow:visible}.Yvqh9W_config[data-gallery=true] .Yvqh9W_galleryFilters{flex:1;order:2;min-height:0}.Yvqh9W_galleryFilters{padding:18px 14px;overflow:hidden auto}.Yvqh9W_galleryFilterHeading{color:var(--dsw-alias-label-tertiary);margin:0 4px 10px;font-size:12px;font-weight:600}.Yvqh9W_galleryFilter{width:100%;min-height:34px;color:var(--dsw-alias-label-secondary);cursor:pointer;text-align:left;background:0 0;border:0;border-radius:9px;justify-content:space-between;align-items:center;padding:0 10px;display:flex}.Yvqh9W_galleryFilter:hover,.Yvqh9W_galleryFilter[data-active]{color:var(--dsw-alias-brand-primary);background:color-mix(in srgb, var(--dsw-alias-brand-primary) 10%, transparent)}.Yvqh9W_galleryFilterCount{min-width:20px;color:var(--dsw-alias-label-tertiary);background:var(--dsw-alias-bg-layer-2);text-align:center;border-radius:999px;padding:1px 6px;font-size:11px}.Yvqh9W_galleryFilterDivider{background:var(--dsw-alias-border-l1);height:1px;margin:18px 4px}.Yvqh9W_galleryRatioList{flex-wrap:wrap;gap:6px;display:flex}.Yvqh9W_galleryRatio{color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-2);cursor:pointer;border:0;border-radius:999px;padding:6px 10px;font-size:12px}.Yvqh9W_galleryRatio[data-active]{color:var(--dsw-alias-brand-primary);background:color-mix(in srgb, var(--dsw-alias-brand-primary) 13%, transparent)}.Yvqh9W_galleryTagFilterList{flex-wrap:wrap;gap:6px;display:flex}.Yvqh9W_galleryTagFilter{border:1px solid var(--dsw-alias-border-l1);min-width:0;max-width:100%;min-height:27px;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-2);cursor:pointer;font:inherit;border-radius:6px;align-items:center;gap:5px;padding:0 8px;font-size:11px;display:inline-flex}.Yvqh9W_galleryTagFilter span:first-child{text-overflow:ellipsis;white-space:nowrap;max-width:112px;overflow:hidden}.Yvqh9W_galleryTagFilter span:last-child{color:var(--dsw-alias-label-tertiary);font-size:10px}.Yvqh9W_galleryTagFilter:hover,.Yvqh9W_galleryTagFilter[data-active]{color:var(--dsw-alias-brand-primary);background:color-mix(in srgb, var(--dsw-alias-brand-primary) 10%, transparent)}.Yvqh9W_galleryFilterNote{color:var(--dsw-alias-label-quaternary);margin:20px 4px 0;font-size:11px;line-height:1.5}.Yvqh9W_galleryWorkspace{box-sizing:border-box;flex-direction:column;width:100%;min-width:0;height:100%;min-height:0;padding:22px 24px 26px;display:flex;position:absolute;inset:0;overflow:hidden}.Yvqh9W_galleryToolbar{flex:none;justify-content:space-between;align-items:center;gap:16px;min-width:0;margin-bottom:18px;display:flex}.Yvqh9W_galleryHeading{color:var(--dsw-alias-label-primary);margin:0;font-size:20px;font-weight:700;display:inline}.Yvqh9W_galleryCount{color:var(--dsw-alias-label-tertiary);margin-left:8px;font-size:13px}.Yvqh9W_galleryToolbarActions{flex-wrap:wrap;align-items:center;gap:10px;min-width:0;display:flex}.Yvqh9W_gallerySelectMode,.Yvqh9W_galleryBulkButton,.Yvqh9W_gallerySelectionClear{border:1px solid var(--dsw-alias-border-l1);min-height:30px;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-1);cursor:pointer;font:inherit;border-radius:7px;padding:0 10px;font-size:12px}.Yvqh9W_gallerySelectMode:hover,.Yvqh9W_gallerySelectMode[data-active],.Yvqh9W_galleryBulkButton:hover:not(:disabled){color:var(--dsw-alias-brand-primary);border-color:color-mix(in srgb, var(--dsw-alias-brand-primary) 38%, var(--dsw-alias-border-l1));background:color-mix(in srgb, var(--dsw-alias-brand-primary) 11%, transparent)}.Yvqh9W_galleryBulkButton:disabled{cursor:not-allowed;opacity:.45}.Yvqh9W_gallerySelectionBar{border:1px solid color-mix(in srgb, var(--dsw-alias-brand-primary) 35%, var(--dsw-alias-border-l1));background:color-mix(in srgb, var(--dsw-alias-brand-primary) 7%, var(--dsw-alias-bg-layer-1));border-radius:9px;flex:none;align-items:center;gap:10px;min-width:0;margin:-4px 0 16px;padding:10px 12px;display:flex}.Yvqh9W_gallerySelectionBar strong{color:var(--dsw-alias-brand-primary);flex:none;font-size:12px}.Yvqh9W_gallerySelectionClear{margin-left:auto}.Yvqh9W_gallerySelectionClear:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2)}.Yvqh9W_galleryTagInput,.Yvqh9W_gallerySearch{border:1px solid var(--dsw-alias-border-l1);min-width:0;height:30px;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-1);font:inherit;border-radius:7px;outline:none;padding:0 10px;font-size:12px}.Yvqh9W_galleryTagInput{flex:190px}.Yvqh9W_galleryTagInput:focus,.Yvqh9W_gallerySearch:focus{border-color:var(--dsw-alias-brand-primary)}.Yvqh9W_galleryViewToggle{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:9px;padding:3px;display:flex}.Yvqh9W_galleryViewToggle button,.Yvqh9W_gallerySort,.Yvqh9W_galleryClear{min-height:30px;color:var(--dsw-alias-label-secondary);cursor:pointer;font:inherit;background:0 0;border:0;border-radius:7px;padding:0 10px;font-size:12px}.Yvqh9W_galleryViewToggle button[data-active],.Yvqh9W_galleryViewToggle button:hover,.Yvqh9W_gallerySort:hover,.Yvqh9W_galleryClear:hover{color:var(--dsw-alias-brand-primary);background:color-mix(in srgb, var(--dsw-alias-brand-primary) 11%, transparent)}.Yvqh9W_gallerySort{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1)}.Yvqh9W_galleryClear{border:1px solid var(--dsw-alias-border-l1)}.Yvqh9W_compareControl{flex-direction:column;gap:6px;margin:0 0 10px;display:flex}.Yvqh9W_compareToggle,.Yvqh9W_compareModelChoices label{color:var(--dsw-alias-label-secondary);cursor:pointer;align-items:center;gap:6px;font-size:12px;display:flex}.Yvqh9W_compareToggle input,.Yvqh9W_compareModelChoices input{accent-color:var(--dsw-alias-brand-primary)}.Yvqh9W_compareModelChoices{flex-wrap:wrap;gap:6px;display:flex}.Yvqh9W_compareModelChoices label{border:1px solid var(--dsw-alias-border-l1);border-radius:5px;padding:4px 6px;font-size:10px}.Yvqh9W_comparisonBoard{z-index:4;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);border-radius:8px;flex-direction:column;display:flex;position:absolute;inset:14px;overflow:hidden;box-shadow:0 8px 24px #0000001f}.Yvqh9W_comparisonBoard>header{border-bottom:1px solid var(--dsw-alias-border-l1);justify-content:space-between;align-items:center;padding:10px 12px;display:flex}.Yvqh9W_comparisonBoard>header div{align-items:baseline;gap:7px;display:flex}.Yvqh9W_comparisonBoard>header strong{color:var(--dsw-alias-label-primary);font-size:13px}.Yvqh9W_comparisonBoard>header span{color:var(--dsw-alias-label-tertiary);font-size:11px}.Yvqh9W_comparisonBoard>header button{border:1px solid var(--dsw-alias-border-l1);min-height:28px;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-2);cursor:pointer;font:inherit;border-radius:5px;padding:0 9px;font-size:11px}.Yvqh9W_comparisonGrid{flex:1;grid-template-rows:minmax(0,1fr);grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;min-height:0;padding:12px;display:grid;overflow:auto}.Yvqh9W_comparisonGrid article{flex-direction:column;gap:7px;min-width:0;height:100%;min-height:0;display:flex}.Yvqh9W_comparisonGrid article>strong{color:var(--dsw-alias-label-primary);font-size:12px}.Yvqh9W_comparisonImageButton{cursor:zoom-in;background:var(--dsw-alias-bg-base);border:0;flex:1;width:100%;min-height:0;padding:0;display:flex;overflow:hidden}.Yvqh9W_comparisonImageButton:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:-2px}.Yvqh9W_comparisonGrid article>span{min-height:0;color:var(--dsw-alias-label-tertiary);background:var(--dsw-alias-bg-layer-2);flex:1;place-items:center;font-size:12px;display:grid}.Yvqh9W_comparisonGrid img{object-fit:contain;background:var(--dsw-alias-bg-base);flex:1;width:100%;height:100%;min-height:0;max-height:none;display:block}.Yvqh9W_comparisonFullscreen{z-index:1200;background:#000000eb;padding:54px 24px 24px;position:fixed;inset:0;overflow:auto}.Yvqh9W_comparisonFullscreenGrid{grid-template-columns:repeat(auto-fit,minmax(300px,1fr));align-items:start;gap:18px;min-height:100%;display:grid}.Yvqh9W_comparisonFullscreen figure{min-width:0;margin:0}.Yvqh9W_comparisonFullscreen figcaption{color:#fff;margin-bottom:8px;font-size:13px;font-weight:600}.Yvqh9W_comparisonFullscreen img{background:#111;width:100%;margin-bottom:10px;display:block}.Yvqh9W_historyItem[data-comparison]{border-color:color-mix(in srgb, var(--dsw-alias-brand-primary) 55%, var(--dsw-alias-border-l1))}.Yvqh9W_galleryMasonry{box-sizing:border-box;overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:var(--dsw-alias-border-l2) transparent;flex:auto;grid-template-columns:repeat(3,minmax(0,1fr));grid-auto-rows:max-content;align-content:start;gap:16px;width:100%;min-width:0;max-width:100%;height:0;min-height:0;padding:2px 8px 16px 2px;display:grid;overflow:hidden scroll}.Yvqh9W_galleryMasonry::-webkit-scrollbar{width:8px}.Yvqh9W_galleryMasonry::-webkit-scrollbar-thumb{background:var(--dsw-alias-border-l2);border-radius:999px}.Yvqh9W_galleryCard{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:14px;width:100%;margin:0;display:block;position:relative;overflow:hidden;box-shadow:0 5px 18px #18203612}.Yvqh9W_galleryCard[data-selected]{border-color:var(--dsw-alias-brand-primary);box-shadow:0 0 0 2px color-mix(in srgb, var(--dsw-alias-brand-primary) 26%, transparent), 0 5px 18px #18203612}.Yvqh9W_gallerySelect{z-index:2;cursor:pointer;background:#00000094;border:1px solid #ffffffbf;border-radius:7px;place-items:center;width:26px;height:26px;display:grid;position:absolute;top:9px;right:9px}.Yvqh9W_gallerySelect input{width:16px;height:16px;accent-color:var(--dsw-alias-brand-primary);cursor:pointer;margin:0}.Yvqh9W_galleryImageButton{background:var(--dsw-alias-bg-base);cursor:zoom-in;border:0;width:100%;padding:0;display:block;position:relative}.Yvqh9W_galleryImageButton[data-selecting]{cursor:pointer}.Yvqh9W_galleryImage{aspect-ratio:4/3;object-fit:cover;width:100%;display:block}.Yvqh9W_galleryMasonry[data-view=masonry] .Yvqh9W_galleryCard:nth-child(3n+1) .Yvqh9W_galleryImage{aspect-ratio:4/5}.Yvqh9W_galleryMasonry[data-view=masonry] .Yvqh9W_galleryCard:nth-child(3n+2) .Yvqh9W_galleryImage{aspect-ratio:4/3}.Yvqh9W_galleryMasonry[data-view=masonry] .Yvqh9W_galleryCard:nth-child(3n) .Yvqh9W_galleryImage{aspect-ratio:3/4}.Yvqh9W_galleryBadge{color:#fff;backdrop-filter:blur(4px);background:#121724c2;border-radius:999px;padding:4px 9px;font-size:11px;position:absolute;top:10px;left:10px}.Yvqh9W_galleryCardActions{padding:8px 12px 0;display:flex}.Yvqh9W_galleryCardAction{border:1px solid var(--dsw-alias-border-l2);width:100%;min-width:0;min-height:28px;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-2);cursor:pointer;font:inherit;white-space:nowrap;border-radius:7px;justify-content:center;align-items:center;gap:4px;padding:0 4px;font-size:10px;font-weight:500;display:inline-flex}.Yvqh9W_galleryCardAction:hover,.Yvqh9W_galleryCardAction:focus-visible{border-color:var(--dsw-alias-brand-primary);color:var(--dsw-alias-brand-primary);outline:none}.Yvqh9W_galleryCardAction:disabled{cursor:wait;opacity:.55}.Yvqh9W_galleryCardFooter{align-items:center;gap:9px;min-width:0;padding:10px 12px;display:flex}.Yvqh9W_galleryAvatar{color:#fff;background:var(--dsw-alias-brand-primary);border-radius:50%;flex:none;place-items:center;width:27px;height:27px;font-size:12px;font-weight:700;display:grid}.Yvqh9W_galleryCardInfo{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.Yvqh9W_galleryCardInfo strong,.Yvqh9W_galleryCardInfo small{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.Yvqh9W_galleryCardInfo strong{color:var(--dsw-alias-label-primary);font-size:12px}.Yvqh9W_galleryCardInfo small{color:var(--dsw-alias-label-tertiary);font-size:10px}.Yvqh9W_galleryTags{flex-wrap:wrap;gap:4px;margin-top:4px;display:flex}.Yvqh9W_galleryTags button{max-width:96px;min-height:19px;color:var(--dsw-alias-brand-primary);background:color-mix(in srgb, var(--dsw-alias-brand-primary) 10%, transparent);cursor:pointer;font:inherit;text-overflow:ellipsis;white-space:nowrap;border:0;border-radius:4px;padding:1px 6px;font-size:10px;line-height:1.35;overflow:hidden}.Yvqh9W_galleryTags button:hover{background:color-mix(in srgb, var(--dsw-alias-brand-primary) 17%, transparent)}.Yvqh9W_galleryTags .Yvqh9W_galleryTagEdit{color:var(--dsw-alias-label-tertiary);background:0 0;flex:none}.Yvqh9W_galleryTagEditor{align-items:center;gap:6px;padding:0 12px 10px 48px;display:flex}.Yvqh9W_galleryTagEditor input{border:1px solid var(--dsw-alias-border-l2);min-width:0;height:27px;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2);font:inherit;border-radius:6px;outline:none;flex:1;padding:0 8px;font-size:11px}.Yvqh9W_galleryTagEditor input:focus{border-color:var(--dsw-alias-brand-primary)}.Yvqh9W_galleryTagEditor button{border:1px solid var(--dsw-alias-border-l2);height:27px;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-1);cursor:pointer;font:inherit;border-radius:6px;padding:0 8px;font-size:11px}.Yvqh9W_galleryTagEditor button[type=submit]{color:var(--dsw-alias-brand-primary)}.Yvqh9W_galleryRemove{width:24px;height:24px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:0;border-radius:50%;flex:none;padding:0;font-size:18px}.Yvqh9W_galleryRemove:hover{color:var(--dsw-alias-state-error);background:var(--dsw-alias-bg-layer-2)}@media (width<=1100px){.Yvqh9W_galleryMasonry{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (width<=760px){.Yvqh9W_studio{grid-template-rows:minmax(220px,36%) minmax(0,1fr);grid-template-columns:minmax(0,1fr);overflow-y:auto}.Yvqh9W_history{grid-area:1/1;min-height:220px}.Yvqh9W_generation{flex-direction:column;grid-area:2/1;min-height:0}.Yvqh9W_config{width:auto;max-width:none;height:auto;min-height:0}.Yvqh9W_config[data-gallery=true]{flex:none}.Yvqh9W_canvas{min-height:560px}.Yvqh9W_galleryToolbar{flex-direction:column;align-items:flex-start}.Yvqh9W_galleryToolbarActions{flex-wrap:wrap;width:100%}.Yvqh9W_galleryMasonry{grid-template-columns:1fr}}";
|
|
1802
1947
|
const tagId$2 = "@dickpy/dsh-imagegen/panel.module.css";
|
|
1803
1948
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$2) + "]") === null) {
|
|
1804
1949
|
const tag = document.createElement("style");
|
|
@@ -1808,176 +1953,226 @@ window.__ModuleLoader__.load({
|
|
|
1808
1953
|
document.head.appendChild(tag);
|
|
1809
1954
|
}
|
|
1810
1955
|
var panel_module_css_default = {
|
|
1811
|
-
"
|
|
1812
|
-
"
|
|
1813
|
-
"
|
|
1814
|
-
"
|
|
1815
|
-
"
|
|
1816
|
-
"
|
|
1817
|
-
"
|
|
1818
|
-
"
|
|
1819
|
-
"
|
|
1820
|
-
"
|
|
1821
|
-
"
|
|
1822
|
-
"
|
|
1823
|
-
"
|
|
1824
|
-
"
|
|
1825
|
-
"
|
|
1826
|
-
"
|
|
1827
|
-
"
|
|
1828
|
-
"
|
|
1829
|
-
"
|
|
1830
|
-
"
|
|
1831
|
-
"
|
|
1832
|
-
"
|
|
1833
|
-
"
|
|
1834
|
-
"
|
|
1835
|
-
"
|
|
1836
|
-
"
|
|
1837
|
-
"
|
|
1838
|
-
"
|
|
1839
|
-
"
|
|
1840
|
-
"
|
|
1841
|
-
"
|
|
1842
|
-
"
|
|
1843
|
-
"
|
|
1844
|
-
"
|
|
1845
|
-
"
|
|
1846
|
-
"
|
|
1847
|
-
"
|
|
1848
|
-
"
|
|
1849
|
-
"
|
|
1850
|
-
"
|
|
1851
|
-
"
|
|
1852
|
-
"
|
|
1853
|
-
"
|
|
1854
|
-
"
|
|
1855
|
-
"
|
|
1856
|
-
"
|
|
1857
|
-
"
|
|
1858
|
-
"
|
|
1859
|
-
"
|
|
1860
|
-
"
|
|
1861
|
-
"
|
|
1862
|
-
"
|
|
1863
|
-
"
|
|
1864
|
-
"
|
|
1865
|
-
"
|
|
1866
|
-
"
|
|
1867
|
-
"
|
|
1868
|
-
"
|
|
1869
|
-
"
|
|
1870
|
-
"
|
|
1871
|
-
"
|
|
1872
|
-
"
|
|
1873
|
-
"
|
|
1874
|
-
"
|
|
1875
|
-
"
|
|
1876
|
-
"
|
|
1877
|
-
"
|
|
1878
|
-
"
|
|
1879
|
-
"
|
|
1880
|
-
"
|
|
1881
|
-
"
|
|
1882
|
-
"
|
|
1883
|
-
"
|
|
1884
|
-
"
|
|
1885
|
-
"
|
|
1886
|
-
"
|
|
1887
|
-
"
|
|
1888
|
-
"
|
|
1889
|
-
"
|
|
1890
|
-
"
|
|
1891
|
-
"
|
|
1892
|
-
"
|
|
1893
|
-
"
|
|
1894
|
-
"
|
|
1895
|
-
"
|
|
1896
|
-
"
|
|
1897
|
-
"
|
|
1898
|
-
"
|
|
1899
|
-
"
|
|
1900
|
-
"
|
|
1901
|
-
"
|
|
1902
|
-
"
|
|
1903
|
-
"
|
|
1904
|
-
"
|
|
1905
|
-
"
|
|
1906
|
-
"
|
|
1907
|
-
"
|
|
1908
|
-
"
|
|
1909
|
-
"
|
|
1910
|
-
"
|
|
1911
|
-
"
|
|
1912
|
-
"
|
|
1913
|
-
"
|
|
1914
|
-
"
|
|
1915
|
-
"
|
|
1916
|
-
"
|
|
1917
|
-
"
|
|
1918
|
-
"
|
|
1919
|
-
"
|
|
1920
|
-
"
|
|
1921
|
-
"
|
|
1922
|
-
"
|
|
1923
|
-
"
|
|
1924
|
-
"
|
|
1925
|
-
"
|
|
1926
|
-
"
|
|
1927
|
-
"
|
|
1928
|
-
"
|
|
1929
|
-
"
|
|
1930
|
-
"
|
|
1931
|
-
"
|
|
1932
|
-
"
|
|
1933
|
-
"
|
|
1934
|
-
"
|
|
1935
|
-
"
|
|
1936
|
-
"
|
|
1937
|
-
"
|
|
1938
|
-
"
|
|
1939
|
-
"
|
|
1940
|
-
"
|
|
1941
|
-
"
|
|
1942
|
-
"
|
|
1943
|
-
"
|
|
1944
|
-
"
|
|
1945
|
-
"
|
|
1946
|
-
"
|
|
1947
|
-
"
|
|
1948
|
-
"
|
|
1949
|
-
"
|
|
1950
|
-
"
|
|
1951
|
-
"
|
|
1952
|
-
"
|
|
1953
|
-
"
|
|
1954
|
-
"
|
|
1955
|
-
"
|
|
1956
|
-
"
|
|
1957
|
-
"
|
|
1958
|
-
"
|
|
1959
|
-
"
|
|
1960
|
-
"
|
|
1961
|
-
"
|
|
1962
|
-
"
|
|
1963
|
-
"
|
|
1964
|
-
"
|
|
1965
|
-
"
|
|
1966
|
-
"
|
|
1967
|
-
"
|
|
1968
|
-
"
|
|
1969
|
-
"
|
|
1970
|
-
"
|
|
1971
|
-
"
|
|
1972
|
-
"
|
|
1973
|
-
"
|
|
1974
|
-
"
|
|
1975
|
-
"
|
|
1976
|
-
"
|
|
1977
|
-
"
|
|
1978
|
-
"
|
|
1979
|
-
"
|
|
1980
|
-
"
|
|
1956
|
+
"galleryAdd": "Yvqh9W_galleryAdd",
|
|
1957
|
+
"ecommerceResultsHeader": "Yvqh9W_ecommerceResultsHeader",
|
|
1958
|
+
"lightboxCopy": "Yvqh9W_lightboxCopy",
|
|
1959
|
+
"galleryToolbar": "Yvqh9W_galleryToolbar",
|
|
1960
|
+
"ecommerceAdvancedChevron": "Yvqh9W_ecommerceAdvancedChevron",
|
|
1961
|
+
"bigSpinner": "Yvqh9W_bigSpinner",
|
|
1962
|
+
"lightboxScaleFrame": "Yvqh9W_lightboxScaleFrame",
|
|
1963
|
+
"galleryViewToggle": "Yvqh9W_galleryViewToggle",
|
|
1964
|
+
"compareControl": "Yvqh9W_compareControl",
|
|
1965
|
+
"galleryCardInfo": "Yvqh9W_galleryCardInfo",
|
|
1966
|
+
"studio": "Yvqh9W_studio",
|
|
1967
|
+
"ecommerceFooterHint": "Yvqh9W_ecommerceFooterHint",
|
|
1968
|
+
"download": "Yvqh9W_download",
|
|
1969
|
+
"galleryFilterHeading": "Yvqh9W_galleryFilterHeading",
|
|
1970
|
+
"dshImageGenSpin": "Yvqh9W_dshImageGenSpin",
|
|
1971
|
+
"galleryRatioList": "Yvqh9W_galleryRatioList",
|
|
1972
|
+
"configHeader": "Yvqh9W_configHeader",
|
|
1973
|
+
"configGuideBody": "Yvqh9W_configGuideBody",
|
|
1974
|
+
"view": "Yvqh9W_view",
|
|
1975
|
+
"historyPrompt": "Yvqh9W_historyPrompt",
|
|
1976
|
+
"ecommerceGroups": "Yvqh9W_ecommerceGroups",
|
|
1977
|
+
"galleryTags": "Yvqh9W_galleryTags",
|
|
1978
|
+
"modelMenuList": "Yvqh9W_modelMenuList",
|
|
1979
|
+
"topNav": "Yvqh9W_topNav",
|
|
1980
|
+
"galleryWorkspace": "Yvqh9W_galleryWorkspace",
|
|
1981
|
+
"gallerySelectMode": "Yvqh9W_gallerySelectMode",
|
|
1982
|
+
"referenceImage": "Yvqh9W_referenceImage",
|
|
1983
|
+
"ecommerceSlotCard": "Yvqh9W_ecommerceSlotCard",
|
|
1984
|
+
"configScroll": "Yvqh9W_configScroll",
|
|
1985
|
+
"galleryTagInput": "Yvqh9W_galleryTagInput",
|
|
1986
|
+
"ecommercePlanBack": "Yvqh9W_ecommercePlanBack",
|
|
1987
|
+
"modelMenu": "Yvqh9W_modelMenu",
|
|
1988
|
+
"ecommerceTaskCard": "Yvqh9W_ecommerceTaskCard",
|
|
1989
|
+
"chatResizer": "Yvqh9W_chatResizer",
|
|
1990
|
+
"canvasMeta": "Yvqh9W_canvasMeta",
|
|
1991
|
+
"card": "Yvqh9W_card",
|
|
1992
|
+
"ecommerceAdvancedToggle": "Yvqh9W_ecommerceAdvancedToggle",
|
|
1993
|
+
"optionPill": "Yvqh9W_optionPill",
|
|
1994
|
+
"lightbox": "Yvqh9W_lightbox",
|
|
1995
|
+
"galleryFilter": "Yvqh9W_galleryFilter",
|
|
1996
|
+
"spinner": "Yvqh9W_spinner",
|
|
1997
|
+
"historyMeta": "Yvqh9W_historyMeta",
|
|
1998
|
+
"canvasError": "Yvqh9W_canvasError",
|
|
1999
|
+
"ecommerceUploadHero": "Yvqh9W_ecommerceUploadHero",
|
|
2000
|
+
"canvasHistoryTag": "Yvqh9W_canvasHistoryTag",
|
|
2001
|
+
"lightboxClose": "Yvqh9W_lightboxClose",
|
|
2002
|
+
"galleryFilterDivider": "Yvqh9W_galleryFilterDivider",
|
|
2003
|
+
"galleryHeading": "Yvqh9W_galleryHeading",
|
|
2004
|
+
"galleryAvatar": "Yvqh9W_galleryAvatar",
|
|
2005
|
+
"taskStatus": "Yvqh9W_taskStatus",
|
|
2006
|
+
"taskTrayToggle": "Yvqh9W_taskTrayToggle",
|
|
2007
|
+
"taskRows": "Yvqh9W_taskRows",
|
|
2008
|
+
"panelHeaderActions": "Yvqh9W_panelHeaderActions",
|
|
2009
|
+
"sessionTabLabel": "Yvqh9W_sessionTabLabel",
|
|
2010
|
+
"ecommerceFooterBody": "Yvqh9W_ecommerceFooterBody",
|
|
2011
|
+
"panelHeading": "Yvqh9W_panelHeading",
|
|
2012
|
+
"entryIcon": "Yvqh9W_entryIcon",
|
|
2013
|
+
"configToggle": "Yvqh9W_configToggle",
|
|
2014
|
+
"historyEmpty": "Yvqh9W_historyEmpty",
|
|
2015
|
+
"ecommercePlanWarn": "Yvqh9W_ecommercePlanWarn",
|
|
2016
|
+
"ecommerceResultBadge": "Yvqh9W_ecommerceResultBadge",
|
|
2017
|
+
"chatToggle": "Yvqh9W_chatToggle",
|
|
2018
|
+
"promptFooter": "Yvqh9W_promptFooter",
|
|
2019
|
+
"ecommerceFieldLabel": "Yvqh9W_ecommerceFieldLabel",
|
|
2020
|
+
"enhanceButton": "Yvqh9W_enhanceButton",
|
|
2021
|
+
"footer": "Yvqh9W_footer",
|
|
2022
|
+
"taskTrayChevron": "Yvqh9W_taskTrayChevron",
|
|
2023
|
+
"lightboxCaptionRow": "Yvqh9W_lightboxCaptionRow",
|
|
2024
|
+
"lightboxCaption": "Yvqh9W_lightboxCaption",
|
|
2025
|
+
"taskTrayClose": "Yvqh9W_taskTrayClose",
|
|
2026
|
+
"lightboxDownload": "Yvqh9W_lightboxDownload",
|
|
2027
|
+
"reference": "Yvqh9W_reference",
|
|
2028
|
+
"taskTray": "Yvqh9W_taskTray",
|
|
2029
|
+
"ecommerceGroup": "Yvqh9W_ecommerceGroup",
|
|
2030
|
+
"ecommerceAssets": "Yvqh9W_ecommerceAssets",
|
|
2031
|
+
"lightboxEdit": "Yvqh9W_lightboxEdit",
|
|
2032
|
+
"ecommerceAssetAdd": "Yvqh9W_ecommerceAssetAdd",
|
|
2033
|
+
"historyHeader": "Yvqh9W_historyHeader",
|
|
2034
|
+
"ecommerceResultsEmpty": "Yvqh9W_ecommerceResultsEmpty",
|
|
2035
|
+
"sessionTab": "Yvqh9W_sessionTab",
|
|
2036
|
+
"generateInner": "Yvqh9W_generateInner",
|
|
2037
|
+
"dshImageGenToastIn": "Yvqh9W_dshImageGenToastIn",
|
|
2038
|
+
"galleryTagFilterList": "Yvqh9W_galleryTagFilterList",
|
|
2039
|
+
"generateButton": "Yvqh9W_generateButton",
|
|
2040
|
+
"imageCaption": "Yvqh9W_imageCaption",
|
|
2041
|
+
"ecommerceAdvancedBody": "Yvqh9W_ecommerceAdvancedBody",
|
|
2042
|
+
"ecommerceWorkspace": "Yvqh9W_ecommerceWorkspace",
|
|
2043
|
+
"ecommerceTaskActions": "Yvqh9W_ecommerceTaskActions",
|
|
2044
|
+
"gallerySelect": "Yvqh9W_gallerySelect",
|
|
2045
|
+
"galleryTagEdit": "Yvqh9W_galleryTagEdit",
|
|
2046
|
+
"ecommerceGroupGrid": "Yvqh9W_ecommerceGroupGrid",
|
|
2047
|
+
"historyClear": "Yvqh9W_historyClear",
|
|
2048
|
+
"galleryTagEditor": "Yvqh9W_galleryTagEditor",
|
|
2049
|
+
"uploadHint": "Yvqh9W_uploadHint",
|
|
2050
|
+
"referenceActions": "Yvqh9W_referenceActions",
|
|
2051
|
+
"gallerySort": "Yvqh9W_gallerySort",
|
|
2052
|
+
"compareToggle": "Yvqh9W_compareToggle",
|
|
2053
|
+
"sidebarHistoryHost": "Yvqh9W_sidebarHistoryHost",
|
|
2054
|
+
"ecommercePlanList": "Yvqh9W_ecommercePlanList",
|
|
2055
|
+
"ecommercePrimaryAction": "Yvqh9W_ecommercePrimaryAction",
|
|
2056
|
+
"updateActions": "Yvqh9W_updateActions",
|
|
2057
|
+
"configGuide": "Yvqh9W_configGuide",
|
|
2058
|
+
"galleryFilterCount": "Yvqh9W_galleryFilterCount",
|
|
2059
|
+
"ecommerceField": "Yvqh9W_ecommerceField",
|
|
2060
|
+
"lightboxFigure": "Yvqh9W_lightboxFigure",
|
|
2061
|
+
"gallerySelectionClear": "Yvqh9W_gallerySelectionClear",
|
|
2062
|
+
"modeRow": "Yvqh9W_modeRow",
|
|
2063
|
+
"galleryCardFooter": "Yvqh9W_galleryCardFooter",
|
|
2064
|
+
"topNavDivider": "Yvqh9W_topNavDivider",
|
|
2065
|
+
"comparisonFullscreen": "Yvqh9W_comparisonFullscreen",
|
|
2066
|
+
"galleryRatio": "Yvqh9W_galleryRatio",
|
|
2067
|
+
"ecommercePlanMini": "Yvqh9W_ecommercePlanMini",
|
|
2068
|
+
"ecommerceResults": "Yvqh9W_ecommerceResults",
|
|
2069
|
+
"paramLabel": "Yvqh9W_paramLabel",
|
|
2070
|
+
"lightboxMeta": "Yvqh9W_lightboxMeta",
|
|
2071
|
+
"comparisonImageButton": "Yvqh9W_comparisonImageButton",
|
|
2072
|
+
"taskPrompt": "Yvqh9W_taskPrompt",
|
|
2073
|
+
"gallerySearch": "Yvqh9W_gallerySearch",
|
|
2074
|
+
"ecommerceActionChip": "Yvqh9W_ecommerceActionChip",
|
|
2075
|
+
"historyFilters": "Yvqh9W_historyFilters",
|
|
2076
|
+
"canvasBody": "Yvqh9W_canvasBody",
|
|
2077
|
+
"lightboxNav": "Yvqh9W_lightboxNav",
|
|
2078
|
+
"historyNew": "Yvqh9W_historyNew",
|
|
2079
|
+
"imageCard": "Yvqh9W_imageCard",
|
|
2080
|
+
"updateBanner": "Yvqh9W_updateBanner",
|
|
2081
|
+
"updateText": "Yvqh9W_updateText",
|
|
2082
|
+
"ecommerceParamGrid": "Yvqh9W_ecommerceParamGrid",
|
|
2083
|
+
"historyThumbPlaceholder": "Yvqh9W_historyThumbPlaceholder",
|
|
2084
|
+
"modelMenuItem": "Yvqh9W_modelMenuItem",
|
|
2085
|
+
"connectionDot": "Yvqh9W_connectionDot",
|
|
2086
|
+
"lightboxImage": "Yvqh9W_lightboxImage",
|
|
2087
|
+
"galleryClear": "Yvqh9W_galleryClear",
|
|
2088
|
+
"updateRelease": "Yvqh9W_updateRelease",
|
|
2089
|
+
"historyItem": "Yvqh9W_historyItem",
|
|
2090
|
+
"uploadIcon": "Yvqh9W_uploadIcon",
|
|
2091
|
+
"modelWrap": "Yvqh9W_modelWrap",
|
|
2092
|
+
"galleryToast": "Yvqh9W_galleryToast",
|
|
2093
|
+
"grid": "Yvqh9W_grid",
|
|
2094
|
+
"lightboxStage": "Yvqh9W_lightboxStage",
|
|
2095
|
+
"galleryImageButton": "Yvqh9W_galleryImageButton",
|
|
2096
|
+
"galleryRemove": "Yvqh9W_galleryRemove",
|
|
2097
|
+
"galleryBadge": "Yvqh9W_galleryBadge",
|
|
2098
|
+
"optionRow": "Yvqh9W_optionRow",
|
|
2099
|
+
"modePill": "Yvqh9W_modePill",
|
|
2100
|
+
"historySearch": "Yvqh9W_historySearch",
|
|
2101
|
+
"compareModelChoices": "Yvqh9W_compareModelChoices",
|
|
2102
|
+
"topNavItem": "Yvqh9W_topNavItem",
|
|
2103
|
+
"sessionTabIcon": "Yvqh9W_sessionTabIcon",
|
|
2104
|
+
"ecommercePlanNote": "Yvqh9W_ecommercePlanNote",
|
|
2105
|
+
"galleryCardAction": "Yvqh9W_galleryCardAction",
|
|
2106
|
+
"prompt": "Yvqh9W_prompt",
|
|
2107
|
+
"ecommerceSection": "Yvqh9W_ecommerceSection",
|
|
2108
|
+
"historyMain": "Yvqh9W_historyMain",
|
|
2109
|
+
"optionGrid": "Yvqh9W_optionGrid",
|
|
2110
|
+
"conversationToast": "Yvqh9W_conversationToast",
|
|
2111
|
+
"galleryCard": "Yvqh9W_galleryCard",
|
|
2112
|
+
"conversationAdd": "Yvqh9W_conversationAdd",
|
|
2113
|
+
"ecommerceSectionHint": "Yvqh9W_ecommerceSectionHint",
|
|
2114
|
+
"entryLabel": "Yvqh9W_entryLabel",
|
|
2115
|
+
"taskTrayCount": "Yvqh9W_taskTrayCount",
|
|
2116
|
+
"connectionStatus": "Yvqh9W_connectionStatus",
|
|
2117
|
+
"historyThumb": "Yvqh9W_historyThumb",
|
|
2118
|
+
"ecommerceRefRow": "Yvqh9W_ecommerceRefRow",
|
|
2119
|
+
"lightboxTool": "Yvqh9W_lightboxTool",
|
|
2120
|
+
"galleryToolbarActions": "Yvqh9W_galleryToolbarActions",
|
|
2121
|
+
"comparisonGrid": "Yvqh9W_comparisonGrid",
|
|
2122
|
+
"hiddenFile": "Yvqh9W_hiddenFile",
|
|
2123
|
+
"canvasState": "Yvqh9W_canvasState",
|
|
2124
|
+
"previewBadge": "Yvqh9W_previewBadge",
|
|
2125
|
+
"ecommerceTaskState": "Yvqh9W_ecommerceTaskState",
|
|
2126
|
+
"canvasStateTitle": "Yvqh9W_canvasStateTitle",
|
|
2127
|
+
"canvasStateHint": "Yvqh9W_canvasStateHint",
|
|
2128
|
+
"githubLink": "Yvqh9W_githubLink",
|
|
2129
|
+
"lightboxTools": "Yvqh9W_lightboxTools",
|
|
2130
|
+
"galleryTagFilter": "Yvqh9W_galleryTagFilter",
|
|
2131
|
+
"galleryFilterNote": "Yvqh9W_galleryFilterNote",
|
|
2132
|
+
"galleryImage": "Yvqh9W_galleryImage",
|
|
2133
|
+
"taskTrayHeader": "Yvqh9W_taskTrayHeader",
|
|
2134
|
+
"galleryCount": "Yvqh9W_galleryCount",
|
|
2135
|
+
"galleryCardActions": "Yvqh9W_galleryCardActions",
|
|
2136
|
+
"historyActions": "Yvqh9W_historyActions",
|
|
2137
|
+
"sessionTabs": "Yvqh9W_sessionTabs",
|
|
2138
|
+
"entry": "Yvqh9W_entry",
|
|
2139
|
+
"lightboxIndex": "Yvqh9W_lightboxIndex",
|
|
2140
|
+
"lightboxActions": "Yvqh9W_lightboxActions",
|
|
2141
|
+
"history": "Yvqh9W_history",
|
|
2142
|
+
"comparisonBoard": "Yvqh9W_comparisonBoard",
|
|
2143
|
+
"galleryBulkButton": "Yvqh9W_galleryBulkButton",
|
|
2144
|
+
"historyList": "Yvqh9W_historyList",
|
|
2145
|
+
"config": "Yvqh9W_config",
|
|
2146
|
+
"ecommerceStructureGrid": "Yvqh9W_ecommerceStructureGrid",
|
|
2147
|
+
"ecommerceSlotCount": "Yvqh9W_ecommerceSlotCount",
|
|
2148
|
+
"ecommerceAsset": "Yvqh9W_ecommerceAsset",
|
|
2149
|
+
"historyInfo": "Yvqh9W_historyInfo",
|
|
2150
|
+
"promptCount": "Yvqh9W_promptCount",
|
|
2151
|
+
"templatesButton": "Yvqh9W_templatesButton",
|
|
2152
|
+
"paramHint": "Yvqh9W_paramHint",
|
|
2153
|
+
"configResizer": "Yvqh9W_configResizer",
|
|
2154
|
+
"paramGroup": "Yvqh9W_paramGroup",
|
|
2155
|
+
"modelLabel": "Yvqh9W_modelLabel",
|
|
2156
|
+
"canvasEmptyIcon": "Yvqh9W_canvasEmptyIcon",
|
|
2157
|
+
"lightboxZoomLevel": "Yvqh9W_lightboxZoomLevel",
|
|
2158
|
+
"comparisonFullscreenGrid": "Yvqh9W_comparisonFullscreenGrid",
|
|
2159
|
+
"gallerySelectionBar": "Yvqh9W_gallerySelectionBar",
|
|
2160
|
+
"canvas": "Yvqh9W_canvas",
|
|
2161
|
+
"galleryMasonry": "Yvqh9W_galleryMasonry",
|
|
2162
|
+
"taskRow": "Yvqh9W_taskRow",
|
|
2163
|
+
"image": "Yvqh9W_image",
|
|
2164
|
+
"uploadBox": "Yvqh9W_uploadBox",
|
|
2165
|
+
"panelHeader": "Yvqh9W_panelHeader",
|
|
2166
|
+
"panelTitle": "Yvqh9W_panelTitle",
|
|
2167
|
+
"historyAction": "Yvqh9W_historyAction",
|
|
2168
|
+
"zoomHint": "Yvqh9W_zoomHint",
|
|
2169
|
+
"galleryFilters": "Yvqh9W_galleryFilters",
|
|
2170
|
+
"generation": "Yvqh9W_generation",
|
|
2171
|
+
"panel": "Yvqh9W_panel",
|
|
2172
|
+
"historyTitle": "Yvqh9W_historyTitle",
|
|
2173
|
+
"historyHeaderActions": "Yvqh9W_historyHeaderActions",
|
|
2174
|
+
"ecommerceResultsActions": "Yvqh9W_ecommerceResultsActions",
|
|
2175
|
+
"modelSelect": "Yvqh9W_modelSelect"
|
|
1981
2176
|
};
|
|
1982
2177
|
//#endregion
|
|
1983
2178
|
//#region src/client/ImageGenPanel.tsx
|
|
@@ -2032,9 +2227,78 @@ window.__ModuleLoader__.load({
|
|
|
2032
2227
|
"high"
|
|
2033
2228
|
];
|
|
2034
2229
|
const REF_IMAGE_MAX_BYTES = 10 * 1024 * 1024;
|
|
2230
|
+
const CONVERSATION_IMAGE_MAX_DIMENSION = 2e3;
|
|
2231
|
+
const CONVERSATION_IMAGE_JPEG_QUALITY = .9;
|
|
2035
2232
|
const PREVIEW_SCALE_MIN = .5;
|
|
2036
2233
|
const PREVIEW_SCALE_MAX = 3;
|
|
2037
2234
|
const PREVIEW_SCALE_STEP = .25;
|
|
2235
|
+
const CONFIG_COLLAPSED_STORAGE_KEY = "dsh-imagegen-config-collapsed";
|
|
2236
|
+
const ECOMMERCE_DRAFT_STORAGE_KEY = "dsh-imagegen-ecommerce-draft";
|
|
2237
|
+
/** Reference roles an uploaded product asset can play (slot selections can
|
|
2238
|
+
* also pick 'none'). */
|
|
2239
|
+
const ECOMMERCE_ASSET_ROLES = [
|
|
2240
|
+
"product",
|
|
2241
|
+
"packaging",
|
|
2242
|
+
"detail",
|
|
2243
|
+
"style"
|
|
2244
|
+
];
|
|
2245
|
+
const MAX_ECOMMERCE_ASSETS = 4;
|
|
2246
|
+
const ECOMMERCE_ROLE_PROMPT_LABELS = {
|
|
2247
|
+
product: "商品主体",
|
|
2248
|
+
packaging: "包装",
|
|
2249
|
+
detail: "细节/角度",
|
|
2250
|
+
style: "风格参考"
|
|
2251
|
+
};
|
|
2252
|
+
const PRODUCT_SET_SLOTS = [
|
|
2253
|
+
{
|
|
2254
|
+
key: "main",
|
|
2255
|
+
label: "主图",
|
|
2256
|
+
description: "干净背景,突出商品主体",
|
|
2257
|
+
count: 1,
|
|
2258
|
+
enabled: true,
|
|
2259
|
+
refRole: "product"
|
|
2260
|
+
},
|
|
2261
|
+
{
|
|
2262
|
+
key: "selling-point",
|
|
2263
|
+
label: "卖点图",
|
|
2264
|
+
description: "用画面展示商品核心卖点",
|
|
2265
|
+
count: 2,
|
|
2266
|
+
enabled: true,
|
|
2267
|
+
refRole: "product"
|
|
2268
|
+
},
|
|
2269
|
+
{
|
|
2270
|
+
key: "scene",
|
|
2271
|
+
label: "场景图",
|
|
2272
|
+
description: "真实生活或使用场景",
|
|
2273
|
+
count: 2,
|
|
2274
|
+
enabled: true,
|
|
2275
|
+
refRole: "product"
|
|
2276
|
+
},
|
|
2277
|
+
{
|
|
2278
|
+
key: "detail",
|
|
2279
|
+
label: "细节图",
|
|
2280
|
+
description: "材质、结构或工艺特写",
|
|
2281
|
+
count: 1,
|
|
2282
|
+
enabled: true,
|
|
2283
|
+
refRole: "detail"
|
|
2284
|
+
},
|
|
2285
|
+
{
|
|
2286
|
+
key: "spec",
|
|
2287
|
+
label: "规格图",
|
|
2288
|
+
description: "尺寸、容量或参数展示",
|
|
2289
|
+
count: 1,
|
|
2290
|
+
enabled: false,
|
|
2291
|
+
refRole: "product"
|
|
2292
|
+
},
|
|
2293
|
+
{
|
|
2294
|
+
key: "model",
|
|
2295
|
+
label: "使用图",
|
|
2296
|
+
description: "人物上手或穿戴效果",
|
|
2297
|
+
count: 1,
|
|
2298
|
+
enabled: false,
|
|
2299
|
+
refRole: "product"
|
|
2300
|
+
}
|
|
2301
|
+
];
|
|
2038
2302
|
/** Legacy pixel sizes saved by older versions, mapped onto the current
|
|
2039
2303
|
* aspect-ratio vocabulary so restoring old history entries still works. */
|
|
2040
2304
|
const LEGACY_SIZE_TO_RATIO = {
|
|
@@ -2064,6 +2328,37 @@ window.__ModuleLoader__.load({
|
|
|
2064
2328
|
function clampPreviewScale(scale) {
|
|
2065
2329
|
return Math.min(PREVIEW_SCALE_MAX, Math.max(PREVIEW_SCALE_MIN, scale));
|
|
2066
2330
|
}
|
|
2331
|
+
/** Keep the image canvas preference across panel remounts without making it
|
|
2332
|
+
* part of the host settings document. */
|
|
2333
|
+
function readConfigCollapsed() {
|
|
2334
|
+
try {
|
|
2335
|
+
return window.localStorage.getItem(CONFIG_COLLAPSED_STORAGE_KEY) === "true";
|
|
2336
|
+
} catch {
|
|
2337
|
+
return false;
|
|
2338
|
+
}
|
|
2339
|
+
}
|
|
2340
|
+
const CHAT_COLLAPSED_STORAGE_KEY = "dsh-imagegen:chat-collapsed";
|
|
2341
|
+
const CONFIG_WIDTH_STORAGE_KEY = "dsh-imagegen:config-width";
|
|
2342
|
+
const CONFIG_WIDTH_MIN = 260;
|
|
2343
|
+
const CONFIG_WIDTH_MAX = 480;
|
|
2344
|
+
const CONFIG_WIDTH_DEFAULT = 300;
|
|
2345
|
+
/** The chat pane starts collapsed unless the user explicitly opened it. */
|
|
2346
|
+
function readChatOpen() {
|
|
2347
|
+
try {
|
|
2348
|
+
return window.localStorage.getItem(CHAT_COLLAPSED_STORAGE_KEY) === "open";
|
|
2349
|
+
} catch {
|
|
2350
|
+
return false;
|
|
2351
|
+
}
|
|
2352
|
+
}
|
|
2353
|
+
function readConfigWidth() {
|
|
2354
|
+
try {
|
|
2355
|
+
const raw = window.localStorage.getItem(CONFIG_WIDTH_STORAGE_KEY);
|
|
2356
|
+
if (raw === null) return CONFIG_WIDTH_DEFAULT;
|
|
2357
|
+
const value = Number(raw);
|
|
2358
|
+
if (Number.isFinite(value) && value > 0) return Math.min(CONFIG_WIDTH_MAX, Math.max(CONFIG_WIDTH_MIN, Math.round(value)));
|
|
2359
|
+
} catch {}
|
|
2360
|
+
return CONFIG_WIDTH_DEFAULT;
|
|
2361
|
+
}
|
|
2067
2362
|
/** Read the current config from the settings scope snapshot. */
|
|
2068
2363
|
function useConfig(scope) {
|
|
2069
2364
|
const [value, setValue] = (0, react.useState)(scope.getSnapshot().value);
|
|
@@ -2133,6 +2428,62 @@ window.__ModuleLoader__.load({
|
|
|
2133
2428
|
for (let offset = 0; offset < binary.length; offset += 1) bytes[offset] = binary.charCodeAt(offset);
|
|
2134
2429
|
return new File([bytes], `dsh-image-${index + 1}.${extensionOf(image.mime)}`, { type: image.mime });
|
|
2135
2430
|
}
|
|
2431
|
+
/** Decode a data URL into a browser File for the native composer. */
|
|
2432
|
+
function dataUrlToFile(dataUrl, name) {
|
|
2433
|
+
const match = /^data:(image\/(?:png|jpeg|webp|gif));base64,(.*)$/su.exec(dataUrl);
|
|
2434
|
+
if (match === null || match[1] === void 0 || match[2] === void 0) throw new Error("image processing returned an invalid data URL");
|
|
2435
|
+
const binary = atob(match[2]);
|
|
2436
|
+
const bytes = new Uint8Array(binary.length);
|
|
2437
|
+
for (let offset = 0; offset < binary.length; offset += 1) bytes[offset] = binary.charCodeAt(offset);
|
|
2438
|
+
return new File([bytes], name, { type: match[1] });
|
|
2439
|
+
}
|
|
2440
|
+
/** Read intrinsic dimensions without changing the original preview. */
|
|
2441
|
+
function imageDimensions(dataUrl) {
|
|
2442
|
+
return new Promise((resolve, reject) => {
|
|
2443
|
+
const image = new Image();
|
|
2444
|
+
image.onload = () => {
|
|
2445
|
+
const width = image.naturalWidth || image.width;
|
|
2446
|
+
const height = image.naturalHeight || image.height;
|
|
2447
|
+
if (width < 1 || height < 1) reject(/* @__PURE__ */ new Error("image dimensions are unavailable"));
|
|
2448
|
+
else resolve({
|
|
2449
|
+
width,
|
|
2450
|
+
height
|
|
2451
|
+
});
|
|
2452
|
+
};
|
|
2453
|
+
image.onerror = () => reject(/* @__PURE__ */ new Error("image decode failed"));
|
|
2454
|
+
image.src = dataUrl;
|
|
2455
|
+
});
|
|
2456
|
+
}
|
|
2457
|
+
/** Prepare the smaller conversation copy required by the host attachment policy. */
|
|
2458
|
+
async function prepareConversationImage(image, index) {
|
|
2459
|
+
const dataUrl = srcOf(image);
|
|
2460
|
+
const { width, height } = await imageDimensions(dataUrl);
|
|
2461
|
+
const longestSide = Math.max(width, height);
|
|
2462
|
+
if (longestSide <= CONVERSATION_IMAGE_MAX_DIMENSION) return {
|
|
2463
|
+
file: generatedImageToFile(image, index),
|
|
2464
|
+
dataUrl
|
|
2465
|
+
};
|
|
2466
|
+
const scale = CONVERSATION_IMAGE_MAX_DIMENSION / longestSide;
|
|
2467
|
+
const targetWidth = Math.max(1, Math.round(width * scale));
|
|
2468
|
+
const targetHeight = Math.max(1, Math.round(height * scale));
|
|
2469
|
+
const canvas = document.createElement("canvas");
|
|
2470
|
+
canvas.width = targetWidth;
|
|
2471
|
+
canvas.height = targetHeight;
|
|
2472
|
+
const context = canvas.getContext("2d");
|
|
2473
|
+
if (context === null) throw new Error("image resize is unavailable in this browser");
|
|
2474
|
+
const source = await new Promise((resolve, reject) => {
|
|
2475
|
+
const sourceImage = new Image();
|
|
2476
|
+
sourceImage.onload = () => resolve(sourceImage);
|
|
2477
|
+
sourceImage.onerror = () => reject(/* @__PURE__ */ new Error("image decode failed"));
|
|
2478
|
+
sourceImage.src = dataUrl;
|
|
2479
|
+
});
|
|
2480
|
+
context.drawImage(source, 0, 0, targetWidth, targetHeight);
|
|
2481
|
+
const resizedDataUrl = canvas.toDataURL("image/jpeg", CONVERSATION_IMAGE_JPEG_QUALITY);
|
|
2482
|
+
return {
|
|
2483
|
+
dataUrl: resizedDataUrl,
|
|
2484
|
+
file: dataUrlToFile(resizedDataUrl, `dsh-image-${index + 1}.jpg`)
|
|
2485
|
+
};
|
|
2486
|
+
}
|
|
2136
2487
|
/** Follow the native session selection while the image panel stays mounted. */
|
|
2137
2488
|
function useCurrentSessionId(sessions) {
|
|
2138
2489
|
const [sessionId, setSessionId] = (0, react.useState)(() => sessions?.list.getSnapshot().current);
|
|
@@ -2194,14 +2545,45 @@ window.__ModuleLoader__.load({
|
|
|
2194
2545
|
const pad = (n) => String(n).padStart(2, "0");
|
|
2195
2546
|
return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())} ${pad(d.getHours())}:${pad(d.getMinutes())}`;
|
|
2196
2547
|
}
|
|
2548
|
+
function defaultEcommerceDraft() {
|
|
2549
|
+
return {
|
|
2550
|
+
projectId: "",
|
|
2551
|
+
projectName: "",
|
|
2552
|
+
category: "通用商品",
|
|
2553
|
+
platform: "通用",
|
|
2554
|
+
language: "中文",
|
|
2555
|
+
size: "1:1",
|
|
2556
|
+
productName: "",
|
|
2557
|
+
sellingPoints: "",
|
|
2558
|
+
protectedFeatures: "",
|
|
2559
|
+
styleHint: "",
|
|
2560
|
+
slots: PRODUCT_SET_SLOTS.map((slot) => ({ ...slot }))
|
|
2561
|
+
};
|
|
2562
|
+
}
|
|
2563
|
+
function ecommercePrompt(draft, slot) {
|
|
2564
|
+
const points = draft.sellingPoints.trim() || "突出商品真实材质、结构和核心价值";
|
|
2565
|
+
const protectedFeatures = draft.protectedFeatures.trim() || "保持商品颜色、形状、Logo、包装文字和结构真实,不添加不存在的配件";
|
|
2566
|
+
const refClause = slot.refRole !== void 0 && slot.refRole !== "none" ? `本图以上传的${ECOMMERCE_ROLE_PROMPT_LABELS[slot.refRole]}图片为参考,商品与风格必须与参考图保持一致;` : "";
|
|
2567
|
+
return `电商${slot.label}:为${draft.productName.trim() || "该商品"}制作${slot.description}。商品品类:${draft.category};平台:${draft.platform};语言:${draft.language}。商品卖点:${points}。必须遵守:${protectedFeatures}。${refClause}整体要求:商品主体清晰、比例真实、光线自然、画面干净、适合电商发布;${draft.styleHint.trim()}`;
|
|
2568
|
+
}
|
|
2569
|
+
/** Consistency prefix for slots generated after the main image exists. */
|
|
2570
|
+
function withAnchorNote(prompt) {
|
|
2571
|
+
return "商品套图一致性约束:附件是本套商品的主图,图中商品(外形、颜色、材质、Logo、包装文字)必须与附件完全一致,不得重新发明商品。" + prompt;
|
|
2572
|
+
}
|
|
2197
2573
|
function modelsOfHistoryEntry(entry) {
|
|
2198
2574
|
return entry.comparisonModels?.length !== void 0 && entry.comparisonModels.length > 1 ? entry.comparisonModels : [entry.model];
|
|
2199
2575
|
}
|
|
2576
|
+
/** Comparison runs collapse by comparisonId, product sets by projectId. */
|
|
2577
|
+
function historyGroupKey(entry) {
|
|
2578
|
+
if (entry.comparisonId !== void 0) return entry.comparisonId;
|
|
2579
|
+
if (entry.workflow === "ecommerce" && entry.projectId !== void 0) return `project:${entry.projectId}`;
|
|
2580
|
+
return entry.id;
|
|
2581
|
+
}
|
|
2200
2582
|
/** Collapse the per-model history rows that belong to one comparison run. */
|
|
2201
2583
|
function groupHistoryEntries(entries) {
|
|
2202
2584
|
const groups = /* @__PURE__ */ new Map();
|
|
2203
2585
|
for (const entry of entries) {
|
|
2204
|
-
const key = entry
|
|
2586
|
+
const key = historyGroupKey(entry);
|
|
2205
2587
|
const existing = groups.get(key);
|
|
2206
2588
|
if (existing === void 0) groups.set(key, {
|
|
2207
2589
|
key,
|
|
@@ -2235,6 +2617,12 @@ window.__ModuleLoader__.load({
|
|
|
2235
2617
|
const apiKeySet = (config?.channels ?? []).length > 0 ? channelKeySet : legacyKeySet;
|
|
2236
2618
|
const connected = enabled && configured && apiKeySet;
|
|
2237
2619
|
const [tab, setTab] = (0, react.useState)("text");
|
|
2620
|
+
const [workspace, setWorkspace] = (0, react.useState)("normal");
|
|
2621
|
+
/** Switch to a normal-generation tab, leaving any task workspace. */
|
|
2622
|
+
const openTab = (next) => {
|
|
2623
|
+
setWorkspace("normal");
|
|
2624
|
+
setTab(next);
|
|
2625
|
+
};
|
|
2238
2626
|
const [prompt, setPrompt] = (0, react.useState)("");
|
|
2239
2627
|
const [size, setSize] = (0, react.useState)("auto");
|
|
2240
2628
|
const [quality, setQuality] = (0, react.useState)("auto");
|
|
@@ -2247,6 +2635,7 @@ window.__ModuleLoader__.load({
|
|
|
2247
2635
|
const [refImage, setRefImage] = (0, react.useState)(null);
|
|
2248
2636
|
const [images, setImages] = (0, react.useState)([]);
|
|
2249
2637
|
const [addingToConversation, setAddingToConversation] = (0, react.useState)(null);
|
|
2638
|
+
const [galleryConversationAddingId, setGalleryConversationAddingId] = (0, react.useState)(null);
|
|
2250
2639
|
const [conversationMessage, setConversationMessage] = (0, react.useState)(null);
|
|
2251
2640
|
const [error, setError] = (0, react.useState)(null);
|
|
2252
2641
|
const [submitting, setSubmitting] = (0, react.useState)(false);
|
|
@@ -2285,6 +2674,38 @@ window.__ModuleLoader__.load({
|
|
|
2285
2674
|
const [taskTrayOpen, setTaskTrayOpen] = (0, react.useState)(false);
|
|
2286
2675
|
const [comparison, setComparison] = (0, react.useState)(null);
|
|
2287
2676
|
const [comparisonFullscreen, setComparisonFullscreen] = (0, react.useState)(false);
|
|
2677
|
+
const [ecommerce, setEcommerce] = (0, react.useState)(() => {
|
|
2678
|
+
try {
|
|
2679
|
+
const saved = window.localStorage.getItem(ECOMMERCE_DRAFT_STORAGE_KEY);
|
|
2680
|
+
if (saved !== null) {
|
|
2681
|
+
const merged = {
|
|
2682
|
+
...defaultEcommerceDraft(),
|
|
2683
|
+
...JSON.parse(saved)
|
|
2684
|
+
};
|
|
2685
|
+
if (Array.isArray(merged.slots)) merged.slots = merged.slots.map((slot) => ({
|
|
2686
|
+
...slot,
|
|
2687
|
+
refRole: slot.refRole ?? "product"
|
|
2688
|
+
}));
|
|
2689
|
+
return merged;
|
|
2690
|
+
}
|
|
2691
|
+
} catch {}
|
|
2692
|
+
return defaultEcommerceDraft();
|
|
2693
|
+
});
|
|
2694
|
+
const [ecommercePreview, setEcommercePreview] = (0, react.useState)(false);
|
|
2695
|
+
const [ecommerceGenerating, setEcommerceGenerating] = (0, react.useState)(false);
|
|
2696
|
+
const [ecommerceProjectId, setEcommerceProjectId] = (0, react.useState)(null);
|
|
2697
|
+
const [ecommerceAssets, setEcommerceAssets] = (0, react.useState)([]);
|
|
2698
|
+
/** History-restored product set currently shown in the results canvas. */
|
|
2699
|
+
const [ecommerceRestored, setEcommerceRestored] = (0, react.useState)(null);
|
|
2700
|
+
/** Pending main-image anchor: the main image task is in flight; once it
|
|
2701
|
+
* completes, the remaining slots are resubmitted with it as their shared
|
|
2702
|
+
* reference so every image in the set shows the same product. */
|
|
2703
|
+
const [ecommerceAnchor, setEcommerceAnchor] = (0, react.useState)(null);
|
|
2704
|
+
const [ecommerceRefOpen, setEcommerceRefOpen] = (0, react.useState)(false);
|
|
2705
|
+
const [configCollapsed, setConfigCollapsed] = (0, react.useState)(readConfigCollapsed);
|
|
2706
|
+
const [chatOpen, setChatOpen] = (0, react.useState)(readChatOpen);
|
|
2707
|
+
const [configWidth, setConfigWidth] = (0, react.useState)(readConfigWidth);
|
|
2708
|
+
const configAsideRef = (0, react.useRef)(null);
|
|
2288
2709
|
const currentSessionId = useCurrentSessionId(sessions);
|
|
2289
2710
|
const sidebarHistoryHost = useSidebarHistoryHost();
|
|
2290
2711
|
const modeModels = tab === "edit" ? imageModels.filter((candidate) => describeModel(candidate).supportsEdit) : imageModels;
|
|
@@ -2294,6 +2715,57 @@ window.__ModuleLoader__.load({
|
|
|
2294
2715
|
const activeTask = activeTasks.find((task) => task.status === "running") ?? activeTasks[0];
|
|
2295
2716
|
const generating = submitting || activeTasks.length > 0;
|
|
2296
2717
|
const elapsed = useElapsed(generating, activeTask?.startedAt ?? activeTask?.createdAt ?? null);
|
|
2718
|
+
(0, react.useEffect)(() => {
|
|
2719
|
+
try {
|
|
2720
|
+
window.localStorage.setItem(ECOMMERCE_DRAFT_STORAGE_KEY, JSON.stringify(ecommerce));
|
|
2721
|
+
} catch {}
|
|
2722
|
+
}, [ecommerce]);
|
|
2723
|
+
(0, react.useEffect)(() => {
|
|
2724
|
+
try {
|
|
2725
|
+
window.localStorage.setItem(CONFIG_COLLAPSED_STORAGE_KEY, String(configCollapsed));
|
|
2726
|
+
} catch {}
|
|
2727
|
+
}, [configCollapsed]);
|
|
2728
|
+
(0, react.useEffect)(() => {
|
|
2729
|
+
if (chatOpen) delete document.documentElement.dataset.dshImagegenChatCollapsed;
|
|
2730
|
+
else document.documentElement.dataset.dshImagegenChatCollapsed = "1";
|
|
2731
|
+
try {
|
|
2732
|
+
window.localStorage.setItem(CHAT_COLLAPSED_STORAGE_KEY, chatOpen ? "open" : "collapsed");
|
|
2733
|
+
} catch {}
|
|
2734
|
+
}, [chatOpen]);
|
|
2735
|
+
(0, react.useEffect)(() => () => {
|
|
2736
|
+
delete document.documentElement.dataset.dshImagegenChatCollapsed;
|
|
2737
|
+
}, []);
|
|
2738
|
+
(0, react.useEffect)(() => {
|
|
2739
|
+
if (ecommerceAnchor === null) return;
|
|
2740
|
+
const anchor = ecommerceAnchor;
|
|
2741
|
+
const mains = tasks.filter((task) => anchor.mainTaskIds.includes(task.id));
|
|
2742
|
+
if (mains.length === 0) return;
|
|
2743
|
+
if (mains.every((task) => task.status === "failed" || task.status === "cancelled")) {
|
|
2744
|
+
setEcommerceAnchor(null);
|
|
2745
|
+
setError(tt("ecommerce.anchorFailed"));
|
|
2746
|
+
return;
|
|
2747
|
+
}
|
|
2748
|
+
const done = mains.find((task) => task.status === "completed" && task.result !== void 0 && task.result.images.length > 0);
|
|
2749
|
+
if (done === void 0) return;
|
|
2750
|
+
setEcommerceAnchor(null);
|
|
2751
|
+
const dataUrl = srcOf(done.result.images[0]);
|
|
2752
|
+
const requests = anchor.remaining.map((request) => ({
|
|
2753
|
+
...request,
|
|
2754
|
+
mode: "edit",
|
|
2755
|
+
image: dataUrl,
|
|
2756
|
+
refName: "set-main-anchor",
|
|
2757
|
+
prompt: withAnchorNote(request.prompt)
|
|
2758
|
+
}));
|
|
2759
|
+
Promise.all(requests.map((request) => api.taskSubmit(request))).then((submitted) => {
|
|
2760
|
+
setTasks((previous) => [...submitted, ...previous]);
|
|
2761
|
+
}).catch((caught) => {
|
|
2762
|
+
setError(errorMessage(caught));
|
|
2763
|
+
});
|
|
2764
|
+
}, [
|
|
2765
|
+
api,
|
|
2766
|
+
tasks,
|
|
2767
|
+
ecommerceAnchor
|
|
2768
|
+
]);
|
|
2297
2769
|
(0, react.useEffect)(() => {
|
|
2298
2770
|
setModel((previous) => modeModels.includes(previous) ? previous : modeModels[0] ?? "");
|
|
2299
2771
|
setCompareModels((previous) => {
|
|
@@ -2330,7 +2802,7 @@ window.__ModuleLoader__.load({
|
|
|
2330
2802
|
const detail = event.detail;
|
|
2331
2803
|
if (detail === void 0 || currentSessionId === void 0 || detail.sessionId !== currentSessionId) return;
|
|
2332
2804
|
Promise.all(detail.refs.map(attachmentToGenerated)).then((next) => {
|
|
2333
|
-
|
|
2805
|
+
openTab("text");
|
|
2334
2806
|
setImages(next);
|
|
2335
2807
|
setComparison(null);
|
|
2336
2808
|
setViewingHistoryId(null);
|
|
@@ -2464,6 +2936,39 @@ window.__ModuleLoader__.load({
|
|
|
2464
2936
|
};
|
|
2465
2937
|
reader.readAsDataURL(file);
|
|
2466
2938
|
};
|
|
2939
|
+
/** Read uploaded product assets into session-only data-URL chips, capped at
|
|
2940
|
+
* MAX_ECOMMERCE_ASSETS. Each starts as the product-role reference. */
|
|
2941
|
+
const acceptEcommerceFiles = (files) => {
|
|
2942
|
+
if (files === void 0) return;
|
|
2943
|
+
const incoming = Array.from(files).filter((file) => file.type.startsWith("image/") && file.size <= REF_IMAGE_MAX_BYTES);
|
|
2944
|
+
if (incoming.length === 0) {
|
|
2945
|
+
setError(tt("edit.uploadHint"));
|
|
2946
|
+
return;
|
|
2947
|
+
}
|
|
2948
|
+
for (const file of incoming) {
|
|
2949
|
+
const reader = new FileReader();
|
|
2950
|
+
reader.onload = () => {
|
|
2951
|
+
if (typeof reader.result !== "string") return;
|
|
2952
|
+
const dataUrl = reader.result;
|
|
2953
|
+
setEcommerceAssets((previous) => {
|
|
2954
|
+
if (previous.length >= MAX_ECOMMERCE_ASSETS) {
|
|
2955
|
+
setError(tt("ecommerce.assetsFull"));
|
|
2956
|
+
return previous;
|
|
2957
|
+
}
|
|
2958
|
+
return [...previous, {
|
|
2959
|
+
id: newComparisonId(),
|
|
2960
|
+
dataUrl,
|
|
2961
|
+
name: file.name,
|
|
2962
|
+
role: "product"
|
|
2963
|
+
}];
|
|
2964
|
+
});
|
|
2965
|
+
};
|
|
2966
|
+
reader.onerror = () => {
|
|
2967
|
+
setError(tt("edit.uploadHint"));
|
|
2968
|
+
};
|
|
2969
|
+
reader.readAsDataURL(file);
|
|
2970
|
+
}
|
|
2971
|
+
};
|
|
2467
2972
|
/** Run one generation. */
|
|
2468
2973
|
const handleGenerate = async () => {
|
|
2469
2974
|
if (submitting) return;
|
|
@@ -2485,7 +2990,7 @@ window.__ModuleLoader__.load({
|
|
|
2485
2990
|
return;
|
|
2486
2991
|
}
|
|
2487
2992
|
const request = {
|
|
2488
|
-
mode: tab === "
|
|
2993
|
+
mode: tab === "edit" ? "edit" : "text",
|
|
2489
2994
|
model: modeModels.includes(model) ? model : modeModels[0] ?? "",
|
|
2490
2995
|
prompt: promptText,
|
|
2491
2996
|
size,
|
|
@@ -2526,7 +3031,173 @@ window.__ModuleLoader__.load({
|
|
|
2526
3031
|
setSubmitting(false);
|
|
2527
3032
|
}
|
|
2528
3033
|
};
|
|
2529
|
-
|
|
3034
|
+
const handleEcommerceGenerate = async () => {
|
|
3035
|
+
if (ecommerceGenerateDisabled) return;
|
|
3036
|
+
if (!enabled || !configured || !apiKeySet) {
|
|
3037
|
+
openSettingsGuide("generation");
|
|
3038
|
+
return;
|
|
3039
|
+
}
|
|
3040
|
+
const projectId = ecommerce.projectId || newComparisonId();
|
|
3041
|
+
const buildRequest = (slot, index) => {
|
|
3042
|
+
const refRole = slot.refRole ?? "product";
|
|
3043
|
+
const asset = refRole === "none" ? void 0 : ecommerceAssets.find((item) => item.role === refRole);
|
|
3044
|
+
return {
|
|
3045
|
+
mode: asset !== void 0 ? "edit" : "text",
|
|
3046
|
+
model: modeModels.includes(model) ? model : modeModels[0] ?? "",
|
|
3047
|
+
prompt: ecommercePrompt(ecommerce, slot),
|
|
3048
|
+
size: ecommerce.size,
|
|
3049
|
+
quality,
|
|
3050
|
+
n: 1,
|
|
3051
|
+
detail,
|
|
3052
|
+
...defaultChannelId !== void 0 ? { channelId: defaultChannelId } : {},
|
|
3053
|
+
...asset !== void 0 ? {
|
|
3054
|
+
image: asset.dataUrl,
|
|
3055
|
+
refName: asset.name
|
|
3056
|
+
} : {},
|
|
3057
|
+
workflow: "ecommerce",
|
|
3058
|
+
projectId,
|
|
3059
|
+
projectName: ecommerce.projectName.trim() || ecommerce.productName.trim(),
|
|
3060
|
+
slotKey: `${slot.key}-${index + 1}`,
|
|
3061
|
+
slotLabel: slot.label
|
|
3062
|
+
};
|
|
3063
|
+
};
|
|
3064
|
+
const mainSlots = ecommerceSlots.filter((slot) => slot.key === "main");
|
|
3065
|
+
const otherSlots = ecommerceSlots.filter((slot) => slot.key !== "main");
|
|
3066
|
+
const anchorChain = mainSlots.length > 0 && otherSlots.length > 0;
|
|
3067
|
+
const requests = (anchorChain ? mainSlots : ecommerceSlots).flatMap((slot) => Array.from({ length: slot.count }, (_, index) => buildRequest(slot, index)));
|
|
3068
|
+
const remaining = anchorChain ? otherSlots.flatMap((slot) => Array.from({ length: slot.count }, (_, index) => {
|
|
3069
|
+
const { image: _image, refName: _refName, ...rest } = buildRequest(slot, index);
|
|
3070
|
+
return rest;
|
|
3071
|
+
})) : [];
|
|
3072
|
+
setEcommerceGenerating(true);
|
|
3073
|
+
setSubmitting(true);
|
|
3074
|
+
setError(null);
|
|
3075
|
+
setEcommerceProjectId(projectId);
|
|
3076
|
+
setEcommerceRestored(null);
|
|
3077
|
+
setEcommerceAnchor(null);
|
|
3078
|
+
try {
|
|
3079
|
+
const submitted = await Promise.all(requests.map((request) => api.taskSubmit(request)));
|
|
3080
|
+
setTasks((previous) => [...submitted, ...previous]);
|
|
3081
|
+
setEcommercePreview(false);
|
|
3082
|
+
if (anchorChain) setEcommerceAnchor({
|
|
3083
|
+
projectId,
|
|
3084
|
+
mainTaskIds: submitted.map((task) => task.id),
|
|
3085
|
+
remaining
|
|
3086
|
+
});
|
|
3087
|
+
} catch (caught) {
|
|
3088
|
+
setError(errorMessage(caught));
|
|
3089
|
+
} finally {
|
|
3090
|
+
setSubmitting(false);
|
|
3091
|
+
setEcommerceGenerating(false);
|
|
3092
|
+
}
|
|
3093
|
+
};
|
|
3094
|
+
/** Start over with a fresh product draft (the old results stay in history). */
|
|
3095
|
+
const newEcommerceProduct = () => {
|
|
3096
|
+
setEcommerce(defaultEcommerceDraft());
|
|
3097
|
+
setEcommercePreview(false);
|
|
3098
|
+
setEcommerceProjectId(null);
|
|
3099
|
+
setEcommerceRestored(null);
|
|
3100
|
+
setEcommerceAnchor(null);
|
|
3101
|
+
setEcommerceAssets([]);
|
|
3102
|
+
setRefImage(null);
|
|
3103
|
+
setError(null);
|
|
3104
|
+
};
|
|
3105
|
+
/** Re-run every image of one slot with its original request. */
|
|
3106
|
+
const regenerateEcommerceSlot = async (label) => {
|
|
3107
|
+
if (ecommerceGenerating) return;
|
|
3108
|
+
const group = ecommerceMergedItems.filter((item) => item.label === label);
|
|
3109
|
+
if (group.length === 0) return;
|
|
3110
|
+
setEcommerceGenerating(true);
|
|
3111
|
+
setError(null);
|
|
3112
|
+
try {
|
|
3113
|
+
const submitted = await Promise.all(group.map((item) => api.taskSubmit({ ...item.source })));
|
|
3114
|
+
setTasks((previous) => [...submitted, ...previous]);
|
|
3115
|
+
} catch (caught) {
|
|
3116
|
+
setError(errorMessage(caught));
|
|
3117
|
+
} finally {
|
|
3118
|
+
setEcommerceGenerating(false);
|
|
3119
|
+
}
|
|
3120
|
+
};
|
|
3121
|
+
/** Open one persisted product set from history: rebuild the grouped results
|
|
3122
|
+
* canvas from its entries. Reference images are not persisted, so restored
|
|
3123
|
+
* edit-mode slots regenerate as text-to-image. */
|
|
3124
|
+
const viewEcommerceProject = async (group) => {
|
|
3125
|
+
const entry = group.entries[0];
|
|
3126
|
+
if (entry === void 0 || entry.projectId === void 0) return;
|
|
3127
|
+
try {
|
|
3128
|
+
const items = await Promise.all(group.entries.map(async (item) => ({
|
|
3129
|
+
id: item.id,
|
|
3130
|
+
label: item.slotLabel ?? "",
|
|
3131
|
+
slotKey: item.slotKey ?? "",
|
|
3132
|
+
status: "completed",
|
|
3133
|
+
model: item.model,
|
|
3134
|
+
prompt: item.prompt,
|
|
3135
|
+
images: await historyImagesToGenerated(item.images),
|
|
3136
|
+
source: {
|
|
3137
|
+
mode: item.mode === "edit" ? "text" : item.mode,
|
|
3138
|
+
model: item.model,
|
|
3139
|
+
prompt: item.prompt,
|
|
3140
|
+
size: item.size,
|
|
3141
|
+
quality: item.quality,
|
|
3142
|
+
detail: item.detail,
|
|
3143
|
+
n: 1,
|
|
3144
|
+
...item.channelId !== void 0 ? { channelId: item.channelId } : {},
|
|
3145
|
+
workflow: "ecommerce",
|
|
3146
|
+
projectId: entry.projectId,
|
|
3147
|
+
projectName: entry.projectName ?? "",
|
|
3148
|
+
slotKey: item.slotKey ?? "",
|
|
3149
|
+
slotLabel: item.slotLabel ?? ""
|
|
3150
|
+
}
|
|
3151
|
+
})));
|
|
3152
|
+
setWorkspace("ecommerce");
|
|
3153
|
+
setEcommerceRestored({
|
|
3154
|
+
projectId: entry.projectId,
|
|
3155
|
+
projectName: entry.projectName ?? "",
|
|
3156
|
+
items
|
|
3157
|
+
});
|
|
3158
|
+
setEcommerceProjectId(entry.projectId);
|
|
3159
|
+
setEcommercePreview(false);
|
|
3160
|
+
setError(null);
|
|
3161
|
+
setViewingHistoryId(entry.id);
|
|
3162
|
+
setGalleryViewingId(null);
|
|
3163
|
+
} catch (caught) {
|
|
3164
|
+
setError(errorMessage(caught));
|
|
3165
|
+
}
|
|
3166
|
+
};
|
|
3167
|
+
/** Download a JSON manifest describing the whole product set (prompts,
|
|
3168
|
+
* slots and task outcomes) so results stay reproducible outside the panel. */
|
|
3169
|
+
const exportEcommerceManifest = () => {
|
|
3170
|
+
const manifest = {
|
|
3171
|
+
project: {
|
|
3172
|
+
id: ecommerceProjectId,
|
|
3173
|
+
name: ecommerce.projectName || ecommerce.productName,
|
|
3174
|
+
productName: ecommerce.productName,
|
|
3175
|
+
category: ecommerce.category,
|
|
3176
|
+
platform: ecommerce.platform,
|
|
3177
|
+
language: ecommerce.language,
|
|
3178
|
+
size: ecommerce.size,
|
|
3179
|
+
sellingPoints: ecommerce.sellingPoints,
|
|
3180
|
+
protectedFeatures: ecommerce.protectedFeatures,
|
|
3181
|
+
styleHint: ecommerce.styleHint
|
|
3182
|
+
},
|
|
3183
|
+
generatedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
3184
|
+
images: ecommerceMergedItems.map((item) => ({
|
|
3185
|
+
slotKey: item.slotKey,
|
|
3186
|
+
slotLabel: item.label,
|
|
3187
|
+
status: item.status,
|
|
3188
|
+
model: item.model,
|
|
3189
|
+
prompt: item.prompt,
|
|
3190
|
+
error: item.error
|
|
3191
|
+
}))
|
|
3192
|
+
};
|
|
3193
|
+
const blob = new Blob([JSON.stringify(manifest, null, 2)], { type: "application/json" });
|
|
3194
|
+
const url = URL.createObjectURL(blob);
|
|
3195
|
+
const anchor = document.createElement("a");
|
|
3196
|
+
anchor.href = url;
|
|
3197
|
+
anchor.download = `dsh-product-set-${(ecommerce.projectName || ecommerce.productName || "set").replace(/[^\w-]+/g, "-")}.json`;
|
|
3198
|
+
anchor.click();
|
|
3199
|
+
URL.revokeObjectURL(url);
|
|
3200
|
+
};
|
|
2530
3201
|
const openPreview = (previewImages, index) => {
|
|
2531
3202
|
setPreview({
|
|
2532
3203
|
images: previewImages,
|
|
@@ -2583,7 +3254,11 @@ window.__ModuleLoader__.load({
|
|
|
2583
3254
|
const viewHistoryGroup = async (group) => {
|
|
2584
3255
|
const entry = group.entries[0];
|
|
2585
3256
|
if (entry === void 0) return;
|
|
2586
|
-
|
|
3257
|
+
if (entry.workflow === "ecommerce" && entry.projectId !== void 0) {
|
|
3258
|
+
await viewEcommerceProject(group);
|
|
3259
|
+
return;
|
|
3260
|
+
}
|
|
3261
|
+
openTab("text");
|
|
2587
3262
|
try {
|
|
2588
3263
|
setImages(await loadHistoryGroup(group));
|
|
2589
3264
|
setComparison(null);
|
|
@@ -2598,9 +3273,13 @@ window.__ModuleLoader__.load({
|
|
|
2598
3273
|
const restoreHistoryGroup = async (group) => {
|
|
2599
3274
|
const entry = group.entries[0];
|
|
2600
3275
|
if (entry === void 0) return;
|
|
3276
|
+
if (entry.workflow === "ecommerce" && entry.projectId !== void 0) {
|
|
3277
|
+
await viewEcommerceProject(group);
|
|
3278
|
+
return;
|
|
3279
|
+
}
|
|
2601
3280
|
try {
|
|
2602
3281
|
const restored = await loadHistoryGroup(group);
|
|
2603
|
-
|
|
3282
|
+
openTab(entry.mode);
|
|
2604
3283
|
setPrompt(entry.prompt);
|
|
2605
3284
|
setSize(normalizeSize(entry.size));
|
|
2606
3285
|
setQuality(normalizeQuality(entry.quality));
|
|
@@ -2624,14 +3303,40 @@ window.__ModuleLoader__.load({
|
|
|
2624
3303
|
const ids = new Set(group.entries.map((entry) => entry.id));
|
|
2625
3304
|
setHistory((previous) => previous.filter((entry) => !ids.has(entry.id)));
|
|
2626
3305
|
if (viewingHistoryId !== null && ids.has(viewingHistoryId)) setViewingHistoryId(null);
|
|
3306
|
+
if (ecommerceRestored !== null && group.entries.some((entry) => entry.projectId === ecommerceRestored.projectId)) {
|
|
3307
|
+
setEcommerceRestored(null);
|
|
3308
|
+
setEcommerceProjectId(null);
|
|
3309
|
+
setEcommerceAnchor(null);
|
|
3310
|
+
}
|
|
2627
3311
|
try {
|
|
2628
3312
|
let next = history;
|
|
2629
3313
|
for (const id of ids) next = await api.historyRemove(id);
|
|
2630
3314
|
setHistory(next);
|
|
2631
3315
|
} catch {}
|
|
2632
3316
|
};
|
|
3317
|
+
/** Reset the workspace for a fresh image-generation run. */
|
|
3318
|
+
const startNewCreation = () => {
|
|
3319
|
+
openTab("text");
|
|
3320
|
+
setPrompt("");
|
|
3321
|
+
setRefImage(null);
|
|
3322
|
+
setImages([]);
|
|
3323
|
+
setPreview(null);
|
|
3324
|
+
setPreviewScale(1);
|
|
3325
|
+
setPromptCopied(false);
|
|
3326
|
+
setViewingHistoryId(null);
|
|
3327
|
+
setGalleryViewingId(null);
|
|
3328
|
+
setGallerySelecting(false);
|
|
3329
|
+
setSelectedGalleryIds(/* @__PURE__ */ new Set());
|
|
3330
|
+
setComparison(null);
|
|
3331
|
+
setComparisonFullscreen(false);
|
|
3332
|
+
setEcommerceRestored(null);
|
|
3333
|
+
setError(null);
|
|
3334
|
+
setConversationMessage(null);
|
|
3335
|
+
setGalleryMessage(null);
|
|
3336
|
+
};
|
|
2633
3337
|
/** Remove all history entries. */
|
|
2634
3338
|
const clearHistory = async () => {
|
|
3339
|
+
if (!window.confirm(tt("history.clearConfirm"))) return;
|
|
2635
3340
|
setHistory([]);
|
|
2636
3341
|
setViewingHistoryId(null);
|
|
2637
3342
|
try {
|
|
@@ -2643,7 +3348,7 @@ window.__ModuleLoader__.load({
|
|
|
2643
3348
|
* metadata + first image are saved); otherwise the current form state is
|
|
2644
3349
|
* used. */
|
|
2645
3350
|
const addToGallery = async (image, entry) => {
|
|
2646
|
-
if (galleryAdding || tab === "gallery") return;
|
|
3351
|
+
if (galleryAdding || workspace === "normal" && tab === "gallery") return;
|
|
2647
3352
|
const source = entry ?? viewingEntry ?? {
|
|
2648
3353
|
mode: tab === "edit" ? "edit" : "text",
|
|
2649
3354
|
model,
|
|
@@ -2680,7 +3385,7 @@ window.__ModuleLoader__.load({
|
|
|
2680
3385
|
}
|
|
2681
3386
|
};
|
|
2682
3387
|
/** Put a generated image into the native conversation composer. */
|
|
2683
|
-
const addImageToConversation = async (image, index) => {
|
|
3388
|
+
const addImageToConversation = async (image, index, actionKey = index) => {
|
|
2684
3389
|
if (addingToConversation !== null) return;
|
|
2685
3390
|
if (conversation === void 0 || sessions === void 0 || currentSessionId === void 0) {
|
|
2686
3391
|
setError(tt("conversation.noSession"));
|
|
@@ -2691,15 +3396,23 @@ window.__ModuleLoader__.load({
|
|
|
2691
3396
|
setError(tt("conversation.unavailable"));
|
|
2692
3397
|
return;
|
|
2693
3398
|
}
|
|
2694
|
-
setAddingToConversation(
|
|
3399
|
+
setAddingToConversation(actionKey);
|
|
2695
3400
|
let attachments = [];
|
|
2696
3401
|
let added = false;
|
|
2697
3402
|
try {
|
|
2698
|
-
const
|
|
3403
|
+
const prepared = await prepareConversationImage(image, index);
|
|
3404
|
+
const file = prepared.file;
|
|
2699
3405
|
attachments = conversation.createDraftImages([file]);
|
|
2700
3406
|
const input = conversation.input.for(sessionScope);
|
|
2701
3407
|
if (!input.addImages(attachments.map((attachment) => attachment.id))) throw new Error(tt("conversation.busy"));
|
|
2702
3408
|
added = true;
|
|
3409
|
+
try {
|
|
3410
|
+
await api.attachConversationImage(String(currentSessionId), prepared.dataUrl, file.name);
|
|
3411
|
+
} catch (caught) {
|
|
3412
|
+
for (const attachment of attachments) input.removeImage(attachment.id);
|
|
3413
|
+
added = false;
|
|
3414
|
+
throw caught;
|
|
3415
|
+
}
|
|
2703
3416
|
if (input.state.getSnapshot().draft.trim() === "" && prompt.trim() !== "") input.setDraft(prompt.trim());
|
|
2704
3417
|
setConversationMessage(tt("conversation.added"));
|
|
2705
3418
|
window.setTimeout(() => {
|
|
@@ -2724,6 +3437,20 @@ window.__ModuleLoader__.load({
|
|
|
2724
3437
|
setError(errorMessage(caught));
|
|
2725
3438
|
}
|
|
2726
3439
|
};
|
|
3440
|
+
/** Load a persisted gallery image and add it to the current chat draft. */
|
|
3441
|
+
const addGalleryEntryToConversation = async (entry) => {
|
|
3442
|
+
if (galleryConversationAddingId !== null || addingToConversation !== null || entry.images.length === 0) return;
|
|
3443
|
+
setGalleryConversationAddingId(entry.id);
|
|
3444
|
+
try {
|
|
3445
|
+
const [image] = await historyImagesToGenerated(entry.images.slice(0, 1));
|
|
3446
|
+
if (image === void 0) return;
|
|
3447
|
+
await addImageToConversation(image, 0, `gallery:${entry.id}`);
|
|
3448
|
+
} catch (caught) {
|
|
3449
|
+
setError(errorMessage(caught));
|
|
3450
|
+
} finally {
|
|
3451
|
+
setGalleryConversationAddingId(null);
|
|
3452
|
+
}
|
|
3453
|
+
};
|
|
2727
3454
|
/** View a gallery image in the canvas. */
|
|
2728
3455
|
const viewGalleryEntry = async (entry) => {
|
|
2729
3456
|
try {
|
|
@@ -2747,6 +3474,7 @@ window.__ModuleLoader__.load({
|
|
|
2747
3474
|
};
|
|
2748
3475
|
/** Remove every gallery entry. */
|
|
2749
3476
|
const clearGalleryAll = async () => {
|
|
3477
|
+
if (!window.confirm(tt("gallery.clearConfirm"))) return;
|
|
2750
3478
|
setGallery([]);
|
|
2751
3479
|
setGalleryViewingId(null);
|
|
2752
3480
|
try {
|
|
@@ -2815,6 +3543,30 @@ window.__ModuleLoader__.load({
|
|
|
2815
3543
|
});
|
|
2816
3544
|
};
|
|
2817
3545
|
const generateDisabled = submitting || modeModels.length === 0;
|
|
3546
|
+
const ecommerceSlots = ecommerce.slots.filter((slot) => slot.enabled && slot.count > 0);
|
|
3547
|
+
const ecommerceTotal = ecommerceSlots.reduce((total, slot) => total + slot.count, 0);
|
|
3548
|
+
const ecommerceGenerateDisabled = submitting || ecommerceGenerating || ecommerceSlots.length === 0 || ecommerce.productName.trim() === "";
|
|
3549
|
+
const ecommerceFileInput = (0, react.useRef)(null);
|
|
3550
|
+
const ecommerceProjectTasks = ecommerceProjectId === null ? [] : tasks.filter((task) => task.request.workflow === "ecommerce" && task.request.projectId === ecommerceProjectId);
|
|
3551
|
+
const liveSlotKeys = new Set(ecommerceProjectTasks.map((task) => task.request.slotKey ?? task.id));
|
|
3552
|
+
const ecommerceMergedItems = [...ecommerceProjectTasks.map((task) => ({
|
|
3553
|
+
id: task.id,
|
|
3554
|
+
label: task.request.slotLabel ?? "",
|
|
3555
|
+
slotKey: task.request.slotKey ?? "",
|
|
3556
|
+
status: task.status,
|
|
3557
|
+
model: task.request.model,
|
|
3558
|
+
prompt: task.request.prompt,
|
|
3559
|
+
...task.error !== void 0 ? { error: task.error } : {},
|
|
3560
|
+
images: task.result?.images ?? [],
|
|
3561
|
+
source: task.request
|
|
3562
|
+
})), ...ecommerceRestored !== null && ecommerceRestored.projectId === ecommerceProjectId ? ecommerceRestored.items.filter((item) => !liveSlotKeys.has(item.slotKey)) : []];
|
|
3563
|
+
const ecommerceDoneCount = ecommerceMergedItems.filter((item) => item.status === "completed").length;
|
|
3564
|
+
const ecommerceFailedCount = ecommerceMergedItems.filter((item) => item.status === "failed" || item.status === "cancelled").length;
|
|
3565
|
+
const ecommerceResultGroups = [...new Set(ecommerceMergedItems.map((item) => item.label))].filter((label) => label !== "").map((label) => ({
|
|
3566
|
+
label,
|
|
3567
|
+
items: ecommerceMergedItems.filter((item) => item.label === label)
|
|
3568
|
+
}));
|
|
3569
|
+
const conversationBusy = addingToConversation !== null || galleryConversationAddingId !== null;
|
|
2818
3570
|
const viewingEntry = viewingHistoryId === null ? null : history.find((entry) => entry.id === viewingHistoryId) ?? null;
|
|
2819
3571
|
const viewingGalleryEntry = galleryViewingId === null ? null : gallery.find((entry) => entry.id === galleryViewingId) ?? null;
|
|
2820
3572
|
const previewImage = preview === null ? null : preview.images[preview.index] ?? null;
|
|
@@ -2822,6 +3574,30 @@ window.__ModuleLoader__.load({
|
|
|
2822
3574
|
const comparisonResults = comparisonTasks.filter((task) => task.status === "completed" && task.result !== void 0);
|
|
2823
3575
|
const previewFrameScale = Math.max(1, previewScale);
|
|
2824
3576
|
const previewImageScale = previewScale / previewFrameScale;
|
|
3577
|
+
/** Drag the config panel's right edge to resize it (persisted per browser). */
|
|
3578
|
+
const onConfigResizeStart = (event) => {
|
|
3579
|
+
if (event.button !== 0) return;
|
|
3580
|
+
event.preventDefault();
|
|
3581
|
+
const aside = configAsideRef.current;
|
|
3582
|
+
if (aside === null) return;
|
|
3583
|
+
const left = aside.getBoundingClientRect().left;
|
|
3584
|
+
const onMove = (move) => {
|
|
3585
|
+
const width = Math.round(Math.min(CONFIG_WIDTH_MAX, Math.max(CONFIG_WIDTH_MIN, move.clientX - left)));
|
|
3586
|
+
setConfigWidth(width);
|
|
3587
|
+
try {
|
|
3588
|
+
window.localStorage.setItem(CONFIG_WIDTH_STORAGE_KEY, String(width));
|
|
3589
|
+
} catch {}
|
|
3590
|
+
};
|
|
3591
|
+
const onUp = () => {
|
|
3592
|
+
window.removeEventListener("pointermove", onMove);
|
|
3593
|
+
document.documentElement.style.removeProperty("cursor");
|
|
3594
|
+
document.documentElement.style.removeProperty("user-select");
|
|
3595
|
+
};
|
|
3596
|
+
window.addEventListener("pointermove", onMove);
|
|
3597
|
+
window.addEventListener("pointerup", onUp, { once: true });
|
|
3598
|
+
document.documentElement.style.setProperty("cursor", "col-resize");
|
|
3599
|
+
document.documentElement.style.setProperty("user-select", "none");
|
|
3600
|
+
};
|
|
2825
3601
|
const copyPreviewPrompt = async (text) => {
|
|
2826
3602
|
try {
|
|
2827
3603
|
if (navigator.clipboard?.writeText !== void 0) await navigator.clipboard.writeText(text);
|
|
@@ -2846,7 +3622,7 @@ window.__ModuleLoader__.load({
|
|
|
2846
3622
|
};
|
|
2847
3623
|
const addPreviewToEdit = () => {
|
|
2848
3624
|
if (previewImage === null || preview === null) return;
|
|
2849
|
-
|
|
3625
|
+
openTab("edit");
|
|
2850
3626
|
setRefImage({
|
|
2851
3627
|
dataUrl: srcOf(previewImage),
|
|
2852
3628
|
name: `dsh-image-${preview.index + 1}.${extensionOf(previewImage.mime)}`
|
|
@@ -2864,14 +3640,36 @@ window.__ModuleLoader__.load({
|
|
|
2864
3640
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
2865
3641
|
className: panel_module_css_default.historyTitle,
|
|
2866
3642
|
children: tt("history.title")
|
|
2867
|
-
}),
|
|
2868
|
-
|
|
2869
|
-
|
|
2870
|
-
|
|
2871
|
-
|
|
2872
|
-
|
|
2873
|
-
|
|
2874
|
-
|
|
3643
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
3644
|
+
className: panel_module_css_default.historyHeaderActions,
|
|
3645
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
3646
|
+
type: "button",
|
|
3647
|
+
className: panel_module_css_default.historyNew,
|
|
3648
|
+
"data-history-new": "",
|
|
3649
|
+
"aria-label": tt("canvas.new"),
|
|
3650
|
+
title: tt("canvas.newHint"),
|
|
3651
|
+
onClick: startNewCreation,
|
|
3652
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
|
|
3653
|
+
viewBox: "0 0 16 16",
|
|
3654
|
+
width: "15",
|
|
3655
|
+
height: "15",
|
|
3656
|
+
fill: "none",
|
|
3657
|
+
stroke: "currentColor",
|
|
3658
|
+
strokeWidth: "1.7",
|
|
3659
|
+
strokeLinecap: "round",
|
|
3660
|
+
"aria-hidden": "true",
|
|
3661
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { d: "M8 3v10M3 8h10" })
|
|
3662
|
+
})
|
|
3663
|
+
}), history.length > 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
3664
|
+
type: "button",
|
|
3665
|
+
className: panel_module_css_default.historyClear,
|
|
3666
|
+
"data-history-clear": "",
|
|
3667
|
+
onClick: () => {
|
|
3668
|
+
clearHistory();
|
|
3669
|
+
},
|
|
3670
|
+
children: tt("history.clear")
|
|
3671
|
+
}) : null]
|
|
3672
|
+
})]
|
|
2875
3673
|
}),
|
|
2876
3674
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2877
3675
|
className: panel_module_css_default.historyFilters,
|
|
@@ -2947,7 +3745,7 @@ window.__ModuleLoader__.load({
|
|
|
2947
3745
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
2948
3746
|
className: panel_module_css_default.historyMeta,
|
|
2949
3747
|
children: [
|
|
2950
|
-
isComparison ? tt("compare.title") : tt(`mode.${entry.mode === "edit" ? "edit" : "text"}`),
|
|
3748
|
+
isComparison ? tt("compare.title") : entry.workflow === "ecommerce" ? `${tt("ecommerce.short")}${entry.projectName !== void 0 && entry.projectName !== "" ? ` · ${entry.projectName}` : ""}` : tt(`mode.${entry.mode === "edit" ? "edit" : "text"}`),
|
|
2951
3749
|
" · ",
|
|
2952
3750
|
isComparison ? group.models.join(" · ") : entry.model,
|
|
2953
3751
|
" · ",
|
|
@@ -3001,37 +3799,105 @@ window.__ModuleLoader__.load({
|
|
|
3001
3799
|
children: [
|
|
3002
3800
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("header", {
|
|
3003
3801
|
className: panel_module_css_default.panelHeader,
|
|
3004
|
-
children: [
|
|
3005
|
-
|
|
3006
|
-
|
|
3007
|
-
|
|
3008
|
-
|
|
3009
|
-
|
|
3010
|
-
|
|
3011
|
-
|
|
3012
|
-
|
|
3013
|
-
|
|
3014
|
-
|
|
3015
|
-
|
|
3016
|
-
|
|
3017
|
-
|
|
3018
|
-
|
|
3019
|
-
|
|
3020
|
-
|
|
3021
|
-
|
|
3022
|
-
|
|
3023
|
-
|
|
3024
|
-
|
|
3025
|
-
|
|
3026
|
-
|
|
3027
|
-
|
|
3028
|
-
|
|
3029
|
-
|
|
3030
|
-
|
|
3031
|
-
|
|
3032
|
-
|
|
3033
|
-
|
|
3034
|
-
|
|
3802
|
+
children: [
|
|
3803
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
3804
|
+
className: panel_module_css_default.panelHeading,
|
|
3805
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h2", {
|
|
3806
|
+
className: panel_module_css_default.panelTitle,
|
|
3807
|
+
children: tt("panel.title")
|
|
3808
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("a", {
|
|
3809
|
+
className: panel_module_css_default.githubLink,
|
|
3810
|
+
href: "https://github.com/dickpy/dsh-imagegen",
|
|
3811
|
+
target: "_blank",
|
|
3812
|
+
rel: "noreferrer",
|
|
3813
|
+
title: tt("panel.githubTip"),
|
|
3814
|
+
"aria-label": tt("panel.githubTip"),
|
|
3815
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
|
|
3816
|
+
viewBox: "0 0 16 16",
|
|
3817
|
+
width: "15",
|
|
3818
|
+
height: "15",
|
|
3819
|
+
fill: "currentColor",
|
|
3820
|
+
"aria-hidden": "true",
|
|
3821
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { d: "M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.01 8.01 0 0 0 16 8c0-4.42-3.58-8-8-8z" })
|
|
3822
|
+
})
|
|
3823
|
+
})]
|
|
3824
|
+
}),
|
|
3825
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("nav", {
|
|
3826
|
+
className: panel_module_css_default.topNav,
|
|
3827
|
+
role: "tablist",
|
|
3828
|
+
"aria-label": tt("workspace.label"),
|
|
3829
|
+
children: [
|
|
3830
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
3831
|
+
type: "button",
|
|
3832
|
+
className: panel_module_css_default.topNavItem,
|
|
3833
|
+
"data-active": workspace === "normal" && tab !== "gallery" ? "" : void 0,
|
|
3834
|
+
onClick: () => {
|
|
3835
|
+
if (workspace !== "normal" || tab === "gallery") openTab("text");
|
|
3836
|
+
},
|
|
3837
|
+
children: tt("workspace.normal")
|
|
3838
|
+
}),
|
|
3839
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
3840
|
+
type: "button",
|
|
3841
|
+
className: panel_module_css_default.topNavItem,
|
|
3842
|
+
"data-active": workspace === "normal" && tab === "gallery" ? "" : void 0,
|
|
3843
|
+
onClick: () => {
|
|
3844
|
+
openTab("gallery");
|
|
3845
|
+
},
|
|
3846
|
+
children: tt("gallery.title")
|
|
3847
|
+
}),
|
|
3848
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
3849
|
+
className: panel_module_css_default.topNavDivider,
|
|
3850
|
+
"aria-hidden": "true"
|
|
3851
|
+
}),
|
|
3852
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
3853
|
+
type: "button",
|
|
3854
|
+
className: panel_module_css_default.topNavItem,
|
|
3855
|
+
"data-active": workspace === "ecommerce" ? "" : void 0,
|
|
3856
|
+
onClick: () => {
|
|
3857
|
+
setWorkspace("ecommerce");
|
|
3858
|
+
},
|
|
3859
|
+
children: [tt("workspace.ecommerce"), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
3860
|
+
className: panel_module_css_default.previewBadge,
|
|
3861
|
+
children: tt("ecommerce.badge")
|
|
3862
|
+
})]
|
|
3863
|
+
})
|
|
3864
|
+
]
|
|
3865
|
+
}),
|
|
3866
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
3867
|
+
className: panel_module_css_default.panelHeaderActions,
|
|
3868
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
3869
|
+
type: "button",
|
|
3870
|
+
className: panel_module_css_default.chatToggle,
|
|
3871
|
+
"data-open": chatOpen ? "true" : "false",
|
|
3872
|
+
"aria-pressed": chatOpen,
|
|
3873
|
+
title: chatOpen ? tt("chat.collapse") : tt("chat.expand"),
|
|
3874
|
+
onClick: () => {
|
|
3875
|
+
setChatOpen((open) => !open);
|
|
3876
|
+
},
|
|
3877
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
|
|
3878
|
+
viewBox: "0 0 16 16",
|
|
3879
|
+
width: "13",
|
|
3880
|
+
height: "13",
|
|
3881
|
+
fill: "none",
|
|
3882
|
+
stroke: "currentColor",
|
|
3883
|
+
strokeWidth: "1.4",
|
|
3884
|
+
strokeLinecap: "round",
|
|
3885
|
+
strokeLinejoin: "round",
|
|
3886
|
+
"aria-hidden": "true",
|
|
3887
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { d: "M2.5 3.5h11v7.5H6.8L3.8 13.6v-2.6H2.5z" })
|
|
3888
|
+
}), tt("chat.toggle")]
|
|
3889
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
3890
|
+
type: "button",
|
|
3891
|
+
className: panel_module_css_default.connectionStatus,
|
|
3892
|
+
"data-connected": connected ? "true" : "false",
|
|
3893
|
+
"aria-label": tt(connected ? "connection.connected" : "connection.disconnected"),
|
|
3894
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
3895
|
+
className: panel_module_css_default.connectionDot,
|
|
3896
|
+
"aria-hidden": "true"
|
|
3897
|
+
}), tt(connected ? "connection.connected" : "connection.disconnected")]
|
|
3898
|
+
})]
|
|
3899
|
+
})
|
|
3900
|
+
]
|
|
3035
3901
|
}),
|
|
3036
3902
|
update !== null ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
3037
3903
|
className: panel_module_css_default.updateBanner,
|
|
@@ -3063,10 +3929,43 @@ window.__ModuleLoader__.load({
|
|
|
3063
3929
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
3064
3930
|
className: panel_module_css_default.generation,
|
|
3065
3931
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("aside", {
|
|
3932
|
+
ref: configAsideRef,
|
|
3066
3933
|
className: panel_module_css_default.config,
|
|
3067
|
-
|
|
3934
|
+
style: { "--dsh-imagegen-config-width": `${configWidth}px` },
|
|
3935
|
+
"data-collapsed": configCollapsed ? "true" : "false",
|
|
3936
|
+
"data-gallery": workspace === "normal" && tab === "gallery" ? "true" : void 0,
|
|
3068
3937
|
children: [
|
|
3069
|
-
|
|
3938
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
3939
|
+
className: panel_module_css_default.configResizer,
|
|
3940
|
+
title: tt("config.resizeHint"),
|
|
3941
|
+
onPointerDown: onConfigResizeStart
|
|
3942
|
+
}),
|
|
3943
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
3944
|
+
className: panel_module_css_default.configHeader,
|
|
3945
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
3946
|
+
type: "button",
|
|
3947
|
+
className: panel_module_css_default.configToggle,
|
|
3948
|
+
"aria-expanded": !configCollapsed,
|
|
3949
|
+
"aria-label": tt(configCollapsed ? "panel.expandConfig" : "panel.collapseConfig"),
|
|
3950
|
+
title: tt(configCollapsed ? "panel.expandConfig" : "panel.collapseConfig"),
|
|
3951
|
+
onClick: () => {
|
|
3952
|
+
setConfigCollapsed((previous) => !previous);
|
|
3953
|
+
},
|
|
3954
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
|
|
3955
|
+
viewBox: "0 0 16 16",
|
|
3956
|
+
width: "16",
|
|
3957
|
+
height: "16",
|
|
3958
|
+
fill: "none",
|
|
3959
|
+
stroke: "currentColor",
|
|
3960
|
+
strokeWidth: "1.6",
|
|
3961
|
+
strokeLinecap: "round",
|
|
3962
|
+
strokeLinejoin: "round",
|
|
3963
|
+
"aria-hidden": "true",
|
|
3964
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { d: configCollapsed ? "M6 3l5 5-5 5" : "M10 3L5 8l5 5" })
|
|
3965
|
+
})
|
|
3966
|
+
})
|
|
3967
|
+
}),
|
|
3968
|
+
workspace === "normal" && tab === "gallery" ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
3070
3969
|
className: panel_module_css_default.galleryFilters,
|
|
3071
3970
|
children: [
|
|
3072
3971
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
@@ -3141,40 +4040,382 @@ window.__ModuleLoader__.load({
|
|
|
3141
4040
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
3142
4041
|
className: panel_module_css_default.configScroll,
|
|
3143
4042
|
children: [
|
|
3144
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("section", {
|
|
4043
|
+
workspace === "normal" && tab !== "gallery" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("section", {
|
|
3145
4044
|
className: panel_module_css_default.card,
|
|
3146
4045
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
3147
4046
|
className: panel_module_css_default.modeRow,
|
|
3148
4047
|
role: "tablist",
|
|
3149
4048
|
"aria-label": tt("panel.title"),
|
|
3150
|
-
children: [
|
|
3151
|
-
|
|
3152
|
-
|
|
3153
|
-
|
|
3154
|
-
|
|
3155
|
-
|
|
3156
|
-
|
|
3157
|
-
|
|
3158
|
-
|
|
3159
|
-
|
|
3160
|
-
|
|
3161
|
-
|
|
3162
|
-
|
|
3163
|
-
|
|
3164
|
-
|
|
3165
|
-
children: tt("mode.edit")
|
|
3166
|
-
}),
|
|
3167
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Pill, {
|
|
3168
|
-
active: tab === "gallery",
|
|
3169
|
-
onClick: () => {
|
|
3170
|
-
setTab("gallery");
|
|
3171
|
-
},
|
|
3172
|
-
className: panel_module_css_default.modePill,
|
|
3173
|
-
children: tt("gallery.title")
|
|
3174
|
-
})
|
|
3175
|
-
]
|
|
4049
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Pill, {
|
|
4050
|
+
active: tab === "text",
|
|
4051
|
+
onClick: () => {
|
|
4052
|
+
setTab("text");
|
|
4053
|
+
},
|
|
4054
|
+
className: panel_module_css_default.modePill,
|
|
4055
|
+
children: tt("mode.text")
|
|
4056
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Pill, {
|
|
4057
|
+
active: tab === "edit",
|
|
4058
|
+
onClick: () => {
|
|
4059
|
+
setTab("edit");
|
|
4060
|
+
},
|
|
4061
|
+
className: panel_module_css_default.modePill,
|
|
4062
|
+
children: tt("mode.edit")
|
|
4063
|
+
})]
|
|
3176
4064
|
})
|
|
3177
|
-
}),
|
|
4065
|
+
}) : null,
|
|
4066
|
+
workspace === "ecommerce" ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
4067
|
+
className: panel_module_css_default.ecommerceWorkspace,
|
|
4068
|
+
"data-ecommerce-workspace": "",
|
|
4069
|
+
children: [
|
|
4070
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
4071
|
+
className: panel_module_css_default.ecommerceSection,
|
|
4072
|
+
children: [
|
|
4073
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", { children: tt("ecommerce.product") }),
|
|
4074
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
|
|
4075
|
+
className: panel_module_css_default.ecommerceField,
|
|
4076
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
4077
|
+
className: panel_module_css_default.ecommerceFieldLabel,
|
|
4078
|
+
children: tt("ecommerce.productName")
|
|
4079
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
4080
|
+
value: ecommerce.productName,
|
|
4081
|
+
placeholder: tt("ecommerce.productName"),
|
|
4082
|
+
onChange: (event) => setEcommerce((previous) => ({
|
|
4083
|
+
...previous,
|
|
4084
|
+
productName: event.target.value
|
|
4085
|
+
}))
|
|
4086
|
+
})]
|
|
4087
|
+
}),
|
|
4088
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
|
|
4089
|
+
className: panel_module_css_default.ecommerceField,
|
|
4090
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
4091
|
+
className: panel_module_css_default.ecommerceFieldLabel,
|
|
4092
|
+
children: tt("ecommerce.projectName")
|
|
4093
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
4094
|
+
value: ecommerce.projectName,
|
|
4095
|
+
placeholder: tt("ecommerce.projectName"),
|
|
4096
|
+
onChange: (event) => setEcommerce((previous) => ({
|
|
4097
|
+
...previous,
|
|
4098
|
+
projectName: event.target.value
|
|
4099
|
+
}))
|
|
4100
|
+
})]
|
|
4101
|
+
}),
|
|
4102
|
+
ecommerceAssets.length === 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
4103
|
+
type: "button",
|
|
4104
|
+
className: panel_module_css_default.ecommerceUploadHero,
|
|
4105
|
+
"data-ecommerce-upload": "",
|
|
4106
|
+
onClick: () => {
|
|
4107
|
+
ecommerceFileInput.current?.click();
|
|
4108
|
+
},
|
|
4109
|
+
onDragOver: (event) => {
|
|
4110
|
+
event.preventDefault();
|
|
4111
|
+
},
|
|
4112
|
+
onDrop: (event) => {
|
|
4113
|
+
event.preventDefault();
|
|
4114
|
+
acceptEcommerceFiles(event.dataTransfer.files ?? void 0);
|
|
4115
|
+
},
|
|
4116
|
+
children: [
|
|
4117
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("svg", {
|
|
4118
|
+
viewBox: "0 0 16 16",
|
|
4119
|
+
width: "15",
|
|
4120
|
+
height: "15",
|
|
4121
|
+
fill: "none",
|
|
4122
|
+
stroke: "currentColor",
|
|
4123
|
+
strokeWidth: "1.3",
|
|
4124
|
+
strokeLinecap: "round",
|
|
4125
|
+
strokeLinejoin: "round",
|
|
4126
|
+
"aria-hidden": "true",
|
|
4127
|
+
children: [
|
|
4128
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { d: "M8 10V3.5" }),
|
|
4129
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { d: "M5.5 5.5L8 3l2.5 2.5" }),
|
|
4130
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { d: "M3 9.5V12a1.5 1.5 0 001.5 1.5h7A1.5 1.5 0 0013 12V9.5" })
|
|
4131
|
+
]
|
|
4132
|
+
}),
|
|
4133
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: tt("ecommerce.uploadRef") }),
|
|
4134
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: tt("edit.uploadHint") })
|
|
4135
|
+
]
|
|
4136
|
+
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
4137
|
+
className: panel_module_css_default.ecommerceAssets,
|
|
4138
|
+
children: [ecommerceAssets.map((asset) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
4139
|
+
className: panel_module_css_default.ecommerceAsset,
|
|
4140
|
+
"data-ecommerce-asset": "",
|
|
4141
|
+
children: [
|
|
4142
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("img", {
|
|
4143
|
+
src: asset.dataUrl,
|
|
4144
|
+
alt: asset.name
|
|
4145
|
+
}),
|
|
4146
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("select", {
|
|
4147
|
+
value: asset.role,
|
|
4148
|
+
"data-ecommerce-asset-role": "",
|
|
4149
|
+
"aria-label": tt("ecommerce.refSelect"),
|
|
4150
|
+
onChange: (event) => setEcommerceAssets((previous) => previous.map((item) => item.id === asset.id ? {
|
|
4151
|
+
...item,
|
|
4152
|
+
role: event.target.value
|
|
4153
|
+
} : item)),
|
|
4154
|
+
children: ECOMMERCE_ASSET_ROLES.map((role) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
|
|
4155
|
+
value: role,
|
|
4156
|
+
children: tt(`ecommerce.role.${role}`)
|
|
4157
|
+
}, role))
|
|
4158
|
+
}),
|
|
4159
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
4160
|
+
type: "button",
|
|
4161
|
+
"aria-label": tt("edit.remove"),
|
|
4162
|
+
onClick: () => {
|
|
4163
|
+
setEcommerceAssets((previous) => previous.filter((item) => item.id !== asset.id));
|
|
4164
|
+
},
|
|
4165
|
+
children: "×"
|
|
4166
|
+
})
|
|
4167
|
+
]
|
|
4168
|
+
}, asset.id)), ecommerceAssets.length < MAX_ECOMMERCE_ASSETS ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
4169
|
+
type: "button",
|
|
4170
|
+
className: panel_module_css_default.ecommerceAssetAdd,
|
|
4171
|
+
"data-ecommerce-upload": "",
|
|
4172
|
+
title: tt("ecommerce.uploadRef"),
|
|
4173
|
+
onClick: () => {
|
|
4174
|
+
ecommerceFileInput.current?.click();
|
|
4175
|
+
},
|
|
4176
|
+
onDragOver: (event) => {
|
|
4177
|
+
event.preventDefault();
|
|
4178
|
+
},
|
|
4179
|
+
onDrop: (event) => {
|
|
4180
|
+
event.preventDefault();
|
|
4181
|
+
acceptEcommerceFiles(event.dataTransfer.files ?? void 0);
|
|
4182
|
+
},
|
|
4183
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
4184
|
+
"aria-hidden": "true",
|
|
4185
|
+
children: "+"
|
|
4186
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: tt("ecommerce.uploadShort") })]
|
|
4187
|
+
}) : null]
|
|
4188
|
+
})
|
|
4189
|
+
]
|
|
4190
|
+
}),
|
|
4191
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
4192
|
+
className: panel_module_css_default.ecommerceSection,
|
|
4193
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", { children: tt("ecommerce.params") }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
4194
|
+
className: panel_module_css_default.ecommerceParamGrid,
|
|
4195
|
+
children: [
|
|
4196
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
|
|
4197
|
+
className: panel_module_css_default.ecommerceField,
|
|
4198
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
4199
|
+
className: panel_module_css_default.ecommerceFieldLabel,
|
|
4200
|
+
children: tt("ecommerce.platformLabel")
|
|
4201
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("select", {
|
|
4202
|
+
value: ecommerce.platform,
|
|
4203
|
+
onChange: (event) => setEcommerce((previous) => ({
|
|
4204
|
+
...previous,
|
|
4205
|
+
platform: event.target.value
|
|
4206
|
+
})),
|
|
4207
|
+
children: [
|
|
4208
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", { children: "通用" }),
|
|
4209
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", { children: "淘宝 / 京东" }),
|
|
4210
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", { children: "Amazon" })
|
|
4211
|
+
]
|
|
4212
|
+
})]
|
|
4213
|
+
}),
|
|
4214
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
|
|
4215
|
+
className: panel_module_css_default.ecommerceField,
|
|
4216
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
4217
|
+
className: panel_module_css_default.ecommerceFieldLabel,
|
|
4218
|
+
children: tt("ecommerce.languageLabel")
|
|
4219
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("select", {
|
|
4220
|
+
value: ecommerce.language,
|
|
4221
|
+
onChange: (event) => setEcommerce((previous) => ({
|
|
4222
|
+
...previous,
|
|
4223
|
+
language: event.target.value
|
|
4224
|
+
})),
|
|
4225
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", { children: "中文" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", { children: "English" })]
|
|
4226
|
+
})]
|
|
4227
|
+
}),
|
|
4228
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
|
|
4229
|
+
className: panel_module_css_default.ecommerceField,
|
|
4230
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
4231
|
+
className: panel_module_css_default.ecommerceFieldLabel,
|
|
4232
|
+
children: tt("ecommerce.ratioLabel")
|
|
4233
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("select", {
|
|
4234
|
+
value: ecommerce.size,
|
|
4235
|
+
onChange: (event) => setEcommerce((previous) => ({
|
|
4236
|
+
...previous,
|
|
4237
|
+
size: event.target.value
|
|
4238
|
+
})),
|
|
4239
|
+
children: SIZES.filter((size) => size !== "auto").map((size) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", { children: size }, size))
|
|
4240
|
+
})]
|
|
4241
|
+
}),
|
|
4242
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
|
|
4243
|
+
className: panel_module_css_default.ecommerceField,
|
|
4244
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
4245
|
+
className: panel_module_css_default.ecommerceFieldLabel,
|
|
4246
|
+
children: tt("ecommerce.categoryLabel")
|
|
4247
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("select", {
|
|
4248
|
+
value: ecommerce.category,
|
|
4249
|
+
onChange: (event) => setEcommerce((previous) => ({
|
|
4250
|
+
...previous,
|
|
4251
|
+
category: event.target.value
|
|
4252
|
+
})),
|
|
4253
|
+
children: [
|
|
4254
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", { children: "通用商品" }),
|
|
4255
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", { children: "食品饮料" }),
|
|
4256
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", { children: "美妆个护" }),
|
|
4257
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", { children: "服装配饰" }),
|
|
4258
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", { children: "家居用品" }),
|
|
4259
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", { children: "3C 数码" })
|
|
4260
|
+
]
|
|
4261
|
+
})]
|
|
4262
|
+
})
|
|
4263
|
+
]
|
|
4264
|
+
})]
|
|
4265
|
+
}),
|
|
4266
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
4267
|
+
className: panel_module_css_default.ecommerceSection,
|
|
4268
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", { children: tt("ecommerce.sellingTitle") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("textarea", {
|
|
4269
|
+
value: ecommerce.sellingPoints,
|
|
4270
|
+
placeholder: tt("ecommerce.sellingPoints"),
|
|
4271
|
+
onChange: (event) => setEcommerce((previous) => ({
|
|
4272
|
+
...previous,
|
|
4273
|
+
sellingPoints: event.target.value
|
|
4274
|
+
}))
|
|
4275
|
+
})]
|
|
4276
|
+
}),
|
|
4277
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
4278
|
+
className: panel_module_css_default.ecommerceSection,
|
|
4279
|
+
children: [
|
|
4280
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("h3", { children: [tt("ecommerce.setStructure"), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", {
|
|
4281
|
+
className: panel_module_css_default.ecommerceSectionHint,
|
|
4282
|
+
children: tt("ecommerce.multiSelect")
|
|
4283
|
+
})] }),
|
|
4284
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
4285
|
+
className: panel_module_css_default.ecommerceStructureGrid,
|
|
4286
|
+
children: ecommerce.slots.map((slot) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
4287
|
+
type: "button",
|
|
4288
|
+
className: panel_module_css_default.ecommerceSlotCard,
|
|
4289
|
+
"data-active": slot.enabled ? "" : void 0,
|
|
4290
|
+
title: `${slot.label}:${slot.description}`,
|
|
4291
|
+
onClick: () => setEcommerce((previous) => ({
|
|
4292
|
+
...previous,
|
|
4293
|
+
slots: previous.slots.map((item) => item.key === slot.key ? {
|
|
4294
|
+
...item,
|
|
4295
|
+
enabled: !item.enabled
|
|
4296
|
+
} : item)
|
|
4297
|
+
})),
|
|
4298
|
+
children: [slot.label, slot.enabled ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
4299
|
+
className: panel_module_css_default.ecommerceSlotCount,
|
|
4300
|
+
title: tt("ecommerce.countHint"),
|
|
4301
|
+
onClick: (event) => {
|
|
4302
|
+
event.stopPropagation();
|
|
4303
|
+
setEcommerce((previous) => ({
|
|
4304
|
+
...previous,
|
|
4305
|
+
slots: previous.slots.map((item) => item.key === slot.key ? {
|
|
4306
|
+
...item,
|
|
4307
|
+
count: item.count >= 4 ? 1 : item.count + 1
|
|
4308
|
+
} : item)
|
|
4309
|
+
}));
|
|
4310
|
+
},
|
|
4311
|
+
children: slot.count
|
|
4312
|
+
}) : null]
|
|
4313
|
+
}, slot.key))
|
|
4314
|
+
}),
|
|
4315
|
+
ecommerceSlots.length > 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
4316
|
+
type: "button",
|
|
4317
|
+
className: panel_module_css_default.ecommerceAdvancedToggle,
|
|
4318
|
+
"aria-expanded": ecommerceRefOpen,
|
|
4319
|
+
onClick: () => {
|
|
4320
|
+
setEcommerceRefOpen((open) => !open);
|
|
4321
|
+
},
|
|
4322
|
+
children: [tt("ecommerce.refSettings"), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
4323
|
+
className: panel_module_css_default.ecommerceAdvancedChevron,
|
|
4324
|
+
"aria-hidden": "true",
|
|
4325
|
+
children: ecommerceRefOpen ? "⌃" : "⌄"
|
|
4326
|
+
})]
|
|
4327
|
+
}), ecommerceRefOpen ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
4328
|
+
className: panel_module_css_default.ecommerceAdvancedBody,
|
|
4329
|
+
children: ecommerceSlots.map((slot) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
|
|
4330
|
+
className: panel_module_css_default.ecommerceRefRow,
|
|
4331
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: slot.label }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("select", {
|
|
4332
|
+
value: slot.refRole ?? "product",
|
|
4333
|
+
"data-ecommerce-ref-select": "",
|
|
4334
|
+
"aria-label": `${tt("ecommerce.refSelect")} · ${slot.label}`,
|
|
4335
|
+
onChange: (event) => setEcommerce((previous) => ({
|
|
4336
|
+
...previous,
|
|
4337
|
+
slots: previous.slots.map((item) => item.key === slot.key ? {
|
|
4338
|
+
...item,
|
|
4339
|
+
refRole: event.target.value
|
|
4340
|
+
} : item)
|
|
4341
|
+
})),
|
|
4342
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
|
|
4343
|
+
value: "none",
|
|
4344
|
+
children: tt("ecommerce.refNone")
|
|
4345
|
+
}), ECOMMERCE_ASSET_ROLES.map((role) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
|
|
4346
|
+
value: role,
|
|
4347
|
+
children: tt(`ecommerce.role.${role}`)
|
|
4348
|
+
}, role))]
|
|
4349
|
+
})]
|
|
4350
|
+
}, slot.key))
|
|
4351
|
+
}) : null] }) : null
|
|
4352
|
+
]
|
|
4353
|
+
}),
|
|
4354
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
4355
|
+
className: panel_module_css_default.ecommerceSection,
|
|
4356
|
+
children: [
|
|
4357
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", { children: tt("ecommerce.generation") }),
|
|
4358
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("select", {
|
|
4359
|
+
value: modeModels.includes(model) ? model : modeModels[0] ?? "",
|
|
4360
|
+
"aria-label": tt("model.label"),
|
|
4361
|
+
onChange: (event) => setModel(event.target.value),
|
|
4362
|
+
children: modeModels.map((option) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
|
|
4363
|
+
value: option,
|
|
4364
|
+
children: option
|
|
4365
|
+
}, option))
|
|
4366
|
+
}),
|
|
4367
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
4368
|
+
className: panel_module_css_default.optionRow,
|
|
4369
|
+
children: QUALITIES.map((option) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Pill, {
|
|
4370
|
+
active: quality === option,
|
|
4371
|
+
onClick: () => {
|
|
4372
|
+
setQuality(option);
|
|
4373
|
+
},
|
|
4374
|
+
className: panel_module_css_default.optionPill,
|
|
4375
|
+
children: tt(`quality.${option}`)
|
|
4376
|
+
}, option))
|
|
4377
|
+
})
|
|
4378
|
+
]
|
|
4379
|
+
}),
|
|
4380
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
4381
|
+
className: panel_module_css_default.ecommerceSection,
|
|
4382
|
+
children: [
|
|
4383
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", { children: tt("ecommerce.styleTitle") }),
|
|
4384
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("textarea", {
|
|
4385
|
+
value: ecommerce.styleHint,
|
|
4386
|
+
placeholder: tt("ecommerce.styleHint"),
|
|
4387
|
+
onChange: (event) => setEcommerce((previous) => ({
|
|
4388
|
+
...previous,
|
|
4389
|
+
styleHint: event.target.value
|
|
4390
|
+
}))
|
|
4391
|
+
}),
|
|
4392
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
4393
|
+
className: panel_module_css_default.ecommerceFieldLabel,
|
|
4394
|
+
children: tt("ecommerce.protectedLabel")
|
|
4395
|
+
}),
|
|
4396
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("textarea", {
|
|
4397
|
+
value: ecommerce.protectedFeatures,
|
|
4398
|
+
placeholder: tt("ecommerce.protectedFeatures"),
|
|
4399
|
+
onChange: (event) => setEcommerce((previous) => ({
|
|
4400
|
+
...previous,
|
|
4401
|
+
protectedFeatures: event.target.value
|
|
4402
|
+
}))
|
|
4403
|
+
})
|
|
4404
|
+
]
|
|
4405
|
+
}),
|
|
4406
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
4407
|
+
ref: ecommerceFileInput,
|
|
4408
|
+
type: "file",
|
|
4409
|
+
multiple: true,
|
|
4410
|
+
accept: "image/png,image/jpeg,image/webp,image/gif",
|
|
4411
|
+
className: panel_module_css_default.hiddenFile,
|
|
4412
|
+
onChange: (event) => {
|
|
4413
|
+
acceptEcommerceFiles(event.target.files ?? void 0);
|
|
4414
|
+
event.target.value = "";
|
|
4415
|
+
}
|
|
4416
|
+
})
|
|
4417
|
+
]
|
|
4418
|
+
}) : null,
|
|
3178
4419
|
tab === "edit" ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
3179
4420
|
className: panel_module_css_default.card,
|
|
3180
4421
|
children: [refImage === null ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
@@ -3251,7 +4492,7 @@ window.__ModuleLoader__.load({
|
|
|
3251
4492
|
}
|
|
3252
4493
|
})]
|
|
3253
4494
|
}) : null,
|
|
3254
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
4495
|
+
workspace === "normal" ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
3255
4496
|
className: panel_module_css_default.card,
|
|
3256
4497
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("textarea", {
|
|
3257
4498
|
className: panel_module_css_default.prompt,
|
|
@@ -3299,8 +4540,7 @@ window.__ModuleLoader__.load({
|
|
|
3299
4540
|
})
|
|
3300
4541
|
]
|
|
3301
4542
|
})]
|
|
3302
|
-
}),
|
|
3303
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
4543
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
3304
4544
|
className: panel_module_css_default.card,
|
|
3305
4545
|
children: [
|
|
3306
4546
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
@@ -3384,13 +4624,64 @@ window.__ModuleLoader__.load({
|
|
|
3384
4624
|
]
|
|
3385
4625
|
})
|
|
3386
4626
|
]
|
|
3387
|
-
})
|
|
4627
|
+
})] }) : null
|
|
3388
4628
|
]
|
|
3389
4629
|
}),
|
|
3390
4630
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
3391
4631
|
className: panel_module_css_default.footer,
|
|
3392
4632
|
children: [
|
|
3393
|
-
/* @__PURE__ */ (0, react_jsx_runtime.
|
|
4633
|
+
workspace === "ecommerce" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
4634
|
+
className: panel_module_css_default.ecommerceFooterBody,
|
|
4635
|
+
children: ecommercePreview ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
|
|
4636
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
4637
|
+
className: panel_module_css_default.ecommercePlanMini,
|
|
4638
|
+
children: [
|
|
4639
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: tt("ecommerce.planTitle", { count: ecommerceTotal }) }),
|
|
4640
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
4641
|
+
className: panel_module_css_default.ecommercePlanList,
|
|
4642
|
+
children: ecommerceSlots.map((slot) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: slot.label }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { children: ["×", slot.count] })] }, slot.key))
|
|
4643
|
+
}),
|
|
4644
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
4645
|
+
className: panel_module_css_default.ecommercePlanNote,
|
|
4646
|
+
children: tt("ecommerce.anchorNote")
|
|
4647
|
+
}),
|
|
4648
|
+
ecommerceAssets.length === 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
4649
|
+
className: panel_module_css_default.ecommercePlanWarn,
|
|
4650
|
+
children: tt("ecommerce.noAssetWarn")
|
|
4651
|
+
}) : null
|
|
4652
|
+
]
|
|
4653
|
+
}),
|
|
4654
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
4655
|
+
variant: "primary",
|
|
4656
|
+
size: "md",
|
|
4657
|
+
className: panel_module_css_default.ecommercePrimaryAction,
|
|
4658
|
+
disabled: ecommerceGenerateDisabled,
|
|
4659
|
+
onClick: () => {
|
|
4660
|
+
handleEcommerceGenerate();
|
|
4661
|
+
},
|
|
4662
|
+
children: ecommerceGenerating ? tt("generating") : tt("ecommerce.confirm")
|
|
4663
|
+
}),
|
|
4664
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
4665
|
+
type: "button",
|
|
4666
|
+
className: panel_module_css_default.ecommercePlanBack,
|
|
4667
|
+
onClick: () => {
|
|
4668
|
+
setEcommercePreview(false);
|
|
4669
|
+
},
|
|
4670
|
+
children: tt("gallery.tagsCancel")
|
|
4671
|
+
})
|
|
4672
|
+
] }) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
4673
|
+
className: panel_module_css_default.ecommerceFooterHint,
|
|
4674
|
+
children: ecommerceTotal > 0 ? tt("ecommerce.footerReady", { count: ecommerceTotal }) : tt("ecommerce.footerEmpty")
|
|
4675
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
4676
|
+
variant: "primary",
|
|
4677
|
+
size: "md",
|
|
4678
|
+
className: panel_module_css_default.ecommercePrimaryAction,
|
|
4679
|
+
disabled: ecommerce.productName.trim() === "" || ecommerceTotal === 0,
|
|
4680
|
+
onClick: () => setEcommercePreview(true),
|
|
4681
|
+
children: tt("ecommerce.preview")
|
|
4682
|
+
})] })
|
|
4683
|
+
}) : null,
|
|
4684
|
+
workspace === "ecommerce" ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
|
|
3394
4685
|
className: panel_module_css_default.modelWrap,
|
|
3395
4686
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
3396
4687
|
className: panel_module_css_default.modelLabel,
|
|
@@ -3439,7 +4730,7 @@ window.__ModuleLoader__.load({
|
|
|
3439
4730
|
}) : null]
|
|
3440
4731
|
})]
|
|
3441
4732
|
}),
|
|
3442
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
4733
|
+
workspace !== "ecommerce" ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
3443
4734
|
className: panel_module_css_default.compareControl,
|
|
3444
4735
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
|
|
3445
4736
|
className: panel_module_css_default.compareToggle,
|
|
@@ -3462,8 +4753,8 @@ window.__ModuleLoader__.load({
|
|
|
3462
4753
|
}
|
|
3463
4754
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: option })] }, option))
|
|
3464
4755
|
}) : null]
|
|
3465
|
-
}),
|
|
3466
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
4756
|
+
}) : null,
|
|
4757
|
+
workspace !== "ecommerce" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
3467
4758
|
variant: "primary",
|
|
3468
4759
|
size: "md",
|
|
3469
4760
|
className: panel_module_css_default.generateButton,
|
|
@@ -3475,15 +4766,15 @@ window.__ModuleLoader__.load({
|
|
|
3475
4766
|
className: panel_module_css_default.generateInner,
|
|
3476
4767
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: panel_module_css_default.spinner }), tt("generating")]
|
|
3477
4768
|
}) : tt("generate")
|
|
3478
|
-
})
|
|
4769
|
+
}) : null
|
|
3479
4770
|
]
|
|
3480
4771
|
})
|
|
3481
4772
|
]
|
|
3482
4773
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
3483
4774
|
className: panel_module_css_default.canvas,
|
|
3484
|
-
"data-gallery": tab === "gallery" ? "true" : void 0,
|
|
4775
|
+
"data-gallery": workspace === "normal" && tab === "gallery" ? "true" : void 0,
|
|
3485
4776
|
children: [
|
|
3486
|
-
tab === "gallery" ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
4777
|
+
workspace === "normal" && tab === "gallery" ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
3487
4778
|
className: panel_module_css_default.galleryWorkspace,
|
|
3488
4779
|
children: [
|
|
3489
4780
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("header", {
|
|
@@ -3570,6 +4861,7 @@ window.__ModuleLoader__.load({
|
|
|
3570
4861
|
gallery.length > 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
3571
4862
|
type: "button",
|
|
3572
4863
|
className: panel_module_css_default.galleryClear,
|
|
4864
|
+
"data-gallery-clear": "",
|
|
3573
4865
|
onClick: () => {
|
|
3574
4866
|
clearGalleryAll();
|
|
3575
4867
|
},
|
|
@@ -3664,6 +4956,32 @@ window.__ModuleLoader__.load({
|
|
|
3664
4956
|
children: entry.mode === "edit" ? tt("mode.edit") : tt("mode.text")
|
|
3665
4957
|
})]
|
|
3666
4958
|
}),
|
|
4959
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
4960
|
+
className: panel_module_css_default.galleryCardActions,
|
|
4961
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
4962
|
+
type: "button",
|
|
4963
|
+
className: panel_module_css_default.galleryCardAction,
|
|
4964
|
+
"data-gallery-add-conversation": "",
|
|
4965
|
+
disabled: conversationBusy,
|
|
4966
|
+
title: tt("conversation.addHint"),
|
|
4967
|
+
onClick: (event) => {
|
|
4968
|
+
event.stopPropagation();
|
|
4969
|
+
addGalleryEntryToConversation(entry);
|
|
4970
|
+
},
|
|
4971
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("svg", {
|
|
4972
|
+
viewBox: "0 0 16 16",
|
|
4973
|
+
width: "13",
|
|
4974
|
+
height: "13",
|
|
4975
|
+
fill: "none",
|
|
4976
|
+
stroke: "currentColor",
|
|
4977
|
+
strokeWidth: "1.5",
|
|
4978
|
+
strokeLinecap: "round",
|
|
4979
|
+
strokeLinejoin: "round",
|
|
4980
|
+
"aria-hidden": "true",
|
|
4981
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { d: "M3 4.5h10v7H3z" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { d: "M5.5 2.5h5M8 6v4M6 8h4" })]
|
|
4982
|
+
}), galleryConversationAddingId === entry.id || addingToConversation === `gallery:${entry.id}` ? tt("conversation.adding") : tt("conversation.add")]
|
|
4983
|
+
})
|
|
4984
|
+
}),
|
|
3667
4985
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
3668
4986
|
className: panel_module_css_default.galleryCardFooter,
|
|
3669
4987
|
children: [
|
|
@@ -3749,7 +5067,130 @@ window.__ModuleLoader__.load({
|
|
|
3749
5067
|
})
|
|
3750
5068
|
]
|
|
3751
5069
|
}) : null,
|
|
3752
|
-
|
|
5070
|
+
workspace === "ecommerce" ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
5071
|
+
className: panel_module_css_default.ecommerceResults,
|
|
5072
|
+
"data-ecommerce-results": "",
|
|
5073
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("header", {
|
|
5074
|
+
className: panel_module_css_default.ecommerceResultsHeader,
|
|
5075
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [
|
|
5076
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", { children: tt("ecommerce.results.title") }),
|
|
5077
|
+
ecommerceRestored !== null && ecommerceRestored.projectId === ecommerceProjectId && ecommerceRestored.projectName !== "" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: ecommerceRestored.projectName }) : null,
|
|
5078
|
+
ecommerceMergedItems.length > 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { children: [tt("ecommerce.results.progress", {
|
|
5079
|
+
done: ecommerceDoneCount,
|
|
5080
|
+
total: ecommerceMergedItems.length
|
|
5081
|
+
}), ecommerceFailedCount > 0 ? ` · ${tt("ecommerce.results.failed", { count: ecommerceFailedCount })}` : ""] }) : null,
|
|
5082
|
+
ecommerceAnchor !== null ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
5083
|
+
"data-ecommerce-anchor": "",
|
|
5084
|
+
children: tt("ecommerce.anchorPending")
|
|
5085
|
+
}) : null
|
|
5086
|
+
] }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
5087
|
+
className: panel_module_css_default.ecommerceResultsActions,
|
|
5088
|
+
children: [ecommerceMergedItems.length > 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
5089
|
+
type: "button",
|
|
5090
|
+
className: panel_module_css_default.galleryBulkButton,
|
|
5091
|
+
"data-ecommerce-export": "",
|
|
5092
|
+
onClick: exportEcommerceManifest,
|
|
5093
|
+
children: tt("ecommerce.results.export")
|
|
5094
|
+
}) : null, /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
5095
|
+
type: "button",
|
|
5096
|
+
className: panel_module_css_default.galleryBulkButton,
|
|
5097
|
+
"data-ecommerce-new": "",
|
|
5098
|
+
onClick: newEcommerceProduct,
|
|
5099
|
+
children: tt("ecommerce.results.newProduct")
|
|
5100
|
+
})]
|
|
5101
|
+
})]
|
|
5102
|
+
}), ecommerceMergedItems.length === 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
5103
|
+
className: panel_module_css_default.ecommerceResultsEmpty,
|
|
5104
|
+
children: tt("ecommerce.results.empty")
|
|
5105
|
+
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
5106
|
+
className: panel_module_css_default.ecommerceGroups,
|
|
5107
|
+
children: ecommerceResultGroups.map((group) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
5108
|
+
className: panel_module_css_default.ecommerceGroup,
|
|
5109
|
+
"data-ecommerce-group": group.label,
|
|
5110
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("header", { children: [
|
|
5111
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: group.label }),
|
|
5112
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { children: [
|
|
5113
|
+
group.items.filter((item) => item.status === "completed").length,
|
|
5114
|
+
"/",
|
|
5115
|
+
group.items.length
|
|
5116
|
+
] }),
|
|
5117
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
5118
|
+
type: "button",
|
|
5119
|
+
className: panel_module_css_default.galleryBulkButton,
|
|
5120
|
+
disabled: ecommerceGenerating,
|
|
5121
|
+
onClick: () => {
|
|
5122
|
+
regenerateEcommerceSlot(group.label);
|
|
5123
|
+
},
|
|
5124
|
+
children: tt("ecommerce.results.regenerate")
|
|
5125
|
+
})
|
|
5126
|
+
] }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
5127
|
+
className: panel_module_css_default.ecommerceGroupGrid,
|
|
5128
|
+
children: group.items.map((item) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
5129
|
+
className: panel_module_css_default.ecommerceTaskCard,
|
|
5130
|
+
"data-status": item.status,
|
|
5131
|
+
children: item.status === "completed" && item.images.length > 0 ? item.images.map((image, imageIndex) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("figure", {
|
|
5132
|
+
className: panel_module_css_default.imageCard,
|
|
5133
|
+
role: "button",
|
|
5134
|
+
tabIndex: 0,
|
|
5135
|
+
title: tt("preview.open"),
|
|
5136
|
+
onClick: () => {
|
|
5137
|
+
openPreview(item.images, imageIndex);
|
|
5138
|
+
},
|
|
5139
|
+
children: [
|
|
5140
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("img", {
|
|
5141
|
+
className: panel_module_css_default.image,
|
|
5142
|
+
src: srcOf(image),
|
|
5143
|
+
alt: `${group.label} ${imageIndex + 1}`
|
|
5144
|
+
}),
|
|
5145
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
5146
|
+
className: panel_module_css_default.ecommerceResultBadge,
|
|
5147
|
+
children: group.label
|
|
5148
|
+
}),
|
|
5149
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
5150
|
+
className: panel_module_css_default.ecommerceTaskActions,
|
|
5151
|
+
onClick: (event) => event.stopPropagation(),
|
|
5152
|
+
children: [
|
|
5153
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("a", {
|
|
5154
|
+
className: panel_module_css_default.ecommerceActionChip,
|
|
5155
|
+
href: srcOf(image),
|
|
5156
|
+
download: `product-${item.slotKey || item.id}-${imageIndex + 1}.${extensionOf(image.mime)}`,
|
|
5157
|
+
children: tt("download")
|
|
5158
|
+
}),
|
|
5159
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
5160
|
+
type: "button",
|
|
5161
|
+
className: panel_module_css_default.ecommerceActionChip,
|
|
5162
|
+
disabled: galleryAdding,
|
|
5163
|
+
onClick: () => {
|
|
5164
|
+
addToGallery(image);
|
|
5165
|
+
},
|
|
5166
|
+
children: tt("gallery.add")
|
|
5167
|
+
}),
|
|
5168
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
5169
|
+
type: "button",
|
|
5170
|
+
className: panel_module_css_default.ecommerceActionChip,
|
|
5171
|
+
disabled: conversationBusy,
|
|
5172
|
+
onClick: () => {
|
|
5173
|
+
addImageToConversation(image, imageIndex, `${item.id}:${imageIndex}`);
|
|
5174
|
+
},
|
|
5175
|
+
children: addingToConversation === `${item.id}:${imageIndex}` ? tt("conversation.adding") : tt("conversation.add")
|
|
5176
|
+
})
|
|
5177
|
+
]
|
|
5178
|
+
})
|
|
5179
|
+
]
|
|
5180
|
+
}, imageIndex)) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
5181
|
+
className: panel_module_css_default.ecommerceTaskState,
|
|
5182
|
+
children: [
|
|
5183
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("b", { children: group.label }),
|
|
5184
|
+
tt(`tasks.${item.status}`),
|
|
5185
|
+
item.error !== void 0 ? ` · ${item.error}` : ""
|
|
5186
|
+
]
|
|
5187
|
+
})
|
|
5188
|
+
}, item.id))
|
|
5189
|
+
})]
|
|
5190
|
+
}, group.label))
|
|
5191
|
+
})]
|
|
5192
|
+
}) : null,
|
|
5193
|
+
(workspace === "ecommerce" || tab !== "gallery") && tasks.length > 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
3753
5194
|
className: panel_module_css_default.taskTray,
|
|
3754
5195
|
"data-open": taskTrayOpen ? "true" : "false",
|
|
3755
5196
|
"aria-label": tt("tasks.title"),
|
|
@@ -3815,7 +5256,7 @@ window.__ModuleLoader__.load({
|
|
|
3815
5256
|
}, task.id))
|
|
3816
5257
|
})]
|
|
3817
5258
|
}) : null,
|
|
3818
|
-
tab !== "gallery" && comparison !== null ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
5259
|
+
workspace === "normal" && tab !== "gallery" && comparison !== null ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
3819
5260
|
className: panel_module_css_default.comparisonBoard,
|
|
3820
5261
|
"aria-label": tt("compare.title"),
|
|
3821
5262
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("header", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: tt("compare.title") }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { children: [
|
|
@@ -3850,7 +5291,7 @@ window.__ModuleLoader__.load({
|
|
|
3850
5291
|
})
|
|
3851
5292
|
})]
|
|
3852
5293
|
}) : null,
|
|
3853
|
-
generating && comparison === null ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
5294
|
+
generating && comparison === null && workspace !== "ecommerce" ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
3854
5295
|
className: panel_module_css_default.canvasState,
|
|
3855
5296
|
"data-generation-state": activeTask?.status ?? "submitting",
|
|
3856
5297
|
role: "status",
|
|
@@ -3871,7 +5312,7 @@ window.__ModuleLoader__.load({
|
|
|
3871
5312
|
role: "alert",
|
|
3872
5313
|
children: tt("canvas.error", { error })
|
|
3873
5314
|
}) : null,
|
|
3874
|
-
!generating && !error && images.length === 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
5315
|
+
!generating && !error && images.length === 0 && workspace !== "ecommerce" ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
3875
5316
|
className: panel_module_css_default.canvasState,
|
|
3876
5317
|
children: [
|
|
3877
5318
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
@@ -3913,7 +5354,7 @@ window.__ModuleLoader__.load({
|
|
|
3913
5354
|
})
|
|
3914
5355
|
]
|
|
3915
5356
|
}) : null,
|
|
3916
|
-
!generating && images.length > 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
5357
|
+
!generating && images.length > 0 && workspace !== "ecommerce" ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
3917
5358
|
className: panel_module_css_default.canvasBody,
|
|
3918
5359
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
3919
5360
|
className: panel_module_css_default.canvasMeta,
|
|
@@ -4004,7 +5445,7 @@ window.__ModuleLoader__.load({
|
|
|
4004
5445
|
type: "button",
|
|
4005
5446
|
className: panel_module_css_default.conversationAdd,
|
|
4006
5447
|
title: tt("conversation.add"),
|
|
4007
|
-
disabled:
|
|
5448
|
+
disabled: conversationBusy,
|
|
4008
5449
|
onClick: (event) => {
|
|
4009
5450
|
event.stopPropagation();
|
|
4010
5451
|
addImageToConversation(image, index);
|
|
@@ -4046,7 +5487,7 @@ window.__ModuleLoader__.load({
|
|
|
4046
5487
|
setLibraryOpen(false);
|
|
4047
5488
|
},
|
|
4048
5489
|
onUse: (text) => {
|
|
4049
|
-
|
|
5490
|
+
openTab("text");
|
|
4050
5491
|
setPrompt(text);
|
|
4051
5492
|
setError(null);
|
|
4052
5493
|
setLibraryOpen(false);
|
|
@@ -4321,7 +5762,8 @@ window.__ModuleLoader__.load({
|
|
|
4321
5762
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
4322
5763
|
type: "button",
|
|
4323
5764
|
className: panel_module_css_default.lightboxEdit,
|
|
4324
|
-
disabled:
|
|
5765
|
+
disabled: conversationBusy,
|
|
5766
|
+
title: tt("conversation.addHint"),
|
|
4325
5767
|
onClick: () => {
|
|
4326
5768
|
addImageToConversation(previewImage, preview.index);
|
|
4327
5769
|
},
|
|
@@ -4808,7 +6250,7 @@ window.__ModuleLoader__.load({
|
|
|
4808
6250
|
}
|
|
4809
6251
|
/** Publish a projection of this form, rebuilt whenever the scope or a draft changes. */
|
|
4810
6252
|
bind(project) {
|
|
4811
|
-
const store = (0,
|
|
6253
|
+
const store = (0, _deepseek_ai_dsh_client_store.createSnapshotStore)(project());
|
|
4812
6254
|
this.listeners.add(() => {
|
|
4813
6255
|
store.set(project());
|
|
4814
6256
|
});
|
|
@@ -5024,7 +6466,7 @@ window.__ModuleLoader__.load({
|
|
|
5024
6466
|
}
|
|
5025
6467
|
/** Publish a projection of this form, rebuilt on every scope or draft change. */
|
|
5026
6468
|
bind(project) {
|
|
5027
|
-
const store = (0,
|
|
6469
|
+
const store = (0, _deepseek_ai_dsh_client_store.createSnapshotStore)(project());
|
|
5028
6470
|
this.listeners.add(() => {
|
|
5029
6471
|
store.set(project());
|
|
5030
6472
|
});
|
|
@@ -5200,8 +6642,8 @@ window.__ModuleLoader__.load({
|
|
|
5200
6642
|
return Array.isArray(view?.channels) ? view.channels : [];
|
|
5201
6643
|
}
|
|
5202
6644
|
//#endregion
|
|
5203
|
-
//#region \0dsh-css:
|
|
5204
|
-
const css$1 = ".lDRIuW_card{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);border-radius:12px;list-style:none;transition:border-color .16s,background .16s}.lDRIuW_card:hover{border-color:var(--dsw-alias-label-dimmed)}.lDRIuW_card:has(.lDRIuW_body){background:var(--dsw-alias-bg-layer-2);border-color:var(--dsw-alias-label-dimmed)}.lDRIuW_header{appearance:none;width:100%;font:inherit;color:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:12px;align-items:center;gap:12px;padding:14px 16px;display:flex}.lDRIuW_header:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:-2px}.lDRIuW_headText{flex-direction:column;flex:1;gap:4px;min-width:0;display:flex}.lDRIuW_name{color:var(--dsw-alias-label-primary);font-size:15px;font-weight:600;line-height:1.4}.lDRIuW_description{color:var(--dsw-alias-label-tertiary);font-size:13px;line-height:1.5}.lDRIuW_chevron,.lDRIuW_chevronOpen{color:var(--dsw-alias-label-tertiary);flex:none;transition:transform .16s}.lDRIuW_chevronOpen{transform:rotate(180deg)}.lDRIuW_pending{white-space:nowrap;background:var(--dsw-alias-bg-module-platform);color:var(--dsw-alias-label-secondary);border-radius:999px;flex:none;padding:1px 8px;font-size:11px;font-weight:500;line-height:17px}.lDRIuW_body{border-top:1px solid var(--dsw-alias-border-l2);margin:0 16px;padding-bottom:8px}.lDRIuW_versionRow{border-bottom:1px solid var(--dsw-alias-border-l2);justify-content:space-between;align-items:center;gap:12px;padding:12px 0;display:flex}.lDRIuW_versionLabel{color:var(--dsw-alias-label-primary);font-size:13px;font-weight:500;line-height:1.5}.lDRIuW_versionValue{background:var(--dsw-alias-bg-module-platform);color:var(--dsw-alias-label-secondary);font-family:var(--dsw-font-family-mono,monospace);border-radius:999px;padding:1px 8px;font-size:12px;line-height:1.5}.lDRIuW_field{flex-direction:column;gap:6px;padding:12px 0;display:flex}.lDRIuW_field+.lDRIuW_field{border-top:1px solid var(--dsw-alias-border-l2)}.lDRIuW_head{align-items:center;gap:8px;display:flex}.lDRIuW_label{min-width:0;color:var(--dsw-alias-label-primary);flex:1;font-size:13px;font-weight:500;line-height:1.5}.lDRIuW_badges{align-items:center;gap:8px;display:inline-flex}.lDRIuW_badge{white-space:nowrap;background:var(--dsw-alias-bg-module-platform);color:var(--dsw-alias-label-secondary);border-radius:999px;padding:1px 8px;font-size:11px;font-weight:500;line-height:17px}.lDRIuW_reset{font:inherit;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;padding:0;font-size:12px;line-height:1.5}.lDRIuW_reset:hover:not(:disabled){color:var(--dsw-alias-label-primary)}.lDRIuW_reset:disabled{cursor:default;opacity:.5}.lDRIuW_input,.lDRIuW_select{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);height:34px;font:inherit;color:var(--dsw-alias-label-primary);border-radius:8px;outline:none;padding:0 12px;font-size:13px;line-height:1.5}.lDRIuW_input:focus-visible,.lDRIuW_select:focus-visible{border-color:var(--dsw-alias-brand-primary)}.lDRIuW_input:disabled,.lDRIuW_select:disabled{color:var(--dsw-alias-label-tertiary);cursor:default}.lDRIuW_inputInvalid{border:1px solid var(--dsw-alias-label-error);background:var(--dsw-alias-bg-layer-3);height:34px;font:inherit;color:var(--dsw-alias-label-primary);border-radius:8px;outline:none;padding:0 12px;font-size:13px;line-height:1.5}.lDRIuW_textarea,.lDRIuW_textareaInvalid{resize:vertical;background:var(--dsw-alias-bg-layer-3);min-height:70px;font:inherit;color:var(--dsw-alias-label-primary);border-radius:8px;outline:none;padding:8px 12px;font-size:13px;line-height:1.5}.lDRIuW_textarea{border:1px solid var(--dsw-alias-border-l2)}.lDRIuW_textareaInvalid{border:1px solid var(--dsw-alias-label-error)}.lDRIuW_textarea:focus-visible{border-color:var(--dsw-alias-brand-primary)}.lDRIuW_textarea:disabled{color:var(--dsw-alias-label-tertiary);cursor:default}.lDRIuW_hint,.lDRIuW_invalid{margin:0;font-size:12px;line-height:1.5}.lDRIuW_hint{color:var(--dsw-alias-label-tertiary)}.lDRIuW_invalid{color:var(--dsw-alias-label-error)}.lDRIuW_readOnly,.lDRIuW_notExposed{color:var(--dsw-alias-label-tertiary);margin:12px 0 0;font-size:12px;line-height:1.5}.lDRIuW_sectionDivider{background:var(--dsw-alias-border-l2);height:1px;margin:18px 0 14px}.lDRIuW_sectionTitle{color:var(--dsw-alias-label-primary);margin:0;font-size:14px;line-height:1.4}.lDRIuW_sectionHint{color:var(--dsw-alias-label-tertiary);margin:-4px 0 2px;font-size:12px;line-height:1.5}.lDRIuW_modelSection{padding:2px 0 14px}.lDRIuW_sectionHeader{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.lDRIuW_sectionHeader .lDRIuW_sectionHint{max-width:430px}.lDRIuW_modelSummary{flex-wrap:wrap;align-items:center;gap:6px;margin-top:12px;display:flex}.lDRIuW_modelChip{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);max-width:100%;color:var(--dsw-alias-label-primary);font-family:var(--dsw-font-family-mono,monospace);border-radius:6px;align-items:center;gap:5px;padding:3px 5px 3px 8px;font-size:12px;line-height:1.5;display:inline-flex}.lDRIuW_modelChip>span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.lDRIuW_modelChip button{appearance:none;width:18px;height:18px;color:var(--dsw-alias-label-tertiary);font:inherit;cursor:pointer;background:0 0;border:0;border-radius:4px;padding:0;line-height:18px}.lDRIuW_modelChip button:hover:not(:disabled){color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-module-platform)}.lDRIuW_modelChip button:disabled{cursor:default;opacity:.45}.lDRIuW_addModel{appearance:none;border:1px dashed var(--dsw-alias-border-l2);min-height:28px;color:var(--dsw-alias-label-secondary);font:inherit;cursor:pointer;background:0 0;border-radius:6px;padding:0 9px;font-size:12px}.lDRIuW_addModel:hover:not(:disabled){color:var(--dsw-alias-brand-primary);border-color:var(--dsw-alias-brand-primary)}.lDRIuW_addModel:disabled{opacity:.45;cursor:default}.lDRIuW_manualModelRow{gap:8px;margin-top:10px;display:flex}.lDRIuW_manualModelRow .lDRIuW_input{flex:1;min-width:0}.lDRIuW_disclosure{appearance:none;border:0;border-top:1px solid var(--dsw-alias-border-l2);width:100%;color:var(--dsw-alias-label-primary);font:inherit;text-align:left;cursor:pointer;background:0 0;align-items:center;gap:8px;padding:13px 0;font-size:13px;font-weight:500;display:flex}.lDRIuW_disclosure>span:nth-child(2){color:var(--dsw-alias-label-tertiary);margin-left:auto;font-size:12px;font-weight:400}.lDRIuW_disclosure>span:last-child{color:var(--dsw-alias-label-tertiary)}.lDRIuW_disclosure:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:2px}.lDRIuW_optionalContent{padding:0 0 8px}.lDRIuW_inlineDisclosure{appearance:none;color:var(--dsw-alias-label-secondary);font:inherit;cursor:pointer;background:0 0;border:0;align-items:center;gap:6px;margin-top:12px;padding:0;font-size:12px;display:inline-flex}.lDRIuW_inlineDisclosure:hover{color:var(--dsw-alias-label-primary)}.lDRIuW_modelFetchRow{align-items:center;gap:8px;display:flex}.lDRIuW_modelFetch,.lDRIuW_modelChoices{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);min-height:32px;color:var(--dsw-alias-label-secondary);font:inherit;border-radius:7px;font-size:12px}.lDRIuW_modelFetch{cursor:pointer;padding:0 10px}.lDRIuW_modelFetch:hover:not(:disabled){color:var(--dsw-alias-brand-primary);border-color:var(--dsw-alias-brand-primary)}.lDRIuW_modelFetch:disabled{opacity:.5;cursor:default}.lDRIuW_modelChoices{flex:1;min-width:0;padding:0 8px}.lDRIuW_modelCandidateList{flex-wrap:wrap;gap:6px 10px;margin-top:10px;display:flex}.lDRIuW_modelCandidateLabel{width:100%;color:var(--dsw-alias-label-tertiary);font-size:12px}.lDRIuW_modelCandidate{appearance:none;min-width:0;color:var(--dsw-alias-label-secondary);cursor:pointer;background:var(--dsw-alias-bg-layer-3);font-size:12px;line-height:1.5;font:inherit;border:1px solid #0000;border-radius:5px;align-items:center;gap:5px;padding:3px 6px;display:inline-flex}.lDRIuW_modelCandidate input{margin:0}.lDRIuW_modelCandidate[data-selected]{border-color:var(--dsw-alias-border-l2);color:var(--dsw-alias-label-primary)}.lDRIuW_footer{border-top:1px solid var(--dsw-alias-border-l2);justify-content:flex-end;align-items:center;gap:8px;padding:12px 0 4px;display:flex}.lDRIuW_failed{min-width:0;color:var(--dsw-alias-label-error);flex:1;margin:0;font-size:12px;line-height:1.5}.lDRIuW_discard,.lDRIuW_save{appearance:none;font:inherit;cursor:pointer;border:1px solid #0000;border-radius:8px;padding:5px 14px;font-size:13px;line-height:1.5}.lDRIuW_discard{border-color:var(--dsw-alias-border-l2);color:var(--dsw-alias-label-secondary);background:0 0}.lDRIuW_discard:hover:not(:disabled){color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-label-dimmed)}.lDRIuW_save{background:var(--dsw-alias-label-primary);color:var(--dsw-alias-bg-layer-3)}.lDRIuW_discard:disabled,.lDRIuW_save:disabled{opacity:.4;cursor:default}.lDRIuW_discard:focus-visible,.lDRIuW_save:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:1px}@media (prefers-reduced-motion:reduce){.lDRIuW_card,.lDRIuW_chevron,.lDRIuW_chevronOpen{transition:none}}.lDRIuW_channelSection{padding:6px 0 2px}.lDRIuW_channelEmpty{color:var(--dsw-alias-label-tertiary);margin:10px 0 0;font-size:12px;line-height:1.5}.lDRIuW_channelList{flex-direction:column;gap:6px;margin:10px 0 0;padding:0;list-style:none;display:flex}.lDRIuW_channelRow{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);border-radius:10px;align-items:center;gap:10px;padding:8px 10px;display:flex}.lDRIuW_channelRow[data-action]{flex-wrap:wrap}.lDRIuW_channelDotReady,.lDRIuW_channelDotWarn{border-radius:50%;flex:none;width:9px;height:9px}.lDRIuW_channelDotReady{background:var(--dsw-color-success,#2fbf71)}.lDRIuW_channelDotWarn{background:var(--dsw-color-danger,#e5484d)}.lDRIuW_channelMain{appearance:none;min-width:0;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;flex-direction:column;flex:1;gap:3px;padding:0;display:flex}.lDRIuW_channelName{color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:600;line-height:1.4;overflow:hidden}.lDRIuW_channelMeta{flex-wrap:wrap;align-items:center;gap:4px 8px;display:flex}.lDRIuW_channelHost{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:1.5;font-family:var(--dsw-font-family-mono,monospace);text-overflow:ellipsis;white-space:nowrap;max-width:180px;overflow:hidden}.lDRIuW_channelBadge{white-space:nowrap;background:var(--dsw-alias-bg-module-platform);color:var(--dsw-alias-label-secondary);border-radius:999px;padding:0 7px;font-size:11px;font-weight:500;line-height:17px}.lDRIuW_channelBadge[data-warn]{color:var(--dsw-alias-label-error)}.lDRIuW_channelBadge[data-default]{background:var(--dsw-alias-bg-module-poped,var(--dsw-alias-bg-module-platform));color:var(--dsw-alias-brand-primary)}.lDRIuW_channelAction{appearance:none;font:inherit;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:0;border-radius:6px;flex:none;padding:4px 8px;font-size:12px;line-height:1.5}.lDRIuW_channelAction:hover:not(:disabled){color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-module-platform)}.lDRIuW_channelAction[data-danger]{color:var(--dsw-alias-label-error)}.lDRIuW_channelAction:disabled{opacity:.45;cursor:default}.lDRIuW_channelDanger{appearance:none;border:1px solid var(--dsw-alias-label-error);color:var(--dsw-alias-label-error);font:inherit;cursor:pointer;background:0 0;border-radius:6px;flex:none;padding:3px 10px;font-size:12px}.lDRIuW_channelDanger:hover:not(:disabled){background:color-mix(in srgb, var(--dsw-alias-label-error) 12%, transparent)}.lDRIuW_channelDanger:disabled{opacity:.45;cursor:default}.lDRIuW_deleteConfirmText{min-width:0;color:var(--dsw-alias-label-error);flex:1;font-size:12px;line-height:1.5}.lDRIuW_channelAddRow{gap:8px;margin-top:10px;display:flex}.lDRIuW_channelAdd{appearance:none;border:1px dashed var(--dsw-alias-border-l2);min-height:30px;color:var(--dsw-alias-label-secondary);font:inherit;cursor:pointer;background:0 0;border-radius:8px;padding:0 12px;font-size:12px}.lDRIuW_channelAdd:hover:not(:disabled){color:var(--dsw-alias-brand-primary);border-color:var(--dsw-alias-brand-primary)}.lDRIuW_channelAdd:disabled{opacity:.45;cursor:default}.lDRIuW_spacer{flex:1}.lDRIuW_editorBackdrop{z-index:120;background:color-mix(in srgb, var(--dsw-alias-bg-layer-1,#000) 45%, transparent);justify-content:center;align-items:flex-start;padding:9vh 16px 16px;display:flex;position:fixed;inset:0}.lDRIuW_editorPanel{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);border-radius:14px;width:min(560px,100%);max-height:82vh;padding:16px;overflow-y:auto;box-shadow:0 18px 50px #00000059}.lDRIuW_editorHeader{border-bottom:1px solid var(--dsw-alias-border-l2);justify-content:space-between;align-items:flex-start;gap:12px;padding-bottom:10px;display:flex}.lDRIuW_editorClose{appearance:none;width:26px;height:26px;color:var(--dsw-alias-label-tertiary);font:inherit;cursor:pointer;background:0 0;border:0;border-radius:6px;flex:none;font-size:16px;line-height:26px}.lDRIuW_editorClose:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-module-platform)}.lDRIuW_editorField{flex-direction:column;gap:6px;padding:12px 0 0;display:flex}.lDRIuW_editorDivider{background:var(--dsw-alias-border-l2);height:1px;margin:14px 0 4px}.lDRIuW_editorSectionHeader{justify-content:space-between;align-items:center;gap:12px;padding:10px 0 4px;display:flex}.lDRIuW_editorSectionHeader .lDRIuW_label{flex:1}.lDRIuW_editorTools{flex-direction:column;gap:8px;margin-top:10px;display:flex}.lDRIuW_editorFooter{border-top:1px solid var(--dsw-alias-border-l2);align-items:center;gap:8px;padding-top:12px;display:flex}.lDRIuW_detectOk{color:var(--dsw-color-success,var(--dsw-alias-label-secondary));margin:0;font-size:12px;line-height:1.5}.lDRIuW_modelRows{flex-direction:column;gap:8px;margin:8px 0 0;padding:0;list-style:none;display:flex}.lDRIuW_modelRow{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);border-radius:10px;justify-content:space-between;align-items:center;gap:10px;padding:8px 10px;display:flex}.lDRIuW_modelRowInputs{flex:1;align-items:center;gap:6px;min-width:0;display:flex}.lDRIuW_modelRowInputs .lDRIuW_input{flex:1;min-width:0}.lDRIuW_modelArrow{color:var(--dsw-alias-label-tertiary);flex:none;font-size:12px}.lDRIuW_modelRowBadges{flex:none;align-items:center;gap:6px;display:flex}.lDRIuW_modelBadge{white-space:nowrap;background:var(--dsw-alias-bg-module-platform);color:var(--dsw-alias-label-tertiary);border-radius:999px;padding:0 7px;font-size:11px;line-height:17px}.lDRIuW_modelBadge[data-verified]{color:var(--dsw-color-success,var(--dsw-alias-label-secondary))}.lDRIuW_modelBadge[data-warn]{color:var(--dsw-alias-label-error)}.lDRIuW_modelRowRemove{appearance:none;width:20px;height:20px;color:var(--dsw-alias-label-tertiary);font:inherit;cursor:pointer;background:0 0;border:0;border-radius:4px;flex:none;padding:0;line-height:20px}.lDRIuW_modelRowRemove:hover:not(:disabled){color:var(--dsw-alias-label-error);background:var(--dsw-alias-bg-module-platform)}.lDRIuW_modelRowRemove:disabled{opacity:.45;cursor:default}.lDRIuW_modelCandidate>.lDRIuW_modelBadge{flex:none}.lDRIuW_channelControls{position:relative}.lDRIuW_presetInline{z-index:10;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);border-radius:10px;width:min(420px,100vw - 48px);max-height:min(440px,60vh);margin:0;padding:12px;position:absolute;bottom:calc(100% + 8px);left:0;overflow-y:auto;box-shadow:0 12px 30px #0000004d}.lDRIuW_presetInlineHeader{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.lDRIuW_presetList{flex-direction:column;gap:8px;margin-top:12px;display:flex}.lDRIuW_presetRow{appearance:none;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);width:100%;color:inherit;font:inherit;text-align:left;cursor:pointer;border-radius:10px;flex-direction:column;align-items:flex-start;gap:3px;padding:10px 12px;display:flex}.lDRIuW_presetRow:hover:not(:disabled){border-color:var(--dsw-alias-brand-primary)}.lDRIuW_presetRow[data-custom]{border-style:dashed}.lDRIuW_presetRow:disabled{opacity:.5;cursor:default}.lDRIuW_presetName{color:var(--dsw-alias-label-primary);font-size:13px;font-weight:600;line-height:1.4}.lDRIuW_presetMeta{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:1.5;font-family:var(--dsw-font-family-mono,monospace)}.lDRIuW_presetHint{color:var(--dsw-alias-label-secondary);font-size:12px;line-height:1.5}";
|
|
6645
|
+
//#region \0dsh-css:E:\dsh-plugin\src\client\settings-card.module.css.mjs
|
|
6646
|
+
const css$1 = ".i1cc5G_card{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);border-radius:12px;list-style:none;transition:border-color .16s,background .16s}.i1cc5G_card:hover{border-color:var(--dsw-alias-label-dimmed)}.i1cc5G_card:has(.i1cc5G_body){background:var(--dsw-alias-bg-layer-2);border-color:var(--dsw-alias-label-dimmed)}.i1cc5G_header{appearance:none;width:100%;font:inherit;color:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:12px;align-items:center;gap:12px;padding:14px 16px;display:flex}.i1cc5G_header:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:-2px}.i1cc5G_headText{flex-direction:column;flex:1;gap:4px;min-width:0;display:flex}.i1cc5G_name{color:var(--dsw-alias-label-primary);font-size:15px;font-weight:600;line-height:1.4}.i1cc5G_description{color:var(--dsw-alias-label-tertiary);font-size:13px;line-height:1.5}.i1cc5G_chevron,.i1cc5G_chevronOpen{color:var(--dsw-alias-label-tertiary);flex:none;transition:transform .16s}.i1cc5G_chevronOpen{transform:rotate(180deg)}.i1cc5G_pending{white-space:nowrap;background:var(--dsw-alias-bg-module-platform);color:var(--dsw-alias-label-secondary);border-radius:999px;flex:none;padding:1px 8px;font-size:11px;font-weight:500;line-height:17px}.i1cc5G_body{border-top:1px solid var(--dsw-alias-border-l2);margin:0 16px;padding-bottom:8px}.i1cc5G_versionRow{border-bottom:1px solid var(--dsw-alias-border-l2);justify-content:space-between;align-items:center;gap:12px;padding:12px 0;display:flex}.i1cc5G_versionLabel{color:var(--dsw-alias-label-primary);font-size:13px;font-weight:500;line-height:1.5}.i1cc5G_versionValue{background:var(--dsw-alias-bg-module-platform);color:var(--dsw-alias-label-secondary);font-family:var(--dsw-font-family-mono,monospace);border-radius:999px;padding:1px 8px;font-size:12px;line-height:1.5}.i1cc5G_field{flex-direction:column;gap:6px;padding:12px 0;display:flex}.i1cc5G_field+.i1cc5G_field{border-top:1px solid var(--dsw-alias-border-l2)}.i1cc5G_head{align-items:center;gap:8px;display:flex}.i1cc5G_label{min-width:0;color:var(--dsw-alias-label-primary);flex:1;font-size:13px;font-weight:500;line-height:1.5}.i1cc5G_badges{align-items:center;gap:8px;display:inline-flex}.i1cc5G_badge{white-space:nowrap;background:var(--dsw-alias-bg-module-platform);color:var(--dsw-alias-label-secondary);border-radius:999px;padding:1px 8px;font-size:11px;font-weight:500;line-height:17px}.i1cc5G_reset{font:inherit;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;padding:0;font-size:12px;line-height:1.5}.i1cc5G_reset:hover:not(:disabled){color:var(--dsw-alias-label-primary)}.i1cc5G_reset:disabled{cursor:default;opacity:.5}.i1cc5G_input,.i1cc5G_select{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);height:34px;font:inherit;color:var(--dsw-alias-label-primary);border-radius:8px;outline:none;padding:0 12px;font-size:13px;line-height:1.5}.i1cc5G_input:focus-visible,.i1cc5G_select:focus-visible{border-color:var(--dsw-alias-brand-primary)}.i1cc5G_input:disabled,.i1cc5G_select:disabled{color:var(--dsw-alias-label-tertiary);cursor:default}.i1cc5G_inputInvalid{border:1px solid var(--dsw-alias-label-error);background:var(--dsw-alias-bg-layer-3);height:34px;font:inherit;color:var(--dsw-alias-label-primary);border-radius:8px;outline:none;padding:0 12px;font-size:13px;line-height:1.5}.i1cc5G_textarea,.i1cc5G_textareaInvalid{resize:vertical;background:var(--dsw-alias-bg-layer-3);min-height:70px;font:inherit;color:var(--dsw-alias-label-primary);border-radius:8px;outline:none;padding:8px 12px;font-size:13px;line-height:1.5}.i1cc5G_textarea{border:1px solid var(--dsw-alias-border-l2)}.i1cc5G_textareaInvalid{border:1px solid var(--dsw-alias-label-error)}.i1cc5G_textarea:focus-visible{border-color:var(--dsw-alias-brand-primary)}.i1cc5G_textarea:disabled{color:var(--dsw-alias-label-tertiary);cursor:default}.i1cc5G_hint,.i1cc5G_invalid{margin:0;font-size:12px;line-height:1.5}.i1cc5G_hint{color:var(--dsw-alias-label-tertiary)}.i1cc5G_invalid{color:var(--dsw-alias-label-error)}.i1cc5G_readOnly,.i1cc5G_notExposed{color:var(--dsw-alias-label-tertiary);margin:12px 0 0;font-size:12px;line-height:1.5}.i1cc5G_sectionDivider{background:var(--dsw-alias-border-l2);height:1px;margin:18px 0 14px}.i1cc5G_sectionTitle{color:var(--dsw-alias-label-primary);margin:0;font-size:14px;line-height:1.4}.i1cc5G_sectionHint{color:var(--dsw-alias-label-tertiary);margin:-4px 0 2px;font-size:12px;line-height:1.5}.i1cc5G_modelSection{padding:2px 0 14px}.i1cc5G_sectionHeader{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.i1cc5G_sectionHeader .i1cc5G_sectionHint{max-width:430px}.i1cc5G_modelSummary{flex-wrap:wrap;align-items:center;gap:6px;margin-top:12px;display:flex}.i1cc5G_modelChip{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);max-width:100%;color:var(--dsw-alias-label-primary);font-family:var(--dsw-font-family-mono,monospace);border-radius:6px;align-items:center;gap:5px;padding:3px 5px 3px 8px;font-size:12px;line-height:1.5;display:inline-flex}.i1cc5G_modelChip>span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.i1cc5G_modelChip button{appearance:none;width:18px;height:18px;color:var(--dsw-alias-label-tertiary);font:inherit;cursor:pointer;background:0 0;border:0;border-radius:4px;padding:0;line-height:18px}.i1cc5G_modelChip button:hover:not(:disabled){color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-module-platform)}.i1cc5G_modelChip button:disabled{cursor:default;opacity:.45}.i1cc5G_addModel{appearance:none;border:1px dashed var(--dsw-alias-border-l2);min-height:28px;color:var(--dsw-alias-label-secondary);font:inherit;cursor:pointer;background:0 0;border-radius:6px;padding:0 9px;font-size:12px}.i1cc5G_addModel:hover:not(:disabled){color:var(--dsw-alias-brand-primary);border-color:var(--dsw-alias-brand-primary)}.i1cc5G_addModel:disabled{opacity:.45;cursor:default}.i1cc5G_manualModelRow{gap:8px;margin-top:10px;display:flex}.i1cc5G_manualModelRow .i1cc5G_input{flex:1;min-width:0}.i1cc5G_disclosure{appearance:none;border:0;border-top:1px solid var(--dsw-alias-border-l2);width:100%;color:var(--dsw-alias-label-primary);font:inherit;text-align:left;cursor:pointer;background:0 0;align-items:center;gap:8px;padding:13px 0;font-size:13px;font-weight:500;display:flex}.i1cc5G_disclosure>span:nth-child(2){color:var(--dsw-alias-label-tertiary);margin-left:auto;font-size:12px;font-weight:400}.i1cc5G_disclosure>span:last-child{color:var(--dsw-alias-label-tertiary)}.i1cc5G_disclosure:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:2px}.i1cc5G_optionalContent{padding:0 0 8px}.i1cc5G_inlineDisclosure{appearance:none;color:var(--dsw-alias-label-secondary);font:inherit;cursor:pointer;background:0 0;border:0;align-items:center;gap:6px;margin-top:12px;padding:0;font-size:12px;display:inline-flex}.i1cc5G_inlineDisclosure:hover{color:var(--dsw-alias-label-primary)}.i1cc5G_modelFetchRow{align-items:center;gap:8px;display:flex}.i1cc5G_modelFetch,.i1cc5G_modelChoices{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);min-height:32px;color:var(--dsw-alias-label-secondary);font:inherit;border-radius:7px;font-size:12px}.i1cc5G_modelFetch{cursor:pointer;padding:0 10px}.i1cc5G_modelFetch:hover:not(:disabled){color:var(--dsw-alias-brand-primary);border-color:var(--dsw-alias-brand-primary)}.i1cc5G_modelFetch:disabled{opacity:.5;cursor:default}.i1cc5G_modelChoices{flex:1;min-width:0;padding:0 8px}.i1cc5G_modelCandidateList{flex-wrap:wrap;gap:6px 10px;margin-top:10px;display:flex}.i1cc5G_modelCandidateLabel{width:100%;color:var(--dsw-alias-label-tertiary);font-size:12px}.i1cc5G_modelCandidate{appearance:none;min-width:0;color:var(--dsw-alias-label-secondary);cursor:pointer;background:var(--dsw-alias-bg-layer-3);font-size:12px;line-height:1.5;font:inherit;border:1px solid #0000;border-radius:5px;align-items:center;gap:5px;padding:3px 6px;display:inline-flex}.i1cc5G_modelCandidate input{margin:0}.i1cc5G_modelCandidate[data-selected]{border-color:var(--dsw-alias-border-l2);color:var(--dsw-alias-label-primary)}.i1cc5G_footer{border-top:1px solid var(--dsw-alias-border-l2);justify-content:flex-end;align-items:center;gap:8px;padding:12px 0 4px;display:flex}.i1cc5G_failed{min-width:0;color:var(--dsw-alias-label-error);flex:1;margin:0;font-size:12px;line-height:1.5}.i1cc5G_discard,.i1cc5G_save{appearance:none;font:inherit;cursor:pointer;border:1px solid #0000;border-radius:8px;padding:5px 14px;font-size:13px;line-height:1.5}.i1cc5G_discard{border-color:var(--dsw-alias-border-l2);color:var(--dsw-alias-label-secondary);background:0 0}.i1cc5G_discard:hover:not(:disabled){color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-label-dimmed)}.i1cc5G_save{background:var(--dsw-alias-label-primary);color:var(--dsw-alias-bg-layer-3)}.i1cc5G_discard:disabled,.i1cc5G_save:disabled{opacity:.4;cursor:default}.i1cc5G_discard:focus-visible,.i1cc5G_save:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:1px}@media (prefers-reduced-motion:reduce){.i1cc5G_card,.i1cc5G_chevron,.i1cc5G_chevronOpen{transition:none}}.i1cc5G_channelSection{padding:6px 0 2px}.i1cc5G_channelEmpty{color:var(--dsw-alias-label-tertiary);margin:10px 0 0;font-size:12px;line-height:1.5}.i1cc5G_channelList{flex-direction:column;gap:6px;margin:10px 0 0;padding:0;list-style:none;display:flex}.i1cc5G_channelRow{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);border-radius:10px;align-items:center;gap:10px;padding:8px 10px;display:flex}.i1cc5G_channelRow[data-action]{flex-wrap:wrap}.i1cc5G_channelDotReady,.i1cc5G_channelDotWarn{border-radius:50%;flex:none;width:9px;height:9px}.i1cc5G_channelDotReady{background:var(--dsw-color-success,#2fbf71)}.i1cc5G_channelDotWarn{background:var(--dsw-color-danger,#e5484d)}.i1cc5G_channelMain{appearance:none;min-width:0;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;flex-direction:column;flex:1;gap:3px;padding:0;display:flex}.i1cc5G_channelName{color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:600;line-height:1.4;overflow:hidden}.i1cc5G_channelMeta{flex-wrap:wrap;align-items:center;gap:4px 8px;display:flex}.i1cc5G_channelHost{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:1.5;font-family:var(--dsw-font-family-mono,monospace);text-overflow:ellipsis;white-space:nowrap;max-width:180px;overflow:hidden}.i1cc5G_channelBadge{white-space:nowrap;background:var(--dsw-alias-bg-module-platform);color:var(--dsw-alias-label-secondary);border-radius:999px;padding:0 7px;font-size:11px;font-weight:500;line-height:17px}.i1cc5G_channelBadge[data-warn]{color:var(--dsw-alias-label-error)}.i1cc5G_channelBadge[data-default]{background:var(--dsw-alias-bg-module-poped,var(--dsw-alias-bg-module-platform));color:var(--dsw-alias-brand-primary)}.i1cc5G_channelAction{appearance:none;font:inherit;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:0;border-radius:6px;flex:none;padding:4px 8px;font-size:12px;line-height:1.5}.i1cc5G_channelAction:hover:not(:disabled){color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-module-platform)}.i1cc5G_channelAction[data-danger]{color:var(--dsw-alias-label-error)}.i1cc5G_channelAction:disabled{opacity:.45;cursor:default}.i1cc5G_channelDanger{appearance:none;border:1px solid var(--dsw-alias-label-error);color:var(--dsw-alias-label-error);font:inherit;cursor:pointer;background:0 0;border-radius:6px;flex:none;padding:3px 10px;font-size:12px}.i1cc5G_channelDanger:hover:not(:disabled){background:color-mix(in srgb, var(--dsw-alias-label-error) 12%, transparent)}.i1cc5G_channelDanger:disabled{opacity:.45;cursor:default}.i1cc5G_deleteConfirmText{min-width:0;color:var(--dsw-alias-label-error);flex:1;font-size:12px;line-height:1.5}.i1cc5G_channelAddRow{gap:8px;margin-top:10px;display:flex}.i1cc5G_channelAdd{appearance:none;border:1px dashed var(--dsw-alias-border-l2);min-height:30px;color:var(--dsw-alias-label-secondary);font:inherit;cursor:pointer;background:0 0;border-radius:8px;padding:0 12px;font-size:12px}.i1cc5G_channelAdd:hover:not(:disabled){color:var(--dsw-alias-brand-primary);border-color:var(--dsw-alias-brand-primary)}.i1cc5G_channelAdd:disabled{opacity:.45;cursor:default}.i1cc5G_spacer{flex:1}.i1cc5G_editorBackdrop{z-index:120;background:color-mix(in srgb, var(--dsw-alias-bg-layer-1,#000) 45%, transparent);justify-content:center;align-items:flex-start;padding:9vh 16px 16px;display:flex;position:fixed;inset:0}.i1cc5G_editorPanel{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);border-radius:14px;width:min(560px,100%);max-height:82vh;padding:16px;overflow-y:auto;box-shadow:0 18px 50px #00000059}.i1cc5G_editorHeader{border-bottom:1px solid var(--dsw-alias-border-l2);justify-content:space-between;align-items:flex-start;gap:12px;padding-bottom:10px;display:flex}.i1cc5G_editorClose{appearance:none;width:26px;height:26px;color:var(--dsw-alias-label-tertiary);font:inherit;cursor:pointer;background:0 0;border:0;border-radius:6px;flex:none;font-size:16px;line-height:26px}.i1cc5G_editorClose:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-module-platform)}.i1cc5G_editorField{flex-direction:column;gap:6px;padding:12px 0 0;display:flex}.i1cc5G_editorDivider{background:var(--dsw-alias-border-l2);height:1px;margin:14px 0 4px}.i1cc5G_editorSectionHeader{justify-content:space-between;align-items:center;gap:12px;padding:10px 0 4px;display:flex}.i1cc5G_editorSectionHeader .i1cc5G_label{flex:1}.i1cc5G_editorTools{flex-direction:column;gap:8px;margin-top:10px;display:flex}.i1cc5G_editorFooter{border-top:1px solid var(--dsw-alias-border-l2);align-items:center;gap:8px;padding-top:12px;display:flex}.i1cc5G_detectOk{color:var(--dsw-color-success,var(--dsw-alias-label-secondary));margin:0;font-size:12px;line-height:1.5}.i1cc5G_modelRows{flex-direction:column;gap:8px;margin:8px 0 0;padding:0;list-style:none;display:flex}.i1cc5G_modelRow{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);border-radius:10px;justify-content:space-between;align-items:center;gap:10px;padding:8px 10px;display:flex}.i1cc5G_modelRowInputs{flex:1;align-items:center;gap:6px;min-width:0;display:flex}.i1cc5G_modelRowInputs .i1cc5G_input{flex:1;min-width:0}.i1cc5G_modelArrow{color:var(--dsw-alias-label-tertiary);flex:none;font-size:12px}.i1cc5G_modelRowBadges{flex:none;align-items:center;gap:6px;display:flex}.i1cc5G_modelBadge{white-space:nowrap;background:var(--dsw-alias-bg-module-platform);color:var(--dsw-alias-label-tertiary);border-radius:999px;padding:0 7px;font-size:11px;line-height:17px}.i1cc5G_modelBadge[data-verified]{color:var(--dsw-color-success,var(--dsw-alias-label-secondary))}.i1cc5G_modelBadge[data-warn]{color:var(--dsw-alias-label-error)}.i1cc5G_modelRowRemove{appearance:none;width:20px;height:20px;color:var(--dsw-alias-label-tertiary);font:inherit;cursor:pointer;background:0 0;border:0;border-radius:4px;flex:none;padding:0;line-height:20px}.i1cc5G_modelRowRemove:hover:not(:disabled){color:var(--dsw-alias-label-error);background:var(--dsw-alias-bg-module-platform)}.i1cc5G_modelRowRemove:disabled{opacity:.45;cursor:default}.i1cc5G_modelCandidate>.i1cc5G_modelBadge{flex:none}.i1cc5G_channelControls{position:relative}.i1cc5G_presetInline{z-index:10;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);border-radius:10px;width:min(420px,100vw - 48px);max-height:min(440px,60vh);margin:0;padding:12px;position:absolute;bottom:calc(100% + 8px);left:0;overflow-y:auto;box-shadow:0 12px 30px #0000004d}.i1cc5G_presetInlineHeader{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.i1cc5G_presetList{flex-direction:column;gap:8px;margin-top:12px;display:flex}.i1cc5G_presetRow{appearance:none;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);width:100%;color:inherit;font:inherit;text-align:left;cursor:pointer;border-radius:10px;flex-direction:column;align-items:flex-start;gap:3px;padding:10px 12px;display:flex}.i1cc5G_presetRow:hover:not(:disabled){border-color:var(--dsw-alias-brand-primary)}.i1cc5G_presetRow[data-custom]{border-style:dashed}.i1cc5G_presetRow:disabled{opacity:.5;cursor:default}.i1cc5G_presetName{color:var(--dsw-alias-label-primary);font-size:13px;font-weight:600;line-height:1.4}.i1cc5G_presetMeta{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:1.5;font-family:var(--dsw-font-family-mono,monospace)}.i1cc5G_presetHint{color:var(--dsw-alias-label-secondary);font-size:12px;line-height:1.5}";
|
|
5205
6647
|
const tagId$1 = "@dickpy/dsh-imagegen/settings-card.module.css";
|
|
5206
6648
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$1) + "]") === null) {
|
|
5207
6649
|
const tag = document.createElement("style");
|
|
@@ -5211,97 +6653,97 @@ window.__ModuleLoader__.load({
|
|
|
5211
6653
|
document.head.appendChild(tag);
|
|
5212
6654
|
}
|
|
5213
6655
|
var settings_card_module_css_default = {
|
|
5214
|
-
"
|
|
5215
|
-
"
|
|
5216
|
-
"
|
|
5217
|
-
"
|
|
5218
|
-
"
|
|
5219
|
-
"
|
|
5220
|
-
"
|
|
5221
|
-
"
|
|
5222
|
-
"
|
|
5223
|
-
"
|
|
5224
|
-
"
|
|
5225
|
-
"
|
|
5226
|
-
"
|
|
5227
|
-
"
|
|
5228
|
-
"
|
|
5229
|
-
"
|
|
5230
|
-
"
|
|
5231
|
-
"
|
|
5232
|
-
"
|
|
5233
|
-
"
|
|
5234
|
-
"
|
|
5235
|
-
"
|
|
5236
|
-
"
|
|
5237
|
-
"
|
|
5238
|
-
"
|
|
5239
|
-
"
|
|
5240
|
-
"
|
|
5241
|
-
"
|
|
5242
|
-
"
|
|
5243
|
-
"
|
|
5244
|
-
"
|
|
5245
|
-
"
|
|
5246
|
-
"
|
|
5247
|
-
"
|
|
5248
|
-
"
|
|
5249
|
-
"
|
|
5250
|
-
"
|
|
5251
|
-
"
|
|
5252
|
-
"
|
|
5253
|
-
"
|
|
5254
|
-
"
|
|
5255
|
-
"
|
|
5256
|
-
"
|
|
5257
|
-
"
|
|
5258
|
-
"
|
|
5259
|
-
"
|
|
5260
|
-
"
|
|
5261
|
-
"
|
|
5262
|
-
"
|
|
5263
|
-
"
|
|
5264
|
-
"
|
|
5265
|
-
"
|
|
5266
|
-
"
|
|
5267
|
-
"
|
|
5268
|
-
"
|
|
5269
|
-
"
|
|
5270
|
-
"body": "
|
|
5271
|
-
"
|
|
5272
|
-
"
|
|
5273
|
-
"
|
|
5274
|
-
"
|
|
5275
|
-
"modelArrow": "
|
|
5276
|
-
"
|
|
5277
|
-
"
|
|
5278
|
-
"
|
|
5279
|
-
"
|
|
5280
|
-
"
|
|
5281
|
-
"
|
|
5282
|
-
"
|
|
5283
|
-
"
|
|
5284
|
-
"
|
|
5285
|
-
"
|
|
5286
|
-
"
|
|
5287
|
-
"
|
|
5288
|
-
"
|
|
5289
|
-
"
|
|
5290
|
-
"
|
|
5291
|
-
"
|
|
5292
|
-
"
|
|
5293
|
-
"
|
|
5294
|
-
"
|
|
5295
|
-
"
|
|
5296
|
-
"
|
|
5297
|
-
"
|
|
5298
|
-
"
|
|
5299
|
-
"
|
|
5300
|
-
"
|
|
5301
|
-
"
|
|
5302
|
-
"
|
|
5303
|
-
"
|
|
5304
|
-
"
|
|
6656
|
+
"textareaInvalid": "i1cc5G_textareaInvalid",
|
|
6657
|
+
"readOnly": "i1cc5G_readOnly",
|
|
6658
|
+
"badge": "i1cc5G_badge",
|
|
6659
|
+
"channelName": "i1cc5G_channelName",
|
|
6660
|
+
"channelAdd": "i1cc5G_channelAdd",
|
|
6661
|
+
"save": "i1cc5G_save",
|
|
6662
|
+
"channelBadge": "i1cc5G_channelBadge",
|
|
6663
|
+
"detectOk": "i1cc5G_detectOk",
|
|
6664
|
+
"modelRowBadges": "i1cc5G_modelRowBadges",
|
|
6665
|
+
"modelBadge": "i1cc5G_modelBadge",
|
|
6666
|
+
"label": "i1cc5G_label",
|
|
6667
|
+
"inputInvalid": "i1cc5G_inputInvalid",
|
|
6668
|
+
"channelDotWarn": "i1cc5G_channelDotWarn",
|
|
6669
|
+
"presetName": "i1cc5G_presetName",
|
|
6670
|
+
"presetHint": "i1cc5G_presetHint",
|
|
6671
|
+
"modelRow": "i1cc5G_modelRow",
|
|
6672
|
+
"select": "i1cc5G_select",
|
|
6673
|
+
"input": "i1cc5G_input",
|
|
6674
|
+
"badges": "i1cc5G_badges",
|
|
6675
|
+
"channelList": "i1cc5G_channelList",
|
|
6676
|
+
"editorTools": "i1cc5G_editorTools",
|
|
6677
|
+
"channelMeta": "i1cc5G_channelMeta",
|
|
6678
|
+
"modelRowRemove": "i1cc5G_modelRowRemove",
|
|
6679
|
+
"channelHost": "i1cc5G_channelHost",
|
|
6680
|
+
"chevronOpen": "i1cc5G_chevronOpen",
|
|
6681
|
+
"sectionTitle": "i1cc5G_sectionTitle",
|
|
6682
|
+
"sectionHeader": "i1cc5G_sectionHeader",
|
|
6683
|
+
"editorField": "i1cc5G_editorField",
|
|
6684
|
+
"editorSectionHeader": "i1cc5G_editorSectionHeader",
|
|
6685
|
+
"editorHeader": "i1cc5G_editorHeader",
|
|
6686
|
+
"editorClose": "i1cc5G_editorClose",
|
|
6687
|
+
"modelFetchRow": "i1cc5G_modelFetchRow",
|
|
6688
|
+
"failed": "i1cc5G_failed",
|
|
6689
|
+
"editorDivider": "i1cc5G_editorDivider",
|
|
6690
|
+
"discard": "i1cc5G_discard",
|
|
6691
|
+
"name": "i1cc5G_name",
|
|
6692
|
+
"channelAddRow": "i1cc5G_channelAddRow",
|
|
6693
|
+
"editorBackdrop": "i1cc5G_editorBackdrop",
|
|
6694
|
+
"channelDotReady": "i1cc5G_channelDotReady",
|
|
6695
|
+
"headText": "i1cc5G_headText",
|
|
6696
|
+
"versionValue": "i1cc5G_versionValue",
|
|
6697
|
+
"editorPanel": "i1cc5G_editorPanel",
|
|
6698
|
+
"presetList": "i1cc5G_presetList",
|
|
6699
|
+
"modelCandidate": "i1cc5G_modelCandidate",
|
|
6700
|
+
"optionalContent": "i1cc5G_optionalContent",
|
|
6701
|
+
"modelRows": "i1cc5G_modelRows",
|
|
6702
|
+
"modelRowInputs": "i1cc5G_modelRowInputs",
|
|
6703
|
+
"addModel": "i1cc5G_addModel",
|
|
6704
|
+
"channelSection": "i1cc5G_channelSection",
|
|
6705
|
+
"presetRow": "i1cc5G_presetRow",
|
|
6706
|
+
"modelCandidateLabel": "i1cc5G_modelCandidateLabel",
|
|
6707
|
+
"channelDanger": "i1cc5G_channelDanger",
|
|
6708
|
+
"presetMeta": "i1cc5G_presetMeta",
|
|
6709
|
+
"field": "i1cc5G_field",
|
|
6710
|
+
"hint": "i1cc5G_hint",
|
|
6711
|
+
"versionLabel": "i1cc5G_versionLabel",
|
|
6712
|
+
"body": "i1cc5G_body",
|
|
6713
|
+
"manualModelRow": "i1cc5G_manualModelRow",
|
|
6714
|
+
"pending": "i1cc5G_pending",
|
|
6715
|
+
"notExposed": "i1cc5G_notExposed",
|
|
6716
|
+
"modelCandidateList": "i1cc5G_modelCandidateList",
|
|
6717
|
+
"modelArrow": "i1cc5G_modelArrow",
|
|
6718
|
+
"chevron": "i1cc5G_chevron",
|
|
6719
|
+
"modelChoices": "i1cc5G_modelChoices",
|
|
6720
|
+
"head": "i1cc5G_head",
|
|
6721
|
+
"inlineDisclosure": "i1cc5G_inlineDisclosure",
|
|
6722
|
+
"disclosure": "i1cc5G_disclosure",
|
|
6723
|
+
"channelRow": "i1cc5G_channelRow",
|
|
6724
|
+
"card": "i1cc5G_card",
|
|
6725
|
+
"description": "i1cc5G_description",
|
|
6726
|
+
"modelFetch": "i1cc5G_modelFetch",
|
|
6727
|
+
"channelMain": "i1cc5G_channelMain",
|
|
6728
|
+
"header": "i1cc5G_header",
|
|
6729
|
+
"modelSummary": "i1cc5G_modelSummary",
|
|
6730
|
+
"versionRow": "i1cc5G_versionRow",
|
|
6731
|
+
"channelAction": "i1cc5G_channelAction",
|
|
6732
|
+
"sectionDivider": "i1cc5G_sectionDivider",
|
|
6733
|
+
"channelControls": "i1cc5G_channelControls",
|
|
6734
|
+
"presetInlineHeader": "i1cc5G_presetInlineHeader",
|
|
6735
|
+
"presetInline": "i1cc5G_presetInline",
|
|
6736
|
+
"deleteConfirmText": "i1cc5G_deleteConfirmText",
|
|
6737
|
+
"textarea": "i1cc5G_textarea",
|
|
6738
|
+
"modelChip": "i1cc5G_modelChip",
|
|
6739
|
+
"spacer": "i1cc5G_spacer",
|
|
6740
|
+
"editorFooter": "i1cc5G_editorFooter",
|
|
6741
|
+
"reset": "i1cc5G_reset",
|
|
6742
|
+
"channelEmpty": "i1cc5G_channelEmpty",
|
|
6743
|
+
"invalid": "i1cc5G_invalid",
|
|
6744
|
+
"modelSection": "i1cc5G_modelSection",
|
|
6745
|
+
"footer": "i1cc5G_footer",
|
|
6746
|
+
"sectionHint": "i1cc5G_sectionHint"
|
|
5305
6747
|
};
|
|
5306
6748
|
//#endregion
|
|
5307
6749
|
//#region src/client/SettingsCard.tsx
|
|
@@ -6553,8 +7995,8 @@ window.__ModuleLoader__.load({
|
|
|
6553
7995
|
});
|
|
6554
7996
|
}
|
|
6555
7997
|
//#endregion
|
|
6556
|
-
//#region \0dsh-css:
|
|
6557
|
-
const css = ".
|
|
7998
|
+
//#region \0dsh-css:E:\dsh-plugin\src\client\image-toolview.module.css.mjs
|
|
7999
|
+
const css = "._3eGrYG_root{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:8px;flex-direction:column;gap:7px;margin:4px 0;padding:8px 10px 10px;display:flex}._3eGrYG_header{min-height:20px;color:var(--dsw-alias-label-secondary);align-items:center;gap:7px;font-size:12px;display:flex}._3eGrYG_icon{color:var(--dsw-alias-brand-primary);font-size:15px;line-height:1}._3eGrYG_status{color:var(--dsw-alias-label-tertiary);margin-left:auto;font-size:11px}._3eGrYG_message,._3eGrYG_loading,._3eGrYG_error{color:var(--dsw-alias-label-tertiary);overflow-wrap:anywhere;margin:0;font-size:12px;line-height:1.5}._3eGrYG_images{flex-wrap:wrap;gap:8px;display:flex}._3eGrYG_imageLink{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);border-radius:6px;max-width:min(280px,100%);display:block;overflow:hidden}._3eGrYG_imageLink:hover{border-color:var(--dsw-alias-brand-primary)}._3eGrYG_image{object-fit:contain;width:auto;max-width:280px;height:auto;max-height:220px;display:block}._3eGrYG_error{color:var(--dsw-alias-state-error-primary)}";
|
|
6558
8000
|
const tagId = "@dickpy/dsh-imagegen/image-toolview.module.css";
|
|
6559
8001
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]") === null) {
|
|
6560
8002
|
const tag = document.createElement("style");
|
|
@@ -6564,16 +8006,16 @@ window.__ModuleLoader__.load({
|
|
|
6564
8006
|
document.head.appendChild(tag);
|
|
6565
8007
|
}
|
|
6566
8008
|
var image_toolview_module_css_default = {
|
|
6567
|
-
"
|
|
6568
|
-
"
|
|
6569
|
-
"
|
|
6570
|
-
"
|
|
6571
|
-
"images": "
|
|
6572
|
-
"
|
|
6573
|
-
"image": "
|
|
6574
|
-
"
|
|
6575
|
-
"
|
|
6576
|
-
"
|
|
8009
|
+
"imageLink": "_3eGrYG_imageLink",
|
|
8010
|
+
"error": "_3eGrYG_error",
|
|
8011
|
+
"root": "_3eGrYG_root",
|
|
8012
|
+
"loading": "_3eGrYG_loading",
|
|
8013
|
+
"images": "_3eGrYG_images",
|
|
8014
|
+
"header": "_3eGrYG_header",
|
|
8015
|
+
"image": "_3eGrYG_image",
|
|
8016
|
+
"status": "_3eGrYG_status",
|
|
8017
|
+
"icon": "_3eGrYG_icon",
|
|
8018
|
+
"message": "_3eGrYG_message"
|
|
6577
8019
|
};
|
|
6578
8020
|
//#endregion
|
|
6579
8021
|
//#region src/client/image-toolview.tsx
|
|
@@ -6582,8 +8024,7 @@ window.__ModuleLoader__.load({
|
|
|
6582
8024
|
}
|
|
6583
8025
|
function imageRefsOf(block) {
|
|
6584
8026
|
if (!isSettled(block)) return [];
|
|
6585
|
-
|
|
6586
|
-
return [...block.content, ...resultContent].flatMap((content) => content.type === "image" ? [content.attachment] : []);
|
|
8027
|
+
return block.content.flatMap((content) => content.type === "image" ? [content.attachment] : []);
|
|
6587
8028
|
}
|
|
6588
8029
|
function textOf(block) {
|
|
6589
8030
|
if (!isSettled(block)) return "";
|
|
@@ -6739,7 +8180,8 @@ window.__ModuleLoader__.load({
|
|
|
6739
8180
|
"get_image_generation_task"
|
|
6740
8181
|
]) yield ctx.slots.register({
|
|
6741
8182
|
name: "tool.call.toolview",
|
|
6742
|
-
key
|
|
8183
|
+
key,
|
|
8184
|
+
inject: (sessionId) => ({ sessionId })
|
|
6743
8185
|
}, ImageToolView);
|
|
6744
8186
|
});
|
|
6745
8187
|
}
|