react-design-editor 0.0.50 → 0.0.52

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 (100) hide show
  1. package/dist/react-design-editor.js +7739 -7114
  2. package/dist/react-design-editor.min.js +1 -1
  3. package/dist/react-design-editor.min.js.LICENSE.txt +2 -0
  4. package/lib/Canvas.d.ts +18 -18
  5. package/lib/Canvas.js +172 -172
  6. package/lib/CanvasObject.d.ts +10 -10
  7. package/lib/CanvasObject.js +96 -96
  8. package/lib/constants/code.d.ts +19 -19
  9. package/lib/constants/code.js +22 -22
  10. package/lib/constants/defaults.d.ts +38 -38
  11. package/lib/constants/defaults.js +69 -69
  12. package/lib/constants/index.d.ts +3 -3
  13. package/lib/constants/index.js +26 -26
  14. package/lib/handlers/AlignmentHandler.d.ts +18 -18
  15. package/lib/handlers/AlignmentHandler.js +58 -58
  16. package/lib/handlers/AnimationHandler.d.ts +50 -50
  17. package/lib/handlers/AnimationHandler.js +346 -346
  18. package/lib/handlers/ChartHandler.d.ts +8 -8
  19. package/lib/handlers/ChartHandler.js +8 -8
  20. package/lib/handlers/ContextmenuHandler.d.ts +28 -28
  21. package/lib/handlers/ContextmenuHandler.js +65 -65
  22. package/lib/handlers/CropHandler.d.ts +43 -43
  23. package/lib/handlers/CropHandler.js +261 -261
  24. package/lib/handlers/CustomHandler.d.ts +7 -7
  25. package/lib/handlers/CustomHandler.js +10 -10
  26. package/lib/handlers/DrawingHandler.d.ts +28 -28
  27. package/lib/handlers/DrawingHandler.js +318 -318
  28. package/lib/handlers/ElementHandler.d.ts +80 -80
  29. package/lib/handlers/ElementHandler.js +154 -154
  30. package/lib/handlers/EventHandler.d.ts +170 -170
  31. package/lib/handlers/EventHandler.js +880 -880
  32. package/lib/handlers/FiberHandler.d.ts +6 -6
  33. package/lib/handlers/FiberHandler.js +23 -23
  34. package/lib/handlers/GridHandler.d.ts +19 -19
  35. package/lib/handlers/GridHandler.js +77 -77
  36. package/lib/handlers/GuidelineHandler.d.ts +61 -61
  37. package/lib/handlers/GuidelineHandler.js +315 -315
  38. package/lib/handlers/Handler.d.ts +618 -618
  39. package/lib/handlers/Handler.js +1645 -1645
  40. package/lib/handlers/ImageHandler.d.ts +307 -307
  41. package/lib/handlers/ImageHandler.js +528 -528
  42. package/lib/handlers/InteractionHandler.d.ts +45 -45
  43. package/lib/handlers/InteractionHandler.js +168 -164
  44. package/lib/handlers/LinkHandler.d.ts +115 -115
  45. package/lib/handlers/LinkHandler.js +247 -247
  46. package/lib/handlers/NodeHandler.d.ts +50 -50
  47. package/lib/handlers/NodeHandler.js +274 -274
  48. package/lib/handlers/PortHandler.d.ts +22 -22
  49. package/lib/handlers/PortHandler.js +179 -179
  50. package/lib/handlers/ShortcutHandler.d.ts +119 -119
  51. package/lib/handlers/ShortcutHandler.js +151 -151
  52. package/lib/handlers/TooltipHandler.d.ts +33 -33
  53. package/lib/handlers/TooltipHandler.js +91 -91
  54. package/lib/handlers/TransactionHandler.d.ts +59 -59
  55. package/lib/handlers/TransactionHandler.js +137 -137
  56. package/lib/handlers/WorkareaHandler.d.ts +43 -43
  57. package/lib/handlers/WorkareaHandler.js +354 -354
  58. package/lib/handlers/ZoomHandler.d.ts +48 -48
  59. package/lib/handlers/ZoomHandler.js +143 -143
  60. package/lib/handlers/index.d.ts +23 -23
  61. package/lib/handlers/index.js +48 -48
  62. package/lib/index.d.ts +6 -6
  63. package/lib/index.js +20 -20
  64. package/lib/objects/Arrow.d.ts +2 -2
  65. package/lib/objects/Arrow.js +40 -40
  66. package/lib/objects/Chart.d.ts +10 -10
  67. package/lib/objects/Chart.js +117 -117
  68. package/lib/objects/CirclePort.d.ts +2 -2
  69. package/lib/objects/CirclePort.js +28 -28
  70. package/lib/objects/Cube.d.ts +5 -5
  71. package/lib/objects/Cube.js +71 -71
  72. package/lib/objects/CurvedLink.d.ts +2 -2
  73. package/lib/objects/CurvedLink.js +51 -51
  74. package/lib/objects/Element.d.ts +13 -13
  75. package/lib/objects/Element.js +77 -77
  76. package/lib/objects/Gif.d.ts +3 -3
  77. package/lib/objects/Gif.js +41 -41
  78. package/lib/objects/Iframe.d.ts +9 -9
  79. package/lib/objects/Iframe.js +63 -63
  80. package/lib/objects/Line.d.ts +2 -2
  81. package/lib/objects/Line.js +24 -24
  82. package/lib/objects/Link.d.ts +15 -15
  83. package/lib/objects/Link.js +107 -107
  84. package/lib/objects/Node.d.ts +59 -59
  85. package/lib/objects/Node.js +271 -271
  86. package/lib/objects/OrthogonalLink.d.ts +2 -2
  87. package/lib/objects/OrthogonalLink.js +54 -54
  88. package/lib/objects/Port.d.ts +12 -12
  89. package/lib/objects/Port.js +28 -28
  90. package/lib/objects/Svg.d.ts +12 -12
  91. package/lib/objects/Svg.js +93 -93
  92. package/lib/objects/Video.d.ts +14 -14
  93. package/lib/objects/Video.js +113 -113
  94. package/lib/objects/index.d.ts +15 -15
  95. package/lib/objects/index.js +32 -32
  96. package/lib/utils/ObjectUtil.d.ts +408 -408
  97. package/lib/utils/ObjectUtil.js +13 -13
  98. package/lib/utils/index.d.ts +1 -1
  99. package/lib/utils/index.js +13 -13
  100. package/package.json +1 -1
