ima2-gen 1.1.9 → 1.1.11

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.
Files changed (234) hide show
  1. package/README.md +10 -1
  2. package/bin/commands/annotate.js +5 -3
  3. package/bin/commands/annotate.ts +13 -12
  4. package/bin/commands/cancel.js +5 -2
  5. package/bin/commands/cancel.ts +6 -3
  6. package/bin/commands/canvas-versions.js +4 -4
  7. package/bin/commands/canvas-versions.ts +10 -10
  8. package/bin/commands/capabilities.js +90 -0
  9. package/bin/commands/capabilities.ts +93 -0
  10. package/bin/commands/cardnews.js +3 -1
  11. package/bin/commands/cardnews.ts +18 -17
  12. package/bin/commands/comfy.js +2 -2
  13. package/bin/commands/comfy.ts +4 -4
  14. package/bin/commands/config.js +11 -143
  15. package/bin/commands/config.ts +33 -147
  16. package/bin/commands/defaults.js +180 -0
  17. package/bin/commands/defaults.ts +192 -0
  18. package/bin/commands/edit.js +45 -9
  19. package/bin/commands/edit.ts +44 -10
  20. package/bin/commands/gen.js +55 -14
  21. package/bin/commands/gen.ts +56 -18
  22. package/bin/commands/history.js +2 -1
  23. package/bin/commands/history.ts +11 -10
  24. package/bin/commands/ls.js +10 -5
  25. package/bin/commands/ls.ts +15 -11
  26. package/bin/commands/metadata.js +4 -1
  27. package/bin/commands/metadata.ts +5 -2
  28. package/bin/commands/multimode.js +64 -7
  29. package/bin/commands/multimode.ts +59 -9
  30. package/bin/commands/node.js +18 -8
  31. package/bin/commands/node.ts +24 -15
  32. package/bin/commands/observability.js +7 -7
  33. package/bin/commands/observability.ts +21 -21
  34. package/bin/commands/ping.js +4 -2
  35. package/bin/commands/ping.ts +5 -3
  36. package/bin/commands/prompt.js +14 -11
  37. package/bin/commands/prompt.ts +40 -38
  38. package/bin/commands/ps.js +10 -7
  39. package/bin/commands/ps.ts +15 -12
  40. package/bin/commands/session.js +4 -3
  41. package/bin/commands/session.ts +23 -22
  42. package/bin/commands/show.js +5 -2
  43. package/bin/commands/show.ts +8 -5
  44. package/bin/commands/skill.js +62 -0
  45. package/bin/commands/skill.ts +70 -0
  46. package/bin/ima2.js +14 -5
  47. package/bin/ima2.ts +16 -7
  48. package/bin/lib/args.ts +20 -1
  49. package/bin/lib/client.ts +20 -7
  50. package/bin/lib/config-store.js +156 -0
  51. package/bin/lib/config-store.ts +163 -0
  52. package/bin/lib/error-hints.ts +3 -3
  53. package/bin/lib/files.ts +8 -8
  54. package/bin/lib/output.js +19 -17
  55. package/bin/lib/output.ts +38 -23
  56. package/bin/lib/platform.js +3 -1
  57. package/bin/lib/platform.ts +9 -7
  58. package/bin/lib/recover-output.js +104 -0
  59. package/bin/lib/recover-output.ts +139 -0
  60. package/bin/lib/star-prompt.ts +1 -1
  61. package/bin/lib/storage-doctor.ts +3 -2
  62. package/config.js +1 -1
  63. package/config.ts +8 -6
  64. package/docs/CLI.md +64 -8
  65. package/docs/migration/runtime-test-inventory.md +146 -0
  66. package/lib/assetLifecycle.ts +8 -8
  67. package/lib/canvasVersionStore.js +2 -0
  68. package/lib/canvasVersionStore.ts +54 -12
  69. package/lib/capabilities.js +70 -0
  70. package/lib/capabilities.ts +84 -0
  71. package/lib/cardNewsGenerator.js +13 -3
  72. package/lib/cardNewsGenerator.ts +123 -14
  73. package/lib/cardNewsJobStore.ts +47 -12
  74. package/lib/cardNewsManifestStore.js +13 -6
  75. package/lib/cardNewsManifestStore.ts +56 -14
  76. package/lib/cardNewsPlanner.js +11 -9
  77. package/lib/cardNewsPlanner.ts +86 -30
  78. package/lib/cardNewsPlannerClient.js +23 -10
  79. package/lib/cardNewsPlannerClient.ts +58 -17
  80. package/lib/cardNewsPlannerPrompt.js +2 -0
  81. package/lib/cardNewsPlannerPrompt.ts +2 -0
  82. package/lib/cardNewsPlannerSchema.js +43 -36
  83. package/lib/cardNewsPlannerSchema.ts +120 -58
  84. package/lib/cardNewsTemplateStore.js +20 -35
  85. package/lib/cardNewsTemplateStore.ts +100 -58
  86. package/lib/codexDetect.js +5 -3
  87. package/lib/codexDetect.ts +5 -3
  88. package/lib/comfyBridge.js +3 -1
  89. package/lib/comfyBridge.ts +37 -16
  90. package/lib/db.ts +5 -5
  91. package/lib/errInfo.js +32 -0
  92. package/lib/errInfo.ts +43 -0
  93. package/lib/errorClassify.ts +2 -2
  94. package/lib/generationCancel.js +18 -0
  95. package/lib/generationCancel.ts +28 -0
  96. package/lib/generationErrors.ts +37 -11
  97. package/lib/historyIndex.js +34 -0
  98. package/lib/historyIndex.ts +51 -0
  99. package/lib/historyList.js +10 -6
  100. package/lib/historyList.ts +17 -13
  101. package/lib/imageMetadata.js +1 -1
  102. package/lib/imageMetadata.ts +8 -8
  103. package/lib/imageMetadataStore.ts +6 -6
  104. package/lib/imageModels.ts +6 -4
  105. package/lib/inflight.js +32 -8
  106. package/lib/inflight.ts +93 -16
  107. package/lib/localImportStore.js +2 -0
  108. package/lib/localImportStore.ts +8 -5
  109. package/lib/logger.js +7 -5
  110. package/lib/logger.ts +34 -23
  111. package/lib/nodeStore.js +2 -0
  112. package/lib/nodeStore.ts +20 -10
  113. package/lib/oauthLauncher.js +2 -2
  114. package/lib/oauthLauncher.ts +7 -6
  115. package/lib/oauthNormalize.ts +1 -1
  116. package/lib/oauthProxy/errors.js +93 -0
  117. package/lib/oauthProxy/errors.ts +128 -0
  118. package/lib/oauthProxy/generators.js +426 -0
  119. package/lib/oauthProxy/generators.ts +494 -0
  120. package/lib/oauthProxy/index.js +8 -0
  121. package/lib/oauthProxy/index.ts +28 -0
  122. package/lib/oauthProxy/prompts.js +99 -0
  123. package/lib/oauthProxy/prompts.ts +123 -0
  124. package/lib/oauthProxy/references.js +32 -0
  125. package/lib/oauthProxy/references.ts +45 -0
  126. package/lib/oauthProxy/runtime.js +101 -0
  127. package/lib/oauthProxy/runtime.ts +115 -0
  128. package/lib/oauthProxy/streams.js +211 -0
  129. package/lib/oauthProxy/streams.ts +232 -0
  130. package/lib/oauthProxy/types.js +6 -0
  131. package/lib/oauthProxy/types.ts +9 -0
  132. package/lib/oauthProxy.js +3 -911
  133. package/lib/oauthProxy.ts +3 -995
  134. package/lib/openDirectory.js +5 -3
  135. package/lib/openDirectory.ts +9 -7
  136. package/lib/pngInfo.ts +2 -2
  137. package/lib/promptImport/curatedSources.ts +4 -2
  138. package/lib/promptImport/discoveryRegistry.js +17 -9
  139. package/lib/promptImport/discoveryRegistry.ts +121 -28
  140. package/lib/promptImport/errors.ts +6 -6
  141. package/lib/promptImport/githubDiscovery.js +13 -7
  142. package/lib/promptImport/githubDiscovery.ts +84 -23
  143. package/lib/promptImport/githubFolder.js +22 -14
  144. package/lib/promptImport/githubFolder.ts +130 -41
  145. package/lib/promptImport/githubSource.js +3 -1
  146. package/lib/promptImport/githubSource.ts +32 -14
  147. package/lib/promptImport/gptImageHints.ts +10 -8
  148. package/lib/promptImport/parsePromptCandidates.js +2 -0
  149. package/lib/promptImport/parsePromptCandidates.ts +43 -17
  150. package/lib/promptImport/promptIndex.js +33 -23
  151. package/lib/promptImport/promptIndex.ts +124 -46
  152. package/lib/promptImport/rankPromptCandidates.js +2 -2
  153. package/lib/promptImport/rankPromptCandidates.ts +22 -6
  154. package/lib/promptImport/types.js +1 -0
  155. package/lib/promptImport/types.ts +103 -0
  156. package/lib/promptSafetyPolicy.js +5 -0
  157. package/lib/promptSafetyPolicy.ts +5 -0
  158. package/lib/providerOptions.ts +3 -2
  159. package/lib/referenceImageCompress.ts +15 -6
  160. package/lib/refs.js +2 -0
  161. package/lib/refs.ts +27 -11
  162. package/lib/requestLogger.ts +4 -3
  163. package/lib/responsesImageAdapter.js +54 -17
  164. package/lib/responsesImageAdapter.ts +169 -36
  165. package/lib/runtimeContext.js +100 -0
  166. package/lib/runtimeContext.ts +131 -0
  167. package/lib/runtimePorts.js +2 -1
  168. package/lib/runtimePorts.ts +28 -16
  169. package/lib/sessionStore.js +7 -5
  170. package/lib/sessionStore.ts +73 -37
  171. package/lib/storageMigration.js +18 -11
  172. package/lib/storageMigration.ts +63 -37
  173. package/lib/styleSheet.js +7 -6
  174. package/lib/styleSheet.ts +34 -23
  175. package/lib/visibleTextLanguagePolicy.js +7 -0
  176. package/lib/visibleTextLanguagePolicy.ts +7 -0
  177. package/package.json +6 -3
  178. package/routes/annotations.js +9 -4
  179. package/routes/annotations.ts +35 -12
  180. package/routes/canvasVersions.js +8 -3
  181. package/routes/canvasVersions.ts +14 -9
  182. package/routes/capabilities.js +13 -0
  183. package/routes/capabilities.ts +18 -0
  184. package/routes/cardNews.js +31 -18
  185. package/routes/cardNews.ts +66 -38
  186. package/routes/comfy.js +6 -3
  187. package/routes/comfy.ts +10 -6
  188. package/routes/edit.js +38 -7
  189. package/routes/edit.ts +63 -12
  190. package/routes/generate.js +71 -23
  191. package/routes/generate.ts +85 -31
  192. package/routes/health.js +9 -6
  193. package/routes/health.ts +17 -13
  194. package/routes/history.js +85 -36
  195. package/routes/history.ts +112 -44
  196. package/routes/imageImport.js +6 -2
  197. package/routes/imageImport.ts +9 -5
  198. package/routes/index.js +5 -1
  199. package/routes/index.ts +6 -1
  200. package/routes/metadata.js +9 -4
  201. package/routes/metadata.ts +13 -7
  202. package/routes/multimode.js +161 -38
  203. package/routes/multimode.ts +216 -58
  204. package/routes/nodes.js +55 -26
  205. package/routes/nodes.ts +108 -40
  206. package/routes/promptImport.js +42 -36
  207. package/routes/promptImport.ts +89 -64
  208. package/routes/prompts.js +62 -39
  209. package/routes/prompts.ts +120 -71
  210. package/routes/sessions.js +46 -24
  211. package/routes/sessions.ts +60 -35
  212. package/routes/storage.js +4 -2
  213. package/routes/storage.ts +13 -5
  214. package/server.js +25 -21
  215. package/server.ts +57 -37
  216. package/skills/ima2/SKILL.md +206 -0
  217. package/ui/dist/.vite/manifest.json +11 -10
  218. package/ui/dist/assets/{CardNewsWorkspace-BJOCey7Z.js → CardNewsWorkspace-j4ULtNdk.js} +1 -1
  219. package/ui/dist/assets/NodeCanvas-Bc7BUViM.js +7 -0
  220. package/ui/dist/assets/{PromptImportDialog-Dqu1VpUh.js → PromptImportDialog-DBKprBEo.js} +2 -2
  221. package/ui/dist/assets/{PromptImportDiscoverySection-Dg8T9X0L.js → PromptImportDiscoverySection-m5v55Zsy.js} +1 -1
  222. package/ui/dist/assets/PromptImportFolderSection-DnPvJkfJ.js +1 -0
  223. package/ui/dist/assets/PromptLibraryPanel-BMSqfK9C.js +2 -0
  224. package/ui/dist/assets/SettingsWorkspace-Cj3LD0uu.js +1 -0
  225. package/ui/dist/assets/{index-Cvld7dUZ.js → index-9aOJKFI-.js} +1 -1
  226. package/ui/dist/assets/index-De-AWE6B.css +1 -0
  227. package/ui/dist/assets/index-tQhOLR-C.js +28 -0
  228. package/ui/dist/index.html +2 -2
  229. package/ui/dist/assets/NodeCanvas-C3dzYNsk.js +0 -7
  230. package/ui/dist/assets/PromptImportFolderSection-DBaqsFO4.js +0 -1
  231. package/ui/dist/assets/PromptLibraryPanel-p5QqR97M.js +0 -2
  232. package/ui/dist/assets/SettingsWorkspace-B5bSAZ6u.js +0 -1
  233. package/ui/dist/assets/index-C9cXwiWE.js +0 -25
  234. package/ui/dist/assets/index-CGMIkZXn.css +0 -1
