@jotforminc/dnd-builder 3.1.1 → 3.2.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.
Files changed (125) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/index.d.ts +428 -0
  3. package/lib/cjs/components/AlignmentGuides.js +28 -18
  4. package/lib/cjs/components/AlignmentGuides.js.map +1 -1
  5. package/lib/cjs/components/Builder/ContextMenu.js +4 -1
  6. package/lib/cjs/components/Builder/ContextMenu.js.map +1 -1
  7. package/lib/cjs/components/Builder/DraggableLayer.js +1 -5
  8. package/lib/cjs/components/Builder/DraggableLayer.js.map +1 -1
  9. package/lib/cjs/components/Builder/Element.js +7 -4
  10. package/lib/cjs/components/Builder/Element.js.map +1 -1
  11. package/lib/cjs/components/Builder/Page.js +56 -62
  12. package/lib/cjs/components/Builder/Page.js.map +1 -1
  13. package/lib/cjs/components/Builder/Scene.js +30 -251
  14. package/lib/cjs/components/Builder/Scene.js.map +1 -1
  15. package/lib/cjs/components/Builder/SelectionBox.js +48 -0
  16. package/lib/cjs/components/Builder/SelectionBox.js.map +1 -0
  17. package/lib/cjs/components/DraggableItem/DraggableItem.js +78 -135
  18. package/lib/cjs/components/DraggableItem/DraggableItem.js.map +1 -1
  19. package/lib/cjs/components/DraggableItem/DraggableItemActions.js +69 -29
  20. package/lib/cjs/components/DraggableItem/DraggableItemActions.js.map +1 -1
  21. package/lib/cjs/components/DraggableItem/DraggableItemLayer.js +8 -8
  22. package/lib/cjs/components/DraggableItem/DraggableItemLayer.js.map +1 -1
  23. package/lib/cjs/components/PageItemResizer.js +37 -43
  24. package/lib/cjs/components/PageItemResizer.js.map +1 -1
  25. package/lib/cjs/components/Panels/AllSlidesPanel/AllSlidesPanel.js +1 -3
  26. package/lib/cjs/components/Panels/AllSlidesPanel/AllSlidesPanel.js.map +1 -1
  27. package/lib/cjs/components/Panels/AllSlidesPanel/PageList.js +0 -6
  28. package/lib/cjs/components/Panels/AllSlidesPanel/PageList.js.map +1 -1
  29. package/lib/cjs/components/Panels/LeftPanel/LeftPanel.js +1 -4
  30. package/lib/cjs/components/Panels/LeftPanel/LeftPanel.js.map +1 -1
  31. package/lib/cjs/components/Panels/LeftPanel/LeftPanelOpener.js +6 -7
  32. package/lib/cjs/components/Panels/LeftPanel/LeftPanelOpener.js.map +1 -1
  33. package/lib/cjs/components/Panels/RightPanel/RightPanel.js +7 -7
  34. package/lib/cjs/components/Panels/RightPanel/RightPanel.js.map +1 -1
  35. package/lib/cjs/components/Panels/RightPanel/RightPanelToggler.js +9 -10
  36. package/lib/cjs/components/Panels/RightPanel/RightPanelToggler.js.map +1 -1
  37. package/lib/cjs/components/Panels/SlidesPanel/SlidesPanel.js +1 -3
  38. package/lib/cjs/components/Panels/SlidesPanel/SlidesPanel.js.map +1 -1
  39. package/lib/cjs/components/Panels/SlidesPanel/SlidesPanelToggler.js +8 -6
  40. package/lib/cjs/components/Panels/SlidesPanel/SlidesPanelToggler.js.map +1 -1
  41. package/lib/cjs/components/ReportItemsWrapper.js +5 -11
  42. package/lib/cjs/components/ReportItemsWrapper.js.map +1 -1
  43. package/lib/cjs/components/Settings/PageLayer/LayerDragOverlay.js +2 -4
  44. package/lib/cjs/components/Settings/PageLayer/LayerDragOverlay.js.map +1 -1
  45. package/lib/cjs/components/Settings/PageLayer/LayerItem.js +12 -7
  46. package/lib/cjs/components/Settings/PageLayer/LayerItem.js.map +1 -1
  47. package/lib/cjs/components/Settings/PageLayer/PageLayer.js +2 -4
  48. package/lib/cjs/components/Settings/PageLayer/PageLayer.js.map +1 -1
  49. package/lib/cjs/components/TextEditor/CustomToolbar/CustomToolbarWrapper.js +3 -8
  50. package/lib/cjs/components/TextEditor/CustomToolbar/CustomToolbarWrapper.js.map +1 -1
  51. package/lib/cjs/constants/texts.js +0 -1
  52. package/lib/cjs/constants/texts.js.map +1 -1
  53. package/lib/cjs/contexts/BuilderContext.js +47 -23
  54. package/lib/cjs/contexts/BuilderContext.js.map +1 -1
  55. package/lib/cjs/styles/_jfReportsPages.scss +8 -1
  56. package/lib/cjs/utils/functions.js +124 -34
  57. package/lib/cjs/utils/functions.js.map +1 -1
  58. package/lib/cjs/utils/hooks.js +7 -7
  59. package/lib/cjs/utils/hooks.js.map +1 -1
  60. package/lib/cjs/utils/useKeyboardActions.js +263 -0
  61. package/lib/cjs/utils/useKeyboardActions.js.map +1 -0
  62. package/lib/cjs/utils/useMarqueeSelection.js +156 -0
  63. package/lib/cjs/utils/useMarqueeSelection.js.map +1 -0
  64. package/lib/esm/components/AlignmentGuides.js +28 -18
  65. package/lib/esm/components/AlignmentGuides.js.map +1 -1
  66. package/lib/esm/components/Builder/ContextMenu.js +4 -1
  67. package/lib/esm/components/Builder/ContextMenu.js.map +1 -1
  68. package/lib/esm/components/Builder/DraggableLayer.js +1 -5
  69. package/lib/esm/components/Builder/DraggableLayer.js.map +1 -1
  70. package/lib/esm/components/Builder/Element.js +7 -4
  71. package/lib/esm/components/Builder/Element.js.map +1 -1
  72. package/lib/esm/components/Builder/Page.js +58 -64
  73. package/lib/esm/components/Builder/Page.js.map +1 -1
  74. package/lib/esm/components/Builder/Scene.js +32 -253
  75. package/lib/esm/components/Builder/Scene.js.map +1 -1
  76. package/lib/esm/components/Builder/SelectionBox.js +42 -0
  77. package/lib/esm/components/Builder/SelectionBox.js.map +1 -0
  78. package/lib/esm/components/DraggableItem/DraggableItem.js +80 -137
  79. package/lib/esm/components/DraggableItem/DraggableItem.js.map +1 -1
  80. package/lib/esm/components/DraggableItem/DraggableItemActions.js +72 -28
  81. package/lib/esm/components/DraggableItem/DraggableItemActions.js.map +1 -1
  82. package/lib/esm/components/DraggableItem/DraggableItemLayer.js +9 -9
  83. package/lib/esm/components/DraggableItem/DraggableItemLayer.js.map +1 -1
  84. package/lib/esm/components/PageItemResizer.js +38 -44
  85. package/lib/esm/components/PageItemResizer.js.map +1 -1
  86. package/lib/esm/components/Panels/AllSlidesPanel/AllSlidesPanel.js +2 -4
  87. package/lib/esm/components/Panels/AllSlidesPanel/AllSlidesPanel.js.map +1 -1
  88. package/lib/esm/components/Panels/AllSlidesPanel/PageList.js +0 -6
  89. package/lib/esm/components/Panels/AllSlidesPanel/PageList.js.map +1 -1
  90. package/lib/esm/components/Panels/LeftPanel/LeftPanel.js +3 -6
  91. package/lib/esm/components/Panels/LeftPanel/LeftPanel.js.map +1 -1
  92. package/lib/esm/components/Panels/LeftPanel/LeftPanelOpener.js +6 -7
  93. package/lib/esm/components/Panels/LeftPanel/LeftPanelOpener.js.map +1 -1
  94. package/lib/esm/components/Panels/RightPanel/RightPanel.js +7 -7
  95. package/lib/esm/components/Panels/RightPanel/RightPanel.js.map +1 -1
  96. package/lib/esm/components/Panels/RightPanel/RightPanelToggler.js +9 -10
  97. package/lib/esm/components/Panels/RightPanel/RightPanelToggler.js.map +1 -1
  98. package/lib/esm/components/Panels/SlidesPanel/SlidesPanel.js +2 -4
  99. package/lib/esm/components/Panels/SlidesPanel/SlidesPanel.js.map +1 -1
  100. package/lib/esm/components/Panels/SlidesPanel/SlidesPanelToggler.js +8 -6
  101. package/lib/esm/components/Panels/SlidesPanel/SlidesPanelToggler.js.map +1 -1
  102. package/lib/esm/components/ReportItemsWrapper.js +5 -11
  103. package/lib/esm/components/ReportItemsWrapper.js.map +1 -1
  104. package/lib/esm/components/Settings/PageLayer/LayerDragOverlay.js +2 -4
  105. package/lib/esm/components/Settings/PageLayer/LayerDragOverlay.js.map +1 -1
  106. package/lib/esm/components/Settings/PageLayer/LayerItem.js +12 -7
  107. package/lib/esm/components/Settings/PageLayer/LayerItem.js.map +1 -1
  108. package/lib/esm/components/Settings/PageLayer/PageLayer.js +2 -4
  109. package/lib/esm/components/Settings/PageLayer/PageLayer.js.map +1 -1
  110. package/lib/esm/components/TextEditor/CustomToolbar/CustomToolbarWrapper.js +3 -8
  111. package/lib/esm/components/TextEditor/CustomToolbar/CustomToolbarWrapper.js.map +1 -1
  112. package/lib/esm/constants/texts.js +0 -1
  113. package/lib/esm/constants/texts.js.map +1 -1
  114. package/lib/esm/contexts/BuilderContext.js +47 -23
  115. package/lib/esm/contexts/BuilderContext.js.map +1 -1
  116. package/lib/esm/styles/_jfReportsPages.scss +8 -1
  117. package/lib/esm/utils/functions.js +121 -34
  118. package/lib/esm/utils/functions.js.map +1 -1
  119. package/lib/esm/utils/hooks.js +7 -7
  120. package/lib/esm/utils/hooks.js.map +1 -1
  121. package/lib/esm/utils/useKeyboardActions.js +261 -0
  122. package/lib/esm/utils/useKeyboardActions.js.map +1 -0
  123. package/lib/esm/utils/useMarqueeSelection.js +154 -0
  124. package/lib/esm/utils/useMarqueeSelection.js.map +1 -0
  125. package/package.json +11 -7
