@nmmty/lazycanvas 1.0.0-dev.4 → 1.0.0-dev.7

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 (33) hide show
  1. package/dist/core/Scene.d.ts +4 -6
  2. package/dist/core/Scene.js +6 -22
  3. package/dist/jsx-runtime.js +1 -1
  4. package/dist/structures/LazyCanvas.d.ts +2 -0
  5. package/dist/structures/LazyCanvas.js +2 -0
  6. package/dist/structures/components/BaseLayer.d.ts +40 -28
  7. package/dist/structures/components/BaseLayer.js +45 -12
  8. package/dist/structures/components/BezierLayer.d.ts +10 -2
  9. package/dist/structures/components/BezierLayer.js +3 -3
  10. package/dist/structures/components/Div.d.ts +10 -7
  11. package/dist/structures/components/Div.js +18 -3
  12. package/dist/structures/components/ImageLayer.js +2 -2
  13. package/dist/structures/components/LineLayer.d.ts +10 -2
  14. package/dist/structures/components/LineLayer.js +3 -3
  15. package/dist/structures/components/MorphLayer.d.ts +1 -1
  16. package/dist/structures/components/MorphLayer.js +5 -5
  17. package/dist/structures/components/Path2DLayer.d.ts +4 -4
  18. package/dist/structures/components/Path2DLayer.js +10 -12
  19. package/dist/structures/components/PolygonLayer.d.ts +1 -1
  20. package/dist/structures/components/PolygonLayer.js +5 -5
  21. package/dist/structures/components/QuadraticLayer.d.ts +10 -2
  22. package/dist/structures/components/QuadraticLayer.js +3 -3
  23. package/dist/structures/components/TextLayer.d.ts +1 -1
  24. package/dist/structures/components/TextLayer.js +33 -12
  25. package/dist/structures/helpers/readers/JSONReader.js +13 -13
  26. package/dist/structures/managers/LayoutManager.d.ts +23 -0
  27. package/dist/structures/managers/LayoutManager.js +409 -0
  28. package/dist/structures/managers/RenderManager.d.ts +1 -0
  29. package/dist/structures/managers/RenderManager.js +35 -2
  30. package/dist/types/types.d.ts +25 -0
  31. package/dist/utils/utils.js +11 -7
  32. package/package.json +3 -2
  33. package/biome.json +0 -41
