@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
@@ -0,0 +1,263 @@
1
+ 'use strict';
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
+ require('core-js/modules/web.dom-collections.for-each.js');
7
+ var React = require('react');
8
+ var BuilderContext = require('../contexts/BuilderContext.js');
9
+ var PropContext = require('../contexts/PropContext.js');
10
+ var functions = require('./functions.js');
11
+ var hooks = require('./hooks.js');
12
+ var eventIgnoredRoles = require('../constants/eventIgnoredRoles.js');
13
+ var generateId = require('./generateId.js');
14
+
15
+ 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; }
16
+
17
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
18
+
19
+ 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; }
20
+
21
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
22
+
23
+ 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."); }
24
+
25
+ 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); }
26
+
27
+ 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; }
28
+
29
+ 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; }
30
+
31
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
32
+
33
+ var useKeyboardActions = function useKeyboardActions() {
34
+ var _useState = React.useState(null),
35
+ _useState2 = _slicedToArray(_useState, 2),
36
+ itemToPaste = _useState2[0],
37
+ setItemToPaste = _useState2[1];
38
+
39
+ var keyDownCount = React.useRef(null);
40
+ var activeElements = BuilderContext.useBuilderStore(function (state) {
41
+ return state.activeElements;
42
+ });
43
+ var isRightPanelOpen = BuilderContext.useBuilderStore(function (state) {
44
+ return state.isRightPanelOpen;
45
+ });
46
+ var setActiveElements = BuilderContext.useBuilderStore(function (state) {
47
+ return state.setActiveElements;
48
+ });
49
+ var setIsRightPanelOpen = BuilderContext.useBuilderStore(function (state) {
50
+ return state.setIsRightPanelOpen;
51
+ });
52
+ var resetActiveElements = BuilderContext.useBuilderStore(function (state) {
53
+ return state.resetActiveElements;
54
+ });
55
+ var pages = PropContext.usePropStore(function (state) {
56
+ return state.pages;
57
+ });
58
+ var onItemAdd = PropContext.usePropStore(function (state) {
59
+ return state.onItemAdd;
60
+ });
61
+ var onItemRemove = PropContext.usePropStore(function (state) {
62
+ return state.onItemRemove;
63
+ });
64
+ var onItemChange = PropContext.usePropStore(function (state) {
65
+ return state.onItemChange;
66
+ });
67
+ var onAnEventTrigger = PropContext.usePropStore(function (state) {
68
+ return state.onAnEventTrigger;
69
+ });
70
+ var isMultipleItemSelected = activeElements.length > 1;
71
+ var foundItem = functions.findItemById(activeElements.length ? activeElements[0] : null, pages);
72
+ var selectedItems = hooks.useSelectedElements();
73
+
74
+ var moveItemWithKeyboard = function moveItemWithKeyboard(event, direction, value) {
75
+ event.preventDefault();
76
+ selectedItems.forEach(function (item) {
77
+ var _objectSpread2;
78
+
79
+ if (item.isLocked) {
80
+ return false;
81
+ }
82
+
83
+ onItemChange({
84
+ id: item.id
85
+ }, _objectSpread(_objectSpread({}, functions.getDimensions(item)), {}, (_objectSpread2 = {}, _defineProperty(_objectSpread2, direction, item[direction] + value), _defineProperty(_objectSpread2, "pageID", item.pageID), _objectSpread2)));
86
+ });
87
+ };
88
+
89
+ var selectNextOrPrevElement = function selectNextOrPrevElement(event, deletedItem) {
90
+ if (event.preventDefault) event.preventDefault();
91
+ var referenceItem = deletedItem ? deletedItem : foundItem;
92
+ var page = pages.find(function (_page) {
93
+ return _page.id === referenceItem.pageID;
94
+ });
95
+ if (!page || page && !page.items.length) return resetActiveElements();
96
+ var items = page.items;
97
+ var currentIndex = items.findIndex(function (item) {
98
+ return item.id === referenceItem.id;
99
+ }); // Pages are not updated in time so here is an unnecessary check
100
+
101
+ if (items.length === 1 && deletedItem) {
102
+ return resetActiveElements();
103
+ }
104
+
105
+ if (event.shiftKey) {
106
+ if (items[currentIndex - 1]) setActiveElements(items[currentIndex - 1].id);else setActiveElements(items[items.length - 1].id);
107
+ } else if (items[currentIndex + 1]) {
108
+ setActiveElements(items[currentIndex + 1].id);
109
+ } else setActiveElements(items[0].id);
110
+ };
111
+
112
+ var onItemRemoveFromPage = function onItemRemoveFromPage(e) {
113
+ // Firefox updates browser history on backspace
114
+ e.preventDefault();
115
+ if (isMultipleItemSelected) return;
116
+
117
+ if (foundItem.isLocked) {
118
+ return false;
119
+ }
120
+
121
+ resetActiveElements();
122
+ onItemRemove(foundItem);
123
+ selectNextOrPrevElement({
124
+ shiftKey: false
125
+ }, foundItem);
126
+ onAnEventTrigger('removeItem', foundItem.itemType);
127
+ };
128
+
129
+ var handlePaste = function handlePaste() {
130
+ if (isMultipleItemSelected) return;
131
+ var itemID = generateId();
132
+ var pageID = functions.getMostVisiblePage(true);
133
+ var offset = itemToPaste.pageID === pageID ? 50 : 0;
134
+
135
+ var item = _objectSpread(_objectSpread({}, itemToPaste), {}, {
136
+ id: itemID,
137
+ left: itemToPaste.left + offset,
138
+ pageID: pageID,
139
+ top: itemToPaste.top + offset
140
+ });
141
+
142
+ onItemAdd(item);
143
+ onAnEventTrigger('pasteItem', itemToPaste.itemType);
144
+ setActiveElements(itemID); // set as last reference to paste
145
+
146
+ setItemToPaste(item);
147
+ };
148
+
149
+ var keyboardActions = function keyboardActions(event) {
150
+ var key = event.key,
151
+ metaKey = event.metaKey,
152
+ shiftKey = event.shiftKey;
153
+
154
+ if (metaKey) {
155
+ if (key === 'l') {
156
+ // Lock
157
+ if (isMultipleItemSelected) return;
158
+ event.preventDefault(); // Dont focus to URL bar
159
+
160
+ onAnEventTrigger(foundItem.isLocked ? 'unlockReportItem' : 'lockReportItem', foundItem.itemType);
161
+ onItemChange({
162
+ id: foundItem.id
163
+ }, {
164
+ isLocked: foundItem.isLocked ? false : true
165
+ });
166
+ return;
167
+ }
168
+
169
+ if (key === 'c' || key === 'x') {
170
+ if (isMultipleItemSelected) return; // Copy or Cut
171
+
172
+ if (key === 'x') {
173
+ onItemRemoveFromPage(event);
174
+ onAnEventTrigger('cutItem', foundItem.itemType);
175
+ } else {
176
+ onAnEventTrigger('copyItem', foundItem.itemType);
177
+ }
178
+
179
+ setItemToPaste(foundItem);
180
+ return;
181
+ }
182
+
183
+ if (foundItem && key === 'd') {
184
+ if (isMultipleItemSelected) return; // Duplicate
185
+
186
+ event.preventDefault();
187
+ var itemID = generateId();
188
+ onItemAdd(_objectSpread(_objectSpread({}, foundItem), {}, {
189
+ id: itemID,
190
+ left: foundItem.left + 50,
191
+ top: foundItem.top + 50
192
+ }));
193
+ onAnEventTrigger('duplicateItem', foundItem.itemType);
194
+ setActiveElements(itemID);
195
+
196
+ if (!isRightPanelOpen) {
197
+ setIsRightPanelOpen(true);
198
+ }
199
+
200
+ return;
201
+ }
202
+ }
203
+
204
+ keyDownCount.current++;
205
+ var movementValue = shiftKey ? 10 : 1 + keyDownCount.current; // Others
206
+
207
+ switch (key) {
208
+ case 'Backspace':
209
+ return onItemRemoveFromPage(event);
210
+
211
+ case 'Delete':
212
+ return onItemRemoveFromPage(event);
213
+
214
+ case 'Escape':
215
+ return resetActiveElements();
216
+
217
+ case 'ArrowLeft':
218
+ return moveItemWithKeyboard(event, 'left', -movementValue);
219
+
220
+ case 'ArrowUp':
221
+ return moveItemWithKeyboard(event, 'top', -movementValue);
222
+
223
+ case 'ArrowRight':
224
+ return moveItemWithKeyboard(event, 'left', movementValue);
225
+
226
+ case 'ArrowDown':
227
+ return moveItemWithKeyboard(event, 'top', movementValue);
228
+
229
+ case 'Tab':
230
+ return selectNextOrPrevElement(event);
231
+ }
232
+ };
233
+
234
+ var shouldSuppressKeyboardEvent = function shouldSuppressKeyboardEvent(e) {
235
+ return eventIgnoredRoles.EVENT_IGNORED_ROLES.some(function (role) {
236
+ return e.target.closest("[role=".concat(role, "]"));
237
+ });
238
+ };
239
+
240
+ var handleKeyboardEvent = function handleKeyboardEvent(e) {
241
+ var shouldPaste = itemToPaste && e.key === 'v' && e.metaKey;
242
+
243
+ if (shouldSuppressKeyboardEvent(e)) {
244
+ return;
245
+ }
246
+
247
+ if (activeElements.length && !shouldPaste) {
248
+ var arrowKeyCodes = ['ArrowLeft', 'ArrowUp', 'ArrowDown', 'ArrowBottom'];
249
+ if (arrowKeyCodes.includes(e.key)) e.preventDefault();
250
+ keyboardActions(e);
251
+ } else if (shouldPaste) {
252
+ handlePaste();
253
+ }
254
+ };
255
+
256
+ hooks.useEventListener('keydown', handleKeyboardEvent);
257
+ hooks.useEventListener('keyup', function () {
258
+ keyDownCount.current = 0;
259
+ });
260
+ };
261
+
262
+ module.exports = useKeyboardActions;
263
+ //# sourceMappingURL=useKeyboardActions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useKeyboardActions.js","sources":["../../../src/utils/useKeyboardActions.js"],"sourcesContent":["/* eslint-disable complexity */\nimport { useRef, useState } from 'react';\nimport { useBuilderStore } from '../contexts/BuilderContext';\nimport { usePropStore } from '../contexts/PropContext';\nimport { findItemById, getDimensions, getMostVisiblePage } from './functions';\nimport { useEventListener, useSelectedElements } from './hooks';\nimport { EVENT_IGNORED_ROLES } from '../constants/eventIgnoredRoles';\nimport generateId from './generateId';\n\nconst useKeyboardActions = () => {\n const [itemToPaste, setItemToPaste] = useState(null);\n const keyDownCount = useRef(null);\n\n const activeElements = useBuilderStore(state => state.activeElements);\n const isRightPanelOpen = useBuilderStore(state => state.isRightPanelOpen);\n const setActiveElements = useBuilderStore(state => state.setActiveElements);\n const setIsRightPanelOpen = useBuilderStore(state => state.setIsRightPanelOpen);\n const resetActiveElements = useBuilderStore(state => state.resetActiveElements);\n\n const pages = usePropStore(state => state.pages);\n const onItemAdd = usePropStore(state => state.onItemAdd);\n const onItemRemove = usePropStore(state => state.onItemRemove);\n const onItemChange = usePropStore(state => state.onItemChange);\n const onAnEventTrigger = usePropStore(state => state.onAnEventTrigger);\n\n const isMultipleItemSelected = activeElements.length > 1;\n\n const foundItem = findItemById(activeElements.length ? activeElements[0] : null, pages);\n\n const selectedItems = useSelectedElements();\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 ...getDimensions(item),\n [direction]: item[direction] + value,\n pageID: item.pageID,\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 resetActiveElements();\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 resetActiveElements();\n }\n\n if (event.shiftKey) {\n if (items[currentIndex - 1]) setActiveElements(items[currentIndex - 1].id);\n else setActiveElements(items[items.length - 1].id);\n } else if (items[currentIndex + 1]) {\n setActiveElements(items[currentIndex + 1].id);\n } else setActiveElements(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 resetActiveElements();\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 setActiveElements(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 setActiveElements(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 resetActiveElements();\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 (activeElements.length && !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\nexport default useKeyboardActions;\n"],"names":["useKeyboardActions","useState","itemToPaste","setItemToPaste","keyDownCount","useRef","activeElements","useBuilderStore","state","isRightPanelOpen","setActiveElements","setIsRightPanelOpen","resetActiveElements","pages","usePropStore","onItemAdd","onItemRemove","onItemChange","onAnEventTrigger","isMultipleItemSelected","length","foundItem","findItemById","selectedItems","useSelectedElements","moveItemWithKeyboard","event","direction","value","preventDefault","forEach","item","isLocked","id","getDimensions","pageID","selectNextOrPrevElement","deletedItem","referenceItem","page","find","_page","items","currentIndex","findIndex","shiftKey","onItemRemoveFromPage","e","itemType","handlePaste","itemID","generateId","getMostVisiblePage","offset","left","top","keyboardActions","key","metaKey","current","movementValue","shouldSuppressKeyboardEvent","EVENT_IGNORED_ROLES","some","role","target","closest","handleKeyboardEvent","shouldPaste","arrowKeyCodes","includes","useEventListener"],"mappings":"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"}
@@ -0,0 +1,156 @@
1
+ 'use strict';
2
+
3
+ require('core-js/modules/es.array.find.js');
4
+ require('core-js/modules/es.regexp.exec.js');
5
+ require('core-js/modules/es.string.replace.js');
6
+ var React = require('react');
7
+ var BuilderContext = require('../contexts/BuilderContext.js');
8
+ var PropContext = require('../contexts/PropContext.js');
9
+ var functions = require('./functions.js');
10
+
11
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
12
+
13
+ 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."); }
14
+
15
+ 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); }
16
+
17
+ 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; }
18
+
19
+ 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; }
20
+
21
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
22
+ var EXCLUDED_SELECTORS = ['.reportItem', '.reportItemWrapper', '.pageActions', '.jfReport-addSlide', '[role="button"]', 'button', '.contextMenu', '.reportItemResizer-wrapper'];
23
+
24
+ var useMarqueeSelection = function useMarqueeSelection(canvasRef) {
25
+ var _useState = React.useState(false),
26
+ _useState2 = _slicedToArray(_useState, 2),
27
+ isSelecting = _useState2[0],
28
+ setIsSelecting = _useState2[1];
29
+
30
+ var _useState3 = React.useState(null),
31
+ _useState4 = _slicedToArray(_useState3, 2),
32
+ selectionBox = _useState4[0],
33
+ setSelectionBox = _useState4[1];
34
+
35
+ var _useState5 = React.useState(null),
36
+ _useState6 = _slicedToArray(_useState5, 2),
37
+ selectionPageId = _useState6[0],
38
+ setSelectionPageId = _useState6[1];
39
+
40
+ var selectionStartRef = React.useRef(null);
41
+ var pages = PropContext.usePropStore(function (state) {
42
+ return state.pages;
43
+ });
44
+ var zoom = BuilderContext.useBuilderStore(function (state) {
45
+ return state.zoom;
46
+ });
47
+ var resetActiveElements = BuilderContext.useBuilderStore(function (state) {
48
+ return state.resetActiveElements;
49
+ });
50
+ var setActiveElementsSelection = BuilderContext.useBuilderStore(function (state) {
51
+ return state.setActiveElementsSelection;
52
+ });
53
+ var handleMouseDown = React.useCallback(function (e) {
54
+ if (e.button !== 0) return;
55
+ var target = e.target; // Don't start selection if clicking on an interactive element
56
+
57
+ if (EXCLUDED_SELECTORS.some(function (selector) {
58
+ return target.closest(selector);
59
+ })) {
60
+ return;
61
+ } // Find the page element from the click target
62
+
63
+
64
+ var pageElement = target.closest('.jfReport-page') || target.closest('[id*="presentation-page-"]');
65
+ if (!pageElement) return;
66
+ var pageId = pageElement.getAttribute('data-id') || pageElement.getAttribute('id').replace('presentation-page-', '');
67
+ if (!pageId) return;
68
+ e.preventDefault();
69
+ var pageRect = pageElement.getBoundingClientRect();
70
+ var startX = e.clientX - pageRect.left;
71
+ var startY = e.clientY - pageRect.top;
72
+ selectionStartRef.current = {
73
+ pageRect: pageRect,
74
+ startX: startX,
75
+ startY: startY
76
+ };
77
+ setSelectionPageId(pageId);
78
+ setSelectionBox({
79
+ endX: startX,
80
+ endY: startY,
81
+ startX: startX,
82
+ startY: startY
83
+ });
84
+ setIsSelecting(true);
85
+ resetActiveElements();
86
+ }, [resetActiveElements]);
87
+ var handleMouseMove = React.useCallback(function (e) {
88
+ if (!isSelecting || !selectionStartRef.current) return;
89
+ var _selectionStartRef$cu = selectionStartRef.current,
90
+ pageRect = _selectionStartRef$cu.pageRect,
91
+ startX = _selectionStartRef$cu.startX,
92
+ startY = _selectionStartRef$cu.startY;
93
+ var endX = Math.max(0, Math.min(e.clientX - pageRect.left, pageRect.width));
94
+ var endY = Math.max(0, Math.min(e.clientY - pageRect.top, pageRect.height));
95
+ setSelectionBox({
96
+ endX: endX,
97
+ endY: endY,
98
+ startX: startX,
99
+ startY: startY
100
+ });
101
+ }, [isSelecting]);
102
+ var handleMouseUp = React.useCallback(function () {
103
+ if (!isSelecting || !selectionBox || !selectionPageId) {
104
+ setIsSelecting(false);
105
+ setSelectionBox(null);
106
+ selectionStartRef.current = null;
107
+ return;
108
+ }
109
+
110
+ var page = pages.find(function (p) {
111
+ return p.id === selectionPageId;
112
+ });
113
+
114
+ if (page !== null && page !== void 0 && page.items) {
115
+ var selectedItemIds = functions.getItemsInSelectionBox(selectionBox, page.items, zoom);
116
+
117
+ if (selectedItemIds.length > 0) {
118
+ setActiveElementsSelection(selectedItemIds);
119
+ }
120
+ }
121
+
122
+ setIsSelecting(false);
123
+ setSelectionBox(null);
124
+ setSelectionPageId(null);
125
+ selectionStartRef.current = null;
126
+ }, [isSelecting, selectionBox, selectionPageId, pages, zoom, setActiveElementsSelection]); // Canvas mouse down listener
127
+
128
+ React.useEffect(function () {
129
+ var canvas = canvasRef === null || canvasRef === void 0 ? void 0 : canvasRef.current;
130
+ if (!canvas) return;
131
+ canvas.addEventListener('mousedown', handleMouseDown);
132
+ return function () {
133
+ return canvas.removeEventListener('mousedown', handleMouseDown);
134
+ };
135
+ }, [canvasRef, handleMouseDown]); // Global mouse event listeners for drag
136
+
137
+ React.useEffect(function () {
138
+ if (!isSelecting) return;
139
+ document.body.style.cursor = 'crosshair';
140
+ document.addEventListener('mousemove', handleMouseMove);
141
+ document.addEventListener('mouseup', handleMouseUp);
142
+ return function () {
143
+ document.body.style.cursor = '';
144
+ document.removeEventListener('mousemove', handleMouseMove);
145
+ document.removeEventListener('mouseup', handleMouseUp);
146
+ };
147
+ }, [isSelecting, handleMouseMove, handleMouseUp]);
148
+ return {
149
+ isSelecting: isSelecting,
150
+ selectionBox: selectionBox,
151
+ selectionPageId: selectionPageId
152
+ };
153
+ };
154
+
155
+ module.exports = useMarqueeSelection;
156
+ //# sourceMappingURL=useMarqueeSelection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMarqueeSelection.js","sources":["../../../src/utils/useMarqueeSelection.js"],"sourcesContent":["import {\n useCallback,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport { useBuilderStore } from '../contexts/BuilderContext';\nimport { usePropStore } from '../contexts/PropContext';\nimport { getItemsInSelectionBox } from './functions';\n\nconst EXCLUDED_SELECTORS = [\n '.reportItem',\n '.reportItemWrapper',\n '.pageActions',\n '.jfReport-addSlide',\n '[role=\"button\"]',\n 'button',\n '.contextMenu',\n '.reportItemResizer-wrapper',\n];\n\nconst useMarqueeSelection = canvasRef => {\n const [isSelecting, setIsSelecting] = useState(false);\n const [selectionBox, setSelectionBox] = useState(null);\n const [selectionPageId, setSelectionPageId] = useState(null);\n const selectionStartRef = useRef(null);\n\n const pages = usePropStore(state => state.pages);\n const zoom = useBuilderStore(state => state.zoom);\n const resetActiveElements = useBuilderStore(state => state.resetActiveElements);\n const setActiveElementsSelection = useBuilderStore(state => state.setActiveElementsSelection);\n\n const handleMouseDown = useCallback(e => {\n if (e.button !== 0) return;\n\n const { target } = e;\n\n // Don't start selection if clicking on an interactive element\n if (EXCLUDED_SELECTORS.some(selector => target.closest(selector))) {\n return;\n }\n\n // Find the page element from the click target\n const pageElement = target.closest('.jfReport-page')\n || target.closest('[id*=\"presentation-page-\"]');\n if (!pageElement) return;\n\n const pageId = pageElement.getAttribute('data-id')\n || pageElement.getAttribute('id').replace('presentation-page-', '');\n if (!pageId) return;\n\n e.preventDefault();\n\n const pageRect = pageElement.getBoundingClientRect();\n const startX = e.clientX - pageRect.left;\n const startY = e.clientY - pageRect.top;\n\n selectionStartRef.current = { pageRect, startX, startY };\n setSelectionPageId(pageId);\n setSelectionBox({\n endX: startX,\n endY: startY,\n startX,\n startY,\n });\n setIsSelecting(true);\n resetActiveElements();\n }, [resetActiveElements]);\n\n const handleMouseMove = useCallback(e => {\n if (!isSelecting || !selectionStartRef.current) return;\n\n const { pageRect, startX, startY } = selectionStartRef.current;\n const endX = Math.max(0, Math.min(e.clientX - pageRect.left, pageRect.width));\n const endY = Math.max(0, Math.min(e.clientY - pageRect.top, pageRect.height));\n\n setSelectionBox({\n endX,\n endY,\n startX,\n startY,\n });\n }, [isSelecting]);\n\n const handleMouseUp = useCallback(() => {\n if (!isSelecting || !selectionBox || !selectionPageId) {\n setIsSelecting(false);\n setSelectionBox(null);\n selectionStartRef.current = null;\n return;\n }\n\n const page = pages.find(p => p.id === selectionPageId);\n\n if (page?.items) {\n const selectedItemIds = getItemsInSelectionBox(selectionBox, page.items, zoom);\n if (selectedItemIds.length > 0) {\n setActiveElementsSelection(selectedItemIds);\n }\n }\n\n setIsSelecting(false);\n setSelectionBox(null);\n setSelectionPageId(null);\n selectionStartRef.current = null;\n }, [isSelecting, selectionBox, selectionPageId, pages, zoom, setActiveElementsSelection]);\n\n // Canvas mouse down listener\n useEffect(() => {\n const canvas = canvasRef?.current;\n if (!canvas) return;\n\n canvas.addEventListener('mousedown', handleMouseDown);\n return () => canvas.removeEventListener('mousedown', handleMouseDown);\n }, [canvasRef, handleMouseDown]);\n\n // Global mouse event listeners for drag\n useEffect(() => {\n if (!isSelecting) return;\n\n document.body.style.cursor = 'crosshair';\n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('mouseup', handleMouseUp);\n\n return () => {\n document.body.style.cursor = '';\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mouseup', handleMouseUp);\n };\n }, [isSelecting, handleMouseMove, handleMouseUp]);\n\n return {\n isSelecting,\n selectionBox,\n selectionPageId,\n };\n};\n\nexport default useMarqueeSelection;\n"],"names":["EXCLUDED_SELECTORS","useMarqueeSelection","canvasRef","useState","isSelecting","setIsSelecting","selectionBox","setSelectionBox","selectionPageId","setSelectionPageId","selectionStartRef","useRef","pages","usePropStore","state","zoom","useBuilderStore","resetActiveElements","setActiveElementsSelection","handleMouseDown","useCallback","e","button","target","some","selector","closest","pageElement","pageId","getAttribute","replace","preventDefault","pageRect","getBoundingClientRect","startX","clientX","left","startY","clientY","top","current","endX","endY","handleMouseMove","Math","max","min","width","height","handleMouseUp","page","find","p","id","items","selectedItemIds","getItemsInSelectionBox","length","useEffect","canvas","addEventListener","removeEventListener","document","body","style","cursor"],"mappings":"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"}
@@ -1,6 +1,5 @@
1
1
  import 'core-js/modules/es.array.concat.js';