@@ -1,8 +1,5 @@
1
1
  'use strict';
2
2
 
3
- require('core-js/modules/es.array.find.js');
4
- require('core-js/modules/es.array.find-index.js');
5
- require('core-js/modules/es.array.includes.js');
6
3
  require('core-js/modules/es.array.map.js');
7
4
  require('core-js/modules/es.number.constructor.js');
8
5
  require('core-js/modules/es.number.is-nan.js');
@@ -16,14 +13,14 @@ var ContextMenu = require('./ContextMenu.js');
16
13
  var PageActions = require('./PageActions.js');
17
14
  var PageAdder = require('./PageAdder.js');
18
15
  var ZoomControls = require('./ZoomControls.js');
16
+ var SelectionBox = require('./SelectionBox.js');
19
17
  var BuilderContext = require('../../contexts/BuilderContext.js');
20
18
  var PropContext = require('../../contexts/PropContext.js');
21
19
  var Page = require('./Page.js');
22
20
  var functions = require('../../utils/functions.js');
23
- var hooks = require('../../utils/hooks.js');
24
- var generateId = require('../../utils/generateId.js');
25
- var eventIgnoredRoles = require('../../constants/eventIgnoredRoles.js');
26
21
  var DraggableLayer = require('./DraggableLayer.js');
22
+ var useKeyboardActions = require('../../utils/useKeyboardActions.js');
23
+ var useMarqueeSelection = require('../../utils/useMarqueeSelection.js');
27
24
  var jsxRuntime = require('react/jsx-runtime');
28
25
 
29
26
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
@@ -32,76 +29,45 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
32
29
 
33
30
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
34
31
 
35
- function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
36
-
37
- function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
38
-
39
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
40
-
41
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
42
-
43
- function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
44
-
45
- function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
46
-
47
32
  var Scene = function Scene() {
48
33
  var pages = PropContext.usePropStore(function (state) {
49
34
  return state.pages;
50
35
  });
51
- var onItemAdd = PropContext.usePropStore(function (state) {
52
- return state.onItemAdd;
53
- });
54
- var onItemRemove = PropContext.usePropStore(function (state) {
55
- return state.onItemRemove;
56
- });
57
- var onAnEventTrigger = PropContext.usePropStore(function (state) {
58
- return state.onAnEventTrigger;
59
- });
60
36
  var settings = PropContext.usePropStore(function (state) {
61
37
  return state.settings;
62
38
  });
63
- var onItemChange = PropContext.usePropStore(function (state) {
64
- return state.onItemChange;
65
- });
66
- var activeElement = BuilderContext.useBuilderStore(function (state) {
67
- return state.activeElement;
68
- });
69
39
  var contextMenuProps = BuilderContext.useBuilderStore(function (state) {
70
40
  return state.contextMenuProps;
71
41
  });
72
- var isRightPanelOpen = BuilderContext.useBuilderStore(function (state) {
73
- return state.isRightPanelOpen;
74
- });
75
- var setActiveElement = BuilderContext.useBuilderStore(function (state) {
76
- return state.setActiveElement;
77
- });
78
42
  var setContextMenuProps = BuilderContext.useBuilderStore(function (state) {
79
43
  return state.setContextMenuProps;
80
44
  });
81
- var setIsRightPanelOpen = BuilderContext.useBuilderStore(function (state) {
82
- return state.setIsRightPanelOpen;
45
+ var setGuides = BuilderContext.useBuilderStore(function (state) {
46
+ return state.setGuides;
83
47
  });
84
48
  var zoom = BuilderContext.useBuilderStore(function (state) {
85
49
  return state.zoom;
86
50
  });
87
-
88
- var _useState = React.useState(null),
89
- _useState2 = _slicedToArray(_useState, 2),
90
- itemToPaste = _useState2[0],
91
- setItemToPaste = _useState2[1];
92
-
93
51
  var lastScrollPosition = BuilderContext.useBuilderStore(function (state) {
94
52
  return state.lastScrollPosition;
95
53
  });
96
54
  var pageStyles = React.useRef({});
97
55
  var pageContainerStyles = React.useRef({});
98
56
  var viewPortRef = React.useRef({});
57
+ var canvasRef = React.useRef(null);
99
58
  /* Page Refs */
100
59
 
101
60
  var refs = React.useRef(pages.reduce(function (acc, curr) {
102
61
  acc[curr.id] = /*#__PURE__*/React.createRef(null);
103
62
  return acc;
104
- }, {})); // Update refs when new pages are added
63
+ }, {})); // Custom hooks
64
+
65
+ useKeyboardActions();
66
+
67
+ var _useMarqueeSelection = useMarqueeSelection(canvasRef),
68
+ selectionBox = _useMarqueeSelection.selectionBox,
69
+ selectionPageId = _useMarqueeSelection.selectionPageId; // Update refs when new pages are added
70
+
105
71
 
106
72
  React.useEffect(function () {
107
73
  pages.forEach(function (page) {
@@ -109,13 +75,10 @@ var Scene = function Scene() {
109
75
  refs.current[page.id] = /*#__PURE__*/React.createRef(null);
110
76
  }
111
77
  });
112
- }, [pages]);
113
- var isMultipleItemSelected = activeElement !== null && activeElement.length > 1;
114
- /* Calculate snap guides */
78
+ }, [pages]); // Calculate guides for snap functionality
115
79
 
