@nmmty/lazycanvas 0.4.0 → 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.
Files changed (64) hide show
  1. package/dist/helpers/Filters.d.ts +10 -10
  2. package/dist/helpers/Fonts.d.ts +1 -1
  3. package/dist/helpers/FontsList.d.ts +1 -1
  4. package/dist/helpers/FontsList.js +19 -19
  5. package/dist/index.d.ts +11 -20
  6. package/dist/index.js +40 -47
  7. package/dist/structures/LazyCanvas.d.ts +126 -19
  8. package/dist/structures/LazyCanvas.js +100 -35
  9. package/dist/structures/components/BaseLayer.d.ts +188 -38
  10. package/dist/structures/components/BaseLayer.js +88 -41
  11. package/dist/structures/components/BezierLayer.d.ts +108 -21
  12. package/dist/structures/components/BezierLayer.js +73 -24
  13. package/dist/structures/components/ClearLayer.d.ts +120 -17
  14. package/dist/structures/components/ClearLayer.js +83 -22
  15. package/dist/structures/components/Group.d.ts +86 -18
  16. package/dist/structures/components/Group.js +69 -29
  17. package/dist/structures/components/ImageLayer.d.ts +85 -12
  18. package/dist/structures/components/ImageLayer.js +52 -39
  19. package/dist/structures/components/LineLayer.d.ts +111 -18
  20. package/dist/structures/components/LineLayer.js +58 -21
  21. package/dist/structures/components/MorphLayer.d.ts +109 -21
  22. package/dist/structures/components/MorphLayer.js +53 -25
  23. package/dist/structures/components/Path2DLayer.d.ts +191 -0
  24. package/dist/structures/components/Path2DLayer.js +318 -0
  25. package/dist/structures/components/QuadraticLayer.d.ts +108 -22
  26. package/dist/structures/components/QuadraticLayer.js +65 -30
  27. package/dist/structures/components/TextLayer.d.ts +201 -40
  28. package/dist/structures/components/TextLayer.js +99 -47
  29. package/dist/structures/components/index.d.ts +10 -0
  30. package/dist/structures/components/index.js +26 -0
  31. package/dist/structures/helpers/Exporter.d.ts +52 -0
  32. package/dist/structures/helpers/Exporter.js +168 -0
  33. package/dist/structures/helpers/Font.d.ts +64 -10
  34. package/dist/structures/helpers/Font.js +38 -11
  35. package/dist/structures/helpers/Gradient.d.ts +96 -9
  36. package/dist/structures/helpers/Gradient.js +48 -17
  37. package/dist/structures/helpers/Link.d.ts +52 -8
  38. package/dist/structures/helpers/Link.js +42 -11
  39. package/dist/structures/helpers/Pattern.d.ts +52 -7
  40. package/dist/structures/helpers/Pattern.js +45 -40
  41. package/dist/structures/helpers/index.d.ts +6 -0
  42. package/dist/structures/helpers/index.js +22 -0
  43. package/dist/structures/helpers/readers/JSONReader.d.ts +49 -0
  44. package/dist/structures/helpers/readers/JSONReader.js +172 -0
  45. package/dist/structures/helpers/readers/SVGReader.d.ts +20 -0
  46. package/dist/structures/helpers/readers/SVGReader.js +577 -0
  47. package/dist/structures/helpers/readers/YAMLReader.d.ts +0 -0
  48. package/dist/structures/helpers/readers/YAMLReader.js +1 -0
  49. package/dist/structures/managers/AnimationManager.d.ts +96 -20
  50. package/dist/structures/managers/AnimationManager.js +54 -26
  51. package/dist/structures/managers/FontsManager.d.ts +76 -32
  52. package/dist/structures/managers/FontsManager.js +70 -45
  53. package/dist/structures/managers/LayersManager.d.ts +84 -32
  54. package/dist/structures/managers/LayersManager.js +66 -28
  55. package/dist/structures/managers/RenderManager.d.ts +60 -6
  56. package/dist/structures/managers/RenderManager.js +120 -40
  57. package/dist/types/enum.d.ts +11 -6
  58. package/dist/types/enum.js +17 -12
  59. package/dist/types/index.d.ts +2 -19
  60. package/dist/types/index.js +17 -0
  61. package/dist/utils/LazyUtil.js +2 -2
  62. package/dist/utils/utils.d.ts +10 -9
  63. package/dist/utils/utils.js +159 -164
  64. package/package.json +4 -5
