@knotx/plugins-selection 0.3.9 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  const core = require('@knotx/core');
4
4
  const decorators = require('@knotx/decorators');
5
- const SelectionArea = require('@viselect/vanilla');
5
+ const SelectionArea = require('@knotx/viselect');
6
6
 
7
7
  function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e.default : e; }
8
8
 
@@ -73,8 +73,8 @@ 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 _destroy_dec, _clearSelection_dec, _select_dec, _getSelected_dec, _init_dec, _edgeScroll_dec, _interaction_dec, _setElementOverlap_dec, _setClearSelectionBeforeStart_dec, _clearSelectionBeforeStart_dec, _setRuleEnabled_dec, _registerRules_dec, _selected_dec, _a, _init;
77
- class Selection extends (_a = core.BasePlugin, _selected_dec = [decorators.register("selected")], _registerRules_dec = [decorators.register("registerRules")], _setRuleEnabled_dec = [decorators.register("setRuleEnabled")], _clearSelectionBeforeStart_dec = [decorators.observable()], _setClearSelectionBeforeStart_dec = [decorators.register("setClearSelectionBeforeStart")], _setElementOverlap_dec = [decorators.register("setElementOverlap")], _interaction_dec = [decorators.inject.interaction()], _edgeScroll_dec = [decorators.inject.canvas.edgeScroll()], _init_dec = [decorators.OnInit], _getSelected_dec = [decorators.tool("Get selected items", {})], _select_dec = [decorators.tool("Items that match the registered rules will be selected, manifested as the item showing a selected style.", {
76
+ var _destroy_dec, _clearSelection_dec, _select_dec, _getSelected_dec, _init_dec, _contentSize_dec, _transform_dec, _interaction_dec, _containerSize_dec, _resolveSelectables_dec, _setElementOverlap_dec, _setClearSelectionBeforeStart_dec, _clearSelectionBeforeStart_dec, _setRuleEnabled_dec, _registerRules_dec, _selected_dec, _a, _init;
77
+ class Selection extends (_a = core.BasePlugin, _selected_dec = [decorators.register("selected")], _registerRules_dec = [decorators.register("registerRules")], _setRuleEnabled_dec = [decorators.register("setRuleEnabled")], _clearSelectionBeforeStart_dec = [decorators.observable()], _setClearSelectionBeforeStart_dec = [decorators.register("setClearSelectionBeforeStart")], _setElementOverlap_dec = [decorators.register("setElementOverlap")], _resolveSelectables_dec = [decorators.register("resolveSelectables")], _containerSize_dec = [decorators.inject.container()], _interaction_dec = [decorators.inject.interaction()], _transform_dec = [decorators.inject.canvas.transform()], _contentSize_dec = [decorators.inject.canvas.contentSize()], _init_dec = [decorators.OnInit], _getSelected_dec = [decorators.tool("Get selected items", {})], _select_dec = [decorators.tool("Items that match the registered rules will be selected, manifested as the item showing a selected style.", {
78
78
  type: "array",
79
79
  items: {
80
80
  type: "object",
@@ -105,7 +105,7 @@ class Selection extends (_a = core.BasePlugin, _selected_dec = [decorators.regis
105
105
  __publicField(this, "ruleMap", /* @__PURE__ */ new Map());
106
106
  __publicField(this, "enableDrag", true);
107
107
  __publicField(this, "isDragging", false);
108
- __publicField(this, "enableEdgeScroll", false);
108
+ __publicField(this, "scrollingPosition", { x: 0, y: 0 });
109
109
  __publicField(this, "updateFrameId");
110
110
  __publicField(this, "selected", __runInitializers(_init, 8, this, [])), __runInitializers(_init, 11, this);
111
111
  __publicField(this, "registerRules", __runInitializers(_init, 12, this, (rules) => {
@@ -136,8 +136,14 @@ class Selection extends (_a = core.BasePlugin, _selected_dec = [decorators.regis
136
136
  } catch (e) {
137
137
  }
138
138
  })), __runInitializers(_init, 31, this);
139
- __publicField(this, "interaction", __runInitializers(_init, 32, this)), __runInitializers(_init, 35, this);
140
- __publicField(this, "edgeScroll", __runInitializers(_init, 36, this)), __runInitializers(_init, 39, this);
139
+ __publicField(this, "resolveSelectables", __runInitializers(_init, 32, this, () => {
140
+ var _a2;
141
+ (_a2 = this.selection) == null ? void 0 : _a2.resolveSelectables();
142
+ })), __runInitializers(_init, 35, this);
143
+ __publicField(this, "containerSize", __runInitializers(_init, 36, this)), __runInitializers(_init, 39, this);
144
+ __publicField(this, "interaction", __runInitializers(_init, 40, this)), __runInitializers(_init, 43, this);
145
+ __publicField(this, "transform", __runInitializers(_init, 44, this)), __runInitializers(_init, 47, this);
146
+ __publicField(this, "contentSize", __runInitializers(_init, 48, this)), __runInitializers(_init, 51, this);
141
147
  __publicField(this, "onBeforeStart", (_) => {
142
148
  });
143
149
  __publicField(this, "onBeforeDrag", () => {
@@ -147,9 +153,6 @@ class Selection extends (_a = core.BasePlugin, _selected_dec = [decorators.regis
147
153
  __publicField(this, "onStart", ({ event, store }) => {
148
154
  var _a2;
149
155
  this.interaction.start(this.pluginId, "select", core.InteractionPriority.MarqueeSelection);
150
- if (this.enableEdgeScroll && this.edgeScroll) {
151
- this.edgeScroll.setConfig({ enabled: true });
152
- }
153
156
  if (!(event == null ? void 0 : event.ctrlKey) && !(event == null ? void 0 : event.metaKey) && !(event == null ? void 0 : event.shiftKey)) {
154
157
  if (this.clearSelectionBeforeStart) {
155
158
  store.stored.forEach((element) => {
@@ -162,6 +165,9 @@ class Selection extends (_a = core.BasePlugin, _selected_dec = [decorators.regis
162
165
  (_a2 = this.selection) == null ? void 0 : _a2.clearSelection(true, true);
163
166
  }
164
167
  }
168
+ if (this.isDragging) {
169
+ this.scrollingPosition = { x: -this.transform.positionX, y: -this.transform.positionY };
170
+ }
165
171
  });
166
172
  __publicField(this, "onMove", ({ store: { stored, changed: { added, removed } }, selection }) => {
167
173
  const getSelectedElements = () => {
@@ -220,9 +226,6 @@ class Selection extends (_a = core.BasePlugin, _selected_dec = [decorators.regis
220
226
  });
221
227
  __publicField(this, "onStop", ({ event }) => {
222
228
  this.interaction.end(this.pluginId, "select");
223
- if (this.enableEdgeScroll && this.edgeScroll) {
224
- this.edgeScroll.setConfig({ enabled: false });
225
- }
226
229
  if (event) {
227
230
  if (this.isDragging) {
228
231
  this.isDragging = false;
@@ -230,6 +233,7 @@ class Selection extends (_a = core.BasePlugin, _selected_dec = [decorators.regis
230
233
  }
231
234
  cancelAnimationFrame(this.updateFrameId);
232
235
  this.updateFrameId = requestAnimationFrame(this.updateSelected);
236
+ this.scrollingPosition = { x: 0, y: 0 };
233
237
  });
234
238
  __publicField(this, "updateSelected", () => {
235
239
  var _a2;
@@ -261,9 +265,6 @@ class Selection extends (_a = core.BasePlugin, _selected_dec = [decorators.regis
261
265
  if (config.enableDrag !== void 0) {
262
266
  this.enableDrag = config.enableDrag;
263
267
  }
264
- if (config.enableEdgeScroll !== void 0) {
265
- this.enableEdgeScroll = config.enableEdgeScroll;
266
- }
267
268
  queueMicrotask(() => this.createSelection());
268
269
  }
269
270
  createSelection() {
@@ -275,8 +276,21 @@ class Selection extends (_a = core.BasePlugin, _selected_dec = [decorators.regis
275
276
  selectables: Array.from(new Set(Array.from(this.ruleMap.values()).map(({ className }) => `.${className}`))),
276
277
  behaviour: {
277
278
  scrolling: {
278
- manualSpeed: 0
279
+ startScrollMargins: { x: 24, y: 24 }
279
280
  }
281
+ },
282
+ scrollController: {
283
+ getScrollPosition: () => {
284
+ return this.scrollingPosition;
285
+ },
286
+ setScrollPosition: (_, { x = this.scrollingPosition.x, y = this.scrollingPosition.y }) => {
287
+ this.scrollingPosition.x = x;
288
+ this.scrollingPosition.y = y;
289
+ this.callTool("canvas", "setTransform", { positionX: -x, positionY: -y, scale: this.transform.scale, animationTime: 0 });
290
+ },
291
+ getClientSize: (element) => this.containerSize || { width: element.clientWidth, height: element.clientHeight },
292
+ getScrollSize: (element) => this.contentSize || { width: element.scrollWidth, height: element.scrollHeight },
293
+ alwaysScroll: true
280
294
  }
281
295
  }).on("beforedrag", this.onBeforeDrag).on("beforestart", this.onBeforeStart).on("start", this.onStart).on("move", this.onMove).on("stop", this.onStop);
282
296
  }
@@ -324,8 +338,11 @@ __decorateElement(_init, 5, "setRuleEnabled", _setRuleEnabled_dec, Selection);
324
338
  __decorateElement(_init, 5, "clearSelectionBeforeStart", _clearSelectionBeforeStart_dec, Selection);
325
339
  __decorateElement(_init, 5, "setClearSelectionBeforeStart", _setClearSelectionBeforeStart_dec, Selection);
326
340
  __decorateElement(_init, 5, "setElementOverlap", _setElementOverlap_dec, Selection);
341
+ __decorateElement(_init, 5, "resolveSelectables", _resolveSelectables_dec, Selection);
342
+ __decorateElement(_init, 5, "containerSize", _containerSize_dec, Selection);
327
343
  __decorateElement(_init, 5, "interaction", _interaction_dec, Selection);
328
- __decorateElement(_init, 5, "edgeScroll", _edgeScroll_dec, Selection);
344
+ __decorateElement(_init, 5, "transform", _transform_dec, Selection);
345
+ __decorateElement(_init, 5, "contentSize", _contentSize_dec, Selection);
329
346
  __decoratorMetadata(_init, Selection);
330
347
 
331
348
  exports.Selection = Selection;
package/dist/index.d.cts CHANGED
@@ -1,5 +1,5 @@
1
- import { BasePlugin, PluginData } from '@knotx/core';
2
- import { OverlapMode } from '@viselect/vanilla';
1
+ import { BasePlugin, Engine, PluginData } from '@knotx/core';
2
+ import { OverlapMode } from '@knotx/viselect';
3
3
 
4
4
  interface SelectionSelectedItem {
5
5
  type: string;
@@ -29,6 +29,11 @@ declare module '@knotx/core' {
29
29
  * @returns
30
30
  */
31
31
  setElementOverlap: (overlap: OverlapMode) => void;
32
+ /**
33
+ * 重新匹配可选中元素,适用于虚拟滚动后可选择元素有变化的场景
34
+ * @returns
35
+ */
36
+ resolveSelectables: () => void;
32
37
  };
33
38
  }
34
39
  interface PluginTools {
@@ -89,11 +94,6 @@ interface SelectionConfig {
89
94
  * default: bemSelector('canvas', 'wrapper')
90
95
  */
91
96
  container?: string;
92
- /**
93
- * 是否启用边缘滚动
94
- * default: false
95
- */
96
- enableEdgeScroll?: boolean;
97
97
  }
98
98
  declare class Selection extends BasePlugin<'selection', SelectionConfig> {
99
99
  name: "selection";
@@ -103,7 +103,7 @@ declare class Selection extends BasePlugin<'selection', SelectionConfig> {
103
103
  private ruleMap;
104
104
  private enableDrag;
105
105
  private isDragging;
106
- private enableEdgeScroll;
106
+ private scrollingPosition;
107
107
  private updateFrameId;
108
108
  selected: SelectionSelectedItem[];
109
109
  registerRules: (rules: SelectionRule[]) => () => void;
@@ -111,8 +111,11 @@ declare class Selection extends BasePlugin<'selection', SelectionConfig> {
111
111
  clearSelectionBeforeStart: boolean;
112
112
  setClearSelectionBeforeStart: (clearSelectionBeforeStart: boolean) => void;
113
113
  setElementOverlap: (overlap: OverlapMode) => void;
114
+ resolveSelectables: () => void;
115
+ containerSize: Engine['container'];
114
116
  private interaction;
115
- edgeScroll: PluginData['canvas']['edgeScroll'];
117
+ transform: PluginData['canvas']['transform'];
118
+ contentSize: PluginData['canvas']['contentSize'];
116
119
  init(config?: SelectionConfig): void;
117
120
  private createSelection;
118
121
  private onBeforeStart;
package/dist/index.d.mts CHANGED
@@ -1,5 +1,5 @@
1
- import { BasePlugin, PluginData } from '@knotx/core';
2
- import { OverlapMode } from '@viselect/vanilla';
1
+ import { BasePlugin, Engine, PluginData } from '@knotx/core';
2
+ import { OverlapMode } from '@knotx/viselect';
3
3
 
4
4
  interface SelectionSelectedItem {
5
5
  type: string;
@@ -29,6 +29,11 @@ declare module '@knotx/core' {
29
29
  * @returns
30
30
  */
31
31
  setElementOverlap: (overlap: OverlapMode) => void;
32
+ /**
33
+ * 重新匹配可选中元素,适用于虚拟滚动后可选择元素有变化的场景
34
+ * @returns
35
+ */
36
+ resolveSelectables: () => void;
32
37
  };
33
38
  }
34
39
  interface PluginTools {
@@ -89,11 +94,6 @@ interface SelectionConfig {
89
94
  * default: bemSelector('canvas', 'wrapper')
90
95
  */
91
96
  container?: string;
92
- /**
93
- * 是否启用边缘滚动
94
- * default: false
95
- */
96
- enableEdgeScroll?: boolean;
97
97
  }
98
98
  declare class Selection extends BasePlugin<'selection', SelectionConfig> {
99
99
  name: "selection";
@@ -103,7 +103,7 @@ declare class Selection extends BasePlugin<'selection', SelectionConfig> {
103
103
  private ruleMap;
104
104
  private enableDrag;
105
105
  private isDragging;
106
- private enableEdgeScroll;
106
+ private scrollingPosition;
107
107
  private updateFrameId;
108
108
  selected: SelectionSelectedItem[];
109
109
  registerRules: (rules: SelectionRule[]) => () => void;
@@ -111,8 +111,11 @@ declare class Selection extends BasePlugin<'selection', SelectionConfig> {
111
111
  clearSelectionBeforeStart: boolean;
112
112
  setClearSelectionBeforeStart: (clearSelectionBeforeStart: boolean) => void;
113
113
  setElementOverlap: (overlap: OverlapMode) => void;
114
+ resolveSelectables: () => void;
115
+ containerSize: Engine['container'];
114
116
  private interaction;
115
- edgeScroll: PluginData['canvas']['edgeScroll'];
117
+ transform: PluginData['canvas']['transform'];
118
+ contentSize: PluginData['canvas']['contentSize'];
116
119
  init(config?: SelectionConfig): void;
117
120
  private createSelection;
118
121
  private onBeforeStart;
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { BasePlugin, PluginData } from '@knotx/core';
2
- import { OverlapMode } from '@viselect/vanilla';
1
+ import { BasePlugin, Engine, PluginData } from '@knotx/core';
2
+ import { OverlapMode } from '@knotx/viselect';
3
3
 
4
4
  interface SelectionSelectedItem {
5
5
  type: string;
@@ -29,6 +29,11 @@ declare module '@knotx/core' {
29
29
  * @returns
30
30
  */
31
31
  setElementOverlap: (overlap: OverlapMode) => void;
32
+ /**
33
+ * 重新匹配可选中元素,适用于虚拟滚动后可选择元素有变化的场景
34
+ * @returns
35
+ */
36
+ resolveSelectables: () => void;
32
37
  };
33
38
  }
34
39
  interface PluginTools {
@@ -89,11 +94,6 @@ interface SelectionConfig {
89
94
  * default: bemSelector('canvas', 'wrapper')
90
95
  */
91
96
  container?: string;
92
- /**
93
- * 是否启用边缘滚动
94
- * default: false
95
- */
96
- enableEdgeScroll?: boolean;
97
97
  }
98
98
  declare class Selection extends BasePlugin<'selection', SelectionConfig> {
99
99
  name: "selection";
@@ -103,7 +103,7 @@ declare class Selection extends BasePlugin<'selection', SelectionConfig> {
103
103
  private ruleMap;
104
104
  private enableDrag;
105
105
  private isDragging;
106
- private enableEdgeScroll;
106
+ private scrollingPosition;
107
107
  private updateFrameId;
108
108
  selected: SelectionSelectedItem[];
109
109
  registerRules: (rules: SelectionRule[]) => () => void;
@@ -111,8 +111,11 @@ declare class Selection extends BasePlugin<'selection', SelectionConfig> {
111
111
  clearSelectionBeforeStart: boolean;
112
112
  setClearSelectionBeforeStart: (clearSelectionBeforeStart: boolean) => void;
113
113
  setElementOverlap: (overlap: OverlapMode) => void;
114
+ resolveSelectables: () => void;
115
+ containerSize: Engine['container'];
114
116
  private interaction;
115
- edgeScroll: PluginData['canvas']['edgeScroll'];
117
+ transform: PluginData['canvas']['transform'];
118
+ contentSize: PluginData['canvas']['contentSize'];
116
119
  init(config?: SelectionConfig): void;
117
120
  private createSelection;
118
121
  private onBeforeStart;
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { bemSelector, bem, BasePlugin, InteractionPriority } from '@knotx/core';
2
2
  import { register, observable, inject, tool, OnInit, OnDestroy } from '@knotx/decorators';
3
- import SelectionArea from '@viselect/vanilla';
3
+ import SelectionArea from '@knotx/viselect';
4
4
 
5
5
  var __create = Object.create;
6
6
  var __defProp = Object.defineProperty;
@@ -67,8 +67,8 @@ var __privateIn = (member, obj) => Object(obj) !== obj ? __typeError('Cannot use
67
67
  var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
68
68
  var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
69
69
  var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
70
- var _destroy_dec, _clearSelection_dec, _select_dec, _getSelected_dec, _init_dec, _edgeScroll_dec, _interaction_dec, _setElementOverlap_dec, _setClearSelectionBeforeStart_dec, _clearSelectionBeforeStart_dec, _setRuleEnabled_dec, _registerRules_dec, _selected_dec, _a, _init;
71
- class Selection extends (_a = BasePlugin, _selected_dec = [register("selected")], _registerRules_dec = [register("registerRules")], _setRuleEnabled_dec = [register("setRuleEnabled")], _clearSelectionBeforeStart_dec = [observable()], _setClearSelectionBeforeStart_dec = [register("setClearSelectionBeforeStart")], _setElementOverlap_dec = [register("setElementOverlap")], _interaction_dec = [inject.interaction()], _edgeScroll_dec = [inject.canvas.edgeScroll()], _init_dec = [OnInit], _getSelected_dec = [tool("Get selected items", {})], _select_dec = [tool("Items that match the registered rules will be selected, manifested as the item showing a selected style.", {
70
+ var _destroy_dec, _clearSelection_dec, _select_dec, _getSelected_dec, _init_dec, _contentSize_dec, _transform_dec, _interaction_dec, _containerSize_dec, _resolveSelectables_dec, _setElementOverlap_dec, _setClearSelectionBeforeStart_dec, _clearSelectionBeforeStart_dec, _setRuleEnabled_dec, _registerRules_dec, _selected_dec, _a, _init;
71
+ class Selection extends (_a = BasePlugin, _selected_dec = [register("selected")], _registerRules_dec = [register("registerRules")], _setRuleEnabled_dec = [register("setRuleEnabled")], _clearSelectionBeforeStart_dec = [observable()], _setClearSelectionBeforeStart_dec = [register("setClearSelectionBeforeStart")], _setElementOverlap_dec = [register("setElementOverlap")], _resolveSelectables_dec = [register("resolveSelectables")], _containerSize_dec = [inject.container()], _interaction_dec = [inject.interaction()], _transform_dec = [inject.canvas.transform()], _contentSize_dec = [inject.canvas.contentSize()], _init_dec = [OnInit], _getSelected_dec = [tool("Get selected items", {})], _select_dec = [tool("Items that match the registered rules will be selected, manifested as the item showing a selected style.", {
72
72
  type: "array",
73
73
  items: {
74
74
  type: "object",
@@ -99,7 +99,7 @@ class Selection extends (_a = BasePlugin, _selected_dec = [register("selected")]
99
99
  __publicField(this, "ruleMap", /* @__PURE__ */ new Map());
100
100
  __publicField(this, "enableDrag", true);
101
101
  __publicField(this, "isDragging", false);
102
- __publicField(this, "enableEdgeScroll", false);
102
+ __publicField(this, "scrollingPosition", { x: 0, y: 0 });
103
103
  __publicField(this, "updateFrameId");
104
104
  __publicField(this, "selected", __runInitializers(_init, 8, this, [])), __runInitializers(_init, 11, this);
105
105
  __publicField(this, "registerRules", __runInitializers(_init, 12, this, (rules) => {
@@ -130,8 +130,14 @@ class Selection extends (_a = BasePlugin, _selected_dec = [register("selected")]
130
130
  } catch (e) {
131
131
  }
132
132
  })), __runInitializers(_init, 31, this);
133
- __publicField(this, "interaction", __runInitializers(_init, 32, this)), __runInitializers(_init, 35, this);
134
- __publicField(this, "edgeScroll", __runInitializers(_init, 36, this)), __runInitializers(_init, 39, this);
133
+ __publicField(this, "resolveSelectables", __runInitializers(_init, 32, this, () => {
134
+ var _a2;
135
+ (_a2 = this.selection) == null ? void 0 : _a2.resolveSelectables();
136
+ })), __runInitializers(_init, 35, this);
137
+ __publicField(this, "containerSize", __runInitializers(_init, 36, this)), __runInitializers(_init, 39, this);
138
+ __publicField(this, "interaction", __runInitializers(_init, 40, this)), __runInitializers(_init, 43, this);
139
+ __publicField(this, "transform", __runInitializers(_init, 44, this)), __runInitializers(_init, 47, this);
140
+ __publicField(this, "contentSize", __runInitializers(_init, 48, this)), __runInitializers(_init, 51, this);
135
141
  __publicField(this, "onBeforeStart", (_) => {
136
142
  });
137
143
  __publicField(this, "onBeforeDrag", () => {
@@ -141,9 +147,6 @@ class Selection extends (_a = BasePlugin, _selected_dec = [register("selected")]
141
147
  __publicField(this, "onStart", ({ event, store }) => {
142
148
  var _a2;
143
149
  this.interaction.start(this.pluginId, "select", InteractionPriority.MarqueeSelection);
144
- if (this.enableEdgeScroll && this.edgeScroll) {
145
- this.edgeScroll.setConfig({ enabled: true });
146
- }
147
150
  if (!(event == null ? void 0 : event.ctrlKey) && !(event == null ? void 0 : event.metaKey) && !(event == null ? void 0 : event.shiftKey)) {
148
151
  if (this.clearSelectionBeforeStart) {
149
152
  store.stored.forEach((element) => {
@@ -156,6 +159,9 @@ class Selection extends (_a = BasePlugin, _selected_dec = [register("selected")]
156
159
  (_a2 = this.selection) == null ? void 0 : _a2.clearSelection(true, true);
157
160
  }
158
161
  }
162
+ if (this.isDragging) {
163
+ this.scrollingPosition = { x: -this.transform.positionX, y: -this.transform.positionY };
164
+ }
159
165
  });
160
166
  __publicField(this, "onMove", ({ store: { stored, changed: { added, removed } }, selection }) => {
161
167
  const getSelectedElements = () => {
@@ -214,9 +220,6 @@ class Selection extends (_a = BasePlugin, _selected_dec = [register("selected")]
214
220
  });
215
221
  __publicField(this, "onStop", ({ event }) => {
216
222
  this.interaction.end(this.pluginId, "select");
217
- if (this.enableEdgeScroll && this.edgeScroll) {
218
- this.edgeScroll.setConfig({ enabled: false });
219
- }
220
223
  if (event) {
221
224
  if (this.isDragging) {
222
225
  this.isDragging = false;
@@ -224,6 +227,7 @@ class Selection extends (_a = BasePlugin, _selected_dec = [register("selected")]
224
227
  }
225
228
  cancelAnimationFrame(this.updateFrameId);
226
229
  this.updateFrameId = requestAnimationFrame(this.updateSelected);
230
+ this.scrollingPosition = { x: 0, y: 0 };
227
231
  });
228
232
  __publicField(this, "updateSelected", () => {
229
233
  var _a2;
@@ -255,9 +259,6 @@ class Selection extends (_a = BasePlugin, _selected_dec = [register("selected")]
255
259
  if (config.enableDrag !== void 0) {
256
260
  this.enableDrag = config.enableDrag;
257
261
  }
258
- if (config.enableEdgeScroll !== void 0) {
259
- this.enableEdgeScroll = config.enableEdgeScroll;
260
- }
261
262
  queueMicrotask(() => this.createSelection());
262
263
  }
263
264
  createSelection() {
@@ -269,8 +270,21 @@ class Selection extends (_a = BasePlugin, _selected_dec = [register("selected")]
269
270
  selectables: Array.from(new Set(Array.from(this.ruleMap.values()).map(({ className }) => `.${className}`))),
270
271
  behaviour: {
271
272
  scrolling: {
272
- manualSpeed: 0
273
+ startScrollMargins: { x: 24, y: 24 }
273
274
  }
275
+ },
276
+ scrollController: {
277
+ getScrollPosition: () => {
278
+ return this.scrollingPosition;
279
+ },
280
+ setScrollPosition: (_, { x = this.scrollingPosition.x, y = this.scrollingPosition.y }) => {
281
+ this.scrollingPosition.x = x;
282
+ this.scrollingPosition.y = y;
283
+ this.callTool("canvas", "setTransform", { positionX: -x, positionY: -y, scale: this.transform.scale, animationTime: 0 });
284
+ },
285
+ getClientSize: (element) => this.containerSize || { width: element.clientWidth, height: element.clientHeight },
286
+ getScrollSize: (element) => this.contentSize || { width: element.scrollWidth, height: element.scrollHeight },
287
+ alwaysScroll: true
274
288
  }
275
289
  }).on("beforedrag", this.onBeforeDrag).on("beforestart", this.onBeforeStart).on("start", this.onStart).on("move", this.onMove).on("stop", this.onStop);
276
290
  }
@@ -318,8 +332,11 @@ __decorateElement(_init, 5, "setRuleEnabled", _setRuleEnabled_dec, Selection);
318
332
  __decorateElement(_init, 5, "clearSelectionBeforeStart", _clearSelectionBeforeStart_dec, Selection);
319
333
  __decorateElement(_init, 5, "setClearSelectionBeforeStart", _setClearSelectionBeforeStart_dec, Selection);
320
334
  __decorateElement(_init, 5, "setElementOverlap", _setElementOverlap_dec, Selection);
335
+ __decorateElement(_init, 5, "resolveSelectables", _resolveSelectables_dec, Selection);
336
+ __decorateElement(_init, 5, "containerSize", _containerSize_dec, Selection);
321
337
  __decorateElement(_init, 5, "interaction", _interaction_dec, Selection);
322
- __decorateElement(_init, 5, "edgeScroll", _edgeScroll_dec, Selection);
338
+ __decorateElement(_init, 5, "transform", _transform_dec, Selection);
339
+ __decorateElement(_init, 5, "contentSize", _contentSize_dec, Selection);
323
340
  __decoratorMetadata(_init, Selection);
324
341
 
325
342
  export { Selection };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@knotx/plugins-selection",
3
- "version": "0.3.9",
3
+ "version": "0.4.0",
4
4
  "description": "Selection Plugin for Knotx",
5
5
  "author": "boenfu",
6
6
  "license": "MIT",
@@ -28,19 +28,19 @@
28
28
  "dist"
29
29
  ],
30
30
  "peerDependencies": {
31
- "@knotx/plugins-canvas": "0.3.9"
31
+ "@knotx/plugins-canvas": "0.4.0"
32
32
  },
33
33
  "dependencies": {
34
- "@viselect/vanilla": "^3.9.0",
34
+ "@knotx/viselect": "^3.9.0",
35
35
  "rxjs": "^7.8.1",
36
- "@knotx/core": "0.3.9",
37
- "@knotx/decorators": "0.3.9"
36
+ "@knotx/core": "0.4.0",
37
+ "@knotx/decorators": "0.4.0"
38
38
  },
39
39
  "devDependencies": {
40
- "@knotx/build-config": "0.3.9",
41
- "@knotx/eslint-config": "0.3.9",
42
- "@knotx/plugins-canvas": "0.3.9",
43
- "@knotx/typescript-config": "0.3.9"
40
+ "@knotx/build-config": "0.4.0",
41
+ "@knotx/eslint-config": "0.4.0",
42
+ "@knotx/plugins-canvas": "0.4.0",
43
+ "@knotx/typescript-config": "0.4.0"
44
44
  },
45
45
  "scripts": {
46
46
  "build": "unbuild",