@knotx/plugins-canvas 0.2.11 → 0.2.13

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/index.cjs CHANGED
@@ -75,15 +75,45 @@ var __privateIn = (member, obj) => Object(obj) !== obj ? __typeError('Cannot use
75
75
  var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
76
76
  var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
77
77
  var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
78
- var _init_dec, _render_dec, _scrollNodeIntoView_dec, _removeListener_dec, _addListener_dec, _container_dec, _getNode_dec, _transform_dec, _ref_dec, _a, _init;
78
+ var _init_dec, _render_dec, _setTransform_dec, _zoomOut_dec, _zoomIn_dec, _scrollNodeIntoView_dec, _removeListener_dec, _addListener_dec, _container_dec, _getNode_dec, _transform_dec, _ref_dec, _a, _init;
79
79
  class Canvas extends (_a = core.BasePlugin, _ref_dec = [decorators.register("ref")], _transform_dec = [decorators.register("transform")], _getNode_dec = [decorators.inject.getNode()], _container_dec = [decorators.inject.container()], _addListener_dec = [decorators.register("addListener")], _removeListener_dec = [decorators.register("removeListener")], _scrollNodeIntoView_dec = [decorators.tool("Scroll node into viewport center", {
80
80
  type: "object",
81
81
  properties: {
82
82
  nodeId: { type: "string" },
83
83
  scale: { type: "number", description: "The scale of the canvas, default is current scale" },
84
+ block: { type: "string", enum: ["center", "end", "nearest", "start"], description: "Vertical alignment" },
85
+ inline: { type: "string", enum: ["center", "end", "nearest", "start"], description: "Horizontal alignment" },
86
+ offset: {
87
+ type: ["number", "object"],
88
+ description: "Offset from the viewport edge, can be a number or { x: number, y: number }",
89
+ properties: {
90
+ x: { type: "number" },
91
+ y: { type: "number" }
92
+ }
93
+ },
84
94
  animationTime: { type: "number", description: "The animation time(ms) of scroll behavior" }
85
95
  },
86
96
  required: ["nodeId"]
97
+ })], _zoomIn_dec = [decorators.tool("Zoom in", {
98
+ type: "object",
99
+ properties: {
100
+ step: { type: "number" },
101
+ animationTime: { type: "number" }
102
+ }
103
+ })], _zoomOut_dec = [decorators.tool("Zoom out", {
104
+ type: "object",
105
+ properties: {
106
+ step: { type: "number" },
107
+ animationTime: { type: "number" }
108
+ }
109
+ })], _setTransform_dec = [decorators.tool("Set transform", {
110
+ type: "object",
111
+ properties: {
112
+ positionX: { type: "number" },
113
+ positionY: { type: "number" },
114
+ scale: { type: "number" },
115
+ animationTime: { type: "number" }
116
+ }
87
117
  })], _render_dec = [decorators.layer(core.Layer.Canvas)], _init_dec = [decorators.OnInit], _a) {
88
118
  constructor() {
89
119
  super(...arguments);
@@ -105,17 +135,81 @@ class Canvas extends (_a = core.BasePlugin, _ref_dec = [decorators.register("ref
105
135
  this.listeners[type].delete(listener);
106
136
  })), __runInitializers(_init, 31, this);
107
137
  }
108
- scrollNodeIntoView({ nodeId, scale = this.transform.scale, animationTime }) {
109
- var _a2, _b, _c, _d, _e;
138
+ scrollNodeIntoView({ nodeId, scale = this.transform.scale, block = "nearest", inline = "nearest", offset = 0, animationTime }) {
139
+ var _a2, _b, _c, _d, _e, _f, _g;
110
140
  const node = nodeId && this.getNode(nodeId);
111
141
  if (!node) {
112
142
  return;
113
143
  }
114
- const nodeCenterX = node.position.x + ((_b = (_a2 = node.measured) == null ? void 0 : _a2.width) != null ? _b : 0) / 2;
115
- const nodeCenterY = node.position.y + ((_d = (_c = node.measured) == null ? void 0 : _c.height) != null ? _d : 0) / 2;
116
- const positionX = nodeCenterX * scale - this.container.width / 2;
117
- const positionY = nodeCenterY * scale - this.container.height / 2;
118
- (_e = this.ref) == null ? void 0 : _e.setTransform(-positionX, -positionY, scale, animationTime);
144
+ const nodeX = node.position.x;
145
+ const nodeY = node.position.y;
146
+ const nodeWidth = (_b = (_a2 = node.measured) == null ? void 0 : _a2.width) != null ? _b : 0;
147
+ const nodeHeight = (_d = (_c = node.measured) == null ? void 0 : _c.height) != null ? _d : 0;
148
+ const viewportWidth = this.container.width;
149
+ const viewportHeight = this.container.height;
150
+ let positionX = -this.transform.positionX;
151
+ let positionY = -this.transform.positionY;
152
+ const offsetX = typeof offset === "number" ? offset : (_e = offset.x) != null ? _e : 0;
153
+ const offsetY = typeof offset === "number" ? offset : (_f = offset.y) != null ? _f : 0;
154
+ switch (inline) {
155
+ case "center":
156
+ positionX = (nodeX + nodeWidth / 2) * scale - viewportWidth / 2;
157
+ break;
158
+ case "start":
159
+ positionX = nodeX * scale - offsetX;
160
+ break;
161
+ case "end":
162
+ positionX = (nodeX + nodeWidth) * scale - viewportWidth + offsetX;
163
+ break;
164
+ case "nearest": {
165
+ const nodeRight = (nodeX + nodeWidth) * scale;
166
+ const nodeLeft = nodeX * scale;
167
+ const currentLeft = -this.transform.positionX;
168
+ const currentRight = currentLeft + viewportWidth;
169
+ if (nodeRight > currentRight) {
170
+ positionX = nodeRight - viewportWidth + offsetX;
171
+ } else if (nodeLeft < currentLeft) {
172
+ positionX = nodeLeft - offsetX;
173
+ }
174
+ break;
175
+ }
176
+ }
177
+ switch (block) {
178
+ case "center":
179
+ positionY = (nodeY + nodeHeight / 2) * scale - viewportHeight / 2;
180
+ break;
181
+ case "start":
182
+ positionY = nodeY * scale - offsetY;
183
+ break;
184
+ case "end":
185
+ positionY = (nodeY + nodeHeight) * scale - viewportHeight + offsetY;
186
+ break;
187
+ case "nearest": {
188
+ const nodeBottom = (nodeY + nodeHeight) * scale;
189
+ const nodeTop = nodeY * scale;
190
+ const currentTop = -this.transform.positionY;
191
+ const currentBottom = currentTop + viewportHeight;
192
+ if (nodeBottom > currentBottom) {
193
+ positionY = nodeBottom - viewportHeight + offsetY;
194
+ } else if (nodeTop < currentTop) {
195
+ positionY = nodeTop - offsetY;
196
+ }
197
+ break;
198
+ }
199
+ }
200
+ (_g = this.ref) == null ? void 0 : _g.setTransform(-positionX, -positionY, scale, animationTime);
201
+ }
202
+ zoomIn({ step = 0.1, animationTime }) {
203
+ var _a2;
204
+ (_a2 = this.ref) == null ? void 0 : _a2.zoomIn(step, animationTime);
205
+ }
206
+ zoomOut({ step = 0.1, animationTime }) {
207
+ var _a2;
208
+ (_a2 = this.ref) == null ? void 0 : _a2.zoomOut(step, animationTime);
209
+ }
210
+ setTransform({ positionX, positionY, scale, animationTime }) {
211
+ var _a2;
212
+ (_a2 = this.ref) == null ? void 0 : _a2.setTransform(positionX != null ? positionX : this.transform.positionX, positionY != null ? positionY : this.transform.positionY, scale != null ? scale : this.transform.scale, animationTime);
119
213
  }
120
214
  render({ children } = { children: null }) {
121
215
  const [transform, setTransform] = react.useState(null);
@@ -158,8 +252,8 @@ class Canvas extends (_a = core.BasePlugin, _ref_dec = [decorators.register("ref
158
252
  });
159
253
  let frame;
160
254
  return transform == null ? void 0 : transform.instance.onChange((ref) => {
161
- cancelIdleCallback(frame);
162
- frame = requestIdleCallback(() => {
255
+ cancelAnimationFrame(frame);
256
+ frame = requestAnimationFrame(() => {
163
257
  this.transform = __spreadValues({}, ref.state);
164
258
  });
165
259
  });
@@ -236,6 +330,9 @@ class Canvas extends (_a = core.BasePlugin, _ref_dec = [decorators.register("ref
236
330
  }
237
331
  _init = __decoratorStart(_a);
238
332
  __decorateElement(_init, 1, "scrollNodeIntoView", _scrollNodeIntoView_dec, Canvas);
333
+ __decorateElement(_init, 1, "zoomIn", _zoomIn_dec, Canvas);
334
+ __decorateElement(_init, 1, "zoomOut", _zoomOut_dec, Canvas);
335
+ __decorateElement(_init, 1, "setTransform", _setTransform_dec, Canvas);
239
336
  __decorateElement(_init, 1, "render", _render_dec, Canvas);
240
337
  __decorateElement(_init, 1, "init", _init_dec, Canvas);
241
338
  __decorateElement(_init, 5, "ref", _ref_dec, Canvas);
package/dist/index.d.cts CHANGED
@@ -20,6 +20,26 @@ declare module '@knotx/core' {
20
20
  scrollNodeIntoView: (params: {
21
21
  nodeId: string;
22
22
  scale?: number;
23
+ block?: 'center' | 'end' | 'nearest' | 'start';
24
+ inline?: 'center' | 'end' | 'nearest' | 'start';
25
+ offset?: number | {
26
+ x: number;
27
+ y: number;
28
+ };
29
+ animationTime?: number;
30
+ }) => void;
31
+ zoomIn: (params: {
32
+ step?: number;
33
+ animationTime?: number;
34
+ }) => void;
35
+ zoomOut: (params: {
36
+ step?: number;
37
+ animationTime?: number;
38
+ }) => void;
39
+ setTransform: (params: {
40
+ positionX: number;
41
+ positionY: number;
42
+ scale: number;
23
43
  animationTime?: number;
24
44
  }) => void;
25
45
  };
@@ -37,7 +57,7 @@ declare class Canvas extends BasePlugin<'canvas', CanvasConfig> {
37
57
  private listeners;
38
58
  addListener: (event: CanvasEventType, listener: CanvasEventListener) => void;
39
59
  removeListener: (event: CanvasEventType, listener: CanvasEventListener) => void;
40
- scrollNodeIntoView({ nodeId, scale, animationTime }: InferParamsFromSchema<{
60
+ scrollNodeIntoView({ nodeId, scale, block, inline, offset, animationTime }: InferParamsFromSchema<{
41
61
  type: 'object';
42
62
  properties: {
43
63
  nodeId: {
@@ -46,12 +66,70 @@ declare class Canvas extends BasePlugin<'canvas', CanvasConfig> {
46
66
  scale: {
47
67
  type: 'number';
48
68
  };
69
+ block: {
70
+ type: 'string';
71
+ enum: ['center', 'end', 'nearest', 'start'];
72
+ };
73
+ inline: {
74
+ type: 'string';
75
+ enum: ['center', 'end', 'nearest', 'start'];
76
+ };
77
+ offset: {
78
+ type: ['number', 'object'];
79
+ properties: {
80
+ x: {
81
+ type: 'number';
82
+ };
83
+ y: {
84
+ type: 'number';
85
+ };
86
+ };
87
+ };
49
88
  animationTime: {
50
89
  type: 'number';
51
90
  };
52
91
  };
53
92
  required: ['nodeId'];
54
93
  }>): void;
94
+ zoomIn({ step, animationTime }: InferParamsFromSchema<{
95
+ type: 'object';
96
+ properties: {
97
+ step: {
98
+ type: 'number';
99
+ };
100
+ animationTime: {
101
+ type: 'number';
102
+ };
103
+ };
104
+ }>): void;
105
+ zoomOut({ step, animationTime }: InferParamsFromSchema<{
106
+ type: 'object';
107
+ properties: {
108
+ step: {
109
+ type: 'number';
110
+ };
111
+ animationTime: {
112
+ type: 'number';
113
+ };
114
+ };
115
+ }>): void;
116
+ setTransform({ positionX, positionY, scale, animationTime }: InferParamsFromSchema<{
117
+ type: 'object';
118
+ properties: {
119
+ positionX: {
120
+ type: 'number';
121
+ };
122
+ positionY: {
123
+ type: 'number';
124
+ };
125
+ scale: {
126
+ type: 'number';
127
+ };
128
+ animationTime: {
129
+ type: 'number';
130
+ };
131
+ };
132
+ }>): void;
55
133
  render({ children }?: {
56
134
  children: ReactNode;
57
135
  }): JSX.Element;
package/dist/index.d.mts CHANGED
@@ -20,6 +20,26 @@ declare module '@knotx/core' {
20
20
  scrollNodeIntoView: (params: {
21
21
  nodeId: string;
22
22
  scale?: number;
23
+ block?: 'center' | 'end' | 'nearest' | 'start';
24
+ inline?: 'center' | 'end' | 'nearest' | 'start';
25
+ offset?: number | {
26
+ x: number;
27
+ y: number;
28
+ };
29
+ animationTime?: number;
30
+ }) => void;
31
+ zoomIn: (params: {
32
+ step?: number;
33
+ animationTime?: number;
34
+ }) => void;
35
+ zoomOut: (params: {
36
+ step?: number;
37
+ animationTime?: number;
38
+ }) => void;
39
+ setTransform: (params: {
40
+ positionX: number;
41
+ positionY: number;
42
+ scale: number;
23
43
  animationTime?: number;
24
44
  }) => void;
25
45
  };
@@ -37,7 +57,7 @@ declare class Canvas extends BasePlugin<'canvas', CanvasConfig> {
37
57
  private listeners;
38
58
  addListener: (event: CanvasEventType, listener: CanvasEventListener) => void;
39
59
  removeListener: (event: CanvasEventType, listener: CanvasEventListener) => void;
40
- scrollNodeIntoView({ nodeId, scale, animationTime }: InferParamsFromSchema<{
60
+ scrollNodeIntoView({ nodeId, scale, block, inline, offset, animationTime }: InferParamsFromSchema<{
41
61
  type: 'object';
42
62
  properties: {
43
63
  nodeId: {
@@ -46,12 +66,70 @@ declare class Canvas extends BasePlugin<'canvas', CanvasConfig> {
46
66
  scale: {
47
67
  type: 'number';
48
68
  };
69
+ block: {
70
+ type: 'string';
71
+ enum: ['center', 'end', 'nearest', 'start'];
72
+ };
73
+ inline: {
74
+ type: 'string';
75
+ enum: ['center', 'end', 'nearest', 'start'];
76
+ };
77
+ offset: {
78
+ type: ['number', 'object'];
79
+ properties: {
80
+ x: {
81
+ type: 'number';
82
+ };
83
+ y: {
84
+ type: 'number';
85
+ };
86
+ };
87
+ };
49
88
  animationTime: {
50
89
  type: 'number';
51
90
  };
52
91
  };
53
92
  required: ['nodeId'];
54
93
  }>): void;
94
+ zoomIn({ step, animationTime }: InferParamsFromSchema<{
95
+ type: 'object';
96
+ properties: {
97
+ step: {
98
+ type: 'number';
99
+ };
100
+ animationTime: {
101
+ type: 'number';
102
+ };
103
+ };
104
+ }>): void;
105
+ zoomOut({ step, animationTime }: InferParamsFromSchema<{
106
+ type: 'object';
107
+ properties: {
108
+ step: {
109
+ type: 'number';
110
+ };
111
+ animationTime: {
112
+ type: 'number';
113
+ };
114
+ };
115
+ }>): void;
116
+ setTransform({ positionX, positionY, scale, animationTime }: InferParamsFromSchema<{
117
+ type: 'object';
118
+ properties: {
119
+ positionX: {
120
+ type: 'number';
121
+ };
122
+ positionY: {
123
+ type: 'number';
124
+ };
125
+ scale: {
126
+ type: 'number';
127
+ };
128
+ animationTime: {
129
+ type: 'number';
130
+ };
131
+ };
132
+ }>): void;
55
133
  render({ children }?: {
56
134
  children: ReactNode;
57
135
  }): JSX.Element;
package/dist/index.d.ts CHANGED
@@ -20,6 +20,26 @@ declare module '@knotx/core' {
20
20
  scrollNodeIntoView: (params: {
21
21
  nodeId: string;
22
22
  scale?: number;
23
+ block?: 'center' | 'end' | 'nearest' | 'start';
24
+ inline?: 'center' | 'end' | 'nearest' | 'start';
25
+ offset?: number | {
26
+ x: number;
27
+ y: number;
28
+ };
29
+ animationTime?: number;
30
+ }) => void;
31
+ zoomIn: (params: {
32
+ step?: number;
33
+ animationTime?: number;
34
+ }) => void;
35
+ zoomOut: (params: {
36
+ step?: number;
37
+ animationTime?: number;
38
+ }) => void;
39
+ setTransform: (params: {
40
+ positionX: number;
41
+ positionY: number;
42
+ scale: number;
23
43
  animationTime?: number;
24
44
  }) => void;
25
45
  };
@@ -37,7 +57,7 @@ declare class Canvas extends BasePlugin<'canvas', CanvasConfig> {
37
57
  private listeners;
38
58
  addListener: (event: CanvasEventType, listener: CanvasEventListener) => void;
39
59
  removeListener: (event: CanvasEventType, listener: CanvasEventListener) => void;
40
- scrollNodeIntoView({ nodeId, scale, animationTime }: InferParamsFromSchema<{
60
+ scrollNodeIntoView({ nodeId, scale, block, inline, offset, animationTime }: InferParamsFromSchema<{
41
61
  type: 'object';
42
62
  properties: {
43
63
  nodeId: {
@@ -46,12 +66,70 @@ declare class Canvas extends BasePlugin<'canvas', CanvasConfig> {
46
66
  scale: {
47
67
  type: 'number';
48
68
  };
69
+ block: {
70
+ type: 'string';
71
+ enum: ['center', 'end', 'nearest', 'start'];
72
+ };
73
+ inline: {
74
+ type: 'string';
75
+ enum: ['center', 'end', 'nearest', 'start'];
76
+ };
77
+ offset: {
78
+ type: ['number', 'object'];
79
+ properties: {
80
+ x: {
81
+ type: 'number';
82
+ };
83
+ y: {
84
+ type: 'number';
85
+ };
86
+ };
87
+ };
49
88
  animationTime: {
50
89
  type: 'number';
51
90
  };
52
91
  };
53
92
  required: ['nodeId'];
54
93
  }>): void;
94
+ zoomIn({ step, animationTime }: InferParamsFromSchema<{
95
+ type: 'object';
96
+ properties: {
97
+ step: {
98
+ type: 'number';
99
+ };
100
+ animationTime: {
101
+ type: 'number';
102
+ };
103
+ };
104
+ }>): void;
105
+ zoomOut({ step, animationTime }: InferParamsFromSchema<{
106
+ type: 'object';
107
+ properties: {
108
+ step: {
109
+ type: 'number';
110
+ };
111
+ animationTime: {
112
+ type: 'number';
113
+ };
114
+ };
115
+ }>): void;
116
+ setTransform({ positionX, positionY, scale, animationTime }: InferParamsFromSchema<{
117
+ type: 'object';
118
+ properties: {
119
+ positionX: {
120
+ type: 'number';
121
+ };
122
+ positionY: {
123
+ type: 'number';
124
+ };
125
+ scale: {
126
+ type: 'number';
127
+ };
128
+ animationTime: {
129
+ type: 'number';
130
+ };
131
+ };
132
+ }>): void;
55
133
  render({ children }?: {
56
134
  children: ReactNode;
57
135
  }): JSX.Element;
package/dist/index.js CHANGED
@@ -73,15 +73,45 @@ var __privateIn = (member, obj) => Object(obj) !== obj ? __typeError('Cannot use
73
73
  var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
74
74
  var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
75
75
  var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
76
- var _init_dec, _render_dec, _scrollNodeIntoView_dec, _removeListener_dec, _addListener_dec, _container_dec, _getNode_dec, _transform_dec, _ref_dec, _a, _init;
76
+ var _init_dec, _render_dec, _setTransform_dec, _zoomOut_dec, _zoomIn_dec, _scrollNodeIntoView_dec, _removeListener_dec, _addListener_dec, _container_dec, _getNode_dec, _transform_dec, _ref_dec, _a, _init;
77
77
  class Canvas extends (_a = BasePlugin, _ref_dec = [register("ref")], _transform_dec = [register("transform")], _getNode_dec = [inject.getNode()], _container_dec = [inject.container()], _addListener_dec = [register("addListener")], _removeListener_dec = [register("removeListener")], _scrollNodeIntoView_dec = [tool("Scroll node into viewport center", {
78
78
  type: "object",
79
79
  properties: {
80
80
  nodeId: { type: "string" },
81
81
  scale: { type: "number", description: "The scale of the canvas, default is current scale" },
82
+ block: { type: "string", enum: ["center", "end", "nearest", "start"], description: "Vertical alignment" },
83
+ inline: { type: "string", enum: ["center", "end", "nearest", "start"], description: "Horizontal alignment" },
84
+ offset: {
85
+ type: ["number", "object"],
86
+ description: "Offset from the viewport edge, can be a number or { x: number, y: number }",
87
+ properties: {
88
+ x: { type: "number" },
89
+ y: { type: "number" }
90
+ }
91
+ },
82
92
  animationTime: { type: "number", description: "The animation time(ms) of scroll behavior" }
83
93
  },
84
94
  required: ["nodeId"]
95
+ })], _zoomIn_dec = [tool("Zoom in", {
96
+ type: "object",
97
+ properties: {
98
+ step: { type: "number" },
99
+ animationTime: { type: "number" }
100
+ }
101
+ })], _zoomOut_dec = [tool("Zoom out", {
102
+ type: "object",
103
+ properties: {
104
+ step: { type: "number" },
105
+ animationTime: { type: "number" }
106
+ }
107
+ })], _setTransform_dec = [tool("Set transform", {
108
+ type: "object",
109
+ properties: {
110
+ positionX: { type: "number" },
111
+ positionY: { type: "number" },
112
+ scale: { type: "number" },
113
+ animationTime: { type: "number" }
114
+ }
85
115
  })], _render_dec = [layer(Layer.Canvas)], _init_dec = [OnInit], _a) {
86
116
  constructor() {
87
117
  super(...arguments);
@@ -103,17 +133,81 @@ class Canvas extends (_a = BasePlugin, _ref_dec = [register("ref")], _transform_
103
133
  this.listeners[type].delete(listener);
104
134
  })), __runInitializers(_init, 31, this);
105
135
  }
106
- scrollNodeIntoView({ nodeId, scale = this.transform.scale, animationTime }) {
107
- var _a2, _b, _c, _d, _e;
136
+ scrollNodeIntoView({ nodeId, scale = this.transform.scale, block = "nearest", inline = "nearest", offset = 0, animationTime }) {
137
+ var _a2, _b, _c, _d, _e, _f, _g;
108
138
  const node = nodeId && this.getNode(nodeId);
109
139
  if (!node) {
110
140
  return;
111
141
  }
112
- const nodeCenterX = node.position.x + ((_b = (_a2 = node.measured) == null ? void 0 : _a2.width) != null ? _b : 0) / 2;
113
- const nodeCenterY = node.position.y + ((_d = (_c = node.measured) == null ? void 0 : _c.height) != null ? _d : 0) / 2;
114
- const positionX = nodeCenterX * scale - this.container.width / 2;
115
- const positionY = nodeCenterY * scale - this.container.height / 2;
116
- (_e = this.ref) == null ? void 0 : _e.setTransform(-positionX, -positionY, scale, animationTime);
142
+ const nodeX = node.position.x;
143
+ const nodeY = node.position.y;
144
+ const nodeWidth = (_b = (_a2 = node.measured) == null ? void 0 : _a2.width) != null ? _b : 0;
145
+ const nodeHeight = (_d = (_c = node.measured) == null ? void 0 : _c.height) != null ? _d : 0;
146
+ const viewportWidth = this.container.width;
147
+ const viewportHeight = this.container.height;
148
+ let positionX = -this.transform.positionX;
149
+ let positionY = -this.transform.positionY;
150
+ const offsetX = typeof offset === "number" ? offset : (_e = offset.x) != null ? _e : 0;
151
+ const offsetY = typeof offset === "number" ? offset : (_f = offset.y) != null ? _f : 0;
152
+ switch (inline) {
153
+ case "center":
154
+ positionX = (nodeX + nodeWidth / 2) * scale - viewportWidth / 2;
155
+ break;
156
+ case "start":
157
+ positionX = nodeX * scale - offsetX;
158
+ break;
159
+ case "end":
160
+ positionX = (nodeX + nodeWidth) * scale - viewportWidth + offsetX;
161
+ break;
162
+ case "nearest": {
163
+ const nodeRight = (nodeX + nodeWidth) * scale;
164
+ const nodeLeft = nodeX * scale;
165
+ const currentLeft = -this.transform.positionX;
166
+ const currentRight = currentLeft + viewportWidth;
167
+ if (nodeRight > currentRight) {
168
+ positionX = nodeRight - viewportWidth + offsetX;
169
+ } else if (nodeLeft < currentLeft) {
170
+ positionX = nodeLeft - offsetX;
171
+ }
172
+ break;
173
+ }
174
+ }
175
+ switch (block) {
176
+ case "center":
177
+ positionY = (nodeY + nodeHeight / 2) * scale - viewportHeight / 2;
178
+ break;
179
+ case "start":
180
+ positionY = nodeY * scale - offsetY;
181
+ break;
182
+ case "end":
183
+ positionY = (nodeY + nodeHeight) * scale - viewportHeight + offsetY;
184
+ break;
185
+ case "nearest": {
186
+ const nodeBottom = (nodeY + nodeHeight) * scale;
187
+ const nodeTop = nodeY * scale;
188
+ const currentTop = -this.transform.positionY;
189
+ const currentBottom = currentTop + viewportHeight;
190
+ if (nodeBottom > currentBottom) {
191
+ positionY = nodeBottom - viewportHeight + offsetY;
192
+ } else if (nodeTop < currentTop) {
193
+ positionY = nodeTop - offsetY;
194
+ }
195
+ break;
196
+ }
197
+ }
198
+ (_g = this.ref) == null ? void 0 : _g.setTransform(-positionX, -positionY, scale, animationTime);
199
+ }
200
+ zoomIn({ step = 0.1, animationTime }) {
201
+ var _a2;
202
+ (_a2 = this.ref) == null ? void 0 : _a2.zoomIn(step, animationTime);
203
+ }
204
+ zoomOut({ step = 0.1, animationTime }) {
205
+ var _a2;
206
+ (_a2 = this.ref) == null ? void 0 : _a2.zoomOut(step, animationTime);
207
+ }
208
+ setTransform({ positionX, positionY, scale, animationTime }) {
209
+ var _a2;
210
+ (_a2 = this.ref) == null ? void 0 : _a2.setTransform(positionX != null ? positionX : this.transform.positionX, positionY != null ? positionY : this.transform.positionY, scale != null ? scale : this.transform.scale, animationTime);
117
211
  }
118
212
  render({ children } = { children: null }) {
119
213
  const [transform, setTransform] = useState(null);
@@ -156,8 +250,8 @@ class Canvas extends (_a = BasePlugin, _ref_dec = [register("ref")], _transform_
156
250
  });
157
251
  let frame;
158
252
  return transform == null ? void 0 : transform.instance.onChange((ref) => {
159
- cancelIdleCallback(frame);
160
- frame = requestIdleCallback(() => {
253
+ cancelAnimationFrame(frame);
254
+ frame = requestAnimationFrame(() => {
161
255
  this.transform = __spreadValues({}, ref.state);
162
256
  });
163
257
  });
@@ -234,6 +328,9 @@ class Canvas extends (_a = BasePlugin, _ref_dec = [register("ref")], _transform_
234
328
  }
235
329
  _init = __decoratorStart(_a);
236
330
  __decorateElement(_init, 1, "scrollNodeIntoView", _scrollNodeIntoView_dec, Canvas);
331
+ __decorateElement(_init, 1, "zoomIn", _zoomIn_dec, Canvas);
332
+ __decorateElement(_init, 1, "zoomOut", _zoomOut_dec, Canvas);
333
+ __decorateElement(_init, 1, "setTransform", _setTransform_dec, Canvas);
237
334
  __decorateElement(_init, 1, "render", _render_dec, Canvas);
238
335
  __decorateElement(_init, 1, "init", _init_dec, Canvas);
239
336
  __decorateElement(_init, 5, "ref", _ref_dec, Canvas);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@knotx/plugins-canvas",
3
- "version": "0.2.11",
3
+ "version": "0.2.13",
4
4
  "description": "Canvas Plugin for Knotx",
5
5
  "author": "boenfu",
6
6
  "license": "MIT",
@@ -29,23 +29,23 @@
29
29
  ],
30
30
  "peerDependencies": {
31
31
  "react": ">=17.0.0",
32
- "@knotx/jsx": "0.2.10"
32
+ "@knotx/jsx": "0.2.11"
33
33
  },
34
34
  "dependencies": {
35
35
  "lodash-es": "^4.17.21",
36
36
  "react-zoom-pan-pinch": "^3.7.0",
37
37
  "rxjs": "^7.8.1",
38
- "@knotx/core": "0.2.10",
39
- "@knotx/decorators": "0.2.11"
38
+ "@knotx/core": "0.2.12",
39
+ "@knotx/decorators": "0.2.13"
40
40
  },
41
41
  "devDependencies": {
42
42
  "@types/lodash-es": "^4.17.12",
43
43
  "@types/react": "^17.0.0",
44
44
  "react": "^17.0.0",
45
- "@knotx/build-config": "0.2.10",
46
- "@knotx/eslint-config": "0.2.10",
47
- "@knotx/jsx": "0.2.10",
48
- "@knotx/typescript-config": "0.2.10"
45
+ "@knotx/build-config": "0.2.11",
46
+ "@knotx/eslint-config": "0.2.11",
47
+ "@knotx/jsx": "0.2.11",
48
+ "@knotx/typescript-config": "0.2.11"
49
49
  },
50
50
  "scripts": {
51
51
  "build": "unbuild",