@@ -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.getBoundingBoxBezier = exports.centring = exports.isImageUrlValid = exports.generateRandomName = exports.saveFile = exports.transform = exports.parseFillStyle = exports.filters = exports.opacity = exports.drawShadow = exports.parser = exports.parseToNormal = exports.parseColor = exports.parseHex = exports.isColor = exports.generateID = void 0;
27
- const enum_1 = require("../types/enum");
28
- const Gradient_1 = require("../structures/helpers/Gradient");
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 fs = __importStar(require("fs"));
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 Gradient_1.Gradient || v instanceof Pattern_1.Pattern;
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 Gradient_1.Gradient || v instanceof Pattern_1.Pattern) {
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 && !(anyLayer instanceof Group_1.Group)) {
158
- if (anyLayer instanceof LineLayer_1.LineLayer || anyLayer instanceof BezierLayer_1.BezierLayer || anyLayer instanceof QuadraticLayer_1.QuadraticLayer) {
159
- return anyLayer.getBoundingBox(ctx, canvas, manager).width + (parseInt(match[3]) || 0);
160
- }
161
- else if (anyLayer instanceof TextLayer_1.TextLayer) {
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 && !(anyLayer instanceof Group_1.Group)) {
174
- if (anyLayer instanceof LineLayer_1.LineLayer || anyLayer instanceof BezierLayer_1.BezierLayer || anyLayer instanceof QuadraticLayer_1.QuadraticLayer) {
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
- break;
148
+ case 'link-x':
149
+ return (parcer.parse(anyLayer.props.x) || 0) + (parseInt(match[3]) || 0);
196
150
  case 'link-y':
197
- if (anyLayer && !(anyLayer instanceof Group_1.Group)) {
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 Link_1.Link) {
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 enum_1.LinkType.Width:
163
+ case types_1.LinkType.Width:
214
164
  case 'width':
215
- if (anyLayer && !(anyLayer instanceof Group_1.Group)) {
216
- if (anyLayer instanceof LineLayer_1.LineLayer || anyLayer instanceof BezierLayer_1.BezierLayer || anyLayer instanceof QuadraticLayer_1.QuadraticLayer) {
217
- 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);
218
- }
219
- else if (anyLayer instanceof TextLayer_1.TextLayer) {
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
- break;
230
- case enum_1.LinkType.Height:
174
+ case types_1.LinkType.Height:
231
175
  case 'height':
232
- if (anyLayer && !(anyLayer instanceof Group_1.Group)) {
233
- if (anyLayer instanceof LineLayer_1.LineLayer || anyLayer instanceof BezierLayer_1.BezierLayer || anyLayer instanceof QuadraticLayer_1.QuadraticLayer) {
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
- break;
256
- case enum_1.LinkType.Y:
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
- if (anyLayer && !(anyLayer instanceof Group_1.Group)) {
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 Gradient_1.Gradient || color instanceof Pattern_1.Pattern) {
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: enum_1.LayerType.Morph }, extra = { text: '', textAlign: enum_1.TextAlign.Left, fontSize: 0, multiline: false }) {
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 enum_1.LayerType.Image:
329
- case enum_1.LayerType.Morph:
330
- case enum_1.LayerType.BezierCurve:
331
- case enum_1.LayerType.QuadraticCurve:
332
- case enum_1.LayerType.Line:
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 enum_1.LayerType.Text:
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 === enum_1.TextAlign.Center) {
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 === enum_1.TextAlign.Left || extra.textAlign === enum_1.TextAlign.Start) {
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 === enum_1.TextAlign.Right || extra.textAlign === enum_1.TextAlign.End) {
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
- jimp.read(src);
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 enum_1.Centring.Center:
316
+ case types_1.Centring.Center:
399
317
  case "center":
400
318
  switch (type) {
401
- case enum_1.LayerType.Image:
402
- case enum_1.LayerType.Morph:
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 enum_1.Centring.CenterBottom:
327
+ case types_1.Centring.CenterBottom:
409
328
  case "center-bottom":
410
329
  switch (type) {
411
- case enum_1.LayerType.Image:
412
- case enum_1.LayerType.Morph:
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 enum_1.Centring.CenterTop:
337
+ case types_1.Centring.CenterTop:
418
338
  case "center-top":
419
339
  switch (type) {
420
- case enum_1.LayerType.Image:
421
- case enum_1.LayerType.Morph:
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 enum_1.Centring.Start:
348
+ case types_1.Centring.Start:
428
349
  case "start":
429
350
  switch (type) {
430
- case enum_1.LayerType.Image:
431
- case enum_1.LayerType.Morph:
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 enum_1.Centring.StartBottom:
358
+ case types_1.Centring.StartBottom:
437
359
  case "start-bottom":
438
360
  return { x, y };
439
- case enum_1.Centring.StartTop:
361
+ case types_1.Centring.StartTop:
440
362
  case "start-top":
441
363
  switch (type) {
442
- case enum_1.LayerType.Image:
443
- case enum_1.LayerType.Morph:
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 enum_1.Centring.End:
371
+ case types_1.Centring.End:
449
372
  case "end":
450
373
  switch (type) {
451
- case enum_1.LayerType.Image:
452
- case enum_1.LayerType.Morph:
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 enum_1.Centring.EndBottom:
382
+ case types_1.Centring.EndBottom:
459
383
  case "end-bottom":
460
384
  switch (type) {
461
- case enum_1.LayerType.Image:
462
- case enum_1.LayerType.Morph:
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 enum_1.Centring.EndTop:
392
+ case types_1.Centring.EndTop:
468
393
  case "end-top":
469
394
  switch (type) {
470
- case enum_1.LayerType.Image:
471
- case enum_1.LayerType.Morph:
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 enum_1.Centring.None:
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.4.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",
@@ -10,6 +10,7 @@
10
10
  "logo": "tsc ./test/logo.ts && node ./test/logo.js",
11
11
  "text": "tsc ./test/text.ts && node ./test/text.js",
12
12
  "animation": "tsc ./test/animation.ts && node ./test/animation.js",
13
+ "iotest": "tsc ./test/iotest.ts && node ./test/iotest.js",
13
14
  "doc": "tsx docgen.ts",
14
15
  "font": "tsc ./scripts/font-gen.ts && node ./scripts/font-gen.js",
15
16
  "build": "tsc"
@@ -34,20 +35,18 @@
34
35
  "dependencies": {
35
36
  "@napi-rs/canvas": "^0.1.68",
36
37
  "gifenc": "^1.0.3",
37
- "jimp": "0.22.12",
38
+ "js-yaml": "^4.1.0",
38
39
  "path": "^0.12.7",
39
40
  "svgson": "^5.3.1"
40
41
  },
41
42
  "devDependencies": {
42
43
  "@hitomihiumi/colors.ts": "^1.0.3",
43
44
  "@hitomihiumi/micro-docgen": "^0.3.0",
44
- "@types/jimp": "^0.2.28",
45
+ "@types/js-yaml": "^4.0.9",
45
46
  "@types/node": "^22.10.2",
46
- "@types/react": "^19.0.2",
47
47
  "ava": "^6.2.0",
48
48
  "eslint": "^9.23.0",
49
49
  "eslint-config-neon": "^0.2.7",
50
- "globals": "^15.14.0",
51
50
  "lodash.merge": "^4.6.2",
52
51
  "tslib": "^2.8.1",
53
52
  "tsx": "^4.19.2",