@knotx/plugins-canvas 0.2.9 → 0.2.11

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,8 +75,8 @@ 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, _container_dec, _getNode_dec, _transform_dec, _ref_dec, _a, _init;
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()], _scrollNodeIntoView_dec = [decorators.tool("Scroll node into viewport center", {
78
+ var _init_dec, _render_dec, _scrollNodeIntoView_dec, _removeListener_dec, _addListener_dec, _container_dec, _getNode_dec, _transform_dec, _ref_dec, _a, _init;
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" },
@@ -94,6 +94,16 @@ class Canvas extends (_a = core.BasePlugin, _ref_dec = [decorators.register("ref
94
94
  __publicField(this, "transform", __runInitializers(_init, 12, this)), __runInitializers(_init, 15, this);
95
95
  __publicField(this, "getNode", __runInitializers(_init, 16, this)), __runInitializers(_init, 19, this);
96
96
  __publicField(this, "container", __runInitializers(_init, 20, this)), __runInitializers(_init, 23, this);
97
+ __publicField(this, "listeners", {
98
+ click: /* @__PURE__ */ new Set(),
99
+ contextmenu: /* @__PURE__ */ new Set()
100
+ });
101
+ __publicField(this, "addListener", __runInitializers(_init, 24, this, (type, listener) => {
102
+ this.listeners[type].add(listener);
103
+ })), __runInitializers(_init, 27, this);
104
+ __publicField(this, "removeListener", __runInitializers(_init, 28, this, (type, listener) => {
105
+ this.listeners[type].delete(listener);
106
+ })), __runInitializers(_init, 31, this);
97
107
  }
98
108
  scrollNodeIntoView({ nodeId, scale = this.transform.scale, animationTime }) {
99
109
  var _a2, _b, _c, _d, _e;
@@ -154,6 +164,22 @@ class Canvas extends (_a = core.BasePlugin, _ref_dec = [decorators.register("ref
154
164
  });
155
165
  });
156
166
  }, [transform]);
167
+ const onClick = react.useCallback((e) => {
168
+ if (!this.isCanvasEvent(e)) {
169
+ return;
170
+ }
171
+ this.listeners.click.forEach((listener) => {
172
+ listener(e);
173
+ });
174
+ }, []);
175
+ const onContextMenu = react.useCallback((e) => {
176
+ if (!this.isCanvasEvent(e)) {
177
+ return;
178
+ }
179
+ this.listeners.contextmenu.forEach((listener) => {
180
+ listener(e);
181
+ });
182
+ }, []);
157
183
  return /* @__PURE__ */ jsxRuntime.jsxs(
158
184
  reactZoomPanPinch.TransformWrapper,
159
185
  __spreadProps(__spreadValues({}, this.config), {
@@ -170,6 +196,10 @@ class Canvas extends (_a = core.BasePlugin, _ref_dec = [decorators.register("ref
170
196
  zIndex: core.Layer.Nodes | core.Layer.Edges,
171
197
  contain: "strict"
172
198
  },
199
+ wrapperProps: {
200
+ onClick,
201
+ onContextMenu
202
+ },
173
203
  contentClass: core.bem(this.name, "content"),
174
204
  contentStyle: {
175
205
  position: "relative",
@@ -196,6 +226,12 @@ class Canvas extends (_a = core.BasePlugin, _ref_dec = [decorators.register("ref
196
226
  positionX: config.initialPositionX || 0,
197
227
  positionY: config.initialPositionY || 0
198
228
  };
229
+ this.subscriptions.push(() => {
230
+ Object.values(this.listeners).forEach((set) => set.clear());
231
+ });
232
+ }
233
+ isCanvasEvent(e) {
234
+ return e.target === e.currentTarget || e.target.classList.contains(core.bem(this.name, "content"));
199
235
  }
200
236
  }
201
237
  _init = __decoratorStart(_a);
@@ -206,6 +242,8 @@ __decorateElement(_init, 5, "ref", _ref_dec, Canvas);
206
242
  __decorateElement(_init, 5, "transform", _transform_dec, Canvas);
207
243
  __decorateElement(_init, 5, "getNode", _getNode_dec, Canvas);
208
244
  __decorateElement(_init, 5, "container", _container_dec, Canvas);
245
+ __decorateElement(_init, 5, "addListener", _addListener_dec, Canvas);
246
+ __decorateElement(_init, 5, "removeListener", _removeListener_dec, Canvas);
209
247
  __decoratorMetadata(_init, Canvas);
210
248
 
211
249
  exports.Canvas = Canvas;
package/dist/index.d.cts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { InferParamsFromSchema } from '@knotx/decorators';
2
- import { ReactNode } from 'react';
2
+ import { MouseEvent, ReactNode } from 'react';
3
3
  import { ReactZoomPanPinchContentRef, ReactZoomPanPinchState, ReactZoomPanPinchProps } from 'react-zoom-pan-pinch';
4
4
  import { BasePlugin } from '@knotx/core';
5
5
 
@@ -11,6 +11,8 @@ declare module '@knotx/core' {
11
11
  canvas: {
12
12
  ref: CanvasRef | null;
13
13
  transform: CanvasTransformState;
14
+ addListener: (event: CanvasEventType, listener: CanvasEventListener) => void;
15
+ removeListener: (event: CanvasEventType, listener: CanvasEventListener) => void;
14
16
  };
15
17
  }
16
18
  interface PluginTools {
@@ -23,6 +25,8 @@ declare module '@knotx/core' {
23
25
  };
24
26
  }
25
27
  }
28
+ type CanvasEventType = 'click' | 'contextmenu';
29
+ type CanvasEventListener = (event: MouseEvent<HTMLElement>) => void;
26
30
  declare class Canvas extends BasePlugin<'canvas', CanvasConfig> {
27
31
  private config;
28
32
  name: "canvas";
@@ -30,6 +34,9 @@ declare class Canvas extends BasePlugin<'canvas', CanvasConfig> {
30
34
  transform: CanvasTransformState;
31
35
  private getNode;
32
36
  private container;
37
+ private listeners;
38
+ addListener: (event: CanvasEventType, listener: CanvasEventListener) => void;
39
+ removeListener: (event: CanvasEventType, listener: CanvasEventListener) => void;
33
40
  scrollNodeIntoView({ nodeId, scale, animationTime }: InferParamsFromSchema<{
34
41
  type: 'object';
35
42
  properties: {
@@ -49,6 +56,7 @@ declare class Canvas extends BasePlugin<'canvas', CanvasConfig> {
49
56
  children: ReactNode;
50
57
  }): JSX.Element;
51
58
  init(config: CanvasConfig): void;
59
+ private isCanvasEvent;
52
60
  }
53
61
 
54
- export { Canvas, type CanvasConfig, type CanvasRef, type CanvasTransformState };
62
+ export { Canvas, type CanvasConfig, type CanvasEventListener, type CanvasEventType, type CanvasRef, type CanvasTransformState };
package/dist/index.d.mts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { InferParamsFromSchema } from '@knotx/decorators';
2
- import { ReactNode } from 'react';
2
+ import { MouseEvent, ReactNode } from 'react';
3
3
  import { ReactZoomPanPinchContentRef, ReactZoomPanPinchState, ReactZoomPanPinchProps } from 'react-zoom-pan-pinch';
4
4
  import { BasePlugin } from '@knotx/core';
5
5
 
@@ -11,6 +11,8 @@ declare module '@knotx/core' {
11
11
  canvas: {
12
12
  ref: CanvasRef | null;
13
13
  transform: CanvasTransformState;
14
+ addListener: (event: CanvasEventType, listener: CanvasEventListener) => void;
15
+ removeListener: (event: CanvasEventType, listener: CanvasEventListener) => void;
14
16
  };
15
17
  }
16
18
  interface PluginTools {
@@ -23,6 +25,8 @@ declare module '@knotx/core' {
23
25
  };
24
26
  }
25
27
  }
28
+ type CanvasEventType = 'click' | 'contextmenu';
29
+ type CanvasEventListener = (event: MouseEvent<HTMLElement>) => void;
26
30
  declare class Canvas extends BasePlugin<'canvas', CanvasConfig> {
27
31
  private config;
28
32
  name: "canvas";
@@ -30,6 +34,9 @@ declare class Canvas extends BasePlugin<'canvas', CanvasConfig> {
30
34
  transform: CanvasTransformState;
31
35
  private getNode;
32
36
  private container;
37
+ private listeners;
38
+ addListener: (event: CanvasEventType, listener: CanvasEventListener) => void;
39
+ removeListener: (event: CanvasEventType, listener: CanvasEventListener) => void;
33
40
  scrollNodeIntoView({ nodeId, scale, animationTime }: InferParamsFromSchema<{
34
41
  type: 'object';
35
42
  properties: {
@@ -49,6 +56,7 @@ declare class Canvas extends BasePlugin<'canvas', CanvasConfig> {
49
56
  children: ReactNode;
50
57
  }): JSX.Element;
51
58
  init(config: CanvasConfig): void;
59
+ private isCanvasEvent;
52
60
  }
53
61
 
54
- export { Canvas, type CanvasConfig, type CanvasRef, type CanvasTransformState };
62
+ export { Canvas, type CanvasConfig, type CanvasEventListener, type CanvasEventType, type CanvasRef, type CanvasTransformState };
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { InferParamsFromSchema } from '@knotx/decorators';
2
- import { ReactNode } from 'react';
2
+ import { MouseEvent, ReactNode } from 'react';
3
3
  import { ReactZoomPanPinchContentRef, ReactZoomPanPinchState, ReactZoomPanPinchProps } from 'react-zoom-pan-pinch';
4
4
  import { BasePlugin } from '@knotx/core';
5
5
 
@@ -11,6 +11,8 @@ declare module '@knotx/core' {
11
11
  canvas: {
12
12
  ref: CanvasRef | null;
13
13
  transform: CanvasTransformState;
14
+ addListener: (event: CanvasEventType, listener: CanvasEventListener) => void;
15
+ removeListener: (event: CanvasEventType, listener: CanvasEventListener) => void;
14
16
  };
15
17
  }
16
18
  interface PluginTools {
@@ -23,6 +25,8 @@ declare module '@knotx/core' {
23
25
  };
24
26
  }
25
27
  }
28
+ type CanvasEventType = 'click' | 'contextmenu';
29
+ type CanvasEventListener = (event: MouseEvent<HTMLElement>) => void;
26
30
  declare class Canvas extends BasePlugin<'canvas', CanvasConfig> {
27
31
  private config;
28
32
  name: "canvas";
@@ -30,6 +34,9 @@ declare class Canvas extends BasePlugin<'canvas', CanvasConfig> {
30
34
  transform: CanvasTransformState;
31
35
  private getNode;
32
36
  private container;
37
+ private listeners;
38
+ addListener: (event: CanvasEventType, listener: CanvasEventListener) => void;
39
+ removeListener: (event: CanvasEventType, listener: CanvasEventListener) => void;
33
40
  scrollNodeIntoView({ nodeId, scale, animationTime }: InferParamsFromSchema<{
34
41
  type: 'object';
35
42
  properties: {
@@ -49,6 +56,7 @@ declare class Canvas extends BasePlugin<'canvas', CanvasConfig> {
49
56
  children: ReactNode;
50
57
  }): JSX.Element;
51
58
  init(config: CanvasConfig): void;
59
+ private isCanvasEvent;
52
60
  }
53
61
 
54
- export { Canvas, type CanvasConfig, type CanvasRef, type CanvasTransformState };
62
+ export { Canvas, type CanvasConfig, type CanvasEventListener, type CanvasEventType, type CanvasRef, type CanvasTransformState };
package/dist/index.js CHANGED
@@ -2,7 +2,7 @@ import { jsxs, jsx } from '@knotx/jsx/jsx-runtime';
2
2
  import { Layer, bem, BasePlugin } from '@knotx/core';
3
3
  import { register, inject, tool, layer, OnInit } from '@knotx/decorators';
4
4
  import { merge } from 'lodash-es';
5
- import { useState, useMemo, useEffect, Fragment } from 'react';
5
+ import { useState, useMemo, useEffect, useCallback, Fragment } from 'react';
6
6
  import { TransformWrapper, TransformComponent } from 'react-zoom-pan-pinch';
7
7
 
8
8
  var __create = Object.create;
@@ -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 _init_dec, _render_dec, _scrollNodeIntoView_dec, _container_dec, _getNode_dec, _transform_dec, _ref_dec, _a, _init;
77
- class Canvas extends (_a = BasePlugin, _ref_dec = [register("ref")], _transform_dec = [register("transform")], _getNode_dec = [inject.getNode()], _container_dec = [inject.container()], _scrollNodeIntoView_dec = [tool("Scroll node into viewport center", {
76
+ var _init_dec, _render_dec, _scrollNodeIntoView_dec, _removeListener_dec, _addListener_dec, _container_dec, _getNode_dec, _transform_dec, _ref_dec, _a, _init;
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" },
@@ -92,6 +92,16 @@ class Canvas extends (_a = BasePlugin, _ref_dec = [register("ref")], _transform_
92
92
  __publicField(this, "transform", __runInitializers(_init, 12, this)), __runInitializers(_init, 15, this);
93
93
  __publicField(this, "getNode", __runInitializers(_init, 16, this)), __runInitializers(_init, 19, this);
94
94
  __publicField(this, "container", __runInitializers(_init, 20, this)), __runInitializers(_init, 23, this);
95
+ __publicField(this, "listeners", {
96
+ click: /* @__PURE__ */ new Set(),
97
+ contextmenu: /* @__PURE__ */ new Set()
98
+ });
99
+ __publicField(this, "addListener", __runInitializers(_init, 24, this, (type, listener) => {
100
+ this.listeners[type].add(listener);
101
+ })), __runInitializers(_init, 27, this);
102
+ __publicField(this, "removeListener", __runInitializers(_init, 28, this, (type, listener) => {
103
+ this.listeners[type].delete(listener);
104
+ })), __runInitializers(_init, 31, this);
95
105
  }
96
106
  scrollNodeIntoView({ nodeId, scale = this.transform.scale, animationTime }) {
97
107
  var _a2, _b, _c, _d, _e;
@@ -152,6 +162,22 @@ class Canvas extends (_a = BasePlugin, _ref_dec = [register("ref")], _transform_
152
162
  });
153
163
  });
154
164
  }, [transform]);
165
+ const onClick = useCallback((e) => {
166
+ if (!this.isCanvasEvent(e)) {
167
+ return;
168
+ }
169
+ this.listeners.click.forEach((listener) => {
170
+ listener(e);
171
+ });
172
+ }, []);
173
+ const onContextMenu = useCallback((e) => {
174
+ if (!this.isCanvasEvent(e)) {
175
+ return;
176
+ }
177
+ this.listeners.contextmenu.forEach((listener) => {
178
+ listener(e);
179
+ });
180
+ }, []);
155
181
  return /* @__PURE__ */ jsxs(
156
182
  TransformWrapper,
157
183
  __spreadProps(__spreadValues({}, this.config), {
@@ -168,6 +194,10 @@ class Canvas extends (_a = BasePlugin, _ref_dec = [register("ref")], _transform_
168
194
  zIndex: Layer.Nodes | Layer.Edges,
169
195
  contain: "strict"
170
196
  },
197
+ wrapperProps: {
198
+ onClick,
199
+ onContextMenu
200
+ },
171
201
  contentClass: bem(this.name, "content"),
172
202
  contentStyle: {
173
203
  position: "relative",
@@ -194,6 +224,12 @@ class Canvas extends (_a = BasePlugin, _ref_dec = [register("ref")], _transform_
194
224
  positionX: config.initialPositionX || 0,
195
225
  positionY: config.initialPositionY || 0
196
226
  };
227
+ this.subscriptions.push(() => {
228
+ Object.values(this.listeners).forEach((set) => set.clear());
229
+ });
230
+ }
231
+ isCanvasEvent(e) {
232
+ return e.target === e.currentTarget || e.target.classList.contains(bem(this.name, "content"));
197
233
  }
198
234
  }
199
235
  _init = __decoratorStart(_a);
@@ -204,6 +240,8 @@ __decorateElement(_init, 5, "ref", _ref_dec, Canvas);
204
240
  __decorateElement(_init, 5, "transform", _transform_dec, Canvas);
205
241
  __decorateElement(_init, 5, "getNode", _getNode_dec, Canvas);
206
242
  __decorateElement(_init, 5, "container", _container_dec, Canvas);
243
+ __decorateElement(_init, 5, "addListener", _addListener_dec, Canvas);
244
+ __decorateElement(_init, 5, "removeListener", _removeListener_dec, Canvas);
207
245
  __decoratorMetadata(_init, Canvas);
208
246
 
209
247
  export { Canvas };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@knotx/plugins-canvas",
3
- "version": "0.2.9",
3
+ "version": "0.2.11",
4
4
  "description": "Canvas Plugin for Knotx",
5
5
  "author": "boenfu",
6
6
  "license": "MIT",
@@ -29,26 +29,23 @@
29
29
  ],
30
30
  "peerDependencies": {
31
31
  "react": ">=17.0.0",
32
- "react-dom": ">=17.0.0",
33
- "@knotx/jsx": "0.2.9"
32
+ "@knotx/jsx": "0.2.10"
34
33
  },
35
34
  "dependencies": {
36
35
  "lodash-es": "^4.17.21",
37
36
  "react-zoom-pan-pinch": "^3.7.0",
38
37
  "rxjs": "^7.8.1",
39
- "@knotx/core": "0.2.9",
40
- "@knotx/decorators": "0.2.9"
38
+ "@knotx/core": "0.2.10",
39
+ "@knotx/decorators": "0.2.11"
41
40
  },
42
41
  "devDependencies": {
43
42
  "@types/lodash-es": "^4.17.12",
44
43
  "@types/react": "^17.0.0",
45
- "@types/react-dom": "^17.0.0",
46
44
  "react": "^17.0.0",
47
- "react-dom": "^17.0.0",
48
- "@knotx/build-config": "0.2.9",
49
- "@knotx/eslint-config": "0.2.9",
50
- "@knotx/jsx": "0.2.9",
51
- "@knotx/typescript-config": "0.2.9"
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"
52
49
  },
53
50
  "scripts": {
54
51
  "build": "unbuild",