@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.
- package/dist/Editor/ChatEditor.js +31 -57
- package/dist/Editor/CommonEditor.js +69 -8
- package/dist/Editor/DialogWrapper.js +4 -3
- package/dist/Editor/Editor.css +5 -12
- package/dist/Editor/Elements/AI/PopoverAIInput.js +47 -36
- package/dist/Editor/Elements/Accordion/Accordion.js +1 -1
- package/dist/Editor/Elements/Accordion/AccordionSummary.js +6 -20
- package/dist/Editor/Elements/AppHeader/AppHeader.js +36 -23
- package/dist/Editor/Elements/Button/EditorButton.js +23 -16
- package/dist/Editor/Elements/Embed/Image.js +15 -14
- package/dist/Editor/Elements/Embed/Video.js +12 -8
- package/dist/Editor/Elements/Emoji/EmojiButton.js +11 -7
- package/dist/Editor/Elements/Emoji/EmojiPicker.js +2 -4
- package/dist/Editor/Elements/Form/Form.js +1 -1
- package/dist/Editor/Elements/FreeGrid/FreeGrid.js +391 -0
- package/dist/Editor/Elements/FreeGrid/FreeGridBox.js +193 -0
- package/dist/Editor/Elements/FreeGrid/FreeGridButton.js +23 -0
- package/dist/Editor/Elements/FreeGrid/FreeGridItem.js +184 -0
- package/dist/Editor/Elements/FreeGrid/Options/AddElement.js +36 -0
- package/dist/Editor/Elements/FreeGrid/Options/More.js +24 -0
- package/dist/Editor/Elements/FreeGrid/Options/SectionSettings.js +47 -0
- package/dist/Editor/Elements/FreeGrid/Options/sectionItemOptions.js +11 -0
- package/dist/Editor/Elements/FreeGrid/breakpointConstants.js +75 -0
- package/dist/Editor/Elements/FreeGrid/styles.js +159 -0
- package/dist/Editor/Elements/Grid/Grid.js +12 -8
- package/dist/Editor/Elements/Grid/GridItem.js +31 -21
- package/dist/Editor/Elements/PageSettings/PageSettingsButton.js +1 -5
- package/dist/Editor/Elements/SimpleText/index.js +9 -8
- package/dist/Editor/Elements/SimpleText/style.js +37 -0
- package/dist/Editor/ErrorBoundary.js +30 -0
- package/dist/Editor/Styles/EditorStyles.js +23 -0
- package/dist/Editor/Toolbar/Mini/MiniToolbar.js +1 -25
- package/dist/Editor/Toolbar/PopupTool/TextFormat.js +1 -0
- package/dist/Editor/Toolbar/PopupTool/index.js +8 -0
- package/dist/Editor/Toolbar/Toolbar.js +7 -0
- package/dist/Editor/Toolbar/toolbarGroups.js +5 -0
- package/dist/Editor/common/Icon.js +9 -2
- package/dist/Editor/common/MentionsPopup/MentionsListCard.js +1 -6
- package/dist/Editor/common/MentionsPopup/index.js +12 -8
- package/dist/Editor/common/RnD/ContextMenu/CMenus.js +105 -0
- package/dist/Editor/common/RnD/ContextMenu/index.js +38 -0
- package/dist/Editor/common/RnD/ContextMenu/styles.js +21 -0
- package/dist/Editor/common/RnD/DragInfo/index.js +31 -0
- package/dist/Editor/common/RnD/DragInfo/styles.js +15 -0
- package/dist/Editor/common/RnD/DragOver/index.js +46 -0
- package/dist/Editor/common/RnD/DragOver/styles.js +23 -0
- package/dist/Editor/common/RnD/ElementOptions/Actions.js +82 -0
- package/dist/Editor/common/RnD/ElementOptions/Icons/LinkIcon.js +26 -0
- package/dist/Editor/common/RnD/ElementOptions/index.js +93 -0
- package/dist/Editor/common/RnD/ElementOptions/styles.js +41 -0
- package/dist/Editor/common/RnD/ElementSettings/OtherSettings/Link.js +153 -0
- package/dist/Editor/common/RnD/ElementSettings/OtherSettings/Settings.js +58 -0
- package/dist/Editor/common/RnD/ElementSettings/OtherSettings/index.js +7 -0
- package/dist/Editor/common/RnD/ElementSettings/Settings/BoxSettings.js +46 -0
- package/dist/Editor/common/RnD/ElementSettings/Settings/ButtonSettings.js +46 -0
- package/dist/Editor/common/RnD/ElementSettings/Settings/ImageSettings.js +46 -0
- package/dist/Editor/common/RnD/ElementSettings/Settings/TextSettings.js +30 -0
- package/dist/Editor/common/RnD/ElementSettings/Settings/VideoSettings.js +46 -0
- package/dist/Editor/common/RnD/ElementSettings/Settings/index.js +13 -0
- package/dist/Editor/common/RnD/ElementSettings/index.js +17 -0
- package/dist/Editor/common/RnD/ElementSettings/settingsConstants.js +14 -0
- package/dist/Editor/common/RnD/ElementSettings/styles.js +76 -0
- package/dist/Editor/common/RnD/GuideLines/BoundaryLine.js +52 -0
- package/dist/Editor/common/RnD/GuideLines/index.js +33 -0
- package/dist/Editor/common/RnD/GuideLines/styles.js +60 -0
- package/dist/Editor/common/RnD/OptionsPopup/index.js +50 -0
- package/dist/Editor/common/RnD/OptionsPopup/style.js +36 -0
- package/dist/Editor/common/RnD/RnDCopy.js +23 -0
- package/dist/Editor/common/RnD/ShadowElement.js +34 -0
- package/dist/Editor/common/RnD/SwitchViewport/SwitchViewport.js +40 -0
- package/dist/Editor/common/RnD/SwitchViewport/styles.js +24 -0
- package/dist/Editor/common/RnD/Theme/ViewportStimulator.js +63 -0
- package/dist/Editor/common/RnD/TransformHandles/CornerHandle.js +19 -0
- package/dist/Editor/common/RnD/TransformHandles/Icons/BottomRightIcon.js +13 -0
- package/dist/Editor/common/RnD/TransformHandles/SizeHandle.js +18 -0
- package/dist/Editor/common/RnD/TransformHandles/index.js +62 -0
- package/dist/Editor/common/RnD/Utils/alignmentDetection.js +26 -0
- package/dist/Editor/common/RnD/Utils/calculateDropItem.js +98 -0
- package/dist/Editor/common/RnD/Utils/collisionDetection.js +52 -0
- package/dist/Editor/common/RnD/Utils/gridDropItem.js +148 -0
- package/dist/Editor/common/RnD/Utils/index.js +251 -0
- package/dist/Editor/common/RnD/VirtualElement/index.js +76 -0
- package/dist/Editor/common/RnD/VirtualElement/styles.js +27 -0
- package/dist/Editor/common/RnD/VirtualElement/updateAutoProps.js +28 -0
- package/dist/Editor/common/RnD/index.js +503 -0
- package/dist/Editor/common/RnD/styles.js +4 -0
- package/dist/Editor/common/Section/index.js +21 -12
- package/dist/Editor/common/Section/styles.js +6 -1
- package/dist/Editor/common/Shorthands/elements.js +12 -0
- package/dist/Editor/common/StyleBuilder/boxStyle.js +30 -0
- package/dist/Editor/common/StyleBuilder/fieldTypes/bannerSpacing.js +32 -31
- package/dist/Editor/common/StyleBuilder/fieldTypes/borderRadius.js +16 -18
- package/dist/Editor/common/StyleBuilder/fieldTypes/selectBox.js +3 -14
- package/dist/Editor/common/StyleBuilder/fieldTypes/text.js +4 -2
- package/dist/Editor/common/StyleBuilder/index.js +2 -2
- package/dist/Editor/common/StyleBuilder/sectionStyle.js +13 -2
- package/dist/Editor/helper/RnD/focusOnNewItem.js +39 -0
- package/dist/Editor/helper/RnD/scrollToNewSection.js +24 -0
- package/dist/Editor/helper/breakpoint.js +5 -0
- package/dist/Editor/helper/index.js +139 -22
- package/dist/Editor/helper/theme.js +50 -2
- package/dist/Editor/hooks/useBreakpoints.js +34 -0
- package/dist/Editor/hooks/useMouseMove.js +36 -8
- package/dist/Editor/hooks/withCommon.js +2 -1
- package/dist/Editor/hooks/withErrorHandling.js +14 -0
- package/dist/Editor/utils/RnD/RnDCtrlCmds.js +168 -0
- package/dist/Editor/utils/SlateUtilityFunctions.js +31 -5
- package/dist/Editor/utils/draftToSlate.js +1 -1
- package/dist/Editor/utils/events.js +5 -0
- package/dist/Editor/utils/freegrid.js +49 -0
- package/dist/Editor/utils/helper.js +29 -0
- 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;
|