@nmmty/lazycanvas 0.3.2 → 0.3.4

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 (50) hide show
  1. package/dist/helpers/FontsList.d.ts +98 -0
  2. package/dist/helpers/FontsList.js +65 -0
  3. package/dist/index.d.ts +8 -4
  4. package/dist/index.js +10 -3
  5. package/dist/structures/LazyCanvas.d.ts +4 -5
  6. package/dist/structures/LazyCanvas.js +1 -1
  7. package/dist/structures/components/BaseLayer.d.ts +4 -4
  8. package/dist/structures/components/BaseLayer.js +1 -1
  9. package/dist/structures/components/BezierLayer.d.ts +16 -0
  10. package/dist/structures/components/BezierLayer.js +26 -8
  11. package/dist/structures/components/ImageLayer.js +8 -5
  12. package/dist/structures/components/LineLayer.d.ts +8 -0
  13. package/dist/structures/components/LineLayer.js +21 -4
  14. package/dist/structures/components/MorphLayer.js +8 -5
  15. package/dist/structures/components/QuadraticLayer.d.ts +16 -0
  16. package/dist/structures/components/QuadraticLayer.js +22 -6
  17. package/dist/structures/components/TextLayer.d.ts +15 -11
  18. package/dist/structures/components/TextLayer.js +41 -27
  19. package/dist/structures/helpers/Font.d.ts +4 -4
  20. package/dist/structures/helpers/Font.js +2 -2
  21. package/dist/structures/helpers/Gradient.d.ts +4 -5
  22. package/dist/structures/helpers/Gradient.js +4 -1
  23. package/dist/structures/helpers/Link.d.ts +22 -0
  24. package/dist/structures/helpers/Link.js +39 -0
  25. package/dist/structures/helpers/Pattern.d.ts +4 -5
  26. package/dist/structures/helpers/Pattern.js +1 -1
  27. package/dist/structures/managers/FontsManager.d.ts +1 -1
  28. package/dist/structures/managers/FontsManager.js +1 -2
  29. package/dist/structures/managers/RenderManager.js +3 -0
  30. package/dist/types/LazyCanvas.d.ts +2 -2
  31. package/dist/types/components/BaseLayer.d.ts +3 -3
  32. package/dist/types/components/Group.d.ts +3 -1
  33. package/dist/types/components/MorphLayer.d.ts +1 -1
  34. package/dist/types/components/TextLayer.d.ts +8 -7
  35. package/dist/types/enum.d.ts +7 -1
  36. package/dist/types/enum.js +9 -2
  37. package/dist/types/helpers/Font.d.ts +2 -2
  38. package/dist/types/helpers/Gradient.d.ts +2 -2
  39. package/dist/types/helpers/Link.d.ts +7 -0
  40. package/dist/types/helpers/Pattern.d.ts +2 -2
  41. package/dist/types/index.d.ts +17 -16
  42. package/dist/types/types.d.ts +42 -2
  43. package/dist/utils/LazyUtil.d.ts +10 -0
  44. package/dist/utils/LazyUtil.js +9 -1
  45. package/dist/utils/utils.d.ts +24 -4
  46. package/dist/utils/utils.js +152 -28
  47. package/package.json +4 -2
  48. package/example.png +0 -0
  49. /package/dist/helpers/{filters.d.ts → Filters.d.ts} +0 -0
  50. /package/dist/helpers/{filters.js → Filters.js} +0 -0
@@ -1,5 +1,5 @@
1
- import { Centring, LayerType, SaveFormat, TextAlign } from "../types/enum";
2
- import { Transform, ScaleType, ColorType, PointNumber } from "../types";
1
+ import { LayerType, SaveFormat } from "../types/enum";
2
+ import { Transform, ScaleType, ColorType, PointNumber, AnyCentring, AnyTextAlign } from "../types";
3
3
  import { Gradient } from "../structures/helpers/Gradient";
4
4
  import { Canvas, SKRSContext2D } from "@napi-rs/canvas";
5
5
  import { Pattern } from "../structures/helpers/Pattern";
