@flozy/editor 10.6.9 → 10.7.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.
Files changed (140) hide show
  1. package/dist/Editor/ChatEditor.js +17 -16
  2. package/dist/Editor/CommonEditor.js +126 -15
  3. package/dist/Editor/DialogWrapper.js +31 -25
  4. package/dist/Editor/Editor.css +45 -11
  5. package/dist/Editor/Elements/AI/PopoverAIInput.js +11 -3
  6. package/dist/Editor/Elements/AI/Styles.js +1 -0
  7. package/dist/Editor/Elements/Accordion/Accordion.js +25 -17
  8. package/dist/Editor/Elements/AppHeader/AppHeader.js +3 -3
  9. package/dist/Editor/Elements/Attachments/AttachmentStyles.js +16 -0
  10. package/dist/Editor/Elements/Attachments/Attachments.js +153 -11
  11. package/dist/Editor/Elements/Attachments/AttachmentsButton.js +8 -3
  12. package/dist/Editor/Elements/Button/EditorButton.js +23 -7
  13. package/dist/Editor/Elements/Color Picker/ColorButtons.js +61 -14
  14. package/dist/Editor/Elements/Color Picker/ColorPicker.css +25 -1
  15. package/dist/Editor/Elements/Color Picker/ColorPicker.js +10 -7
  16. package/dist/Editor/Elements/Color Picker/Styles.js +15 -13
  17. package/dist/Editor/Elements/Embed/Embed.js +36 -43
  18. package/dist/Editor/Elements/Embed/Image.js +240 -23
  19. package/dist/Editor/Elements/Embed/Video.js +246 -15
  20. package/dist/Editor/Elements/Form/FormField.js +1 -1
  21. package/dist/Editor/Elements/Form/Workflow/Styles.js +24 -22
  22. package/dist/Editor/Elements/Form/Workflow/constant.js +25 -1
  23. package/dist/Editor/Elements/FreeGrid/FreeGrid.js +39 -33
  24. package/dist/Editor/Elements/FreeGrid/FreeGridBox.js +7 -4
  25. package/dist/Editor/Elements/FreeGrid/FreeGridItem.js +1 -0
  26. package/dist/Editor/Elements/FreeGrid/Options/More.js +7 -7
  27. package/dist/Editor/Elements/FreeGrid/helper.js +115 -0
  28. package/dist/Editor/Elements/FreeGrid/styles.js +9 -0
  29. package/dist/Editor/Elements/Grid/GridItem.js +1 -1
  30. package/dist/Editor/Elements/PageSettings/PageSettingsButton.js +2 -1
  31. package/dist/Editor/Elements/SimpleText/style.js +2 -2
  32. package/dist/Editor/Elements/Table/Table.js +3 -3
  33. package/dist/Editor/Elements/Title/title.js +6 -6
  34. package/dist/Editor/Elements/Variables/VariableButton.js +10 -1
  35. package/dist/Editor/MiniEditor.js +2 -1
  36. package/dist/Editor/Styles/EditorStyles.js +20 -5
  37. package/dist/Editor/Toolbar/FormatTools/Dropdown.js +27 -3
  38. package/dist/Editor/Toolbar/FormatTools/FontFamilyAutocomplete.js +4 -3
  39. package/dist/Editor/Toolbar/FormatTools/MarkButton.js +2 -2
  40. package/dist/Editor/Toolbar/FormatTools/TextSize.js +10 -13
  41. package/dist/Editor/Toolbar/Mini/MiniToolbar.js +2 -1
  42. package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/MiniColorPicker.js +4 -2
  43. package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/SelectFontSize.js +6 -13
  44. package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/SelectList.js +4 -2
  45. package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/SelectTypography.js +167 -42
  46. package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/index.js +7 -4
  47. package/dist/Editor/Toolbar/PopupTool/PopperHeader.js +2 -1
  48. package/dist/Editor/Toolbar/PopupTool/PopupToolStyle.js +69 -9
  49. package/dist/Editor/Toolbar/PopupTool/TextFormat.js +58 -10
  50. package/dist/Editor/Toolbar/PopupTool/ThemeTextFormat.js +439 -0
  51. package/dist/Editor/Toolbar/PopupTool/index.js +5 -2
  52. package/dist/Editor/Toolbar/toolbarGroups.js +48 -6
  53. package/dist/Editor/assets/svg/BackIcon.js +18 -0
  54. package/dist/Editor/assets/svg/ThemeIcons.js +293 -0
  55. package/dist/Editor/common/ColorPickerButton.js +38 -16
  56. package/dist/Editor/common/CustomColorPicker/index.js +130 -0
  57. package/dist/Editor/common/CustomColorPicker/style.js +53 -0
  58. package/dist/Editor/common/CustomDialog2/index.js +94 -0
  59. package/dist/Editor/common/CustomDialog2/style.js +67 -0
  60. package/dist/Editor/common/CustomSelect.js +43 -0
  61. package/dist/Editor/common/DnD/DragHandleButton.js +1 -1
  62. package/dist/Editor/common/FontLoader/FontLoader.js +3 -0
  63. package/dist/Editor/common/Icon.js +28 -0
  64. package/dist/Editor/common/ImageSelector/ImageSelector.js +46 -8
  65. package/dist/Editor/common/ImageSelector/Options/Upload.js +26 -11
  66. package/dist/Editor/common/ImageSelector/Styles.js +3 -9
  67. package/dist/Editor/common/LinkSettings/NavComponents.js +6 -2
  68. package/dist/Editor/common/RnD/ElementSettings/OtherSettings/Settings.js +2 -1
  69. package/dist/Editor/common/RnD/ElementSettings/Settings/AppHeaderSettings.js +3 -2
  70. package/dist/Editor/common/RnD/ElementSettings/Settings/BoxSettings.js +3 -2
  71. package/dist/Editor/common/RnD/ElementSettings/Settings/ButtonSettings.js +3 -2
  72. package/dist/Editor/common/RnD/ElementSettings/Settings/CodeSettings.js +3 -2
  73. package/dist/Editor/common/RnD/ElementSettings/Settings/FormSettings.js +4 -2
  74. package/dist/Editor/common/RnD/ElementSettings/Settings/ImageSettings.js +20 -7
  75. package/dist/Editor/common/RnD/ElementSettings/Settings/TableSettings.js +3 -2
  76. package/dist/Editor/common/RnD/ElementSettings/Settings/TextSettings.js +3 -1
  77. package/dist/Editor/common/RnD/ElementSettings/Settings/VideoSettings.js +20 -7
  78. package/dist/Editor/common/RnD/SwitchViewport/SwitchViewport.js +11 -2
  79. package/dist/Editor/common/RnD/Theme/MainThemeProvider.js +17 -0
  80. package/dist/Editor/common/RnD/Theme/ViewportStimulator.js +6 -3
  81. package/dist/Editor/common/RnD/Utils/gridDropItem.js +28 -18
  82. package/dist/Editor/common/RnD/Utils/index.js +3 -1
  83. package/dist/Editor/common/RnD/VirtualElement/VirtualTextElement.js +45 -58
  84. package/dist/Editor/common/RnD/VirtualElement/helper.js +320 -130
  85. package/dist/Editor/common/RnD/VirtualElement/styles.js +22 -0
  86. package/dist/Editor/common/RnD/index.js +48 -13
  87. package/dist/Editor/common/Shorthands/elements.js +54 -0
  88. package/dist/Editor/common/StyleBuilder/buttonStyle.js +4 -2
  89. package/dist/Editor/common/StyleBuilder/embedVideoStyle.js +4 -0
  90. package/dist/Editor/common/StyleBuilder/fieldTypes/backgroundImage.js +15 -2
  91. package/dist/Editor/common/StyleBuilder/fieldTypes/bannerSpacing.js +12 -2
  92. package/dist/Editor/common/StyleBuilder/fieldTypes/borderRadius.js +15 -7
  93. package/dist/Editor/common/StyleBuilder/fieldTypes/card.js +16 -8
  94. package/dist/Editor/common/StyleBuilder/fieldTypes/color.js +36 -10
  95. package/dist/Editor/common/StyleBuilder/fieldTypes/embedUpload.js +115 -0
  96. package/dist/Editor/common/StyleBuilder/fieldTypes/fontSize.js +16 -7
  97. package/dist/Editor/common/StyleBuilder/fieldTypes/index.js +3 -1
  98. package/dist/Editor/common/StyleBuilder/fieldTypes/menusArray.js +2 -0
  99. package/dist/Editor/common/StyleBuilder/fieldTypes/textOptions.js +15 -7
  100. package/dist/Editor/common/StyleBuilder/index.js +8 -4
  101. package/dist/Editor/common/Uploader.js +125 -17
  102. package/dist/Editor/common/UploaderWithProgress.js +183 -0
  103. package/dist/Editor/common/iconslist.js +21 -0
  104. package/dist/Editor/commonStyle.js +107 -64
  105. package/dist/Editor/helper/index.js +10 -2
  106. package/dist/Editor/helper/textIndeces.js +58 -0
  107. package/dist/Editor/helper/theme.js +203 -2
  108. package/dist/Editor/hooks/useEditorTheme.js +153 -0
  109. package/dist/Editor/hooks/useMouseMove.js +9 -3
  110. package/dist/Editor/hooks/useThemeValues.js +63 -0
  111. package/dist/Editor/plugins/withEmbeds.js +1 -1
  112. package/dist/Editor/plugins/withHTML.js +7 -3
  113. package/dist/Editor/plugins/withTable.js +1 -1
  114. package/dist/Editor/service/fileupload.js +53 -0
  115. package/dist/Editor/theme/ThemeList.js +50 -173
  116. package/dist/Editor/theme/index.js +149 -0
  117. package/dist/Editor/themeSettings/ActiveTheme.js +82 -0
  118. package/dist/Editor/themeSettings/buttons/index.js +300 -0
  119. package/dist/Editor/themeSettings/buttons/style.js +23 -0
  120. package/dist/Editor/themeSettings/colorTheme/index.js +310 -0
  121. package/dist/Editor/themeSettings/colorTheme/style.js +81 -0
  122. package/dist/Editor/themeSettings/fonts/PreviewElement.js +121 -0
  123. package/dist/Editor/themeSettings/fonts/index.js +240 -0
  124. package/dist/Editor/themeSettings/fonts/style.js +62 -0
  125. package/dist/Editor/themeSettings/icons.js +60 -0
  126. package/dist/Editor/themeSettings/index.js +380 -0
  127. package/dist/Editor/themeSettings/style.js +299 -0
  128. package/dist/Editor/themeSettingsAI/icons.js +96 -0
  129. package/dist/Editor/themeSettingsAI/index.js +355 -0
  130. package/dist/Editor/themeSettingsAI/saveTheme.js +202 -0
  131. package/dist/Editor/themeSettingsAI/style.js +332 -0
  132. package/dist/Editor/utils/SlateUtilityFunctions.js +231 -25
  133. package/dist/Editor/utils/accordion.js +62 -34
  134. package/dist/Editor/utils/button.js +1 -17
  135. package/dist/Editor/utils/draftToSlate.js +3 -2
  136. package/dist/Editor/utils/font.js +40 -37
  137. package/dist/Editor/utils/helper.js +97 -21
  138. package/dist/Editor/utils/insertAppHeader.js +8 -4
  139. package/package.json +4 -4
  140. package/dist/Editor/Elements/DataView/Layouts/DataTypes/Components/MultiSelect.js +0 -454
