react-design-editor 0.0.37 → 0.0.38

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/lib/Canvas.d.ts +18 -0
  2. package/lib/Canvas.js +172 -0
  3. package/lib/CanvasObject.d.ts +10 -0
  4. package/lib/CanvasObject.js +96 -0
  5. package/lib/constants/code.d.ts +19 -0
  6. package/lib/constants/code.js +22 -0
  7. package/lib/constants/defaults.d.ts +38 -0
  8. package/lib/constants/defaults.js +69 -0
  9. package/lib/constants/index.d.ts +3 -0
  10. package/lib/constants/index.js +26 -0
  11. package/lib/handlers/AlignmentHandler.d.ts +18 -0
  12. package/lib/handlers/AlignmentHandler.js +58 -0
  13. package/lib/handlers/AnimationHandler.d.ts +50 -0
  14. package/lib/handlers/AnimationHandler.js +323 -0
  15. package/lib/handlers/ChartHandler.d.ts +8 -0
  16. package/lib/handlers/ChartHandler.js +8 -0
  17. package/lib/handlers/ContextmenuHandler.d.ts +28 -0
  18. package/lib/handlers/ContextmenuHandler.js +65 -0
  19. package/lib/handlers/CropHandler.d.ts +43 -0
  20. package/lib/handlers/CropHandler.js +261 -0
  21. package/lib/handlers/CustomHandler.d.ts +7 -0
  22. package/lib/handlers/CustomHandler.js +10 -0
  23. package/lib/handlers/DrawingHandler.d.ts +28 -0
  24. package/lib/handlers/DrawingHandler.js +318 -0
  25. package/lib/handlers/ElementHandler.d.ts +80 -0
  26. package/lib/handlers/ElementHandler.js +154 -0
  27. package/lib/handlers/EventHandler.d.ts +170 -0
  28. package/lib/handlers/EventHandler.js +880 -0
  29. package/lib/handlers/FiberHandler.d.ts +6 -0
  30. package/lib/handlers/FiberHandler.js +23 -0
  31. package/lib/handlers/GridHandler.d.ts +19 -0
  32. package/lib/handlers/GridHandler.js +77 -0
  33. package/lib/handlers/GuidelineHandler.d.ts +61 -0
  34. package/lib/handlers/GuidelineHandler.js +315 -0
  35. package/lib/handlers/Handler.d.ts +622 -0
  36. package/lib/handlers/Handler.js +1638 -0
  37. package/lib/handlers/ImageHandler.d.ts +307 -0
  38. package/lib/handlers/ImageHandler.js +529 -0
  39. package/lib/handlers/InteractionHandler.d.ts +45 -0
  40. package/lib/handlers/InteractionHandler.js +164 -0
  41. package/lib/handlers/LinkHandler.d.ts +115 -0
  42. package/lib/handlers/LinkHandler.js +247 -0
  43. package/lib/handlers/NodeHandler.d.ts +50 -0
  44. package/lib/handlers/NodeHandler.js +274 -0
  45. package/lib/handlers/PortHandler.d.ts +22 -0
  46. package/lib/handlers/PortHandler.js +179 -0
  47. package/lib/handlers/ShortcutHandler.d.ts +119 -0
  48. package/lib/handlers/ShortcutHandler.js +151 -0
  49. package/lib/handlers/TooltipHandler.d.ts +33 -0
  50. package/lib/handlers/TooltipHandler.js +91 -0
  51. package/lib/handlers/TransactionHandler.d.ts +59 -0
  52. package/lib/handlers/TransactionHandler.js +137 -0
  53. package/lib/handlers/WorkareaHandler.d.ts +43 -0
  54. package/lib/handlers/WorkareaHandler.js +354 -0
  55. package/lib/handlers/ZoomHandler.d.ts +48 -0
  56. package/lib/handlers/ZoomHandler.js +143 -0
  57. package/lib/handlers/index.d.ts +23 -0
  58. package/lib/handlers/index.js +48 -0
  59. package/lib/index.d.ts +6 -0
  60. package/lib/index.js +20 -0
  61. package/lib/objects/Arrow.d.ts +2 -0
  62. package/lib/objects/Arrow.js +40 -0
  63. package/lib/objects/Chart.d.ts +10 -0
  64. package/lib/objects/Chart.js +124 -0
  65. package/lib/objects/CirclePort.d.ts +2 -0
  66. package/lib/objects/CirclePort.js +28 -0
  67. package/lib/objects/Cube.d.ts +5 -0
  68. package/lib/objects/Cube.js +71 -0
  69. package/lib/objects/CurvedLink.d.ts +2 -0
  70. package/lib/objects/CurvedLink.js +51 -0
  71. package/lib/objects/Element.d.ts +13 -0
  72. package/lib/objects/Element.js +84 -0
  73. package/lib/objects/Gif.d.ts +3 -0
  74. package/lib/objects/Gif.js +41 -0
  75. package/lib/objects/Iframe.d.ts +9 -0
  76. package/lib/objects/Iframe.js +70 -0
  77. package/lib/objects/Line.d.ts +2 -0
  78. package/lib/objects/Line.js +24 -0
  79. package/lib/objects/Link.d.ts +15 -0
  80. package/lib/objects/Link.js +106 -0
  81. package/lib/objects/Node.d.ts +59 -0
  82. package/lib/objects/Node.js +271 -0
  83. package/lib/objects/OrthogonalLink.d.ts +2 -0
  84. package/lib/objects/OrthogonalLink.js +54 -0
  85. package/lib/objects/Port.d.ts +12 -0
  86. package/lib/objects/Port.js +28 -0
  87. package/lib/objects/Svg.d.ts +8 -0
  88. package/lib/objects/Svg.js +59 -0
  89. package/lib/objects/Video.d.ts +14 -0
  90. package/lib/objects/Video.js +120 -0
  91. package/lib/objects/index.d.ts +15 -0
  92. package/lib/objects/index.js +32 -0
  93. package/lib/utils/ObjectUtil.d.ts +407 -0
  94. package/lib/utils/ObjectUtil.js +13 -0
  95. package/lib/utils/index.d.ts +1 -0
  96. package/lib/utils/index.js +13 -0
  97. package/package.json +1 -1