@@ -1,354 +1,354 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const fabric_1 = require("fabric");
4
- class WorkareaHandler {
5
- constructor(handler) {
6
- /**
7
- * Set the layout on workarea
8
- * @param {WorkareaLayout} layout
9
- * @returns
10
- */
11
- this.setLayout = (layout) => {
12
- this.handler.workarea.set('layout', layout);
13
- const { _element, isElement, workareaWidth, workareaHeight } = this.handler.workarea;
14
- const { canvas } = this.handler;
15
- let scaleX = 1;
16
- let scaleY = 1;
17
- const isFixed = layout === 'fixed';
18
- const isResponsive = layout === 'responsive';
19
- const isFullscreen = layout === 'fullscreen';
20
- if (isElement) {
21
- if (isFixed) {
22
- scaleX = workareaWidth / _element.width;
23
- scaleY = workareaHeight / _element.height;
24
- }
25
- else if (isResponsive) {
26
- const scales = this.calculateScale();
27
- scaleX = scales.scaleX;
28
- scaleY = scales.scaleY;
29
- }
30
- else {
31
- scaleX = canvas.getWidth() / _element.width;
32
- scaleY = canvas.getHeight() / _element.height;
33
- }
34
- }
35
- this.handler.getObjects().forEach(obj => {
36
- const { id, player } = obj;
37
- if (id !== 'workarea') {
38
- const objScaleX = !isFullscreen ? 1 : scaleX;
39
- const objScaleY = !isFullscreen ? 1 : scaleY;
40
- const objWidth = obj.width * objScaleX * canvas.getZoom();
41
- const objHeight = obj.height * objScaleY * canvas.getZoom();
42
- const el = this.handler.elementHandler.findById(obj.id);
43
- this.handler.elementHandler.setSize(el, obj);
44
- if (player) {
45
- player.setPlayerSize(objWidth, objHeight);
46
- }
47
- obj.set({
48
- scaleX: !isFullscreen ? 1 : objScaleX,
49
- scaleY: !isFullscreen ? 1 : objScaleY,
50
- });
51
- }
52
- });
53
- if (isResponsive) {
54
- const center = canvas.getCenter();
55
- if (isElement) {
56
- this.handler.workarea.set({
57
- scaleX: 1,
58
- scaleY: 1,
59
- });
60
- this.handler.zoomHandler.zoomToPoint(new fabric_1.fabric.Point(center.left, center.top), scaleX);
61
- }
62
- else {
63
- this.handler.workarea.set({
64
- width: workareaWidth,
65
- height: workareaHeight,
66
- });
67
- scaleX = canvas.getWidth() / workareaWidth;
68
- scaleY = canvas.getHeight() / workareaHeight;
69
- if (workareaHeight >= workareaWidth) {
70
- scaleX = scaleY;
71
- }
72
- else {
73
- scaleY = scaleX;
74
- }
75
- this.handler.zoomHandler.zoomToPoint(new fabric_1.fabric.Point(center.left, center.top), scaleX);
76
- }
77
- canvas.centerObject(this.handler.workarea);
78
- canvas.renderAll();
79
- return;
80
- }
81
- if (isElement) {
82
- this.handler.workarea.set({
83
- width: _element.width,
84
- height: _element.height,
85
- scaleX,
86
- scaleY,
87
- });
88
- }
89
- else {
90
- const width = isFixed ? workareaWidth : this.handler.canvas.getWidth();
91
- const height = isFixed ? workareaHeight : this.handler.canvas.getHeight();
92
- this.handler.workarea.set({
93
- width,
94
- height,
95
- backgroundColor: 'rgba(255, 255, 255, 1)',
96
- });
97
- this.handler.canvas.renderAll();
98
- if (isFixed) {
99
- canvas.centerObject(this.handler.workarea);
100
- }
101
- else {
102
- this.handler.workarea.set({
103
- left: 0,
104
- top: 0,
105
- });
106
- }
107
- }
108
- canvas.centerObject(this.handler.workarea);
109
- const center = canvas.getCenter();
110
- canvas.setViewportTransform([1, 0, 0, 1, 0, 0]);
111
- this.handler.zoomHandler.zoomToPoint(new fabric_1.fabric.Point(center.left, center.top), 1);
112
- canvas.renderAll();
113
- };
114
- /**
115
- * Set the responsive image on Workarea
116
- * @param {string | File} [source]
117
- * @param {boolean} [loaded]
118
- * @returns
119
- */
120
- this.setResponsiveImage = async (source, loaded) => {
121
- const imageFromUrl = async (src = '') => {
122
- return new Promise(resolve => {
123
- fabric_1.fabric.Image.fromURL(src, (img) => {
124
- const { canvas, workarea, editable } = this.handler;
125
- const { workareaWidth, workareaHeight } = workarea;
126
- const { scaleX, scaleY } = this.calculateScale(img);
127
- if (img._element) {
128
- workarea.set({
129
- ...img,
130
- isElement: true,
131
- selectable: false,
132
- });
133
- }
134
- else {
135
- const image = new Image(workareaWidth, workareaHeight);
136
- workarea.setElement(image);
137
- workarea.set({
138
- isElement: false,
139
- selectable: false,
140
- width: workareaWidth,
141
- height: workareaHeight,
142
- });
143
- }
144
- if (editable && !loaded) {
145
- canvas.getObjects().forEach(obj => {
146
- const { id, player } = obj;
147
- if (id !== 'workarea') {
148
- const objWidth = obj.width * scaleX;
149
- const objHeight = obj.height * scaleY;
150
- const el = this.handler.elementHandler.findById(id);
151
- this.handler.elementHandler.setScaleOrAngle(el, obj);
152
- this.handler.elementHandler.setSize(el, obj);
153
- if (player) {
154
- player.setPlayerSize(objWidth, objHeight);
155
- }
156
- obj.set({
157
- scaleX: 1,
158
- scaleY: 1,
159
- });
160
- obj.setCoords();
161
- }
162
- });
163
- }
164
- // 파일이 없을 경우 Canvas의 nextWidth, nextHeight 값이 변경되기 전 상태에서 zoomToFit이 동작함
165
- // 정상 동작 resize event logic => zoomToFit
166
- // 현재 동작 zoomToFit -> resize event logic
167
- this.handler.zoomHandler.zoomToFit();
168
- canvas.centerObject(workarea);
169
- resolve(workarea);
170
- });
171
- });
172
- };
173
- const { workarea } = this.handler;
174
- if (!source) {
175
- workarea.set({
176
- src: null,
177
- file: null,
178
- });
179
- return imageFromUrl(source);
180
- }
181
- if (source instanceof File) {
182
- return new Promise(resolve => {
183
- const reader = new FileReader();
184
- reader.onload = () => {
185
- workarea.set({
186
- file: source,
187
- });
188
- imageFromUrl(reader.result).then(resolve);
189
- };
190
- reader.readAsDataURL(source);
191
- });
192
- }
193
- else {
194
- workarea.set({
195
- src: source,
196
- });
197
- return imageFromUrl(source);
198
- }
199
- };
200
- /**
201
- * Set the image on Workarea
202
- * @param {string | File} source
203
- * @param {boolean} [loaded=false]
204
- * @returns
205
- */
206
- this.setImage = async (source, loaded = false) => {
207
- const { canvas, workarea, editable } = this.handler;
208
- if (workarea.layout === 'responsive') {
209
- return this.setResponsiveImage(source, loaded);
210
- }
211
- const imageFromUrl = async (src) => {
212
- return new Promise(resolve => {
213
- fabric_1.fabric.Image.fromURL(src, (img) => {
214
- let width = canvas.getWidth();
215
- let height = canvas.getHeight();
216
- if (workarea.layout === 'fixed') {
217
- width = workarea.width * workarea.scaleX;
218
- height = workarea.height * workarea.scaleY;
219
- }
220
- let scaleX = 1;
221
- let scaleY = 1;
222
- if (img._element) {
223
- scaleX = width / img.width;
224
- scaleY = height / img.height;
225
- img.set({
226
- originX: 'left',
227
- originY: 'top',
228
- scaleX,
229
- scaleY,
230
- });
231
- workarea.set({
232
- ...img,
233
- isElement: true,
234
- selectable: false,
235
- });
236
- }
237
- else {
238
- workarea.setElement(new Image());
239
- workarea.set({
240
- width,
241
- height,
242
- scaleX,
243
- scaleY,
244
- isElement: false,
245
- selectable: false,
246
- });
247
- }
248
- canvas.centerObject(workarea);
249
- if (editable && !loaded) {
250
- const { layout } = workarea;
251
- canvas.getObjects().forEach(obj => {
252
- const { id, player } = obj;
253
- if (id !== 'workarea') {
254
- scaleX = layout === 'fullscreen' ? scaleX : obj.scaleX;
255
- scaleY = layout === 'fullscreen' ? scaleY : obj.scaleY;
256
- const el = this.handler.elementHandler.findById(id);
257
- this.handler.elementHandler.setSize(el, obj);
258
- if (player) {
259
- const objWidth = obj.width * scaleX;
260
- const objHeight = obj.height * scaleY;
261
- player.setPlayerSize(objWidth, objHeight);
262
- }
263
- obj.set({
264
- scaleX,
265
- scaleY,
266
- });
267
- obj.setCoords();
268
- }
269
- });
270
- }
271
- const center = canvas.getCenter();
272
- const zoom = loaded || workarea.layout === 'fullscreen' ? 1 : this.handler.canvas.getZoom();
273
- canvas.setViewportTransform([1, 0, 0, 1, 0, 0]);
274
- this.handler.zoomHandler.zoomToPoint(new fabric_1.fabric.Point(center.left, center.top), zoom);
275
- canvas.renderAll();
276
- resolve(workarea);
277
- });
278
- });
279
- };
280
- if (!source) {
281
- workarea.set({
282
- src: null,
283
- file: null,
284
- });
285
- return imageFromUrl(source);
286
- }
287
- if (source instanceof File) {
288
- return new Promise(resolve => {
289
- const reader = new FileReader();
290
- reader.onload = () => {
291
- workarea.set({
292
- file: source,
293
- });
294
- imageFromUrl(reader.result).then(resolve);
295
- };
296
- reader.readAsDataURL(source);
297
- });
298
- }
299
- else {
300
- workarea.set({
301
- src: source,
302
- });
303
- return imageFromUrl(source);
304
- }
305
- };
306
- /**
307
- * Calculate scale to the image
308
- *
309
- * @param {FabricImage} [image]
310
- * @returns
311
- */
312
- this.calculateScale = (image) => {
313
- const { canvas, workarea } = this.handler;
314
- const { workareaWidth, workareaHeight } = workarea;
315
- const { _element } = image || workarea;
316
- const width = _element?.width || workareaWidth;
317
- const height = _element?.height || workareaHeight;
318
- let scaleX = canvas.getWidth() / width;
319
- let scaleY = canvas.getHeight() / height;
320
- if (height >= width) {
321
- scaleX = scaleY;
322
- if (canvas.getWidth() < width * scaleX) {
323
- scaleX = scaleX * (canvas.getWidth() / (width * scaleX));
324
- }
325
- }
326
- else {
327
- scaleY = scaleX;
328
- if (canvas.getHeight() < height * scaleX) {
329
- scaleX = scaleX * (canvas.getHeight() / (height * scaleX));
330
- }
331
- }
332
- return { scaleX, scaleY };
333
- };
334
- this.handler = handler;
335
- this.initialize();
336
- }
337
- /**
338
- * Initialize workarea
339
- *
340
- * @author salgum1114
341
- */
342
- initialize() {
343
- const { workareaOption } = this.handler;
344
- const image = new Image(workareaOption.width, workareaOption.height);
345
- image.width = workareaOption.width;
346
- image.height = workareaOption.height;
347
- this.handler.workarea = new fabric_1.fabric.Image(image, workareaOption);
348
- this.handler.canvas.add(this.handler.workarea);
349
- this.handler.objects = this.handler.getObjects();
350
- this.handler.canvas.centerObject(this.handler.workarea);
351
- this.handler.canvas.renderAll();
352
- }
353
- }
354
- exports.default = WorkareaHandler;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const fabric_1 = require("fabric");
4
+ class WorkareaHandler {
5
+ constructor(handler) {
6
+ /**
7
+ * Set the layout on workarea
8
+ * @param {WorkareaLayout} layout
9
+ * @returns
10
+ */
11
+ this.setLayout = (layout) => {
12
+ this.handler.workarea.set('layout', layout);
13
+ const { _element, isElement, workareaWidth, workareaHeight } = this.handler.workarea;
14
+ const { canvas } = this.handler;
15
+ let scaleX = 1;
16
+ let scaleY = 1;
17
+ const isFixed = layout === 'fixed';
18
+ const isResponsive = layout === 'responsive';
19
+ const isFullscreen = layout === 'fullscreen';
20
+ if (isElement) {
21
+ if (isFixed) {
22
+ scaleX = workareaWidth / _element.width;
23
+ scaleY = workareaHeight / _element.height;
24
+ }
25
+ else if (isResponsive) {
26
+ const scales = this.calculateScale();
27
+ scaleX = scales.scaleX;
28
+ scaleY = scales.scaleY;
29
+ }
30
+ else {
31
+ scaleX = canvas.getWidth() / _element.width;
32
+ scaleY = canvas.getHeight() / _element.height;
33
+ }
34
+ }
35
+ this.handler.getObjects().forEach(obj => {
36
+ const { id, player } = obj;
37
+ if (id !== 'workarea') {
38
+ const objScaleX = !isFullscreen ? 1 : scaleX;
39
+ const objScaleY = !isFullscreen ? 1 : scaleY;
40
+ const objWidth = obj.width * objScaleX * canvas.getZoom();
41
+ const objHeight = obj.height * objScaleY * canvas.getZoom();
42
+ const el = this.handler.elementHandler.findById(obj.id);
43
+ this.handler.elementHandler.setSize(el, obj);
44
+ if (player) {
45
+ player.setPlayerSize(objWidth, objHeight);
46
+ }
47
+ obj.set({
48
+ scaleX: !isFullscreen ? 1 : objScaleX,
49
+ scaleY: !isFullscreen ? 1 : objScaleY,
50
+ });
51
+ }
52
+ });
53
+ if (isResponsive) {
54
+ const center = canvas.getCenter();
55
+ if (isElement) {
56
+ this.handler.workarea.set({
57
+ scaleX: 1,
58
+ scaleY: 1,
59
+ });
60
+ this.handler.zoomHandler.zoomToPoint(new fabric_1.fabric.Point(center.left, center.top), scaleX);
61
+ }
62
+ else {
63
+ this.handler.workarea.set({
64
+ width: workareaWidth,
65
+ height: workareaHeight,
66
+ });
67
+ scaleX = canvas.getWidth() / workareaWidth;
68
+ scaleY = canvas.getHeight() / workareaHeight;
69
+ if (workareaHeight >= workareaWidth) {
70
+ scaleX = scaleY;
71
+ }
72
+ else {
73
+ scaleY = scaleX;
74
+ }
75
+ this.handler.zoomHandler.zoomToPoint(new fabric_1.fabric.Point(center.left, center.top), scaleX);
76
+ }
77
+ canvas.centerObject(this.handler.workarea);
78
+ canvas.renderAll();
79
+ return;
80
+ }
81
+ if (isElement) {
82
+ this.handler.workarea.set({
83
+ width: _element.width,
84
+ height: _element.height,
85
+ scaleX,
86
+ scaleY,
87
+ });
88
+ }
89
+ else {
90
+ const width = isFixed ? workareaWidth : this.handler.canvas.getWidth();
91
+ const height = isFixed ? workareaHeight : this.handler.canvas.getHeight();
92
+ this.handler.workarea.set({
93
+ width,
94
+ height,
95
+ backgroundColor: 'rgba(255, 255, 255, 1)',
96
+ });
97
+ this.handler.canvas.renderAll();
98
+ if (isFixed) {
99
+ canvas.centerObject(this.handler.workarea);
100
+ }
101
+ else {
102
+ this.handler.workarea.set({
103
+ left: 0,
104
+ top: 0,
105
+ });
106
+ }
107
+ }
108
+ canvas.centerObject(this.handler.workarea);
109
+ const center = canvas.getCenter();
110
+ canvas.setViewportTransform([1, 0, 0, 1, 0, 0]);
111
+ this.handler.zoomHandler.zoomToPoint(new fabric_1.fabric.Point(center.left, center.top), 1);
112
+ canvas.renderAll();
113
+ };
114
+ /**
115
+ * Set the responsive image on Workarea
116
+ * @param {string | File} [source]
117
+ * @param {boolean} [loaded]
118
+ * @returns
119
+ */
120
+ this.setResponsiveImage = async (source, loaded) => {
121
+ const imageFromUrl = async (src = '') => {
122
+ return new Promise(resolve => {
123
+ fabric_1.fabric.Image.fromURL(src, (img) => {
124
+ const { canvas, workarea, editable } = this.handler;
125
+ const { workareaWidth, workareaHeight } = workarea;
126
+ const { scaleX, scaleY } = this.calculateScale(img);
127
+ if (img._element) {
128
+ workarea.set({
129
+ ...img,
130
+ isElement: true,
131
+ selectable: false,
132
+ });
133
+ }
134
+ else {
135
+ const image = new Image(workareaWidth, workareaHeight);
136
+ workarea.setElement(image);
137
+ workarea.set({
138
+ isElement: false,
139
+ selectable: false,
140
+ width: workareaWidth,
141
+ height: workareaHeight,
142
+ });
143
+ }
144
+ if (editable && !loaded) {
145
+ canvas.getObjects().forEach(obj => {
146
+ const { id, player } = obj;
147
+ if (id !== 'workarea') {
148
+ const objWidth = obj.width * scaleX;
149
+ const objHeight = obj.height * scaleY;
150
+ const el = this.handler.elementHandler.findById(id);
151
+ this.handler.elementHandler.setScaleOrAngle(el, obj);
152
+ this.handler.elementHandler.setSize(el, obj);
153
+ if (player) {
154
+ player.setPlayerSize(objWidth, objHeight);
155
+ }
156
+ obj.set({
157
+ scaleX: 1,
158
+ scaleY: 1,
159
+ });
160
+ obj.setCoords();
161
+ }
162
+ });
163
+ }
164
+ // 파일이 없을 경우 Canvas의 nextWidth, nextHeight 값이 변경되기 전 상태에서 zoomToFit이 동작함
165
+ // 정상 동작 resize event logic => zoomToFit
166
+ // 현재 동작 zoomToFit -> resize event logic
167
+ this.handler.zoomHandler.zoomToFit();
168
+ canvas.centerObject(workarea);
169
+ resolve(workarea);
170
+ });
171
+ });
172
+ };
173
+ const { workarea } = this.handler;
174
+ if (!source) {
175
+ workarea.set({
176
+ src: null,
177
+ file: null,
178
+ });
179
+ return imageFromUrl(source);
180
+ }
181
+ if (source instanceof File) {
182
+ return new Promise(resolve => {
183
+ const reader = new FileReader();
184
+ reader.onload = () => {
185
+ workarea.set({
186
+ file: source,
187
+ });
188
+ imageFromUrl(reader.result).then(resolve);
189
+ };
190
+ reader.readAsDataURL(source);
191
+ });
192
+ }
193
+ else {
194
+ workarea.set({
195
+ src: source,
196
+ });
197
+ return imageFromUrl(source);
198
+ }
199
+ };
200
+ /**
201
+ * Set the image on Workarea
202
+ * @param {string | File} source
203
+ * @param {boolean} [loaded=false]
204
+ * @returns
205
+ */
206
+ this.setImage = async (source, loaded = false) => {
207
+ const { canvas, workarea, editable } = this.handler;
208
+ if (workarea.layout === 'responsive') {
209
+ return this.setResponsiveImage(source, loaded);
210
+ }
211
+ const imageFromUrl = async (src) => {
212
+ return new Promise(resolve => {
213
+ fabric_1.fabric.Image.fromURL(src, (img) => {
214
+ let width = canvas.getWidth();
215
+ let height = canvas.getHeight();
216
+ if (workarea.layout === 'fixed') {
217
+ width = workarea.width * workarea.scaleX;
218
+ height = workarea.height * workarea.scaleY;
219
+ }
220
+ let scaleX = 1;
221
+ let scaleY = 1;
222
+ if (img._element) {
223
+ scaleX = width / img.width;
224
+ scaleY = height / img.height;
225
+ img.set({
226
+ originX: 'left',
227
+ originY: 'top',
228
+ scaleX,
229
+ scaleY,
230
+ });
231
+ workarea.set({
232
+ ...img,
233
+ isElement: true,
234
+ selectable: false,
235
+ });
236
+ }
237
+ else {
238
+ workarea.setElement(new Image());
239
+ workarea.set({
240
+ width,
241
+ height,
242
+ scaleX,
243
+ scaleY,
244
+ isElement: false,
245
+ selectable: false,
246
+ });
247
+ }
248
+ canvas.centerObject(workarea);
249
+ if (editable && !loaded) {
250
+ const { layout } = workarea;
251
+ canvas.getObjects().forEach(obj => {
252
+ const { id, player } = obj;
253
+ if (id !== 'workarea') {
254
+ scaleX = layout === 'fullscreen' ? scaleX : obj.scaleX;
255
+ scaleY = layout === 'fullscreen' ? scaleY : obj.scaleY;
256
+ const el = this.handler.elementHandler.findById(id);
257
+ this.handler.elementHandler.setSize(el, obj);
258
+ if (player) {
259
+ const objWidth = obj.width * scaleX;
260
+ const objHeight = obj.height * scaleY;
261
+ player.setPlayerSize(objWidth, objHeight);
262
+ }
263
+ obj.set({
264
+ scaleX,
265
+ scaleY,
266
+ });
267
+ obj.setCoords();
268
+ }
269
+ });
270
+ }
271
+ const center = canvas.getCenter();
272
+ const zoom = loaded || workarea.layout === 'fullscreen' ? 1 : this.handler.canvas.getZoom();
273
+ canvas.setViewportTransform([1, 0, 0, 1, 0, 0]);
274
+ this.handler.zoomHandler.zoomToPoint(new fabric_1.fabric.Point(center.left, center.top), zoom);
275
+ canvas.renderAll();
276
+ resolve(workarea);
277
+ });
278
+ });
279
+ };
280
+ if (!source) {
281
+ workarea.set({
282
+ src: null,
283
+ file: null,
284
+ });
285
+ return imageFromUrl(source);
286
+ }
287
+ if (source instanceof File) {
288
+ return new Promise(resolve => {
289
+ const reader = new FileReader();
290
+ reader.onload = () => {
291
+ workarea.set({
292
+ file: source,
293
+ });
294
+ imageFromUrl(reader.result).then(resolve);
295
+ };
296
+ reader.readAsDataURL(source);
297
+ });
298
+ }
299
+ else {
300
+ workarea.set({
301
+ src: source,
302
+ });
303
+ return imageFromUrl(source);
304
+ }
305
+ };
306
+ /**
307
+ * Calculate scale to the image
308
+ *
309
+ * @param {FabricImage} [image]
310
+ * @returns
311
+ */
312
+ this.calculateScale = (image) => {
313
+ const { canvas, workarea } = this.handler;
314
+ const { workareaWidth, workareaHeight } = workarea;
315
+ const { _element } = image || workarea;
316
+ const width = _element?.width || workareaWidth;
317
+ const height = _element?.height || workareaHeight;
318
+ let scaleX = canvas.getWidth() / width;
319
+ let scaleY = canvas.getHeight() / height;
320
+ if (height >= width) {
321
+ scaleX = scaleY;
322
+ if (canvas.getWidth() < width * scaleX) {
323
+ scaleX = scaleX * (canvas.getWidth() / (width * scaleX));
324
+ }
325
+ }
326
+ else {
327
+ scaleY = scaleX;
328
+ if (canvas.getHeight() < height * scaleX) {
329
+ scaleX = scaleX * (canvas.getHeight() / (height * scaleX));
330
+ }
331
+ }
332
+ return { scaleX, scaleY };
333
+ };
334
+ this.handler = handler;
335
+ this.initialize();
336
+ }
337
+ /**
338
+ * Initialize workarea
339
+ *
340
+ * @author salgum1114
341
+ */
342
+ initialize() {
343
+ const { workareaOption } = this.handler;
344
+ const image = new Image(workareaOption.width, workareaOption.height);
345
+ image.width = workareaOption.width;
346
+ image.height = workareaOption.height;
347
+ this.handler.workarea = new fabric_1.fabric.Image(image, workareaOption);
348
+ this.handler.canvas.add(this.handler.workarea);
349
+ this.handler.objects = this.handler.getObjects();
350
+ this.handler.canvas.centerObject(this.handler.workarea);
351
+ this.handler.canvas.renderAll();
352
+ }
353
+ }
354
+ exports.default = WorkareaHandler;