@knotx/plugins-drag 0.3.4 → 0.3.6

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
@@ -78,7 +78,7 @@ var __privateIn = (member, obj) => Object(obj) !== obj ? __typeError('Cannot use
78
78
  var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
79
79
  var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
80
80
  var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
81
- var _destroy_dec, _init_dec, _registerOptionsTransformer_dec, _options_dec, _canvasScale_dec, _interaction_dec, _dispatchNodeOperation_dec, _getNode_dec, _a, _init;
81
+ var _destroy_dec, _init_dec, _registerOptionsTransformer_dec, _options_dec, _edgeScroll_dec, _canvasTransform_dec, _interaction_dec, _dispatchNodeOperation_dec, _getNode_dec, _a, _init;
82
82
  const DEFAULT_OPTIONS = {
83
83
  inertia: {
84
84
  enabled: true
@@ -90,7 +90,7 @@ const DEFAULT_OPTIONS = {
90
90
  })
91
91
  ]
92
92
  };
93
- class Drag extends (_a = core.BasePlugin, _getNode_dec = [decorators.inject.getNode()], _dispatchNodeOperation_dec = [decorators.inject.dispatchNodeOperation()], _interaction_dec = [decorators.inject.interaction()], _canvasScale_dec = [decorators.inject.canvas.transform((state) => state.scale)], _options_dec = [decorators.register("options")], _registerOptionsTransformer_dec = [decorators.register("registerOptionsTransformer")], _init_dec = [decorators.OnInit], _destroy_dec = [decorators.OnDestroy], _a) {
93
+ class Drag extends (_a = core.BasePlugin, _getNode_dec = [decorators.inject.getNode()], _dispatchNodeOperation_dec = [decorators.inject.dispatchNodeOperation()], _interaction_dec = [decorators.inject.interaction()], _canvasTransform_dec = [decorators.inject.canvas.transform()], _edgeScroll_dec = [decorators.inject.canvas.edgeScroll()], _options_dec = [decorators.register("options")], _registerOptionsTransformer_dec = [decorators.register("registerOptionsTransformer")], _init_dec = [decorators.OnInit], _destroy_dec = [decorators.OnDestroy], _a) {
94
94
  constructor() {
95
95
  super(...arguments);
96
96
  __runInitializers(_init, 5, this);
@@ -98,12 +98,16 @@ class Drag extends (_a = core.BasePlugin, _getNode_dec = [decorators.inject.getN
98
98
  __publicField(this, "getNode", __runInitializers(_init, 8, this)), __runInitializers(_init, 11, this);
99
99
  __publicField(this, "dispatchNodeOperation", __runInitializers(_init, 12, this)), __runInitializers(_init, 15, this);
100
100
  __publicField(this, "interaction", __runInitializers(_init, 16, this)), __runInitializers(_init, 19, this);
101
- __publicField(this, "canvasScale", __runInitializers(_init, 20, this, 1)), __runInitializers(_init, 23, this);
101
+ __publicField(this, "canvasTransform", __runInitializers(_init, 20, this)), __runInitializers(_init, 23, this);
102
+ __publicField(this, "edgeScroll", __runInitializers(_init, 24, this)), __runInitializers(_init, 27, this);
102
103
  __publicField(this, "subscription");
103
104
  __publicField(this, "transformers$", new rxjs.BehaviorSubject([]));
104
105
  __publicField(this, "currentInteractable");
105
- __publicField(this, "options", __runInitializers(_init, 24, this, DEFAULT_OPTIONS)), __runInitializers(_init, 27, this);
106
- __publicField(this, "registerOptionsTransformer", __runInitializers(_init, 28, this, (transformer) => {
106
+ __publicField(this, "lastCanvasPosition", { x: 0, y: 0 });
107
+ __publicField(this, "isDragging", false);
108
+ __publicField(this, "canvasScrollAnimationFrame", null);
109
+ __publicField(this, "options", __runInitializers(_init, 28, this, DEFAULT_OPTIONS)), __runInitializers(_init, 31, this);
110
+ __publicField(this, "registerOptionsTransformer", __runInitializers(_init, 32, this, (transformer) => {
107
111
  const transformers = this.transformers$.value;
108
112
  transformers.push(transformer);
109
113
  this.transformers$.next(transformers);
@@ -115,7 +119,7 @@ class Drag extends (_a = core.BasePlugin, _getNode_dec = [decorators.inject.getN
115
119
  this.transformers$.next(currentTransformers);
116
120
  }
117
121
  };
118
- })), __runInitializers(_init, 31, this);
122
+ })), __runInitializers(_init, 35, this);
119
123
  }
120
124
  /**
121
125
  * 应用所有转换器,生成最终的配置
@@ -153,37 +157,84 @@ class Drag extends (_a = core.BasePlugin, _getNode_dec = [decorators.inject.getN
153
157
  const options = this.applyTransformers(nodeId);
154
158
  this.currentInteractable.draggable(options);
155
159
  }
160
+ /**
161
+ * 监听画布滚动,即使鼠标不动也更新拖拽元素位置
162
+ */
163
+ startCanvasScrollListener(dragMove$) {
164
+ if (this.canvasScrollAnimationFrame !== null) {
165
+ cancelAnimationFrame(this.canvasScrollAnimationFrame);
166
+ }
167
+ const checkCanvasScroll = () => {
168
+ if (!this.isDragging) {
169
+ this.canvasScrollAnimationFrame = null;
170
+ return;
171
+ }
172
+ const { positionX, positionY } = this.canvasTransform;
173
+ const deltaX = positionX - this.lastCanvasPosition.x;
174
+ const deltaY = positionY - this.lastCanvasPosition.y;
175
+ if (deltaX !== 0 || deltaY !== 0) {
176
+ dragMove$.next({
177
+ dx: 0,
178
+ // 鼠标没动,所以dx和dy为0
179
+ dy: 0,
180
+ canvasPositionDelta: { x: deltaX, y: deltaY }
181
+ });
182
+ }
183
+ this.lastCanvasPosition = { x: positionX, y: positionY };
184
+ this.canvasScrollAnimationFrame = requestAnimationFrame(checkCanvasScroll);
185
+ };
186
+ this.canvasScrollAnimationFrame = requestAnimationFrame(checkCanvasScroll);
187
+ }
156
188
  init() {
157
189
  const dragStart$ = new rxjs.Subject();
158
190
  const dragMove$ = new rxjs.Subject();
159
191
  const dragEnd$ = new rxjs.Subject();
160
192
  const end = () => {
161
- var _a2;
193
+ var _a2, _b;
162
194
  dragEnd$.next();
195
+ this.isDragging = false;
196
+ if (this.canvasScrollAnimationFrame !== null) {
197
+ cancelAnimationFrame(this.canvasScrollAnimationFrame);
198
+ this.canvasScrollAnimationFrame = null;
199
+ }
163
200
  (_a2 = this.currentInteractable) == null ? void 0 : _a2.draggable(this.options);
164
201
  this.interaction.end(this.pluginId, "position");
202
+ (_b = this.edgeScroll) == null ? void 0 : _b.setConfig({ enabled: false });
165
203
  };
166
204
  this.currentInteractable = interact__default(`.${core.bem("node", "wrapper")}[data-node-id]`).draggable(__spreadProps(__spreadValues({}, this.options), {
167
205
  listeners: {
168
206
  start: (event) => {
207
+ var _a2;
169
208
  const target = event.target;
170
209
  const nodeId = target.getAttribute("data-node-id");
171
210
  if (!nodeId)
172
211
  return;
212
+ this.isDragging = true;
213
+ const { positionX, positionY } = this.canvasTransform;
214
+ this.lastCanvasPosition = { x: positionX, y: positionY };
173
215
  dragStart$.next({
174
216
  nodeId
175
217
  });
218
+ this.startCanvasScrollListener(dragMove$);
176
219
  this.interaction.start(this.pluginId, "position", core.InteractionPriority.EntityPositionDrag);
220
+ (_a2 = this.edgeScroll) == null ? void 0 : _a2.setConfig({ enabled: true });
177
221
  },
178
222
  move: (event) => {
179
223
  if (!this.interaction.canInteract(core.InteractionPriority.EntityPositionDrag)) {
180
224
  end();
181
225
  return;
182
226
  }
183
- const scale = this.canvasScale;
227
+ const { positionX, positionY, scale } = this.canvasTransform || {};
228
+ let canvasPositionDelta = { x: 0, y: 0 };
229
+ canvasPositionDelta = {
230
+ x: positionX - this.lastCanvasPosition.x,
231
+ y: positionY - this.lastCanvasPosition.y
232
+ };
233
+ this.lastCanvasPosition = { x: positionX, y: positionY };
184
234
  dragMove$.next({
185
235
  dx: event.dx / scale,
186
- dy: event.dy / scale
236
+ dy: event.dy / scale,
237
+ canvasPositionDelta
187
238
  });
188
239
  },
189
240
  // 拖拽结束
@@ -206,8 +257,8 @@ class Drag extends (_a = core.BasePlugin, _getNode_dec = [decorators.inject.getN
206
257
  return dragMove$.pipe(
207
258
  operators.skip(1),
208
259
  operators.map((moveEvent) => {
209
- currentPosition.x += moveEvent.dx;
210
- currentPosition.y += moveEvent.dy;
260
+ currentPosition.x += moveEvent.dx - moveEvent.canvasPositionDelta.x / this.canvasTransform.scale;
261
+ currentPosition.y += moveEvent.dy - moveEvent.canvasPositionDelta.y / this.canvasTransform.scale;
211
262
  return {
212
263
  nodeId,
213
264
  position: currentPosition
@@ -245,6 +296,10 @@ class Drag extends (_a = core.BasePlugin, _getNode_dec = [decorators.inject.getN
245
296
  this.subscription.add(() => {
246
297
  var _a2;
247
298
  (_a2 = this.currentInteractable) == null ? void 0 : _a2.unset();
299
+ if (this.canvasScrollAnimationFrame !== null) {
300
+ cancelAnimationFrame(this.canvasScrollAnimationFrame);
301
+ this.canvasScrollAnimationFrame = null;
302
+ }
248
303
  dragStart$.complete();
249
304
  dragMove$.complete();
250
305
  dragEnd$.complete();
@@ -261,7 +316,8 @@ __decorateElement(_init, 1, "destroy", _destroy_dec, Drag);
261
316
  __decorateElement(_init, 5, "getNode", _getNode_dec, Drag);
262
317
  __decorateElement(_init, 5, "dispatchNodeOperation", _dispatchNodeOperation_dec, Drag);
263
318
  __decorateElement(_init, 5, "interaction", _interaction_dec, Drag);
264
- __decorateElement(_init, 5, "canvasScale", _canvasScale_dec, Drag);
319
+ __decorateElement(_init, 5, "canvasTransform", _canvasTransform_dec, Drag);
320
+ __decorateElement(_init, 5, "edgeScroll", _edgeScroll_dec, Drag);
265
321
  __decorateElement(_init, 5, "options", _options_dec, Drag);
266
322
  __decorateElement(_init, 5, "registerOptionsTransformer", _registerOptionsTransformer_dec, Drag);
267
323
  __decoratorMetadata(_init, Drag);
package/dist/index.d.cts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { DraggableOptions as DraggableOptions$1 } from '@interactjs/actions/drag/plugin';
2
- import { Node, BasePlugin, Engine } from '@knotx/core';
2
+ import { Node, BasePlugin, Engine, PluginData } from '@knotx/core';
3
3
 
4
4
  type DraggableOptions = Omit<DraggableOptions$1, 'listeners'>;
5
5
  interface DragTransformerContext {
@@ -22,10 +22,14 @@ declare class Drag extends BasePlugin {
22
22
  getNode: Engine['getNode'];
23
23
  dispatchNodeOperation: Engine['dispatchNodeOperation'];
24
24
  interaction: Engine['interaction'];
25
- canvasScale: number;
25
+ canvasTransform: PluginData['canvas']['transform'];
26
+ edgeScroll: PluginData['canvas']['edgeScroll'];
26
27
  private subscription?;
27
28
  private transformers$;
28
29
  private currentInteractable?;
30
+ private lastCanvasPosition;
31
+ private isDragging;
32
+ private canvasScrollAnimationFrame;
29
33
  options: DraggableOptions;
30
34
  registerOptionsTransformer: (transformer: DragOptionsTransformer) => () => void;
31
35
  /**
@@ -36,6 +40,10 @@ declare class Drag extends BasePlugin {
36
40
  * 更新 interactable 的配置
37
41
  */
38
42
  private updateInteractableOptions;
43
+ /**
44
+ * 监听画布滚动,即使鼠标不动也更新拖拽元素位置
45
+ */
46
+ private startCanvasScrollListener;
39
47
  init(): void;
40
48
  destroy(): void;
41
49
  }
package/dist/index.d.mts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { DraggableOptions as DraggableOptions$1 } from '@interactjs/actions/drag/plugin';
2
- import { Node, BasePlugin, Engine } from '@knotx/core';
2
+ import { Node, BasePlugin, Engine, PluginData } from '@knotx/core';
3
3
 
4
4
  type DraggableOptions = Omit<DraggableOptions$1, 'listeners'>;
5
5
  interface DragTransformerContext {
@@ -22,10 +22,14 @@ declare class Drag extends BasePlugin {
22
22
  getNode: Engine['getNode'];
23
23
  dispatchNodeOperation: Engine['dispatchNodeOperation'];
24
24
  interaction: Engine['interaction'];
25
- canvasScale: number;
25
+ canvasTransform: PluginData['canvas']['transform'];
26
+ edgeScroll: PluginData['canvas']['edgeScroll'];
26
27
  private subscription?;
27
28
  private transformers$;
28
29
  private currentInteractable?;
30
+ private lastCanvasPosition;
31
+ private isDragging;
32
+ private canvasScrollAnimationFrame;
29
33
  options: DraggableOptions;
30
34
  registerOptionsTransformer: (transformer: DragOptionsTransformer) => () => void;
31
35
  /**
@@ -36,6 +40,10 @@ declare class Drag extends BasePlugin {
36
40
  * 更新 interactable 的配置
37
41
  */
38
42
  private updateInteractableOptions;
43
+ /**
44
+ * 监听画布滚动,即使鼠标不动也更新拖拽元素位置
45
+ */
46
+ private startCanvasScrollListener;
39
47
  init(): void;
40
48
  destroy(): void;
41
49
  }
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { DraggableOptions as DraggableOptions$1 } from '@interactjs/actions/drag/plugin';
2
- import { Node, BasePlugin, Engine } from '@knotx/core';
2
+ import { Node, BasePlugin, Engine, PluginData } from '@knotx/core';
3
3
 
4
4
  type DraggableOptions = Omit<DraggableOptions$1, 'listeners'>;
5
5
  interface DragTransformerContext {
@@ -22,10 +22,14 @@ declare class Drag extends BasePlugin {
22
22
  getNode: Engine['getNode'];
23
23
  dispatchNodeOperation: Engine['dispatchNodeOperation'];
24
24
  interaction: Engine['interaction'];
25
- canvasScale: number;
25
+ canvasTransform: PluginData['canvas']['transform'];
26
+ edgeScroll: PluginData['canvas']['edgeScroll'];
26
27
  private subscription?;
27
28
  private transformers$;
28
29
  private currentInteractable?;
30
+ private lastCanvasPosition;
31
+ private isDragging;
32
+ private canvasScrollAnimationFrame;
29
33
  options: DraggableOptions;
30
34
  registerOptionsTransformer: (transformer: DragOptionsTransformer) => () => void;
31
35
  /**
@@ -36,6 +40,10 @@ declare class Drag extends BasePlugin {
36
40
  * 更新 interactable 的配置
37
41
  */
38
42
  private updateInteractableOptions;
43
+ /**
44
+ * 监听画布滚动,即使鼠标不动也更新拖拽元素位置
45
+ */
46
+ private startCanvasScrollListener;
39
47
  init(): void;
40
48
  destroy(): void;
41
49
  }
package/dist/index.js CHANGED
@@ -72,7 +72,7 @@ var __privateIn = (member, obj) => Object(obj) !== obj ? __typeError('Cannot use
72
72
  var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
73
73
  var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
74
74
  var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
75
- var _destroy_dec, _init_dec, _registerOptionsTransformer_dec, _options_dec, _canvasScale_dec, _interaction_dec, _dispatchNodeOperation_dec, _getNode_dec, _a, _init;
75
+ var _destroy_dec, _init_dec, _registerOptionsTransformer_dec, _options_dec, _edgeScroll_dec, _canvasTransform_dec, _interaction_dec, _dispatchNodeOperation_dec, _getNode_dec, _a, _init;
76
76
  const DEFAULT_OPTIONS = {
77
77
  inertia: {
78
78
  enabled: true
@@ -84,7 +84,7 @@ const DEFAULT_OPTIONS = {
84
84
  })
85
85
  ]
86
86
  };
87
- class Drag extends (_a = BasePlugin, _getNode_dec = [inject.getNode()], _dispatchNodeOperation_dec = [inject.dispatchNodeOperation()], _interaction_dec = [inject.interaction()], _canvasScale_dec = [inject.canvas.transform((state) => state.scale)], _options_dec = [register("options")], _registerOptionsTransformer_dec = [register("registerOptionsTransformer")], _init_dec = [OnInit], _destroy_dec = [OnDestroy], _a) {
87
+ class Drag extends (_a = BasePlugin, _getNode_dec = [inject.getNode()], _dispatchNodeOperation_dec = [inject.dispatchNodeOperation()], _interaction_dec = [inject.interaction()], _canvasTransform_dec = [inject.canvas.transform()], _edgeScroll_dec = [inject.canvas.edgeScroll()], _options_dec = [register("options")], _registerOptionsTransformer_dec = [register("registerOptionsTransformer")], _init_dec = [OnInit], _destroy_dec = [OnDestroy], _a) {
88
88
  constructor() {
89
89
  super(...arguments);
90
90
  __runInitializers(_init, 5, this);
@@ -92,12 +92,16 @@ class Drag extends (_a = BasePlugin, _getNode_dec = [inject.getNode()], _dispatc
92
92
  __publicField(this, "getNode", __runInitializers(_init, 8, this)), __runInitializers(_init, 11, this);
93
93
  __publicField(this, "dispatchNodeOperation", __runInitializers(_init, 12, this)), __runInitializers(_init, 15, this);
94
94
  __publicField(this, "interaction", __runInitializers(_init, 16, this)), __runInitializers(_init, 19, this);
95
- __publicField(this, "canvasScale", __runInitializers(_init, 20, this, 1)), __runInitializers(_init, 23, this);
95
+ __publicField(this, "canvasTransform", __runInitializers(_init, 20, this)), __runInitializers(_init, 23, this);
96
+ __publicField(this, "edgeScroll", __runInitializers(_init, 24, this)), __runInitializers(_init, 27, this);
96
97
  __publicField(this, "subscription");
97
98
  __publicField(this, "transformers$", new BehaviorSubject([]));
98
99
  __publicField(this, "currentInteractable");
99
- __publicField(this, "options", __runInitializers(_init, 24, this, DEFAULT_OPTIONS)), __runInitializers(_init, 27, this);
100
- __publicField(this, "registerOptionsTransformer", __runInitializers(_init, 28, this, (transformer) => {
100
+ __publicField(this, "lastCanvasPosition", { x: 0, y: 0 });
101
+ __publicField(this, "isDragging", false);
102
+ __publicField(this, "canvasScrollAnimationFrame", null);
103
+ __publicField(this, "options", __runInitializers(_init, 28, this, DEFAULT_OPTIONS)), __runInitializers(_init, 31, this);
104
+ __publicField(this, "registerOptionsTransformer", __runInitializers(_init, 32, this, (transformer) => {
101
105
  const transformers = this.transformers$.value;
102
106
  transformers.push(transformer);
103
107
  this.transformers$.next(transformers);
@@ -109,7 +113,7 @@ class Drag extends (_a = BasePlugin, _getNode_dec = [inject.getNode()], _dispatc
109
113
  this.transformers$.next(currentTransformers);
110
114
  }
111
115
  };
112
- })), __runInitializers(_init, 31, this);
116
+ })), __runInitializers(_init, 35, this);
113
117
  }
114
118
  /**
115
119
  * 应用所有转换器,生成最终的配置
@@ -147,37 +151,84 @@ class Drag extends (_a = BasePlugin, _getNode_dec = [inject.getNode()], _dispatc
147
151
  const options = this.applyTransformers(nodeId);
148
152
  this.currentInteractable.draggable(options);
149
153
  }
154
+ /**
155
+ * 监听画布滚动,即使鼠标不动也更新拖拽元素位置
156
+ */
157
+ startCanvasScrollListener(dragMove$) {
158
+ if (this.canvasScrollAnimationFrame !== null) {
159
+ cancelAnimationFrame(this.canvasScrollAnimationFrame);
160
+ }
161
+ const checkCanvasScroll = () => {
162
+ if (!this.isDragging) {
163
+ this.canvasScrollAnimationFrame = null;
164
+ return;
165
+ }
166
+ const { positionX, positionY } = this.canvasTransform;
167
+ const deltaX = positionX - this.lastCanvasPosition.x;
168
+ const deltaY = positionY - this.lastCanvasPosition.y;
169
+ if (deltaX !== 0 || deltaY !== 0) {
170
+ dragMove$.next({
171
+ dx: 0,
172
+ // 鼠标没动,所以dx和dy为0
173
+ dy: 0,
174
+ canvasPositionDelta: { x: deltaX, y: deltaY }
175
+ });
176
+ }
177
+ this.lastCanvasPosition = { x: positionX, y: positionY };
178
+ this.canvasScrollAnimationFrame = requestAnimationFrame(checkCanvasScroll);
179
+ };
180
+ this.canvasScrollAnimationFrame = requestAnimationFrame(checkCanvasScroll);
181
+ }
150
182
  init() {
151
183
  const dragStart$ = new Subject();
152
184
  const dragMove$ = new Subject();
153
185
  const dragEnd$ = new Subject();
154
186
  const end = () => {
155
- var _a2;
187
+ var _a2, _b;
156
188
  dragEnd$.next();
189
+ this.isDragging = false;
190
+ if (this.canvasScrollAnimationFrame !== null) {
191
+ cancelAnimationFrame(this.canvasScrollAnimationFrame);
192
+ this.canvasScrollAnimationFrame = null;
193
+ }
157
194
  (_a2 = this.currentInteractable) == null ? void 0 : _a2.draggable(this.options);
158
195
  this.interaction.end(this.pluginId, "position");
196
+ (_b = this.edgeScroll) == null ? void 0 : _b.setConfig({ enabled: false });
159
197
  };
160
198
  this.currentInteractable = interact(`.${bem("node", "wrapper")}[data-node-id]`).draggable(__spreadProps(__spreadValues({}, this.options), {
161
199
  listeners: {
162
200
  start: (event) => {
201
+ var _a2;
163
202
  const target = event.target;
164
203
  const nodeId = target.getAttribute("data-node-id");
165
204
  if (!nodeId)
166
205
  return;
206
+ this.isDragging = true;
207
+ const { positionX, positionY } = this.canvasTransform;
208
+ this.lastCanvasPosition = { x: positionX, y: positionY };
167
209
  dragStart$.next({
168
210
  nodeId
169
211
  });
212
+ this.startCanvasScrollListener(dragMove$);
170
213
  this.interaction.start(this.pluginId, "position", InteractionPriority.EntityPositionDrag);
214
+ (_a2 = this.edgeScroll) == null ? void 0 : _a2.setConfig({ enabled: true });
171
215
  },
172
216
  move: (event) => {
173
217
  if (!this.interaction.canInteract(InteractionPriority.EntityPositionDrag)) {
174
218
  end();
175
219
  return;
176
220
  }
177
- const scale = this.canvasScale;
221
+ const { positionX, positionY, scale } = this.canvasTransform || {};
222
+ let canvasPositionDelta = { x: 0, y: 0 };
223
+ canvasPositionDelta = {
224
+ x: positionX - this.lastCanvasPosition.x,
225
+ y: positionY - this.lastCanvasPosition.y
226
+ };
227
+ this.lastCanvasPosition = { x: positionX, y: positionY };
178
228
  dragMove$.next({
179
229
  dx: event.dx / scale,
180
- dy: event.dy / scale
230
+ dy: event.dy / scale,
231
+ canvasPositionDelta
181
232
  });
182
233
  },
183
234
  // 拖拽结束
@@ -200,8 +251,8 @@ class Drag extends (_a = BasePlugin, _getNode_dec = [inject.getNode()], _dispatc
200
251
  return dragMove$.pipe(
201
252
  skip(1),
202
253
  map((moveEvent) => {
203
- currentPosition.x += moveEvent.dx;
204
- currentPosition.y += moveEvent.dy;
254
+ currentPosition.x += moveEvent.dx - moveEvent.canvasPositionDelta.x / this.canvasTransform.scale;
255
+ currentPosition.y += moveEvent.dy - moveEvent.canvasPositionDelta.y / this.canvasTransform.scale;
205
256
  return {
206
257
  nodeId,
207
258
  position: currentPosition
@@ -239,6 +290,10 @@ class Drag extends (_a = BasePlugin, _getNode_dec = [inject.getNode()], _dispatc
239
290
  this.subscription.add(() => {
240
291
  var _a2;
241
292
  (_a2 = this.currentInteractable) == null ? void 0 : _a2.unset();
293
+ if (this.canvasScrollAnimationFrame !== null) {
294
+ cancelAnimationFrame(this.canvasScrollAnimationFrame);
295
+ this.canvasScrollAnimationFrame = null;
296
+ }
242
297
  dragStart$.complete();
243
298
  dragMove$.complete();
244
299
  dragEnd$.complete();
@@ -255,7 +310,8 @@ __decorateElement(_init, 1, "destroy", _destroy_dec, Drag);
255
310
  __decorateElement(_init, 5, "getNode", _getNode_dec, Drag);
256
311
  __decorateElement(_init, 5, "dispatchNodeOperation", _dispatchNodeOperation_dec, Drag);
257
312
  __decorateElement(_init, 5, "interaction", _interaction_dec, Drag);
258
- __decorateElement(_init, 5, "canvasScale", _canvasScale_dec, Drag);
313
+ __decorateElement(_init, 5, "canvasTransform", _canvasTransform_dec, Drag);
314
+ __decorateElement(_init, 5, "edgeScroll", _edgeScroll_dec, Drag);
259
315
  __decorateElement(_init, 5, "options", _options_dec, Drag);
260
316
  __decorateElement(_init, 5, "registerOptionsTransformer", _registerOptionsTransformer_dec, Drag);
261
317
  __decoratorMetadata(_init, Drag);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@knotx/plugins-drag",
3
- "version": "0.3.4",
3
+ "version": "0.3.6",
4
4
  "description": "Drag Plugin for Knotx",
5
5
  "author": "boenfu",
6
6
  "license": "MIT",
@@ -28,8 +28,8 @@
28
28
  "dist"
29
29
  ],
30
30
  "peerDependencies": {
31
- "@knotx/jsx": "0.3.4",
32
- "@knotx/plugins-canvas": "0.3.4"
31
+ "@knotx/jsx": "0.3.6",
32
+ "@knotx/plugins-canvas": "0.3.6"
33
33
  },
34
34
  "dependencies": {
35
35
  "@interactjs/actions": "^1.10.27",
@@ -38,15 +38,15 @@
38
38
  "@interactjs/types": "^1.10.27",
39
39
  "interactjs": "^1.10.27",
40
40
  "rxjs": "^7.8.1",
41
- "@knotx/core": "0.3.4",
42
- "@knotx/decorators": "0.3.4"
41
+ "@knotx/core": "0.3.6",
42
+ "@knotx/decorators": "0.3.6"
43
43
  },
44
44
  "devDependencies": {
45
- "@knotx/build-config": "0.3.4",
46
- "@knotx/eslint-config": "0.3.4",
47
- "@knotx/jsx": "0.3.4",
48
- "@knotx/plugins-canvas": "0.3.4",
49
- "@knotx/typescript-config": "0.3.4"
45
+ "@knotx/build-config": "0.3.6",
46
+ "@knotx/eslint-config": "0.3.6",
47
+ "@knotx/jsx": "0.3.6",
48
+ "@knotx/plugins-canvas": "0.3.6",
49
+ "@knotx/typescript-config": "0.3.6"
50
50
  },
51
51
  "scripts": {
52
52
  "build": "unbuild",