116
- var keyDownCount = React.useRef(null);
117
- var guides = React.useMemo(function () {
118
- return pages.reduce(function (acc, page) {
80
+ React.useEffect(function () {
81
+ setGuides(pages.reduce(function (acc, page) {
119
82
  var _pageGuides = {};
120
83
  var pageRef = refs.current[page.id];
121
84
 
@@ -150,201 +113,14 @@ var Scene = function Scene() {
150
113
 
151
114
  acc[page.id] = _pageGuides;
152
115
  return acc;
153
- }, {});
154
- }, [pages, zoom]);
116
+ }, {}));
117
+ }, [pages, zoom, setGuides]); // Restore scroll position after mode change
118
+
155
119
  React.useEffect(function () {
156
120
  if (viewPortRef.current) {
157
121
  viewPortRef.current.scrollTop = lastScrollPosition;
158
122
  }
159
- }, [lastScrollPosition]); // set last scroll position after changing mode
160
-
161
- var foundItem = functions.findItemById(activeElement === null ? null : activeElement[0], pages);
162
- var selectedItems = hooks.useActiveElement();
163
-
164
- var moveItemWithKeyboard = function moveItemWithKeyboard(event, direction, value) {
165
- event.preventDefault();
166
- selectedItems.forEach(function (item) {
167
- if (item.isLocked) {
168
- return false;
169
- }
170
-
171
- onItemChange({
172
- id: item.id
173
- }, _objectSpread(_objectSpread({}, item), {}, _defineProperty({}, direction, item[direction] + value)));
174
- });
175
- };
176
-
177
- var selectNextOrPrevElement = function selectNextOrPrevElement(event, deletedItem) {
178
- if (event.preventDefault) event.preventDefault();
179
- var referenceItem = deletedItem ? deletedItem : foundItem;
180
- var page = pages.find(function (_page) {
181
- return _page.id === referenceItem.pageID;
182
- });
183
- if (!page || page && !page.items.length) return setActiveElement(null);
184
- var items = page.items;
185
- var currentIndex = items.findIndex(function (item) {
186
- return item.id === referenceItem.id;
187
- }); // Pages are not updated in time so here is an unnecessary check
188
-
189
- if (items.length === 1 && deletedItem) {
190
- return setActiveElement(null);
191
- }
192
-
193
- if (event.shiftKey) {
194
- if (items[currentIndex - 1]) setActiveElement(items[currentIndex - 1].id);else setActiveElement(items[items.length - 1].id);
195
- } else if (items[currentIndex + 1]) {
196
- setActiveElement(items[currentIndex + 1].id);
197
- } else setActiveElement(items[0].id);
198
- };
199
-
200
- var onItemRemoveFromPage = function onItemRemoveFromPage(e) {
201
- // Firefox updates browser history on backspace
202
- e.preventDefault();
203
- if (isMultipleItemSelected) return;
204
-
205
- if (foundItem.isLocked) {
206
- return false;
207
- }
208
-
209
- setActiveElement(null);
210
- onItemRemove(foundItem);
211
- selectNextOrPrevElement({
212
- shiftKey: false
213
- }, foundItem);
214
- onAnEventTrigger('removeItem', foundItem.itemType);
215
- };
216
-
217
- var handlePaste = function handlePaste() {
218
- if (isMultipleItemSelected) return;
219
- var itemID = generateId();
220
- var pageID = functions.getMostVisiblePage(true);
221
- var offset = itemToPaste.pageID === pageID ? 50 : 0;
222
-
223
- var item = _objectSpread(_objectSpread({}, itemToPaste), {}, {
224
- id: itemID,
225
- left: itemToPaste.left + offset,
226
- pageID: pageID,
227
- top: itemToPaste.top + offset
228
- });
229
-
230
- onItemAdd(item);
231
- onAnEventTrigger('pasteItem', itemToPaste.itemType);
232
- setActiveElement(itemID); // set as last reference to paste
233
-
234
- setItemToPaste(item);
235
- };
236
-
237
- var keyboardActions = function keyboardActions(event) {
238
- var key = event.key,
239
- metaKey = event.metaKey,
240
- shiftKey = event.shiftKey;
241
-
242
- if (metaKey) {
243
- if (key === 'l') {
244
- // Lock
245
- if (isMultipleItemSelected) return;
246
- event.preventDefault(); // Dont focus to URL bar
247
-
248
- onAnEventTrigger(foundItem.isLocked ? 'unlockReportItem' : 'lockReportItem', foundItem.itemType);
249
- onItemChange({
250
- id: foundItem.id
251
- }, {
252
- isLocked: foundItem.isLocked ? false : true
253
- });
254
- return;
255
- }
256
-
257
- if (key === 'c' || key === 'x') {
258
- if (isMultipleItemSelected) return; // Copy or Cut
259
-
260
- if (key === 'x') {
261
- onItemRemoveFromPage(event);
262
- onAnEventTrigger('cutItem', foundItem.itemType);
263
- } else {
264
- onAnEventTrigger('copyItem', foundItem.itemType);
265
- }
266
-
267
- setItemToPaste(foundItem);
268
- return;
269
- }
270
-
271
- if (foundItem && key === 'd') {
272
- if (isMultipleItemSelected) return; // Duplicate
273
-
274
- event.preventDefault();
275
- var itemID = generateId();
276
- onItemAdd(_objectSpread(_objectSpread({}, foundItem), {}, {
277
- id: itemID,
278
- left: foundItem.left + 50,
279
- top: foundItem.top + 50
280
- }));
281
- onAnEventTrigger('duplicateItem', foundItem.itemType);
282
- setActiveElement(itemID);
283
-
284
- if (!isRightPanelOpen) {
285
- setIsRightPanelOpen(true);
286
- }
287
-
288
- return;
289
- }
290
- }
291
-
292
- keyDownCount.current++;
293
- var movementValue = shiftKey ? 10 : 1 + keyDownCount.current; // Others
294
-
295
- switch (key) {
296
- case 'Backspace':
297
- return onItemRemoveFromPage(event);
298
-
299
- case 'Delete':
300
- return onItemRemoveFromPage(event);
301
-
302
- case 'Escape':
303
- return setActiveElement(null);
304
-
305
- case 'ArrowLeft':
306
- return moveItemWithKeyboard(event, 'left', -movementValue);
307
-
308
- case 'ArrowUp':
309
- return moveItemWithKeyboard(event, 'top', -movementValue);
310
-
311
- case 'ArrowRight':
312
- return moveItemWithKeyboard(event, 'left', movementValue);
313
-
314
- case 'ArrowDown':
315
- return moveItemWithKeyboard(event, 'top', movementValue);
316
-
317
- case 'Tab':
318
- return selectNextOrPrevElement(event);
319
- }
320
- };
321
-
322
- var shouldSuppressKeyboardEvent = function shouldSuppressKeyboardEvent(e) {
323
- return eventIgnoredRoles.EVENT_IGNORED_ROLES.some(function (role) {
324
- return e.target.closest("[role=".concat(role, "]"));
325
- });
326
- };
327
-
328
- var handleKeyboardEvent = function handleKeyboardEvent(e) {
329
- var shouldPaste = itemToPaste && e.key === 'v' && e.metaKey;
330
-
331
- if (shouldSuppressKeyboardEvent(e)) {
332
- return;
333
- }
334
-
335
- if (activeElement && !shouldPaste) {
336
- var arrowKeyCodes = ['ArrowLeft', 'ArrowUp', 'ArrowDown', 'ArrowBottom'];
337
- if (arrowKeyCodes.includes(e.key)) e.preventDefault();
338
- keyboardActions(e);
339
- } else if (shouldPaste) {
340
- handlePaste();
341
- }
342
- };
343
-
344
- hooks.useEventListener('keydown', handleKeyboardEvent);
345
- hooks.useEventListener('keyup', function () {
346
- keyDownCount.current = 0;
347
- });
123
+ }, [lastScrollPosition]);
348
124
  var _settings$reportLayou = settings.reportLayoutHeight,
349
125
  reportLayoutHeight = _settings$reportLayou === void 0 ? 794 : _settings$reportLayou,
350
126
  _settings$reportLayou2 = settings.reportLayoutWidth,