@@ -0,0 +1,206 @@
1
+ ---
2
+ name: ima2
3
+ description: "Use the ima2-gen CLI/server to generate, edit, inspect, and manage local AI image generation jobs."
4
+ ---
5
+
6
+ # ima2 Skill
7
+
8
+ Use this skill when an agent needs to operate `ima2-gen` from an installed package or local checkout.
9
+
10
+ Prefer this package skill for ima2 work instead of a generic OpenAI image-generation
11
+ skill. The generic skill can describe the OpenAI API, but this skill knows ima2's
12
+ local server, OAuth/API provider split, history, in-flight jobs, packaged defaults,
13
+ and CLI command surface.
14
+
15
+ ## First Commands
16
+
17
+ Start by discovering the local package and running server state:
18
+
19
+ ```bash
20
+ ima2 skill
21
+ ima2 skill --json
22
+ ima2 capabilities --json
23
+ ima2 defaults --json
24
+ ima2 ping
25
+ ```
26
+
27
+ If the server is not running:
28
+
29
+ ```bash
30
+ ima2 serve
31
+ ima2 open
32
+ ```
33
+
34
+ Use `ima2 doctor` when setup, OAuth, storage, or package integrity is unclear.
35
+
36
+ ## Generate Images
37
+
38
+ Basic text-to-image:
39
+
40
+ ```bash
41
+ ima2 gen "a clean product photo of a red guitar pedal"
42
+ ```
43
+
44
+ Use high quality when output fidelity matters:
45
+
46
+ ```bash
47
+ ima2 gen "a print-ready poster" --quality high
48
+ ```
49
+
50
+ Use direct mode when the prompt should be passed with minimal rewriting:
51
+
52
+ ```bash
53
+ ima2 gen "exact prompt text" --mode direct
54
+ ```
55
+
56
+ Use request-level overrides only for that one call:
57
+
58
+ ```bash
59
+ ima2 gen "cinematic mountain" --model gpt-5.5 --reasoning-effort high
60
+ ```
61
+
62
+ ## Prompting Guidance
63
+
64
+ GPT Image 2 can follow detailed visual instructions and can render visible text
65
+ inside images, including labels, signs, posters, UI copy, speech bubbles, and
66
+ product packaging text. Do not avoid text just because older image models were
67
+ weak at it.
68
+
69
+ When visible text matters, write the exact words in the target language and
70
+ script:
71
+
72
+ - Good: `A Korean poster with the exact headline "오늘 공연" and subtext "입장 무료".`
73
+ - Bad: `A Korean poster with some Korean text.`
74
+
75
+ Clearly specifying the desired visible text helps reduce garbled lettering,
76
+ wrong-language substitutions, and invented placeholder words.
77
+
78
+ For dense or important text, specify:
79
+
80
+ - exact text;
81
+ - language and script;
82
+ - placement;
83
+ - approximate size;
84
+ - visual style;
85
+ - whether extra readable text is forbidden.
86
+
87
+ GPT Image 2 can generate both stylized and realistic outputs. State the style
88
+ directly, for example:
89
+
90
+ - `manga panel`
91
+ - `webtoon style`
92
+ - `children's book illustration`
93
+ - `photorealistic product photo`
94
+ - `realistic poster mockup`
95
+ - `cinematic real-world scene`
96
+
97
+ Text rendering is improved, but it is still not a typesetting engine. For tiny
98
+ text, dense paragraphs, tables, exact legal copy, or pixel-perfect UI, prefer
99
+ larger text, fewer words, multiple generation passes, or post-editing.
100
+
101
+ ## Reference / I2I Workflows
102
+
103
+ Reference generation:
104
+
105
+ ```bash
106
+ ima2 gen "turn this into a clean product render" --ref input.png --quality high
107
+ ```
108
+
109
+ Multimode reference workflow:
110
+
111
+ ```bash
112
+ ima2 multimode "create four coherent variations" --ref input.png --max-images 4
113
+ ```
114
+
115
+ Node-mode reference workflow:
116
+
117
+ ```bash
118
+ ima2 node generate "continue this concept" --ref input.png
119
+ ```
120
+
121
+ Image edit workflow:
122
+
123
+ ```bash
124
+ ima2 edit input.png --prompt "make the object blue while preserving composition"
125
+ ```
126
+
127
+ Do not use positional edit prompts. `ima2 edit` requires `--prompt`.
128
+
129
+ ## Parallel Generation
130
+
131
+ There is no `--parallel` flag. For CLI-controlled parallel work, start several normal jobs:
132
+
133
+ ```bash
134
+ ima2 gen "variation 1" --quality high
135
+ ima2 gen "variation 2" --quality high
136
+ ima2 gen "variation 3" --quality high
137
+ ima2 gen "variation 4" --quality high
138
+ ```
139
+
140
+ Treat `capabilities.limits.maxParallel` as advisory client-side queue guidance only.
141
+ It is not a guaranteed server-side semaphore.
142
+
143
+ ## Defaults
144
+
145
+ Inspect the running server defaults:
146
+
147
+ ```bash
148
+ ima2 defaults --json
149
+ ```
150
+
151
+ Inspect local effective defaults without contacting a server:
152
+
153
+ ```bash
154
+ ima2 defaults --local --json
155
+ ```
156
+
157
+ Persist the default model for OAuth and API provider paths:
158
+
159
+ ```bash
160
+ ima2 defaults set model gpt-5.5
161
+ ```
162
+
163
+ Persist the default reasoning policy:
164
+
165
+ ```bash
166
+ ima2 defaults set reasoning high
167
+ ```
168
+
169
+ Restart a running server after changing persisted defaults:
170
+
171
+ ```bash
172
+ ima2 serve
173
+ ```
174
+
175
+ Request flags such as `--model` and `--reasoning-effort` are per-call overrides.
176
+ They do not change persistent defaults.
177
+
178
+ ## Capability Values
179
+
180
+ Use `ima2 capabilities --json` as the source of truth for:
181
+
182
+ - supported image models;
183
+ - unsupported model ids that should not be used as defaults;
184
+ - valid reasoning efforts;
185
+ - valid quality values;
186
+ - reference count and image count limits;
187
+ - package/server version.
188
+
189
+ Use only models from:
190
+
191
+ ```text
192
+ valid.imageModels.supported
193
+ ```
194
+
195
+ Do not pick models from:
196
+
197
+ ```text
198
+ valid.imageModels.unsupported
199
+ ```
200
+
201
+ ## Safety Notes
202
+
203
+ - Do not print API keys, OAuth tokens, config files, or `.env` values.
204
+ - Use `ima2 capabilities --json` before guessing model names.
205
+ - Use `ima2 skill path` when an agent needs the installed Markdown skill path.
206
+ - Use `ima2 inflight ls --json` or `ima2 ps --json` to inspect active jobs.
@@ -1,23 +1,24 @@
1
1
  {
2
2
  "index.html": {
3
- "file": "assets/index-C9cXwiWE.js",
3
+ "file": "assets/index-tQhOLR-C.js",
4
4
  "name": "index",
5
5
  "src": "index.html",
6
6
  "isEntry": true,
7
7
  "dynamicImports": [
8
8
  "src/components/canvas-mode/index.ts",
9
9
  "src/components/PromptLibraryPanel.tsx",
10
+ "src/components/PromptLibraryPanel.tsx",
10
11
  "src/components/NodeCanvas.tsx",
11
12
  "src/components/SettingsWorkspace.tsx",
12
13
  "src/components/card-news/CardNewsWorkspace.tsx",
13
14
  "src/components/PromptLibraryPanel.tsx"
14
15
  ],
15
16
  "css": [
16
- "assets/index-CGMIkZXn.css"
17
+ "assets/index-De-AWE6B.css"
17
18
  ]
18
19
  },
19
20
  "src/components/NodeCanvas.tsx": {
20
- "file": "assets/NodeCanvas-C3dzYNsk.js",
21
+ "file": "assets/NodeCanvas-Bc7BUViM.js",
21
22
  "name": "NodeCanvas",
22
23
  "src": "src/components/NodeCanvas.tsx",
23
24
  "isDynamicEntry": true,
@@ -29,7 +30,7 @@
29
30
  ]
30
31
  },