@@ -15,6 +15,26 @@ export declare function parseToNormal(v: ScaleType, ctx: SKRSContext2D, canvas:
15
15
  vertical?: boolean;
16
16
  layer?: boolean;
17
17
  }, manager?: LayersManager): number;
18
+ export declare function parser(ctx: SKRSContext2D, canvas: Canvas, manager?: LayersManager): {
19
+ parse(v: ScaleType, layer?: {
20
+ width: number;
21
+ height: number;
22
+ }, options?: {
23
+ vertical?: boolean;
24
+ layer?: boolean;
25
+ }): number;
26
+ parseBatch(values: Record<string, {
27
+ v: ScaleType;
28
+ layer?: {
29
+ width: number;
30
+ height: number;
31
+ };
32
+ options?: {
33
+ vertical?: boolean;
34
+ layer?: boolean;
35
+ };
36
+ }>): Record<string, number>;
37
+ };
18
38
  export declare function drawShadow(ctx: SKRSContext2D, shadow: any): void;
19
39
  export declare function opacity(ctx: SKRSContext2D, opacity: number): void;
20
40
  export declare function filters(ctx: SKRSContext2D, filters: string): void;
@@ -27,14 +47,14 @@ export declare function transform(ctx: SKRSContext2D, transform: Transform, laye
27
47
  type: LayerType;
28
48
  }, extra?: {
29
49
  text: string;
30
- textAlign: TextAlign;
50
+ textAlign: AnyTextAlign;
31
51
  fontSize: number;
32
52
  multiline: boolean;
33
53
  }): void;
34
54
  export declare function saveFile(buffer: any, extension: SaveFormat, name: string): Promise<void>;
35
55
  export declare function generateRandomName(): string;
36
56
  export declare function isImageUrlValid(src: string): boolean;
