@qodalis/cli-text-to-image 2.0.0-beta.7 → 2.0.0-beta.9
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 +2 -2
- package/public-api.d.mts +2 -1
- package/public-api.d.ts +2 -1
- package/public-api.js +51 -6
- package/public-api.js.map +1 -1
- package/public-api.mjs +52 -7
- package/public-api.mjs.map +1 -1
- package/umd/index.global.js +82 -10
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@qodalis/cli-text-to-image",
|
|
3
|
-
"version": "2.0.0-beta.
|
|
3
|
+
"version": "2.0.0-beta.9",
|
|
4
4
|
"description": "@qodalis/cli extension for converting text to images.",
|
|
5
5
|
"author": "Nicolae Lupei, Qodalis Solutions",
|
|
6
6
|
"license": "MIT",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"umd": "./umd/index.global.js",
|
|
23
23
|
"unpkg": "./umd/index.global.js",
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@qodalis/cli-core": "2.0.0-beta.
|
|
25
|
+
"@qodalis/cli-core": "2.0.0-beta.9"
|
|
26
26
|
},
|
|
27
27
|
"sideEffects": false,
|
|
28
28
|
"main": "./public-api.js",
|
package/public-api.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as _qodalis_cli_core from '@qodalis/cli-core';
|
|
2
|
-
import { ICliCommandProcessor, CliProcessorMetadata, ICliCommandParameterDescriptor, CliProcessCommand, ICliExecutionContext, ICliModule } from '@qodalis/cli-core';
|
|
2
|
+
import { ICliCommandProcessor, CliProcessorMetadata, ICliConfigurationOption, ICliCommandParameterDescriptor, CliProcessCommand, ICliExecutionContext, ICliModule } from '@qodalis/cli-core';
|
|
3
3
|
|
|
4
4
|
declare class CliTextToImageCommandProcessor implements ICliCommandProcessor {
|
|
5
5
|
command: string;
|
|
@@ -7,6 +7,7 @@ declare class CliTextToImageCommandProcessor implements ICliCommandProcessor {
|
|
|
7
7
|
author: _qodalis_cli_core.ICliCommandAuthor;
|
|
8
8
|
valueRequired: boolean;
|
|
9
9
|
metadata?: CliProcessorMetadata | undefined;
|
|
10
|
+
configurationOptions?: ICliConfigurationOption[];
|
|
10
11
|
parameters?: ICliCommandParameterDescriptor[] | undefined;
|
|
11
12
|
acceptsRawInput: boolean;
|
|
12
13
|
version: string;
|
package/public-api.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as _qodalis_cli_core from '@qodalis/cli-core';
|
|
2
|
-
import { ICliCommandProcessor, CliProcessorMetadata, ICliCommandParameterDescriptor, CliProcessCommand, ICliExecutionContext, ICliModule } from '@qodalis/cli-core';
|
|
2
|
+
import { ICliCommandProcessor, CliProcessorMetadata, ICliConfigurationOption, ICliCommandParameterDescriptor, CliProcessCommand, ICliExecutionContext, ICliModule } from '@qodalis/cli-core';
|
|
3
3
|
|
|
4
4
|
declare class CliTextToImageCommandProcessor implements ICliCommandProcessor {
|
|
5
5
|
command: string;
|
|
@@ -7,6 +7,7 @@ declare class CliTextToImageCommandProcessor implements ICliCommandProcessor {
|
|
|
7
7
|
author: _qodalis_cli_core.ICliCommandAuthor;
|
|
8
8
|
valueRequired: boolean;
|
|
9
9
|
metadata?: CliProcessorMetadata | undefined;
|
|
10
|
+
configurationOptions?: ICliConfigurationOption[];
|
|
10
11
|
parameters?: ICliCommandParameterDescriptor[] | undefined;
|
|
11
12
|
acceptsRawInput: boolean;
|
|
12
13
|
version: string;
|
package/public-api.js
CHANGED
|
@@ -5,7 +5,7 @@ var cliCore = require('@qodalis/cli-core');
|
|
|
5
5
|
// src/lib/processors/cli-text-to-image-command-processor.ts
|
|
6
6
|
|
|
7
7
|
// src/lib/version.ts
|
|
8
|
-
var LIBRARY_VERSION = "2.0.0-beta.
|
|
8
|
+
var LIBRARY_VERSION = "2.0.0-beta.9";
|
|
9
9
|
var API_VERSION = 2;
|
|
10
10
|
|
|
11
11
|
// src/lib/processors/cli-text-to-image-command-processor.ts
|
|
@@ -28,6 +28,51 @@ var CliTextToImageCommandProcessor = class {
|
|
|
28
28
|
requiredCoreVersion: ">=2.0.0 <3.0.0",
|
|
29
29
|
requiredCliVersion: ">=2.0.0 <3.0.0"
|
|
30
30
|
};
|
|
31
|
+
this.configurationOptions = [
|
|
32
|
+
{
|
|
33
|
+
key: "defaultWidth",
|
|
34
|
+
label: "Default Width",
|
|
35
|
+
description: "Default image width in pixels",
|
|
36
|
+
type: "number",
|
|
37
|
+
defaultValue: DEFAULT_WIDTH,
|
|
38
|
+
validator: (v) => ({
|
|
39
|
+
valid: typeof v === "number" && v >= 50 && v <= 4096,
|
|
40
|
+
message: "Must be between 50 and 4096"
|
|
41
|
+
})
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
key: "defaultHeight",
|
|
45
|
+
label: "Default Height",
|
|
46
|
+
description: "Default image height in pixels",
|
|
47
|
+
type: "number",
|
|
48
|
+
defaultValue: DEFAULT_HEIGHT,
|
|
49
|
+
validator: (v) => ({
|
|
50
|
+
valid: typeof v === "number" && v >= 50 && v <= 4096,
|
|
51
|
+
message: "Must be between 50 and 4096"
|
|
52
|
+
})
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
key: "defaultBgColor",
|
|
56
|
+
label: "Background Color",
|
|
57
|
+
description: "Default background color (hex format)",
|
|
58
|
+
type: "string",
|
|
59
|
+
defaultValue: DEFAULT_BG_COLOR
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
key: "defaultTextColor",
|
|
63
|
+
label: "Text Color",
|
|
64
|
+
description: "Default text color (hex format)",
|
|
65
|
+
type: "string",
|
|
66
|
+
defaultValue: DEFAULT_TEXT_COLOR
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
key: "defaultFont",
|
|
70
|
+
label: "Font",
|
|
71
|
+
description: 'Default font specification (e.g. "30px Arial")',
|
|
72
|
+
type: "string",
|
|
73
|
+
defaultValue: DEFAULT_FONT
|
|
74
|
+
}
|
|
75
|
+
];
|
|
31
76
|
this.parameters = [
|
|
32
77
|
{
|
|
33
78
|
name: "fileName",
|
|
@@ -83,12 +128,12 @@ var CliTextToImageCommandProcessor = class {
|
|
|
83
128
|
}
|
|
84
129
|
async processCommand(command, context) {
|
|
85
130
|
const text = command.value || "";
|
|
86
|
-
const width = command.args["width"] ?? DEFAULT_WIDTH;
|
|
87
|
-
const height = command.args["height"] ?? DEFAULT_HEIGHT;
|
|
131
|
+
const width = command.args["width"] ?? cliCore.getPluginConfigValue(context, "text-to-image", "defaultWidth", DEFAULT_WIDTH);
|
|
132
|
+
const height = command.args["height"] ?? cliCore.getPluginConfigValue(context, "text-to-image", "defaultHeight", DEFAULT_HEIGHT);
|
|
88
133
|
const filename = command.args["fileName"] ?? DEFAULT_FILENAME;
|
|
89
|
-
const bgColor = command.args["bgColor"]
|
|
90
|
-
const textColor = command.args["textColor"]
|
|
91
|
-
const font = command.args["font"]
|
|
134
|
+
const bgColor = command.args["bgColor"] ?? cliCore.getPluginConfigValue(context, "text-to-image", "defaultBgColor", DEFAULT_BG_COLOR);
|
|
135
|
+
const textColor = command.args["textColor"] ?? cliCore.getPluginConfigValue(context, "text-to-image", "defaultTextColor", DEFAULT_TEXT_COLOR);
|
|
136
|
+
const font = command.args["font"] ?? cliCore.getPluginConfigValue(context, "text-to-image", "defaultFont", DEFAULT_FONT);
|
|
92
137
|
const padding = command.args["padding"] ?? DEFAULT_PADDING;
|
|
93
138
|
const textAlign = command.args["textAlign"] || "center";
|
|
94
139
|
const canvas = document.createElement("canvas");
|
package/public-api.js.map
CHANGED
|
@@ -1 +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.7';\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"]}
|
|
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","getPluginConfigValue","CliForegroundColor"],"mappings":"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","file":"public-api.js","sourcesContent":["\n// Automatically generated during build\nexport const LIBRARY_VERSION = '2.0.0-beta.9';\nexport const API_VERSION = 2;\n ","import {\n CliForegroundColor,\n CliProcessCommand,\n CliProcessorMetadata,\n DefaultLibraryAuthor,\n ICliCommandParameterDescriptor,\n ICliCommandProcessor,\n ICliConfigurationOption,\n ICliExecutionContext,\n getPluginConfigValue,\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 configurationOptions?: ICliConfigurationOption[] = [\n {\n key: 'defaultWidth',\n label: 'Default Width',\n description: 'Default image width in pixels',\n type: 'number',\n defaultValue: DEFAULT_WIDTH,\n validator: (v) => ({\n valid: typeof v === 'number' && v >= 50 && v <= 4096,\n message: 'Must be between 50 and 4096',\n }),\n },\n {\n key: 'defaultHeight',\n label: 'Default Height',\n description: 'Default image height in pixels',\n type: 'number',\n defaultValue: DEFAULT_HEIGHT,\n validator: (v) => ({\n valid: typeof v === 'number' && v >= 50 && v <= 4096,\n message: 'Must be between 50 and 4096',\n }),\n },\n {\n key: 'defaultBgColor',\n label: 'Background Color',\n description: 'Default background color (hex format)',\n type: 'string',\n defaultValue: DEFAULT_BG_COLOR,\n },\n {\n key: 'defaultTextColor',\n label: 'Text Color',\n description: 'Default text color (hex format)',\n type: 'string',\n defaultValue: DEFAULT_TEXT_COLOR,\n },\n {\n key: 'defaultFont',\n label: 'Font',\n description: 'Default font specification (e.g. \"30px Arial\")',\n type: 'string',\n defaultValue: DEFAULT_FONT,\n },\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'] ?? getPluginConfigValue(context, 'text-to-image', 'defaultWidth', DEFAULT_WIDTH);\n const height = command.args['height'] ?? getPluginConfigValue(context, 'text-to-image', 'defaultHeight', DEFAULT_HEIGHT);\n const filename = command.args['fileName'] ?? DEFAULT_FILENAME;\n const bgColor = command.args['bgColor'] ?? getPluginConfigValue(context, 'text-to-image', 'defaultBgColor', DEFAULT_BG_COLOR);\n const textColor = command.args['textColor'] ?? getPluginConfigValue(context, 'text-to-image', 'defaultTextColor', DEFAULT_TEXT_COLOR);\n const font = command.args['font'] ?? getPluginConfigValue(context, 'text-to-image', 'defaultFont', 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"]}
|
package/public-api.mjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { DefaultLibraryAuthor, CliForegroundColor } from '@qodalis/cli-core';
|
|
1
|
+
import { DefaultLibraryAuthor, getPluginConfigValue, CliForegroundColor } from '@qodalis/cli-core';
|
|
2
2
|
|
|
3
3
|
// src/lib/processors/cli-text-to-image-command-processor.ts
|
|
4
4
|
|
|
5
5
|
// src/lib/version.ts
|
|
6
|
-
var LIBRARY_VERSION = "2.0.0-beta.
|
|
6
|
+
var LIBRARY_VERSION = "2.0.0-beta.9";
|
|
7
7
|
var API_VERSION = 2;
|
|
8
8
|
|
|
9
9
|
// src/lib/processors/cli-text-to-image-command-processor.ts
|
|
@@ -26,6 +26,51 @@ var CliTextToImageCommandProcessor = class {
|
|
|
26
26
|
requiredCoreVersion: ">=2.0.0 <3.0.0",
|
|
27
27
|
requiredCliVersion: ">=2.0.0 <3.0.0"
|
|
28
28
|
};
|
|
29
|
+
this.configurationOptions = [
|
|
30
|
+
{
|
|
31
|
+
key: "defaultWidth",
|
|
32
|
+
label: "Default Width",
|
|
33
|
+
description: "Default image width in pixels",
|
|
34
|
+
type: "number",
|
|
35
|
+
defaultValue: DEFAULT_WIDTH,
|
|
36
|
+
validator: (v) => ({
|
|
37
|
+
valid: typeof v === "number" && v >= 50 && v <= 4096,
|
|
38
|
+
message: "Must be between 50 and 4096"
|
|
39
|
+
})
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
key: "defaultHeight",
|
|
43
|
+
label: "Default Height",
|
|
44
|
+
description: "Default image height in pixels",
|
|
45
|
+
type: "number",
|
|
46
|
+
defaultValue: DEFAULT_HEIGHT,
|
|
47
|
+
validator: (v) => ({
|
|
48
|
+
valid: typeof v === "number" && v >= 50 && v <= 4096,
|
|
49
|
+
message: "Must be between 50 and 4096"
|
|
50
|
+
})
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
key: "defaultBgColor",
|
|
54
|
+
label: "Background Color",
|
|
55
|
+
description: "Default background color (hex format)",
|
|
56
|
+
type: "string",
|
|
57
|
+
defaultValue: DEFAULT_BG_COLOR
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
key: "defaultTextColor",
|
|
61
|
+
label: "Text Color",
|
|
62
|
+
description: "Default text color (hex format)",
|
|
63
|
+
type: "string",
|
|
64
|
+
defaultValue: DEFAULT_TEXT_COLOR
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
key: "defaultFont",
|
|
68
|
+
label: "Font",
|
|
69
|
+
description: 'Default font specification (e.g. "30px Arial")',
|
|
70
|
+
type: "string",
|
|
71
|
+
defaultValue: DEFAULT_FONT
|
|
72
|
+
}
|
|
73
|
+
];
|
|
29
74
|
this.parameters = [
|
|
30
75
|
{
|
|
31
76
|
name: "fileName",
|
|
@@ -81,12 +126,12 @@ var CliTextToImageCommandProcessor = class {
|
|
|
81
126
|
}
|
|
82
127
|
async processCommand(command, context) {
|
|
83
128
|
const text = command.value || "";
|
|
84
|
-
const width = command.args["width"] ?? DEFAULT_WIDTH;
|
|
85
|
-
const height = command.args["height"] ?? DEFAULT_HEIGHT;
|
|
129
|
+
const width = command.args["width"] ?? getPluginConfigValue(context, "text-to-image", "defaultWidth", DEFAULT_WIDTH);
|
|
130
|
+
const height = command.args["height"] ?? getPluginConfigValue(context, "text-to-image", "defaultHeight", DEFAULT_HEIGHT);
|
|
86
131
|
const filename = command.args["fileName"] ?? DEFAULT_FILENAME;
|
|
87
|
-
const bgColor = command.args["bgColor"]
|
|
88
|
-
const textColor = command.args["textColor"]
|
|
89
|
-
const font = command.args["font"]
|
|
132
|
+
const bgColor = command.args["bgColor"] ?? getPluginConfigValue(context, "text-to-image", "defaultBgColor", DEFAULT_BG_COLOR);
|
|
133
|
+
const textColor = command.args["textColor"] ?? getPluginConfigValue(context, "text-to-image", "defaultTextColor", DEFAULT_TEXT_COLOR);
|
|
134
|
+
const font = command.args["font"] ?? getPluginConfigValue(context, "text-to-image", "defaultFont", DEFAULT_FONT);
|
|
90
135
|
const padding = command.args["padding"] ?? DEFAULT_PADDING;
|
|
91
136
|
const textAlign = command.args["textAlign"] || "center";
|
|
92
137
|
const canvas = document.createElement("canvas");
|
package/public-api.mjs.map
CHANGED
|
@@ -1 +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":[],"mappings":"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","file":"public-api.mjs","sourcesContent":["\n// Automatically generated during build\nexport const LIBRARY_VERSION = '2.0.0-beta.7';\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"]}
|
|
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":[],"mappings":"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","file":"public-api.mjs","sourcesContent":["\n// Automatically generated during build\nexport const LIBRARY_VERSION = '2.0.0-beta.9';\nexport const API_VERSION = 2;\n ","import {\n CliForegroundColor,\n CliProcessCommand,\n CliProcessorMetadata,\n DefaultLibraryAuthor,\n ICliCommandParameterDescriptor,\n ICliCommandProcessor,\n ICliConfigurationOption,\n ICliExecutionContext,\n getPluginConfigValue,\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 configurationOptions?: ICliConfigurationOption[] = [\n {\n key: 'defaultWidth',\n label: 'Default Width',\n description: 'Default image width in pixels',\n type: 'number',\n defaultValue: DEFAULT_WIDTH,\n validator: (v) => ({\n valid: typeof v === 'number' && v >= 50 && v <= 4096,\n message: 'Must be between 50 and 4096',\n }),\n },\n {\n key: 'defaultHeight',\n label: 'Default Height',\n description: 'Default image height in pixels',\n type: 'number',\n defaultValue: DEFAULT_HEIGHT,\n validator: (v) => ({\n valid: typeof v === 'number' && v >= 50 && v <= 4096,\n message: 'Must be between 50 and 4096',\n }),\n },\n {\n key: 'defaultBgColor',\n label: 'Background Color',\n description: 'Default background color (hex format)',\n type: 'string',\n defaultValue: DEFAULT_BG_COLOR,\n },\n {\n key: 'defaultTextColor',\n label: 'Text Color',\n description: 'Default text color (hex format)',\n type: 'string',\n defaultValue: DEFAULT_TEXT_COLOR,\n },\n {\n key: 'defaultFont',\n label: 'Font',\n description: 'Default font specification (e.g. \"30px Arial\")',\n type: 'string',\n defaultValue: DEFAULT_FONT,\n },\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'] ?? getPluginConfigValue(context, 'text-to-image', 'defaultWidth', DEFAULT_WIDTH);\n const height = command.args['height'] ?? getPluginConfigValue(context, 'text-to-image', 'defaultHeight', DEFAULT_HEIGHT);\n const filename = command.args['fileName'] ?? DEFAULT_FILENAME;\n const bgColor = command.args['bgColor'] ?? getPluginConfigValue(context, 'text-to-image', 'defaultBgColor', DEFAULT_BG_COLOR);\n const textColor = command.args['textColor'] ?? getPluginConfigValue(context, 'text-to-image', 'defaultTextColor', DEFAULT_TEXT_COLOR);\n const font = command.args['font'] ?? getPluginConfigValue(context, 'text-to-image', 'defaultFont', 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"]}
|
package/umd/index.global.js
CHANGED
|
@@ -1837,10 +1837,37 @@ var textToImage = (() => {
|
|
|
1837
1837
|
name: "Nicolae Lupei",
|
|
1838
1838
|
email: "nicolae.lupei@qodalis.com"
|
|
1839
1839
|
};
|
|
1840
|
+
var CLI_CONFIGURE_STORE_NAME = "configure";
|
|
1841
|
+
function getConfigValue(state, category, key, defaultValue) {
|
|
1842
|
+
try {
|
|
1843
|
+
const s = state.getState();
|
|
1844
|
+
const bucket = category === "system" ? s?.["system"] : s?.["plugins"]?.[category];
|
|
1845
|
+
if (bucket && key in bucket) {
|
|
1846
|
+
return bucket[key];
|
|
1847
|
+
}
|
|
1848
|
+
} catch {
|
|
1849
|
+
}
|
|
1850
|
+
return defaultValue;
|
|
1851
|
+
}
|
|
1852
|
+
function getPluginConfigValue(context, category, key, defaultValue) {
|
|
1853
|
+
try {
|
|
1854
|
+
const storeManager = context.services.get(
|
|
1855
|
+
"cli-state-store-manager"
|
|
1856
|
+
);
|
|
1857
|
+
if (!storeManager) return defaultValue;
|
|
1858
|
+
const store = storeManager.getStateStore(CLI_CONFIGURE_STORE_NAME);
|
|
1859
|
+
if (!store) return defaultValue;
|
|
1860
|
+
return getConfigValue(store, category, key, defaultValue);
|
|
1861
|
+
} catch {
|
|
1862
|
+
return defaultValue;
|
|
1863
|
+
}
|
|
1864
|
+
}
|
|
1840
1865
|
var semver = __toESM(require_semver2());
|
|
1866
|
+
var API_VERSION = 2;
|
|
1867
|
+
var VERSIONS_ENDPOINT = "/api/qcli/versions";
|
|
1841
1868
|
var ServerVersionNegotiator = class {
|
|
1842
1869
|
static {
|
|
1843
|
-
this.CLIENT_SUPPORTED_VERSIONS = [
|
|
1870
|
+
this.CLIENT_SUPPORTED_VERSIONS = [API_VERSION];
|
|
1844
1871
|
}
|
|
1845
1872
|
/**
|
|
1846
1873
|
* Given a server's version info, pick the highest mutually compatible version.
|
|
@@ -1859,7 +1886,7 @@ var textToImage = (() => {
|
|
|
1859
1886
|
*/
|
|
1860
1887
|
static async discover(baseUrl) {
|
|
1861
1888
|
try {
|
|
1862
|
-
const response = await fetch(`${baseUrl}
|
|
1889
|
+
const response = await fetch(`${baseUrl}${VERSIONS_ENDPOINT}`);
|
|
1863
1890
|
if (!response.ok) return null;
|
|
1864
1891
|
const info = await response.json();
|
|
1865
1892
|
const version = this.negotiate(info);
|
|
@@ -2691,8 +2718,8 @@ var textToImage = (() => {
|
|
|
2691
2718
|
};
|
|
2692
2719
|
|
|
2693
2720
|
// src/lib/version.ts
|
|
2694
|
-
var LIBRARY_VERSION = "2.0.0-beta.
|
|
2695
|
-
var
|
|
2721
|
+
var LIBRARY_VERSION = "2.0.0-beta.9";
|
|
2722
|
+
var API_VERSION2 = 2;
|
|
2696
2723
|
|
|
2697
2724
|
// src/lib/processors/cli-text-to-image-command-processor.ts
|
|
2698
2725
|
var DEFAULT_WIDTH = 800;
|
|
@@ -2714,6 +2741,51 @@ var textToImage = (() => {
|
|
|
2714
2741
|
requiredCoreVersion: ">=2.0.0 <3.0.0",
|
|
2715
2742
|
requiredCliVersion: ">=2.0.0 <3.0.0"
|
|
2716
2743
|
};
|
|
2744
|
+
this.configurationOptions = [
|
|
2745
|
+
{
|
|
2746
|
+
key: "defaultWidth",
|
|
2747
|
+
label: "Default Width",
|
|
2748
|
+
description: "Default image width in pixels",
|
|
2749
|
+
type: "number",
|
|
2750
|
+
defaultValue: DEFAULT_WIDTH,
|
|
2751
|
+
validator: (v) => ({
|
|
2752
|
+
valid: typeof v === "number" && v >= 50 && v <= 4096,
|
|
2753
|
+
message: "Must be between 50 and 4096"
|
|
2754
|
+
})
|
|
2755
|
+
},
|
|
2756
|
+
{
|
|
2757
|
+
key: "defaultHeight",
|
|
2758
|
+
label: "Default Height",
|
|
2759
|
+
description: "Default image height in pixels",
|
|
2760
|
+
type: "number",
|
|
2761
|
+
defaultValue: DEFAULT_HEIGHT,
|
|
2762
|
+
validator: (v) => ({
|
|
2763
|
+
valid: typeof v === "number" && v >= 50 && v <= 4096,
|
|
2764
|
+
message: "Must be between 50 and 4096"
|
|
2765
|
+
})
|
|
2766
|
+
},
|
|
2767
|
+
{
|
|
2768
|
+
key: "defaultBgColor",
|
|
2769
|
+
label: "Background Color",
|
|
2770
|
+
description: "Default background color (hex format)",
|
|
2771
|
+
type: "string",
|
|
2772
|
+
defaultValue: DEFAULT_BG_COLOR
|
|
2773
|
+
},
|
|
2774
|
+
{
|
|
2775
|
+
key: "defaultTextColor",
|
|
2776
|
+
label: "Text Color",
|
|
2777
|
+
description: "Default text color (hex format)",
|
|
2778
|
+
type: "string",
|
|
2779
|
+
defaultValue: DEFAULT_TEXT_COLOR
|
|
2780
|
+
},
|
|
2781
|
+
{
|
|
2782
|
+
key: "defaultFont",
|
|
2783
|
+
label: "Font",
|
|
2784
|
+
description: 'Default font specification (e.g. "30px Arial")',
|
|
2785
|
+
type: "string",
|
|
2786
|
+
defaultValue: DEFAULT_FONT
|
|
2787
|
+
}
|
|
2788
|
+
];
|
|
2717
2789
|
this.parameters = [
|
|
2718
2790
|
{
|
|
2719
2791
|
name: "fileName",
|
|
@@ -2769,12 +2841,12 @@ var textToImage = (() => {
|
|
|
2769
2841
|
}
|
|
2770
2842
|
async processCommand(command, context) {
|
|
2771
2843
|
const text = command.value || "";
|
|
2772
|
-
const width = command.args["width"] ?? DEFAULT_WIDTH;
|
|
2773
|
-
const height = command.args["height"] ?? DEFAULT_HEIGHT;
|
|
2844
|
+
const width = command.args["width"] ?? getPluginConfigValue(context, "text-to-image", "defaultWidth", DEFAULT_WIDTH);
|
|
2845
|
+
const height = command.args["height"] ?? getPluginConfigValue(context, "text-to-image", "defaultHeight", DEFAULT_HEIGHT);
|
|
2774
2846
|
const filename = command.args["fileName"] ?? DEFAULT_FILENAME;
|
|
2775
|
-
const bgColor = command.args["bgColor"]
|
|
2776
|
-
const textColor = command.args["textColor"]
|
|
2777
|
-
const font = command.args["font"]
|
|
2847
|
+
const bgColor = command.args["bgColor"] ?? getPluginConfigValue(context, "text-to-image", "defaultBgColor", DEFAULT_BG_COLOR);
|
|
2848
|
+
const textColor = command.args["textColor"] ?? getPluginConfigValue(context, "text-to-image", "defaultTextColor", DEFAULT_TEXT_COLOR);
|
|
2849
|
+
const font = command.args["font"] ?? getPluginConfigValue(context, "text-to-image", "defaultFont", DEFAULT_FONT);
|
|
2778
2850
|
const padding = command.args["padding"] ?? DEFAULT_PADDING;
|
|
2779
2851
|
const textAlign = command.args["textAlign"] || "center";
|
|
2780
2852
|
const canvas = document.createElement("canvas");
|
|
@@ -2924,7 +2996,7 @@ var textToImage = (() => {
|
|
|
2924
2996
|
|
|
2925
2997
|
// src/cli-entrypoint.ts
|
|
2926
2998
|
var module = {
|
|
2927
|
-
apiVersion:
|
|
2999
|
+
apiVersion: API_VERSION2,
|
|
2928
3000
|
name: "@qodalis/cli-text-to-image",
|
|
2929
3001
|
processors: [new CliTextToImageCommandProcessor()]
|
|
2930
3002
|
};
|