@contractspec/lib.image-gen 0.2.0

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 (86) hide show
  1. package/dist/browser/docs/generators.docblock.js +36 -0
  2. package/dist/browser/docs/image-gen.docblock.js +47 -0
  3. package/dist/browser/generators/image-generator.js +525 -0
  4. package/dist/browser/generators/index.js +527 -0
  5. package/dist/browser/generators/prompt-builder.js +93 -0
  6. package/dist/browser/generators/style-resolver.js +90 -0
  7. package/dist/browser/i18n/catalogs/en.js +85 -0
  8. package/dist/browser/i18n/catalogs/es.js +85 -0
  9. package/dist/browser/i18n/catalogs/fr.js +85 -0
  10. package/dist/browser/i18n/catalogs/index.js +253 -0
  11. package/dist/browser/i18n/index.js +309 -0
  12. package/dist/browser/i18n/keys.js +33 -0
  13. package/dist/browser/i18n/locale.js +13 -0
  14. package/dist/browser/i18n/messages.js +265 -0
  15. package/dist/browser/index.js +623 -0
  16. package/dist/browser/presets/index.js +99 -0
  17. package/dist/browser/presets/marketing.js +35 -0
  18. package/dist/browser/presets/social.js +45 -0
  19. package/dist/browser/presets/video.js +25 -0
  20. package/dist/browser/types.js +5 -0
  21. package/dist/docs/generators.docblock.d.ts +1 -0
  22. package/dist/docs/generators.docblock.js +37 -0
  23. package/dist/docs/image-gen.docblock.d.ts +1 -0
  24. package/dist/docs/image-gen.docblock.js +48 -0
  25. package/dist/generators/image-generator.d.ts +12 -0
  26. package/dist/generators/image-generator.js +526 -0
  27. package/dist/generators/image-generator.test.d.ts +1 -0
  28. package/dist/generators/index.d.ts +4 -0
  29. package/dist/generators/index.js +528 -0
  30. package/dist/generators/prompt-builder.d.ts +21 -0
  31. package/dist/generators/prompt-builder.js +94 -0
  32. package/dist/generators/prompt-builder.test.d.ts +1 -0
  33. package/dist/generators/style-resolver.d.ts +9 -0
  34. package/dist/generators/style-resolver.js +91 -0
  35. package/dist/generators/style-resolver.test.d.ts +1 -0
  36. package/dist/i18n/catalogs/en.d.ts +8 -0
  37. package/dist/i18n/catalogs/en.js +86 -0
  38. package/dist/i18n/catalogs/es.d.ts +6 -0
  39. package/dist/i18n/catalogs/es.js +86 -0
  40. package/dist/i18n/catalogs/fr.d.ts +6 -0
  41. package/dist/i18n/catalogs/fr.js +86 -0
  42. package/dist/i18n/catalogs/index.d.ts +3 -0
  43. package/dist/i18n/catalogs/index.js +254 -0
  44. package/dist/i18n/i18n.test.d.ts +1 -0
  45. package/dist/i18n/index.d.ts +6 -0
  46. package/dist/i18n/index.js +310 -0
  47. package/dist/i18n/keys.d.ts +78 -0
  48. package/dist/i18n/keys.js +34 -0
  49. package/dist/i18n/locale.d.ts +8 -0
  50. package/dist/i18n/locale.js +14 -0
  51. package/dist/i18n/messages.d.ts +14 -0
  52. package/dist/i18n/messages.js +266 -0
  53. package/dist/index.d.ts +3 -0
  54. package/dist/index.js +624 -0
  55. package/dist/node/docs/generators.docblock.js +36 -0
  56. package/dist/node/docs/image-gen.docblock.js +47 -0
  57. package/dist/node/generators/image-generator.js +525 -0
  58. package/dist/node/generators/index.js +527 -0
  59. package/dist/node/generators/prompt-builder.js +93 -0
  60. package/dist/node/generators/style-resolver.js +90 -0
  61. package/dist/node/i18n/catalogs/en.js +85 -0
  62. package/dist/node/i18n/catalogs/es.js +85 -0
  63. package/dist/node/i18n/catalogs/fr.js +85 -0
  64. package/dist/node/i18n/catalogs/index.js +253 -0
  65. package/dist/node/i18n/index.js +309 -0
  66. package/dist/node/i18n/keys.js +33 -0
  67. package/dist/node/i18n/locale.js +13 -0
  68. package/dist/node/i18n/messages.js +265 -0
  69. package/dist/node/index.js +623 -0
  70. package/dist/node/presets/index.js +99 -0
  71. package/dist/node/presets/marketing.js +35 -0
  72. package/dist/node/presets/social.js +45 -0
  73. package/dist/node/presets/video.js +25 -0
  74. package/dist/node/types.js +5 -0
  75. package/dist/presets/index.d.ts +3 -0
  76. package/dist/presets/index.js +100 -0
  77. package/dist/presets/marketing.d.ts +8 -0
  78. package/dist/presets/marketing.js +36 -0
  79. package/dist/presets/presets.test.d.ts +1 -0
  80. package/dist/presets/social.d.ts +10 -0
  81. package/dist/presets/social.js +46 -0
  82. package/dist/presets/video.d.ts +6 -0
  83. package/dist/presets/video.js +26 -0
  84. package/dist/types.d.ts +56 -0
  85. package/dist/types.js +6 -0
  86. package/package.json +394 -0
