ima2-gen 1.1.13 → 1.1.14
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/README.md +10 -1
- package/bin/commands/doctor.js +195 -0
- package/bin/commands/doctor.ts +202 -0
- package/bin/ima2.js +3 -105
- package/bin/ima2.ts +3 -109
- package/config.js +1 -0
- package/config.ts +5 -0
- package/docs/CLI.md +36 -0
- package/docs/FAQ.ko.md +82 -2
- package/docs/FAQ.md +85 -2
- package/docs/PROMPT_STUDIO.ko.md +111 -0
- package/docs/PROMPT_STUDIO.md +115 -0
- package/docs/README.ko.md +8 -1
- package/docs/migration/runtime-test-inventory.md +6 -1
- package/lib/agentRuntime.js +9 -2
- package/lib/agentRuntime.ts +8 -2
- package/lib/errorClassify.js +1 -1
- package/lib/errorClassify.ts +1 -1
- package/lib/generationErrors.js +121 -23
- package/lib/generationErrors.ts +100 -13
- package/lib/responsesDoctor.js +386 -0
- package/lib/responsesDoctor.ts +456 -0
- package/lib/responsesErrors.js +57 -0
- package/lib/responsesErrors.ts +83 -0
- package/lib/responsesFallback.js +72 -0
- package/lib/responsesFallback.ts +114 -0
- package/lib/responsesImageAdapter.js +121 -174
- package/lib/responsesImageAdapter.ts +136 -211
- package/lib/responsesParse.js +324 -0
- package/lib/responsesParse.ts +452 -0
- package/lib/responsesTools.js +15 -0
- package/lib/responsesTools.ts +28 -0
- package/package.json +1 -1
- package/routes/edit.js +26 -1
- package/routes/edit.ts +26 -1
- package/routes/generate.js +40 -0
- package/routes/generate.ts +47 -0
- package/ui/dist/.vite/manifest.json +12 -12
- package/ui/dist/assets/{AgentWorkspace-BJe9yxPA.js → AgentWorkspace-B6YNOZHi.js} +1 -1
- package/ui/dist/assets/{CardNewsWorkspace-BBLdwzYU.js → CardNewsWorkspace-EFVeg4l_.js} +1 -1
- package/ui/dist/assets/{NodeCanvas-BSZ527J4.js → NodeCanvas-iM6yjHvO.js} +1 -1
- package/ui/dist/assets/{PromptBuilderPanel-Y2VygFc0.js → PromptBuilderPanel-C3GdLDCl.js} +1 -1
- package/ui/dist/assets/{PromptImportDialog-C6lFV-LL.js → PromptImportDialog-DS9vrc_w.js} +2 -2
- package/ui/dist/assets/{PromptImportDiscoverySection-D8YJFhND.js → PromptImportDiscoverySection-DHFEt_FA.js} +1 -1
- package/ui/dist/assets/{PromptImportFolderSection-ywfcQolW.js → PromptImportFolderSection-BQxb1zs5.js} +1 -1
- package/ui/dist/assets/{PromptLibraryPanel-fk4KmrGy.js → PromptLibraryPanel-NhMKVGfU.js} +2 -2
- package/ui/dist/assets/{SettingsWorkspace-DL5vhAHQ.js → SettingsWorkspace-FjKjaDqj.js} +1 -1
- package/ui/dist/assets/index-BAN6lKgf.js +28 -0
- package/ui/dist/assets/{index-BLx55BOg.js → index-BbFZyM92.js} +1 -1
- package/ui/dist/assets/index-DK1faG9Z.css +1 -0
- package/ui/dist/index.html +2 -2
- package/ui/dist/assets/index-ByViUJfx.css +0 -1
- package/ui/dist/assets/index-Ci36vcFD.js +0 -28
package/routes/generate.ts
CHANGED
|
@@ -169,6 +169,7 @@ export function registerGenerateRoutes(app: Express, ctxRaw: RouteRuntimeContext
|
|
|
169
169
|
reasoningEffort,
|
|
170
170
|
webSearchEnabled,
|
|
171
171
|
signal: cancelController.signal,
|
|
172
|
+
allowPromptOnlyOAuthFallback: activeProvider !== "api",
|
|
172
173
|
},
|
|
173
174
|
);
|
|
174
175
|
throwIfJobCanceled(requestId);
|
|
@@ -195,9 +196,28 @@ export function registerGenerateRoutes(app: Express, ctxRaw: RouteRuntimeContext
|
|
|
195
196
|
const images: Array<{ image: string; filename: string; revisedPrompt: any }> = [];
|
|
196
197
|
let totalUsage: Record<string, number> | null = null;
|
|
197
198
|
let totalWebSearchCalls = 0;
|
|
199
|
+
let firstRetryMeta: Record<string, unknown> | null = null;
|
|
198
200
|
for (const r of results) {
|
|
199
201
|
if (r.status === "fulfilled" && r.value.b64) {
|
|
200
202
|
throwIfJobCanceled(requestId);
|
|
203
|
+
const retryValue = r.value as typeof r.value & {
|
|
204
|
+
retryKind?: string;
|
|
205
|
+
initialEventCount?: number;
|
|
206
|
+
initialEventTypes?: unknown;
|
|
207
|
+
referencesDroppedOnRetry?: boolean;
|
|
208
|
+
developerPromptDroppedOnRetry?: boolean;
|
|
209
|
+
webSearchDroppedOnRetry?: boolean;
|
|
210
|
+
};
|
|
211
|
+
if (!firstRetryMeta && retryValue.retryKind) {
|
|
212
|
+
firstRetryMeta = {
|
|
213
|
+
retryKind: retryValue.retryKind,
|
|
214
|
+
initialEventCount: retryValue.initialEventCount ?? null,
|
|
215
|
+
initialEventTypes: retryValue.initialEventTypes || null,
|
|
216
|
+
referencesDroppedOnRetry: retryValue.referencesDroppedOnRetry ?? null,
|
|
217
|
+
developerPromptDroppedOnRetry: retryValue.developerPromptDroppedOnRetry ?? null,
|
|
218
|
+
webSearchDroppedOnRetry: retryValue.webSearchDroppedOnRetry ?? null,
|
|
219
|
+
};
|
|
220
|
+
}
|
|
201
221
|
const rand = randomBytes(ctx.config.ids.generatedHexBytes).toString("hex");
|
|
202
222
|
const filename = `${Date.now()}_${rand}_${images.length}.${format}`;
|
|
203
223
|
const meta = {
|
|
@@ -284,8 +304,21 @@ export function registerGenerateRoutes(app: Express, ctxRaw: RouteRuntimeContext
|
|
|
284
304
|
upstreamParam: firstErr.upstreamParam || null,
|
|
285
305
|
diagnosticReason: firstErr.diagnosticReason || null,
|
|
286
306
|
retryKind: firstErr.retryKind || null,
|
|
307
|
+
initialEventCount: firstErr.initialEventCount ?? null,
|
|
308
|
+
initialEventTypes: firstErr.initialEventTypes || null,
|
|
287
309
|
referencesDroppedOnRetry: firstErr.referencesDroppedOnRetry ?? null,
|
|
310
|
+
developerPromptDroppedOnRetry: firstErr.developerPromptDroppedOnRetry ?? null,
|
|
311
|
+
webSearchDroppedOnRetry: firstErr.webSearchDroppedOnRetry ?? null,
|
|
312
|
+
fallbackEventCount: firstErr.fallbackEventCount ?? null,
|
|
313
|
+
fallbackEventTypes: firstErr.fallbackEventTypes || null,
|
|
314
|
+
fallbackImageCallSeen: firstErr.fallbackImageCallSeen ?? null,
|
|
315
|
+
fallbackImageResultCount: firstErr.fallbackImageResultCount ?? null,
|
|
288
316
|
errorEventCount: firstErr.eventCount ?? null,
|
|
317
|
+
eventTypes: firstErr.eventTypes || null,
|
|
318
|
+
webSearchCalls: firstErr.webSearchCalls ?? null,
|
|
319
|
+
responseDiagnostics: firstErr.responseDiagnostics || null,
|
|
320
|
+
toolTypes: firstErr.toolTypes || null,
|
|
321
|
+
toolChoiceKind: firstErr.toolChoiceKind || null,
|
|
289
322
|
requestId,
|
|
290
323
|
});
|
|
291
324
|
}
|
|
@@ -309,6 +342,7 @@ export function registerGenerateRoutes(app: Express, ctxRaw: RouteRuntimeContext
|
|
|
309
342
|
revisedPrompt: firstRevised,
|
|
310
343
|
promptMode: normalizedPromptMode,
|
|
311
344
|
webSearchEnabled,
|
|
345
|
+
...(firstRetryMeta || {}),
|
|
312
346
|
};
|
|
313
347
|
|
|
314
348
|
if (count === 1) {
|
|
@@ -358,8 +392,21 @@ export function registerGenerateRoutes(app: Express, ctxRaw: RouteRuntimeContext
|
|
|
358
392
|
upstreamParam: ext.upstreamParam || null,
|
|
359
393
|
diagnosticReason: ext.diagnosticReason || null,
|
|
360
394
|
retryKind: ext.retryKind || null,
|
|
395
|
+
initialEventCount: ext.initialEventCount ?? null,
|
|
396
|
+
initialEventTypes: ext.initialEventTypes || null,
|
|
361
397
|
referencesDroppedOnRetry: ext.referencesDroppedOnRetry ?? null,
|
|
398
|
+
developerPromptDroppedOnRetry: ext.developerPromptDroppedOnRetry ?? null,
|
|
399
|
+
webSearchDroppedOnRetry: ext.webSearchDroppedOnRetry ?? null,
|
|
400
|
+
fallbackEventCount: ext.fallbackEventCount ?? null,
|
|
401
|
+
fallbackEventTypes: ext.fallbackEventTypes || null,
|
|
402
|
+
fallbackImageCallSeen: ext.fallbackImageCallSeen ?? null,
|
|
403
|
+
fallbackImageResultCount: ext.fallbackImageResultCount ?? null,
|
|
362
404
|
errorEventCount: ext.eventCount ?? null,
|
|
405
|
+
eventTypes: ext.eventTypes || null,
|
|
406
|
+
webSearchCalls: ext.webSearchCalls ?? null,
|
|
407
|
+
responseDiagnostics: ext.responseDiagnostics || null,
|
|
408
|
+
toolTypes: ext.toolTypes || null,
|
|
409
|
+
toolChoiceKind: ext.toolChoiceKind || null,
|
|
363
410
|
requestId,
|
|
364
411
|
});
|
|
365
412
|
} finally {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"index.html": {
|
|
3
|
-
"file": "assets/index-
|
|
3
|
+
"file": "assets/index-BAN6lKgf.js",
|
|
4
4
|
"name": "index",
|
|
5
5
|
"src": "index.html",
|
|
6
6
|
"isEntry": true,
|
|
@@ -16,11 +16,11 @@
|
|
|
16
16
|
"src/components/PromptLibraryPanel.tsx"
|
|
17
17
|
],
|
|
18
18
|
"css": [
|
|
19
|
-
"assets/index-
|
|
19
|
+
"assets/index-DK1faG9Z.css"
|
|
20
20
|
]
|
|
21
21
|
},
|
|
22
22
|
"src/components/NodeCanvas.tsx": {
|
|
23
|
-
"file": "assets/NodeCanvas-
|
|
23
|
+
"file": "assets/NodeCanvas-iM6yjHvO.js",
|
|
24
24
|
"name": "NodeCanvas",
|
|
25
25
|
"src": "src/components/NodeCanvas.tsx",
|
|
26
26
|
"isDynamicEntry": true,
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
]
|
|
33
33
|
},
|
|
34
34
|
"src/components/PromptImportDialog.tsx": {
|
|
35
|
-
"file": "assets/PromptImportDialog-
|
|
35
|
+
"file": "assets/PromptImportDialog-DS9vrc_w.js",
|
|
36
36
|
"name": "PromptImportDialog",
|
|
37
37
|
"src": "src/components/PromptImportDialog.tsx",
|
|
38
38
|
"isDynamicEntry": true,
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
]
|
|
46
46
|
},
|
|
47
47
|
"src/components/PromptImportDiscoverySection.tsx": {
|
|
48
|
-
"file": "assets/PromptImportDiscoverySection-
|
|
48
|
+
"file": "assets/PromptImportDiscoverySection-DHFEt_FA.js",
|
|
49
49
|
"name": "PromptImportDiscoverySection",
|
|
50
50
|
"src": "src/components/PromptImportDiscoverySection.tsx",
|
|
51
51
|
"isDynamicEntry": true,
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
]
|
|
55
55
|
},
|
|
56
56
|
"src/components/PromptImportFolderSection.tsx": {
|
|
57
|
-
"file": "assets/PromptImportFolderSection-
|
|
57
|
+
"file": "assets/PromptImportFolderSection-BQxb1zs5.js",
|
|
58
58
|
"name": "PromptImportFolderSection",
|
|
59
59
|
"src": "src/components/PromptImportFolderSection.tsx",
|
|
60
60
|
"isDynamicEntry": true,
|
|
@@ -63,7 +63,7 @@
|
|
|
63
63
|
]
|
|
64
64
|
},
|
|
65
65
|
"src/components/PromptLibraryPanel.tsx": {
|
|
66
|
-
"file": "assets/PromptLibraryPanel-
|
|
66
|
+
"file": "assets/PromptLibraryPanel-NhMKVGfU.js",
|
|
67
67
|
"name": "PromptLibraryPanel",
|
|
68
68
|
"src": "src/components/PromptLibraryPanel.tsx",
|
|
69
69
|
"isDynamicEntry": true,
|
|
@@ -75,7 +75,7 @@
|
|
|
75
75
|
]
|
|
76
76
|
},
|
|
77
77
|
"src/components/SettingsWorkspace.tsx": {
|
|
78
|
-
"file": "assets/SettingsWorkspace-
|
|
78
|
+
"file": "assets/SettingsWorkspace-FjKjaDqj.js",
|
|
79
79
|
"name": "SettingsWorkspace",
|
|
80
80
|
"src": "src/components/SettingsWorkspace.tsx",
|
|
81
81
|
"isDynamicEntry": true,
|
|
@@ -84,7 +84,7 @@
|
|
|
84
84
|
]
|
|
85
85
|
},
|
|
86
86
|
"src/components/agent/AgentWorkspace.tsx": {
|
|
87
|
-
"file": "assets/AgentWorkspace-
|
|
87
|
+
"file": "assets/AgentWorkspace-B6YNOZHi.js",
|
|
88
88
|
"name": "AgentWorkspace",
|
|
89
89
|
"src": "src/components/agent/AgentWorkspace.tsx",
|
|
90
90
|
"isDynamicEntry": true,
|
|
@@ -93,7 +93,7 @@
|
|
|
93
93
|
]
|
|
94
94
|
},
|
|
95
95
|
"src/components/canvas-mode/index.ts": {
|
|
96
|
-
"file": "assets/index-
|
|
96
|
+
"file": "assets/index-BbFZyM92.js",
|
|
97
97
|
"name": "index",
|
|
98
98
|
"src": "src/components/canvas-mode/index.ts",
|
|
99
99
|
"isDynamicEntry": true,
|
|
@@ -102,7 +102,7 @@
|
|
|
102
102
|
]
|
|
103
103
|
},
|
|
104
104
|
"src/components/card-news/CardNewsWorkspace.tsx": {
|
|
105
|
-
"file": "assets/CardNewsWorkspace-
|
|
105
|
+
"file": "assets/CardNewsWorkspace-EFVeg4l_.js",
|
|
106
106
|
"name": "CardNewsWorkspace",
|
|
107
107
|
"src": "src/components/card-news/CardNewsWorkspace.tsx",
|
|
108
108
|
"isDynamicEntry": true,
|
|
@@ -111,7 +111,7 @@
|
|
|
111
111
|
]
|
|
112
112
|
},
|
|
113
113
|
"src/components/prompt-builder/PromptBuilderPanel.tsx": {
|
|
114
|
-
"file": "assets/PromptBuilderPanel-
|
|
114
|
+
"file": "assets/PromptBuilderPanel-C3GdLDCl.js",
|
|
115
115
|
"name": "PromptBuilderPanel",
|
|
116
116
|
"src": "src/components/prompt-builder/PromptBuilderPanel.tsx",
|
|
117
117
|
"isDynamicEntry": true,
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{a as d,j as e,u as p,o as Qe,b as B,U as xe}from"./index-
|
|
1
|
+
import{a as d,j as e,u as p,o as Qe,b as B,U as xe}from"./index-BAN6lKgf.js";async function E(n,t){const s=await fetch(n,t);if(!s.ok){const a=await s.json().catch(()=>({})),r=a.error,l=typeof r=="string"?r:r?.message??`Request failed: ${s.status}`,o=new Error(l);throw o.status=s.status,o.code=typeof r=="object"?r?.code:a.code,o}return await s.json()}function Fe(n){return n.filename?`/generated/${n.filename}`:typeof n.url=="string"&&n.url?n.url:typeof n.thumb=="string"&&n.thumb?n.thumb:null}function Ke(n){const t=Fe(n);if(!t)return null;const s=n.filename??n.canvasEditableFilename??"current-image.png";return{id:`current-${s}`,filename:s,url:t,thumbUrl:n.thumb??t,prompt:n.prompt??n.userPrompt??null,revisedPrompt:n.revisedPrompt??null,createdAt:n.createdAt??Date.now()}}async function oe(n){const t=n?`?selectedSessionId=${encodeURIComponent(n)}`:"";return E(`/api/agent/sessions${t}`)}async function ie(n){const t=n.currentImage?Ke(n.currentImage):null;return E("/api/agent/sessions",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({title:n.title,currentImage:t,webSearchEnabled:n.webSearchEnabled??!0})})}async function J(n,t){return E(`/api/agent/sessions/${encodeURIComponent(n)}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}async function Ge(n){return E(`/api/agent/sessions/${encodeURIComponent(n)}`,{method:"DELETE"})}async function Ve(n,t,s){return E(`/api/agent/sessions/${encodeURIComponent(n)}/queue`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({prompt:t,options:s})})}async function He(n){return E(`/api/agent/queue/${encodeURIComponent(n)}/cancel`,{method:"POST"})}async function Je(n){return E(`/api/agent/queue/${encodeURIComponent(n)}/retry`,{method:"POST"})}const Xe={provider:"oauth",model:"gpt-5.4-mini",quality:"medium",size:"1024x1024",format:"png",moderation:"low",reasoningEffort:"medium",webSearchEnabled:!0,generationStrategy:"auto",variants:1,maxAutoVariants:8,parallelism:2};function ce(n){return{...Xe,...n??{}}}function ue(n){const{width:t,height:s}=n;return s<560&&t<1280?"mobile-chat-image-sheet":t>=1280?"desktop-three-pane":t>=960&&s>=560?"desktop-rail":t>=768&&s>=700?"tablet-stacked":"mobile-chat-image-sheet"}function de(){return typeof window>"u"?1440:window.innerWidth}function ge(){return typeof window>"u"?900:window.innerHeight}function Ye(){const[n,t]=d.useState(()=>ue({width:de(),height:ge()}));return d.useEffect(()=>{const s=()=>t(ue({width:de(),height:ge()}));return s(),window.addEventListener("resize",s),()=>window.removeEventListener("resize",s)},[]),n}function w({size:n=16,children:t}){return e.jsx("svg",{width:n,height:n,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:t})}function Y(n){return e.jsxs(w,{...n,children:[e.jsx("path",{d:"M12 5v14"}),e.jsx("path",{d:"M5 12h14"})]})}function je(n){return e.jsxs(w,{...n,children:[e.jsx("circle",{cx:"11",cy:"11",r:"7"}),e.jsx("path",{d:"M21 21l-4.3-4.3"})]})}function D(n){return e.jsxs(w,{...n,children:[e.jsx("rect",{x:"3",y:"5",width:"18",height:"14",rx:"2"}),e.jsx("circle",{cx:"8",cy:"10",r:"1.5"}),e.jsx("path",{d:"M21 16l-5-5L5 19"})]})}function Z(n){return e.jsxs(w,{...n,children:[e.jsx("path",{d:"M18 6L6 18"}),e.jsx("path",{d:"M6 6l12 12"})]})}function Ze(n){return e.jsxs(w,{...n,children:[e.jsx("path",{d:"M22 2L11 13"}),e.jsx("path",{d:"M22 2l-7 20-4-9-9-4 20-7z"})]})}function en(n){return e.jsx(w,{...n,children:e.jsx("path",{d:"M21.4 11.1l-9.2 9.1a6 6 0 0 1-8.5-8.5l9.2-9.2a4 4 0 0 1 5.7 5.7l-9.2 9.2a2 2 0 0 1-2.8-2.8l8.5-8.5"})})}function nn(n){return e.jsxs(w,{...n,children:[e.jsx("circle",{cx:"12",cy:"12",r:"10"}),e.jsx("path",{d:"M2 12h20"}),e.jsx("path",{d:"M12 2a15.3 15.3 0 0 1 0 20"}),e.jsx("path",{d:"M12 2a15.3 15.3 0 0 0 0 20"})]})}function fe(n){return e.jsxs(w,{...n,children:[e.jsx("path",{d:"M4 6h16"}),e.jsx("path",{d:"M4 12h16"}),e.jsx("path",{d:"M4 18h16"})]})}function tn(n){return e.jsxs(w,{...n,children:[e.jsx("path",{d:"M3 6h18"}),e.jsx("path",{d:"M8 6V4h8v2"}),e.jsx("path",{d:"M19 6l-1 14H6L5 6"})]})}function sn(n){return e.jsxs(w,{...n,children:[e.jsx("path",{d:"M12 20h9"}),e.jsx("path",{d:"M16.5 3.5a2.1 2.1 0 0 1 3 3L7 19l-4 1 1-4 12.5-12.5z"})]})}function be(n){return e.jsx(w,{...n,children:e.jsx("path",{d:"M6 9l6 6 6-6"})})}function ye(n){return e.jsx(w,{...n,children:e.jsx("path",{d:"M9 6l6 6-6 6"})})}const he=[{name:"question",display:"/question",aliases:["question","ask","q"],descriptionKey:"agent.slashDesc_question"},{name:"variants",display:"/variants <N>",aliases:["variants","variant","v","n"],descriptionKey:"agent.slashDesc_variants",hasValue:!0},{name:"generate",display:"/generate <N>",aliases:["generate","gen","g"],descriptionKey:"agent.slashDesc_generate",hasValue:!0},{name:"parallelism",display:"/parallelism <N>",aliases:["parallelism","parallel","p"],descriptionKey:"agent.slashDesc_parallelism",hasValue:!0},{name:"help",display:"/help",aliases:["help","h"],descriptionKey:"agent.slashDesc_help"}];function Se(n){const t=n.toLowerCase();return t?he.filter(s=>s.aliases.some(a=>a.startsWith(t))):he}function an({listboxId:n,query:t,highlightIndex:s,onSelect:a,onHighlightChange:r}){const{t:l}=p(),o=Se(t);return o.length===0?null:e.jsx("ul",{id:n,className:"slash-command-menu",role:"listbox","aria-label":l("agent.slashCommands"),children:o.map((i,c)=>e.jsxs("li",{id:`${n}-opt-${c}`,role:"option","aria-selected":c===s,className:`slash-command-menu__item${c===s?" is-highlighted":""}`,onMouseDown:u=>u.preventDefault(),onClick:()=>a(i),onMouseEnter:()=>r(c),children:[e.jsx("span",{className:"slash-command-menu__name",children:i.display}),e.jsx("span",{className:"slash-command-menu__desc",children:l(i.descriptionKey)})]},i.name))})}function rn({webSearchEnabled:n,insertedPrompt:t,onWebSearchChange:s,onSend:a}){const{t:r}=p(),[l,o]=d.useState(""),[i,c]=d.useState(0),[u,m]=d.useState(!1),h=d.useRef(null),x=d.useId(),j=l.trim().length>0,y=l.trimStart().match(/^\/([a-z]*)$/i),M=y!==null,I=M&&!u,T=y?.[1]??"",_=Se(T),q=I&&_.length>0,A=_.length>0?Math.min(i,_.length-1):0,O=q?`${x}-opt-${A}`:void 0;d.useEffect(()=>{c(0),m(!1)},[T]),d.useEffect(()=>{M&&m(!1)},[M]),d.useEffect(()=>{t?.text&&o(f=>f.trim()?`${f.trim()}
|
|
2
2
|
|
|
3
3
|
${t.text}`:t.text)},[t]);const N=()=>{const f=l.trim();f&&(a(f),o(""))},S=f=>{o(`/${f.name} `),h.current?.focus()};return e.jsxs("div",{className:"agent-composer",children:[q&&e.jsx(an,{listboxId:x,query:T,highlightIndex:A,onSelect:S,onHighlightChange:c}),e.jsx("textarea",{ref:h,value:l,"aria-autocomplete":"list","aria-haspopup":"listbox","aria-label":r("agent.composerPlaceholder"),...q?{"aria-controls":x}:{},"aria-activedescendant":O,autoCapitalize:"off",autoCorrect:"off",placeholder:r("agent.composerPlaceholder"),onChange:f=>o(f.target.value),onKeyDown:f=>{if(f.key==="Enter"&&(f.metaKey||f.ctrlKey)){f.preventDefault(),N();return}if(q)switch(f.key){case"Tab":{f.preventDefault(),S(_[A]);return}case"ArrowDown":{f.preventDefault(),c((A+1)%_.length);return}case"ArrowUp":{f.preventDefault(),c((A-1+_.length)%_.length);return}case"Enter":{f.preventDefault(),S(_[A]);return}case"Escape":{f.preventDefault(),m(!0);return}}}}),e.jsxs("div",{className:"agent-composer__actions",children:[e.jsx("button",{type:"button","aria-label":r("agent.attachReference"),title:r("agent.attachReference"),children:e.jsx(en,{size:16})}),e.jsx("button",{type:"button",className:n?"is-active":"","aria-pressed":n,onClick:()=>s(!n),"aria-label":r("agent.webSearch"),title:r("agent.webSearch"),children:e.jsx(nn,{size:16})}),e.jsxs("button",{type:"button",className:"agent-composer__send",onClick:N,disabled:!j,"aria-label":r("agent.send"),children:[e.jsx(Ze,{size:16}),e.jsx("span",{children:r("agent.send")})]})]})]})}function z({src:n,alt:t,className:s,fallbackClassName:a,iconSize:r=18}){const[l,o]=d.useState(!1);return!n||l?e.jsx("span",{className:a??"agent-image-fallback","aria-label":t,role:"img",children:e.jsx(D,{size:r})}):e.jsx("img",{className:s,src:n,alt:t,onError:()=>o(!0)})}const P=d.forwardRef(function({image:t,selected:s=!1,compact:a=!1,onSelect:r},l){const{t:o}=p(),i=`${o("agent.selectImage")}: ${t.prompt??t.filename}`,c=`${a?"agent-result-thumb agent-result-thumb--compact":"agent-result-thumb"}${s?" is-selected":""}`;return e.jsx("button",{ref:l,type:"button",className:c,"aria-label":i,"aria-current":s?"true":void 0,onClick:()=>r(t.id),title:o("agent.selectImage"),children:e.jsx(z,{src:t.thumbUrl??t.url,alt:t.prompt??o("agent.imageAlt"),iconSize:a?14:18})})});function ln({turn:n,imagesById:t,currentImageId:s,onImageSelect:a}){const{t:r}=p(),l=n.role==="user"?r("agent.user"):r("agent.assistant"),o=n.imageIds??[],i=`agent-message agent-message--${n.role}${n.status==="streaming"?" is-streaming":""}`;return e.jsxs("article",{className:i,"aria-busy":n.status==="streaming"?"true":void 0,children:[e.jsx("div",{className:"agent-message__role",children:l}),e.jsx("p",{children:n.text}),o.length>0?e.jsx("div",{className:"agent-message__images",children:o.map(c=>{const u=t[c];return u?e.jsx(P,{image:u,selected:c===s,compact:!1,onSelect:a},c):null})}):null]})}const on=["ima2.get_image_context","ima2.web_search","ima2.generate_image"];function cn(n){return n.replace(/\s+/g," ").trim()||"tool"}function un(n){if(n.toolCalls?.length)return n.toolCalls;const t=cn(n.text);return on.filter(s=>t.includes(s)).map((s,a)=>({id:`${n.id}-fallback-${a}`,name:s,status:n.status==="error"?"error":n.status==="streaming"?"running":"complete",outputSummary:t,imageIds:s==="ima2.generate_image"?n.imageIds??[]:[],webFindingIds:s==="ima2.web_search"?n.webFindingIds??[]:[]}))}function ve(n){return!n||n<0?null:n<1e3?`${n}ms`:`${(n/1e3).toFixed(1)}s`}function dn({call:n,imagesById:t,currentImageId:s,onImageSelect:a}){const{t:r}=p(),l=n.imageIds??[],o=ve(n.durationMs);return e.jsxs("div",{className:"agent-tool-call-details",children:[e.jsxs("dl",{children:[e.jsxs("div",{children:[e.jsx("dt",{children:r("agent.toolInput")}),e.jsx("dd",{children:n.inputSummary??"-"})]}),e.jsxs("div",{children:[e.jsx("dt",{children:r("agent.toolOutput")}),e.jsx("dd",{children:n.errorMessage??n.outputSummary??"-"})]}),n.requestId?e.jsxs("div",{children:[e.jsx("dt",{children:r("agent.requestId")}),e.jsx("dd",{children:n.requestId})]}):null,o?e.jsxs("div",{children:[e.jsx("dt",{children:r("agent.duration")}),e.jsx("dd",{children:o})]}):null]}),l.length>0?e.jsx("div",{className:"agent-tool-call-details__artifacts","aria-label":r("agent.toolArtifacts"),children:l.map(i=>{const c=t[i];return c?e.jsx(P,{image:c,selected:i===s,compact:!0,onSelect:a},i):null})}):null]})}function gn({call:n,imagesById:t,currentImageId:s,onImageSelect:a}){const{t:r}=p(),l=d.useId(),[o,i]=d.useState(!1),c=ve(n.durationMs);return e.jsxs("li",{className:`agent-tool-call-row agent-tool-call-row--${n.status}`,children:[e.jsxs("button",{type:"button",className:"agent-tool-call-row__toggle","aria-expanded":o,"aria-controls":l,"aria-busy":n.status==="running"?"true":void 0,onClick:()=>i(u=>!u),children:[e.jsx("span",{className:"agent-tool-call-row__status","aria-label":r(`agent.toolStatus.${n.status}`)}),e.jsx("span",{className:"agent-tool-call-row__name",children:n.name}),n.imageIds?.length?e.jsx("span",{className:"agent-tool-call-row__meta",children:r("agent.toolImageCount",{count:n.imageIds.length})}):null,c?e.jsx("span",{className:"agent-tool-call-row__meta",children:c}):null,o?e.jsx(be,{size:13}):e.jsx(ye,{size:13})]}),e.jsx("div",{id:l,hidden:!o,children:e.jsx(dn,{call:n,imagesById:t,currentImageId:s,onImageSelect:a})})]})}function hn(n){const t=[],s=new Set;let a=!1;const r=[];for(const l of n){const o=un(l);t.push(...o);for(const i of l.imageIds??[])s.add(i);for(const i of o)for(const c of i.imageIds??[])s.add(c);l.status==="streaming"&&(a=!0);for(const i of o)r.includes(i.name)||r.push(i.name)}return{toolCalls:t,imageIds:[...s],isStreaming:a,label:r.join(" + ")||"tool"}}function mn({turns:n,imagesById:t,currentImageId:s,onImageSelect:a}){const{t:r}=p(),l=d.useId(),[o,i]=d.useState(!1),{toolCalls:c,imageIds:u,isStreaming:m,label:h}=d.useMemo(()=>hn(n),[n]),x=r(o?"agent.toolCollapse":"agent.toolExpand");return e.jsxs("article",{className:`agent-message agent-message--tool is-collapsible${m?" is-streaming":""}`,"aria-busy":m?"true":void 0,children:[e.jsxs("div",{className:"agent-message__tool-summary",children:[e.jsxs("button",{type:"button",className:"agent-message__tool-toggle","aria-expanded":o,"aria-controls":l,"aria-label":`${x}: ${h}`,onClick:()=>i(j=>!j),children:[e.jsxs("span",{className:"agent-message__tool-header",children:[e.jsx("span",{className:"agent-message__tool-dot","aria-hidden":"true"}),e.jsx("span",{className:"agent-message__role",children:r("agent.toolGroup")}),u.length>0?e.jsx("span",{className:"agent-message__tool-count",children:r("agent.toolImageCount",{count:u.length})}):null,c.length>0?e.jsx("span",{className:"agent-message__tool-count",children:r("agent.toolCallCount",{count:c.length})}):null,o?e.jsx(be,{size:14}):e.jsx(ye,{size:14})]}),e.jsx("span",{className:"agent-message__tool-label",children:h})]}),u.length>0?e.jsx("div",{className:"agent-message__tool-thumbs",children:u.map(j=>{const y=t[j];return y?e.jsx(P,{image:y,selected:j===s,compact:!0,onSelect:a},j):null})}):null]}),e.jsx("div",{id:l,className:"agent-message__tool-details",hidden:!o,children:c.length>0?e.jsx("ul",{className:"agent-tool-call-list",children:c.map(j=>e.jsx(gn,{call:j,imagesById:t,currentImageId:s,onImageSelect:a},j.id))}):null})]})}function pn(n){const t=[];let s=[];const a=()=>{s.length!==0&&(t.push({kind:"tools",turns:s,key:s.map(r=>r.id).join("+")}),s=[])};for(const r of n)r.role==="tool"?s.push(r):(a(),t.push({kind:"single",turn:r}));return a(),t}function xn({turns:n,imagesById:t,currentImageId:s,onImageSelect:a}){const{t:r}=p(),l=d.useRef(null),o=d.useMemo(()=>pn(n),[n]);return d.useEffect(()=>{const i=l.current;i&&(i.scrollTop=i.scrollHeight)},[n.length]),e.jsxs("div",{ref:l,className:"agent-message-list",children:[n.length===0?e.jsx("div",{className:"agent-message-list__empty",children:r("agent.emptyChat")}):null,o.map(i=>i.kind==="tools"?e.jsx(mn,{turns:i.turns,imagesById:t,currentImageId:s,onImageSelect:a},i.key):e.jsx(ln,{turn:i.turn,imagesById:t,currentImageId:s,onImageSelect:a},i.turn.id))]})}function jn({status:n,compacted:t=!1}){const{t:s}=p(),a=s(n==="generating"?"agent.statusGenerating":n==="reconnecting"?"agent.statusReconnecting":"agent.statusReady");return e.jsxs("span",{className:`agent-status agent-status--${n}`,"aria-live":n==="ready"?void 0:"polite",children:[n==="generating"?e.jsx("span",{className:"agent-status__dot","aria-hidden":"true"}):null,e.jsx("span",{children:a}),t?e.jsx("em",{children:s("agent.compacted")}):null]})}function fn(n){const t=n.generationStrategy==="auto"?`auto<=${n.maxAutoVariants}`:`${n.variants}x`;return`${n.model} · ${n.quality} · ${t}/${n.parallelism}p`}function bn({session:n,turns:t,imagesById:s,currentImageId:a,runtimeStatus:r,settings:l,insertedPrompt:o,onOpenModelSettings:i,onWebSearchChange:c,onImageSelect:u,onSend:m}){const{t:h}=p(),x=l?fn(l):null;return e.jsxs("section",{className:"agent-chat","aria-label":h("agent.chat"),children:[e.jsxs("header",{className:"agent-pane-header",children:[e.jsxs("div",{className:"agent-pane-header__title",children:[e.jsx("span",{children:h("agent.chat")}),e.jsx("strong",{children:n?.title??h("agent.newSession")})]}),e.jsxs("div",{className:"agent-pane-header__actions",children:[x?e.jsxs("button",{type:"button",className:"agent-model-chip","aria-label":h("agent.openModelSettings"),title:h("agent.openModelSettings"),onClick:i,children:[e.jsx("span",{children:h("agent.model")}),e.jsx("strong",{children:x})]}):null,e.jsx(jn,{status:r,compacted:n?.compacted})]})]}),e.jsx(xn,{turns:t,imagesById:s,currentImageId:a,onImageSelect:u}),e.jsx(rn,{webSearchEnabled:n?.webSearchEnabled??!1,insertedPrompt:o,onWebSearchChange:c,onSend:m})]})}const yn=["image","refs","web","memory"];function Sn({activeTab:n,onChange:t}){const{t:s}=p(),a={image:s("agent.imageTab"),refs:s("agent.refsTab"),web:s("agent.webTab"),memory:s("agent.memoryTab")};return e.jsx("div",{className:"agent-context-tabs",role:"tablist","aria-label":s("agent.contextTabs"),children:yn.map(r=>e.jsx("button",{type:"button",role:"tab","aria-selected":n===r,className:n===r?"active":"",onClick:()=>t(r),children:a[r]},r))})}function vn({activeTab:n,currentImage:t}){const{t:s}=p();return n==="refs"?e.jsx("div",{className:"agent-tab-empty",children:s("agent.noRefs")}):n==="web"?e.jsx("div",{className:"agent-tab-empty",children:s("agent.noWeb")}):n==="memory"?e.jsxs("ul",{className:"agent-memory-list",children:[e.jsx("li",{children:s("agent.memoryItemStyle")}),e.jsx("li",{children:s("agent.memoryItemSubject")})]}):e.jsxs("dl",{className:"agent-image-meta",children:[e.jsxs("div",{children:[e.jsx("dt",{children:s("agent.filename")}),e.jsx("dd",{children:t?.filename??"-"})]}),e.jsxs("div",{children:[e.jsx("dt",{children:s("agent.prompt")}),e.jsx("dd",{children:t?.prompt??t?.revisedPrompt??"-"})]})]})}function we({currentImage:n,images:t,activeTab:s,onTabChange:a,onImageSelect:r,headerAction:l}){const{t:o}=p(),i=d.useRef({}),c=d.useMemo(()=>t.findIndex(h=>h.id===n?.id),[n?.id,t]);d.useEffect(()=>{n?.id&&i.current[n.id]?.scrollIntoView({block:"nearest",inline:"nearest"})},[n?.id]);const u=d.useCallback(h=>{const x=t[h];x&&r(x.id)},[t,r]),m=d.useCallback(h=>{if(t.length===0)return;const x=c>=0?c:0;let j=null;(h.key==="ArrowLeft"||h.key==="ArrowUp")&&(j=Math.max(0,x-1)),(h.key==="ArrowRight"||h.key==="ArrowDown")&&(j=Math.min(t.length-1,x+1)),h.key==="Home"&&(j=0),h.key==="End"&&(j=t.length-1),!(j===null||j===x)&&(h.preventDefault(),u(j))},[c,t.length,u]);return e.jsxs("section",{className:"agent-image","aria-label":o("agent.imagePane"),children:[e.jsxs("header",{className:"agent-pane-header",children:[e.jsxs("div",{className:"agent-pane-header__title",children:[e.jsx("span",{children:o("agent.imagePane")}),e.jsx("strong",{children:o("agent.currentImage")})]}),l]}),e.jsx("div",{className:"agent-image__preview",tabIndex:t.length>1?0:void 0,onKeyDown:m,"aria-label":t.length>1?o("agent.variants"):void 0,children:n?e.jsx(z,{src:n.url,alt:n.prompt??o("agent.imageAlt"),fallbackClassName:"agent-image__empty",iconSize:34}):e.jsxs("div",{className:"agent-image__empty",children:[e.jsx(D,{size:34}),e.jsx("span",{children:o("agent.noImage")})]})}),e.jsx("div",{className:"agent-image__variants","aria-label":o("agent.variants"),onKeyDown:m,children:t.map(h=>e.jsx(P,{ref:x=>{i.current[h.id]=x},image:h,selected:h.id===n?.id,onSelect:r},h.id))}),e.jsx(Sn,{activeTab:s,onChange:a}),e.jsx(vn,{activeTab:s,currentImage:n})]})}const me='button, [href], input, textarea, select, [tabindex]:not([tabindex="-1"])';function ee(n,t){const s=d.useRef(null),a=d.useRef(null);return d.useEffect(()=>{if(!n)return;a.current=document.activeElement;const r=window.setTimeout(()=>{s.current?.querySelector(me)?.focus()},0),l=o=>{if(o.key==="Escape"){o.preventDefault(),t();return}if(o.key!=="Tab")return;const i=Array.from(s.current?.querySelectorAll(me)??[]);if(i.length===0)return;const c=i[0],u=i[i.length-1];o.shiftKey&&document.activeElement===c?(o.preventDefault(),u.focus()):!o.shiftKey&&document.activeElement===u&&(o.preventDefault(),c.focus())};return document.addEventListener("keydown",l),()=>{window.clearTimeout(r),document.removeEventListener("keydown",l),a.current?.focus()}},[t,n]),s}function wn({open:n,currentImage:t,images:s,activeTab:a,onTabChange:r,onImageSelect:l,onClose:o}){const{t:i}=p(),c=d.useCallback(()=>o(),[o]),u=ee(n,c);return n?e.jsxs("div",{className:"agent-dialog agent-dialog--image",role:"presentation",children:[e.jsx("button",{type:"button",className:"agent-dialog__backdrop",onClick:o,"aria-label":i("agent.closeImage")}),e.jsx("section",{ref:u,className:"agent-image-sheet",role:"dialog","aria-modal":"true","aria-label":i("agent.imagePane"),children:e.jsx(we,{currentImage:t,images:s,activeTab:a,onTabChange:r,onImageSelect:l,headerAction:e.jsx("button",{type:"button",onClick:o,"aria-label":i("agent.closeImage"),children:e.jsx(Z,{size:17})})})})]}):null}function Ie({settings:n,onChange:t}){const{t:s}=p();return e.jsxs("section",{className:"agent-settings-grid","aria-label":s("agent.model"),children:[e.jsxs("label",{children:[e.jsx("span",{children:s("agent.model")}),e.jsx("select",{value:n.model,onChange:a=>t({model:a.target.value}),children:Qe.map(a=>e.jsx("option",{value:a.value,children:s(a.fullLabelKey)},a.value))})]}),e.jsxs("label",{children:[e.jsx("span",{children:s("agent.provider")}),e.jsxs("select",{value:n.provider,onChange:a=>t({provider:a.target.value}),children:[e.jsx("option",{value:"oauth",children:"OAuth"}),e.jsx("option",{value:"api",children:"API"})]})]}),e.jsxs("label",{children:[e.jsx("span",{children:s("agent.reasoningEffort")}),e.jsxs("select",{value:n.reasoningEffort,onChange:a=>t({reasoningEffort:a.target.value}),children:[e.jsx("option",{value:"low",children:"low"}),e.jsx("option",{value:"medium",children:"medium"}),e.jsx("option",{value:"high",children:"high"}),e.jsx("option",{value:"xhigh",children:"xhigh"})]})]})]})}function In({open:n,settings:t,onSettingsChange:s,onClose:a}){const{t:r}=p(),l=d.useCallback(()=>a(),[a]),o=ee(n,l);return n?e.jsxs("div",{className:"agent-dialog agent-dialog--model",role:"presentation",children:[e.jsx("button",{type:"button",className:"agent-dialog__backdrop",onClick:a,"aria-label":r("agent.closeModelSettings")}),e.jsxs("section",{ref:o,className:"agent-model-sheet",role:"dialog","aria-modal":"true","aria-label":r("agent.modelSettings"),children:[e.jsxs("header",{children:[e.jsx("strong",{children:r("agent.modelSettings")}),e.jsx("button",{type:"button",onClick:a,"aria-label":r("agent.closeModelSettings"),children:e.jsx(Z,{size:17})})]}),e.jsx(Ie,{settings:t,onChange:s})]})]}):null}function _e({mode:n,onInsert:t}){const{t:s}=p(),a=B(u=>u.promptLibrary),r=B(u=>u.promptLibraryLoading),l=B(u=>u.loadPromptLibrary),[o,i]=d.useState("");d.useEffect(()=>{l()},[l]);const c=d.useMemo(()=>{const u=o.trim().toLowerCase();return a.prompts.filter(m=>{const h=m.tags.map(x=>x.toLowerCase());return n==="forms"&&!h.includes("agent:form")?!1:u?m.name.toLowerCase().includes(u)||m.text.toLowerCase().includes(u)||h.some(x=>x.includes(u)):!0})},[a.prompts,n,o]);return e.jsxs("section",{className:"agent-sidebar-section","aria-label":s(n==="forms"?"agent.forms":"agent.promptLibrary"),children:[e.jsx("header",{children:e.jsxs("div",{children:[e.jsx("span",{children:s(n==="forms"?"agent.forms":"agent.promptLibrary")}),e.jsx("strong",{children:c.length})]})}),e.jsxs("label",{className:"agent-sidebar-search",children:[e.jsx("span",{children:s("promptLibrary.search")}),e.jsx("input",{value:o,onChange:u=>i(u.target.value),placeholder:s("promptLibrary.search")})]}),e.jsxs("div",{className:"agent-prompt-library-list",children:[r?e.jsx("div",{className:"agent-tab-empty",children:s("common.loading")}):null,!r&&c.length===0?e.jsx("div",{className:"agent-tab-empty",children:s(n==="forms"?"agent.noForms":"promptLibrary.empty")}):null,c.map(u=>e.jsxs("article",{className:"agent-prompt-library-row",children:[e.jsx("strong",{children:u.name||s("promptLibrary.untitled")}),e.jsx("p",{children:u.text}),e.jsx("button",{type:"button",onClick:()=>t(u.text),children:s("agent.insertPrompt")})]},u.id))]})]})}function _n({onInsert:n}){return e.jsx(_e,{mode:"forms",onInsert:n})}function Nn({settings:n,onChange:t}){const{t:s}=p();return e.jsxs("section",{className:"agent-settings-grid","aria-label":s("agent.quality"),children:[e.jsxs("label",{children:[e.jsx("span",{children:s("agent.generationStrategy")}),e.jsxs("select",{value:n.generationStrategy,onChange:a=>t({generationStrategy:a.target.value}),children:[e.jsx("option",{value:"auto",children:s("agent.generationStrategyAuto")}),e.jsx("option",{value:"manual",children:s("agent.generationStrategyManual")})]})]}),e.jsxs("label",{children:[e.jsx("span",{children:s("agent.quality")}),e.jsxs("select",{value:n.quality,onChange:a=>t({quality:a.target.value}),children:[e.jsx("option",{value:"low",children:"low"}),e.jsx("option",{value:"medium",children:"medium"}),e.jsx("option",{value:"high",children:"high"})]})]}),e.jsxs("label",{children:[e.jsx("span",{children:s("agent.size")}),e.jsxs("select",{value:n.size,onChange:a=>t({size:a.target.value}),children:[e.jsx("option",{value:"1024x1024",children:"1024x1024"}),e.jsx("option",{value:"1536x1024",children:"1536x1024"}),e.jsx("option",{value:"1024x1536",children:"1024x1536"}),e.jsx("option",{value:"2048x2048",children:"2048x2048"})]})]}),e.jsxs("label",{children:[e.jsx("span",{children:s("agent.format")}),e.jsxs("select",{value:n.format,onChange:a=>t({format:a.target.value}),children:[e.jsx("option",{value:"png",children:"png"}),e.jsx("option",{value:"jpeg",children:"jpeg"}),e.jsx("option",{value:"webp",children:"webp"})]})]}),e.jsxs("label",{children:[e.jsx("span",{children:s("agent.moderation")}),e.jsxs("select",{value:n.moderation,onChange:a=>t({moderation:a.target.value}),children:[e.jsx("option",{value:"low",children:"low"}),e.jsx("option",{value:"auto",children:"auto"})]})]}),n.generationStrategy==="manual"?e.jsxs("label",{children:[e.jsx("span",{children:s("agent.variantsCount")}),e.jsx("input",{type:"number",min:1,max:8,value:n.variants,onChange:a=>t({variants:Number(a.target.value)})})]}):e.jsxs("label",{children:[e.jsx("span",{children:s("agent.maxAutoVariants")}),e.jsx("input",{type:"number",min:1,max:8,value:n.maxAutoVariants,onChange:a=>t({maxAutoVariants:Number(a.target.value)})})]}),e.jsxs("label",{children:[e.jsx("span",{children:s("agent.parallelism")}),e.jsx("input",{type:"number",min:1,max:8,value:n.parallelism,onChange:a=>t({parallelism:Number(a.target.value)})})]})]})}function Cn(n){return n.status==="queued"?`#${n.position}`:n.status==="running"?"running":n.status==="succeeded"?`${n.resultImageIds.length} img`:n.status==="failed"?n.errorCode??"failed":"canceled"}function An(n){if(!n)return"-";const t=Math.max(1,Math.round((Date.now()-n)/1e3));if(t<60)return`${t}s ago`;const s=Math.round(t/60);return s<60?`${s}m ago`:`${Math.round(s/60)}h ago`}function kn({item:n,onCancel:t,onRetry:s}){const{t:a}=p(),r=n.status==="queued",l=n.status==="failed"||n.status==="canceled",o=`${n.plan.plannedVariants||n.plan.prompts.length||1}v/${n.plan.plannedParallelism||n.options.parallelism}p · ${n.plan.source}`;return e.jsxs("div",{className:`agent-queue-row agent-queue-row--${n.status}`,children:[e.jsxs("div",{className:"agent-queue-row__main",children:[e.jsx("strong",{children:n.prompt}),e.jsxs("span",{children:[a(`agent.queueStatus.${n.status}`)," · ",Cn(n)," · ",o," · ",An(n.createdAt)]}),n.plan.reason?e.jsx("small",{children:n.plan.reason}):null,n.errorMessage?e.jsx("small",{children:n.errorMessage}):null]}),e.jsxs("div",{className:"agent-queue-row__actions",children:[r?e.jsx("button",{type:"button",onClick:()=>t(n.id),children:a("agent.cancelQueue")}):null,l?e.jsx("button",{type:"button",onClick:()=>s(n.id),children:a("agent.retryQueue")}):null]})]})}function Mn({items:n,summary:t,onCancel:s,onRetry:a}){const{t:r}=p();return e.jsxs("section",{className:"agent-sidebar-section","aria-label":r("agent.queue"),children:[e.jsx("header",{children:e.jsxs("div",{children:[e.jsx("span",{children:r("agent.queue")}),e.jsxs("strong",{children:[t?.runningCount??0," ",r("agent.runningShort")," · ",t?.queuedCount??0," ",r("agent.queuedShort")]})]})}),e.jsx("div",{className:"agent-queue-list",children:n.length===0?e.jsx("div",{className:"agent-tab-empty",children:r("agent.queueEmpty")}):n.map(l=>e.jsx(kn,{item:l,onCancel:s,onRetry:a},l.id))})]})}const Tn=["image","library","forms","quality","model","queue"];function $n({activeTab:n,onChange:t}){const{t:s}=p();return e.jsx("div",{className:"agent-sidebar-tabs",role:"tablist","aria-label":s("agent.rightSidebar"),children:Tn.map(a=>e.jsx("button",{type:"button",role:"tab",className:n===a?"active":"","aria-selected":n===a,onClick:()=>t(a),children:s(`agent.sidebarTabs.${a}`)},a))})}function En({currentImage:n,images:t,contextTab:s,sidebarTab:a,queueItems:r,runSummary:l,settings:o,onContextTabChange:i,onSidebarTabChange:c,onImageSelect:u,onSettingsChange:m,onInsertPrompt:h,onCancelQueue:x,onRetryQueue:j}){const{t:y}=p();return e.jsxs("aside",{className:"agent-right-sidebar",children:[e.jsx($n,{activeTab:a,onChange:c}),a==="image"?e.jsx(we,{currentImage:n,images:t,activeTab:s,onTabChange:i,onImageSelect:u}):null,a==="library"?e.jsx(_e,{mode:"library",onInsert:h}):null,a==="forms"?e.jsx(_n,{onInsert:h}):null,a==="quality"?e.jsxs("section",{className:"agent-sidebar-section","aria-label":y("agent.quality"),children:[e.jsx("header",{children:e.jsxs("div",{children:[e.jsx("span",{children:y("agent.quality")}),e.jsx("strong",{children:o.generationStrategy==="auto"?y("agent.generationStrategyAuto"):y("agent.generationStrategyManual")})]})}),e.jsx(Nn,{settings:o,onChange:m})]}):null,a==="model"?e.jsxs("section",{className:"agent-sidebar-section","aria-label":y("agent.modelSettings"),children:[e.jsx("header",{children:e.jsxs("div",{children:[e.jsx("span",{children:y("agent.modelSettings")}),e.jsx("strong",{children:o.model})]})}),e.jsx(Ie,{settings:o,onChange:m})]}):null,a==="queue"?e.jsx(Mn,{items:r,summary:l,onCancel:x,onRetry:j}):null]})}function Ne({summary:n}){const{t}=p();if(!n||n.status==="idle")return null;const s=n.status==="running"?t("agent.sessionRunning"):n.status==="queued"?t("agent.sessionQueued",{count:n.queuedCount}):t("agent.sessionError");return e.jsxs("span",{className:`agent-session-spinner agent-session-spinner--${n.status}`,"aria-label":s,title:s,children:[e.jsx("span",{"aria-hidden":"true"}),n.queuedCount>0?e.jsx("em",{children:n.queuedCount}):null]})}function qn(n){const t=Math.max(1,Math.round((Date.now()-n)/6e4));if(t<60)return`${t}m`;const s=Math.round(t/60);return s<24?`${s}h`:`${Math.round(s/24)}d`}function Ce({sessions:n,selectedId:t,imagesById:s,runSummaryBySession:a={},onSelect:r,onRename:l,onDelete:o}){const{t:i}=p();return e.jsx("div",{className:"agent-session-list",children:n.map(c=>{const u=c.lastImageId?s[c.lastImageId]:null;return e.jsxs("div",{className:`agent-session-row${c.id===t?" is-active":""}`,children:[e.jsxs("button",{type:"button","aria-current":c.id===t?"page":void 0,onClick:()=>r(c.id),children:[e.jsx("span",{className:"agent-session-row__thumb",children:u?e.jsx(z,{src:u.thumbUrl??u.url,alt:"",iconSize:17}):e.jsx(D,{size:17})}),e.jsxs("span",{className:"agent-session-row__body",children:[e.jsx("strong",{children:c.title}),e.jsxs("span",{children:[i("agent.imageCount",{count:c.imageCount})," · ",qn(c.updatedAt)]})]}),e.jsxs("span",{className:"agent-session-row__badges",children:[e.jsx(Ne,{summary:a[c.id]}),c.webSearchEnabled?e.jsx("em",{title:i("agent.web"),children:"W"}):null,c.compacted?e.jsx("em",{title:i("agent.compacted"),children:"C"}):null]})]}),e.jsxs("div",{className:"agent-session-row__actions",children:[e.jsx("button",{type:"button",onClick:()=>l(c.id),"aria-label":i("agent.renameSession"),title:i("agent.renameSession"),children:e.jsx(sn,{size:14})}),e.jsx("button",{type:"button",onClick:()=>o(c.id),"aria-label":i("agent.deleteSession"),title:i("agent.deleteSession"),children:e.jsx(tn,{size:14})})]})]},c.id)})})}function Ln({open:n,sessions:t,selectedId:s,imagesById:a,runSummaryBySession:r,onClose:l,onCreate:o,onSelect:i,onRename:c,onDelete:u}){const{t:m}=p(),[h,x]=d.useState(""),j=d.useCallback(()=>l(),[l]),y=ee(n,j),M=d.useMemo(()=>{const I=h.trim().toLowerCase();return I?t.filter(T=>T.title.toLowerCase().includes(I)):t},[h,t]);return n?e.jsxs("div",{className:"agent-dialog agent-dialog--drawer",role:"presentation",children:[e.jsx("button",{type:"button",className:"agent-dialog__backdrop",onClick:l,"aria-label":m("agent.closeSessions")}),e.jsxs("section",{ref:y,className:"agent-session-drawer",role:"dialog","aria-modal":"true","aria-label":m("agent.sessions"),children:[e.jsxs("header",{children:[e.jsx("strong",{children:m("agent.sessions")}),e.jsx("button",{type:"button",onClick:l,"aria-label":m("agent.closeSessions"),children:e.jsx(Z,{size:17})})]}),e.jsxs("button",{type:"button",className:"agent-sessions__create",onClick:o,children:[e.jsx(Y,{size:16}),e.jsx("span",{children:m("agent.newSession")})]}),e.jsxs("label",{className:"agent-sessions__search",children:[e.jsx(je,{size:15}),e.jsx("input",{value:h,onChange:I=>x(I.target.value),placeholder:m("agent.sessionSearch")})]}),e.jsx(Ce,{sessions:M,selectedId:s,imagesById:a,runSummaryBySession:r,onSelect:i,onRename:c,onDelete:u})]})]}):null}function Rn({sessions:n,selectedId:t,imagesById:s,runSummaryBySession:a={},onCreate:r,onSelect:l,onOpenDrawer:o}){const{t:i}=p();return e.jsxs("aside",{className:"agent-rail","aria-label":i("agent.sessions"),children:[e.jsx("button",{type:"button",onClick:o,"aria-label":i("agent.openSessions"),title:i("agent.openSessions"),children:e.jsx(fe,{size:17})}),e.jsx("button",{type:"button",onClick:r,"aria-label":i("agent.newSession"),title:i("agent.newSession"),children:e.jsx(Y,{size:17})}),e.jsx("div",{className:"agent-rail__sessions",children:n.map(c=>{const u=c.lastImageId?s[c.lastImageId]:null;return e.jsxs("button",{type:"button",className:c.id===t?"is-active":"",onClick:()=>l(c.id),title:c.title,children:[u?e.jsx(z,{src:u.thumbUrl??u.url,alt:"",iconSize:17}):e.jsx(D,{size:17}),e.jsx(Ne,{summary:a[c.id]}),c.compacted?e.jsx("span",{"aria-label":i("agent.compacted")}):null]},c.id)})})]})}function Dn(n){const{t}=p(),[s,a]=d.useState(""),r=d.useMemo(()=>{const l=s.trim().toLowerCase();return l?n.sessions.filter(o=>o.title.toLowerCase().includes(l)):n.sessions},[n.sessions,s]);return e.jsxs("aside",{className:"agent-sessions","aria-label":t("agent.sessions"),children:[e.jsxs("div",{className:"agent-sessions__brand",children:[e.jsxs("div",{children:[e.jsx("span",{children:"ima2-gen"}),e.jsx("strong",{children:t("agent.title")})]}),e.jsx(xe,{})]}),e.jsxs("button",{type:"button",className:"agent-sessions__create",onClick:n.onCreate,children:[e.jsx(Y,{size:16}),e.jsx("span",{children:t("agent.newSession")})]}),e.jsxs("label",{className:"agent-sessions__search",children:[e.jsx(je,{size:15}),e.jsx("input",{value:s,onChange:l=>a(l.target.value),placeholder:t("agent.sessionSearch")})]}),e.jsx(Ce,{...n,sessions:r})]})}function zn({layoutMode:n,session:t,currentImage:s,onOpenSessions:a,onOpenImage:r}){const{t:l}=p(),o=n==="mobile-chat-image-sheet";return e.jsxs("header",{className:"agent-topbar",children:[e.jsx("button",{type:"button",className:"agent-topbar__icon",onClick:a,"aria-label":l("agent.openSessions"),title:l("agent.openSessions"),children:e.jsx(fe,{size:18})}),e.jsxs("div",{className:"agent-topbar__title",children:[e.jsx("span",{children:l("agent.title")}),e.jsx("strong",{children:t?.title??l("agent.newSession")})]}),e.jsx(xe,{}),o?e.jsx("button",{type:"button",className:"agent-topbar__image",onClick:r,"aria-label":l("agent.openImage"),title:l("agent.openImage"),children:s?e.jsx(z,{src:s.thumbUrl??s.url,alt:"",iconSize:18}):e.jsx(D,{size:18})}):null]})}const Ae="agent-local-";let pe=0;function X(){return{sessions:[],turnsBySession:{},imagesById:{},imageIdsBySession:{},selectedSessionId:null,currentImageId:null,allowedTools:["ima2.get_image_context","ima2.web_search","ima2.generate_image"],manifest:null,queueBySession:{},runSummaryBySession:{}}}function ne(n){return pe+=1,`${Ae}${n}-${Date.now()}-${pe}`}function Bn(n){return n.id.startsWith(Ae)}function Pn(n,t){return{id:ne("user"),role:"user",text:n,imageIds:[],webFindingIds:[],status:"complete",createdAt:t}}function On(n,t){return{id:ne("pending"),role:"assistant",text:n,imageIds:[],webFindingIds:[],status:"streaming",createdAt:t}}function Wn(n){return{id:ne("error"),role:"assistant",text:n,imageIds:[],webFindingIds:[],status:"error",createdAt:Date.now()}}function Un(n,t,s){return{...n,turnsBySession:{...n.turnsBySession,[t]:[...n.turnsBySession[t]??[],...s]}}}function Qn(n,t,s,a){const r=n.turnsBySession[t]??[];return{...n,turnsBySession:{...n.turnsBySession,[t]:[...r.filter(l=>l.id!==s),Wn(a)]}}}function Fn(n,t,s){const a={...t.turnsBySession};for(const[r,l]of Object.entries(n.turnsBySession)){const o=a[r]??[],i=new Set(o.map(m=>m.id)),c=Math.max(0,...o.map(m=>m.createdAt??0)),u=l.filter(m=>s.has(m.id)||i.has(m.id)?!1:Bn(m)||m.status==="streaming"?!0:(m.createdAt??0)>=c);u.length>0&&(a[r]=[...o,...u])}return{...t,turnsBySession:a}}function Gn(){const{t:n}=p(),t=Ye(),s=B(g=>g.currentImage),a=d.useRef(!1),r=d.useRef(0),[l,o]=d.useState(()=>X()),[i,c]=d.useState(null),[u,m]=d.useState("image"),[h,x]=d.useState("image"),[j,y]=d.useState(null),[M,I]=d.useState(!1),[T,_]=d.useState(!1),[q,A]=d.useState(!1),[O,N]=d.useState("reconnecting"),S=d.useCallback(g=>{o({...X(),...g}),c(g.selectedSessionId??null)},[]),f=d.useCallback((g,b)=>{const v={...X(),...g};o(C=>Fn(C,v,b)),c(g.selectedSessionId??null)},[]),ke=()=>{r.current+=1,N("generating")},Me=()=>{r.current=Math.max(0,r.current-1),r.current===0&&N("ready")},W=d.useCallback(async g=>{N("reconnecting");const b=await oe(g);if(b.sessions.length>0){S(b),N("ready");return}const v=await ie({title:n("agent.newSession"),currentImage:s});S(v),N("ready")},[S,s,n]),te=d.useCallback(async g=>{const b=await oe(g);S(b),N("ready")},[S]);d.useEffect(()=>{a.current||(a.current=!0,W().catch(g=>{console.error(g),N("ready")}))},[W]);const L=l.sessions.find(g=>g.id===i)??null,U=l.currentImageId?l.imagesById[l.currentImageId]??null:null,se=i?(l.imageIdsBySession[i]??[]).map(g=>l.imagesById[g]).filter(g=>!!g):[],Te=L?l.turnsBySession[L.id]??[]:[],$e=i?l.queueBySession[i]??[]:[],k=i?l.runSummaryBySession[i]:void 0,R=ce(L?.generationSettings),Ee=O==="reconnecting"?"reconnecting":r.current>0||k?.status==="queued"||k?.status==="running"?"generating":"ready",qe=t==="desktop-rail",ae=t==="desktop-three-pane",Q=t!=="mobile-chat-image-sheet";d.useEffect(()=>{if(!i||k?.status!=="queued"&&k?.status!=="running")return;const g=window.setInterval(()=>{te(i).catch(console.error)},1500);return()=>window.clearInterval(g)},[te,i,k?.queuedCount,k?.runningCount,k?.status]);const F=g=>{I(!1),W(g).catch(console.error)},K=()=>{ie({title:n("agent.newSession"),currentImage:null}).then(S).catch(console.error)},re=g=>{const b=l.sessions.find(C=>C.id===g),v=window.prompt(n("agent.renameSession"),b?.title??"");v?.trim()&&J(g,{title:v.trim()}).then(S).catch(console.error)},le=g=>{const b=l.sessions.find(v=>v.id===g);!b||!window.confirm(n("agent.deleteConfirm",{title:b.title}))||Ge(g).then(S).catch(console.error)},G=g=>{if(!i)return;const b=ce({...R,...g});o(v=>({...v,sessions:v.sessions.map(C=>C.id===i?{...C,generationSettings:b,webSearchEnabled:b.webSearchEnabled}:C)})),J(i,{generationSettings:g}).then(S).catch(console.error)},Le=g=>{G({webSearchEnabled:g})},V=g=>{if(!i||l.currentImageId===g)return;const b=i;o(v=>({...v,currentImageId:g})),J(b,{currentImageId:g}).then(S).catch(console.error)},Re=g=>{y({id:Date.now(),text:g})},De=g=>{He(g).then(S).catch(console.error)},ze=g=>{Je(g).then(S).catch(console.error)},Be=()=>{if(Q){x("model");return}A(!0)},Pe=g=>{if(!i)return;const b=i,v=Date.now(),C=Pn(g,v),H=On(n("agent.pending"),v+1),Oe=new Set([C.id,H.id]);ke(),o($=>Un($,b,[C,H])),Ve(b,g,R).then($=>f($.workspace,Oe)).catch($=>{const We=$ instanceof Error?$.message:String($);o(Ue=>Qn(Ue,b,H.id,We))}).finally(Me)};return e.jsxs("main",{className:`agent-workspace agent-workspace--${t}`,"data-layout":t,"aria-label":n("agent.workspace"),children:[ae?null:e.jsx(zn,{layoutMode:t,session:L,currentImage:U,onOpenSessions:()=>I(!0),onOpenImage:()=>_(!0)}),e.jsxs("div",{className:"agent-workspace__body",children:[ae?e.jsx(Dn,{sessions:l.sessions,selectedId:i??"",imagesById:l.imagesById,runSummaryBySession:l.runSummaryBySession,onCreate:K,onSelect:F,onRename:re,onDelete:le}):null,qe?e.jsx(Rn,{sessions:l.sessions,selectedId:i??"",imagesById:l.imagesById,runSummaryBySession:l.runSummaryBySession,onCreate:K,onSelect:F,onOpenDrawer:()=>I(!0)}):null,e.jsx(bn,{session:L,turns:Te,imagesById:l.imagesById,currentImageId:l.currentImageId,runtimeStatus:Ee,settings:R,insertedPrompt:j,onOpenModelSettings:Be,onWebSearchChange:Le,onImageSelect:V,onSend:Pe}),Q?e.jsx(En,{currentImage:U,images:se,contextTab:u,sidebarTab:h,queueItems:$e,runSummary:k,settings:R,onContextTabChange:m,onSidebarTabChange:x,onImageSelect:V,onSettingsChange:G,onInsertPrompt:Re,onCancelQueue:De,onRetryQueue:ze}):null]}),e.jsx(Ln,{open:M,sessions:l.sessions,selectedId:i??"",imagesById:l.imagesById,runSummaryBySession:l.runSummaryBySession,onClose:()=>I(!1),onCreate:K,onSelect:F,onRename:re,onDelete:le}),e.jsx(wn,{open:T,currentImage:U,images:se,activeTab:u,onTabChange:m,onImageSelect:V,onClose:()=>_(!1)}),e.jsx(In,{open:q&&!Q,settings:R,onSettingsChange:G,onClose:()=>A(!1)})]})}export{Gn as AgentWorkspace};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{u,l,j as e,m as v,a as N,e as y}from"./index-
|
|
1
|
+
import{u,l,j as e,m as v,a as N,e as y}from"./index-BAN6lKgf.js";function f(s){const r=s.slots.filter(c=>c.kind==="text"||c.textKind).length,d=s.slots.filter(c=>c.kind==="image").length;return`${r} text / ${d} image`}function _(){const{t:s}=u(),r=l(t=>t.templates),d=l(t=>t.imageTemplateId),c=l(t=>t.setImageTemplate);return e.jsxs("section",{className:"card-news-panel",children:[e.jsxs("div",{className:"card-news-panel__head",children:[e.jsx("span",{children:s("cardNews.imageTemplate")}),e.jsx("button",{type:"button",disabled:!0,title:s("cardNews.newTemplateLater"),children:"+"})]}),e.jsx("div",{className:"card-news-template-grid",children:r.map(t=>e.jsxs("button",{type:"button",className:`card-news-template${d===t.id?" selected":""}`,onClick:()=>c(t.id),children:[e.jsx("img",{src:t.previewUrl,alt:""}),e.jsxs("span",{className:"card-news-template__body",children:[e.jsx("span",{className:"card-news-template__name",children:t.name}),e.jsx("span",{className:"card-news-template__meta",children:f(t)}),e.jsx("span",{className:"card-news-template__sizes",children:t.recommendedOutputSizes.join(" · ")})]})]},t.id))})]})}function k(){const{t:s}=u(),r=l(t=>t.roleTemplates),d=l(t=>t.roleTemplateId),c=l(t=>t.setRoleTemplate);return e.jsxs("section",{className:"card-news-panel",children:[e.jsx("div",{className:"card-news-panel__head",children:e.jsx("span",{children:s("cardNews.roleTemplate")})}),e.jsx("div",{className:"card-news-role-row",children:r.map(t=>e.jsx("button",{type:"button",className:d===t.id?"selected":"",onClick:()=>c(t.id),children:t.name},t.id))})]})}function C({status:s,locked:r}){const{t:d}=u(),c=r?"locked":s,t=c==="queued"||c==="generating";return e.jsxs("span",{className:`card-news-status-badge card-news-status-badge--${c}`,children:[t?e.jsx("span",{className:"card-news-spinner","aria-hidden":"true"}):null,d(`cardNews.status.${c}`)]})}function T(s,r){const d=`cardNews.roles.${s}`,c=r(d);return c===d?s:c}function F(){const{t:s}=u(),r=l(t=>t.activePlan),d=l(t=>t.selectedCardId),c=l(t=>t.selectCard);return r?e.jsx("div",{className:"card-news-deck","aria-label":"Card deck",onWheel:v,children:r.cards.map(t=>e.jsxs("button",{type:"button",className:`card-news-deck-card${d===t.id?" selected":""}`,onClick:()=>c(t.id),children:[e.jsx("span",{children:String(t.order).padStart(2,"0")}),t.url?e.jsx("img",{src:t.url,alt:"",className:"card-news-deck-card__thumb"}):null,e.jsx("strong",{children:T(t.role,s)}),e.jsx("small",{children:t.headline||t.textFields.find(m=>m.renderMode==="in-image")?.text}),e.jsx(C,{status:t.status,locked:t.locked})]},t.id))}):null}const I=[];function S(){const{t:s}=u(),r=l(t=>t.activePlan?.cards??I),d=l(t=>t.generating),c={total:r.length,done:r.filter(t=>t.status==="generated").length,queued:r.filter(t=>t.status==="queued").length,errors:r.filter(t=>t.status==="error").length,skipped:r.filter(t=>t.locked||t.status==="skipped").length};return c.total?e.jsxs("div",{className:"card-news-batch-bar","aria-live":"polite",children:[e.jsx("span",{children:d?s("cardNews.progress.generating",{done:c.done,total:c.total}):s("cardNews.progress.summary",{done:c.done,total:c.total})}),e.jsx("span",{children:s("cardNews.progress.detail",{queued:c.queued,errors:c.errors,skipped:c.skipped})})]}):null}function $({meta:s}){const{t:r}=u();if(!s)return null;const d=s.mode==="structured-output"?r("cardNews.planner.structured"):s.mode==="json-mode"?r("cardNews.planner.jsonMode"):r("cardNews.planner.fallback");return e.jsxs("span",{className:"card-news-planner-badge",children:[d," · ",s.model,s.repaired?` · ${r("cardNews.planner.repaired")}`:""]})}function M(s){const r=s.textFields.filter(d=>d.renderMode==="in-image"&&d.text).map(d=>`[${d.placement}] ${d.text}`);return[s.headline,...r].filter(Boolean).join(`
|
|
2
2
|
`)}function E(s,r){const d=s.slotId?r?.slots.find(c=>c.id===s.slotId):null;return d?{left:`${d.x/20.48}%`,top:`${d.y/20.48}%`,width:`${d.w/20.48}%`,minHeight:`${d.h/20.48}%`}:P(s)}const w={"top-left":{left:"10%",top:"10%",width:"34%"},"top-center":{left:"50%",top:"10%",width:"42%",transform:"translateX(-50%)"},"top-right":{right:"10%",top:"10%",width:"34%"},"center-left":{left:"10%",top:"50%",width:"34%",transform:"translateY(-50%)"},center:{left:"50%",top:"50%",width:"44%",transform:"translate(-50%, -50%)"},"center-right":{right:"10%",top:"50%",width:"34%",transform:"translateY(-50%)"},"bottom-left":{left:"10%",bottom:"10%",width:"34%"},"bottom-center":{left:"50%",bottom:"10%",width:"42%",transform:"translateX(-50%)"},"bottom-right":{right:"10%",bottom:"10%",width:"34%"},free:{left:"50%",top:"50%",width:"44%",transform:"translate(-50%, -50%)"}};function P(s){return w[s.placement]||w.center}function L(){const{t:s}=u(),r=l(a=>a.activePlan),d=l(a=>a.selectedCardId),c=l(a=>a.selectedTextFieldId),t=l(a=>a.templates),m=l(a=>a.plannerMeta),o=l(a=>a.retryCard),p=l(a=>a.selectTextField),i=r?.cards.find(a=>a.id===d)||r?.cards[0],x=r?t.find(a=>a.id===r.imageTemplateId):void 0,n=i?.textFields.filter(a=>a.renderMode==="in-image")||[];return!r||!i?e.jsxs("section",{className:"card-news-empty",children:[e.jsxs("div",{className:"card-news-empty__deck","aria-hidden":"true",children:[e.jsx("div",{className:"card-news-empty__card card-news-empty__card--back"}),e.jsx("div",{className:"card-news-empty__card card-news-empty__card--mid"}),e.jsxs("div",{className:"card-news-empty__card",children:[e.jsx("span",{}),e.jsx("strong",{}),e.jsx("em",{})]})]}),e.jsxs("div",{className:"card-news-empty__copy",children:[e.jsx("span",{children:s("uiMode.cardNews")}),e.jsx("h2",{children:s("cardNews.emptyTitle")}),e.jsx("p",{children:s("cardNews.emptyBody")})]})]}):e.jsxs("section",{className:"card-news-stage",children:[e.jsxs("div",{className:"card-news-stage__header",children:[e.jsxs("div",{children:[e.jsx("h2",{children:r.title}),e.jsx("p",{children:r.generationStrategy}),e.jsx($,{meta:m})]}),e.jsxs("span",{children:[i.order," / ",r.cards.length]})]}),e.jsx(S,{}),e.jsxs("div",{className:"card-news-preview",children:[i.status==="queued"||i.status==="generating"?e.jsx("div",{className:"card-news-preview__loading",children:s("cardNews.progress.cardGenerating")}):i.status==="error"?e.jsxs("div",{className:"card-news-preview__error",children:[e.jsx("span",{children:i.error||s("cardNews.error")}),i.locked?null:e.jsx("button",{type:"button",onClick:()=>{o(i.id)},children:s("cardNews.retryCard")})]}):i.url?e.jsx("img",{src:i.url,alt:i.headline}):e.jsx("div",{className:"card-news-preview__slot"}),n.length?e.jsx("div",{className:"card-news-stage-overlay",children:n.map(a=>e.jsx("button",{type:"button",className:`card-news-stage-overlay__field card-news-stage-overlay__field--${a.placement}${c===a.id?" selected":""}`,style:E(a,x),onClick:()=>p(a.id),"aria-label":s("cardNews.selectTextField",{text:a.text||a.kind}),children:e.jsx("span",{children:a.text||a.kind})},a.id))}):null]}),i.url?e.jsxs("div",{className:"card-news-result-actions",children:[e.jsx("button",{type:"button",onClick:()=>navigator.clipboard?.writeText(i.visualPrompt),children:s("cardNews.actions.copyPrompt")}),e.jsx("button",{type:"button",onClick:()=>navigator.clipboard?.writeText(M(i)),children:s("cardNews.actions.copyCopy")}),e.jsx("a",{href:i.url,target:"_blank",rel:"noreferrer",children:s("cardNews.actions.openImage")}),e.jsx("a",{href:i.url,download:!0,children:s("cardNews.actions.downloadCard")})]}):null]})}function g(s,r){const d=`cardNews.placements.${s}`,c=r(d);return c===d?s:c}function R({placement:s}){const{t:r}=u();return e.jsx("span",{className:"card-news-placement-chip",children:g(s,r)})}const B=["headline","body","caption","cta","badge","number"],D=["top-left","top-center","top-right","center-left","center","center-right","bottom-left","bottom-center","bottom-right","free"],q=["in-image","ui-only"],K=["primary","secondary","supporting"];function h(s,r,d){const c=`cardNews.${s}.${r}`,t=d(c);return t===c?r:t}function A({field:s,locked:r,selected:d=!1,onSelect:c,onChange:t,onRemove:m}){const{t:o}=u(),p=s.text.length,i=typeof s.maxChars=="number"&&p>s.maxChars,x=s.maxChars===null||s.maxChars>80;return e.jsxs("div",{className:`card-news-text-field-card${d?" selected":""}`,onClick:c,children:[e.jsxs("div",{className:"card-news-text-field-card__header",children:[e.jsx("span",{children:h("textKinds",s.kind,o)}),e.jsx(R,{placement:s.placement})]}),e.jsxs("label",{className:"card-news-field",children:[e.jsx("span",{children:o("cardNews.textFieldText")}),x?e.jsx("textarea",{value:s.text,disabled:r,onChange:n=>t({text:n.target.value,source:"user"})}):e.jsx("input",{value:s.text,disabled:r,onChange:n=>t({text:n.target.value,source:"user"})})]}),e.jsxs("div",{className:"card-news-text-field-card__grid",children:[e.jsxs("label",{className:"card-news-field",children:[e.jsx("span",{children:o("cardNews.textKind")}),e.jsx("select",{value:s.kind,disabled:r,onChange:n=>t({kind:n.target.value,source:"user"}),children:B.map(n=>e.jsx("option",{value:n,children:h("textKinds",n,o)},n))})]}),e.jsxs("label",{className:"card-news-field",children:[e.jsx("span",{children:o("cardNews.placement")}),e.jsx("select",{value:s.placement,disabled:r,onChange:n=>t({placement:n.target.value,source:"user"}),children:D.map(n=>e.jsx("option",{value:n,children:g(n,o)},n))})]}),e.jsxs("label",{className:"card-news-field",children:[e.jsx("span",{children:o("cardNews.renderMode")}),e.jsx("select",{value:s.renderMode,disabled:r,onChange:n=>t({renderMode:n.target.value,source:"user"}),children:q.map(n=>e.jsx("option",{value:n,children:h("renderModes",n,o)},n))})]}),e.jsxs("label",{className:"card-news-field",children:[e.jsx("span",{children:o("cardNews.hierarchyLabel")}),e.jsx("select",{value:s.hierarchy,disabled:r,onChange:n=>t({hierarchy:n.target.value,source:"user"}),children:K.map(n=>e.jsx("option",{value:n,children:h("hierarchy",n,o)},n))})]})]}),e.jsxs("div",{className:`card-news-text-field-card__meta${i?" over":""}`,children:[e.jsx("span",{children:s.maxChars===null?p:`${p}/${s.maxChars}`}),i?e.jsx("span",{children:o("cardNews.textTooLong")}):null,m?e.jsx("button",{type:"button",disabled:r,onClick:m,children:o("cardNews.removeTextField")}):null]})]})}function H(){return{id:`tf_${Date.now().toString(36)}`,kind:"body",text:"",renderMode:"in-image",placement:"center",slotId:null,hierarchy:"supporting",maxChars:null,language:null,source:"user"}}function Y(){const{t:s}=u(),r=l(a=>a.activePlan),d=l(a=>a.selectedCardId),c=l(a=>a.selectedTextFieldId),t=l(a=>a.updateCard),m=l(a=>a.updateTextField),o=l(a=>a.addTextField),p=l(a=>a.removeTextField),i=l(a=>a.selectTextField),x=l(a=>a.retryCard),n=r?.cards.find(a=>a.id===d)||r?.cards[0];return n?e.jsxs("aside",{className:"card-news-inspector",children:[e.jsx("div",{className:"section-title",children:s("cardNews.inspector")}),e.jsxs("div",{className:"card-news-inspector-group",children:[e.jsx("span",{className:"card-news-inspector-label",children:s("cardNews.cardTitle")}),e.jsxs("label",{className:"card-news-field",children:[e.jsx("span",{children:s("cardNews.headline")}),e.jsx("input",{value:n.headline,disabled:n.locked,onChange:a=>t(n.id,{headline:a.target.value})})]})]}),e.jsxs("div",{className:"card-news-inspector-group",children:[e.jsxs("div",{className:"card-news-inspector-row",children:[e.jsx("span",{className:"card-news-inspector-label",children:s("cardNews.textFields")}),e.jsx("button",{type:"button",className:"secondary-btn",disabled:n.locked,onClick:()=>o(n.id,H()),children:s("cardNews.addTextField")})]}),n.textFields.length?n.textFields.map(a=>e.jsx(A,{field:a,locked:n.locked,selected:c===a.id,onSelect:()=>i(a.id),onChange:b=>m(n.id,a.id,b),onRemove:()=>p(n.id,a.id)},a.id)):e.jsx("p",{className:"card-news-muted",children:s("cardNews.noTextFields")})]}),e.jsxs("details",{className:"card-news-inspector-group card-news-advanced-prompt",children:[e.jsx("summary",{children:s("cardNews.designPrompt")}),e.jsxs("label",{className:"card-news-field",children:[e.jsx("span",{children:s("cardNews.visualPrompt")}),e.jsx("textarea",{value:n.visualPrompt,disabled:n.locked,onChange:a=>t(n.id,{visualPrompt:a.target.value})})]})]}),n.imageFilename?e.jsxs("div",{className:"card-news-generated-meta",children:[e.jsx("span",{children:s("cardNews.generatedMeta")}),e.jsx("code",{children:n.imageFilename}),e.jsx("span",{children:n.status})]}):null,n.locked?e.jsx("p",{className:"card-news-locked-help",children:s("cardNews.lockedHelp")}):null,e.jsx("button",{type:"button",className:`secondary-btn${n.locked?" active":""}`,onClick:()=>t(n.id,{locked:!n.locked}),children:n.locked?s("cardNews.locked"):s("cardNews.unlocked")}),e.jsx("button",{type:"button",className:"secondary-btn",disabled:n.locked||!["draft","error"].includes(n.status),onClick:()=>{x(n.id)},children:s("cardNews.retryCard")})]}):e.jsxs("aside",{className:"card-news-inspector card-news-inspector-empty",children:[e.jsx("div",{className:"section-title",children:s("cardNews.inspector")}),e.jsxs("div",{className:"card-news-inspector-empty__mock","aria-hidden":"true",children:[e.jsx("span",{}),e.jsx("strong",{}),e.jsx("i",{}),e.jsx("i",{})]}),e.jsx("p",{children:s("cardNews.noCard")})]})}const j="ima2:cardNewsMobileNoticeShown";function z(){const{t:s}=u(),r=y(),[d,c]=N.useState(()=>{if(typeof window>"u")return!0;try{return localStorage.getItem(j)==="1"}catch{return!1}});if(!r||d)return null;const t=()=>{try{localStorage.setItem(j,"1")}catch{}c(!0)};return e.jsxs("div",{className:"card-news-mobile-notice",role:"status",children:[e.jsx("span",{children:s("mobile.cardNewsBanner")}),e.jsx("button",{type:"button",onClick:t,children:s("mobile.dismiss")})]})}function W(){const{t:s}=u(),r=l(c=>c.hydrate),d=l(c=>c.error);return N.useEffect(()=>{r()},[r]),e.jsxs("main",{className:"card-news-workspace","aria-label":s("cardNews.workspace"),children:[e.jsx(z,{}),e.jsxs("div",{className:"card-news-setup",children:[e.jsx(_,{}),e.jsx(k,{})]}),e.jsxs("div",{className:"card-news-main",children:[d?e.jsx("div",{className:"card-news-error",role:"alert",children:d}):null,e.jsx(L,{}),e.jsx(F,{})]}),e.jsx(Y,{})]})}export{W as CardNewsWorkspace};
|