31
32
  "src/components/PromptImportDialog.tsx": {
32
- "file": "assets/PromptImportDialog-Dqu1VpUh.js",
33
+ "file": "assets/PromptImportDialog-DBKprBEo.js",
33
34
  "name": "PromptImportDialog",
34
35
  "src": "src/components/PromptImportDialog.tsx",
35
36
  "isDynamicEntry": true,
@@ -42,7 +43,7 @@
42
43
  ]
43
44
  },
44
45
  "src/components/PromptImportDiscoverySection.tsx": {
45
- "file": "assets/PromptImportDiscoverySection-Dg8T9X0L.js",
46
+ "file": "assets/PromptImportDiscoverySection-m5v55Zsy.js",
46
47
  "name": "PromptImportDiscoverySection",
47
48
  "src": "src/components/PromptImportDiscoverySection.tsx",
48
49
  "isDynamicEntry": true,
@@ -51,7 +52,7 @@
51
52
  ]
52
53
  },
53
54
  "src/components/PromptImportFolderSection.tsx": {
54
- "file": "assets/PromptImportFolderSection-DBaqsFO4.js",
55
+ "file": "assets/PromptImportFolderSection-DnPvJkfJ.js",
55
56
  "name": "PromptImportFolderSection",
56
57
  "src": "src/components/PromptImportFolderSection.tsx",
57
58
  "isDynamicEntry": true,
@@ -60,7 +61,7 @@
60
61
  ]
