@nmmty/lazycanvas 0.3.6 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/helpers/Filters.d.ts +10 -10
- package/dist/helpers/Fonts.d.ts +1 -1
- package/dist/helpers/FontsList.d.ts +1 -1
- package/dist/helpers/FontsList.js +19 -19
- package/dist/index.d.ts +11 -20
- package/dist/index.js +40 -45
- package/dist/structures/LazyCanvas.d.ts +126 -17
- package/dist/structures/LazyCanvas.js +101 -33
- package/dist/structures/components/BaseLayer.d.ts +188 -38
- package/dist/structures/components/BaseLayer.js +88 -41
- package/dist/structures/components/BezierLayer.d.ts +108 -21
- package/dist/structures/components/BezierLayer.js +73 -24
- package/dist/structures/components/ClearLayer.d.ts +142 -0
- package/dist/structures/components/ClearLayer.js +152 -0
- package/dist/structures/components/Group.d.ts +86 -18
- package/dist/structures/components/Group.js +69 -29
- package/dist/structures/components/ImageLayer.d.ts +85 -12
- package/dist/structures/components/ImageLayer.js +55 -42
- package/dist/structures/components/LineLayer.d.ts +111 -18
- package/dist/structures/components/LineLayer.js +58 -21
- package/dist/structures/components/MorphLayer.d.ts +109 -21
- package/dist/structures/components/MorphLayer.js +55 -27
- package/dist/structures/components/Path2DLayer.d.ts +191 -0
- package/dist/structures/components/Path2DLayer.js +318 -0
- package/dist/structures/components/QuadraticLayer.d.ts +108 -22
- package/dist/structures/components/QuadraticLayer.js +65 -30
- package/dist/structures/components/TextLayer.d.ts +201 -40
- package/dist/structures/components/TextLayer.js +101 -49
- package/dist/structures/components/index.d.ts +10 -0
- package/dist/structures/components/index.js +26 -0
- package/dist/structures/helpers/Exporter.d.ts +52 -0
- package/dist/structures/helpers/Exporter.js +168 -0
- package/dist/structures/helpers/Font.d.ts +64 -10
- package/dist/structures/helpers/Font.js +38 -11
- package/dist/structures/helpers/Gradient.d.ts +96 -9
- package/dist/structures/helpers/Gradient.js +48 -17
- package/dist/structures/helpers/Link.d.ts +52 -8
- package/dist/structures/helpers/Link.js +42 -11
- package/dist/structures/helpers/Pattern.d.ts +52 -7
- package/dist/structures/helpers/Pattern.js +45 -40
- package/dist/structures/helpers/index.d.ts +6 -0
- package/dist/structures/helpers/index.js +22 -0
- package/dist/structures/helpers/readers/JSONReader.d.ts +49 -0
- package/dist/structures/helpers/readers/JSONReader.js +172 -0
- package/dist/structures/helpers/readers/SVGReader.d.ts +20 -0
- package/dist/structures/helpers/readers/SVGReader.js +577 -0
- package/dist/structures/helpers/readers/YAMLReader.d.ts +0 -0
- package/dist/structures/helpers/readers/YAMLReader.js +1 -0
- package/dist/structures/managers/AnimationManager.d.ts +120 -0
- package/dist/structures/managers/AnimationManager.js +99 -0
- package/dist/structures/managers/FontsManager.d.ts +76 -32
- package/dist/structures/managers/FontsManager.js +70 -45
- package/dist/structures/managers/LayersManager.d.ts +84 -32
- package/dist/structures/managers/LayersManager.js +67 -29
- package/dist/structures/managers/RenderManager.d.ts +63 -6
- package/dist/structures/managers/RenderManager.js +162 -33
- package/dist/types/LazyCanvas.d.ts +2 -0
- package/dist/types/components/ClearLayer.d.ts +19 -0
- package/dist/types/enum.d.ts +20 -7
- package/dist/types/enum.js +24 -10
- package/dist/types/index.d.ts +2 -17
- package/dist/types/index.js +17 -0
- package/dist/types/managers/AnimationManager.d.ts +14 -0
- package/dist/types/types.d.ts +7 -3
- package/dist/utils/LazyUtil.js +2 -2
- package/dist/utils/utils.d.ts +10 -9
- package/dist/utils/utils.js +159 -164
- package/package.json +9 -5
package/dist/utils/utils.js
CHANGED
|
@@ -1,41 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.
|
|
27
|
-
const
|
|
28
|
-
const
|
|
3
|
+
exports.resizeLayers = exports.resize = exports.getBoundingBoxBezier = exports.centring = exports.isImageUrlValid = exports.generateRandomName = exports.transform = exports.parseFillStyle = exports.filters = exports.opacity = exports.drawShadow = exports.parser = exports.parseToNormal = exports.parseColor = exports.parseHex = exports.isColor = exports.generateID = void 0;
|
|
4
|
+
const types_1 = require("../types");
|
|
5
|
+
const helpers_1 = require("../structures/helpers");
|
|
6
|
+
const canvas_1 = require("@napi-rs/canvas");
|
|
29
7
|
const LazyUtil_1 = require("./LazyUtil");
|
|
30
|
-
const
|
|
31
|
-
const jimp = __importStar(require("jimp"));
|
|
32
|
-
const Pattern_1 = require("../structures/helpers/Pattern");
|
|
33
|
-
const Link_1 = require("../structures/helpers/Link");
|
|
34
|
-
const Group_1 = require("../structures/components/Group");
|
|
35
|
-
const LineLayer_1 = require("../structures/components/LineLayer");
|
|
36
|
-
const BezierLayer_1 = require("../structures/components/BezierLayer");
|
|
37
|
-
const QuadraticLayer_1 = require("../structures/components/QuadraticLayer");
|
|
38
|
-
const TextLayer_1 = require("../structures/components/TextLayer");
|
|
8
|
+
const components_1 = require("../structures/components");
|
|
39
9
|
function generateID(type) {
|
|
40
10
|
return `${type}-${Math.random().toString(36).substr(2, 9)}`;
|
|
41
11
|
}
|
|
@@ -50,7 +20,7 @@ let rgbaReg = /^rgba\((\d+),\s*(\d+),\s*(\d+),\s*(0|0?\.\d+|1(\.0)?)\)$/;
|
|
|
50
20
|
let hslReg = /^hsl\((\d+),\s*(\d+)%,\s*(\d+)%\)$/;
|
|
51
21
|
let hslaReg = /^hsla\((\d+),\s*(\d+)%,\s*(\d+)%,\s*(0|0?\.\d+|1(\.0)?)\)$/;
|
|
52
22
|
function isColor(v) {
|
|
53
|
-
return typeof (v === 'string' && (hexReg.test(v) || rgbReg.test(v) || rgbaReg.test(v) || hslReg.test(v) || hslaReg.test(v))) || v instanceof
|
|
23
|
+
return typeof (v === 'string' && (hexReg.test(v) || rgbReg.test(v) || rgbaReg.test(v) || hslReg.test(v) || hslaReg.test(v))) || v instanceof helpers_1.Gradient || v instanceof helpers_1.Pattern;
|
|
54
24
|
}
|
|
55
25
|
exports.isColor = isColor;
|
|
56
26
|
function tooShort(v) {
|
|
@@ -113,7 +83,7 @@ function parseColor(v) {
|
|
|
113
83
|
if (typeof v === 'string') {
|
|
114
84
|
return parseHex(v);
|
|
115
85
|
}
|
|
116
|
-
else if (v instanceof
|
|
86
|
+
else if (v instanceof helpers_1.Gradient || v instanceof helpers_1.Pattern) {
|
|
117
87
|
return v;
|
|
118
88
|
}
|
|
119
89
|
else {
|
|
@@ -151,117 +121,73 @@ function parseToNormal(v, ctx, canvas, layer = { width: 0, height: 0 }, options
|
|
|
151
121
|
if (!manager)
|
|
152
122
|
return 0;
|
|
153
123
|
let anyLayer = manager.get(match[2], true);
|
|
124
|
+
if (!anyLayer || anyLayer instanceof components_1.Group || anyLayer instanceof components_1.Path2DLayer)
|
|
125
|
+
return 0;
|
|
154
126
|
const parcer = parser(ctx, canvas, manager);
|
|
155
127
|
switch (match[1]) {
|
|
156
128
|
case 'link-w':
|
|
157
|
-
if (anyLayer
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
return anyLayer.measureText(ctx, canvas).width + (parseInt(match[3]) || 0);
|
|
163
|
-
}
|
|
164
|
-
else {
|
|
165
|
-
return (parcer.parse(anyLayer.props.size.width) || 0) + (parseInt(match[3]) || 0);
|
|
166
|
-
}
|
|
129
|
+
if (anyLayer instanceof components_1.LineLayer || anyLayer instanceof components_1.BezierLayer || anyLayer instanceof components_1.QuadraticLayer) {
|
|
130
|
+
return anyLayer.getBoundingBox(ctx, canvas, manager).width + (parseInt(match[3]) || 0);
|
|
131
|
+
}
|
|
132
|
+
else if (anyLayer instanceof components_1.TextLayer) {
|
|
133
|
+
return anyLayer.measureText(ctx, canvas).width + (parseInt(match[3]) || 0);
|
|
167
134
|
}
|
|
168
135
|
else {
|
|
169
|
-
return 0;
|
|
136
|
+
return (parcer.parse(anyLayer.props.size.width) || 0) + (parseInt(match[3]) || 0);
|
|
170
137
|
}
|
|
171
|
-
break;
|
|
172
138
|
case 'link-h':
|
|
173
|
-
if (anyLayer
|
|
174
|
-
|
|
175
|
-
return anyLayer.getBoundingBox(ctx, canvas, manager).height + (parseInt(match[3]) || 0);
|
|
176
|
-
}
|
|
177
|
-
else if (anyLayer instanceof TextLayer_1.TextLayer) {
|
|
178
|
-
return anyLayer.measureText(ctx, canvas).height + (parseInt(match[3]) || 0);
|
|
179
|
-
}
|
|
180
|
-
else {
|
|
181
|
-
return (parcer.parse(anyLayer.props.size.height, LazyUtil_1.defaultArg.wh(parcer.parse(anyLayer.props.size.width)), LazyUtil_1.defaultArg.vl(true)) || 0) + (parseInt(match[3]) || 0);
|
|
182
|
-
}
|
|
139
|
+
if (anyLayer instanceof components_1.LineLayer || anyLayer instanceof components_1.BezierLayer || anyLayer instanceof components_1.QuadraticLayer) {
|
|
140
|
+
return anyLayer.getBoundingBox(ctx, canvas, manager).height + (parseInt(match[3]) || 0);
|
|
183
141
|
}
|
|
184
|
-
else {
|
|
185
|
-
return 0;
|
|
186
|
-
}
|
|
187
|
-
break;
|
|
188
|
-
case 'link-x':
|
|
189
|
-
if (anyLayer && !(anyLayer instanceof Group_1.Group)) {
|
|
190
|
-
return (parcer.parse(anyLayer.props.x) || 0) + (parseInt(match[3]) || 0);
|
|
142
|
+
else if (anyLayer instanceof components_1.TextLayer) {
|
|
143
|
+
return anyLayer.measureText(ctx, canvas).height + (parseInt(match[3]) || 0);
|
|
191
144
|
}
|
|
192
145
|
else {
|
|
193
|
-
return 0;
|
|
146
|
+
return (parcer.parse(anyLayer.props.size.height, LazyUtil_1.defaultArg.wh(parcer.parse(anyLayer.props.size.width)), LazyUtil_1.defaultArg.vl(true)) || 0) + (parseInt(match[3]) || 0);
|
|
194
147
|
}
|
|
195
|
-
|
|
148
|
+
case 'link-x':
|
|
149
|
+
return (parcer.parse(anyLayer.props.x) || 0) + (parseInt(match[3]) || 0);
|
|
196
150
|
case 'link-y':
|
|
197
|
-
|
|
198
|
-
return (parcer.parse(anyLayer.props.y, LazyUtil_1.defaultArg.wh(), LazyUtil_1.defaultArg.vl(true)) || 0) + (parseInt(match[3]) || 0);
|
|
199
|
-
}
|
|
200
|
-
else {
|
|
201
|
-
return 0;
|
|
202
|
-
}
|
|
203
|
-
break;
|
|
151
|
+
return (parcer.parse(anyLayer.props.y, LazyUtil_1.defaultArg.wh(), LazyUtil_1.defaultArg.vl(true)) || 0) + (parseInt(match[3]) || 0);
|
|
204
152
|
}
|
|
205
153
|
}
|
|
206
154
|
}
|
|
207
|
-
else if (v instanceof
|
|
155
|
+
else if (v instanceof helpers_1.Link) {
|
|
208
156
|
if (!manager)
|
|
209
157
|
return 0;
|
|
210
158
|
let anyLayer = manager.get(v.source, true);
|
|
159
|
+
if (!anyLayer || anyLayer instanceof components_1.Group || anyLayer instanceof components_1.Path2DLayer)
|
|
160
|
+
return 0;
|
|
211
161
|
const parcer = parser(ctx, canvas, manager);
|
|
212
162
|
switch (v.type) {
|
|
213
|
-
case
|
|
163
|
+
case types_1.LinkType.Width:
|
|
214
164
|
case 'width':
|
|
215
|
-
if (anyLayer
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
return anyLayer.measureText(ctx, canvas).width + (parcer.parse(v.additionalSpacing, LazyUtil_1.defaultArg.wh(layer.width, layer.height), LazyUtil_1.defaultArg.vl(options.vertical, options.layer)) || 0);
|
|
221
|
-
}
|
|
222
|
-
else {
|
|
223
|
-
return (parcer.parse(anyLayer.props.size.width) || 0) + (parcer.parse(v.additionalSpacing, LazyUtil_1.defaultArg.wh(layer.width, layer.height), LazyUtil_1.defaultArg.vl(options.vertical, options.layer)) || 0);
|
|
224
|
-
}
|
|
165
|
+
if (anyLayer instanceof components_1.LineLayer || anyLayer instanceof components_1.BezierLayer || anyLayer instanceof components_1.QuadraticLayer) {
|
|
166
|
+
return anyLayer.getBoundingBox(ctx, canvas, manager).width + (parcer.parse(v.additionalSpacing, LazyUtil_1.defaultArg.wh(layer.width, layer.height), LazyUtil_1.defaultArg.vl(options.vertical, options.layer)) || 0);
|
|
167
|
+
}
|
|
168
|
+
else if (anyLayer instanceof components_1.TextLayer) {
|
|
169
|
+
return anyLayer.measureText(ctx, canvas).width + (parcer.parse(v.additionalSpacing, LazyUtil_1.defaultArg.wh(layer.width, layer.height), LazyUtil_1.defaultArg.vl(options.vertical, options.layer)) || 0);
|
|
225
170
|
}
|
|
226
171
|
else {
|
|
227
|
-
return 0;
|
|
172
|
+
return (parcer.parse(anyLayer.props.size.width) || 0) + (parcer.parse(v.additionalSpacing, LazyUtil_1.defaultArg.wh(layer.width, layer.height), LazyUtil_1.defaultArg.vl(options.vertical, options.layer)) || 0);
|
|
228
173
|
}
|
|
229
|
-
|
|
230
|
-
case enum_1.LinkType.Height:
|
|
174
|
+
case types_1.LinkType.Height:
|
|
231
175
|
case 'height':
|
|
232
|
-
if (anyLayer
|
|
233
|
-
|
|
234
|
-
return anyLayer.getBoundingBox(ctx, canvas, manager).height + (parcer.parse(v.additionalSpacing, LazyUtil_1.defaultArg.wh(layer.width, layer.height), LazyUtil_1.defaultArg.vl(options.vertical, options.layer)) || 0);
|
|
235
|
-
}
|
|
236
|
-
else if (anyLayer instanceof TextLayer_1.TextLayer) {
|
|
237
|
-
return anyLayer.measureText(ctx, canvas).height + (parcer.parse(v.additionalSpacing, LazyUtil_1.defaultArg.wh(layer.width, layer.height), LazyUtil_1.defaultArg.vl(options.vertical, options.layer)) || 0);
|
|
238
|
-
}
|
|
239
|
-
else {
|
|
240
|
-
return (parcer.parse(anyLayer.props.size.height, LazyUtil_1.defaultArg.wh(parcer.parse(anyLayer.props.size.width)), LazyUtil_1.defaultArg.vl(true)) || 0) + (parcer.parse(v.additionalSpacing, LazyUtil_1.defaultArg.wh(layer.width, layer.height), LazyUtil_1.defaultArg.vl(options.vertical, options.layer)) || 0);
|
|
241
|
-
}
|
|
176
|
+
if (anyLayer instanceof components_1.LineLayer || anyLayer instanceof components_1.BezierLayer || anyLayer instanceof components_1.QuadraticLayer) {
|
|
177
|
+
return anyLayer.getBoundingBox(ctx, canvas, manager).height + (parcer.parse(v.additionalSpacing, LazyUtil_1.defaultArg.wh(layer.width, layer.height), LazyUtil_1.defaultArg.vl(options.vertical, options.layer)) || 0);
|
|
242
178
|
}
|
|
243
|
-
else {
|
|
244
|
-
return 0;
|
|
245
|
-
}
|
|
246
|
-
break;
|
|
247
|
-
case enum_1.LinkType.X:
|
|
248
|
-
case 'x':
|
|
249
|
-
if (anyLayer && !(anyLayer instanceof Group_1.Group)) {
|
|
250
|
-
return (parcer.parse(anyLayer.props.x) || 0) + (parcer.parse(v.additionalSpacing, LazyUtil_1.defaultArg.wh(layer.width, layer.height), LazyUtil_1.defaultArg.vl(options.vertical, options.layer)) || 0);
|
|
179
|
+
else if (anyLayer instanceof components_1.TextLayer) {
|
|
180
|
+
return anyLayer.measureText(ctx, canvas).height + (parcer.parse(v.additionalSpacing, LazyUtil_1.defaultArg.wh(layer.width, layer.height), LazyUtil_1.defaultArg.vl(options.vertical, options.layer)) || 0);
|
|
251
181
|
}
|
|
252
182
|
else {
|
|
253
|
-
return 0;
|
|
183
|
+
return (parcer.parse(anyLayer.props.size.height, LazyUtil_1.defaultArg.wh(parcer.parse(anyLayer.props.size.width)), LazyUtil_1.defaultArg.vl(true)) || 0) + (parcer.parse(v.additionalSpacing, LazyUtil_1.defaultArg.wh(layer.width, layer.height), LazyUtil_1.defaultArg.vl(options.vertical, options.layer)) || 0);
|
|
254
184
|
}
|
|
255
|
-
|
|
256
|
-
case
|
|
185
|
+
case types_1.LinkType.X:
|
|
186
|
+
case 'x':
|
|
187
|
+
return (parcer.parse(anyLayer.props.x) || 0) + (parcer.parse(v.additionalSpacing, LazyUtil_1.defaultArg.wh(layer.width, layer.height), LazyUtil_1.defaultArg.vl(options.vertical, options.layer)) || 0);
|
|
188
|
+
case types_1.LinkType.Y:
|
|
257
189
|
case 'y':
|
|
258
|
-
|
|
259
|
-
return (parcer.parse(anyLayer.props.y) || 0) + (parcer.parse(v.additionalSpacing, LazyUtil_1.defaultArg.wh(layer.width, layer.height), LazyUtil_1.defaultArg.vl(options.vertical, options.layer)) || 0);
|
|
260
|
-
}
|
|
261
|
-
else {
|
|
262
|
-
return 0;
|
|
263
|
-
}
|
|
264
|
-
break;
|
|
190
|
+
return (parcer.parse(anyLayer.props.y) || 0) + (parcer.parse(v.additionalSpacing, LazyUtil_1.defaultArg.wh(layer.width, layer.height), LazyUtil_1.defaultArg.vl(options.vertical, options.layer)) || 0);
|
|
265
191
|
default:
|
|
266
192
|
return 0;
|
|
267
193
|
}
|
|
@@ -310,7 +236,7 @@ function filters(ctx, filters) {
|
|
|
310
236
|
}
|
|
311
237
|
exports.filters = filters;
|
|
312
238
|
function parseFillStyle(ctx, color) {
|
|
313
|
-
if (color instanceof
|
|
239
|
+
if (color instanceof helpers_1.Gradient || color instanceof helpers_1.Pattern) {
|
|
314
240
|
return color.draw(ctx);
|
|
315
241
|
}
|
|
316
242
|
else {
|
|
@@ -318,40 +244,40 @@ function parseFillStyle(ctx, color) {
|
|
|
318
244
|
}
|
|
319
245
|
}
|
|
320
246
|
exports.parseFillStyle = parseFillStyle;
|
|
321
|
-
function transform(ctx, transform, layer = { width: 0, height: 0, x: 0, y: 0, type:
|
|
247
|
+
function transform(ctx, transform, layer = { width: 0, height: 0, x: 0, y: 0, type: types_1.LayerType.Morph }, extra = { text: '', textAlign: types_1.TextAlign.Left, fontSize: 0, multiline: false }) {
|
|
322
248
|
if (transform) {
|
|
323
249
|
if (transform.translate) {
|
|
324
250
|
ctx.translate(transform.translate.x, transform.translate.y);
|
|
325
251
|
}
|
|
326
252
|
if (transform.rotate) {
|
|
327
253
|
switch (layer.type) {
|
|
328
|
-
case
|
|
329
|
-
case
|
|
330
|
-
case
|
|
331
|
-
case
|
|
332
|
-
case
|
|
254
|
+
case types_1.LayerType.Image:
|
|
255
|
+
case types_1.LayerType.Morph:
|
|
256
|
+
case types_1.LayerType.BezierCurve:
|
|
257
|
+
case types_1.LayerType.QuadraticCurve:
|
|
258
|
+
case types_1.LayerType.Line:
|
|
333
259
|
ctx.translate(layer.x + (layer.width / 2), layer.y + (layer.height / 2));
|
|
334
260
|
ctx.rotate((Math.PI / 180) * transform.rotate);
|
|
335
261
|
ctx.translate(-(layer.x + (layer.width / 2)), -(layer.y + (layer.height / 2)));
|
|
336
262
|
break;
|
|
337
|
-
case
|
|
263
|
+
case types_1.LayerType.Text:
|
|
338
264
|
if (extra.multiline) {
|
|
339
265
|
ctx.translate(layer.x + (layer.width / 2), layer.y + (layer.height / 2));
|
|
340
266
|
ctx.rotate((Math.PI / 180) * transform.rotate);
|
|
341
267
|
ctx.translate(-(layer.x + (layer.width / 2)), -(layer.y + (layer.height / 2)));
|
|
342
268
|
}
|
|
343
269
|
else {
|
|
344
|
-
if (extra.textAlign ===
|
|
270
|
+
if (extra.textAlign === types_1.TextAlign.Center) {
|
|
345
271
|
ctx.translate(layer.x, layer.y);
|
|
346
272
|
ctx.rotate((Math.PI / 180) * transform.rotate);
|
|
347
273
|
ctx.translate(-layer.x, -layer.y);
|
|
348
274
|
}
|
|
349
|
-
else if (extra.textAlign ===
|
|
275
|
+
else if (extra.textAlign === types_1.TextAlign.Left || extra.textAlign === types_1.TextAlign.Start) {
|
|
350
276
|
ctx.translate(layer.x + (extra.fontSize * extra.text.length) / 2, layer.y);
|
|
351
277
|
ctx.rotate((Math.PI / 180) * transform.rotate);
|
|
352
278
|
ctx.translate(-(layer.x + (extra.fontSize * extra.text.length) / 2), -layer.y);
|
|
353
279
|
}
|
|
354
|
-
else if (extra.textAlign ===
|
|
280
|
+
else if (extra.textAlign === types_1.TextAlign.Right || extra.textAlign === types_1.TextAlign.End) {
|
|
355
281
|
ctx.translate(layer.x - (extra.fontSize * extra.text.length) / 2, layer.y);
|
|
356
282
|
ctx.rotate((Math.PI / 180) * transform.rotate);
|
|
357
283
|
ctx.translate(-(layer.x - (extra.fontSize * extra.text.length) / 2), -layer.y);
|
|
@@ -371,21 +297,13 @@ function transform(ctx, transform, layer = { width: 0, height: 0, x: 0, y: 0, ty
|
|
|
371
297
|
}
|
|
372
298
|
}
|
|
373
299
|
exports.transform = transform;
|
|
374
|
-
async function saveFile(buffer, extension, name) {
|
|
375
|
-
if (!buffer)
|
|
376
|
-
throw new LazyUtil_1.LazyError('Buffer must be provided');
|
|
377
|
-
if (!extension)
|
|
378
|
-
throw new LazyUtil_1.LazyError('Extension must be provided');
|
|
379
|
-
fs.writeFileSync(`${name === undefined ? generateRandomName() : name}.${extension}`, buffer);
|
|
380
|
-
}
|
|
381
|
-
exports.saveFile = saveFile;
|
|
382
300
|
function generateRandomName() {
|
|
383
301
|
return Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);
|
|
384
302
|
}
|
|
385
303
|
exports.generateRandomName = generateRandomName;
|
|
386
304
|
function isImageUrlValid(src) {
|
|
387
305
|
try {
|
|
388
|
-
|
|
306
|
+
(0, canvas_1.loadImage)(src);
|
|
389
307
|
return true;
|
|
390
308
|
}
|
|
391
309
|
catch (error) {
|
|
@@ -395,86 +313,94 @@ function isImageUrlValid(src) {
|
|
|
395
313
|
exports.isImageUrlValid = isImageUrlValid;
|
|
396
314
|
function centring(centring, type, width, height, x, y) {
|
|
397
315
|
switch (centring) {
|
|
398
|
-
case
|
|
316
|
+
case types_1.Centring.Center:
|
|
399
317
|
case "center":
|
|
400
318
|
switch (type) {
|
|
401
|
-
case
|
|
402
|
-
case
|
|
319
|
+
case types_1.LayerType.Image:
|
|
320
|
+
case types_1.LayerType.Morph:
|
|
321
|
+
case types_1.LayerType.Clear:
|
|
403
322
|
x -= width / 2;
|
|
404
323
|
y -= height / 2;
|
|
405
324
|
break;
|
|
406
325
|
}
|
|
407
326
|
return { x, y };
|
|
408
|
-
case
|
|
327
|
+
case types_1.Centring.CenterBottom:
|
|
409
328
|
case "center-bottom":
|
|
410
329
|
switch (type) {
|
|
411
|
-
case
|
|
412
|
-
case
|
|
330
|
+
case types_1.LayerType.Image:
|
|
331
|
+
case types_1.LayerType.Morph:
|
|
332
|
+
case types_1.LayerType.Clear:
|
|
413
333
|
x -= width / 2;
|
|
414
334
|
break;
|
|
415
335
|
}
|
|
416
336
|
return { x, y };
|
|
417
|
-
case
|
|
337
|
+
case types_1.Centring.CenterTop:
|
|
418
338
|
case "center-top":
|
|
419
339
|
switch (type) {
|
|
420
|
-
case
|
|
421
|
-
case
|
|
340
|
+
case types_1.LayerType.Image:
|
|
341
|
+
case types_1.LayerType.Morph:
|
|
342
|
+
case types_1.LayerType.Clear:
|
|
422
343
|
x -= width / 2;
|
|
423
344
|
y -= height;
|
|
424
345
|
break;
|
|
425
346
|
}
|
|
426
347
|
return { x, y };
|
|
427
|
-
case
|
|
348
|
+
case types_1.Centring.Start:
|
|
428
349
|
case "start":
|
|
429
350
|
switch (type) {
|
|
430
|
-
case
|
|
431
|
-
case
|
|
351
|
+
case types_1.LayerType.Image:
|
|
352
|
+
case types_1.LayerType.Morph:
|
|
353
|
+
case types_1.LayerType.Clear:
|
|
432
354
|
y -= height / 2;
|
|
433
355
|
break;
|
|
434
356
|
}
|
|
435
357
|
return { x, y };
|
|
436
|
-
case
|
|
358
|
+
case types_1.Centring.StartBottom:
|
|
437
359
|
case "start-bottom":
|
|
438
360
|
return { x, y };
|
|
439
|
-
case
|
|
361
|
+
case types_1.Centring.StartTop:
|
|
440
362
|
case "start-top":
|
|
441
363
|
switch (type) {
|
|
442
|
-
case
|
|
443
|
-
case
|
|
364
|
+
case types_1.LayerType.Image:
|
|
365
|
+
case types_1.LayerType.Morph:
|
|
366
|
+
case types_1.LayerType.Clear:
|
|
444
367
|
y -= height;
|
|
445
368
|
break;
|
|
446
369
|
}
|
|
447
370
|
return { x, y };
|
|
448
|
-
case
|
|
371
|
+
case types_1.Centring.End:
|
|
449
372
|
case "end":
|
|
450
373
|
switch (type) {
|
|
451
|
-
case
|
|
452
|
-
case
|
|
374
|
+
case types_1.LayerType.Image:
|
|
375
|
+
case types_1.LayerType.Morph:
|
|
376
|
+
case types_1.LayerType.Clear:
|
|
453
377
|
x -= width;
|
|
454
378
|
y -= height / 2;
|
|
455
379
|
break;
|
|
456
380
|
}
|
|
457
381
|
return { x, y };
|
|
458
|
-
case
|
|
382
|
+
case types_1.Centring.EndBottom:
|
|
459
383
|
case "end-bottom":
|
|
460
384
|
switch (type) {
|
|
461
|
-
case
|
|
462
|
-
case
|
|
385
|
+
case types_1.LayerType.Image:
|
|
386
|
+
case types_1.LayerType.Morph:
|
|
387
|
+
case types_1.LayerType.Clear:
|
|
463
388
|
x -= width;
|
|
464
389
|
break;
|
|
465
390
|
}
|
|
466
391
|
return { x, y };
|
|
467
|
-
case
|
|
392
|
+
case types_1.Centring.EndTop:
|
|
468
393
|
case "end-top":
|
|
469
394
|
switch (type) {
|
|
470
|
-
case
|
|
471
|
-
case
|
|
395
|
+
case types_1.LayerType.Image:
|
|
396
|
+
case types_1.LayerType.Morph:
|
|
397
|
+
case types_1.LayerType.Clear:
|
|
472
398
|
x -= width;
|
|
473
399
|
y -= height;
|
|
474
400
|
break;
|
|
475
401
|
}
|
|
476
402
|
return { x, y };
|
|
477
|
-
case
|
|
403
|
+
case types_1.Centring.None:
|
|
478
404
|
case "none":
|
|
479
405
|
return { x, y };
|
|
480
406
|
}
|
|
@@ -512,3 +438,72 @@ function getBoundingBoxBezier(points, steps = 100) {
|
|
|
512
438
|
return { min: { x: minX, y: minY }, max: { x: maxX, y: maxY }, center: { x: (minX + maxX) / 2, y: (minY + maxY) / 2 }, width: maxX - minX, height: maxY - minY };
|
|
513
439
|
}
|
|
514
440
|
exports.getBoundingBoxBezier = getBoundingBoxBezier;
|
|
441
|
+
function resize(value, ratio) {
|
|
442
|
+
if (typeof value === 'number') {
|
|
443
|
+
return value * ratio;
|
|
444
|
+
}
|
|
445
|
+
else if (typeof value === 'string') {
|
|
446
|
+
if (pxReg.test(value)) {
|
|
447
|
+
return parseFloat(value) * ratio;
|
|
448
|
+
}
|
|
449
|
+
else if (linkReg.test(value)) {
|
|
450
|
+
let match = value.match(linkReg);
|
|
451
|
+
return `${match[1]}-${match[2]}-${parseFloat(match[3]) * ratio}`;
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
else if (value instanceof helpers_1.Link) {
|
|
455
|
+
return `${value.type}-${value.source}-${resize(value.additionalSpacing, ratio)}`;
|
|
456
|
+
}
|
|
457
|
+
return value;
|
|
458
|
+
}
|
|
459
|
+
exports.resize = resize;
|
|
460
|
+
function resizeLayers(layers, ratio) {
|
|
461
|
+
let newLayers = [];
|
|
462
|
+
if (layers.length > 0) {
|
|
463
|
+
for (const layer of layers) {
|
|
464
|
+
if (!(layer instanceof components_1.Group || layer instanceof components_1.Path2DLayer)) {
|
|
465
|
+
layer.props.x = resize(layer.props.x, ratio);
|
|
466
|
+
layer.props.y = resize(layer.props.y, ratio);
|
|
467
|
+
if ('size' in layer.props) {
|
|
468
|
+
layer.props.size.width = resize(layer.props.size.width, ratio);
|
|
469
|
+
layer.props.size.height = resize(layer.props.size.height, ratio);
|
|
470
|
+
if ('radius' in layer.props.size) {
|
|
471
|
+
layer.props.size.radius = resize(layer.props.size.radius, ratio);
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
if ('stroke' in layer.props) {
|
|
475
|
+
layer.props.stroke.width = resize(layer.props.stroke.width, ratio);
|
|
476
|
+
}
|
|
477
|
+
if ('endPoint' in layer.props) {
|
|
478
|
+
layer.props.endPoint.x = resize(layer.props.endPoint.x, ratio);
|
|
479
|
+
layer.props.endPoint.y = resize(layer.props.endPoint.y, ratio);
|
|
480
|
+
}
|
|
481
|
+
if ('controlPoints' in layer.props) {
|
|
482
|
+
for (const point of layer.props.controlPoints) {
|
|
483
|
+
point.x = resize(point.x, ratio);
|
|
484
|
+
point.y = resize(point.y, ratio);
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
if ('font' in layer.props) {
|
|
488
|
+
layer.props.font.size = resize(layer.props.font.size, ratio);
|
|
489
|
+
}
|
|
490
|
+
if ('transform' in layer.props) {
|
|
491
|
+
if (layer.props.transform.translate) {
|
|
492
|
+
layer.props.transform.translate.x = resize(layer.props.transform.translate.x, ratio);
|
|
493
|
+
layer.props.transform.translate.y = resize(layer.props.transform.translate.y, ratio);
|
|
494
|
+
}
|
|
495
|
+
if (layer.props.transform.scale) {
|
|
496
|
+
layer.props.transform.scale.x = resize(layer.props.transform.scale.x, ratio);
|
|
497
|
+
layer.props.transform.scale.y = resize(layer.props.transform.scale.y, ratio);
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
else if (layer instanceof components_1.Group) {
|
|
502
|
+
layer.layers = resizeLayers(layer.layers, ratio);
|
|
503
|
+
}
|
|
504
|
+
newLayers.push(layer);
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
return newLayers;
|
|
508
|
+
}
|
|
509
|
+
exports.resizeLayers = resizeLayers;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nmmty/lazycanvas",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "A simple way to interact with @napi-rs/canvas in an advanced way!",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -9,6 +9,8 @@
|
|
|
9
9
|
"centring": "tsc ./test/centring.ts && node ./test/centring.js",
|
|
10
10
|
"logo": "tsc ./test/logo.ts && node ./test/logo.js",
|
|
11
11
|
"text": "tsc ./test/text.ts && node ./test/text.js",
|
|
12
|
+
"animation": "tsc ./test/animation.ts && node ./test/animation.js",
|
|
13
|
+
"iotest": "tsc ./test/iotest.ts && node ./test/iotest.js",
|
|
12
14
|
"doc": "tsx docgen.ts",
|
|
13
15
|
"font": "tsc ./scripts/font-gen.ts && node ./scripts/font-gen.js",
|
|
14
16
|
"build": "tsc"
|
|
@@ -32,18 +34,20 @@
|
|
|
32
34
|
"homepage": "https://github.com/NMMTY/LazyCanvas#readme",
|
|
33
35
|
"dependencies": {
|
|
34
36
|
"@napi-rs/canvas": "^0.1.68",
|
|
35
|
-
"
|
|
37
|
+
"gifenc": "^1.0.3",
|
|
38
|
+
"js-yaml": "^4.1.0",
|
|
36
39
|
"path": "^0.12.7",
|
|
37
40
|
"svgson": "^5.3.1"
|
|
38
41
|
},
|
|
39
42
|
"devDependencies": {
|
|
40
43
|
"@hitomihiumi/colors.ts": "^1.0.3",
|
|
41
44
|
"@hitomihiumi/micro-docgen": "^0.3.0",
|
|
42
|
-
"@types/
|
|
45
|
+
"@types/js-yaml": "^4.0.9",
|
|
43
46
|
"@types/node": "^22.10.2",
|
|
44
|
-
"@types/react": "^19.0.2",
|
|
45
47
|
"ava": "^6.2.0",
|
|
46
|
-
"
|
|
48
|
+
"eslint": "^9.23.0",
|
|
49
|
+
"eslint-config-neon": "^0.2.7",
|
|
50
|
+
"lodash.merge": "^4.6.2",
|
|
47
51
|
"tslib": "^2.8.1",
|
|
48
52
|
"tsx": "^4.19.2",
|
|
49
53
|
"typescript": "^5.4.5"
|