@@ -15,8 +15,11 @@ export declare class Scene {
15
15
  * Create a new Scene
16
16
  * @param width - Canvas width in pixels
17
17
  * @param height - Canvas height in pixels
18
+ * @param opts
18
19
  */
19
- constructor(width: number, height: number);
20
+ constructor(width: number, height: number, opts?: {
21
+ debug?: boolean;
22
+ });
20
23
  /**
21
24
  * Load a layer tree created via JSX
22
25
  * Registers all layers with IDs into the manager
@@ -47,11 +50,6 @@ export declare class Scene {
47
50
  * @param time - Current time in seconds
48
51
  */
49
52
  private updateAllStates;
50
- /**
51
- * Draw a layer or group
52
- * @param layer - Layer to draw
53
- */
54
- private drawLayer;
55
53
  /**
56
54
  * Render multiple frames and return as animation
57
55
  * @param startTime - Start time in seconds
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Scene = void 0;
4
+ const types_1 = require("../types");
4
5
  const ThreadScheduler_1 = require("./ThreadScheduler");
5
6
  const LazyCanvas_1 = require("../structures/LazyCanvas");
6
7
  /**
@@ -11,12 +12,13 @@ class Scene {
11
12
  * Create a new Scene
12
13
  * @param width - Canvas width in pixels
13
14
  * @param height - Canvas height in pixels
15
+ * @param opts
14
16
  */
15
- constructor(width, height) {
17
+ constructor(width, height, opts = {}) {
16
18
  this.allLayers = [];
17
19
  this.scheduler = new ThreadScheduler_1.ThreadScheduler();
18
20
  this.lastFrameTime = 0;
19
- this.lazyCanvas = new LazyCanvas_1.LazyCanvas().create(width, height);
21
+ this.lazyCanvas = new LazyCanvas_1.LazyCanvas(opts).create(width, height);
20
22
  }
21
23
  /**
22
24
  * Load a layer tree created via JSX
@@ -41,8 +43,8 @@ class Scene {
41
43
  this.lazyCanvas.ctx.clearRect(0, 0, this.lazyCanvas.canvas.width, this.lazyCanvas.canvas.height);
42
44
  // 3. PHASE 1: Update all layer states from signals
43
45
  this.updateAllStates(time);
44
- // 4. PHASE 2: Draw the layer tree
45
- await this.drawLayer(this.lazyCanvas.manager.layers.toArray()[0]);
46
+ // 4. PHASE 2: Draw the layer tree using RenderManager
47
+ await this.lazyCanvas.manager.render.render(types_1.Export.CTX);
46
48
  this.lastFrameTime = time;
47
49
  }
48
50
  async renderFirstFrame() {
@@ -81,24 +83,6 @@ class Scene {
81
83
  }
82
84
  }
83
85
  }
84
- /**
85
- * Draw a layer or group
86
- * @param layer - Layer to draw
87
- */
88
- async drawLayer(layer) {
89
- if (!layer.visible)
90
- return;
91
- // Set global composite operation if present
92
- if ("props" in layer && layer.props?.globalComposite) {
93
- this.lazyCanvas.ctx.globalCompositeOperation = layer.props.globalComposite;
94
- }
95
- // Draw the layer
96
- if ("draw" in layer && typeof layer.draw === "function") {
97
- await layer.draw(this.lazyCanvas.ctx, this.lazyCanvas.canvas, this.lazyCanvas.manager.layers, false);
98
- }
99
- // Reset shadow after drawing
100
- this.lazyCanvas.ctx.shadowColor = "transparent";
101
- }
102
86
  /**
103
87
  * Render multiple frames and return as animation
104
88
  * @param startTime - Start time in seconds
@@ -64,7 +64,7 @@ function createElement(type, props, ...children) {
64
64
  */
65
65
  function createGroupInstance(props, children) {
66
66
  const { id, visible, zIndex, ...otherProps } = props;
67
- const group = new components_1.Div({
67
+ const group = new components_1.Div(otherProps, {
68
68
  id,
69
69
  visible,
70
70
  zIndex,
@@ -1,6 +1,7 @@
1
1
  import { AnyExport, JSONLayer } from "../types";
2
2
  import { Canvas, SKRSContext2D, SvgCanvas, SvgExportFlag } from "@napi-rs/canvas";
3
3
  import { LayersManager, RenderManager, FontsManager } from "./managers";
4
+ import { LayoutManager } from "./managers/LayoutManager";
4
5
  import { IDiv } from "./components";
5
6
  /**
6
7
  * Interface representing the LazyCanvas structure.
@@ -84,6 +85,7 @@ export declare class LazyCanvas implements ILazyCanvas {
84
85
  layers: LayersManager;
85
86
  render: RenderManager;
86
87
  fonts: FontsManager;
88
+ layout: LayoutManager;
87
89
  };
88
90
  /**
89
91
  * The options for configuring the LazyCanvas instance.
@@ -4,6 +4,7 @@ exports.LazyCanvas = void 0;
4
4
  const types_1 = require("../types");
5
5
  const canvas_1 = require("@napi-rs/canvas");
6
6
  const managers_1 = require("./managers");
7
+ const LayoutManager_1 = require("./managers/LayoutManager");
7
8
  const LazyUtil_1 = require("../utils/LazyUtil");
8
9
  const utils_1 = require("../utils/utils");
9
10
  /**
@@ -23,6 +24,7 @@ class LazyCanvas {
23
24
  layers: new managers_1.LayersManager({ debug: opts?.debug }),
24
25
  render: new managers_1.RenderManager(this, { debug: opts?.debug }),
25
26
  fonts: new managers_1.FontsManager({ debug: opts?.debug }),
27
+ layout: new LayoutManager_1.LayoutManager({ debug: opts?.debug }),
26
28
  };
27
29
  this.options = {
28
30
  width: 0,
@@ -1,5 +1,6 @@
1
- import { ScaleType, AnyCentring, AnyGlobalCompositeOperation, Transform, AnyFilter, LayerType } from "../../types";
1
+ import { ScaleType, AnyCentring, AnyGlobalCompositeOperation, Transform, AnyFilter, LayerType, ILayoutProps, AnyLayer } from "../../types";
2
2
  import { Signal } from "../../core/Signal";
3
+ import { Div } from "./Div";
3
4
  /**
4
5
  * Interface representing the base structure of a layer.
5
6
  */
@@ -8,6 +9,14 @@ export interface IBaseLayer {
8
9
  * The unique identifier of the layer.
9
10
  */
10
11
  id: string;
12
+ /**
13
+ * The parent of the layer.
14
+ */
15
+ parent?: IBaseLayer | any | null;
16
+ /**
17
+ * The children of the layer.
18
+ */
19
+ children?: Array<AnyLayer | Div>;
11
20
  /**
12
21
  * The type of the layer.
13
22
  */
@@ -29,7 +38,7 @@ export interface IBaseLayer {
29
38
  * Interface representing the properties of a base layer.
30
39
  */
31
40
  export interface IBaseLayerProps {
32
- position: {
41
+ position?: {
33
42
  /**
34
43
  * The x-coordinate of the layer.
35
44
  */
@@ -39,6 +48,10 @@ export interface IBaseLayerProps {
39
48
  */
40
49
  y: ScaleType;
41
50
  };
51
+ /**
52
+ * The layout properties of the layer.
53
+ */
54
+ layout?: ILayoutProps;
42
55
  /**
43
56
  * The centring type of the layer.
44
57
  */
@@ -66,11 +79,11 @@ export interface IBaseLayerProps {
66
79
  /**
67
80
  * The horizontal offset of the shadow.
68
81
  */
69
- offsetX: number;
82
+ offsetX?: number;
70
83
  /**
71
84
  * The vertical offset of the shadow.
72
85
  */
73
- offsetY: number;
86
+ offsetY?: number;
74
87
  };
75
88
  /**
76
89
  * The transformation properties of the layer.
@@ -104,40 +117,39 @@ export interface IBaseLayerMisc {
104
117
  *
105
118
  * @template T - A type extending `IBaseLayerProps` that defines the properties of the layer.
106
119
  */
107
- export declare class BaseLayer<T extends IBaseLayerProps> {
108
- /**
109
- * The unique identifier of the layer.
110
- * @type {string}
111
- */
120
+ export declare class BaseLayer<T extends IBaseLayerProps> implements IBaseLayer {
112
121
  id: string;
113
- /**
114
- * The type of the layer.
115
- * @type {LayerType}
116
- */
117
122
  type: LayerType;
123
+ zIndex: number;
124
+ visible: boolean;
125
+ props: T;
126
+ parent?: IBaseLayer | any | null;
127
+ children: Array<AnyLayer | Div>;
128
+ private _signals;
129
+ constructor(type: LayerType, props: T, misc?: IBaseLayerMisc);
118
130
  /**
119
- * The z-index of the layer, determining its stacking order.
120
- * @type {number}
131
+ * Adds components to the layer.
132
+ * @param {AnyLayer[] | Div[]} [components] - The components to add to the layer.
133
+ * @returns {this} The current instance for chaining.
121
134
  */
122
- zIndex: number;
135
+ add(...components: Array<AnyLayer | Div>): this;
123
136
  /**
124
- * The visibility of the layer.
125
- * @type {boolean}
137
+ * Removes a component from the layer by its ID.
138
+ * @param {string} [id] - The unique identifier of the component to remove.
139
+ * @returns {this} The current instance for chaining.
126
140
  */
127
- visible: boolean;
141
+ remove(id: string): this;
128
142
  /**
129
- * The properties of the layer, defined by the generic type `T`.
130
- * @type {T}
143
+ * Retrieves a component from the layer by its ID.
144
+ * @param {string} [id] - The unique identifier of the component to retrieve.
145
+ * @returns {AnyLayer | Div | undefined} The component with the specified ID, or undefined if not found.
131
146
  */
132
- props: T;
133
- _signals: Map<string, Signal<any>>;
147
+ get(id: string): AnyLayer | Div | undefined;
134
148
  /**
135
- * Constructs a new `BaseLayer` instance.
136
- * @param {LayerType} [type] - The type of the layer.
137
- * @param {T} [props] - The properties of the layer.
138
- * @param {IBaseLayerMisc} [misc] - Miscellaneous options for the layer.
149
+ * Retrieves all components from the layer.
150
+ * @returns {AnyLayer[] | Div[]} An array of all components in the layer.
139
151
  */
140
- constructor(type?: LayerType, props?: T, misc?: IBaseLayerMisc);
152
+ getAll(): Array<AnyLayer | Div>;
141
153
  /**
142
154
  * Recursively extract signals from props and nested objects
143
155
  * @param obj - Object to extract signals from
@@ -13,21 +13,55 @@ const helpers_1 = require("../helpers");
13
13
  * @template T - A type extending `IBaseLayerProps` that defines the properties of the layer.
14
14
  */
15
15
  class BaseLayer {
16
- /**
17
- * Constructs a new `BaseLayer` instance.
18
- * @param {LayerType} [type] - The type of the layer.
19
- * @param {T} [props] - The properties of the layer.
20
- * @param {IBaseLayerMisc} [misc] - Miscellaneous options for the layer.
21
- */
22
16
  constructor(type, props, misc) {
17
+ this.children = [];
23
18
  this._signals = new Map();
24
- this.id = misc?.id || (0, utils_1.generateID)(type ? type : types_1.LayerType.Base);
25
- this.type = type ? type : types_1.LayerType.Base;
19
+ this.id = misc?.id || (0, utils_1.generateID)(type);
20
+ this.type = type;
26
21
  this.zIndex = misc?.zIndex || 1;
27
- this.visible = misc?.visible !== undefined ? misc.visible : true;
28
- this.props = props ? props : {};
22
+ this.visible = misc?.visible || true;
23
+ this.props = props;
24
+ this.parent = null;
25
+ this.children = [];
29
26
  this.extractSignals(this.props, "");
30
- this.props = this.validateProps(this.props);
27
+ }
28
+ /**
29
+ * Adds components to the layer.
30
+ * @param {AnyLayer[] | Div[]} [components] - The components to add to the layer.
31
+ * @returns {this} The current instance for chaining.
32
+ */
33
+ add(...components) {
34
+ let layersArray = components.filter((l) => l !== undefined);
35
+ layersArray = layersArray.sort((a, b) => a.zIndex - b.zIndex);
36
+ for (const layer of layersArray) {
37
+ layer.parent = this;
38
+ }
39
+ this.children.push(...layersArray);
40
+ return this;
41
+ }
42
+ /**
43
+ * Removes a component from the layer by its ID.
44
+ * @param {string} [id] - The unique identifier of the component to remove.
45
+ * @returns {this} The current instance for chaining.
46
+ */
47
+ remove(id) {
48
+ this.children = this.children.filter((c) => c.id !== id);
49
+ return this;
50
+ }
51
+ /**
52
+ * Retrieves a component from the layer by its ID.
53
+ * @param {string} [id] - The unique identifier of the component to retrieve.
54
+ * @returns {AnyLayer | Div | undefined} The component with the specified ID, or undefined if not found.
55
+ */
56
+ get(id) {
57
+ return this.children.find((c) => c.id === id);
58
+ }
59
+ /**
60
+ * Retrieves all components from the layer.
61
+ * @returns {AnyLayer[] | Div[]} An array of all components in the layer.
62
+ */
63
+ getAll() {
64
+ return this.children;
31
65
  }
32
66
  /**
33
67
  * Recursively extract signals from props and nested objects
@@ -235,7 +269,6 @@ class BaseLayer {
235
269
  validateProps(data) {
236
270
  return {
237
271
  ...data,
238
- position: data.position || { x: 0, y: 0 },
239
272
  centring: data.centring || types_1.Centring.Center,
240
273
  filter: data.filter || "",
241
274
  opacity: data.opacity || 1,
@@ -19,7 +19,15 @@ export interface IBezierLayer extends IBaseLayer {
19
19
  * Interface representing the properties of a Bezier layer.
20
20
  */
21
21
  export interface IBezierLayerProps extends IBaseLayerProps {
22
- position: IBaseLayerProps["position"] & {
22
+ position: {
23
+ /**
24
+ * The start x of the Bézier curve.
25
+ */
26
+ x: ScaleType;
27
+ /**
28
+ * The start y of the Bézier curve.
29
+ */
30
+ y: ScaleType;
23
31
  /**
24
32
  * The end x of the Bézier curve.
25
33
  */
@@ -36,7 +44,7 @@ export interface IBezierLayerProps extends IBaseLayerProps {
36
44
  /**
37
45
  * The fill style (color or pattern) of the layer.
38
46
  */
39
- fillStyle: ColorType;
47
+ color: ColorType;
40
48
  /**
41
49
  * The stroke properties of the Bézier curve.
42
50
  */
@@ -55,7 +55,7 @@ class BezierLayer extends BaseLayer_1.BaseLayer {
55
55
  throw new LazyUtil_1.LazyError("The color of the layer must be provided");
56
56
  if (!(0, utils_1.isColor)(color))
57
57
  throw new LazyUtil_1.LazyError("The color of the layer must be a valid color");
58
- this.props.fillStyle = color;
58
+ this.props.color = color;
59
59
  return this;
60
60
  }
61
61
  /**
@@ -131,7 +131,7 @@ class BezierLayer extends BaseLayer_1.BaseLayer {
131
131
  { x: cp2x, y: cp2y },
132
132
  { x: xe, y: ye },
133
133
  ]);
134
- let fillStyle = await (0, utils_1.parseFillStyle)(ctx, this.props.fillStyle, {
134
+ let fillStyle = await (0, utils_1.parseFillStyle)(ctx, this.props.color, {
135
135
  debug,
136
136
  layer: { width, height, x: min.x, y: min.y, align: "none" },
137
137
  manager,
@@ -215,7 +215,7 @@ class BezierLayer extends BaseLayer_1.BaseLayer {
215
215
  endX: data.position?.endX || 0,
216
216
  endY: data.position?.endY || 0,
217
217
  },
218
- fillStyle: data.fillStyle || "#000000",
218
+ color: data.color || "#000000",
219
219
  centring: data.centring || types_1.Centring.None,
220
220
  controlPoints: data.controlPoints || [
221
221
  { x: 0, y: 0 },
@@ -1,10 +1,11 @@
1
1
  import { AnyGlobalCompositeOperation, AnyLayer, LayerType } from "../../types";
2
2
  import { Canvas, SKRSContext2D, SvgCanvas } from "@napi-rs/canvas";
3
3
  import { LayersManager } from "../managers";
4
+ import { BaseLayer, IBaseLayer, IBaseLayerProps } from "./BaseLayer";
4
5
  /**
5
6
  * Interface representing a group of layer's.
6
7
  */
7
- export interface IDiv {
8
+ export interface IDiv extends IBaseLayer {
8
9
  /**
9
10
  * The unique identifier of the group.
10
11
  */
@@ -26,11 +27,11 @@ export interface IDiv {
26
27
  */
27
28
  layers: Array<AnyLayer | Div>;
28
29
  /**
29
- *
30
+ * The properties specific to the Div group.
30
31
  */
31
- props?: IDivProps;
32
+ props: IDivProps;
32
33
  }
33
- export interface IDivProps {
34
+ export interface IDivProps extends IBaseLayerProps {
34
35
  /**
35
36
  * Don't use, this is just for compatibility.
36
37
  */
@@ -40,7 +41,7 @@ export interface IDivProps {
40
41
  /**
41
42
  * Class representing a group of layer's.
42
43
  */
43
- export declare class Div implements IDiv {
44
+ export declare class Div extends BaseLayer<IDivProps> implements IDiv {
44
45
  /**
45
46
  * The unique identifier of the group.
46
47
  */
@@ -61,14 +62,16 @@ export declare class Div implements IDiv {
61
62
  * The layer's contained within the group.
62
63
  */
63
64
  layers: Array<AnyLayer | Div>;
64
- props?: IDivProps;
65
+ props: IDivProps;
66
+ parent?: IBaseLayer | any | null;
65
67
  /**
66
68
  * Constructs a new Group instance.
69
+ * @param {IDivProps} [props] - The properties of the Div.
67
70
  * @param {string} [opts.id] - The unique identifier of the group.
68
71
  * @param {boolean} [opts.visible] - The visibility of the group.
69
72
  * @param {number} [opts.zIndex] - The z-index of the group.
70
73
  */
71
- constructor(opts?: {
74
+ constructor(props?: IDivProps, opts?: {
72
75
  id?: string;
73
76
  visible?: boolean;
74
77
  zIndex?: number;
@@ -4,17 +4,20 @@ exports.Div = void 0;
4
4
  const types_1 = require("../../types");
5
5
  const utils_1 = require("../../utils/utils");
6
6
  const LazyUtil_1 = require("../../utils/LazyUtil");
7
+ const BaseLayer_1 = require("./BaseLayer");
7
8
  /**
8
9
  * Class representing a group of layer's.
9
10
  */
10
- class Div {
11
+ class Div extends BaseLayer_1.BaseLayer {
11
12
  /**
12
13
  * Constructs a new Group instance.
14
+ * @param {IDivProps} [props] - The properties of the Div.
13
15
  * @param {string} [opts.id] - The unique identifier of the group.
14
16
  * @param {boolean} [opts.visible] - The visibility of the group.
15
17
  * @param {number} [opts.zIndex] - The z-index of the group.
16
18
  */
17
- constructor(opts) {
19
+ constructor(props, opts) {
20
+ super(types_1.LayerType.Group, props || {}, opts);
18
21
  /**
19
22
  * The type of the group, which is `Group`.
20
23
  */
@@ -23,7 +26,8 @@ class Div {
23
26
  this.visible = opts?.visible || true;
24
27
  this.zIndex = opts?.zIndex || 1;
25
28
  this.layers = [];
26
- this.props = {};
29
+ this.props = props || {};
30
+ this.parent = null;
27
31
  }
28
32
  /**
29
33
  * Sets the ID of the group.
@@ -60,6 +64,9 @@ class Div {
60
64
  add(...components) {
61
65
  let layersArray = components.filter((l) => l !== undefined);
62
66
  layersArray = layersArray.sort((a, b) => a.zIndex - b.zIndex);
67
+ for (const layer of layersArray) {
68
+ layer.parent = this;
69
+ }
63
70
  this.layers.push(...layersArray);
64
71
  return this;
65
72
  }
@@ -114,6 +121,13 @@ class Div {
114
121
  }
115
122
  }
116
123
  async draw(ctx, canvas, manager, debug) {
124
+ ctx.save();
125
+ // Apply position translation if available (from layout)
126
+ if (this.props.position) {
127
+ const x = typeof this.props.position.x === "number" ? this.props.position.x : 0;
128
+ const y = typeof this.props.position.y === "number" ? this.props.position.y : 0;
129
+ ctx.translate(x, y);
130
+ }
117
131
  for (const subLayer of this.layers) {
118
132
  if (debug)
119
133
  LazyUtil_1.LazyLog.log("info", `Rendering ${subLayer.id}...\nData:`, subLayer.toJSON());
@@ -133,6 +147,7 @@ class Div {
133
147
  }
134
148
  }
135
149
  }
150
+ ctx.restore();
136
151
  }
137
152
  /**
138
153
  * Converts the group to a JSON representation.
@@ -60,8 +60,8 @@ class ImageLayer extends BaseLayer_1.BaseLayer {
60
60
  async draw(ctx, canvas, manager, debug) {
61
61
  const parcer = (0, utils_1.parser)(ctx, canvas, manager);
62
62
  const { xs, ys, w } = parcer.parseBatch({
63
- xs: { v: this.props.position.x },
64
- ys: { v: this.props.position.y, options: LazyUtil_1.defaultArg.vl(true) },
63
+ xs: { v: this.props.position?.x || 0 },
64
+ ys: { v: this.props.position?.y || 0, options: LazyUtil_1.defaultArg.vl(true) },
65
65
  w: { v: this.props.size.width },
66
66
  });
67
67
  const h = parcer.parse(this.props.size.height, LazyUtil_1.defaultArg.wh(w), LazyUtil_1.defaultArg.vl(true));
@@ -19,7 +19,15 @@ export interface ILineLayer extends IBaseLayer {
19
19
  * Interface representing the properties of a Line Layer.
20
20
  */
21
21
  export interface ILineLayerProps extends IBaseLayerProps {
22
- position: IBaseLayerProps["position"] & {
22
+ position: {
23
+ /**
24
+ * The x-coordinate of the start point of the line.
25
+ */
26
+ x: ScaleType;
27
+ /**
28
+ * The y-coordinate of the start point of the line.
29
+ */
30
+ y: ScaleType;
23
31
  /**
24
32
  * The x-coordinate of the end point of the line.
25
33
  */
@@ -36,7 +44,7 @@ export interface ILineLayerProps extends IBaseLayerProps {
36
44
  /**
37
45
  * The fill style (color or pattern) of the layer.
38
46
  */
39
- fillStyle: ColorType;
47
+ color: ColorType;
40
48
  /**
41
49
  * The stroke properties of the line.
42
50
  */
@@ -43,7 +43,7 @@ class LineLayer extends BaseLayer_1.BaseLayer {
43
43
  throw new LazyUtil_1.LazyError("The color of the layer must be provided");
44
44
  if (!(0, utils_1.isColor)(color))
45
45
  throw new LazyUtil_1.LazyError("The color of the layer must be a valid color");
46
- this.props.fillStyle = color;
46
+ this.props.color = color;
47
47
  return this;
48
48
  }
49
49
  /**
@@ -103,7 +103,7 @@ class LineLayer extends BaseLayer_1.BaseLayer {
103
103
  });
104
104
  let width = Math.abs(xe - xs);
105
105
  let height = Math.abs(ye - ys);
106
- let fillStyle = await (0, utils_1.parseFillStyle)(ctx, this.props.fillStyle, {
106
+ let fillStyle = await (0, utils_1.parseFillStyle)(ctx, this.props.color, {
107
107
  debug,
108
108
  layer: { width, height, x: Math.min(xs, xe), y: Math.min(ys, ye), align: "none" },
109
109
  manager,
@@ -153,7 +153,7 @@ class LineLayer extends BaseLayer_1.BaseLayer {
153
153
  endX: data.position?.endX || 0,
154
154
  endY: data.position?.endY || 0,
155
155
  },
156
- fillStyle: data.fillStyle || "#000000",
156
+ color: data.color || "#000000",
157
157
  centring: data.centring || types_1.Centring.None,
158
158
  stroke: {
159
159
  width: data.stroke?.width || 1,
@@ -41,7 +41,7 @@ export interface IMorphLayerProps extends IBaseLayerProps {
41
41
  /**
42
42
  * The fill style (color or pattern) of the layer.
43
43
  */
44
- fillStyle: ColorType;
44
+ color: ColorType;
45
45
  /**
46
46
  * The stroke properties of the morph.
47
47
  */
@@ -47,7 +47,7 @@ class MorphLayer extends BaseLayer_1.BaseLayer {
47
47
  throw new LazyUtil_1.LazyError("The color of the layer must be provided");
48
48
  if (!(0, utils_1.isColor)(color))
49
49
  throw new LazyUtil_1.LazyError("The color of the layer must be a valid color");
50
- this.props.fillStyle = color;
50
+ this.props.color = color;
51
51
  return this;
52
52
  }
53
53
  /**
@@ -81,8 +81,8 @@ class MorphLayer extends BaseLayer_1.BaseLayer {
81
81
  async draw(ctx, canvas, manager, debug) {
82
82
  const parcer = (0, utils_1.parser)(ctx, canvas, manager);
83
83
  const { xs, ys, w } = parcer.parseBatch({
84
- xs: { v: this.props.position.x },
85
- ys: { v: this.props.position.y, options: LazyUtil_1.defaultArg.vl(true) },
84
+ xs: { v: this.props.position?.x || 0 },
85
+ ys: { v: this.props.position?.y || 0, options: LazyUtil_1.defaultArg.vl(true) },
86
86
  w: { v: this.props.size.width },
87
87
  });
88
88
  const h = parcer.parse(this.props.size.height, LazyUtil_1.defaultArg.wh(w), LazyUtil_1.defaultArg.vl(true));
@@ -96,7 +96,7 @@ class MorphLayer extends BaseLayer_1.BaseLayer {
96
96
  }
97
97
  }
98
98
  let { x, y } = (0, utils_1.centring)(this.props.centring, this.type, w, h, xs, ys);
99
- let fillStyle = await (0, utils_1.parseFillStyle)(ctx, this.props.fillStyle, {
99
+ let fillStyle = await (0, utils_1.parseFillStyle)(ctx, this.props.color, {
100
100
  debug,
101
101
  layer: { width: w, height: h, x: xs, y: ys, align: this.props.centring },
102
102
  manager,
@@ -153,7 +153,7 @@ class MorphLayer extends BaseLayer_1.BaseLayer {
153
153
  validateProps(data) {
154
154
  return {
155
155
  ...super.validateProps(data),
156
- fillStyle: data.fillStyle || "#000000",
156
+ color: data.color || "#000000",
157
157
  size: {
158
158
  width: data.size?.width || 100,
159
159
  height: data.size?.height || 100,
@@ -21,13 +21,13 @@ export interface IPath2DLayerProps extends IBaseLayerProps {
21
21
  /**
22
22
  * The fill style (color or pattern) of the layer.
23
23
  */
24
- fillStyle: ColorType;
24
+ color: ColorType;
25
25
  /**
26
26
  * The stroke properties of the Path2D.
27
27
  */
28
- stroke: StrokeOptions;
29
- loadFromSVG: boolean;
30
- clipPath: boolean;
28
+ stroke?: StrokeOptions;
29
+ loadFromSVG?: boolean;
30
+ clipPath?: boolean;
31
31
  }
32
32
  export declare class Path2DLayer extends BaseLayer<IPath2DLayerProps> {
33
33
  id: string;