@flozy/editor 3.8.8 → 3.8.9

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 (112) hide show
  1. package/dist/Editor/ChatEditor.js +31 -57
  2. package/dist/Editor/CommonEditor.js +69 -8
  3. package/dist/Editor/DialogWrapper.js +4 -3
  4. package/dist/Editor/Editor.css +5 -12
  5. package/dist/Editor/Elements/AI/PopoverAIInput.js +47 -36
  6. package/dist/Editor/Elements/Accordion/Accordion.js +1 -1
  7. package/dist/Editor/Elements/Accordion/AccordionSummary.js +6 -20
  8. package/dist/Editor/Elements/AppHeader/AppHeader.js +36 -23
  9. package/dist/Editor/Elements/Button/EditorButton.js +23 -16
  10. package/dist/Editor/Elements/Embed/Image.js +15 -14
  11. package/dist/Editor/Elements/Embed/Video.js +12 -8
  12. package/dist/Editor/Elements/Emoji/EmojiButton.js +11 -7
  13. package/dist/Editor/Elements/Emoji/EmojiPicker.js +2 -4
  14. package/dist/Editor/Elements/Form/Form.js +1 -1
  15. package/dist/Editor/Elements/FreeGrid/FreeGrid.js +391 -0
  16. package/dist/Editor/Elements/FreeGrid/FreeGridBox.js +193 -0
  17. package/dist/Editor/Elements/FreeGrid/FreeGridButton.js +23 -0
  18. package/dist/Editor/Elements/FreeGrid/FreeGridItem.js +184 -0
  19. package/dist/Editor/Elements/FreeGrid/Options/AddElement.js +36 -0
  20. package/dist/Editor/Elements/FreeGrid/Options/More.js +24 -0
  21. package/dist/Editor/Elements/FreeGrid/Options/SectionSettings.js +47 -0
  22. package/dist/Editor/Elements/FreeGrid/Options/sectionItemOptions.js +11 -0
  23. package/dist/Editor/Elements/FreeGrid/breakpointConstants.js +75 -0
  24. package/dist/Editor/Elements/FreeGrid/styles.js +159 -0
  25. package/dist/Editor/Elements/Grid/Grid.js +12 -8
  26. package/dist/Editor/Elements/Grid/GridItem.js +31 -21
  27. package/dist/Editor/Elements/PageSettings/PageSettingsButton.js +1 -5
  28. package/dist/Editor/Elements/SimpleText/index.js +9 -8
  29. package/dist/Editor/Elements/SimpleText/style.js +37 -0
  30. package/dist/Editor/ErrorBoundary.js +30 -0
  31. package/dist/Editor/Styles/EditorStyles.js +23 -0
  32. package/dist/Editor/Toolbar/Mini/MiniToolbar.js +1 -25
  33. package/dist/Editor/Toolbar/PopupTool/TextFormat.js +1 -0
  34. package/dist/Editor/Toolbar/PopupTool/index.js +8 -0
  35. package/dist/Editor/Toolbar/Toolbar.js +7 -0
  36. package/dist/Editor/Toolbar/toolbarGroups.js +5 -0
  37. package/dist/Editor/common/Icon.js +9 -2
  38. package/dist/Editor/common/MentionsPopup/MentionsListCard.js +1 -6
  39. package/dist/Editor/common/MentionsPopup/index.js +12 -8
  40. package/dist/Editor/common/RnD/ContextMenu/CMenus.js +105 -0
  41. package/dist/Editor/common/RnD/ContextMenu/index.js +38 -0
  42. package/dist/Editor/common/RnD/ContextMenu/styles.js +21 -0
  43. package/dist/Editor/common/RnD/DragInfo/index.js +31 -0
  44. package/dist/Editor/common/RnD/DragInfo/styles.js +15 -0
  45. package/dist/Editor/common/RnD/DragOver/index.js +46 -0
  46. package/dist/Editor/common/RnD/DragOver/styles.js +23 -0
  47. package/dist/Editor/common/RnD/ElementOptions/Actions.js +82 -0
  48. package/dist/Editor/common/RnD/ElementOptions/Icons/LinkIcon.js +26 -0
  49. package/dist/Editor/common/RnD/ElementOptions/index.js +93 -0
  50. package/dist/Editor/common/RnD/ElementOptions/styles.js +41 -0
  51. package/dist/Editor/common/RnD/ElementSettings/OtherSettings/Link.js +153 -0
  52. package/dist/Editor/common/RnD/ElementSettings/OtherSettings/Settings.js +58 -0
  53. package/dist/Editor/common/RnD/ElementSettings/OtherSettings/index.js +7 -0
  54. package/dist/Editor/common/RnD/ElementSettings/Settings/BoxSettings.js +46 -0
  55. package/dist/Editor/common/RnD/ElementSettings/Settings/ButtonSettings.js +46 -0
  56. package/dist/Editor/common/RnD/ElementSettings/Settings/ImageSettings.js +46 -0
  57. package/dist/Editor/common/RnD/ElementSettings/Settings/TextSettings.js +30 -0
  58. package/dist/Editor/common/RnD/ElementSettings/Settings/VideoSettings.js +46 -0
  59. package/dist/Editor/common/RnD/ElementSettings/Settings/index.js +13 -0
  60. package/dist/Editor/common/RnD/ElementSettings/index.js +17 -0
  61. package/dist/Editor/common/RnD/ElementSettings/settingsConstants.js +14 -0
  62. package/dist/Editor/common/RnD/ElementSettings/styles.js +76 -0
  63. package/dist/Editor/common/RnD/GuideLines/BoundaryLine.js +52 -0
  64. package/dist/Editor/common/RnD/GuideLines/index.js +33 -0
  65. package/dist/Editor/common/RnD/GuideLines/styles.js +60 -0
  66. package/dist/Editor/common/RnD/OptionsPopup/index.js +50 -0
  67. package/dist/Editor/common/RnD/OptionsPopup/style.js +36 -0
  68. package/dist/Editor/common/RnD/RnDCopy.js +23 -0
  69. package/dist/Editor/common/RnD/ShadowElement.js +34 -0
  70. package/dist/Editor/common/RnD/SwitchViewport/SwitchViewport.js +40 -0
  71. package/dist/Editor/common/RnD/SwitchViewport/styles.js +24 -0
  72. package/dist/Editor/common/RnD/Theme/ViewportStimulator.js +63 -0
  73. package/dist/Editor/common/RnD/TransformHandles/CornerHandle.js +19 -0
  74. package/dist/Editor/common/RnD/TransformHandles/Icons/BottomRightIcon.js +13 -0
  75. package/dist/Editor/common/RnD/TransformHandles/SizeHandle.js +18 -0
  76. package/dist/Editor/common/RnD/TransformHandles/index.js +62 -0
  77. package/dist/Editor/common/RnD/Utils/alignmentDetection.js +26 -0
  78. package/dist/Editor/common/RnD/Utils/calculateDropItem.js +98 -0
  79. package/dist/Editor/common/RnD/Utils/collisionDetection.js +52 -0
  80. package/dist/Editor/common/RnD/Utils/gridDropItem.js +148 -0
  81. package/dist/Editor/common/RnD/Utils/index.js +251 -0
  82. package/dist/Editor/common/RnD/VirtualElement/index.js +76 -0
  83. package/dist/Editor/common/RnD/VirtualElement/styles.js +27 -0
  84. package/dist/Editor/common/RnD/VirtualElement/updateAutoProps.js +28 -0
  85. package/dist/Editor/common/RnD/index.js +503 -0
  86. package/dist/Editor/common/RnD/styles.js +4 -0
  87. package/dist/Editor/common/Section/index.js +21 -12
  88. package/dist/Editor/common/Section/styles.js +6 -1
  89. package/dist/Editor/common/Shorthands/elements.js +12 -0
  90. package/dist/Editor/common/StyleBuilder/boxStyle.js +30 -0
  91. package/dist/Editor/common/StyleBuilder/fieldTypes/bannerSpacing.js +32 -31
  92. package/dist/Editor/common/StyleBuilder/fieldTypes/borderRadius.js +16 -18
  93. package/dist/Editor/common/StyleBuilder/fieldTypes/selectBox.js +3 -14
  94. package/dist/Editor/common/StyleBuilder/fieldTypes/text.js +4 -2
  95. package/dist/Editor/common/StyleBuilder/index.js +2 -2
  96. package/dist/Editor/common/StyleBuilder/sectionStyle.js +13 -2
  97. package/dist/Editor/helper/RnD/focusOnNewItem.js +39 -0
  98. package/dist/Editor/helper/RnD/scrollToNewSection.js +24 -0
  99. package/dist/Editor/helper/breakpoint.js +5 -0
  100. package/dist/Editor/helper/index.js +139 -22
  101. package/dist/Editor/helper/theme.js +50 -2
  102. package/dist/Editor/hooks/useBreakpoints.js +34 -0
  103. package/dist/Editor/hooks/useMouseMove.js +36 -8
  104. package/dist/Editor/hooks/withCommon.js +2 -1
  105. package/dist/Editor/hooks/withErrorHandling.js +14 -0
  106. package/dist/Editor/utils/RnD/RnDCtrlCmds.js +168 -0
  107. package/dist/Editor/utils/SlateUtilityFunctions.js +31 -5
  108. package/dist/Editor/utils/draftToSlate.js +1 -1
  109. package/dist/Editor/utils/events.js +5 -0
  110. package/dist/Editor/utils/freegrid.js +49 -0
  111. package/dist/Editor/utils/helper.js +29 -0
  112. package/package.json +5 -2