61
62
  },
62
63
  "src/components/PromptLibraryPanel.tsx": {
63
- "file": "assets/PromptLibraryPanel-p5QqR97M.js",
64
+ "file": "assets/PromptLibraryPanel-BMSqfK9C.js",
64
65
  "name": "PromptLibraryPanel",
65
66
  "src": "src/components/PromptLibraryPanel.tsx",
66
67
  "isDynamicEntry": true,
@@ -72,7 +73,7 @@
72
73
  ]
73
74
  },
74
75
  "src/components/SettingsWorkspace.tsx": {
75
- "file": "assets/SettingsWorkspace-B5bSAZ6u.js",
76
+ "file": "assets/SettingsWorkspace-Cj3LD0uu.js",
76
77
  "name": "SettingsWorkspace",
77
78
  "src": "src/components/SettingsWorkspace.tsx",
78
79
  "isDynamicEntry": true,
@@ -81,7 +82,7 @@
81
82
  ]
82
83
  },
83
84
  "src/components/canvas-mode/index.ts": {
84
- "file": "assets/index-Cvld7dUZ.js",
85
+ "file": "assets/index-9aOJKFI-.js",
85
86
  "name": "index",
86
87
  "src": "src/components/canvas-mode/index.ts",
87
88
  "isDynamicEntry": true,
@@ -90,7 +91,7 @@
90
91
  ]
91
92
  },
92
93
  "src/components/card-news/CardNewsWorkspace.tsx": {
93
- "file": "assets/CardNewsWorkspace-BJOCey7Z.js",
94
+ "file": "assets/CardNewsWorkspace-j4ULtNdk.js",
94
95
  "name": "CardNewsWorkspace",
95
96
  "src": "src/components/card-news/CardNewsWorkspace.tsx",
96
97
  "isDynamicEntry": true,
@@ -1,2 +1,2 @@
1
- import{u,m as l,j as e,o as v,b as N,f as y}from"./index-C9cXwiWE.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(`
1
+ import{u,l,j as e,m as v,a as N,e as y}from"./index-tQhOLR-C.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};