@jotforminc/dnd-builder 3.1.1 → 3.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +27 -0
- package/index.d.ts +428 -0
- package/lib/cjs/components/AlignmentGuides.js +28 -18
- package/lib/cjs/components/AlignmentGuides.js.map +1 -1
- package/lib/cjs/components/Builder/ContextMenu.js +4 -1
- package/lib/cjs/components/Builder/ContextMenu.js.map +1 -1
- package/lib/cjs/components/Builder/DraggableLayer.js +1 -5
- package/lib/cjs/components/Builder/DraggableLayer.js.map +1 -1
- package/lib/cjs/components/Builder/Element.js +7 -4
- package/lib/cjs/components/Builder/Element.js.map +1 -1
- package/lib/cjs/components/Builder/Page.js +56 -62
- package/lib/cjs/components/Builder/Page.js.map +1 -1
- package/lib/cjs/components/Builder/Scene.js +30 -251
- package/lib/cjs/components/Builder/Scene.js.map +1 -1
- package/lib/cjs/components/Builder/SelectionBox.js +48 -0
- package/lib/cjs/components/Builder/SelectionBox.js.map +1 -0
- package/lib/cjs/components/Builder/Tabs.js +15 -20
- package/lib/cjs/components/Builder/Tabs.js.map +1 -1
- package/lib/cjs/components/DraggableItem/DraggableItem.js +78 -135
- package/lib/cjs/components/DraggableItem/DraggableItem.js.map +1 -1
- package/lib/cjs/components/DraggableItem/DraggableItemActions.js +69 -29
- package/lib/cjs/components/DraggableItem/DraggableItemActions.js.map +1 -1
- package/lib/cjs/components/DraggableItem/DraggableItemLayer.js +8 -8
- package/lib/cjs/components/DraggableItem/DraggableItemLayer.js.map +1 -1
- package/lib/cjs/components/PageItemResizer.js +41 -43
- package/lib/cjs/components/PageItemResizer.js.map +1 -1
- package/lib/cjs/components/Panels/AllSlidesPanel/AllSlidesPanel.js +1 -3
- package/lib/cjs/components/Panels/AllSlidesPanel/AllSlidesPanel.js.map +1 -1
- package/lib/cjs/components/Panels/AllSlidesPanel/PageList.js +0 -6
- package/lib/cjs/components/Panels/AllSlidesPanel/PageList.js.map +1 -1
- package/lib/cjs/components/Panels/LeftPanel/LeftPanel.js +1 -4
- package/lib/cjs/components/Panels/LeftPanel/LeftPanel.js.map +1 -1
- package/lib/cjs/components/Panels/LeftPanel/LeftPanelOpener.js +6 -7
- package/lib/cjs/components/Panels/LeftPanel/LeftPanelOpener.js.map +1 -1
- package/lib/cjs/components/Panels/RightPanel/RightPanel.js +7 -7
- package/lib/cjs/components/Panels/RightPanel/RightPanel.js.map +1 -1
- package/lib/cjs/components/Panels/RightPanel/RightPanelToggler.js +9 -10
- package/lib/cjs/components/Panels/RightPanel/RightPanelToggler.js.map +1 -1
- package/lib/cjs/components/Panels/SlidesPanel/SlidesPanel.js +1 -3
- package/lib/cjs/components/Panels/SlidesPanel/SlidesPanel.js.map +1 -1
- package/lib/cjs/components/Panels/SlidesPanel/SlidesPanelToggler.js +8 -6
- package/lib/cjs/components/Panels/SlidesPanel/SlidesPanelToggler.js.map +1 -1
- package/lib/cjs/components/ReportItemsWrapper.js +5 -11
- package/lib/cjs/components/ReportItemsWrapper.js.map +1 -1
- package/lib/cjs/components/Settings/PageLayer/LayerDragOverlay.js +2 -4
- package/lib/cjs/components/Settings/PageLayer/LayerDragOverlay.js.map +1 -1
- package/lib/cjs/components/Settings/PageLayer/LayerItem.js +12 -7
- package/lib/cjs/components/Settings/PageLayer/LayerItem.js.map +1 -1
- package/lib/cjs/components/Settings/PageLayer/PageLayer.js +2 -4
- package/lib/cjs/components/Settings/PageLayer/PageLayer.js.map +1 -1
- package/lib/cjs/components/TextEditor/CustomToolbar/CustomToolbarWrapper.js +3 -8
- package/lib/cjs/components/TextEditor/CustomToolbar/CustomToolbarWrapper.js.map +1 -1
- package/lib/cjs/constants/texts.js +0 -1
- package/lib/cjs/constants/texts.js.map +1 -1
- package/lib/cjs/contexts/BuilderContext.js +47 -23
- package/lib/cjs/contexts/BuilderContext.js.map +1 -1
- package/lib/cjs/styles/_jfReportsPages.scss +8 -1
- package/lib/cjs/styles/_jfReportsPanels.scss +4 -2
- package/lib/cjs/utils/functions.js +124 -34
- package/lib/cjs/utils/functions.js.map +1 -1
- package/lib/cjs/utils/hooks.js +7 -7
- package/lib/cjs/utils/hooks.js.map +1 -1
- package/lib/cjs/utils/useKeyboardActions.js +263 -0
- package/lib/cjs/utils/useKeyboardActions.js.map +1 -0
- package/lib/cjs/utils/useMarqueeSelection.js +156 -0
- package/lib/cjs/utils/useMarqueeSelection.js.map +1 -0
- package/lib/esm/components/AlignmentGuides.js +28 -18
- package/lib/esm/components/AlignmentGuides.js.map +1 -1
- package/lib/esm/components/Builder/ContextMenu.js +4 -1
- package/lib/esm/components/Builder/ContextMenu.js.map +1 -1
- package/lib/esm/components/Builder/DraggableLayer.js +1 -5
- package/lib/esm/components/Builder/DraggableLayer.js.map +1 -1
- package/lib/esm/components/Builder/Element.js +7 -4
- package/lib/esm/components/Builder/Element.js.map +1 -1
- package/lib/esm/components/Builder/Page.js +58 -64
- package/lib/esm/components/Builder/Page.js.map +1 -1
- package/lib/esm/components/Builder/Scene.js +32 -253
- package/lib/esm/components/Builder/Scene.js.map +1 -1
- package/lib/esm/components/Builder/SelectionBox.js +42 -0
- package/lib/esm/components/Builder/SelectionBox.js.map +1 -0
- package/lib/esm/components/Builder/Tabs.js +15 -20
- package/lib/esm/components/Builder/Tabs.js.map +1 -1
- package/lib/esm/components/DraggableItem/DraggableItem.js +80 -137
- package/lib/esm/components/DraggableItem/DraggableItem.js.map +1 -1
- package/lib/esm/components/DraggableItem/DraggableItemActions.js +72 -28
- package/lib/esm/components/DraggableItem/DraggableItemActions.js.map +1 -1
- package/lib/esm/components/DraggableItem/DraggableItemLayer.js +9 -9
- package/lib/esm/components/DraggableItem/DraggableItemLayer.js.map +1 -1
- package/lib/esm/components/PageItemResizer.js +42 -44
- package/lib/esm/components/PageItemResizer.js.map +1 -1
- package/lib/esm/components/Panels/AllSlidesPanel/AllSlidesPanel.js +2 -4
- package/lib/esm/components/Panels/AllSlidesPanel/AllSlidesPanel.js.map +1 -1
- package/lib/esm/components/Panels/AllSlidesPanel/PageList.js +0 -6
- package/lib/esm/components/Panels/AllSlidesPanel/PageList.js.map +1 -1
- package/lib/esm/components/Panels/LeftPanel/LeftPanel.js +3 -6
- package/lib/esm/components/Panels/LeftPanel/LeftPanel.js.map +1 -1
- package/lib/esm/components/Panels/LeftPanel/LeftPanelOpener.js +6 -7
- package/lib/esm/components/Panels/LeftPanel/LeftPanelOpener.js.map +1 -1
- package/lib/esm/components/Panels/RightPanel/RightPanel.js +7 -7
- package/lib/esm/components/Panels/RightPanel/RightPanel.js.map +1 -1
- package/lib/esm/components/Panels/RightPanel/RightPanelToggler.js +9 -10
- package/lib/esm/components/Panels/RightPanel/RightPanelToggler.js.map +1 -1
- package/lib/esm/components/Panels/SlidesPanel/SlidesPanel.js +2 -4
- package/lib/esm/components/Panels/SlidesPanel/SlidesPanel.js.map +1 -1
- package/lib/esm/components/Panels/SlidesPanel/SlidesPanelToggler.js +8 -6
- package/lib/esm/components/Panels/SlidesPanel/SlidesPanelToggler.js.map +1 -1
- package/lib/esm/components/ReportItemsWrapper.js +5 -11
- package/lib/esm/components/ReportItemsWrapper.js.map +1 -1
- package/lib/esm/components/Settings/PageLayer/LayerDragOverlay.js +2 -4
- package/lib/esm/components/Settings/PageLayer/LayerDragOverlay.js.map +1 -1
- package/lib/esm/components/Settings/PageLayer/LayerItem.js +12 -7
- package/lib/esm/components/Settings/PageLayer/LayerItem.js.map +1 -1
- package/lib/esm/components/Settings/PageLayer/PageLayer.js +2 -4
- package/lib/esm/components/Settings/PageLayer/PageLayer.js.map +1 -1
- package/lib/esm/components/TextEditor/CustomToolbar/CustomToolbarWrapper.js +3 -8
- package/lib/esm/components/TextEditor/CustomToolbar/CustomToolbarWrapper.js.map +1 -1
- package/lib/esm/constants/texts.js +0 -1
- package/lib/esm/constants/texts.js.map +1 -1
- package/lib/esm/contexts/BuilderContext.js +47 -23
- package/lib/esm/contexts/BuilderContext.js.map +1 -1
- package/lib/esm/styles/_jfReportsPages.scss +8 -1
- package/lib/esm/styles/_jfReportsPanels.scss +4 -2
- package/lib/esm/utils/functions.js +121 -34
- package/lib/esm/utils/functions.js.map +1 -1
- package/lib/esm/utils/hooks.js +7 -7
- package/lib/esm/utils/hooks.js.map +1 -1
- package/lib/esm/utils/useKeyboardActions.js +261 -0
- package/lib/esm/utils/useKeyboardActions.js.map +1 -0
- package/lib/esm/utils/useMarqueeSelection.js +154 -0
- package/lib/esm/utils/useMarqueeSelection.js.map +1 -0
- 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.
|
|
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.
|
|
27
|
-
var
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
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
|
|
37
|
-
});
|
|
38
|
-
return
|
|
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
|
|
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
|
-
}),
|
|
261
|
+
}), /*#__PURE__*/jsx("span", {
|
|
262
|
+
className: "contextMenu-text",
|
|
263
|
+
children: menuItem.text
|
|
264
|
+
})]
|
|
262
265
|
}, menuItem.text);
|
|
263
266
|
})
|
|
264
267
|
});
|