@@ -0,0 +1,148 @@
1
+ import { Transforms, Node } from "slate";
2
+ import { ReactEditor } from "slate-react";
3
+ export const ROW_HEIGHT = 50;
4
+ const MARGIN_OF = {
5
+ xs: 160,
6
+ lg: 490
7
+ };
8
+
9
+ /**
10
+ * This method will update the grid template rows of parent section based on height
11
+ * @param {*} path
12
+ */
13
+ export function updateRows() {}
14
+
15
+ /**
16
+ * This method will update the grid template columns of parent section based on height
17
+ * @param {*} path
18
+ */
19
+ export function updateCols() {}
20
+ const handleMoveNode = (editor, path, newPath, {
21
+ isEmpty
22
+ }) => {
23
+ try {
24
+ const replaceNode = Node.get(editor, path);
25
+ if (isEmpty) {
26
+ const toPath = [...newPath, 0];
27
+ Transforms.insertNodes(editor, [{
28
+ ...replaceNode
29
+ }], {
30
+ at: toPath
31
+ });
32
+ Transforms.removeNodes(editor, {
33
+ at: path
34
+ });
35
+ return toPath;
36
+ } else {
37
+ Transforms.insertNodes(editor, [{
38
+ ...replaceNode
39
+ }], {
40
+ at: newPath
41
+ });
42
+ Transforms.removeNodes(editor, {
43
+ at: path
44
+ });
45
+ return newPath;
46
+ }
47
+ } catch (err) {
48
+ console.log(err);
49
+ console.log("Drop Node error");
50
+ return null;
51
+ }
52
+ };
53
+
54
+ /**
55
+ * This method will update prop in child node so it will re-render and update the path
56
+ * @param {*} path - contains the parent section path
57
+ */
58
+ const reRenderChildNodes = (editor, path) => {
59
+ try {
60
+ const sectionNode = Node.get(editor, path);
61
+ // parent node
62
+ Transforms.setNodes(editor, {
63
+ updated_at: new Date().getTime()
64
+ }, {
65
+ at: path
66
+ });
67
+ sectionNode?.children?.forEach((item, itemIndex) => {
68
+ Transforms.setNodes(editor, {
69
+ updated_at: new Date().getTime()
70
+ }, {
71
+ at: [...path, itemIndex]
72
+ });
73
+ });
74
+ } catch (err) {
75
+ console.log(err);
76
+ }
77
+ };
78
+ export function onDropItem(props, parentClass) {
79
+ try {
80
+ const {
81
+ editor,
82
+ startPosition,
83
+ endPosition,
84
+ dragOver,
85
+ parentPath,
86
+ path,
87
+ diffX,
88
+ x: cx,
89
+ breakpoint
90
+ } = props;
91
+ const posX = parseInt(cx - window.innerWidth / 2 + MARGIN_OF[breakpoint] - diffX);
92
+ const needMove = dragOver !== parentPath;
93
+ const moveTo = dragOver.split("|").map(m => parseInt(m));
94
+ const from = parentPath.split("|").map(m => parseInt(m));
95
+ let newPath = [];
96
+ newPath = moveTo;
97
+ const toSectionNode = Node.get(editor, newPath);
98
+ const addToSectionDOM = ReactEditor.toDOMNode(editor, toSectionNode);
99
+ const rect = addToSectionDOM.getBoundingClientRect();
100
+ const y = endPosition.y - startPosition.diffY - rect.top;
101
+
102
+ // Calculate grid position
103
+ const row = Math.floor(y / ROW_HEIGHT) + 1;
104
+
105
+ // to calculate difference inside the grid
106
+ const marginTop = Math.abs((row - 1) * ROW_HEIGHT - y);
107
+
108
+ // Update grid area
109
+ const gridArea = `${row} / 1 / ${row + 1} / 2`;
110
+ const appenBp = breakpoint === "lg" ? "" : `_${breakpoint}`;
111
+ Transforms.setNodes(editor, {
112
+ [`gridArea${appenBp}`]: gridArea,
113
+ [`left${appenBp}`]: posX,
114
+ [`marginTop${appenBp}`]: marginTop,
115
+ // to avoid auto position / resize of the element
116
+ [`${breakpoint}_updatedOn`]: new Date().getTime()
117
+ }, {
118
+ at: path
119
+ });
120
+ reRenderChildNodes(editor, from);
121
+
122
+ // move the node if section parent changed
123
+ if (needMove) {
124
+ // move the node
125
+ const isEmpty = toSectionNode?.children[0]?.type === undefined;
126
+ if (!isEmpty) {
127
+ newPath = [...newPath, toSectionNode?.children?.length];
128
+ }
129
+ const rPath = handleMoveNode(editor, path, newPath, {
130
+ isEmpty
131
+ });
132
+ reRenderChildNodes(editor, moveTo);
133
+ return {
134
+ updated_at: rPath
135
+ };
136
+ } else {
137
+ return {
138
+ updated_at: path
139
+ };
140
+ }
141
+ } catch (err) {
142
+ console.log(err);
143
+ }
144
+ }
145
+ export function calculateGridArea(y) {
146
+ const row = Math.floor(y / ROW_HEIGHT) + 1;
147
+ return `${row} / 1 / ${row + 1} / 2`;
148
+ }
@@ -0,0 +1,251 @@
1
+ import { Transforms, Node } from "slate";
2
+ import { ReactEditor } from "slate-react";
3
+ import { getNearestItem } from "./calculateDropItem";
4
+ const GUIDE_LINE_THRESHOLD = 5;
5
+ const GUIDE_LINE_OVERLAP_THRESHOLD = 50;
6
+ const handleMoveNode = (editor, path, newPath, {
7
+ isEmpty
8
+ }) => {
9
+ try {
10
+ const replaceNode = Node.get(editor, path);
11
+ if (isEmpty) {
12
+ const toPath = [...newPath, 0];
13
+ Transforms.insertNodes(editor, [{
14
+ ...replaceNode
15
+ }], {
16
+ at: toPath
17
+ });
18
+ Transforms.removeNodes(editor, {
19
+ at: path
20
+ });
21
+ return toPath;
22
+ } else {
23
+ Transforms.insertNodes(editor, [{
24
+ ...replaceNode
25
+ }], {
26
+ at: newPath
27
+ });
28
+ Transforms.removeNodes(editor, {
29
+ at: path
30
+ });
31
+ return newPath;
32
+ }
33
+ } catch (err) {
34
+ console.log(err);
35
+ console.log("Drop Node error");
36
+ return null;
37
+ }
38
+ };
39
+ export function triggerClick(editor, path = []) {
40
+ try {
41
+ const triggerNode = Node.get(editor, path);
42
+ const triggerNodeDOM = ReactEditor.toDOMNode(editor, triggerNode);
43
+ triggerNodeDOM?.closest(".freegrid-item")?.click();
44
+ } catch (err) {
45
+ console.log(err);
46
+ }
47
+ }
48
+ export function updatePositions(props, closestClass) {
49
+ try {
50
+ const {
51
+ editor,
52
+ path,
53
+ offsetY,
54
+ dragOver,
55
+ x,
56
+ y,
57
+ diffX,
58
+ parentPath
59
+ } = props;
60
+ const posY = y - offsetY;
61
+ const posX = parseInt(x - window.innerWidth / 2 + 490 - diffX);
62
+ let addToSectionDOMRect = null;
63
+ let newPath = [];
64
+ let toSectionNode = null;
65
+ const needMove = dragOver !== parentPath;
66
+ const moveTo = dragOver.split("|").map(m => parseInt(m));
67
+ const from = parentPath.split("|").map(m => parseInt(m));
68
+ newPath = moveTo;
69
+ toSectionNode = Node.get(editor, newPath);
70
+ const addToSectionDOM = ReactEditor.toDOMNode(editor, toSectionNode);
71
+ addToSectionDOMRect = addToSectionDOM?.getBoundingClientRect();
72
+
73
+ // update top and left properties
74
+ const newProperties = {};
75
+ newProperties.left = posX;
76
+ newProperties.marginTop = posY > addToSectionDOMRect.top ? posY - addToSectionDOMRect.top : addToSectionDOMRect.top - posY;
77
+ Transforms.setNodes(editor, newProperties, {
78
+ at: path
79
+ });
80
+ const returnData = {};
81
+ if (needMove) {
82
+ const isEmpty = toSectionNode?.children[0]?.type === undefined;
83
+ if (!isEmpty) {
84
+ newPath = [...newPath, toSectionNode?.children?.length];
85
+ }
86
+ newPath = newPath.map(m => parseInt(m));
87
+ const rPath = handleMoveNode(editor, path, newPath, {
88
+ isEmpty
89
+ });
90
+ // to update path index need to re-render items in parent sections
91
+ Transforms.setNodes(editor, {
92
+ updated_at: new Date().getTime
93
+ }, {
94
+ at: parentPath.split("|").map(m => parseInt(m))
95
+ });
96
+ returnData.updated_at = rPath;
97
+ }
98
+ returnData.updated_at = path;
99
+ if (needMove) {
100
+ getNearestItem(editor, moveTo, {
101
+ currentItem: path
102
+ });
103
+ } else {
104
+ getNearestItem(editor, from, {
105
+ currentItem: path
106
+ });
107
+ }
108
+ return returnData;
109
+ } catch (err) {
110
+ console.log(err);
111
+ }
112
+ }
113
+ const isOverLapLine = ({
114
+ x,
115
+ y
116
+ }, lines) => {
117
+ return lines.find(f => Math.abs(f.x - x) <= GUIDE_LINE_OVERLAP_THRESHOLD || Math.abs(f.y - y) <= GUIDE_LINE_OVERLAP_THRESHOLD);
118
+ };
119
+ export function getClosestDraggable(x, y, className, activeClassName) {
120
+ const draggables = document.querySelectorAll(className);
121
+ const activeDragEle = document.querySelectorAll(activeClassName)[0];
122
+ const {
123
+ left: aLeft,
124
+ top: aTop,
125
+ width: aWidth,
126
+ height: aHeight
127
+ } = activeDragEle?.getBoundingClientRect() || {};
128
+ let lines = [];
129
+ draggables.forEach(draggable => {
130
+ const {
131
+ left,
132
+ top,
133
+ width,
134
+ height
135
+ } = draggable.getBoundingClientRect();
136
+ let xVal = 0;
137
+ let yVal = 0;
138
+
139
+ // top match
140
+ xVal = x < left ? aLeft : left;
141
+ yVal = top;
142
+ if (Math.abs(top - aTop) <= GUIDE_LINE_THRESHOLD && !isOverLapLine({
143
+ x: xVal,
144
+ y: yVal
145
+ }, lines)) {
146
+ lines.push({
147
+ y: top,
148
+ x: xVal,
149
+ width: x > left ? Math.abs(aLeft + aWidth - left) : Math.abs(aLeft - (left + width)),
150
+ height: 1
151
+ });
152
+ }
153
+
154
+ // bottom match
155
+ xVal = x < left ? aLeft : left;
156
+ yVal = top + height;
157
+ if (Math.abs(top + height - (aTop + aHeight)) <= GUIDE_LINE_THRESHOLD && !isOverLapLine({
158
+ x: xVal,
159
+ y: yVal
160
+ }, lines)) {
161
+ lines.push({
162
+ y: yVal,
163
+ x: xVal,
164
+ width: x > left ? Math.abs(aLeft + aWidth - left) : Math.abs(aLeft - (left + width)),
165
+ height: 1
166
+ });
167
+ }
168
+
169
+ // center match
170
+ xVal = x < left ? aLeft : left;
171
+ yVal = top + height / 2;
172
+ if (Math.abs(top + height / 2 - (aTop + aHeight / 2)) <= GUIDE_LINE_THRESHOLD && !isOverLapLine({
173
+ x: xVal,
174
+ y: yVal
175
+ }, lines, "y")) {
176
+ lines.push({
177
+ y: yVal,
178
+ x: xVal,
179
+ width: x > left ? Math.abs(aLeft + aWidth - left) : Math.abs(aLeft - (left + width)),
180
+ height: 1
181
+ });
182
+ }
183
+
184
+ // right match
185
+ xVal = left + width;
186
+ yVal = top < aTop ? top : aTop;
187
+ if ((Math.abs(left + width - aLeft) <= GUIDE_LINE_THRESHOLD || Math.abs(left - aLeft) <= GUIDE_LINE_THRESHOLD) && !isOverLapLine({
188
+ x: xVal,
189
+ y: yVal
190
+ }, lines)) {
191
+ lines.push({
192
+ y: yVal,
193
+ x: xVal,
194
+ width: 1,
195
+ height: Math.abs(aTop - top)
196
+ });
197
+ }
198
+
199
+ // left match
200
+ xVal = left;
201
+ yVal = top < aTop ? top : aTop;
202
+ if ((Math.abs(aLeft + aWidth - left) <= GUIDE_LINE_THRESHOLD || Math.abs(aLeft - left) <= GUIDE_LINE_THRESHOLD) && !isOverLapLine({
203
+ x: xVal,
204
+ y: yVal
205
+ }, lines)) {
206
+ lines.push({
207
+ y: yVal,
208
+ x: xVal,
209
+ width: 1,
210
+ height: Math.abs(aTop - top)
211
+ });
212
+ }
213
+
214
+ // middle match
215
+ xVal = left + width / 2;
216
+ yVal = top < aTop ? top : aTop;
217
+ if (Math.abs(aLeft + aWidth / 2 - (left + width / 2)) <= GUIDE_LINE_THRESHOLD && !isOverLapLine({
218
+ x: xVal,
219
+ y: yVal
220
+ }, lines)) {
221
+ lines.push({
222
+ y: yVal,
223
+ x: xVal,
224
+ width: 1,
225
+ height: Math.abs(aTop - top)
226
+ });
227
+ }
228
+ });
229
+ return lines;
230
+ }
231
+ export function isDragOver(rect, mousePosition) {
232
+ const {
233
+ x,
234
+ y
235
+ } = mousePosition;
236
+ if (x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom) {
237
+ return true;
238
+ }
239
+ return false;
240
+ }
241
+ export function getParentSectionPath(props, closestClass) {
242
+ try {
243
+ const {
244
+ ref
245
+ } = props;
246
+ const parentDom = ref?.closest(closestClass);
247
+ return parentDom?.dataset?.path;
248
+ } catch (err) {
249
+ console.log(err);
250
+ }
251
+ }
@@ -0,0 +1,76 @@
1
+ import React, { useEffect, useRef } from "react";
2
+ import { Box } from "@mui/material";
3
+ import useVirtualElementStyles from "./styles";
4
+ import updateAutoProps from "./updateAutoProps";
5
+ import { calculateGridArea } from "../Utils/gridDropItem";
6
+ import { jsx as _jsx } from "react/jsx-runtime";
7
+ const VirtualElement = props => {
8
+ const classes = useVirtualElementStyles();
9
+ const {
10
+ editor,
11
+ path,
12
+ parentEle,
13
+ updated_at
14
+ } = props;
15
+ const cloneNode = parentEle?.cloneNode(true);
16
+ const virtualRef = useRef();
17
+ useEffect(() => {
18
+ if (virtualRef?.current) {
19
+ setTimeout(() => {
20
+ calculateProps();
21
+ }, 0);
22
+ }
23
+ }, [updated_at, virtualRef?.current]);
24
+ const calculateProps = () => {
25
+ const rect = virtualRef?.current?.getBoundingClientRect();
26
+ const sectionProps = {
27
+ path,
28
+ props: {
29
+ height: rect.height
30
+ }
31
+ };
32
+ const itemsData = [];
33
+ const items = virtualRef?.current?.querySelectorAll(".freegrid-item");
34
+ let sectionHeight = 0;
35
+ for (let i = 0; i < items.length; i++) {
36
+ const itemRect = items[i]?.getBoundingClientRect();
37
+ const y = Math.abs(rect.top - itemRect?.top);
38
+ itemsData.push({
39
+ path: items[i]?.dataset.path,
40
+ props: {
41
+ top: y,
42
+ left: 24,
43
+ marginTop: 12,
44
+ width: itemRect?.width,
45
+ height: itemRect?.height,
46
+ gridArea: calculateGridArea(y)
47
+ }
48
+ });
49
+ sectionHeight += itemRect?.height;
50
+ }
51
+ if (sectionHeight > sectionProps?.props?.height) {
52
+ sectionProps.props.height = sectionHeight;
53
+ }
54
+ const allData = [sectionProps, itemsData]?.flat();
55
+ // it should trigger by auto alignment or on clicking mobile view change
56
+ updateAutoProps(editor, allData, "xs");
57
+ };
58
+ const getItems = () => {
59
+ const items = cloneNode?.querySelectorAll(".freegrid-item") || [];
60
+ let itemsHTML = "";
61
+ for (let i = 0; i < items?.length; i++) {
62
+ items[i].classList.add("exclude-virtual");
63
+ itemsHTML += items[i].outerHTML;
64
+ }
65
+ return itemsHTML;
66
+ };
67
+ return /*#__PURE__*/_jsx(Box, {
68
+ className: "mobile-virtual-mode",
69
+ ref: virtualRef,
70
+ sx: classes.root,
71
+ dangerouslySetInnerHTML: {
72
+ __html: getItems()
73
+ }
74
+ });
75
+ };
76
+ export default VirtualElement;
@@ -0,0 +1,27 @@
1
+ const useVirtualElementStyles = () => ({
2
+ root: {
3
+ width: "320px",
4
+ position: "fixed",
5
+ backgroundColor: "red",
6
+ height: "auto",
7
+ overflow: "visible",
8
+ pointerEvents: "none",
9
+ opacity: 0,
10
+ right: 0,
11
+ top: 0,
12
+ "& .freegrid-item": {
13
+ gridArea: "none !important",
14
+ width: "calc(100% - 48px) !important",
15
+ height: "auto !important",
16
+ left: "24px !important",
17
+ marginTop: "24px !important",
18
+ "& .debug-info, & .editor-blocker": {
19
+ display: "none"
20
+ },
21
+ "& .embed": {
22
+ minHeight: "300px"
23
+ }
24
+ }
25
+ }
26
+ });
27
+ export default useVirtualElementStyles;
@@ -0,0 +1,28 @@
1
+ import { Node, Transforms } from "slate";
2
+ const updateAutoProps = (editor, datas = [], breakpoint = "") => {
3
+ try {
4
+ for (let i = 0; i < datas.length; i++) {
5
+ const {
6
+ path,
7
+ props
8
+ } = datas[i] || {};
9
+ const int_path = path.split("|").map(m => parseInt(m));
10
+ const updatedProps = Object.keys(props).reduce((a, b) => {
11
+ const key = breakpoint ? `${b}_${breakpoint}` : b;
12
+ a[key] = props[b];
13
+ return a;
14
+ }, {});
15
+ const oldProps = Node.get(editor, int_path);
16
+ if (!oldProps?.xs_updatedOn) {
17
+ Transforms.setNodes(editor, {
18
+ ...updatedProps
19
+ }, {
20
+ at: int_path
21
+ });
22
+ }
23
+ }
24
+ } catch (err) {
25
+ console.log(err);
26
+ }
27
+ };
28
+ export default updateAutoProps;