2
- import 'core-js/modules/es.array.map.js';
3
- import 'core-js/modules/es.object.keys.js';
2
+ import 'core-js/modules/es.object.entries.js';
4
3
  import 'core-js/modules/es.object.to-string.js';
5
4
  import 'core-js/modules/es.regexp.to-string.js';
6
5
  import { memo } from 'react';
@@ -10,40 +9,51 @@ import { jsx } from 'react/jsx-runtime';
10
9
 
11
10
  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; }
12
11
 
12
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
13
+
14
+ 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."); }
15
+
16
+ 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); }
17
+
18
+ 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; }
19
+
20
+ 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; }
21
+
22
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
23
+
13
24
  var AlignmentGuides = function AlignmentGuides(_ref) {
14
25
  var axis = _ref.axis,
15
26
  _ref$guides = _ref.guides,
16
27
  guides = _ref$guides === void 0 ? {} : _ref$guides,
17
28
  _ref$matches = _ref.matches,
18
- matches = _ref$matches === void 0 ? {} : _ref$matches,
19
- _ref$show = _ref.show,
20
- show = _ref$show === void 0 ? false : _ref$show;
29
+ matches = _ref$matches === void 0 ? {} : _ref$matches;
21
30
  var zoom = useBuilderStore(function (state) {
22
31
  return state.zoom;
23
32
  });
24
- if (Object.keys(matches).length === 0) return null;
25
33
  var styleKey = axis === 'x' ? 'left' : 'top';
26
- return Object.keys(guides).reduce(function (result, box) {
27
- var guideClassNames = show ? "guide ".concat(axis, "Axis active") : "guide ".concat(axis, "Axis");
28
- var yAxisGuidesForCurrentBox = guides[box][axis].map(function (position, index) {
29
- if (show && matches && matches[axis] && matches[axis].intersection && matches[axis].intersection === position) {
30
- return /*#__PURE__*/jsx("div", {
31
- className: guideClassNames,
34
+ return Object.entries(guides).reduce(function (accum, _ref2) {
35
+ var _ref3 = _slicedToArray(_ref2, 2),
36
+ box = _ref3[0],
37
+ positions = _ref3[1];
38
+
39
+ var shownGuides = positions[axis].reduce(function (acc, position, index) {
40
+ if (matches.intersection === position) {
41
+ acc.push( /*#__PURE__*/jsx("div", {
42
+ className: "guide ".concat(axis, "Axis active"),
32
43
  style: _defineProperty({}, styleKey, position / zoom)
33
- }, "".concat(position, "-").concat(index.toString(), "-").concat(box));
44
+ }, "".concat(position, "-").concat(index.toString(), "-").concat(box)));
34
45
  }
35
46
 
36
- return null;
37
- });
38
- return result.concat(yAxisGuidesForCurrentBox);
47
+ return acc;
48
+ }, []);
49
+ return accum.concat(shownGuides);
39
50
  }, []);
40
51
  };
41
52
 
42
53
  AlignmentGuides.propTypes = {
43
54
  axis: PropTypes.oneOf(['x', 'y']).isRequired,
44
55
  guides: PropTypes.shape({}),
45
- matches: PropTypes.shape({}),
46
- show: PropTypes.bool
56
+ matches: PropTypes.shape({})
47
57
  };
48
58
  var AlignmentGuides$1 = /*#__PURE__*/memo(AlignmentGuides);
49
59
 
@@ -1 +1 @@
1
- {"version":3,"file":"AlignmentGuides.js","sources":["../../../src/components/AlignmentGuides.js"],"sourcesContent":["import { memo } from 'react';\nimport PropTypes from 'prop-types';\nimport { useBuilderStore } from '../contexts/BuilderContext';\n\nconst AlignmentGuides = ({\n axis,\n guides = {},\n matches = {},\n show = false,\n}) => {\n const zoom = useBuilderStore(state => state.zoom);\n if (Object.keys(matches).length === 0) return null;\n const styleKey = axis === 'x' ? 'left' : 'top';\n\n return Object.keys(guides).reduce((result, box) => {\n const guideClassNames = show ? `guide ${axis}Axis active` : `guide ${axis}Axis`;\n const yAxisGuidesForCurrentBox = guides[box][axis].map((position, index) => {\n if (\n show\n && matches\n && matches[axis]\n && matches[axis].intersection\n && matches[axis].intersection === position\n ) {\n return (\n <div\n key={`${position}-${index.toString()}-${box}`}\n className={guideClassNames}\n style={{ [styleKey]: position / zoom }}\n />\n );\n }\n return null;\n });\n\n return result.concat(yAxisGuidesForCurrentBox);\n }, []);\n};\n\nAlignmentGuides.propTypes = {\n axis: PropTypes.oneOf(['x', 'y']).isRequired,\n guides: PropTypes.shape({}),\n matches: PropTypes.shape({}),\n show: PropTypes.bool,\n};\n\nexport default memo(AlignmentGuides);\n"],"names":["AlignmentGuides","axis","guides","matches","show","zoom","useBuilderStore","state","Object","keys","length","styleKey","reduce","result","box","guideClassNames","yAxisGuidesForCurrentBox","map","position","index","intersection","_jsx","toString","concat","propTypes","PropTypes","oneOf","isRequired","shape","bool","memo"],"mappings":";;;;;;;;;;;;AAIA,IAAMA,eAAe,GAAG,SAAlBA,eAAkB,OAKlB;AAAA,MAJJC,IAII,QAJJA,IAII;AAAA,yBAHJC,MAGI;AAAA,MAHJA,MAGI,4BAHK,EAGL;AAAA,0BAFJC,OAEI;AAAA,MAFJA,OAEI,6BAFM,EAEN;AAAA,uBADJC,IACI;AAAA,MADJA,IACI,0BADG,KACH;AACJ,MAAMC,IAAI,GAAGC,eAAe,CAAC,UAAAC,KAAK;AAAA,WAAIA,KAAK,CAACF,IAAV;AAAA,GAAN,CAA5B;AACA,MAAIG,MAAM,CAACC,IAAP,CAAYN,OAAZ,EAAqBO,MAArB,KAAgC,CAApC,EAAuC,OAAO,IAAP;AACvC,MAAMC,QAAQ,GAAGV,IAAI,KAAK,GAAT,GAAe,MAAf,GAAwB,KAAzC;AAEA,SAAOO,MAAM,CAACC,IAAP,CAAYP,MAAZ,EAAoBU,MAApB,CAA2B,UAACC,MAAD,EAASC,GAAT,EAAiB;AACjD,QAAMC,eAAe,GAAGX,IAAI,mBAAYH,IAAZ,mCAAyCA,IAAzC,SAA5B;AACA,QAAMe,wBAAwB,GAAGd,MAAM,CAACY,GAAD,CAAN,CAAYb,IAAZ,EAAkBgB,GAAlB,CAAsB,UAACC,QAAD,EAAWC,KAAX,EAAqB;AAC1E,UACEf,IAAI,IACDD,OADH,IAEGA,OAAO,CAACF,IAAD,CAFV,IAGGE,OAAO,CAACF,IAAD,CAAP,CAAcmB,YAHjB,IAIGjB,OAAO,CAACF,IAAD,CAAP,CAAcmB,YAAd,KAA+BF,QALpC,EAME;AACA,4BACEG;AAEE,UAAA,SAAS,EAAEN,eAFb;AAGE,UAAA,KAAK,sBAAKJ,QAAL,EAAgBO,QAAQ,GAAGb,IAA3B;AAHP,qBACUa,QADV,cACsBC,KAAK,CAACG,QAAN,EADtB,cAC0CR,GAD1C,EADF;AAOD;;AACD,aAAO,IAAP;AACD,KAjBgC,CAAjC;AAmBA,WAAOD,MAAM,CAACU,MAAP,CAAcP,wBAAd,CAAP;AACD,GAtBM,EAsBJ,EAtBI,CAAP;AAuBD,CAjCD;;AAmCAhB,eAAe,CAACwB,SAAhB,GAA4B;AAC1BvB,EAAAA,IAAI,EAAEwB,SAAS,CAACC,KAAV,CAAgB,CAAC,GAAD,EAAM,GAAN,CAAhB,EAA4BC,UADR;AAE1BzB,EAAAA,MAAM,EAAEuB,SAAS,CAACG,KAAV,CAAgB,EAAhB,CAFkB;AAG1BzB,EAAAA,OAAO,EAAEsB,SAAS,CAACG,KAAV,CAAgB,EAAhB,CAHiB;AAI1BxB,EAAAA,IAAI,EAAEqB,SAAS,CAACI;AAJU,CAA5B;AAOA,qCAAeC,IAAI,CAAC9B,eAAD,CAAnB;;;;"}
1
+ {"version":3,"file":"AlignmentGuides.js","sources":["../../../src/components/AlignmentGuides.js"],"sourcesContent":["import { memo } from 'react';\nimport PropTypes from 'prop-types';\nimport { useBuilderStore } from '../contexts/BuilderContext';\n\nconst AlignmentGuides = ({\n axis,\n guides = {},\n matches = {},\n}) => {\n const zoom = useBuilderStore(state => state.zoom);\n const styleKey = axis === 'x' ? 'left' : 'top';\n\n return Object.entries(guides).reduce((accum, [box, positions]) => {\n const shownGuides = positions[axis].reduce((acc, position, index) => {\n if (matches.intersection === position) {\n acc.push(\n <div\n key={`${position}-${index.toString()}-${box}`}\n className={`guide ${axis}Axis active`}\n style={{ [styleKey]: position / zoom }}\n />,\n );\n }\n return acc;\n }, []);\n\n return accum.concat(shownGuides);\n }, []);\n};\n\nAlignmentGuides.propTypes = {\n axis: PropTypes.oneOf(['x', 'y']).isRequired,\n guides: PropTypes.shape({}),\n matches: PropTypes.shape({}),\n};\n\nexport default memo(AlignmentGuides);\n"],"names":["AlignmentGuides","axis","guides","matches","zoom","useBuilderStore","state","styleKey","Object","entries","reduce","accum","box","positions","shownGuides","acc","position","index","intersection","push","_jsx","toString","concat","propTypes","PropTypes","oneOf","isRequired","shape","memo"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAIA,IAAMA,eAAe,GAAG,SAAlBA,eAAkB,OAIlB;AAAA,MAHJC,IAGI,QAHJA,IAGI;AAAA,yBAFJC,MAEI;AAAA,MAFJA,MAEI,4BAFK,EAEL;AAAA,0BADJC,OACI;AAAA,MADJA,OACI,6BADM,EACN;AACJ,MAAMC,IAAI,GAAGC,eAAe,CAAC,UAAAC,KAAK;AAAA,WAAIA,KAAK,CAACF,IAAV;AAAA,GAAN,CAA5B;AACA,MAAMG,QAAQ,GAAGN,IAAI,KAAK,GAAT,GAAe,MAAf,GAAwB,KAAzC;AAEA,SAAOO,MAAM,CAACC,OAAP,CAAeP,MAAf,EAAuBQ,MAAvB,CAA8B,UAACC,KAAD,SAA6B;AAAA;AAAA,QAApBC,GAAoB;AAAA,QAAfC,SAAe;;AAChE,QAAMC,WAAW,GAAGD,SAAS,CAACZ,IAAD,CAAT,CAAgBS,MAAhB,CAAuB,UAACK,GAAD,EAAMC,QAAN,EAAgBC,KAAhB,EAA0B;AACnE,UAAId,OAAO,CAACe,YAAR,KAAyBF,QAA7B,EAAuC;AACrCD,QAAAA,GAAG,CAACI,IAAJ,eACEC;AAEE,UAAA,SAAS,kBAAWnB,IAAX,gBAFX;AAGE,UAAA,KAAK,sBAAKM,QAAL,EAAgBS,QAAQ,GAAGZ,IAA3B;AAHP,qBACUY,QADV,cACsBC,KAAK,CAACI,QAAN,EADtB,cAC0CT,GAD1C,EADF;AAOD;;AACD,aAAOG,GAAP;AACD,KAXmB,EAWjB,EAXiB,CAApB;AAaA,WAAOJ,KAAK,CAACW,MAAN,CAAaR,WAAb,CAAP;AACD,GAfM,EAeJ,EAfI,CAAP;AAgBD,CAxBD;;AA0BAd,eAAe,CAACuB,SAAhB,GAA4B;AAC1BtB,EAAAA,IAAI,EAAEuB,SAAS,CAACC,KAAV,CAAgB,CAAC,GAAD,EAAM,GAAN,CAAhB,EAA4BC,UADR;AAE1BxB,EAAAA,MAAM,EAAEsB,SAAS,CAACG,KAAV,CAAgB,EAAhB,CAFkB;AAG1BxB,EAAAA,OAAO,EAAEqB,SAAS,CAACG,KAAV,CAAgB,EAAhB;AAHiB,CAA5B;AAMA,qCAAeC,IAAI,CAAC5B,eAAD,CAAnB;;;;"}
@@ -258,7 +258,10 @@ var ContextMenu = function ContextMenu(_ref) {
258
258
  children: [/*#__PURE__*/jsx("span", {
259
259
  className: "contextMenu-icon",
260
260
  children: menuItem.icon
261
- }), menuItem.text]
261
+ }), /*#__PURE__*/jsx("span", {
262
+ className: "contextMenu-text",
263
+ children: menuItem.text
264
+ })]
262
265
  }, menuItem.text);
263
266
  })
264
267
  });