@@ -1,5 +1,9 @@
1
1
  import { ROW_HEIGHT, calculateGridArea } from "../Utils/gridDropItem";
2
2
  import { Transforms, Editor } from "slate";
3
+ import { getElementOffset } from "./VirtualTextElement";
4
+ import { getNode } from "../../../utils/helper";
5
+ import { findMaxYValue } from "../../../Elements/FreeGrid/helper";
6
+ import { RND_ITEMS } from "../../../helper";
3
7
  const isBulletOrTickIcon = (width, itemStartRow, startRow) => {
4
8
  return width <= 40 && itemStartRow === startRow;
5
9
  };
@@ -39,106 +43,83 @@ export const getGridArea = gridArea => {
39
43
  const getBoxToAutoAlign = (editor, sectionPath) => {
40
44
  const [boxData] = Editor.nodes(editor, {
41
45
  at: sectionPath,
42
- match: node => node.type === "freegridBox" && node.autoAlign
46
+ match: node => ["freegridBox", "freegrid"].includes(node.type) && node.autoAlign
43
47
  });
44
48
  return boxData || [];
45
49
  };
46
- const handleGridItems = (gridItems, lastRow) => {
47
- // to find the previously occupied rows
48
- gridItems.forEach(item => {
49
- const {
50
- gridArea_xs: gridArea,
51
- marginTop_xs,
52
- height_xs,
53
- type
54
- } = item;
55
- if (type === "paragraph") {
56
- // non-freegridItem,
57
- // some "paragraph" node is defaulty coming inside in box's children
58
- return;
59
- }
60
- const [startRow] = getGridArea(gridArea);
61
- const marginTop = marginTop_xs ? Number(marginTop_xs) : 0;
62
- const fullHeight = Number(height_xs) + marginTop;
63
- const endRow = startRow + Math.floor(fullHeight / ROW_HEIGHT) + 1;
64
- lastRow = Math.max(endRow, lastRow);
65
- });
66
- return {
67
- lastRow
68
- };
69
- };
70
- const handleNonGridItems = (nonGridItems, lastRow, editor, boxPath) => {
71
- let containerHeight = (lastRow - 1) * ROW_HEIGHT;
72
- let newlyAddedHeight = 0;
73
50
 
74
- //place it on the next rows that are available
75
- nonGridItems.forEach((item, index) => {
76
- const {
77
- height_xs,
78
- type,
79
- itemIndex
80
- } = item;
81
- if (type === "paragraph") {
82
- // non-freegridItem
83
- return;
84
- }
85
- const startRow = lastRow || 1;
86
- const DEFAULT_NEW_ELEMENT_MARGIN_TOP = 12;
87
- let fullHeight = height_xs + DEFAULT_NEW_ELEMENT_MARGIN_TOP;
88
- const endRow = startRow + Math.floor(fullHeight / ROW_HEIGHT) + 1;
89
- const newGridArea = `${startRow} / 1 / ${startRow + 1} / 2`;
90
- const currentElementPath = [...boxPath, itemIndex];
91
- Transforms.setNodes(editor, {
92
- gridArea_xs: newGridArea,
93
- marginTop_xs: 12,
94
- left_xs: 12,
95
- xs_updatedOn: new Date().getTime()
96
- }, {
97
- at: currentElementPath
98
- });
99
- lastRow = Math.max(endRow, lastRow);
100
- containerHeight += fullHeight;
101
- newlyAddedHeight += fullHeight;
102
- });
103
- return {
104
- lastRow,
105
- containerHeight,
106
- newlyAddedHeight
107
- };
108
- };
109
- const alignNewElementInContainer = (editor, boxPath, containerItems) => {
110
- let lastRow = 1;
111
- const gridItems = [];
112
- const nonGridItems = [];
113
- containerItems.forEach((item, index) => {
114
- if (item?.gridArea_xs) {
115
- gridItems.push({
116
- ...item,
117
- itemIndex: index
118
- });
119
- } else {
120
- nonGridItems.push({
121
- ...item,
122
- itemIndex: index
123
- });
124
- }
125
- });
126
- const {
127
- lastRow: lastRowOccupied
128
- } = handleGridItems(gridItems, lastRow);
129
- lastRow = lastRowOccupied;
130
- const {
131
- lastRow: lastRowTaken,
132
- containerHeight,
133
- newlyAddedHeight
134
- } = handleNonGridItems(nonGridItems, lastRow, editor, boxPath);
135
- lastRow = lastRowTaken;
136
- return {
137
- lastRow,
138
- containerHeight,
139
- newlyAddedHeight
140
- };
141
- };
51
+ // const handleGridItems = (gridItems, lastRow) => {
52
+ // // to find the previously occupied rows
53
+ // gridItems.forEach((item) => {
54
+ // const { gridArea_xs: gridArea, marginTop_xs, height_xs, type } = item;
55
+
56
+ // if (type === "paragraph") {
57
+ // // non-freegridItem,
58
+ // // some "paragraph" node is defaulty coming inside in box's children
59
+ // return;
60
+ // }
61
+
62
+ // const [startRow] = getGridArea(gridArea);
63
+ // const marginTop = marginTop_xs ? Number(marginTop_xs) : 0;
64
+ // const fullHeight = Number(height_xs) + marginTop;
65
+
66
+ // const endRow = startRow + Math.floor(fullHeight / ROW_HEIGHT) + 1;
67
+
68
+ // lastRow = Math.max(endRow, lastRow);
69
+ // });
70
+
71
+ // return { lastRow };
72
+ // };
73
+
74
+ // const handleNonGridItems = (nonGridItems, lastRow, editor, boxPath) => {
75
+ // let containerHeight = (lastRow - 1) * ROW_HEIGHT;
76
+
77
+ // let newlyAddedHeight = 0;
78
+
79
+ // //place it on the next rows that are available
80
+ // nonGridItems.forEach((item, index) => {
81
+ // const { height_xs, type, itemIndex } = item;
82
+
83
+ // if (type === "paragraph") {
84
+ // // non-freegridItem
85
+ // return;
86
+ // }
87
+
88
+ // const startRow = lastRow || 1;
89
+
90
+ // const DEFAULT_NEW_ELEMENT_MARGIN_TOP = 12;
91
+ // let fullHeight = height_xs + DEFAULT_NEW_ELEMENT_MARGIN_TOP;
92
+
93
+ // const endRow = startRow + Math.floor(fullHeight / ROW_HEIGHT) + 1;
94
+
95
+ // const newGridArea = `${startRow} / 1 / ${startRow + 1} / 2`;
96
+
97
+ // const currentElementPath = [...boxPath, itemIndex];
98
+
99
+ // Transforms.setNodes(
100
+ // editor,
101
+ // {
102
+ // gridArea_xs: newGridArea,
103
+ // marginTop_xs: 12,
104
+ // left_xs: 12,
105
+ // xs_updatedOn: new Date().getTime(),
106
+ // },
107
+ // { at: currentElementPath }
108
+ // );
109
+
110
+ // lastRow = Math.max(endRow, lastRow);
111
+
112
+ // containerHeight += fullHeight;
113
+ // newlyAddedHeight += fullHeight;
114
+ // });
115
+
116
+ // return {
117
+ // lastRow,
118
+ // containerHeight,
119
+ // newlyAddedHeight,
120
+ // };
121
+ // };
122
+
142
123
  const getAncestorFreeGridContainers = (editor, path) => {
143
124
  const containers = [...Editor.nodes(editor, {
144
125
  at: path,
@@ -151,6 +132,37 @@ const getAncestorFreeGridContainers = (editor, path) => {
151
132
  })].filter(([node, nodePath]) => nodePath.length <= path.length);
152
133
  return containers;
153
134
  };
135
+ export const handleTextAlignment = (editor, textNode, heightDiff, updateBreakpoint) => {
136
+ const [textEle, textPath] = textNode;
137
+ let containers = getAncestorFreeGridContainers(editor, textPath);
138
+ for (let i = containers.length - 1; i >= 0; i--) {
139
+ const container = containers[i];
140
+ const childContainer = containers[i + 1];
141
+ if (!heightDiff) {
142
+ break;
143
+ }
144
+
145
+ // get the data of elements to align inside container
146
+ const alignElements = alignElementsInsideContainer(container, childContainer || textNode, heightDiff, updateBreakpoint);
147
+ if (!childContainer) {
148
+ const {
149
+ height
150
+ } = getNodeValues(textEle, updateBreakpoint);
151
+ const appendBp = updateBreakpoint === "lg" ? "" : "_xs";
152
+
153
+ // update the height of the current text element, before updating the container
154
+ Transforms.setNodes(editor, {
155
+ [`height${appendBp}`]: height + heightDiff
156
+ }, {
157
+ at: textPath
158
+ });
159
+ }
160
+ const containerHeightDiff = updateContainer(editor, alignElements, container, updateBreakpoint, heightDiff);
161
+
162
+ // if container height incresed/decresed, need to auto align the parent container based on height differed
163
+ heightDiff = containerHeightDiff;
164
+ }
165
+ };
154
166
  export const handleContainers = (editor, boxPath, extraHeight) => {
155
167
  const containers = getAncestorFreeGridContainers(editor, boxPath);
156
168
  let lastChildStartRow;
@@ -212,7 +224,7 @@ export const moveOverlappedItems = (editor, moveRows, containerItems, containerP
212
224
  if (isChildEle) {
213
225
  return;
214
226
  }
215
- if (gridItem.type === "paragraph") {
227
+ if (!RND_ITEMS.includes(gridItem.type)) {
216
228
  return;
217
229
  }
218
230
  const {
@@ -235,7 +247,196 @@ export const moveOverlappedItems = (editor, moveRows, containerItems, containerP
235
247
  }
236
248
  });
237
249
  };
238
- export const handleBoxAlignment = (editor, sectionNode, sectionPath) => {
250
+ export const causeOverlap = (container, currElementPath, updateBreakpoint, newTopPosition, firstNextElement) => {
251
+ const [containerNode, containerPath] = container;
252
+ let isOverlapped = false;
253
+ containerNode.children.forEach((item, index) => {
254
+ if (!RND_ITEMS.includes(item.type)) {
255
+ return;
256
+ }
257
+ const currPath = [...containerPath, index];
258
+ if (currPath.toString() === currElementPath.toString()) {
259
+ return;
260
+ }
261
+ const {
262
+ top,
263
+ bottom
264
+ } = getElementOffset(item, updateBreakpoint);
265
+ if (firstNextElement === top) {
266
+ return;
267
+ }
268
+ if (newTopPosition > top && newTopPosition <= bottom) {
269
+ isOverlapped = true;
270
+ }
271
+ });
272
+ return isOverlapped;
273
+ };
274
+ export const alignElementsInsideContainer = (container, currentElement, heightDiff, updateBreakpoint) => {
275
+ const [containerNode, containerPath] = container;
276
+ const [currentElementNode, currElementPath] = currentElement || [];
277
+ const {
278
+ bottom: currElementBottom
279
+ } = getElementOffset(currentElementNode, updateBreakpoint);
280
+ const newCurrElementBottom = currElementBottom + heightDiff;
281
+ const bufferSpace = 12;
282
+ const nextElements = []; // Elements after the current element
283
+ let firstNextElement = 0; // first element position which is after the current element
284
+
285
+ const alignElements = {};
286
+
287
+ // find the elements present after the current element
288
+ containerNode.children.forEach((item, index) => {
289
+ if (!RND_ITEMS.includes(item.type)) {
290
+ return;
291
+ }
292
+ const currPath = [...containerPath, index];
293
+ const {
294
+ top: itemTop
295
+ } = getElementOffset(item, updateBreakpoint);
296
+ if (currPath.toString() === currElementPath.toString()) {
297
+ return;
298
+ }
299
+ const bufferPosition = 15;
300
+ if (itemTop + bufferPosition >= currElementBottom) {
301
+ const element = {
302
+ path: currPath,
303
+ node: item
304
+ };
305
+ nextElements.push(element);
306
+ firstNextElement = firstNextElement > 0 ? Math.min(firstNextElement, itemTop) : itemTop;
307
+ }
308
+ });
309
+
310
+ // check whether the new height is overlapping the next element
311
+ const isOverlapped = firstNextElement && newCurrElementBottom >= firstNextElement;
312
+ let moveElements = isOverlapped || heightDiff < 0; // if heightDiff is negative, move elements up
313
+
314
+ if (heightDiff < 0) {
315
+ // does flex elements cause overlap
316
+ const isCausingOverlap = causeOverlap(container, currElementPath, updateBreakpoint, firstNextElement + heightDiff, firstNextElement);
317
+ moveElements = !isCausingOverlap;
318
+ }
319
+ if (moveElements) {
320
+ const topPos = newCurrElementBottom - firstNextElement + bufferSpace; // position the element after the current element
321
+ alignElements.topPos = heightDiff < 0 ? heightDiff : topPos;
322
+ alignElements.nextElements = nextElements;
323
+ alignElements.moveElements = moveElements;
324
+ }
325
+ return alignElements;
326
+ };
327
+ export const updateContainer = (editor, alignElements, container, updateBreakpoint, heightDiff) => {
328
+ const [containerNode, containerPath] = container;
329
+ const {
330
+ moveElements,
331
+ topPos,
332
+ nextElements
333
+ } = alignElements || {};
334
+ const appendBp = updateBreakpoint === "lg" ? "" : "_xs";
335
+
336
+ // update the aligned data inside container
337
+ if (moveElements && topPos !== 0) {
338
+ nextElements.forEach(ele => {
339
+ const {
340
+ path,
341
+ node
342
+ } = ele;
343
+ const {
344
+ top
345
+ } = getElementOffset(node, updateBreakpoint);
346
+ const y = top + topPos;
347
+
348
+ // Calculate grid position
349
+ const row = Math.floor(y / ROW_HEIGHT) + 1;
350
+
351
+ // to calculate difference inside the grid
352
+ const marginTop = Math.abs((row - 1) * ROW_HEIGHT - y);
353
+
354
+ // Update grid area
355
+ const gridArea = `${row} / 1 / ${row + 1} / 2`;
356
+ Transforms.setNodes(editor, {
357
+ [`gridArea${appendBp}`]: gridArea,
358
+ [`marginTop${appendBp}`]: marginTop
359
+ }, {
360
+ at: path
361
+ });
362
+ });
363
+ }
364
+
365
+ // update the new height of the container
366
+ const newContainerNode = getNode(editor, containerPath);
367
+ const newHeight = findMaxYValue(newContainerNode?.children, updateBreakpoint) + 12;
368
+ const {
369
+ height: containerOldHeight
370
+ } = getNodeValues(containerNode, updateBreakpoint);
371
+ let currHeightDiff = newHeight - containerOldHeight;
372
+ const noUpdate = currHeightDiff < 0 && heightDiff > 0; // if current text height is increased, but container height is getting reduced, we don't want to reduce the height of the container
373
+ if (noUpdate) {
374
+ currHeightDiff = 0;
375
+ } else {
376
+ Transforms.setNodes(editor, {
377
+ [`height${appendBp}`]: newHeight + 12
378
+ }, {
379
+ at: containerPath
380
+ });
381
+ currHeightDiff += 12;
382
+ }
383
+ return currHeightDiff;
384
+ };
385
+ export const handleContainersAlignment = (editor, containers, heightDiff, bufferSpace = 0) => {
386
+ for (let i = containers.length - 1; i >= 0; i--) {
387
+ const container = containers[i];
388
+ const childContainer = containers[i + 1];
389
+ const [containerNode, containerPath] = container;
390
+ const [childContainerNode, childContainerPath] = childContainer || [];
391
+ if (childContainer) {
392
+ const {
393
+ bottom
394
+ } = getElementOffset(childContainerNode);
395
+ containerNode.children.forEach((item, index) => {
396
+ const currPath = [...containerPath, index];
397
+ if (currPath.toString() === childContainerPath.toString()) {
398
+ return;
399
+ }
400
+ if (!RND_ITEMS.includes(item.type)) {
401
+ return;
402
+ }
403
+ const {
404
+ top: itemTop
405
+ } = getElementOffset(item);
406
+ if (itemTop >= bottom) {
407
+ const {
408
+ gridArea_xs,
409
+ marginTop_xs
410
+ } = item;
411
+ const [startRow] = getGridArea(gridArea_xs);
412
+ const y = (startRow - 1) * ROW_HEIGHT + marginTop_xs + heightDiff;
413
+
414
+ // Calculate grid position
415
+ const row = Math.floor(y / ROW_HEIGHT) + 1;
416
+
417
+ // to calculate difference inside the grid
418
+ const marginTop = Math.abs((row - 1) * ROW_HEIGHT - y);
419
+
420
+ // Update grid area
421
+ const gridArea = `${row} / 1 / ${row + 1} / 2`;
422
+ Transforms.setNodes(editor, {
423
+ gridArea_xs: gridArea,
424
+ marginTop_xs: marginTop + bufferSpace
425
+ }, {
426
+ at: currPath
427
+ });
428
+ }
429
+ });
430
+ }
431
+ Transforms.setNodes(editor, {
432
+ height_xs: containerNode?.height_xs + heightDiff + bufferSpace,
433
+ xs_updatedOn: new Date().getTime()
434
+ }, {
435
+ at: containerPath
436
+ });
437
+ }
438
+ };
439
+ export const handleBoxAlignment = (editor, sectionPath, heightDiff) => {
239
440
  const [boxNode, boxPath] = getBoxToAutoAlign(editor, sectionPath);
240
441
  Transforms.setNodes(editor, {
241
442
  autoAlign: false
@@ -245,39 +446,11 @@ export const handleBoxAlignment = (editor, sectionNode, sectionPath) => {
245
446
  if (!boxNode) {
246
447
  return;
247
448
  }
248
- const containerItems = boxNode?.children || [];
249
- const {
250
- containerHeight
251
- } = alignNewElementInContainer(editor, boxPath, containerItems);
252
- const bufferHeight = 12;
253
- const newHeight = containerHeight + bufferHeight;
254
- const {
255
- height_xs
256
- } = boxNode;
257
- const oldHeight = Number(height_xs);
258
- const extraHeight = newHeight - oldHeight;
259
- if (extraHeight > 0) {
260
- const containerData = handleContainers(editor, boxPath, extraHeight);
261
- containerData.forEach(container => {
262
- const {
263
- moveRows,
264
- containerNode,
265
- containerPath,
266
- newHeight,
267
- childIndex,
268
- lastChildStartRow
269
- } = container;
270
- if (moveRows) {
271
- moveOverlappedItems(editor, moveRows, containerNode?.children, containerPath, childIndex, lastChildStartRow);
272
- }
273
- Transforms.setNodes(editor, {
274
- height_xs: newHeight,
275
- xs_updatedOn: new Date().getTime()
276
- }, {
277
- at: containerPath
278
- });
279
- });
449
+ if (heightDiff <= 0) {
450
+ return;
280
451
  }
452
+ let containers = getAncestorFreeGridContainers(editor, boxPath);
453
+ handleContainersAlignment(editor, containers, heightDiff, 12);
281
454
  };
282
455
  export const getMarginTop = y => {
283
456
  const calcMargin = y % ROW_HEIGHT;
@@ -380,4 +553,21 @@ export const sortElements = (items, container) => {
380
553
  }
381
554
  }
382
555
  });
556
+ };
557
+ const nodeKeys = ["height", "width", "gridArea", "marginTop", "left"];
558
+ export const getNodeValues = (node, breakpoint = "xs") => {
559
+ // defaulty return xs breakpoint values, if breakpoint is not given
560
+ const appendBp = breakpoint === "lg" ? "" : "_xs";
561
+ const nodeVals = nodeKeys.reduce((a, b) => {
562
+ const key = b + appendBp;
563
+ a[b] = node[key];
564
+ if (b === "height" && !a[b]) {
565
+ a[b] = node.height;
566
+ }
567
+ return a;
568
+ }, {});
569
+ return {
570
+ ...node,
571
+ ...nodeVals
572
+ };
383
573
  };
@@ -18,6 +18,17 @@ const useVirtualElementStyles = () => ({
18
18
  "& .editor-blocker": {
19
19
  display: "none"
20
20
  },
21
+ "& .fgi_type_text": {
22
+ "& .edt-headings": {
23
+ margin: "0px"
24
+ },
25
+ "& .edt-paragraphs": {
26
+ margin: "0px"
27
+ },
28
+ "& blockquote": {
29
+ margin: "0px !important"
30
+ }
31
+ },
21
32
  "& .freegrid-item": {
22
33
  position: "relative !important",
23
34
  top: "0 !important",
@@ -97,6 +108,17 @@ export const useAutoAlignStyles = () => ({
97
108
  "&.type_text": {
98
109
  height: "auto !important"
99
110
  },
111
+ "& .fgi_type_text": {
112
+ "& .edt-headings": {
113
+ margin: "0px"
114
+ },
115
+ "& .edt-paragraphs": {
116
+ margin: "0px"
117
+ },
118
+ "& blockquote": {
119
+ margin: "0px !important"
120
+ }
121
+ },
100
122
  // start - default signature classes on free-grid
101
123
  "& .fgi_type_signature": {
102
124
  height: "100%",
@@ -12,7 +12,7 @@ import GuideLines from "./GuideLines";
12
12
  import ShadowElement from "./ShadowElement";
13
13
  import BoundaryLine from "./GuideLines/BoundaryLine";
14
14
  import ContextMenu from "./ContextMenu";
15
- import VirtualElement from "./VirtualElement";
15
+ // import VirtualElement from "./VirtualElement";
16
16
  import { ItemTypes } from "./ElementSettings/settingsConstants";
17
17
  import { selectText } from "../../utils/helper";
18
18
  import { removeSign } from "./ElementSettings/OtherSettings";
@@ -20,7 +20,7 @@ import useDragging from "../../hooks/useDragging";
20
20
  import { dragOverOn } from "../../helper/RnD/focusNode";
21
21
  import { focusSelection, clearSelection, clearSelectionOnly } from "../../helper";
22
22
  // import { reRenderChildNodes } from "./Utils/gridDropItem";
23
- import VirtualTextElement from "./VirtualElement/VirtualTextElement";
23
+ import VirtualTextElement, { updateTextHeight } from "./VirtualElement/VirtualTextElement";
24
24
  import useAutoScroll from "../../hooks/useAutoScroll";
25
25
  import ForceAutoAlignment from "./VirtualElement/ForceAutoAlignment";
26
26
  import BoxHeaderAutoAlignment from "./VirtualElement/BoxHeaderAutoAlignment";
@@ -29,6 +29,23 @@ import { useFreeGrid } from "../../Elements/FreeGrid/FreeGrid";
29
29
  import { jsx as _jsx } from "react/jsx-runtime";
30
30
  import { jsxs as _jsxs } from "react/jsx-runtime";
31
31
  import { Fragment as _Fragment } from "react/jsx-runtime";
32
+ function getTextElementHeight(textElement) {
33
+ let totalHeight = 0;
34
+ if (textElement) {
35
+ const {
36
+ childNodes
37
+ } = textElement || {};
38
+ for (let i = childNodes.length - 1; i >= 0; i--) {
39
+ const el = childNodes[i];
40
+ const text = el.textContent?.replace(/\n/g, "")?.trim();
41
+ if (text || totalHeight) {
42
+ // remove last empty spaces
43
+ totalHeight += el.offsetHeight || el.getBoundingClientRect().height;
44
+ }
45
+ }
46
+ }
47
+ return totalHeight;
48
+ }
32
49
  const ITEM_TYPES = ["child", "parent-container"];
33
50
  const EDIT_MODES = ["text", "form", "table"];
34
51
  const DISABLE_RESIZING = {
@@ -78,7 +95,8 @@ const RnD = props => {
78
95
  setAutoAlign,
79
96
  isBoxHeader,
80
97
  customProps,
81
- xsHidden
98
+ xsHidden,
99
+ disableClick = false
82
100
  } = props;
83
101
  const {
84
102
  isSelectedElement,
@@ -132,6 +150,7 @@ const RnD = props => {
132
150
  const {
133
151
  translation
134
152
  } = customProps;
153
+ const timerId = useRef(0);
135
154
  useEffect(() => {
136
155
  if (ITEM_TYPES.includes(type)) {
137
156
  if (enable === 1) {
@@ -141,6 +160,24 @@ const RnD = props => {
141
160
  setAbsPosition({});
142
161
  }
143
162
  }
163
+ const currElement = getCurrentEle();
164
+ const textElement = currElement?.querySelector(".fgi_type_text");
165
+ if (breakpoint && textElement && childType === "text" && !enable) {
166
+ timerId.current = setTimeout(() => {
167
+ // const { clientHeight } = textElement;
168
+ const clientHeight = getTextElementHeight(textElement);
169
+ const {
170
+ height
171
+ } = delta || {};
172
+ const heightDiff = Math.abs(clientHeight - height);
173
+ if (clientHeight && height && heightDiff >= 5) {
174
+ updateTextHeight(editor, path, clientHeight, breakpoint);
175
+ const parentSectionPath = path.slice(0, 2);
176
+ reRenderChildNodes(editor, parentSectionPath);
177
+ }
178
+ }, 200);
179
+ }
180
+ return () => clearTimeout(timerId.current);
144
181
  }, [enable]);
145
182
  const getCurrentEle = () => {
146
183
  return positionRef.current?.resizableElement?.current;
@@ -500,7 +537,9 @@ const RnD = props => {
500
537
  ref
501
538
  }, ".freegrid-container-parent");
502
539
  const formatParentPath = parentPath?.split("|")?.map(m => parseInt(m));
503
- reRenderChildNodes(editor, formatParentPath);
540
+ if (formatParentPath) {
541
+ reRenderChildNodes(editor, formatParentPath);
542
+ }
504
543
  };
505
544
  const onCloseSettings = () => {
506
545
  setSelectedElement({
@@ -631,7 +670,10 @@ const RnD = props => {
631
670
  "data-path": path,
632
671
  contentEditable: false,
633
672
  "data-dragoverid": str_path,
634
- "data-dragovertype": type
673
+ "data-dragovertype": type,
674
+ style: {
675
+ pointerEvents: disableClick ? "none" : "auto"
676
+ }
635
677
  }) : null]
636
678
  }, eId), xsHidden && breakpoint === "xs" ? null : /*#__PURE__*/_jsxs(_Fragment, {
637
679
  children: [/*#__PURE__*/_jsx(ElementSettings, {
@@ -684,14 +726,7 @@ const RnD = props => {
684
726
  handleClose: handleClose,
685
727
  theme: theme,
686
728
  translation: translation
687
- }), type === "parent" && breakpoint === "lg" && !readOnly ? /*#__PURE__*/_jsx(VirtualElement, {
688
- updated_at: updated_at,
689
- path: str_path,
690
- editor: editor,
691
- sectionElement: sectionElement,
692
- sectionCls: `.freegrid-section_${path.join("_")}`,
693
- dataSets: dataSets
694
- }) : null, childType === "text" && breakpoint === "lg" && !readOnly && enable ? /*#__PURE__*/_jsx(VirtualTextElement, {
729
+ }), childType === "text" && breakpoint === "lg" && !readOnly && enable ? /*#__PURE__*/_jsx(VirtualTextElement, {
695
730
  editor: editor,
696
731
  dataSets: dataSets,
697
732
  getCurrentEle: getCurrentEle,