@@ -0,0 +1,274 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const fabric_1 = require("fabric");
4
+ class NodeHandler {
5
+ constructor(handler) {
6
+ /**
7
+ * Get the node path by target object
8
+ * @param {NodeObject} target
9
+ * @param {NodeObject[]} [nodes=[]]
10
+ * @param {string} [direction='init']
11
+ */
12
+ this.getNodePath = (target, nodes = [], direction = 'init') => {
13
+ if (target) {
14
+ if (direction === 'to' || direction === 'init') {
15
+ if (target.toPort) {
16
+ target.toPort.links.forEach(link => {
17
+ if (link.fromNode) {
18
+ nodes.push(link.fromNode);
19
+ this.getNodePath(link.fromNode, nodes, 'to');
20
+ }
21
+ });
22
+ }
23
+ if (direction === 'init') {
24
+ nodes.push(target);
25
+ }
26
+ }
27
+ if (direction === 'from' || direction === 'init') {
28
+ target.fromPort.forEach(port => {
29
+ port.links.forEach(link => {
30
+ if (link.toNode) {
31
+ nodes.push(link.toNode);
32
+ this.getNodePath(link.toNode, nodes, 'from');
33
+ }
34
+ });
35
+ });
36
+ }
37
+ }
38
+ };
39
+ /**
40
+ * Select the node path
41
+ * @param {string[]} [path]
42
+ */
43
+ this.selectByPath = (path) => {
44
+ if (!path || !path.length) {
45
+ return;
46
+ }
47
+ const targetObjects = this.handler.objects.filter(object => path.some(id => id === object.id));
48
+ const nonTargetObjects = this.handler.objects.filter(object => path.some(id => id !== object.id));
49
+ nonTargetObjects.forEach((object) => {
50
+ if (object.superType === 'link') {
51
+ const { fromNode, toNode } = object;
52
+ if (fromNode && toNode) {
53
+ const fromIndex = targetObjects.findIndex(obj => obj.id === fromNode.id);
54
+ const toIndex = targetObjects.findIndex(obj => obj.id === toNode.id);
55
+ if (fromIndex >= 0 && targetObjects[fromIndex] && toIndex >= 0 && targetObjects[toIndex]) {
56
+ object.set({
57
+ opacity: 1,
58
+ shadow: {
59
+ color: object.stroke,
60
+ },
61
+ });
62
+ this.highlightingNode(object, 300);
63
+ this.handler.canvas.requestRenderAll();
64
+ return;
65
+ }
66
+ }
67
+ }
68
+ object.set({
69
+ opacity: 0.2,
70
+ });
71
+ if (object.superType === 'node') {
72
+ if (object.toPort) {
73
+ object.toPort.set({
74
+ opacity: 0.2,
75
+ });
76
+ }
77
+ object.fromPort.forEach((port) => {
78
+ port.set({
79
+ opacity: 0.2,
80
+ });
81
+ });
82
+ }
83
+ if (!object.animating) {
84
+ object.set('shadow', {
85
+ blur: 0,
86
+ });
87
+ }
88
+ });
89
+ targetObjects.forEach((object) => {
90
+ object.set({
91
+ opacity: 1,
92
+ shadow: {
93
+ color: object.stroke,
94
+ },
95
+ });
96
+ this.highlightingNode(object, 300);
97
+ if (object.toPort) {
98
+ object.toPort.set({
99
+ opacity: 1,
100
+ });
101
+ }
102
+ if (object.fromPort) {
103
+ object.fromPort.forEach((port) => {
104
+ port.set({
105
+ opacity: 1,
106
+ });
107
+ });
108
+ }
109
+ });
110
+ this.handler.canvas.requestRenderAll();
111
+ };
112
+ /**
113
+ * Select node by id
114
+ * @param {string} id
115
+ */
116
+ this.selectById = (id) => {
117
+ this.handler.objects.forEach((object) => {
118
+ if (id === object.id) {
119
+ object.set('shadow', {
120
+ color: object.stroke,
121
+ blur: 50,
122
+ });
123
+ return;
124
+ }
125
+ else if (id === object.nodeId) {
126
+ return;
127
+ }
128
+ object.set('shadow', {
129
+ blur: 0,
130
+ });
131
+ });
132
+ this.handler.canvas.requestRenderAll();
133
+ };
134
+ /**
135
+ * Deselect nodes
136
+ */
137
+ this.deselect = () => {
138
+ this.handler.objects.forEach((object) => {
139
+ object.set({
140
+ opacity: 1,
141
+ });
142
+ if (object.superType === 'node') {
143
+ const node = object;
144
+ if (node.toPort) {
145
+ node.toPort.set({
146
+ opacity: 1,
147
+ });
148
+ }
149
+ node.fromPort.forEach(port => {
150
+ port.set({
151
+ opacity: 1,
152
+ });
153
+ });
154
+ }
155
+ if (!object.animating) {
156
+ const node = object;
157
+ node.set('shadow', {
158
+ blur: 0,
159
+ });
160
+ }
161
+ });
162
+ this.handler.canvas.renderAll();
163
+ };
164
+ /**
165
+ * Highlight node path
166
+ * @param {string[]} [path]
167
+ */
168
+ this.highlightingByPath = (path) => {
169
+ if (!path || !path.length) {
170
+ return;
171
+ }
172
+ const targetObjects = this.handler.objects.filter((obj) => path.some(id => id === obj.id));
173
+ const nonTargetObjects = this.handler.objects.filter((obj) => path.some(id => id !== obj.id));
174
+ const lastObject = targetObjects.filter((obj) => obj.id === path[path.length - 1])[0];
175
+ targetObjects.forEach((object) => {
176
+ if (lastObject) {
177
+ object.set('shadow', {
178
+ color: lastObject.stroke,
179
+ });
180
+ }
181
+ else {
182
+ object.set('shadow', {
183
+ color: object.stroke,
184
+ });
185
+ }
186
+ this.highlightingNode(object);
187
+ this.handler.canvas.requestRenderAll();
188
+ });
189
+ nonTargetObjects.forEach((object) => {
190
+ if (object.superType === 'link') {
191
+ const { fromNode, toNode } = object;
192
+ if (fromNode && toNode) {
193
+ const fromIndex = targetObjects.findIndex((obj) => obj.id === fromNode.id);
194
+ const toIndex = targetObjects.findIndex((obj) => obj.id === toNode.id);
195
+ if (fromIndex >= 0 && targetObjects[fromIndex] && toIndex >= 0 && targetObjects[toIndex]) {
196
+ if (lastObject) {
197
+ object.set('shadow', {
198
+ color: lastObject.stroke,
199
+ });
200
+ }
201
+ else {
202
+ object.set('shadow', {
203
+ color: object.stroke,
204
+ });
205
+ }
206
+ this.highlightingNode(object);
207
+ this.highlightingLink(object, lastObject);
208
+ return;
209
+ }
210
+ }
211
+ }
212
+ });
213
+ this.handler.canvas.requestRenderAll();
214
+ };
215
+ /**
216
+ * Highlight link
217
+ * @param {FabricObject} object
218
+ * @param {FabricObject} targetObject
219
+ * @param {number} [duration=500]
220
+ */
221
+ this.highlightingLink = (object, targetObject, duration = 500) => {
222
+ object.animation = {
223
+ duration,
224
+ type: 'flash',
225
+ stroke: targetObject ? targetObject.stroke : object.stroke,
226
+ loop: 1,
227
+ delay: 0,
228
+ };
229
+ this.handler.animationHandler.play(object.id, false);
230
+ };
231
+ /**
232
+ * Highlight node
233
+ *
234
+ * @param {*} object
235
+ * @param {number} [duration=500]
236
+ * @param {number} [minBlur=0]
237
+ * @param {number} [maxBlur=50]
238
+ */
239
+ this.highlightingNode = (object, duration = 500, minBlur = 0, maxBlur = 50) => {
240
+ const onComplete = () => {
241
+ if (object.shadow.blur === maxBlur) {
242
+ object.animating = true;
243
+ object.animate('shadow.blur', minBlur, {
244
+ easing: fabric_1.fabric.util.ease.easeInOutQuad,
245
+ onChange: (value) => {
246
+ object.shadow.blur = value;
247
+ this.handler.canvas.requestRenderAll();
248
+ },
249
+ onComplete: () => {
250
+ object.animating = false;
251
+ if (object.superType === 'link') {
252
+ object.set({
253
+ stroke: object.originStroke,
254
+ });
255
+ }
256
+ },
257
+ });
258
+ }
259
+ };
260
+ object.animating = true;
261
+ object.animate('shadow.blur', maxBlur, {
262
+ easing: fabric_1.fabric.util.ease.easeInOutQuad,
263
+ duration,
264
+ onChange: (value) => {
265
+ object.shadow.blur = value;
266
+ this.handler.canvas.requestRenderAll();
267
+ },
268
+ onComplete,
269
+ });
270
+ };
271
+ this.handler = handler;
272
+ }
273
+ }
274
+ exports.default = NodeHandler;
@@ -0,0 +1,22 @@
1
+ import Handler from './Handler';
2
+ import { NodeObject } from '../objects/Node';
3
+ declare class PortHandler {
4
+ handler?: Handler;
5
+ constructor(handler: Handler);
6
+ /**
7
+ * Create port
8
+ * @param {NodeObject} target
9
+ */
10
+ create: (target: NodeObject) => void;
11
+ /**
12
+ * Set coords port
13
+ * @param {NodeObject} target
14
+ */
15
+ setCoords: (target: NodeObject) => void;
16
+ /**
17
+ * Recreate port
18
+ * @param {NodeObject} target
19
+ */
20
+ recreate: (target: NodeObject) => void;
21
+ }
22
+ export default PortHandler;
@@ -0,0 +1,179 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ class PortHandler {
4
+ constructor(handler) {
5
+ /**
6
+ * Create port
7
+ * @param {NodeObject} target
8
+ */
9
+ this.create = (target) => {
10
+ if (!target.createToPort) {
11
+ return;
12
+ }
13
+ const toPort = target.createToPort(target.left + target.width / 2, target.top);
14
+ if (toPort) {
15
+ toPort.on('mouseover', () => {
16
+ if (this.handler.interactionMode === 'link' &&
17
+ this.handler.activeLine &&
18
+ this.handler.activeLine.class === 'line') {
19
+ if (toPort.links.some(link => link.fromNode === this.handler.activeLine.fromNode)) {
20
+ toPort.set({
21
+ fill: 'red',
22
+ });
23
+ this.handler.canvas.renderAll();
24
+ return;
25
+ }
26
+ toPort.set({
27
+ fill: 'green',
28
+ });
29
+ this.handler.canvas.renderAll();
30
+ }
31
+ });
32
+ toPort.on('mouseout', () => {
33
+ toPort.set({
34
+ fill: toPort.originFill,
35
+ });
36
+ this.handler.canvas.renderAll();
37
+ });
38
+ this.handler.canvas.add(toPort);
39
+ toPort.setCoords();
40
+ this.handler.canvas.bringToFront(toPort);
41
+ }
42
+ const fromPort = target.createFromPort(target.left + target.width / 2, target.top + target.height);
43
+ if (fromPort && fromPort.length) {
44
+ fromPort.forEach(port => {
45
+ if (port) {
46
+ port.on('mouseover', () => {
47
+ if (this.handler.interactionMode !== 'link') {
48
+ if (port.enabled) {
49
+ if (this.handler.activeLine) {
50
+ port.set({
51
+ fill: 'red',
52
+ });
53
+ this.handler.canvas.renderAll();
54
+ return;
55
+ }
56
+ port.set({
57
+ fill: 'green',
58
+ });
59
+ this.handler.canvas.renderAll();
60
+ return;
61
+ }
62
+ port.set({
63
+ fill: 'red',
64
+ });
65
+ this.handler.canvas.renderAll();
66
+ }
67
+ });
68
+ port.on('mouseout', () => {
69
+ if (this.handler.interactionMode !== 'link') {
70
+ port.set({
71
+ fill: port.enabled ? port.originFill : port.hoverFill,
72
+ });
73
+ }
74
+ this.handler.canvas.renderAll();
75
+ });
76
+ this.handler.canvas.add(port);
77
+ port.setCoords();
78
+ this.handler.canvas.bringToFront(port);
79
+ }
80
+ });
81
+ }
82
+ };
83
+ /**
84
+ * Set coords port
85
+ * @param {NodeObject} target
86
+ */
87
+ this.setCoords = (target) => {
88
+ if (target.toPort) {
89
+ const toCoords = {
90
+ left: target.left + target.width / 2,
91
+ top: target.top,
92
+ };
93
+ target.toPort.set({
94
+ ...toCoords,
95
+ });
96
+ target.toPort.setCoords();
97
+ if (target.toPort.links.length) {
98
+ target.toPort.links.forEach(link => {
99
+ const fromPort = link.fromNode.fromPort.filter(port => port.id === link.fromPort.id)[0];
100
+ this.handler.linkHandler.setCoords(fromPort.left, fromPort.top, toCoords.left, toCoords.top, link);
101
+ });
102
+ }
103
+ }
104
+ if (target.fromPort) {
105
+ const fromCoords = {
106
+ left: target.left + target.width / 2,
107
+ top: target.top + target.height,
108
+ };
109
+ target.fromPort.forEach(port => {
110
+ const left = port.leftDiff ? fromCoords.left + port.leftDiff : fromCoords.left;
111
+ const top = port.topDiff ? fromCoords.top + port.topDiff : fromCoords.top;
112
+ port.set({
113
+ left,
114
+ top,
115
+ });
116
+ port.setCoords();
117
+ if (port.links.length) {
118
+ port.links.forEach(link => {
119
+ this.handler.linkHandler.setCoords(left, top, link.toNode.toPort.left, link.toNode.toPort.top, link);
120
+ });
121
+ }
122
+ });
123
+ }
124
+ };
125
+ /**
126
+ * Recreate port
127
+ * @param {NodeObject} target
128
+ */
129
+ this.recreate = (target) => {
130
+ const { fromPort, toPort } = target;
131
+ const ports = target.ports;
132
+ if (ports) {
133
+ ports.forEach(port => {
134
+ target.removeWithUpdate(port);
135
+ this.handler.canvas.remove(port.fromPort);
136
+ });
137
+ }
138
+ this.handler.canvas.remove(target.toPort);
139
+ if (target.toPort) {
140
+ target.toPort.links.forEach(link => {
141
+ this.handler.linkHandler.remove(link, 'from');
142
+ });
143
+ }
144
+ if (target.fromPort) {
145
+ target.fromPort.forEach((port) => {
146
+ if (port.links.length) {
147
+ port.links.forEach((link) => {
148
+ this.handler.linkHandler.remove(link, 'to');
149
+ });
150
+ }
151
+ });
152
+ }
153
+ this.create(target);
154
+ toPort.links.forEach((link) => {
155
+ link.fromNode = link.fromNode.id;
156
+ link.fromPort = link.fromPort.id;
157
+ link.toNode = target.toPort.nodeId;
158
+ link.toPort = target.toPort.id;
159
+ this.handler.linkHandler.create(link);
160
+ });
161
+ fromPort
162
+ .filter(op => target.fromPort.some(np => np.id === op.id))
163
+ .forEach(port => {
164
+ port.links.forEach((link) => {
165
+ if (link.fromPort.id === port.id) {
166
+ link.fromNode = port.nodeId;
167
+ link.fromPort = port.id;
168
+ link.toNode = link.toNode.id;
169
+ link.toPort = link.toPort.id;
170
+ this.handler.linkHandler.create(link);
171
+ this.setCoords(target);
172
+ }
173
+ });
174
+ });
175
+ };
176
+ this.handler = handler;
177
+ }
178
+ }
179
+ exports.default = PortHandler;
@@ -0,0 +1,119 @@
1
+ import Handler from './Handler';
2
+ import { KeyEvent } from '../utils';
3
+ /**
4
+ * Shortcut Handler Class
5
+ *
6
+ * @author salgum1114
7
+ * @class ShortcutHandler
8
+ */
9
+ declare class ShortcutHandler {
10
+ handler: Handler;
11
+ keyEvent: KeyEvent;
12
+ constructor(handler: Handler);
13
+ /**
14
+ * Whether keydown Escape
15
+ *
16
+ * @param {KeyboardEvent} e
17
+ * @returns
18
+ */
19
+ isEscape: (e: KeyboardEvent) => boolean;
20
+ /**
21
+ * Whether keydown Q
22
+ *
23
+ * @param {KeyboardEvent} e
24
+ * @returns
25
+ */
26
+ isQ: (e: KeyboardEvent) => boolean;
27
+ /**
28
+ * Whether keydown W
29
+ *
30
+ * @param {KeyboardEvent} e
31
+ * @returns
32
+ */
33
+ isW: (e: KeyboardEvent) => boolean;
34
+ /**
35
+ * Whether keydown Delete or Backpsace
36
+ *
37
+ * @param {KeyboardEvent} e
38
+ * @returns
39
+ */
40
+ isDelete: (e: KeyboardEvent) => boolean;
41
+ /**
42
+ * Whether keydown Arrow
43
+ *
44
+ * @param {KeyboardEvent} e
45
+ * @returns
46
+ */
47
+ isArrow: (e: KeyboardEvent) => boolean;
48
+ /**
49
+ * Whether keydown Ctrl + A
50
+ *
51
+ * @param {KeyboardEvent} e
52
+ * @returns
53
+ */
54
+ isCtrlA: (e: KeyboardEvent) => boolean;
55
+ /**
56
+ * Whether keydown Ctrl + C
57
+ *
58
+ * @param {KeyboardEvent} e
59
+ * @returns
60
+ */
61
+ isCtrlC: (e: KeyboardEvent) => boolean;
62
+ /**
63
+ * Whether keydown Ctrl + V
64
+ *
65
+ * @param {KeyboardEvent} e
66
+ * @returns
67
+ */
68
+ isCtrlV: (e: KeyboardEvent) => boolean;
69
+ /**
70
+ * Whether keydown Ctrl + Z
71
+ *
72
+ * @param {KeyboardEvent} e
73
+ * @returns
74
+ */
75
+ isCtrlZ: (e: KeyboardEvent) => boolean;
76
+ /**
77
+ * Whether keydown Ctrl + Y
78
+ *
79
+ * @param {KeyboardEvent} e
80
+ * @returns
81
+ */
82
+ isCtrlY: (e: KeyboardEvent) => boolean;
83
+ /**
84
+ * Whether keydown Plus Or Equal
85
+ *
86
+ * @param {KeyboardEvent} e
87
+ * @returns
88
+ */
89
+ isPlus: (e: KeyboardEvent) => boolean;
90
+ /**
91
+ * Whether keydown Minus
92
+ *
93
+ * @param {KeyboardEvent} e
94
+ * @returns
95
+ */
96
+ isMinus: (e: KeyboardEvent) => boolean;
97
+ /**
98
+ * Whether keydown O
99
+ *
100
+ * @param {KeyboardEvent} e
101
+ * @returns
102
+ */
103
+ isO: (e: KeyboardEvent) => boolean;
104
+ /**
105
+ * Whether keydown P
106
+ *
107
+ * @param {KeyboardEvent} e
108
+ * @returns
109
+ */
110
+ isP: (e: KeyboardEvent) => boolean;
111
+ /**
112
+ * Whether keydown Ctrl + X
113
+ *
114
+ * @param {KeyboardEvent} e
115
+ * @returns
116
+ */
117
+ isCtrlX: (e: KeyboardEvent) => boolean;
118
+ }
119
+ export default ShortcutHandler;