@qodalis/cli-text-to-image 0.0.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/README.md ADDED
@@ -0,0 +1,11 @@
1
+ # Cli extension
2
+
3
+ The `@qodalis/cli-text-to-image` package is a CLI extension designed to convert text to image
4
+
5
+ # Installation
6
+
7
+ ```bash
8
+ packages add @qodalis/cli-text-to-image
9
+ ```
10
+
11
+ This command downloads and registers the extension for use within the CLI environment.
@@ -0,0 +1,23 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { resolveCommandProcessorProvider } from '@qodalis/angular-cli';
3
+ import { CliTextToImageCommandProcessor } from './processors/cli-text-to-image-command-processor';
4
+ import * as i0 from "@angular/core";
5
+ export class CliTextToImageModule {
6
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CliTextToImageModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
7
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: CliTextToImageModule }); }
8
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CliTextToImageModule, providers: [
9
+ resolveCommandProcessorProvider(CliTextToImageCommandProcessor),
10
+ ] }); }
11
+ }
12
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CliTextToImageModule, decorators: [{
13
+ type: NgModule,
14
+ args: [{
15
+ declarations: [],
16
+ imports: [],
17
+ exports: [],
18
+ providers: [
19
+ resolveCommandProcessorProvider(CliTextToImageCommandProcessor),
20
+ ],
21
+ }]
22
+ }] });
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLXRleHQtdG8taW1hZ2UubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdGV4dC10by1pbWFnZS9zcmMvbGliL2NsaS10ZXh0LXRvLWltYWdlLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLGtEQUFrRCxDQUFDOztBQVVsRyxNQUFNLE9BQU8sb0JBQW9COytHQUFwQixvQkFBb0I7Z0hBQXBCLG9CQUFvQjtnSEFBcEIsb0JBQW9CLGFBSmxCO1lBQ1AsK0JBQStCLENBQUMsOEJBQThCLENBQUM7U0FDbEU7OzRGQUVRLG9CQUFvQjtrQkFSaEMsUUFBUTttQkFBQztvQkFDTixZQUFZLEVBQUUsRUFBRTtvQkFDaEIsT0FBTyxFQUFFLEVBQUU7b0JBQ1gsT0FBTyxFQUFFLEVBQUU7b0JBQ1gsU0FBUyxFQUFFO3dCQUNQLCtCQUErQixDQUFDLDhCQUE4QixDQUFDO3FCQUNsRTtpQkFDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyByZXNvbHZlQ29tbWFuZFByb2Nlc3NvclByb3ZpZGVyIH0gZnJvbSAnQHFvZGFsaXMvYW5ndWxhci1jbGknO1xuaW1wb3J0IHsgQ2xpVGV4dFRvSW1hZ2VDb21tYW5kUHJvY2Vzc29yIH0gZnJvbSAnLi9wcm9jZXNzb3JzL2NsaS10ZXh0LXRvLWltYWdlLWNvbW1hbmQtcHJvY2Vzc29yJztcblxuQE5nTW9kdWxlKHtcbiAgICBkZWNsYXJhdGlvbnM6IFtdLFxuICAgIGltcG9ydHM6IFtdLFxuICAgIGV4cG9ydHM6IFtdLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICByZXNvbHZlQ29tbWFuZFByb2Nlc3NvclByb3ZpZGVyKENsaVRleHRUb0ltYWdlQ29tbWFuZFByb2Nlc3NvciksXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQ2xpVGV4dFRvSW1hZ2VNb2R1bGUge31cbiJdfQ==
@@ -0,0 +1,94 @@
1
+ import { CliForegroundColor, DefaultLibraryAuthor, } from '@qodalis/cli-core';
2
+ export class CliTextToImageCommandProcessor {
3
+ constructor() {
4
+ this.command = 'text-to-image';
5
+ this.description = 'Convert text to image';
6
+ this.author = DefaultLibraryAuthor;
7
+ this.valueRequired = true;
8
+ this.parameters = [
9
+ {
10
+ name: 'fileName',
11
+ description: 'Name of the file',
12
+ type: 'string',
13
+ required: false,
14
+ },
15
+ {
16
+ name: 'width',
17
+ description: 'Width of the image',
18
+ type: 'integer',
19
+ required: false,
20
+ },
21
+ {
22
+ name: 'height',
23
+ description: 'Height of the image',
24
+ type: 'integer',
25
+ required: false,
26
+ },
27
+ {
28
+ name: 'bgColor',
29
+ description: 'Background color of the image, in hex format',
30
+ type: 'string',
31
+ required: false,
32
+ },
33
+ {
34
+ name: 'textColor',
35
+ description: 'Text color of the image, in hex format',
36
+ type: 'string',
37
+ required: false,
38
+ },
39
+ {
40
+ name: 'font',
41
+ description: 'Font style and size',
42
+ type: 'string',
43
+ required: false,
44
+ },
45
+ ];
46
+ this.allowUnlistedCommands = true;
47
+ }
48
+ async processCommand(command, context) {
49
+ const text = command.value || '';
50
+ const width = command.args['width'] ?? window.innerWidth;
51
+ const height = command.args['height'] ?? window.innerHeight;
52
+ const filename = command.args['fileName'] ?? 'text-image.png';
53
+ const canvas = document.createElement('canvas');
54
+ canvas.width = width;
55
+ canvas.height = height;
56
+ const ctx = canvas.getContext('2d');
57
+ if (!ctx) {
58
+ console.error('Failed to get canvas context');
59
+ context.writer.writeError('Failed to get canvas context');
60
+ return;
61
+ }
62
+ // Set background color
63
+ ctx.fillStyle = command.args['bgColor'] || '#ffffff'; // White background
64
+ ctx.fillRect(0, 0, width, height);
65
+ // Set text properties
66
+ ctx.fillStyle = command.args['textColor'] || '#000000'; // Black text
67
+ ctx.font = command.args['font'] || '30px Arial'; // Font style and size
68
+ ctx.textAlign = 'center';
69
+ ctx.textBaseline = 'middle';
70
+ // Render text
71
+ const x = width / 2;
72
+ const y = height / 2;
73
+ ctx.fillText(text, x, y);
74
+ // Convert canvas to data URL
75
+ const dataUrl = canvas.toDataURL('image/png');
76
+ // Create a link element to trigger download
77
+ const link = document.createElement('a');
78
+ link.href = dataUrl;
79
+ link.download = filename;
80
+ document.body.appendChild(link);
81
+ link.click();
82
+ document.body.removeChild(link);
83
+ context.writer.writeInfo('Options: ');
84
+ context.writer.writeInfo(`- ${context.writer.wrapInColor('Text', CliForegroundColor.Yellow)}: ${text}`);
85
+ context.writer.writeInfo(`- ${context.writer.wrapInColor('Width', CliForegroundColor.Yellow)}: ${width}`);
86
+ context.writer.writeInfo(`- ${context.writer.wrapInColor('Height', CliForegroundColor.Yellow)}: ${height}`);
87
+ context.writer.writeInfo(`- ${context.writer.wrapInColor('Filename', CliForegroundColor.Yellow)}: ${filename}`);
88
+ context.writer.writeInfo(`- ${context.writer.wrapInColor('Background color', CliForegroundColor.Yellow)}: ${ctx.fillStyle}`);
89
+ context.writer.writeInfo(`- ${context.writer.wrapInColor('Text color', CliForegroundColor.Yellow)}: ${ctx.fillStyle}`);
90
+ context.writer.writeInfo(`- ${context.writer.wrapInColor('Font', CliForegroundColor.Yellow)}: ${ctx.font}`);
91
+ context.writer.writeSuccess('Image created successfully');
92
+ }
93
+ }
94
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLXRleHQtdG8taW1hZ2UtY29tbWFuZC1wcm9jZXNzb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90ZXh0LXRvLWltYWdlL3NyYy9saWIvcHJvY2Vzc29ycy9jbGktdGV4dC10by1pbWFnZS1jb21tYW5kLXByb2Nlc3Nvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsa0JBQWtCLEVBRWxCLG9CQUFvQixHQUl2QixNQUFNLG1CQUFtQixDQUFDO0FBRTNCLE1BQU0sT0FBTyw4QkFBOEI7SUE4Q3ZDO1FBN0NBLFlBQU8sR0FBRyxlQUFlLENBQUM7UUFDMUIsZ0JBQVcsR0FBRyx1QkFBdUIsQ0FBQztRQUN0QyxXQUFNLEdBQUcsb0JBQW9CLENBQUM7UUFDOUIsa0JBQWEsR0FBRyxJQUFJLENBQUM7UUFDckIsZUFBVSxHQUFrRDtZQUN4RDtnQkFDSSxJQUFJLEVBQUUsVUFBVTtnQkFDaEIsV0FBVyxFQUFFLGtCQUFrQjtnQkFDL0IsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsUUFBUSxFQUFFLEtBQUs7YUFDbEI7WUFDRDtnQkFDSSxJQUFJLEVBQUUsT0FBTztnQkFDYixXQUFXLEVBQUUsb0JBQW9CO2dCQUNqQyxJQUFJLEVBQUUsU0FBUztnQkFDZixRQUFRLEVBQUUsS0FBSzthQUNsQjtZQUNEO2dCQUNJLElBQUksRUFBRSxRQUFRO2dCQUNkLFdBQVcsRUFBRSxxQkFBcUI7Z0JBQ2xDLElBQUksRUFBRSxTQUFTO2dCQUNmLFFBQVEsRUFBRSxLQUFLO2FBQ2xCO1lBQ0Q7Z0JBQ0ksSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsV0FBVyxFQUFFLDhDQUE4QztnQkFDM0QsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsUUFBUSxFQUFFLEtBQUs7YUFDbEI7WUFDRDtnQkFDSSxJQUFJLEVBQUUsV0FBVztnQkFDakIsV0FBVyxFQUFFLHdDQUF3QztnQkFDckQsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsUUFB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RixPQUFPLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0lBQzlELENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2xpRm9yZWdyb3VuZENvbG9yLFxuICAgIENsaVByb2Nlc3NDb21tYW5kLFxuICAgIERlZmF1bHRMaWJyYXJ5QXV0aG9yLFxuICAgIElDbGlDb21tYW5kUGFyYW1ldGVyRGVzY3JpcHRvcixcbiAgICBJQ2xpQ29tbWFuZFByb2Nlc3NvcixcbiAgICBJQ2xpRXhlY3V0aW9uQ29udGV4dCxcbn0gZnJvbSAnQHFvZGFsaXMvY2xpLWNvcmUnO1xuXG5leHBvcnQgY2xhc3MgQ2xpVGV4dFRvSW1hZ2VDb21tYW5kUHJvY2Vzc29yIGltcGxlbWVudHMgSUNsaUNvbW1hbmRQcm9jZXNzb3Ige1xuICAgIGNvbW1hbmQgPSAndGV4dC10by1pbWFnZSc7XG4gICAgZGVzY3JpcHRpb24gPSAnQ29udmVydCB0ZXh0IHRvIGltYWdlJztcbiAgICBhdXRob3IgPSBEZWZhdWx0TGlicmFyeUF1dGhvcjtcbiAgICB2YWx1ZVJlcXVpcmVkID0gdHJ1ZTtcbiAgICBwYXJhbWV0ZXJzPzogSUNsaUNvbW1hbmRQYXJhbWV0ZXJEZXNjcmlwdG9yW10gfCB1bmRlZmluZWQgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdmaWxlTmFtZScsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ05hbWUgb2YgdGhlIGZpbGUnLFxuICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICd3aWR0aCcsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1dpZHRoIG9mIHRoZSBpbWFnZScsXG4gICAgICAgICAgICB0eXBlOiAnaW50ZWdlcicsXG4gICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdoZWlnaHQnLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdIZWlnaHQgb2YgdGhlIGltYWdlJyxcbiAgICAgICAgICAgIHR5cGU6ICdpbnRlZ2VyJyxcbiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ2JnQ29sb3InLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdCYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBpbWFnZSwgaW4gaGV4IGZvcm1hdCcsXG4gICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ3RleHRDb2xvcicsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1RleHQgY29sb3Igb2YgdGhlIGltYWdlLCBpbiBoZXggZm9ybWF0JyxcbiAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnZm9udCcsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0ZvbnQgc3R5bGUgYW5kIHNpemUnLFxuICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgXTtcblxuICAgIGFsbG93VW5saXN0ZWRDb21tYW5kcyA9IHRydWU7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgICBhc3luYyBwcm9jZXNzQ29tbWFuZChcbiAgICAgICAgY29tbWFuZDogQ2xpUHJvY2Vzc0NvbW1hbmQsXG4gICAgICAgIGNvbnRleHQ6IElDbGlFeGVjdXRpb25Db250ZXh0LFxuICAgICk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCB0ZXh0ID0gY29tbWFuZC52YWx1ZSB8fCAnJztcbiAgICAgICAgY29uc3Qgd2lkdGggPSBjb21tYW5kLmFyZ3NbJ3dpZHRoJ10gPz8gd2luZG93LmlubmVyV2lkdGg7XG4gICAgICAgIGNvbnN0IGhlaWdodCA9IGNvbW1hbmQuYXJnc1snaGVpZ2h0J10gPz8gd2luZG93LmlubmVySGVpZ2h0O1xuICAgICAgICBjb25zdCBmaWxlbmFtZSA9IGNvbW1hbmQuYXJnc1snZmlsZU5hbWUnXSA/PyAndGV4dC1pbWFnZS5wbmcnO1xuXG4gICAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICBjYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbiAgICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbiAgICAgICAgaWYgKCFjdHgpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBnZXQgY2FudmFzIGNvbnRleHQnKTtcbiAgICAgICAgICAgIGNvbnRleHQud3JpdGVyLndyaXRlRXJyb3IoJ0ZhaWxlZCB0byBnZXQgY2FudmFzIGNvbnRleHQnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNldCBiYWNrZ3JvdW5kIGNvbG9yXG4gICAgICAgIGN0eC5maWxsU3R5bGUgPSBjb21tYW5kLmFyZ3NbJ2JnQ29sb3InXSB8fCAnI2ZmZmZmZic7IC8vIFdoaXRlIGJhY2tncm91bmRcbiAgICAgICAgY3R4LmZpbGxSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgICAgIC8vIFNldCB0ZXh0IHByb3BlcnRpZXNcbiAgICAgICAgY3R4LmZpbGxTdHlsZSA9IGNvbW1hbmQuYXJnc1sndGV4dENvbG9yJ10gfHwgJyMwMDAwMDAnOyAvLyBCbGFjayB0ZXh0XG4gICAgICAgIGN0eC5mb250ID0gY29tbWFuZC5hcmdzWydmb250J10gfHwgJzMwcHggQXJpYWwnOyAvLyBGb250IHN0eWxlIGFuZCBzaXplXG4gICAgICAgIGN0eC50ZXh0QWxpZ24gPSAnY2VudGVyJztcbiAgICAgICAgY3R4LnRleHRCYXNlbGluZSA9ICdtaWRkbGUnO1xuXG4gICAgICAgIC8vIFJlbmRlciB0ZXh0XG4gICAgICAgIGNvbnN0IHggPSB3aWR0aCAvIDI7XG4gICAgICAgIGNvbnN0IHkgPSBoZWlnaHQgLyAyO1xuICAgICAgICBjdHguZmlsbFRleHQodGV4dCwgeCwgeSk7XG5cbiAgICAgICAgLy8gQ29udmVydCBjYW52YXMgdG8gZGF0YSBVUkxcbiAgICAgICAgY29uc3QgZGF0YVVybCA9IGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL3BuZycpO1xuXG4gICAgICAgIC8vIENyZWF0ZSBhIGxpbmsgZWxlbWVudCB0byB0cmlnZ2VyIGRvd25sb2FkXG4gICAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICAgIGxpbmsuaHJlZiA9IGRhdGFVcmw7XG4gICAgICAgIGxpbmsuZG93bmxvYWQgPSBmaWxlbmFtZTtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTtcbiAgICAgICAgbGluay5jbGljaygpO1xuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGxpbmspO1xuICAgICAgICBjb250ZXh0LndyaXRlci53cml0ZUluZm8oJ09wdGlvbnM6ICcpO1xuICAgICAgICBjb250ZXh0LndyaXRlci53cml0ZUluZm8oXG4gICAgICAgICAgICBgLSAke2NvbnRleHQud3JpdGVyLndyYXBJbkNvbG9yKCdUZXh0JywgQ2xpRm9yZWdyb3VuZENvbG9yLlllbGxvdyl9OiAke3RleHR9YCxcbiAgICAgICAgKTtcbiAgICAgICAgY29udGV4dC53cml0ZXIud3JpdGVJbmZvKFxuICAgICAgICAgICAgYC0gJHtjb250ZXh0LndyaXRlci53cmFwSW5Db2xvcignV2lkdGgnLCBDbGlGb3JlZ3JvdW5kQ29sb3IuWWVsbG93KX06ICR7d2lkdGh9YCxcbiAgICAgICAgKTtcbiAgICAgICAgY29udGV4dC53cml0ZXIud3JpdGVJbmZvKFxuICAgICAgICAgICAgYC0gJHtjb250ZXh0LndyaXRlci53cmFwSW5Db2xvcignSGVpZ2h0JywgQ2xpRm9yZWdyb3VuZENvbG9yLlllbGxvdyl9OiAke2hlaWdodH1gLFxuICAgICAgICApO1xuICAgICAgICBjb250ZXh0LndyaXRlci53cml0ZUluZm8oXG4gICAgICAgICAgICBgLSAke2NvbnRleHQud3JpdGVyLndyYXBJbkNvbG9yKCdGaWxlbmFtZScsIENsaUZvcmVncm91bmRDb2xvci5ZZWxsb3cpfTogJHtmaWxlbmFtZX1gLFxuICAgICAgICApO1xuICAgICAgICBjb250ZXh0LndyaXRlci53cml0ZUluZm8oXG4gICAgICAgICAgICBgLSAke2NvbnRleHQud3JpdGVyLndyYXBJbkNvbG9yKCdCYWNrZ3JvdW5kIGNvbG9yJywgQ2xpRm9yZWdyb3VuZENvbG9yLlllbGxvdyl9OiAke2N0eC5maWxsU3R5bGV9YCxcbiAgICAgICAgKTtcbiAgICAgICAgY29udGV4dC53cml0ZXIud3JpdGVJbmZvKFxuICAgICAgICAgICAgYC0gJHtjb250ZXh0LndyaXRlci53cmFwSW5Db2xvcignVGV4dCBjb2xvcicsIENsaUZvcmVncm91bmRDb2xvci5ZZWxsb3cpfTogJHtjdHguZmlsbFN0eWxlfWAsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnRleHQud3JpdGVyLndyaXRlSW5mbyhcbiAgICAgICAgICAgIGAtICR7Y29udGV4dC53cml0ZXIud3JhcEluQ29sb3IoJ0ZvbnQnLCBDbGlGb3JlZ3JvdW5kQ29sb3IuWWVsbG93KX06ICR7Y3R4LmZvbnR9YCxcbiAgICAgICAgKTtcblxuICAgICAgICBjb250ZXh0LndyaXRlci53cml0ZVN1Y2Nlc3MoJ0ltYWdlIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgfVxufVxuIl19
@@ -0,0 +1,6 @@
1
+ /*
2
+ * Public API Surface of text-to-image
3
+ */
4
+ export * from './lib/cli-text-to-image.module';
5
+ export * from './lib/processors/cli-text-to-image-command-processor';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL3RleHQtdG8taW1hZ2Uvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGdDQUFnQyxDQUFDO0FBRS9DLGNBQWMsc0RBQXNELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIHRleHQtdG8taW1hZ2VcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jbGktdGV4dC10by1pbWFnZS5tb2R1bGUnO1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9wcm9jZXNzb3JzL2NsaS10ZXh0LXRvLWltYWdlLWNvbW1hbmQtcHJvY2Vzc29yJztcbiJdfQ==
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicW9kYWxpcy1jbGktdGV4dC10by1pbWFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL3RleHQtdG8taW1hZ2Uvc3JjL3FvZGFsaXMtY2xpLXRleHQtdG8taW1hZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
@@ -0,0 +1,127 @@
1
+ import * as i0 from '@angular/core';
2
+ import { NgModule } from '@angular/core';
3
+ import { resolveCommandProcessorProvider } from '@qodalis/angular-cli';
4
+ import { DefaultLibraryAuthor, CliForegroundColor } from '@qodalis/cli-core';
5
+
6
+ class CliTextToImageCommandProcessor {
7
+ constructor() {
8
+ this.command = 'text-to-image';
9
+ this.description = 'Convert text to image';
10
+ this.author = DefaultLibraryAuthor;
11
+ this.valueRequired = true;
12
+ this.parameters = [
13
+ {
14
+ name: 'fileName',
15
+ description: 'Name of the file',
16
+ type: 'string',
17
+ required: false,
18
+ },
19
+ {
20
+ name: 'width',
21
+ description: 'Width of the image',
22
+ type: 'integer',
23
+ required: false,
24
+ },
25
+ {
26
+ name: 'height',
27
+ description: 'Height of the image',
28
+ type: 'integer',
29
+ required: false,
30
+ },
31
+ {
32
+ name: 'bgColor',
33
+ description: 'Background color of the image, in hex format',
34
+ type: 'string',
35
+ required: false,
36
+ },
37
+ {
38
+ name: 'textColor',
39
+ description: 'Text color of the image, in hex format',
40
+ type: 'string',
41
+ required: false,
42
+ },
43
+ {
44
+ name: 'font',
45
+ description: 'Font style and size',
46
+ type: 'string',
47
+ required: false,
48
+ },
49
+ ];
50
+ this.allowUnlistedCommands = true;
51
+ }
52
+ async processCommand(command, context) {
53
+ const text = command.value || '';
54
+ const width = command.args['width'] ?? window.innerWidth;
55
+ const height = command.args['height'] ?? window.innerHeight;
56
+ const filename = command.args['fileName'] ?? 'text-image.png';
57
+ const canvas = document.createElement('canvas');
58
+ canvas.width = width;
59
+ canvas.height = height;
60
+ const ctx = canvas.getContext('2d');
61
+ if (!ctx) {
62
+ console.error('Failed to get canvas context');
63
+ context.writer.writeError('Failed to get canvas context');
64
+ return;
65
+ }
66
+ // Set background color
67
+ ctx.fillStyle = command.args['bgColor'] || '#ffffff'; // White background
68
+ ctx.fillRect(0, 0, width, height);
69
+ // Set text properties
70
+ ctx.fillStyle = command.args['textColor'] || '#000000'; // Black text
71
+ ctx.font = command.args['font'] || '30px Arial'; // Font style and size
72
+ ctx.textAlign = 'center';
73
+ ctx.textBaseline = 'middle';
74
+ // Render text
75
+ const x = width / 2;
76
+ const y = height / 2;
77
+ ctx.fillText(text, x, y);
78
+ // Convert canvas to data URL
79
+ const dataUrl = canvas.toDataURL('image/png');
80
+ // Create a link element to trigger download
81
+ const link = document.createElement('a');
82
+ link.href = dataUrl;
83
+ link.download = filename;
84
+ document.body.appendChild(link);
85
+ link.click();
86
+ document.body.removeChild(link);
87
+ context.writer.writeInfo('Options: ');
88
+ context.writer.writeInfo(`- ${context.writer.wrapInColor('Text', CliForegroundColor.Yellow)}: ${text}`);
89
+ context.writer.writeInfo(`- ${context.writer.wrapInColor('Width', CliForegroundColor.Yellow)}: ${width}`);
90
+ context.writer.writeInfo(`- ${context.writer.wrapInColor('Height', CliForegroundColor.Yellow)}: ${height}`);
91
+ context.writer.writeInfo(`- ${context.writer.wrapInColor('Filename', CliForegroundColor.Yellow)}: ${filename}`);
92
+ context.writer.writeInfo(`- ${context.writer.wrapInColor('Background color', CliForegroundColor.Yellow)}: ${ctx.fillStyle}`);
93
+ context.writer.writeInfo(`- ${context.writer.wrapInColor('Text color', CliForegroundColor.Yellow)}: ${ctx.fillStyle}`);
94
+ context.writer.writeInfo(`- ${context.writer.wrapInColor('Font', CliForegroundColor.Yellow)}: ${ctx.font}`);
95
+ context.writer.writeSuccess('Image created successfully');
96
+ }
97
+ }
98
+
99
+ class CliTextToImageModule {
100
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CliTextToImageModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
101
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: CliTextToImageModule }); }
102
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CliTextToImageModule, providers: [
103
+ resolveCommandProcessorProvider(CliTextToImageCommandProcessor),
104
+ ] }); }
105
+ }
106
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CliTextToImageModule, decorators: [{
107
+ type: NgModule,
108
+ args: [{
109
+ declarations: [],
110
+ imports: [],
111
+ exports: [],
112
+ providers: [
113
+ resolveCommandProcessorProvider(CliTextToImageCommandProcessor),
114
+ ],
115
+ }]
116
+ }] });
117
+
118
+ /*
119
+ * Public API Surface of text-to-image
120
+ */
121
+
122
+ /**
123
+ * Generated bundle index. Do not edit.
124
+ */
125
+
126
+ export { CliTextToImageCommandProcessor, CliTextToImageModule };
127
+ //# sourceMappingURL=qodalis-cli-text-to-image.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qodalis-cli-text-to-image.mjs","sources":["../../../projects/text-to-image/src/lib/processors/cli-text-to-image-command-processor.ts","../../../projects/text-to-image/src/lib/cli-text-to-image.module.ts","../../../projects/text-to-image/src/public-api.ts","../../../projects/text-to-image/src/qodalis-cli-text-to-image.ts"],"sourcesContent":["import {\n CliForegroundColor,\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandParameterDescriptor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\n\nexport class CliTextToImageCommandProcessor implements ICliCommandProcessor {\n command = 'text-to-image';\n description = 'Convert text to image';\n author = DefaultLibraryAuthor;\n valueRequired = true;\n parameters?: ICliCommandParameterDescriptor[] | undefined = [\n {\n name: 'fileName',\n description: 'Name of the file',\n type: 'string',\n required: false,\n },\n {\n name: 'width',\n description: 'Width of the image',\n type: 'integer',\n required: false,\n },\n {\n name: 'height',\n description: 'Height of the image',\n type: 'integer',\n required: false,\n },\n {\n name: 'bgColor',\n description: 'Background color of the image, in hex format',\n type: 'string',\n required: false,\n },\n {\n name: 'textColor',\n description: 'Text color of the image, in hex format',\n type: 'string',\n required: false,\n },\n {\n name: 'font',\n description: 'Font style and size',\n type: 'string',\n required: false,\n },\n ];\n\n allowUnlistedCommands = true;\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'] ?? window.innerWidth;\n const height = command.args['height'] ?? window.innerHeight;\n const filename = command.args['fileName'] ?? 'text-image.png';\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 console.error('Failed to get canvas context');\n context.writer.writeError('Failed to get canvas context');\n return;\n }\n\n // Set background color\n ctx.fillStyle = command.args['bgColor'] || '#ffffff'; // White background\n ctx.fillRect(0, 0, width, height);\n\n // Set text properties\n ctx.fillStyle = command.args['textColor'] || '#000000'; // Black text\n ctx.font = command.args['font'] || '30px Arial'; // Font style and size\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n\n // Render text\n const x = width / 2;\n const y = height / 2;\n ctx.fillText(text, x, y);\n\n // Convert canvas to data URL\n const dataUrl = canvas.toDataURL('image/png');\n\n // Create a link element to trigger download\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 context.writer.writeInfo('Options: ');\n context.writer.writeInfo(\n `- ${context.writer.wrapInColor('Text', CliForegroundColor.Yellow)}: ${text}`,\n );\n context.writer.writeInfo(\n `- ${context.writer.wrapInColor('Width', CliForegroundColor.Yellow)}: ${width}`,\n );\n context.writer.writeInfo(\n `- ${context.writer.wrapInColor('Height', CliForegroundColor.Yellow)}: ${height}`,\n );\n context.writer.writeInfo(\n `- ${context.writer.wrapInColor('Filename', CliForegroundColor.Yellow)}: ${filename}`,\n );\n context.writer.writeInfo(\n `- ${context.writer.wrapInColor('Background color', CliForegroundColor.Yellow)}: ${ctx.fillStyle}`,\n );\n context.writer.writeInfo(\n `- ${context.writer.wrapInColor('Text color', CliForegroundColor.Yellow)}: ${ctx.fillStyle}`,\n );\n context.writer.writeInfo(\n `- ${context.writer.wrapInColor('Font', CliForegroundColor.Yellow)}: ${ctx.font}`,\n );\n\n context.writer.writeSuccess('Image created successfully');\n }\n}\n","import { NgModule } from '@angular/core';\nimport { resolveCommandProcessorProvider } from '@qodalis/angular-cli';\nimport { CliTextToImageCommandProcessor } from './processors/cli-text-to-image-command-processor';\n\n@NgModule({\n declarations: [],\n imports: [],\n exports: [],\n providers: [\n resolveCommandProcessorProvider(CliTextToImageCommandProcessor),\n ],\n})\nexport class CliTextToImageModule {}\n","/*\n * Public API Surface of text-to-image\n */\n\nexport * from './lib/cli-text-to-image.module';\n\nexport * from './lib/processors/cli-text-to-image-command-processor';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/index.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ /// <amd-module name="@qodalis/cli-text-to-image" />
5
+ export * from './public-api';
@@ -0,0 +1,6 @@
1
+ import * as i0 from "@angular/core";
2
+ export declare class CliTextToImageModule {
3
+ static ɵfac: i0.ɵɵFactoryDeclaration<CliTextToImageModule, never>;
4
+ static ɵmod: i0.ɵɵNgModuleDeclaration<CliTextToImageModule, never, never, never>;
5
+ static ɵinj: i0.ɵɵInjectorDeclaration<CliTextToImageModule>;
6
+ }
@@ -0,0 +1,11 @@
1
+ import { CliProcessCommand, ICliCommandParameterDescriptor, ICliCommandProcessor, ICliExecutionContext } from '@qodalis/cli-core';
2
+ export declare class CliTextToImageCommandProcessor implements ICliCommandProcessor {
3
+ command: string;
4
+ description: string;
5
+ author: import("@qodalis/cli-core").ICliCommandAuthor;
6
+ valueRequired: boolean;
7
+ parameters?: ICliCommandParameterDescriptor[] | undefined;
8
+ allowUnlistedCommands: boolean;
9
+ constructor();
10
+ processCommand(command: CliProcessCommand, context: ICliExecutionContext): Promise<void>;
11
+ }
package/package.json ADDED
@@ -0,0 +1,44 @@
1
+ {
2
+ "name": "@qodalis/cli-text-to-image",
3
+ "version": "0.0.1",
4
+ "description": "An Angular CLI extension.",
5
+ "author": "Nicolae Lupei, Qodalis Solutions",
6
+ "license": "MIT",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/qodalis-solutions/qodalis-angular-cli"
10
+ },
11
+ "homepage": "https://qodalis.com",
12
+ "keywords": [
13
+ "angular",
14
+ "cli",
15
+ "qodalis",
16
+ "terminal",
17
+ "text-to-image"
18
+ ],
19
+ "umd": "./umd/index.js",
20
+ "unpkg": "./umd/index.js",
21
+ "peerDependencies": {
22
+ "@angular/common": "^16.2.0",
23
+ "@angular/core": "^16.2.0"
24
+ },
25
+ "dependencies": {
26
+ "tslib": "^2.3.0",
27
+ "@qodalis/cli-core": "^0.0.5",
28
+ "@qodalis/angular-cli": "^1.0.14"
29
+ },
30
+ "sideEffects": false,
31
+ "module": "fesm2022/qodalis-cli-text-to-image.mjs",
32
+ "typings": "index.d.ts",
33
+ "exports": {
34
+ "./package.json": {
35
+ "default": "./package.json"
36
+ },
37
+ ".": {
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"
42
+ }
43
+ }
44
+ }
@@ -0,0 +1,2 @@
1
+ export * from './lib/cli-text-to-image.module';
2
+ export * from './lib/processors/cli-text-to-image-command-processor';
package/umd/index.js ADDED
@@ -0,0 +1,106 @@
1
+ (function (global, factory) {
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('@qodalis/cli-core')) :
3
+ typeof define === 'function' && define.amd ? define(['@qodalis/cli-core'], factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.cliCore));
5
+ })(this, (function (cliCore) { 'use strict';
6
+
7
+ class CliTextToImageCommandProcessor {
8
+ constructor() {
9
+ this.command = 'text-to-image';
10
+ this.description = 'Convert text to image';
11
+ this.author = cliCore.DefaultLibraryAuthor;
12
+ this.valueRequired = true;
13
+ this.parameters = [
14
+ {
15
+ name: 'fileName',
16
+ description: 'Name of the file',
17
+ type: 'string',
18
+ required: false,
19
+ },
20
+ {
21
+ name: 'width',
22
+ description: 'Width of the image',
23
+ type: 'integer',
24
+ required: false,
25
+ },
26
+ {
27
+ name: 'height',
28
+ description: 'Height of the image',
29
+ type: 'integer',
30
+ required: false,
31
+ },
32
+ {
33
+ name: 'bgColor',
34
+ description: 'Background color of the image, in hex format',
35
+ type: 'string',
36
+ required: false,
37
+ },
38
+ {
39
+ name: 'textColor',
40
+ description: 'Text color of the image, in hex format',
41
+ type: 'string',
42
+ required: false,
43
+ },
44
+ {
45
+ name: 'font',
46
+ description: 'Font style and size',
47
+ type: 'string',
48
+ required: false,
49
+ },
50
+ ];
51
+ this.allowUnlistedCommands = true;
52
+ }
53
+ async processCommand(command, context) {
54
+ const text = command.value || '';
55
+ const width = command.args['width'] ?? window.innerWidth;
56
+ const height = command.args['height'] ?? window.innerHeight;
57
+ const filename = command.args['fileName'] ?? 'text-image.png';
58
+ const canvas = document.createElement('canvas');
59
+ canvas.width = width;
60
+ canvas.height = height;
61
+ const ctx = canvas.getContext('2d');
62
+ if (!ctx) {
63
+ console.error('Failed to get canvas context');
64
+ context.writer.writeError('Failed to get canvas context');
65
+ return;
66
+ }
67
+ // Set background color
68
+ ctx.fillStyle = command.args['bgColor'] || '#ffffff'; // White background
69
+ ctx.fillRect(0, 0, width, height);
70
+ // Set text properties
71
+ ctx.fillStyle = command.args['textColor'] || '#000000'; // Black text
72
+ ctx.font = command.args['font'] || '30px Arial'; // Font style and size
73
+ ctx.textAlign = 'center';
74
+ ctx.textBaseline = 'middle';
75
+ // Render text
76
+ const x = width / 2;
77
+ const y = height / 2;
78
+ ctx.fillText(text, x, y);
79
+ // Convert canvas to data URL
80
+ const dataUrl = canvas.toDataURL('image/png');
81
+ // Create a link element to trigger download
82
+ const link = document.createElement('a');
83
+ link.href = dataUrl;
84
+ link.download = filename;
85
+ document.body.appendChild(link);
86
+ link.click();
87
+ document.body.removeChild(link);
88
+ context.writer.writeInfo('Options: ');
89
+ context.writer.writeInfo(`- ${context.writer.wrapInColor('Text', cliCore.CliForegroundColor.Yellow)}: ${text}`);
90
+ context.writer.writeInfo(`- ${context.writer.wrapInColor('Width', cliCore.CliForegroundColor.Yellow)}: ${width}`);
91
+ context.writer.writeInfo(`- ${context.writer.wrapInColor('Height', cliCore.CliForegroundColor.Yellow)}: ${height}`);
92
+ context.writer.writeInfo(`- ${context.writer.wrapInColor('Filename', cliCore.CliForegroundColor.Yellow)}: ${filename}`);
93
+ context.writer.writeInfo(`- ${context.writer.wrapInColor('Background color', cliCore.CliForegroundColor.Yellow)}: ${ctx.fillStyle}`);
94
+ context.writer.writeInfo(`- ${context.writer.wrapInColor('Text color', cliCore.CliForegroundColor.Yellow)}: ${ctx.fillStyle}`);
95
+ context.writer.writeInfo(`- ${context.writer.wrapInColor('Font', cliCore.CliForegroundColor.Yellow)}: ${ctx.font}`);
96
+ context.writer.writeSuccess('Image created successfully');
97
+ }
98
+ }
99
+
100
+ const module = {
101
+ name: '@qodalis/cli-text-to-image',
102
+ processors: [new CliTextToImageCommandProcessor()],
103
+ };
104
+ cliCore.bootUmdModule(module);
105
+
106
+ }));