@@ -0,0 +1,310 @@
1
+ // @bun
2
+ // src/i18n/catalogs/en.ts
3
+ import { defineTranslation } from "@contractspec/lib.contracts-spec/translations";
4
+ var enMessages = defineTranslation({
5
+ meta: {
6
+ key: "image-gen.messages",
7
+ version: "1.0.0",
8
+ domain: "image-gen",
9
+ description: "All user-facing, LLM-facing, and developer-facing strings for the image-gen package",
10
+ owners: ["platform"],
11
+ stability: "experimental"
12
+ },
13
+ locale: "en",
14
+ fallback: "en",
15
+ messages: {
16
+ "prompt.system.imagePromptEngineer": {
17
+ value: "You are an expert image prompt engineer. Given a JSON brief containing title, summary, problems, solutions, purpose, style, and style tokens, produce a single detailed image generation prompt. The prompt should be vivid, specific, and optimized for AI image generation models. Focus on composition, lighting, color palette, and subject matter. Output only the prompt text, no JSON.",
18
+ description: "System prompt for LLM-based image prompt engineering"
19
+ },
20
+ "image.generate.description": {
21
+ value: "Generate a {style} image for {purpose}",
22
+ description: "Description template for image generation tasks",
23
+ placeholders: [
24
+ { name: "style", type: "string" },
25
+ { name: "purpose", type: "string" }
26
+ ]
27
+ },
28
+ "image.prompt.featuring": {
29
+ value: "featuring {solutions}",
30
+ description: "Prompt fragment for featured solutions",
31
+ placeholders: [{ name: "solutions", type: "string" }]
32
+ },
33
+ "image.prompt.industryContext": {
34
+ value: "{industry} context",
35
+ description: "Prompt fragment for industry context",
36
+ placeholders: [{ name: "industry", type: "string" }]
37
+ },
38
+ "image.error.noProvider": {
39
+ value: "No image provider configured",
40
+ description: "Error message when no ImageProvider is available"
41
+ },
42
+ "image.error.generationFailed": {
43
+ value: "Image generation failed",
44
+ description: "Error message when image generation fails"
45
+ },
46
+ "purpose.blogHero": {
47
+ value: "Blog hero image",
48
+ description: "Label for blog hero image purpose"
49
+ },
50
+ "purpose.socialOg": {
51
+ value: "Social media OG image",
52
+ description: "Label for Open Graph image purpose"
53
+ },
54
+ "purpose.socialTwitter": {
55
+ value: "Twitter card image",
56
+ description: "Label for Twitter card image purpose"
57
+ },
58
+ "purpose.socialInstagram": {
59
+ value: "Instagram image",
60
+ description: "Label for Instagram image purpose"
61
+ },
62
+ "purpose.landingHero": {
63
+ value: "Landing page hero",
64
+ description: "Label for landing page hero image purpose"
65
+ },
66
+ "purpose.videoThumbnail": {
67
+ value: "Video thumbnail",
68
+ description: "Label for video thumbnail purpose"
69
+ },
70
+ "purpose.emailHeader": {
71
+ value: "Email header",
72
+ description: "Label for email header image purpose"
73
+ },
74
+ "purpose.illustration": {
75
+ value: "Illustration",
76
+ description: "Label for illustration purpose"
77
+ },
78
+ "purpose.icon": {
79
+ value: "Icon",
80
+ description: "Label for icon purpose"
81
+ }
82
+ }
83
+ });
84
+
85
+ // src/i18n/catalogs/fr.ts
86
+ import { defineTranslation as defineTranslation2 } from "@contractspec/lib.contracts-spec/translations";
87
+ var frMessages = defineTranslation2({
88
+ meta: {
89
+ key: "image-gen.messages",
90
+ version: "1.0.0",
91
+ domain: "image-gen",
92
+ description: "French translations for the image-gen package",
93
+ owners: ["platform"],
94
+ stability: "experimental"
95
+ },
96
+ locale: "fr",
97
+ fallback: "en",
98
+ messages: {
99
+ "prompt.system.imagePromptEngineer": {
100
+ value: "Vous \xEAtes un expert en ing\xE9nierie de prompts d'images. \xC0 partir d'un brief JSON contenant titre, r\xE9sum\xE9, probl\xE8mes, solutions, objectif, style et tokens de style, produisez un prompt d\xE9taill\xE9 de g\xE9n\xE9ration d'image. Le prompt doit \xEAtre vivant, sp\xE9cifique et optimis\xE9 pour les mod\xE8les de g\xE9n\xE9ration d'images IA. Concentrez-vous sur la composition, l'\xE9clairage, la palette de couleurs et le sujet. Produisez uniquement le texte du prompt, pas de JSON.",
101
+ description: "Prompt syst\xE8me pour l'ing\xE9nierie de prompts d'images par LLM"
102
+ },
103
+ "image.generate.description": {
104
+ value: "G\xE9n\xE9rer une image {style} pour {purpose}",
105
+ description: "Mod\xE8le de description pour les t\xE2ches de g\xE9n\xE9ration d'images",
106
+ placeholders: [
107
+ { name: "style", type: "string" },
108
+ { name: "purpose", type: "string" }
109
+ ]
110
+ },
111
+ "image.prompt.featuring": {
112
+ value: "mettant en avant {solutions}",
113
+ description: "Fragment de prompt pour les solutions mises en avant",
114
+ placeholders: [{ name: "solutions", type: "string" }]
115
+ },
116
+ "image.prompt.industryContext": {
117
+ value: "contexte {industry}",
118
+ description: "Fragment de prompt pour le contexte industriel",
119
+ placeholders: [{ name: "industry", type: "string" }]
120
+ },
121
+ "image.error.noProvider": {
122
+ value: "Aucun fournisseur d'images configur\xE9",
123
+ description: "Message d'erreur quand aucun ImageProvider n'est disponible"
124
+ },
125
+ "image.error.generationFailed": {
126
+ value: "La g\xE9n\xE9ration d'image a \xE9chou\xE9",
127
+ description: "Message d'erreur quand la g\xE9n\xE9ration d'image \xE9choue"
128
+ },
129
+ "purpose.blogHero": {
130
+ value: "Image hero de blog",
131
+ description: "Libell\xE9 pour l'objectif image hero de blog"
132
+ },
133
+ "purpose.socialOg": {
134
+ value: "Image OG pour r\xE9seaux sociaux",
135
+ description: "Libell\xE9 pour l'objectif image Open Graph"
136
+ },
137
+ "purpose.socialTwitter": {
138
+ value: "Image carte Twitter",
139
+ description: "Libell\xE9 pour l'objectif image carte Twitter"
140
+ },
141
+ "purpose.socialInstagram": {
142
+ value: "Image Instagram",
143
+ description: "Libell\xE9 pour l'objectif image Instagram"
144
+ },
145
+ "purpose.landingHero": {
146
+ value: "Hero de page d'atterrissage",
147
+ description: "Libell\xE9 pour l'objectif image hero de page d'atterrissage"
148
+ },
149
+ "purpose.videoThumbnail": {
150
+ value: "Miniature vid\xE9o",
151
+ description: "Libell\xE9 pour l'objectif miniature vid\xE9o"
152
+ },
153
+ "purpose.emailHeader": {
154
+ value: "En-t\xEAte d'email",
155
+ description: "Libell\xE9 pour l'objectif image en-t\xEAte d'email"
156
+ },
157
+ "purpose.illustration": {
158
+ value: "Illustration",
159
+ description: "Libell\xE9 pour l'objectif illustration"
160
+ },
161
+ "purpose.icon": {
162
+ value: "Ic\xF4ne",
163
+ description: "Libell\xE9 pour l'objectif ic\xF4ne"
164
+ }
165
+ }
166
+ });
167
+
168
+ // src/i18n/catalogs/es.ts
169
+ import { defineTranslation as defineTranslation3 } from "@contractspec/lib.contracts-spec/translations";
170
+ var esMessages = defineTranslation3({
171
+ meta: {
172
+ key: "image-gen.messages",
173
+ version: "1.0.0",
174
+ domain: "image-gen",
175
+ description: "Spanish translations for the image-gen package",
176
+ owners: ["platform"],
177
+ stability: "experimental"
178
+ },
179
+ locale: "es",
180
+ fallback: "en",
181
+ messages: {
182
+ "prompt.system.imagePromptEngineer": {
183
+ value: "Eres un experto en ingenier\xEDa de prompts de im\xE1genes. Dado un brief JSON que contiene t\xEDtulo, resumen, problemas, soluciones, prop\xF3sito, estilo y tokens de estilo, produce un prompt detallado de generaci\xF3n de im\xE1genes. El prompt debe ser v\xEDvido, espec\xEDfico y optimizado para modelos de generaci\xF3n de im\xE1genes con IA. Conc\xE9ntrate en la composici\xF3n, iluminaci\xF3n, paleta de colores y tema. Produce solo el texto del prompt, sin JSON.",
184
+ description: "Prompt del sistema para ingenier\xEDa de prompts de im\xE1genes por LLM"
185
+ },
186
+ "image.generate.description": {
187
+ value: "Generar una imagen {style} para {purpose}",
188
+ description: "Plantilla de descripci\xF3n para tareas de generaci\xF3n de im\xE1genes",
189
+ placeholders: [
190
+ { name: "style", type: "string" },
191
+ { name: "purpose", type: "string" }
192
+ ]
193
+ },
194
+ "image.prompt.featuring": {
195
+ value: "presentando {solutions}",
196
+ description: "Fragmento de prompt para soluciones destacadas",
197
+ placeholders: [{ name: "solutions", type: "string" }]
198
+ },
199
+ "image.prompt.industryContext": {
200
+ value: "contexto de {industry}",
201
+ description: "Fragmento de prompt para contexto de industria",
202
+ placeholders: [{ name: "industry", type: "string" }]
203
+ },
204
+ "image.error.noProvider": {
205
+ value: "No hay proveedor de im\xE1genes configurado",
206
+ description: "Mensaje de error cuando no hay ImageProvider disponible"
207
+ },
208
+ "image.error.generationFailed": {
209
+ value: "La generaci\xF3n de imagen fall\xF3",
210
+ description: "Mensaje de error cuando la generaci\xF3n de imagen falla"
211
+ },
212
+ "purpose.blogHero": {
213
+ value: "Imagen hero de blog",
214
+ description: "Etiqueta para el prop\xF3sito imagen hero de blog"
215
+ },
216
+ "purpose.socialOg": {
217
+ value: "Imagen OG para redes sociales",
218
+ description: "Etiqueta para el prop\xF3sito imagen Open Graph"
219
+ },
220
+ "purpose.socialTwitter": {
221
+ value: "Imagen de tarjeta Twitter",
222
+ description: "Etiqueta para el prop\xF3sito imagen tarjeta Twitter"
223
+ },
224
+ "purpose.socialInstagram": {
225
+ value: "Imagen de Instagram",
226
+ description: "Etiqueta para el prop\xF3sito imagen Instagram"
227
+ },
228
+ "purpose.landingHero": {
229
+ value: "Hero de p\xE1gina de aterrizaje",
230
+ description: "Etiqueta para el prop\xF3sito imagen hero de p\xE1gina de aterrizaje"
231
+ },
232
+ "purpose.videoThumbnail": {
233
+ value: "Miniatura de video",
234
+ description: "Etiqueta para el prop\xF3sito miniatura de video"
235
+ },
236
+ "purpose.emailHeader": {
237
+ value: "Encabezado de email",
238
+ description: "Etiqueta para el prop\xF3sito imagen encabezado de email"
239
+ },
240
+ "purpose.illustration": {
241
+ value: "Ilustraci\xF3n",
242
+ description: "Etiqueta para el prop\xF3sito ilustraci\xF3n"
243
+ },
244
+ "purpose.icon": {
245
+ value: "Icono",
246
+ description: "Etiqueta para el prop\xF3sito icono"
247
+ }
248
+ }
249
+ });
250
+
251
+ // src/i18n/messages.ts
252
+ import {
253
+ createI18nFactory
254
+ } from "@contractspec/lib.contracts-spec/translations";
255
+ var factory = createI18nFactory({
256
+ specKey: "image-gen.messages",
257
+ catalogs: [enMessages, frMessages, esMessages]
258
+ });
259
+ var createImageGenI18n = factory.create;
260
+ var getDefaultI18n = factory.getDefault;
261
+ var resetI18nRegistry = factory.resetRegistry;
262
+
263
+ // src/i18n/keys.ts
264
+ var PROMPT_KEYS = {
265
+ "prompt.system.imagePromptEngineer": "prompt.system.imagePromptEngineer"
266
+ };
267
+ var IMAGE_KEYS = {
268
+ "image.generate.description": "image.generate.description",
269
+ "image.prompt.featuring": "image.prompt.featuring",
270
+ "image.prompt.industryContext": "image.prompt.industryContext",
271
+ "image.error.noProvider": "image.error.noProvider",
272
+ "image.error.generationFailed": "image.error.generationFailed"
273
+ };
274
+ var PURPOSE_KEYS = {
275
+ "purpose.blogHero": "purpose.blogHero",
276
+ "purpose.socialOg": "purpose.socialOg",
277
+ "purpose.socialTwitter": "purpose.socialTwitter",
278
+ "purpose.socialInstagram": "purpose.socialInstagram",
279
+ "purpose.landingHero": "purpose.landingHero",
280
+ "purpose.videoThumbnail": "purpose.videoThumbnail",
281
+ "purpose.emailHeader": "purpose.emailHeader",
282
+ "purpose.illustration": "purpose.illustration",
283
+ "purpose.icon": "purpose.icon"
284
+ };
285
+ var I18N_KEYS = {
286
+ ...PROMPT_KEYS,
287
+ ...IMAGE_KEYS,
288
+ ...PURPOSE_KEYS
289
+ };
290
+
291
+ // src/i18n/locale.ts
292
+ import {
293
+ DEFAULT_LOCALE,
294
+ SUPPORTED_LOCALES,
295
+ resolveLocale,
296
+ isSupportedLocale
297
+ } from "@contractspec/lib.contracts-spec/translations";
298
+ export {
299
+ resolveLocale,
300
+ resetI18nRegistry,
301
+ isSupportedLocale,
302
+ getDefaultI18n,
303
+ createImageGenI18n,
304
+ SUPPORTED_LOCALES,
305
+ PURPOSE_KEYS,
306
+ PROMPT_KEYS,
307
+ IMAGE_KEYS,
308
+ I18N_KEYS,
309
+ DEFAULT_LOCALE
310
+ };
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Typed message keys for the image-gen i18n system.
3
+ *
4
+ * All translatable strings in the package are referenced by these keys.
5
+ * Organized by domain: prompt, image, purpose.
6
+ *
7
+ * @module i18n/keys
8
+ */
9
+ export declare const PROMPT_KEYS: {
10
+ /** Image prompt engineer system prompt */
11
+ readonly 'prompt.system.imagePromptEngineer': "prompt.system.imagePromptEngineer";
12
+ };
13
+ export declare const IMAGE_KEYS: {
14
+ /** "Generate a {style} image for {purpose}" */
15
+ readonly 'image.generate.description': "image.generate.description";
16
+ /** "Featuring {solutions}" */
17
+ readonly 'image.prompt.featuring': "image.prompt.featuring";
18
+ /** "{industry} context" */
19
+ readonly 'image.prompt.industryContext': "image.prompt.industryContext";
20
+ /** "No image provider configured" */
21
+ readonly 'image.error.noProvider': "image.error.noProvider";
22
+ /** "Image generation failed" */
23
+ readonly 'image.error.generationFailed': "image.error.generationFailed";
24
+ };
25
+ export declare const PURPOSE_KEYS: {
26
+ /** "Blog hero image" */
27
+ readonly 'purpose.blogHero': "purpose.blogHero";
28
+ /** "Social media OG image" */
29
+ readonly 'purpose.socialOg': "purpose.socialOg";
30
+ /** "Twitter card image" */
31
+ readonly 'purpose.socialTwitter': "purpose.socialTwitter";
32
+ /** "Instagram image" */
33
+ readonly 'purpose.socialInstagram': "purpose.socialInstagram";
34
+ /** "Landing page hero" */
35
+ readonly 'purpose.landingHero': "purpose.landingHero";
36
+ /** "Video thumbnail" */
37
+ readonly 'purpose.videoThumbnail': "purpose.videoThumbnail";
38
+ /** "Email header" */
39
+ readonly 'purpose.emailHeader': "purpose.emailHeader";
40
+ /** "Illustration" */
41
+ readonly 'purpose.illustration': "purpose.illustration";
42
+ /** "Icon" */
43
+ readonly 'purpose.icon': "purpose.icon";
44
+ };
45
+ export declare const I18N_KEYS: {
46
+ /** "Blog hero image" */
47
+ readonly 'purpose.blogHero': "purpose.blogHero";
48
+ /** "Social media OG image" */
49
+ readonly 'purpose.socialOg': "purpose.socialOg";
50
+ /** "Twitter card image" */
51
+ readonly 'purpose.socialTwitter': "purpose.socialTwitter";
52
+ /** "Instagram image" */
53
+ readonly 'purpose.socialInstagram': "purpose.socialInstagram";
54
+ /** "Landing page hero" */
55
+ readonly 'purpose.landingHero': "purpose.landingHero";
56
+ /** "Video thumbnail" */
57
+ readonly 'purpose.videoThumbnail': "purpose.videoThumbnail";
58
+ /** "Email header" */
59
+ readonly 'purpose.emailHeader': "purpose.emailHeader";
60
+ /** "Illustration" */
61
+ readonly 'purpose.illustration': "purpose.illustration";
62
+ /** "Icon" */
63
+ readonly 'purpose.icon': "purpose.icon";
64
+ /** "Generate a {style} image for {purpose}" */
65
+ readonly 'image.generate.description': "image.generate.description";
66
+ /** "Featuring {solutions}" */
67
+ readonly 'image.prompt.featuring': "image.prompt.featuring";
68
+ /** "{industry} context" */
69
+ readonly 'image.prompt.industryContext': "image.prompt.industryContext";
70
+ /** "No image provider configured" */
71
+ readonly 'image.error.noProvider': "image.error.noProvider";
72
+ /** "Image generation failed" */
73
+ readonly 'image.error.generationFailed': "image.error.generationFailed";
74
+ /** Image prompt engineer system prompt */
75
+ readonly 'prompt.system.imagePromptEngineer': "prompt.system.imagePromptEngineer";
76
+ };
77
+ /** Union type of all valid image-gen i18n keys */
78
+ export type ImageGenMessageKey = keyof typeof I18N_KEYS;
@@ -0,0 +1,34 @@
1
+ // @bun
2
+ // src/i18n/keys.ts
3
+ var PROMPT_KEYS = {
4
+ "prompt.system.imagePromptEngineer": "prompt.system.imagePromptEngineer"
5
+ };
6
+ var IMAGE_KEYS = {
7
+ "image.generate.description": "image.generate.description",
8
+ "image.prompt.featuring": "image.prompt.featuring",
9
+ "image.prompt.industryContext": "image.prompt.industryContext",
10
+ "image.error.noProvider": "image.error.noProvider",
11
+ "image.error.generationFailed": "image.error.generationFailed"
12
+ };
13
+ var PURPOSE_KEYS = {
14
+ "purpose.blogHero": "purpose.blogHero",
15
+ "purpose.socialOg": "purpose.socialOg",
16
+ "purpose.socialTwitter": "purpose.socialTwitter",
17
+ "purpose.socialInstagram": "purpose.socialInstagram",
18
+ "purpose.landingHero": "purpose.landingHero",
19
+ "purpose.videoThumbnail": "purpose.videoThumbnail",
20
+ "purpose.emailHeader": "purpose.emailHeader",
21
+ "purpose.illustration": "purpose.illustration",
22
+ "purpose.icon": "purpose.icon"
23
+ };
24
+ var I18N_KEYS = {
25
+ ...PROMPT_KEYS,
26
+ ...IMAGE_KEYS,
27
+ ...PURPOSE_KEYS
28
+ };
29
+ export {
30
+ PURPOSE_KEYS,
31
+ PROMPT_KEYS,
32
+ IMAGE_KEYS,
33
+ I18N_KEYS
34
+ };
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Locale utilities for the image-gen package.
3
+ *
4
+ * Re-exported from the shared i18n factory in contracts-spec.
5
+ *
6
+ * @module i18n/locale
7
+ */
8
+ export { DEFAULT_LOCALE, SUPPORTED_LOCALES, resolveLocale, isSupportedLocale, type SupportedLocale, } from '@contractspec/lib.contracts-spec/translations';
@@ -0,0 +1,14 @@
1
+ // @bun
2
+ // src/i18n/locale.ts
3
+ import {
4
+ DEFAULT_LOCALE,
5
+ SUPPORTED_LOCALES,
6
+ resolveLocale,
7
+ isSupportedLocale
8
+ } from "@contractspec/lib.contracts-spec/translations";
9
+ export {
10
+ resolveLocale,
11
+ isSupportedLocale,
12
+ SUPPORTED_LOCALES,
13
+ DEFAULT_LOCALE
14
+ };
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Translation helper for the image-gen package.
3
+ * @module i18n/messages
4
+ */
5
+ import { type I18nInstance } from '@contractspec/lib.contracts-spec/translations';
6
+ import type { ImageGenMessageKey } from './keys';
7
+ /** I18n instance type for the image-gen package. */
8
+ export type ImageGenI18n = I18nInstance<ImageGenMessageKey>;
9
+ /** Create an i18n instance for a given locale. */
10
+ export declare const createImageGenI18n: (optionsLocale?: string, runtimeLocale?: string) => I18nInstance<"prompt.system.imagePromptEngineer" | "image.generate.description" | "image.prompt.featuring" | "image.prompt.industryContext" | "image.error.noProvider" | "image.error.generationFailed" | "purpose.blogHero" | "purpose.socialOg" | "purpose.socialTwitter" | "purpose.socialInstagram" | "purpose.landingHero" | "purpose.videoThumbnail" | "purpose.emailHeader" | "purpose.illustration" | "purpose.icon">;
11
+ /** Create a default (English) i18n instance. */
12
+ export declare const getDefaultI18n: () => I18nInstance<"prompt.system.imagePromptEngineer" | "image.generate.description" | "image.prompt.featuring" | "image.prompt.industryContext" | "image.error.noProvider" | "image.error.generationFailed" | "purpose.blogHero" | "purpose.socialOg" | "purpose.socialTwitter" | "purpose.socialInstagram" | "purpose.landingHero" | "purpose.videoThumbnail" | "purpose.emailHeader" | "purpose.illustration" | "purpose.icon">;
13
+ /** Reset the shared registry (useful for testing). @internal */
14
+ export declare const resetI18nRegistry: () => void;