@qodalis/cli-text-to-image 0.0.3 → 2.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,44 +1,38 @@
1
1
  {
2
2
  "name": "@qodalis/cli-text-to-image",
3
- "version": "0.0.3",
4
- "description": "An Angular CLI extension.",
3
+ "version": "2.0.0-beta.1",
4
+ "description": "@qodalis/cli extension for converting text to images.",
5
5
  "author": "Nicolae Lupei, Qodalis Solutions",
6
6
  "license": "MIT",
7
7
  "repository": {
8
8
  "type": "git",
9
- "url": "https://github.com/qodalis-solutions/angular-web-cli"
9
+ "url": "https://github.com/qodalis-solutions/web-cli"
10
10
  },
11
11
  "homepage": "https://qodalis.com",
12
12
  "keywords": [
13
- "angular",
14
13
  "cli",
15
14
  "qodalis",
16
15
  "terminal",
17
- "text-to-image"
16
+ "text-to-image",
17
+ "image-generation",
18
+ "canvas",
19
+ "png",
20
+ "text-rendering"
18
21
  ],
19
22
  "umd": "./umd/index.js",
20
23
  "unpkg": "./umd/index.js",
21
- "peerDependencies": {
22
- "@angular/common": "^16.2.0",
23
- "@angular/core": "^16.2.0"
24
- },
25
24
  "dependencies": {
26
- "tslib": "^2.3.0",
27
- "@qodalis/cli-core": "^0.0.6",
28
- "@qodalis/angular-cli": "^1.0.15"
25
+ "@qodalis/cli-core": "2.0.0-beta.1"
29
26
  },
30
27
  "sideEffects": false,
31
- "module": "fesm2022/qodalis-cli-text-to-image.mjs",
32
- "typings": "index.d.ts",
28
+ "main": "./public-api.js",
29
+ "module": "./public-api.mjs",
30
+ "types": "./public-api.d.ts",
33
31
  "exports": {
34
- "./package.json": {
35
- "default": "./package.json"
36
- },
37
32
  ".": {
38
- "types": "./index.d.ts",
39
- "esm2022": "./esm2022/qodalis-cli-text-to-image.mjs",
40
- "esm": "./esm2022/qodalis-cli-text-to-image.mjs",
41
- "default": "./fesm2022/qodalis-cli-text-to-image.mjs"
33
+ "types": "./public-api.d.ts",
34
+ "import": "./public-api.mjs",
35
+ "require": "./public-api.js"
42
36
  }
43
37
  }
44
- }
38
+ }
@@ -0,0 +1,22 @@
1
+ import * as _qodalis_cli_core from '@qodalis/cli-core';
2
+ import { ICliCommandProcessor, CliProcessorMetadata, ICliCommandParameterDescriptor, CliProcessCommand, ICliExecutionContext, ICliModule } from '@qodalis/cli-core';
3
+
4
+ declare class CliTextToImageCommandProcessor implements ICliCommandProcessor {
5
+ command: string;
6
+ description: string;
7
+ author: _qodalis_cli_core.ICliCommandAuthor;
8
+ valueRequired: boolean;
9
+ metadata?: CliProcessorMetadata | undefined;
10
+ parameters?: ICliCommandParameterDescriptor[] | undefined;
11
+ acceptsRawInput: boolean;
12
+ version: string;
13
+ constructor();
14
+ processCommand(command: CliProcessCommand, context: ICliExecutionContext): Promise<void>;
15
+ writeDescription(context: ICliExecutionContext): void;
16
+ private wrapText;
17
+ private getLineHeight;
18
+ }
19
+
20
+ declare const textToImageModule: ICliModule;
21
+
22
+ export { CliTextToImageCommandProcessor, textToImageModule };
package/public-api.d.ts CHANGED
@@ -1,2 +1,22 @@
1
- export * from './lib/cli-text-to-image.module';
2
- export * from './lib/processors/cli-text-to-image-command-processor';
1
+ import * as _qodalis_cli_core from '@qodalis/cli-core';
2
+ import { ICliCommandProcessor, CliProcessorMetadata, ICliCommandParameterDescriptor, CliProcessCommand, ICliExecutionContext, ICliModule } from '@qodalis/cli-core';
3
+
4
+ declare class CliTextToImageCommandProcessor implements ICliCommandProcessor {
5
+ command: string;
6
+ description: string;
7
+ author: _qodalis_cli_core.ICliCommandAuthor;
8
+ valueRequired: boolean;
9
+ metadata?: CliProcessorMetadata | undefined;
10
+ parameters?: ICliCommandParameterDescriptor[] | undefined;
11
+ acceptsRawInput: boolean;
12
+ version: string;
13
+ constructor();
14
+ processCommand(command: CliProcessCommand, context: ICliExecutionContext): Promise<void>;
15
+ writeDescription(context: ICliExecutionContext): void;
16
+ private wrapText;
17
+ private getLineHeight;
18
+ }
19
+
20
+ declare const textToImageModule: ICliModule;
21
+
22
+ export { CliTextToImageCommandProcessor, textToImageModule };
package/public-api.js ADDED
@@ -0,0 +1,261 @@
1
+ 'use strict';
2
+
3
+ var cliCore = require('@qodalis/cli-core');
4
+
5
+ // src/lib/processors/cli-text-to-image-command-processor.ts
6
+
7
+ // src/lib/version.ts
8
+ var LIBRARY_VERSION = "2.0.0-beta.1";
9
+ var API_VERSION = 2;
10
+
11
+ // src/lib/processors/cli-text-to-image-command-processor.ts
12
+ var DEFAULT_WIDTH = 800;
13
+ var DEFAULT_HEIGHT = 400;
14
+ var DEFAULT_BG_COLOR = "#ffffff";
15
+ var DEFAULT_TEXT_COLOR = "#000000";
16
+ var DEFAULT_FONT = "30px Arial";
17
+ var DEFAULT_FILENAME = "text-image.png";
18
+ var DEFAULT_PADDING = 40;
19
+ var CliTextToImageCommandProcessor = class {
20
+ constructor() {
21
+ this.command = "text-to-image";
22
+ this.description = "Convert text to image";
23
+ this.author = cliCore.DefaultLibraryAuthor;
24
+ this.valueRequired = true;
25
+ this.metadata = {
26
+ icon: "\u{1F5BC}\uFE0F",
27
+ module: "text-to-image",
28
+ requiredCoreVersion: ">=2.0.0 <3.0.0",
29
+ requiredCliVersion: ">=2.0.0 <3.0.0"
30
+ };
31
+ this.parameters = [
32
+ {
33
+ name: "fileName",
34
+ description: `Output filename (default: ${DEFAULT_FILENAME})`,
35
+ type: "string",
36
+ required: false
37
+ },
38
+ {
39
+ name: "width",
40
+ description: `Image width in pixels (default: ${DEFAULT_WIDTH})`,
41
+ type: "integer",
42
+ required: false
43
+ },
44
+ {
45
+ name: "height",
46
+ description: `Image height in pixels (default: ${DEFAULT_HEIGHT})`,
47
+ type: "integer",
48
+ required: false
49
+ },
50
+ {
51
+ name: "bgColor",
52
+ description: `Background color in hex format (default: ${DEFAULT_BG_COLOR})`,
53
+ type: "string",
54
+ required: false
55
+ },
56
+ {
57
+ name: "textColor",
58
+ description: `Text color in hex format (default: ${DEFAULT_TEXT_COLOR})`,
59
+ type: "string",
60
+ required: false
61
+ },
62
+ {
63
+ name: "font",
64
+ description: `CSS font string, e.g. "bold 48px Georgia" (default: ${DEFAULT_FONT})`,
65
+ type: "string",
66
+ required: false
67
+ },
68
+ {
69
+ name: "padding",
70
+ description: `Padding in pixels around the text (default: ${DEFAULT_PADDING})`,
71
+ type: "integer",
72
+ required: false
73
+ },
74
+ {
75
+ name: "textAlign",
76
+ description: "Horizontal text alignment: left, center, or right (default: center)",
77
+ type: "string",
78
+ required: false
79
+ }
80
+ ];
81
+ this.acceptsRawInput = true;
82
+ this.version = LIBRARY_VERSION;
83
+ }
84
+ async processCommand(command, context) {
85
+ const text = command.value || "";
86
+ const width = command.args["width"] ?? DEFAULT_WIDTH;
87
+ const height = command.args["height"] ?? DEFAULT_HEIGHT;
88
+ const filename = command.args["fileName"] ?? DEFAULT_FILENAME;
89
+ const bgColor = command.args["bgColor"] || DEFAULT_BG_COLOR;
90
+ const textColor = command.args["textColor"] || DEFAULT_TEXT_COLOR;
91
+ const font = command.args["font"] || DEFAULT_FONT;
92
+ const padding = command.args["padding"] ?? DEFAULT_PADDING;
93
+ const textAlign = command.args["textAlign"] || "center";
94
+ const canvas = document.createElement("canvas");
95
+ canvas.width = width;
96
+ canvas.height = height;
97
+ const ctx = canvas.getContext("2d");
98
+ if (!ctx) {
99
+ context.writer.writeError("Failed to get canvas context");
100
+ return;
101
+ }
102
+ ctx.fillStyle = bgColor;
103
+ ctx.fillRect(0, 0, width, height);
104
+ ctx.fillStyle = textColor;
105
+ ctx.font = font;
106
+ ctx.textAlign = textAlign;
107
+ ctx.textBaseline = "middle";
108
+ const maxTextWidth = width - padding * 2;
109
+ const lines = this.wrapText(ctx, text, maxTextWidth);
110
+ const lineHeight = this.getLineHeight(ctx);
111
+ const totalTextHeight = lines.length * lineHeight;
112
+ const startY = (height - totalTextHeight) / 2 + lineHeight / 2;
113
+ let x;
114
+ if (textAlign === "left") {
115
+ x = padding;
116
+ } else if (textAlign === "right") {
117
+ x = width - padding;
118
+ } else {
119
+ x = width / 2;
120
+ }
121
+ for (let i = 0; i < lines.length; i++) {
122
+ ctx.fillText(lines[i], x, startY + i * lineHeight);
123
+ }
124
+ const dataUrl = canvas.toDataURL("image/png");
125
+ const link = document.createElement("a");
126
+ link.href = dataUrl;
127
+ link.download = filename;
128
+ document.body.appendChild(link);
129
+ link.click();
130
+ document.body.removeChild(link);
131
+ const label = (name) => context.writer.wrapInColor(name, cliCore.CliForegroundColor.Yellow);
132
+ context.writer.writeInfo("Options:");
133
+ context.writer.writeInfo(` ${label("Text")}: ${text}`);
134
+ context.writer.writeInfo(` ${label("Size")}: ${width} x ${height}`);
135
+ context.writer.writeInfo(` ${label("Background")}: ${bgColor}`);
136
+ context.writer.writeInfo(` ${label("Text color")}: ${textColor}`);
137
+ context.writer.writeInfo(` ${label("Font")}: ${font}`);
138
+ context.writer.writeInfo(` ${label("Padding")}: ${padding}px`);
139
+ context.writer.writeInfo(` ${label("Alignment")}: ${textAlign}`);
140
+ context.writer.writeInfo(` ${label("Filename")}: ${filename}`);
141
+ if (lines.length > 1) {
142
+ context.writer.writeInfo(` ${label("Lines")}: ${lines.length}`);
143
+ }
144
+ context.writer.writeln();
145
+ context.writer.writeSuccess("Image created successfully");
146
+ }
147
+ writeDescription(context) {
148
+ const { writer } = context;
149
+ writer.writeln("Convert text into a downloadable PNG image with word wrapping");
150
+ writer.writeln();
151
+ writer.writeln("Usage:");
152
+ writer.writeln(
153
+ ` ${writer.wrapInColor("text-to-image <text> [options]", cliCore.CliForegroundColor.Cyan)}`
154
+ );
155
+ writer.writeln();
156
+ writer.writeln("Options:");
157
+ writer.writeln(
158
+ ` ${writer.wrapInColor("--width", cliCore.CliForegroundColor.Yellow)} Image width in pixels (default: ${DEFAULT_WIDTH})`
159
+ );
160
+ writer.writeln(
161
+ ` ${writer.wrapInColor("--height", cliCore.CliForegroundColor.Yellow)} Image height in pixels (default: ${DEFAULT_HEIGHT})`
162
+ );
163
+ writer.writeln(
164
+ ` ${writer.wrapInColor("--bgColor", cliCore.CliForegroundColor.Yellow)} Background color in hex (default: ${DEFAULT_BG_COLOR})`
165
+ );
166
+ writer.writeln(
167
+ ` ${writer.wrapInColor("--textColor", cliCore.CliForegroundColor.Yellow)} Text color in hex (default: ${DEFAULT_TEXT_COLOR})`
168
+ );
169
+ writer.writeln(
170
+ ` ${writer.wrapInColor("--font", cliCore.CliForegroundColor.Yellow)} CSS font string (default: ${DEFAULT_FONT})`
171
+ );
172
+ writer.writeln(
173
+ ` ${writer.wrapInColor("--fileName", cliCore.CliForegroundColor.Yellow)} Output filename (default: ${DEFAULT_FILENAME})`
174
+ );
175
+ writer.writeln(
176
+ ` ${writer.wrapInColor("--padding", cliCore.CliForegroundColor.Yellow)} Padding around text in pixels (default: ${DEFAULT_PADDING})`
177
+ );
178
+ writer.writeln(
179
+ ` ${writer.wrapInColor("--textAlign", cliCore.CliForegroundColor.Yellow)} Text alignment: left, center, right (default: center)`
180
+ );
181
+ writer.writeln();
182
+ writer.writeln("Examples:");
183
+ writer.writeln(
184
+ ` text-to-image "Hello World"`
185
+ );
186
+ writer.writeln(
187
+ ` ${writer.wrapInColor("# Download a centered 800x400 image with default styling", cliCore.CliForegroundColor.Green)}`
188
+ );
189
+ writer.writeln();
190
+ writer.writeln(
191
+ ` text-to-image "Welcome Banner" --bgColor=#1a1a2e --textColor=#e0e0e0 --font="bold 48px Georgia"`
192
+ );
193
+ writer.writeln(
194
+ ` ${writer.wrapInColor("# Dark background with light text in a custom font", cliCore.CliForegroundColor.Green)}`
195
+ );
196
+ writer.writeln();
197
+ writer.writeln(
198
+ ` text-to-image "This is a long paragraph that will automatically wrap to fit within the image boundaries" --width=600 --height=300`
199
+ );
200
+ writer.writeln(
201
+ ` ${writer.wrapInColor("# Long text is wrapped automatically", cliCore.CliForegroundColor.Green)}`
202
+ );
203
+ writer.writeln();
204
+ writer.writeln(
205
+ ` text-to-image "Left aligned notes" --textAlign=left --padding=60`
206
+ );
207
+ writer.writeln(
208
+ ` ${writer.wrapInColor("# Left-aligned with extra padding", cliCore.CliForegroundColor.Green)}`
209
+ );
210
+ }
211
+ wrapText(ctx, text, maxWidth) {
212
+ if (!text) return [""];
213
+ const words = text.split(" ");
214
+ const lines = [];
215
+ let currentLine = "";
216
+ for (const word of words) {
217
+ const testLine = currentLine ? `${currentLine} ${word}` : word;
218
+ const metrics = ctx.measureText(testLine);
219
+ if (metrics.width > maxWidth && currentLine) {
220
+ lines.push(currentLine);
221
+ currentLine = word;
222
+ } else {
223
+ currentLine = testLine;
224
+ }
225
+ }
226
+ if (currentLine) {
227
+ lines.push(currentLine);
228
+ }
229
+ return lines;
230
+ }
231
+ getLineHeight(ctx) {
232
+ const metrics = ctx.measureText("Mg");
233
+ const ascent = metrics.actualBoundingBoxAscent ?? 0;
234
+ const descent = metrics.actualBoundingBoxDescent ?? 0;
235
+ return (ascent + descent) * 1.4 || 36;
236
+ }
237
+ };
238
+
239
+ // src/public-api.ts
240
+ var textToImageModule = {
241
+ apiVersion: API_VERSION,
242
+ name: "@qodalis/cli-text-to-image",
243
+ processors: [new CliTextToImageCommandProcessor()],
244
+ translations: {
245
+ es: { "cli.text-to-image.description": "Convertir texto a imagen" },
246
+ fr: { "cli.text-to-image.description": "Convertir du texte en image" },
247
+ de: { "cli.text-to-image.description": "Text in Bild umwandeln" },
248
+ pt: { "cli.text-to-image.description": "Converter texto em imagem" },
249
+ it: { "cli.text-to-image.description": "Convertire testo in immagine" },
250
+ ja: { "cli.text-to-image.description": "\u30C6\u30AD\u30B9\u30C8\u3092\u753B\u50CF\u306B\u5909\u63DB" },
251
+ ko: { "cli.text-to-image.description": "\uD14D\uC2A4\uD2B8\uB97C \uC774\uBBF8\uC9C0\uB85C \uBCC0\uD658" },
252
+ zh: { "cli.text-to-image.description": "\u5C06\u6587\u672C\u8F6C\u6362\u4E3A\u56FE\u7247" },
253
+ ru: { "cli.text-to-image.description": "\u041F\u0440\u0435\u043E\u0431\u0440\u0430\u0437\u043E\u0432\u0430\u043D\u0438\u0435 \u0442\u0435\u043A\u0441\u0442\u0430 \u0432 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435" },
254
+ ro: { "cli.text-to-image.description": "Convertire text \xEEn imagine" }
255
+ }
256
+ };
257
+
258
+ exports.CliTextToImageCommandProcessor = CliTextToImageCommandProcessor;
259
+ exports.textToImageModule = textToImageModule;
260
+ //# sourceMappingURL=public-api.js.map
261
+ //# sourceMappingURL=public-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../packages/plugins/text-to-image/src/lib/version.ts","../../packages/plugins/text-to-image/src/lib/processors/cli-text-to-image-command-processor.ts","../../packages/plugins/text-to-image/src/public-api.ts"],"names":["DefaultLibraryAuthor","CliForegroundColor"],"mappings":"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","file":"public-api.js","sourcesContent":["\n// Automatically generated during build\nexport const LIBRARY_VERSION = '2.0.0-beta.1';\nexport const API_VERSION = 2;\n ","import {\n CliForegroundColor,\n CliProcessCommand,\n CliProcessorMetadata,\n DefaultLibraryAuthor,\n ICliCommandParameterDescriptor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { LIBRARY_VERSION } from '../version';\n\nconst DEFAULT_WIDTH = 800;\nconst DEFAULT_HEIGHT = 400;\nconst DEFAULT_BG_COLOR = '#ffffff';\nconst DEFAULT_TEXT_COLOR = '#000000';\nconst DEFAULT_FONT = '30px Arial';\nconst DEFAULT_FILENAME = 'text-image.png';\nconst DEFAULT_PADDING = 40;\n\nexport class CliTextToImageCommandProcessor implements ICliCommandProcessor {\n command = 'text-to-image';\n description = 'Convert text to image';\n author = DefaultLibraryAuthor;\n valueRequired = true;\n\n metadata?: CliProcessorMetadata | undefined = {\n icon: '🖼️',\n module: 'text-to-image',\n requiredCoreVersion: '>=2.0.0 <3.0.0',\n requiredCliVersion: '>=2.0.0 <3.0.0',\n };\n\n parameters?: ICliCommandParameterDescriptor[] | undefined = [\n {\n name: 'fileName',\n description: `Output filename (default: ${DEFAULT_FILENAME})`,\n type: 'string',\n required: false,\n },\n {\n name: 'width',\n description: `Image width in pixels (default: ${DEFAULT_WIDTH})`,\n type: 'integer',\n required: false,\n },\n {\n name: 'height',\n description: `Image height in pixels (default: ${DEFAULT_HEIGHT})`,\n type: 'integer',\n required: false,\n },\n {\n name: 'bgColor',\n description: `Background color in hex format (default: ${DEFAULT_BG_COLOR})`,\n type: 'string',\n required: false,\n },\n {\n name: 'textColor',\n description: `Text color in hex format (default: ${DEFAULT_TEXT_COLOR})`,\n type: 'string',\n required: false,\n },\n {\n name: 'font',\n description: `CSS font string, e.g. \"bold 48px Georgia\" (default: ${DEFAULT_FONT})`,\n type: 'string',\n required: false,\n },\n {\n name: 'padding',\n description: `Padding in pixels around the text (default: ${DEFAULT_PADDING})`,\n type: 'integer',\n required: false,\n },\n {\n name: 'textAlign',\n description: 'Horizontal text alignment: left, center, or right (default: center)',\n type: 'string',\n required: false,\n },\n ];\n\n acceptsRawInput = true;\n\n version = LIBRARY_VERSION;\n\n constructor() {}\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const text = command.value || '';\n const width = command.args['width'] ?? DEFAULT_WIDTH;\n const height = command.args['height'] ?? DEFAULT_HEIGHT;\n const filename = command.args['fileName'] ?? DEFAULT_FILENAME;\n const bgColor = command.args['bgColor'] || DEFAULT_BG_COLOR;\n const textColor = command.args['textColor'] || DEFAULT_TEXT_COLOR;\n const font = command.args['font'] || DEFAULT_FONT;\n const padding = command.args['padding'] ?? DEFAULT_PADDING;\n const textAlign = command.args['textAlign'] || 'center';\n\n const canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n const ctx = canvas.getContext('2d');\n\n if (!ctx) {\n context.writer.writeError('Failed to get canvas context');\n return;\n }\n\n // Fill background\n ctx.fillStyle = bgColor;\n ctx.fillRect(0, 0, width, height);\n\n // Configure text rendering\n ctx.fillStyle = textColor;\n ctx.font = font;\n ctx.textAlign = textAlign as CanvasTextAlign;\n ctx.textBaseline = 'middle';\n\n // Wrap and render text\n const maxTextWidth = width - padding * 2;\n const lines = this.wrapText(ctx, text, maxTextWidth);\n const lineHeight = this.getLineHeight(ctx);\n const totalTextHeight = lines.length * lineHeight;\n const startY = (height - totalTextHeight) / 2 + lineHeight / 2;\n\n let x: number;\n if (textAlign === 'left') {\n x = padding;\n } else if (textAlign === 'right') {\n x = width - padding;\n } else {\n x = width / 2;\n }\n\n for (let i = 0; i < lines.length; i++) {\n ctx.fillText(lines[i], x, startY + i * lineHeight);\n }\n\n // Trigger download\n const dataUrl = canvas.toDataURL('image/png');\n const link = document.createElement('a');\n link.href = dataUrl;\n link.download = filename;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n\n // Report applied options\n const label = (name: string) =>\n context.writer.wrapInColor(name, CliForegroundColor.Yellow);\n context.writer.writeInfo('Options:');\n context.writer.writeInfo(` ${label('Text')}: ${text}`);\n context.writer.writeInfo(` ${label('Size')}: ${width} x ${height}`);\n context.writer.writeInfo(` ${label('Background')}: ${bgColor}`);\n context.writer.writeInfo(` ${label('Text color')}: ${textColor}`);\n context.writer.writeInfo(` ${label('Font')}: ${font}`);\n context.writer.writeInfo(` ${label('Padding')}: ${padding}px`);\n context.writer.writeInfo(` ${label('Alignment')}: ${textAlign}`);\n context.writer.writeInfo(` ${label('Filename')}: ${filename}`);\n if (lines.length > 1) {\n context.writer.writeInfo(` ${label('Lines')}: ${lines.length}`);\n }\n context.writer.writeln();\n context.writer.writeSuccess('Image created successfully');\n }\n\n writeDescription(context: ICliExecutionContext): void {\n const { writer } = context;\n writer.writeln('Convert text into a downloadable PNG image with word wrapping');\n writer.writeln();\n writer.writeln('Usage:');\n writer.writeln(\n ` ${writer.wrapInColor('text-to-image <text> [options]', CliForegroundColor.Cyan)}`,\n );\n writer.writeln();\n writer.writeln('Options:');\n writer.writeln(\n ` ${writer.wrapInColor('--width', CliForegroundColor.Yellow)} Image width in pixels (default: ${DEFAULT_WIDTH})`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('--height', CliForegroundColor.Yellow)} Image height in pixels (default: ${DEFAULT_HEIGHT})`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('--bgColor', CliForegroundColor.Yellow)} Background color in hex (default: ${DEFAULT_BG_COLOR})`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('--textColor', CliForegroundColor.Yellow)} Text color in hex (default: ${DEFAULT_TEXT_COLOR})`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('--font', CliForegroundColor.Yellow)} CSS font string (default: ${DEFAULT_FONT})`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('--fileName', CliForegroundColor.Yellow)} Output filename (default: ${DEFAULT_FILENAME})`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('--padding', CliForegroundColor.Yellow)} Padding around text in pixels (default: ${DEFAULT_PADDING})`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('--textAlign', CliForegroundColor.Yellow)} Text alignment: left, center, right (default: center)`,\n );\n writer.writeln();\n writer.writeln('Examples:');\n writer.writeln(\n ` text-to-image \"Hello World\"`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('# Download a centered 800x400 image with default styling', CliForegroundColor.Green)}`,\n );\n writer.writeln();\n writer.writeln(\n ` text-to-image \"Welcome Banner\" --bgColor=#1a1a2e --textColor=#e0e0e0 --font=\"bold 48px Georgia\"`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('# Dark background with light text in a custom font', CliForegroundColor.Green)}`,\n );\n writer.writeln();\n writer.writeln(\n ` text-to-image \"This is a long paragraph that will automatically wrap to fit within the image boundaries\" --width=600 --height=300`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('# Long text is wrapped automatically', CliForegroundColor.Green)}`,\n );\n writer.writeln();\n writer.writeln(\n ` text-to-image \"Left aligned notes\" --textAlign=left --padding=60`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('# Left-aligned with extra padding', CliForegroundColor.Green)}`,\n );\n }\n\n private wrapText(\n ctx: CanvasRenderingContext2D,\n text: string,\n maxWidth: number,\n ): string[] {\n if (!text) return [''];\n\n const words = text.split(' ');\n const lines: string[] = [];\n let currentLine = '';\n\n for (const word of words) {\n const testLine = currentLine ? `${currentLine} ${word}` : word;\n const metrics = ctx.measureText(testLine);\n\n if (metrics.width > maxWidth && currentLine) {\n lines.push(currentLine);\n currentLine = word;\n } else {\n currentLine = testLine;\n }\n }\n\n if (currentLine) {\n lines.push(currentLine);\n }\n\n return lines;\n }\n\n private getLineHeight(ctx: CanvasRenderingContext2D): number {\n const metrics = ctx.measureText('Mg');\n const ascent = metrics.actualBoundingBoxAscent ?? 0;\n const descent = metrics.actualBoundingBoxDescent ?? 0;\n return (ascent + descent) * 1.4 || 36;\n }\n}\n","/*\n * Public API Surface of text-to-image\n */\n\nexport * from './lib/processors/cli-text-to-image-command-processor';\n\nimport { ICliModule } from '@qodalis/cli-core';\nimport { CliTextToImageCommandProcessor } from './lib/processors/cli-text-to-image-command-processor';\nimport { API_VERSION } from './lib/version';\n\nexport const textToImageModule: ICliModule = {\n apiVersion: API_VERSION,\n name: '@qodalis/cli-text-to-image',\n processors: [new CliTextToImageCommandProcessor()],\n translations: {\n es: { 'cli.text-to-image.description': 'Convertir texto a imagen' },\n fr: { 'cli.text-to-image.description': 'Convertir du texte en image' },\n de: { 'cli.text-to-image.description': 'Text in Bild umwandeln' },\n pt: { 'cli.text-to-image.description': 'Converter texto em imagem' },\n it: { 'cli.text-to-image.description': 'Convertire testo in immagine' },\n ja: { 'cli.text-to-image.description': 'テキストを画像に変換' },\n ko: { 'cli.text-to-image.description': '텍스트를 이미지로 변환' },\n zh: { 'cli.text-to-image.description': '将文本转换为图片' },\n ru: { 'cli.text-to-image.description': 'Преобразование текста в изображение' },\n ro: { 'cli.text-to-image.description': 'Convertire text în imagine' },\n },\n};\n"]}