@@ -369,13 +145,13 @@ var Scene = function Scene() {
369
145
  // Builder.js
370
146
  className: classNames.mainWrapper,
371
147
  children: [/*#__PURE__*/jsxRuntime.jsx(DraggableLayer, {
372
- guides: guides,
373
148
  pageRefs: refs.current
374
149
  }), /*#__PURE__*/jsxRuntime.jsx("div", {
375
150
  ref: viewPortRef,
376
151
  className: classNames.viewport,
377
152
  "data-zoom": zoom,
378
153
  children: /*#__PURE__*/jsxRuntime.jsxs("div", {
154
+ ref: canvasRef,
379
155
  className: classNames.canvas,
380
156
  children: [pages.map(function (page, index) {
381
157
  return (
@@ -385,20 +161,23 @@ var Scene = function Scene() {
385
161
  children: [/*#__PURE__*/jsxRuntime.jsx(PageActions, {
386
162
  order: page.order,
387
163
  pageID: page.id
388
- }), /*#__PURE__*/jsxRuntime.jsx("div", {
164
+ }), /*#__PURE__*/jsxRuntime.jsxs("div", {
389
165
  ref: refs.current[page.id],
390
166
  className: classNames.page,
391
167
  "data-id": page.id,
392
168
  "data-order": page.order,
393
169
  id: "presentation-page-".concat(page.id.toString()),
394
- style: pageStyles.current,
395
- children: /*#__PURE__*/jsxRuntime.jsx(Page, {
396
- guides: guides,
170
+ style: _objectSpread(_objectSpread({}, pageStyles.current), {}, {
171
+ position: 'relative'
172
+ }),
173
+ children: [/*#__PURE__*/jsxRuntime.jsx(Page, {
397
174
  items: page.items,
398
175
  page: page,
399
176
  pageIndex: index,
400
177
  style: pageContainerStyles.current
401
- })
178
+ }), selectionPageId === page.id && selectionBox && /*#__PURE__*/jsxRuntime.jsx(SelectionBox, {
179
+ selectionBox: selectionBox
180
+ })]
402
181
  }, "page_".concat(page.id))]
403
182
  }, page.id)
404
183
  );
@@ -1 +1 @@
1
- {"version":3,"file":"Scene.js","sources":["../../../../src/components/Builder/Scene.js"],"sourcesContent":["/* eslint-disable complexity */\nimport {\n createRef,\n Fragment,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport * as classNames from '../../constants/classNames';\nimport ContextMenu from './ContextMenu';\nimport PageActions from './PageActions';\nimport PageAdder from './PageAdder';\nimport ZoomControls from './ZoomControls';\nimport { useBuilderStore } from '../../contexts/BuilderContext';\nimport { usePropStore } from '../../contexts/PropContext';\nimport Page from './Page';\nimport {\n calculateGuidePositions,\n findItemById,\n findItemsOnPage,\n getMostVisiblePage,\n} from '../../utils/functions';\nimport { useActiveElement, useEventListener } from '../../utils/hooks';\nimport generateId from '../../utils/generateId';\nimport { EVENT_IGNORED_ROLES } from '../../constants/eventIgnoredRoles';\nimport DraggableLayer from './DraggableLayer';\n\nconst Scene = () => {\n const pages = usePropStore(state => state.pages);\n const onItemAdd = usePropStore(state => state.onItemAdd);\n const onItemRemove = usePropStore(state => state.onItemRemove);\n const onAnEventTrigger = usePropStore(state => state.onAnEventTrigger);\n const settings = usePropStore(state => state.settings);\n const onItemChange = usePropStore(state => state.onItemChange);\n\n const activeElement = useBuilderStore(state => state.activeElement);\n const contextMenuProps = useBuilderStore(state => state.contextMenuProps);\n const isRightPanelOpen = useBuilderStore(state => state.isRightPanelOpen);\n const setActiveElement = useBuilderStore(state => state.setActiveElement);\n const setContextMenuProps = useBuilderStore(state => state.setContextMenuProps);\n const setIsRightPanelOpen = useBuilderStore(state => state.setIsRightPanelOpen);\n const zoom = useBuilderStore(state => state.zoom);\n\n const [itemToPaste, setItemToPaste] = useState(null);\n const lastScrollPosition = useBuilderStore(state => state.lastScrollPosition);\n\n const pageStyles = useRef({});\n const pageContainerStyles = useRef({});\n const viewPortRef = useRef({});\n\n /* Page Refs */\n const refs = useRef(pages.reduce((acc, curr) => {\n acc[curr.id] = createRef(null);\n return acc;\n }, {}));\n\n // Update refs when new pages are added\n useEffect(() => {\n pages.forEach(page => {\n if (!refs.current[page.id]) {\n refs.current[page.id] = createRef(null);\n }\n });\n }, [pages]);\n\n const isMultipleItemSelected = activeElement !== null && activeElement.length > 1;\n\n /* Calculate snap guides */\n const keyDownCount = useRef(null);\n\n const guides = useMemo(() => {\n return pages.reduce((acc, page) => {\n const _pageGuides = {};\n const pageRef = refs.current[page.id];\n if (pageRef && pageRef.current) {\n const {\n height, left, top, width,\n } = pageRef.current.getBoundingClientRect();\n const boundingBox = {\n height, left, top, width,\n };\n _pageGuides.boundingBox = {\n x: calculateGuidePositions(boundingBox, 'x').map(value => value - boundingBox.left),\n y: calculateGuidePositions(boundingBox, 'y').map(value => value - boundingBox.top),\n };\n page.items.forEach(item => {\n _pageGuides[item.id] = {\n x: calculateGuidePositions(item, 'x', zoom),\n y: calculateGuidePositions(item, 'y', zoom),\n };\n });\n }\n acc[page.id] = _pageGuides;\n return acc;\n }, {});\n }, [pages, zoom]);\n\n useEffect(() => {\n if (viewPortRef.current) {\n viewPortRef.current.scrollTop = lastScrollPosition;\n }\n }, [lastScrollPosition]); // set last scroll position after changing mode\n\n const foundItem = findItemById(activeElement === null ? null : activeElement[0], pages);\n\n const selectedItems = useActiveElement();\n const moveItemWithKeyboard = (event, direction, value) => {\n event.preventDefault();\n selectedItems.forEach(item => {\n if (item.isLocked) {\n return false;\n }\n onItemChange(\n { id: item.id },\n {\n ...item,\n [direction]: item[direction] + value,\n },\n );\n });\n };\n\n const selectNextOrPrevElement = (event, deletedItem) => {\n if (event.preventDefault) event.preventDefault();\n const referenceItem = deletedItem ? deletedItem : foundItem;\n\n const page = pages.find(_page => _page.id === referenceItem.pageID);\n if (!page || (page && !page.items.length)) return setActiveElement(null);\n const { items } = page;\n\n const currentIndex = items.findIndex(item => item.id === referenceItem.id);\n\n // Pages are not updated in time so here is an unnecessary check\n if (items.length === 1 && deletedItem) {\n return setActiveElement(null);\n }\n\n if (event.shiftKey) {\n if (items[currentIndex - 1]) setActiveElement(items[currentIndex - 1].id);\n else setActiveElement(items[items.length - 1].id);\n } else if (items[currentIndex + 1]) {\n setActiveElement(items[currentIndex + 1].id);\n } else setActiveElement(items[0].id);\n };\n\n const onItemRemoveFromPage = e => {\n // Firefox updates browser history on backspace\n e.preventDefault();\n if (isMultipleItemSelected) return;\n if (foundItem.isLocked) {\n return false;\n }\n setActiveElement(null);\n onItemRemove(foundItem);\n selectNextOrPrevElement({ shiftKey: false }, foundItem);\n onAnEventTrigger('removeItem', foundItem.itemType);\n };\n\n const handlePaste = () => {\n if (isMultipleItemSelected) return;\n const itemID = generateId();\n const pageID = getMostVisiblePage(true);\n const offset = itemToPaste.pageID === pageID ? 50 : 0;\n\n const item = {\n ...itemToPaste,\n id: itemID,\n left: itemToPaste.left + offset,\n pageID,\n top: itemToPaste.top + offset,\n };\n\n onItemAdd(item);\n\n onAnEventTrigger('pasteItem', itemToPaste.itemType);\n setActiveElement(itemID);\n // set as last reference to paste\n setItemToPaste(item);\n };\n\n const keyboardActions = event => {\n const {\n key,\n metaKey,\n shiftKey,\n } = event;\n\n if (metaKey) {\n if (key === 'l') {\n // Lock\n if (isMultipleItemSelected) return;\n event.preventDefault(); // Dont focus to URL bar\n onAnEventTrigger(\n foundItem.isLocked ? 'unlockReportItem' : 'lockReportItem',\n foundItem.itemType,\n );\n onItemChange(\n { id: foundItem.id },\n { isLocked: foundItem.isLocked ? false : true },\n );\n return;\n }\n\n if (key === 'c' || key === 'x') {\n if (isMultipleItemSelected) return;\n // Copy or Cut\n if (key === 'x') {\n onItemRemoveFromPage(event);\n onAnEventTrigger('cutItem', foundItem.itemType);\n } else {\n onAnEventTrigger('copyItem', foundItem.itemType);\n }\n\n setItemToPaste(foundItem);\n return;\n }\n\n if (foundItem && key === 'd') {\n if (isMultipleItemSelected) return;\n // Duplicate\n event.preventDefault();\n const itemID = generateId();\n onItemAdd({\n ...foundItem,\n id: itemID,\n left: foundItem.left + 50,\n top: foundItem.top + 50,\n });\n onAnEventTrigger('duplicateItem', foundItem.itemType);\n setActiveElement(itemID);\n if (!isRightPanelOpen) {\n setIsRightPanelOpen(true);\n }\n return;\n }\n }\n\n keyDownCount.current++;\n const movementValue = shiftKey ? 10 : 1 + keyDownCount.current;\n\n // Others\n switch (key) {\n case 'Backspace': return onItemRemoveFromPage(event);\n case 'Delete': return onItemRemoveFromPage(event);\n case 'Escape': return setActiveElement(null);\n case 'ArrowLeft': return moveItemWithKeyboard(event, 'left', -movementValue);\n case 'ArrowUp': return moveItemWithKeyboard(event, 'top', -movementValue);\n case 'ArrowRight': return moveItemWithKeyboard(event, 'left', movementValue);\n case 'ArrowDown': return moveItemWithKeyboard(event, 'top', movementValue);\n case 'Tab': return selectNextOrPrevElement(event);\n default:\n }\n };\n\n const shouldSuppressKeyboardEvent = e => (\n EVENT_IGNORED_ROLES.some(role => e.target.closest(`[role=${role}]`))\n );\n\n const handleKeyboardEvent = e => {\n const shouldPaste = itemToPaste && e.key === 'v' && e.metaKey;\n\n if (shouldSuppressKeyboardEvent(e)) {\n return;\n }\n\n if (activeElement && !shouldPaste) {\n const arrowKeyCodes = ['ArrowLeft', 'ArrowUp', 'ArrowDown', 'ArrowBottom'];\n if (arrowKeyCodes.includes(e.key)) e.preventDefault();\n keyboardActions(e);\n } else if (shouldPaste) {\n handlePaste();\n }\n };\n\n useEventListener('keydown', handleKeyboardEvent);\n useEventListener('keyup', () => { keyDownCount.current = 0; });\n\n const { reportLayoutHeight = 794, reportLayoutWidth = 1123 } = settings;\n\n // TODO: Some strange shit is going on here on first render\n let width = parseInt(reportLayoutWidth, 10);\n let height = parseInt(reportLayoutHeight, 10);\n width = Number.isNaN(width) ? 1 : width;\n height = Number.isNaN(height) ? 1 : height;\n const zoomToUse = Number.isNaN(zoom) ? 1 : zoom;\n\n pageStyles.current = {\n height: parseFloat((height * zoomToUse).toFixed(1)),\n width: parseFloat((width * zoomToUse).toFixed(1)),\n };\n pageContainerStyles.current = {\n height,\n transform: `scale(${zoomToUse})`,\n transformOrigin: '0 0',\n width,\n };\n\n return (\n <main // Builder.js\n className={classNames.mainWrapper}\n >\n <DraggableLayer\n guides={guides}\n pageRefs={refs.current}\n />\n <div\n ref={viewPortRef}\n className={classNames.viewport}\n data-zoom={zoom}\n >\n <div\n className={classNames.canvas}\n >\n {pages.map((page, index) => (\n // TODO: This part can be moved into a different component\n <Fragment key={page.id}>\n <PageActions\n order={page.order}\n pageID={page.id}\n />\n <div\n key={`page_${page.id}`}\n ref={refs.current[page.id]}\n className={classNames.page}\n data-id={page.id}\n data-order={page.order}\n id={`presentation-page-${page.id.toString()}`}\n style={pageStyles.current}\n >\n <Page\n guides={guides}\n items={page.items}\n page={page}\n pageIndex={index}\n style={pageContainerStyles.current}\n />\n </div>\n </Fragment>\n ))}\n <PageAdder />\n </div>\n </div>\n <ZoomControls />\n {contextMenuProps\n && (\n <ContextMenu\n exceptionalClasses={['contextMenu-button']}\n height={height}\n item={findItemById(contextMenuProps.id, pages)}\n items={findItemsOnPage(contextMenuProps.pageID, pages)}\n onClickOutside={() => setContextMenuProps(null)}\n position={contextMenuProps.position}\n width={width}\n />\n )}\n </main>\n );\n};\n\nexport default Scene;\n"],"names":["Scene","pages","usePropStore","state","onItemAdd","onItemRemove","onAnEventTrigger","settings","onItemChange","activeElement","useBuilderStore","contextMenuProps","isRightPanelOpen","setActiveElement","setContextMenuProps","setIsRightPanelOpen","zoom","useState","itemToPaste","setItemToPaste","lastScrollPosition","pageStyles","useRef","pageContainerStyles","viewPortRef","refs","reduce","acc","curr","id","createRef","useEffect","forEach","page","current","isMultipleItemSelected","length","keyDownCount","guides","useMemo","_pageGuides","pageRef","getBoundingClientRect","height","left","top","width","boundingBox","x","calculateGuidePositions","map","value","y","items","item","scrollTop","foundItem","findItemById","selectedItems","useActiveElement","moveItemWithKeyboard","event","direction","preventDefault","isLocked","selectNextOrPrevElement","deletedItem","referenceItem","find","_page","pageID","currentIndex","findIndex","shiftKey","onItemRemoveFromPage","e","itemType","handlePaste","itemID","generateId","getMostVisiblePage","offset","keyboardActions","key","metaKey","movementValue","shouldSuppressKeyboardEvent","EVENT_IGNORED_ROLES","some","role","target","closest","handleKeyboardEvent","shouldPaste","arrowKeyCodes","includes","useEventListener","reportLayoutHeight","reportLayoutWidth","parseInt","Number","isNaN","zoomToUse","parseFloat","toFixed","transform","transformOrigin","_jsxs","classNames","_jsx","index","Fragment","order","toString","findItemsOnPage","position"],"mappings":"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"}
1
+ {"version":3,"file":"Scene.js","sources":["../../../../src/components/Builder/Scene.js"],"sourcesContent":["/* eslint-disable complexity */\nimport {\n createRef,\n Fragment,\n useEffect,\n useRef,\n} from 'react';\nimport * as classNames from '../../constants/classNames';\nimport ContextMenu from './ContextMenu';\nimport PageActions from './PageActions';\nimport PageAdder from './PageAdder';\nimport ZoomControls from './ZoomControls';\nimport SelectionBox from './SelectionBox';\nimport { useBuilderStore } from '../../contexts/BuilderContext';\nimport { usePropStore } from '../../contexts/PropContext';\nimport Page from './Page';\nimport {\n calculateGuidePositions,\n findItemById,\n findItemsOnPage,\n} from '../../utils/functions';\nimport DraggableLayer from './DraggableLayer';\nimport useKeyboardActions from '../../utils/useKeyboardActions';\nimport useMarqueeSelection from '../../utils/useMarqueeSelection';\n\nconst Scene = () => {\n const pages = usePropStore(state => state.pages);\n const settings = usePropStore(state => state.settings);\n const contextMenuProps = useBuilderStore(state => state.contextMenuProps);\n const setContextMenuProps = useBuilderStore(state => state.setContextMenuProps);\n const setGuides = useBuilderStore(state => state.setGuides);\n const zoom = useBuilderStore(state => state.zoom);\n const lastScrollPosition = useBuilderStore(state => state.lastScrollPosition);\n\n const pageStyles = useRef({});\n const pageContainerStyles = useRef({});\n const viewPortRef = useRef({});\n const canvasRef = useRef(null);\n\n /* Page Refs */\n const refs = useRef(pages.reduce((acc, curr) => {\n acc[curr.id] = createRef(null);\n return acc;\n }, {}));\n\n // Custom hooks\n useKeyboardActions();\n const { selectionBox, selectionPageId } = useMarqueeSelection(canvasRef);\n\n // Update refs when new pages are added\n useEffect(() => {\n pages.forEach(page => {\n if (!refs.current[page.id]) {\n refs.current[page.id] = createRef(null);\n }\n });\n }, [pages]);\n\n // Calculate guides for snap functionality\n useEffect(() => {\n setGuides(pages.reduce((acc, page) => {\n const _pageGuides = {};\n const pageRef = refs.current[page.id];\n if (pageRef && pageRef.current) {\n const {\n height, left, top, width,\n } = pageRef.current.getBoundingClientRect();\n const boundingBox = {\n height, left, top, width,\n };\n _pageGuides.boundingBox = {\n x: calculateGuidePositions(boundingBox, 'x').map(value => value - boundingBox.left),\n y: calculateGuidePositions(boundingBox, 'y').map(value => value - boundingBox.top),\n };\n page.items.forEach(item => {\n _pageGuides[item.id] = {\n x: calculateGuidePositions(item, 'x', zoom),\n y: calculateGuidePositions(item, 'y', zoom),\n };\n });\n }\n acc[page.id] = _pageGuides;\n return acc;\n }, {}));\n }, [pages, zoom, setGuides]);\n\n // Restore scroll position after mode change\n useEffect(() => {\n if (viewPortRef.current) {\n viewPortRef.current.scrollTop = lastScrollPosition;\n }\n }, [lastScrollPosition]);\n\n const { reportLayoutHeight = 794, reportLayoutWidth = 1123 } = settings;\n\n // TODO: Some strange shit is going on here on first render\n let width = parseInt(reportLayoutWidth, 10);\n let height = parseInt(reportLayoutHeight, 10);\n width = Number.isNaN(width) ? 1 : width;\n height = Number.isNaN(height) ? 1 : height;\n const zoomToUse = Number.isNaN(zoom) ? 1 : zoom;\n\n pageStyles.current = {\n height: parseFloat((height * zoomToUse).toFixed(1)),\n width: parseFloat((width * zoomToUse).toFixed(1)),\n };\n pageContainerStyles.current = {\n height,\n transform: `scale(${zoomToUse})`,\n transformOrigin: '0 0',\n width,\n };\n\n return (\n <main // Builder.js\n className={classNames.mainWrapper}\n >\n <DraggableLayer\n pageRefs={refs.current}\n />\n <div\n ref={viewPortRef}\n className={classNames.viewport}\n data-zoom={zoom}\n >\n <div\n ref={canvasRef}\n className={classNames.canvas}\n >\n {pages.map((page, index) => (\n // TODO: This part can be moved into a different component\n <Fragment key={page.id}>\n <PageActions\n order={page.order}\n pageID={page.id}\n />\n <div\n key={`page_${page.id}`}\n ref={refs.current[page.id]}\n className={classNames.page}\n data-id={page.id}\n data-order={page.order}\n id={`presentation-page-${page.id.toString()}`}\n style={{ ...pageStyles.current, position: 'relative' }}\n >\n <Page\n items={page.items}\n page={page}\n pageIndex={index}\n style={pageContainerStyles.current}\n />\n {selectionPageId === page.id && selectionBox && (\n <SelectionBox selectionBox={selectionBox} />\n )}\n </div>\n </Fragment>\n ))}\n <PageAdder />\n </div>\n </div>\n <ZoomControls />\n {contextMenuProps\n && (\n <ContextMenu\n exceptionalClasses={['contextMenu-button']}\n height={height}\n item={findItemById(contextMenuProps.id, pages)}\n items={findItemsOnPage(contextMenuProps.pageID, pages)}\n onClickOutside={() => setContextMenuProps(null)}\n position={contextMenuProps.position}\n width={width}\n />\n )}\n </main>\n );\n};\n\nexport default Scene;\n"],"names":["Scene","pages","usePropStore","state","settings","contextMenuProps","useBuilderStore","setContextMenuProps","setGuides","zoom","lastScrollPosition","pageStyles","useRef","pageContainerStyles","viewPortRef","canvasRef","refs","reduce","acc","curr","id","createRef","useKeyboardActions","useMarqueeSelection","selectionBox","selectionPageId","useEffect","forEach","page","current","_pageGuides","pageRef","getBoundingClientRect","height","left","top","width","boundingBox","x","calculateGuidePositions","map","value","y","items","item","scrollTop","reportLayoutHeight","reportLayoutWidth","parseInt","Number","isNaN","zoomToUse","parseFloat","toFixed","transform","transformOrigin","_jsxs","classNames","_jsx","index","Fragment","order","toString","position","findItemById","findItemsOnPage","pageID"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAyBMA,KAAK,GAAG,SAARA,KAAQ,GAAM;AAClB,MAAMC,KAAK,GAAGC,wBAAY,CAAC,UAAAC,KAAK;AAAA,WAAIA,KAAK,CAACF,KAAV;AAAA,GAAN,CAA1B;AACA,MAAMG,QAAQ,GAAGF,wBAAY,CAAC,UAAAC,KAAK;AAAA,WAAIA,KAAK,CAACC,QAAV;AAAA,GAAN,CAA7B;AACA,MAAMC,gBAAgB,GAAGC,8BAAe,CAAC,UAAAH,KAAK;AAAA,WAAIA,KAAK,CAACE,gBAAV;AAAA,GAAN,CAAxC;AACA,MAAME,mBAAmB,GAAGD,8BAAe,CAAC,UAAAH,KAAK;AAAA,WAAIA,KAAK,CAACI,mBAAV;AAAA,GAAN,CAA3C;AACA,MAAMC,SAAS,GAAGF,8BAAe,CAAC,UAAAH,KAAK;AAAA,WAAIA,KAAK,CAACK,SAAV;AAAA,GAAN,CAAjC;AACA,MAAMC,IAAI,GAAGH,8BAAe,CAAC,UAAAH,KAAK;AAAA,WAAIA,KAAK,CAACM,IAAV;AAAA,GAAN,CAA5B;AACA,MAAMC,kBAAkB,GAAGJ,8BAAe,CAAC,UAAAH,KAAK;AAAA,WAAIA,KAAK,CAACO,kBAAV;AAAA,GAAN,CAA1C;AAEA,MAAMC,UAAU,GAAGC,YAAM,CAAC,EAAD,CAAzB;AACA,MAAMC,mBAAmB,GAAGD,YAAM,CAAC,EAAD,CAAlC;AACA,MAAME,WAAW,GAAGF,YAAM,CAAC,EAAD,CAA1B;AACA,MAAMG,SAAS,GAAGH,YAAM,CAAC,IAAD,CAAxB;AAEA;;AACA,MAAMI,IAAI,GAAGJ,YAAM,CAACX,KAAK,CAACgB,MAAN,CAAa,UAACC,GAAD,EAAMC,IAAN,EAAe;AAC9CD,IAAAA,GAAG,CAACC,IAAI,CAACC,EAAN,CAAH,gBAAeC,eAAS,CAAC,IAAD,CAAxB;AACA,WAAOH,GAAP;AACD,GAHmB,EAGjB,EAHiB,CAAD,CAAnB,CAfkB;;AAqBlBI,EAAAA,kBAAkB;;AAClB,6BAA0CC,mBAAmB,CAACR,SAAD,CAA7D;AAAA,MAAQS,YAAR,wBAAQA,YAAR;AAAA,MAAsBC,eAAtB,wBAAsBA,eAAtB,CAtBkB;;;AAyBlBC,EAAAA,eAAS,CAAC,YAAM;AACdzB,IAAAA,KAAK,CAAC0B,OAAN,CAAc,UAAAC,IAAI,EAAI;AACpB,UAAI,CAACZ,IAAI,CAACa,OAAL,CAAaD,IAAI,CAACR,EAAlB,CAAL,EAA4B;AAC1BJ,QAAAA,IAAI,CAACa,OAAL,CAAaD,IAAI,CAACR,EAAlB,iBAAwBC,eAAS,CAAC,IAAD,CAAjC;AACD;AACF,KAJD;AAKD,GANQ,EAMN,CAACpB,KAAD,CANM,CAAT,CAzBkB;;AAkClByB,EAAAA,eAAS,CAAC,YAAM;AACdlB,IAAAA,SAAS,CAACP,KAAK,CAACgB,MAAN,CAAa,UAACC,GAAD,EAAMU,IAAN,EAAe;AACpC,UAAME,WAAW,GAAG,EAApB;AACA,UAAMC,OAAO,GAAGf,IAAI,CAACa,OAAL,CAAaD,IAAI,CAACR,EAAlB,CAAhB;;AACA,UAAIW,OAAO,IAAIA,OAAO,CAACF,OAAvB,EAAgC;AAC9B,oCAEIE,OAAO,CAACF,OAAR,CAAgBG,qBAAhB,EAFJ;AAAA,YACEC,OADF,yBACEA,MADF;AAAA,YACUC,IADV,yBACUA,IADV;AAAA,YACgBC,GADhB,yBACgBA,GADhB;AAAA,YACqBC,MADrB,yBACqBA,KADrB;;AAGA,YAAMC,WAAW,GAAG;AAClBJ,UAAAA,MAAM,EAANA,OADkB;AACVC,UAAAA,IAAI,EAAJA,IADU;AACJC,UAAAA,GAAG,EAAHA,GADI;AACCC,UAAAA,KAAK,EAALA;AADD,SAApB;AAGAN,QAAAA,WAAW,CAACO,WAAZ,GAA0B;AACxBC,UAAAA,CAAC,EAAEC,iCAAuB,CAACF,WAAD,EAAc,GAAd,CAAvB,CAA0CG,GAA1C,CAA8C,UAAAC,KAAK;AAAA,mBAAIA,KAAK,GAAGJ,WAAW,CAACH,IAAxB;AAAA,WAAnD,CADqB;AAExBQ,UAAAA,CAAC,EAAEH,iCAAuB,CAACF,WAAD,EAAc,GAAd,CAAvB,CAA0CG,GAA1C,CAA8C,UAAAC,KAAK;AAAA,mBAAIA,KAAK,GAAGJ,WAAW,CAACF,GAAxB;AAAA,WAAnD;AAFqB,SAA1B;AAIAP,QAAAA,IAAI,CAACe,KAAL,CAAWhB,OAAX,CAAmB,UAAAiB,IAAI,EAAI;AACzBd,UAAAA,WAAW,CAACc,IAAI,CAACxB,EAAN,CAAX,GAAuB;AACrBkB,YAAAA,CAAC,EAAEC,iCAAuB,CAACK,IAAD,EAAO,GAAP,EAAYnC,IAAZ,CADL;AAErBiC,YAAAA,CAAC,EAAEH,iCAAuB,CAACK,IAAD,EAAO,GAAP,EAAYnC,IAAZ;AAFL,WAAvB;AAID,SALD;AAMD;;AACDS,MAAAA,GAAG,CAACU,IAAI,CAACR,EAAN,CAAH,GAAeU,WAAf;AACA,aAAOZ,GAAP;AACD,KAvBS,EAuBP,EAvBO,CAAD,CAAT;AAwBD,GAzBQ,EAyBN,CAACjB,KAAD,EAAQQ,IAAR,EAAcD,SAAd,CAzBM,CAAT,CAlCkB;;AA8DlBkB,EAAAA,eAAS,CAAC,YAAM;AACd,QAAIZ,WAAW,CAACe,OAAhB,EAAyB;AACvBf,MAAAA,WAAW,CAACe,OAAZ,CAAoBgB,SAApB,GAAgCnC,kBAAhC;AACD;AACF,GAJQ,EAIN,CAACA,kBAAD,CAJM,CAAT;AAMA,8BAA+DN,QAA/D,CAAQ0C,kBAAR;AAAA,MAAQA,kBAAR,sCAA6B,GAA7B;AAAA,+BAA+D1C,QAA/D,CAAkC2C,iBAAlC;AAAA,MAAkCA,iBAAlC,uCAAsD,IAAtD,0BApEkB;;AAuElB,MAAIX,KAAK,GAAGY,QAAQ,CAACD,iBAAD,EAAoB,EAApB,CAApB;AACA,MAAId,MAAM,GAAGe,QAAQ,CAACF,kBAAD,EAAqB,EAArB,CAArB;AACAV,EAAAA,KAAK,GAAGa,MAAM,CAACC,KAAP,CAAad,KAAb,IAAsB,CAAtB,GAA0BA,KAAlC;AACAH,EAAAA,MAAM,GAAGgB,MAAM,CAACC,KAAP,CAAajB,MAAb,IAAuB,CAAvB,GAA2BA,MAApC;AACA,MAAMkB,SAAS,GAAGF,MAAM,CAACC,KAAP,CAAazC,IAAb,IAAqB,CAArB,GAAyBA,IAA3C;AAEAE,EAAAA,UAAU,CAACkB,OAAX,GAAqB;AACnBI,IAAAA,MAAM,EAAEmB,UAAU,CAAC,CAACnB,MAAM,GAAGkB,SAAV,EAAqBE,OAArB,CAA6B,CAA7B,CAAD,CADC;AAEnBjB,IAAAA,KAAK,EAAEgB,UAAU,CAAC,CAAChB,KAAK,GAAGe,SAAT,EAAoBE,OAApB,CAA4B,CAA5B,CAAD;AAFE,GAArB;AAIAxC,EAAAA,mBAAmB,CAACgB,OAApB,GAA8B;AAC5BI,IAAAA,MAAM,EAANA,MAD4B;AAE5BqB,IAAAA,SAAS,kBAAWH,SAAX,MAFmB;AAG5BI,IAAAA,eAAe,EAAE,KAHW;AAI5BnB,IAAAA,KAAK,EAALA;AAJ4B,GAA9B;AAOA,sBACEoB;AAAM;AACJ,IAAA,SAAS,EAAEC,sBADb;AAAA,4BAGEC,eAAC,cAAD;AACE,MAAA,QAAQ,EAAE1C,IAAI,CAACa;AADjB,MAHF,eAME6B;AACE,MAAA,GAAG,EAAE5C,WADP;AAEE,MAAA,SAAS,EAAE2C,mBAFb;AAGE,mBAAWhD,IAHb;AAAA,6BAKE+C;AACE,QAAA,GAAG,EAAEzC,SADP;AAEE,QAAA,SAAS,EAAE0C,iBAFb;AAAA,mBAIGxD,KAAK,CAACuC,GAAN,CAAU,UAACZ,IAAD,EAAO+B,KAAP;AAAA;AAAA;AACT;AACA,4BAACC,cAAD;AAAA,sCACEF,eAAC,WAAD;AACE,gBAAA,KAAK,EAAE9B,IAAI,CAACiC,KADd;AAEE,gBAAA,MAAM,EAAEjC,IAAI,CAACR;AAFf,gBADF,eAKEoC;AAEE,gBAAA,GAAG,EAAExC,IAAI,CAACa,OAAL,CAAaD,IAAI,CAACR,EAAlB,CAFP;AAGE,gBAAA,SAAS,EAAEqC,eAHb;AAIE,2BAAS7B,IAAI,CAACR,EAJhB;AAKE,8BAAYQ,IAAI,CAACiC,KALnB;AAME,gBAAA,EAAE,8BAAuBjC,IAAI,CAACR,EAAL,CAAQ0C,QAAR,EAAvB,CANJ;AAOE,gBAAA,KAAK,kCAAOnD,UAAU,CAACkB,OAAlB;AAA2BkC,kBAAAA,QAAQ,EAAE;AAArC,kBAPP;AAAA,wCASEL,eAAC,IAAD;AACE,kBAAA,KAAK,EAAE9B,IAAI,CAACe,KADd;AAEE,kBAAA,IAAI,EAAEf,IAFR;AAGE,kBAAA,SAAS,EAAE+B,KAHb;AAIE,kBAAA,KAAK,EAAE9C,mBAAmB,CAACgB;AAJ7B,kBATF,EAeGJ,eAAe,KAAKG,IAAI,CAACR,EAAzB,IAA+BI,YAA/B,iBACCkC,eAAC,YAAD;AAAc,kBAAA,YAAY,EAAElC;AAA5B,kBAhBJ;AAAA,gCACeI,IAAI,CAACR,EADpB,EALF;AAAA,eAAeQ,IAAI,CAACR,EAApB;AAFS;AAAA,SAAV,CAJH,eAgCEsC,eAAC,SAAD,KAhCF;AAAA;AALF,MANF,eA8CEA,eAAC,YAAD,KA9CF,EA+CGrD,gBAAgB,iBAEbqD,eAAC,WAAD;AACE,MAAA,kBAAkB,EAAE,CAAC,oBAAD,CADtB;AAEE,MAAA,MAAM,EAAEzB,MAFV;AAGE,MAAA,IAAI,EAAE+B,sBAAY,CAAC3D,gBAAgB,CAACe,EAAlB,EAAsBnB,KAAtB,CAHpB;AAIE,MAAA,KAAK,EAAEgE,yBAAe,CAAC5D,gBAAgB,CAAC6D,MAAlB,EAA0BjE,KAA1B,CAJxB;AAKE,MAAA,cAAc,EAAE;AAAA,eAAMM,mBAAmB,CAAC,IAAD,CAAzB;AAAA,OALlB;AAME,MAAA,QAAQ,EAAEF,gBAAgB,CAAC0D,QAN7B;AAOE,MAAA,KAAK,EAAE3B;AAPT,MAjDN;AAAA,IADF;AA8DD;;;;"}
@@ -0,0 +1,48 @@
1
+ 'use strict';
2
+
3
+ var PropTypes = require('prop-types');
4
+ var jsxRuntime = require('react/jsx-runtime');
5
+
6
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
7
+
8
+ var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
9
+
10
+ var SelectionBox = function SelectionBox(_ref) {
11
+ var selectionBox = _ref.selectionBox;
12
+ var endX = selectionBox.endX,
13
+ endY = selectionBox.endY,
14
+ startX = selectionBox.startX,
15
+ startY = selectionBox.startY;
16
+ var left = Math.min(startX, endX);
17
+ var top = Math.min(startY, endY);
18
+ var width = Math.abs(endX - startX);
19
+ var height = Math.abs(endY - startY);
20
+ var style = {
21
+ backgroundColor: '#0099FF4A',
22
+ border: '2px solid #0066C3',
23
+ borderRadius: '2px',
24
+ height: height,
25
+ left: left,
26
+ pointerEvents: 'none',
27
+ position: 'absolute',
28
+ top: top,
29
+ width: width,
30
+ zIndex: 100000
31
+ };
32
+ return /*#__PURE__*/jsxRuntime.jsx("div", {
33
+ className: "selection-box",
34
+ style: style
35
+ });
36
+ };
37
+
38
+ SelectionBox.propTypes = {
39
+ selectionBox: PropTypes__default['default'].shape({
40
+ endX: PropTypes__default['default'].number,
41
+ endY: PropTypes__default['default'].number,
42
+ startX: PropTypes__default['default'].number,
43
+ startY: PropTypes__default['default'].number
44
+ })
45
+ };
46
+
47
+ module.exports = SelectionBox;
48
+ //# sourceMappingURL=SelectionBox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SelectionBox.js","sources":["../../../../src/components/Builder/SelectionBox.js"],"sourcesContent":["import PropTypes from 'prop-types';\n\nconst SelectionBox = ({ selectionBox }) => {\n const {\n endX, endY, startX, startY,\n } = selectionBox;\n\n const left = Math.min(startX, endX);\n const top = Math.min(startY, endY);\n const width = Math.abs(endX - startX);\n const height = Math.abs(endY - startY);\n\n const style = {\n backgroundColor: '#0099FF4A',\n border: '2px solid #0066C3',\n borderRadius: '2px',\n height,\n left,\n pointerEvents: 'none',\n position: 'absolute',\n top,\n width,\n zIndex: 100000,\n };\n\n return (\n <div\n className=\"selection-box\"\n style={style}\n />\n );\n};\n\nSelectionBox.propTypes = {\n selectionBox: PropTypes.shape({\n endX: PropTypes.number,\n endY: PropTypes.number,\n startX: PropTypes.number,\n startY: PropTypes.number,\n }),\n};\n\nexport default SelectionBox;\n"],"names":["SelectionBox","selectionBox","endX","endY","startX","startY","left","Math","min","top","width","abs","height","style","backgroundColor","border","borderRadius","pointerEvents","position","zIndex","_jsx","propTypes","PropTypes","shape","number"],"mappings":";;;;;;;;;IAEMA,YAAY,GAAG,SAAfA,YAAe,OAAsB;AAAA,MAAnBC,YAAmB,QAAnBA,YAAmB;AACzC,MACEC,IADF,GAEID,YAFJ,CACEC,IADF;AAAA,MACQC,IADR,GAEIF,YAFJ,CACQE,IADR;AAAA,MACcC,MADd,GAEIH,YAFJ,CACcG,MADd;AAAA,MACsBC,MADtB,GAEIJ,YAFJ,CACsBI,MADtB;AAIA,MAAMC,IAAI,GAAGC,IAAI,CAACC,GAAL,CAASJ,MAAT,EAAiBF,IAAjB,CAAb;AACA,MAAMO,GAAG,GAAGF,IAAI,CAACC,GAAL,CAASH,MAAT,EAAiBF,IAAjB,CAAZ;AACA,MAAMO,KAAK,GAAGH,IAAI,CAACI,GAAL,CAAST,IAAI,GAAGE,MAAhB,CAAd;AACA,MAAMQ,MAAM,GAAGL,IAAI,CAACI,GAAL,CAASR,IAAI,GAAGE,MAAhB,CAAf;AAEA,MAAMQ,KAAK,GAAG;AACZC,IAAAA,eAAe,EAAE,WADL;AAEZC,IAAAA,MAAM,EAAE,mBAFI;AAGZC,IAAAA,YAAY,EAAE,KAHF;AAIZJ,IAAAA,MAAM,EAANA,MAJY;AAKZN,IAAAA,IAAI,EAAJA,IALY;AAMZW,IAAAA,aAAa,EAAE,MANH;AAOZC,IAAAA,QAAQ,EAAE,UAPE;AAQZT,IAAAA,GAAG,EAAHA,GARY;AASZC,IAAAA,KAAK,EAALA,KATY;AAUZS,IAAAA,MAAM,EAAE;AAVI,GAAd;AAaA,sBACEC;AACE,IAAA,SAAS,EAAC,eADZ;AAEE,IAAA,KAAK,EAAEP;AAFT,IADF;AAMD;;AAEDb,YAAY,CAACqB,SAAb,GAAyB;AACvBpB,EAAAA,YAAY,EAAEqB,6BAAS,CAACC,KAAV,CAAgB;AAC5BrB,IAAAA,IAAI,EAAEoB,6BAAS,CAACE,MADY;AAE5BrB,IAAAA,IAAI,EAAEmB,6BAAS,CAACE,MAFY;AAG5BpB,IAAAA,MAAM,EAAEkB,6BAAS,CAACE,MAHU;AAI5BnB,IAAAA,MAAM,EAAEiB,6BAAS,CAACE;AAJU,GAAhB;AADS,CAAzB;;;;"}