37
- export declare function centring(centring: Centring, type: LayerType, width: number, height: number, x: number, y: number): {
57
+ export declare function centring(centring: AnyCentring, type: LayerType, width: number, height: number, x: number, y: number): {
38
58
  x: number;
39
59
  y: number;
40
60
  };
@@ -23,14 +23,18 @@ var __importStar = (this && this.__importStar) || function (mod) {
23
23
  return result;
24
24
  };
25
25
  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.parseToNormal = exports.parseColor = exports.parseHex = exports.isColor = exports.generateID = void 0;
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
27
  const enum_1 = require("../types/enum");
28
28
  const Gradient_1 = require("../structures/helpers/Gradient");
29
29
  const LazyUtil_1 = require("./LazyUtil");
30
30
  const fs = __importStar(require("fs"));
31
31
  const jimp = __importStar(require("jimp"));
32
32
  const Pattern_1 = require("../structures/helpers/Pattern");
33
- const TextLayer_1 = require("../structures/components/TextLayer");
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");
34
38
  function generateID(type) {
35
39
  return `${type}-${Math.random().toString(36).substr(2, 9)}`;
36
40
  }
@@ -38,7 +42,7 @@ exports.generateID = generateID;
38
42
  let percentReg = /^(\d+)%$/;
39
43
  let pxReg = /^(\d+)px$/;
40
44
  let canvasReg = /^(vw|vh|vmin|vmax)$/;
41
- let linkReg = /^(link-w|link-h)-([A-Za-z0-9_]+)-(\d+)$/;
45
+ let linkReg = /^(link-w|link-h|link-x|link-y)-([A-Za-z0-9_]+)-(\d+)$/;
42
46
  let hexReg = /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/;
43
47
  let rgbReg = /^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/;
44
48
  let rgbaReg = /^rgba\((\d+),\s*(\d+),\s*(\d+),\s*(0|0?\.\d+|1(\.0)?)\)$/;
@@ -120,47 +124,157 @@ function parseToNormal(v, ctx, canvas, layer = { width: 0, height: 0 }, options
120
124
  if (typeof v === 'number') {
121
125
  return v;
122
126
  }
123
- else if (percentReg.test(v)) {
124
- return (parseFloat(v) / 100) * (options.layer ? (options.vertical ? layer.width : layer.height) : (options.vertical ? canvas.width : canvas.height));
125
- }
126
- else if (pxReg.test(v)) {
127
- return parseFloat(v);
128
- }
129
- else if (canvasReg.test(v)) {
130
- if (v === 'vw') {
131
- return (options.layer ? layer.width : canvas.width);
127
+ else if (typeof v === 'string') {
128
+ if (percentReg.test(v)) {
129
+ return (parseFloat(v) / 100) * (options.layer ? (options.vertical ? layer.width : layer.height) : (options.vertical ? canvas.width : canvas.height));
132
130
  }
133
- else if (v === 'vh') {
134
- return (options.layer ? layer.height : canvas.height);
131
+ else if (pxReg.test(v)) {
132
+ return parseFloat(v);
135
133
  }
136
- else if (v === 'vmin') {
137
- return (options.layer ? Math.max(layer.width, layer.height) : Math.min(canvas.width, canvas.height));
134
+ else if (canvasReg.test(v)) {
135
+ if (v === 'vw') {
136
+ return (options.layer ? layer.width : canvas.width);
137
+ }
138
+ else if (v === 'vh') {
139
+ return (options.layer ? layer.height : canvas.height);
140
+ }
141
+ else if (v === 'vmin') {
142
+ return (options.layer ? Math.max(layer.width, layer.height) : Math.min(canvas.width, canvas.height));
143
+ }
144
+ else if (v === 'vmax') {
145
+ return (options.layer ? Math.max(layer.width, layer.height) : Math.max(canvas.width, canvas.height));
146
+ }
138
147
  }
139
- else if (v === 'vmax') {
140
- return (options.layer ? Math.max(layer.width, layer.height) : Math.max(canvas.width, canvas.height));
148
+ else if (linkReg.test(v)) {
149
+ let match = v.match(linkReg);
150
+ if (!manager)
151
+ return 0;
152
+ let anyLayer = manager.get(match[2]);
153
+ const parcer = parser(ctx, canvas, manager);
154
+ switch (match[1]) {
155
+ case 'link-w':
156
+ if (anyLayer && !(anyLayer instanceof Group_1.Group)) {
157
+ if (anyLayer instanceof LineLayer_1.LineLayer || anyLayer instanceof BezierLayer_1.BezierLayer || anyLayer instanceof QuadraticLayer_1.QuadraticLayer) {
158
+ return anyLayer.getBoundingBox(ctx, canvas, manager).width + (parseInt(match[3]) || 0);
159
+ }
160
+ else {
161
+ return (parcer.parse(anyLayer.props.size.width) || 0) + (parseInt(match[3]) || 0);
162
+ }
163
+ }
164
+ else {
165
+ return 0;
166
+ }
167
+ break;
168
+ case 'link-h':
169
+ if (anyLayer && !(anyLayer instanceof Group_1.Group)) {
170
+ if (anyLayer instanceof LineLayer_1.LineLayer || anyLayer instanceof BezierLayer_1.BezierLayer || anyLayer instanceof QuadraticLayer_1.QuadraticLayer) {
171
+ return anyLayer.getBoundingBox(ctx, canvas, manager).height + (parseInt(match[3]) || 0);
172
+ }
173
+ else {
174
+ 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);
175
+ }
176
+ }
177
+ else {
178
+ return 0;
179
+ }
180
+ break;
181
+ case 'link-x':
182
+ if (anyLayer && !(anyLayer instanceof Group_1.Group)) {
183
+ return (parcer.parse(anyLayer.props.x) || 0) + (parseInt(match[3]) || 0);
184
+ }
185
+ else {
186
+ return 0;
187
+ }
188
+ break;
189
+ case 'link-y':
190
+ if (anyLayer && !(anyLayer instanceof Group_1.Group)) {
191
+ return (parcer.parse(anyLayer.props.y, LazyUtil_1.defaultArg.wh(), LazyUtil_1.defaultArg.vl(true)) || 0) + (parseInt(match[3]) || 0);
192
+ }
193
+ else {
194
+ return 0;
195
+ }
196
+ break;
197
+ }
141
198
  }
142
199
  }
143
- else if (linkReg.test(v)) {
144
- let match = v.match(linkReg);
200
+ else if (v instanceof Link_1.Link) {
145
201
  if (!manager)
146
202
  return 0;
147
- let layer = manager.get(match[2]);
148
- switch (match[1]) {
149
- case 'link-w':
150
- if (layer instanceof TextLayer_1.TextLayer) {
151
- return layer.measureText(ctx, canvas).width + (parseInt(match[3]) || 0);
203
+ let anyLayer = manager.get(v.source);
204
+ const parcer = parser(ctx, canvas, manager);
205
+ switch (v.type) {
206
+ case enum_1.LinkType.Width:
207
+ case 'width':
208
+ if (anyLayer && !(anyLayer instanceof Group_1.Group)) {
209
+ if (anyLayer instanceof LineLayer_1.LineLayer || anyLayer instanceof BezierLayer_1.BezierLayer || anyLayer instanceof QuadraticLayer_1.QuadraticLayer) {
210
+ 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);
211
+ }
212
+ else {
213
+ 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);
214
+ }
215
+ }
216
+ else {
217
+ return 0;
152
218
  }
153
219
  break;
154
- case 'link-h':
155
- if (layer instanceof TextLayer_1.TextLayer) {
156
- return layer.measureText(ctx, canvas).height + (parseInt(match[3]) || 0);
220
+ case enum_1.LinkType.Height:
221
+ case 'height':
222
+ if (anyLayer && !(anyLayer instanceof Group_1.Group)) {
223
+ if (anyLayer instanceof LineLayer_1.LineLayer || anyLayer instanceof BezierLayer_1.BezierLayer || anyLayer instanceof QuadraticLayer_1.QuadraticLayer) {
224
+ 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);
225
+ }
226
+ else {
227
+ 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);
228
+ }
229
+ }
230
+ else {
231
+ return 0;
157
232
  }
158
233
  break;
234
+ case enum_1.LinkType.X:
235
+ case 'x':
236
+ if (anyLayer && !(anyLayer instanceof Group_1.Group)) {
237
+ 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);
238
+ }
239
+ else {
240
+ return 0;
241
+ }
242
+ break;
243
+ case enum_1.LinkType.Y:
244
+ case 'y':
245
+ if (anyLayer && !(anyLayer instanceof Group_1.Group)) {
246
+ 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);
247
+ }
248
+ else {
249
+ return 0;
250
+ }
251
+ break;
252
+ default:
253
+ return 0;
159
254
  }
160
255
  }
256
+ else {
257
+ return 0;
258
+ }
161
259
  return 0;
162
260
  }
163
261
  exports.parseToNormal = parseToNormal;
262
+ function parser(ctx, canvas, manager) {
263
+ return {
264
+ parse(v, layer = LazyUtil_1.defaultArg.wh(), options = LazyUtil_1.defaultArg.vl()) {
265
+ return parseToNormal(v, ctx, canvas, layer, options, manager);
266
+ },
267
+ parseBatch(values) {
268
+ const result = {};
269
+ for (const key in values) {
270
+ const { v, layer, options } = values[key];
271
+ result[key] = parseToNormal(v, ctx, canvas, layer ?? LazyUtil_1.defaultArg.wh(), options ?? LazyUtil_1.defaultArg.vl(), manager);
272
+ }
273
+ return result;
274
+ }
275
+ };
276
+ }
277
+ exports.parser = parser;
164
278
  function drawShadow(ctx, shadow) {
165
279
  if (shadow) {
166
280
  ctx.shadowColor = shadow.color;
@@ -269,6 +383,7 @@ exports.isImageUrlValid = isImageUrlValid;
269
383
  function centring(centring, type, width, height, x, y) {
270
384
  switch (centring) {
271
385
  case enum_1.Centring.Center:
386
+ case "center":
272
387
  switch (type) {
273
388
  case enum_1.LayerType.Image:
274
389
  case enum_1.LayerType.Morph:
@@ -278,6 +393,7 @@ function centring(centring, type, width, height, x, y) {
278
393
  }
279
394
  return { x, y };
280
395
  case enum_1.Centring.CenterBottom:
396
+ case "center-bottom":
281
397
  switch (type) {
282
398
  case enum_1.LayerType.Image:
283
399
  case enum_1.LayerType.Morph:
@@ -286,6 +402,7 @@ function centring(centring, type, width, height, x, y) {
286
402
  }
287
403
  return { x, y };
288
404
  case enum_1.Centring.CenterTop:
405
+ case "center-top":
289
406
  switch (type) {
290
407
  case enum_1.LayerType.Image:
291
408
  case enum_1.LayerType.Morph:
@@ -295,6 +412,7 @@ function centring(centring, type, width, height, x, y) {
295
412
  }
296
413
  return { x, y };
297
414
  case enum_1.Centring.Start:
415
+ case "start":
298
416
  switch (type) {
299
417
  case enum_1.LayerType.Image:
300
418
  case enum_1.LayerType.Morph:
@@ -303,8 +421,10 @@ function centring(centring, type, width, height, x, y) {
303
421
  }
304
422
  return { x, y };
305
423
  case enum_1.Centring.StartBottom:
424
+ case "start-bottom":
306
425
  return { x, y };
307
426
  case enum_1.Centring.StartTop:
427
+ case "start-top":
308
428
  switch (type) {
309
429
  case enum_1.LayerType.Image:
310
430
  case enum_1.LayerType.Morph:
@@ -313,6 +433,7 @@ function centring(centring, type, width, height, x, y) {
313
433
  }
314
434
  return { x, y };
315
435
  case enum_1.Centring.End:
436
+ case "end":
316
437
  switch (type) {
317
438
  case enum_1.LayerType.Image:
318
439
  case enum_1.LayerType.Morph:
@@ -322,6 +443,7 @@ function centring(centring, type, width, height, x, y) {
322
443
  }
323
444
  return { x, y };
324
445
  case enum_1.Centring.EndBottom:
446
+ case "end-bottom":
325
447
  switch (type) {
326
448
  case enum_1.LayerType.Image:
327
449
  case enum_1.LayerType.Morph:
@@ -330,6 +452,7 @@ function centring(centring, type, width, height, x, y) {
330
452
  }
331
453
  return { x, y };
332
454
  case enum_1.Centring.EndTop:
455
+ case "end-top":
333
456
  switch (type) {
334
457
  case enum_1.LayerType.Image:
335
458
  case enum_1.LayerType.Morph:
@@ -339,6 +462,7 @@ function centring(centring, type, width, height, x, y) {
339
462
  }
340
463
  return { x, y };
341
464
  case enum_1.Centring.None:
465
+ case "none":
342
466
  return { x, y };
343
467
  }
344
468
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nmmty/lazycanvas",
3
- "version": "0.3.2",
3
+ "version": "0.3.4",
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
  "doc": "tsx docgen.ts",
13
+ "font": "tsc ./scripts/font-gen.ts && node ./scripts/font-gen.js",
13
14
  "build": "tsc"
14
15
  },
15
16
  "repository": {
@@ -30,12 +31,13 @@
30
31
  },
31
32
  "homepage": "https://github.com/NMMTY/LazyCanvas#readme",
32
33
  "dependencies": {
33
- "@napi-rs/canvas": "^0.1.65",
34
+ "@napi-rs/canvas": "^0.1.68",
34
35
  "jimp": "0.22.12",
35
36
  "path": "^0.12.7",
36
37
  "svgson": "^5.3.1"
37
38
  },
38
39
  "devDependencies": {
40
+ "@hitomihiumi/colors.ts": "^1.0.3",
39
41
  "@hitomihiumi/micro-docgen": "^0.3.0",
40
42
  "@types/jimp": "^0.2.28",
41
43
  "@types/node": "^22.10.2",
package/example.png DELETED
Binary file
File without changes
File without changes