@flozy/editor 1.5.9 → 1.6.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 (131) hide show
  1. package/dist/Editor/CommonEditor.js +195 -94
  2. package/dist/Editor/DialogWrapper.js +3 -0
  3. package/dist/Editor/Editor.css +211 -50
  4. package/dist/Editor/Elements/Accordion/Accordion.js +0 -1
  5. package/dist/Editor/Elements/Accordion/AccordionButton.js +13 -12
  6. package/dist/Editor/Elements/Accordion/AccordionSummary.js +0 -1
  7. package/dist/Editor/Elements/AppHeader/AppHeader.js +136 -133
  8. package/dist/Editor/Elements/AppHeader/AppHeaderPopup.js +4 -2
  9. package/dist/Editor/Elements/Button/ButtonToolIcon.js +10 -9
  10. package/dist/Editor/Elements/Button/EditorButton.js +8 -24
  11. package/dist/Editor/Elements/Carousel/Carousel.js +47 -28
  12. package/dist/Editor/Elements/Carousel/CarouselButton.js +7 -8
  13. package/dist/Editor/Elements/Color Picker/ColorButtons.js +133 -0
  14. package/dist/Editor/Elements/Color Picker/ColorPicker.js +49 -58
  15. package/dist/Editor/Elements/Color Picker/Styles.js +51 -0
  16. package/dist/Editor/Elements/Color Picker/defaultColors.js +1 -1
  17. package/dist/Editor/Elements/Embed/Embed.js +35 -126
  18. package/dist/Editor/Elements/Embed/Image.js +24 -7
  19. package/dist/Editor/Elements/Embed/Video.js +21 -6
  20. package/dist/Editor/Elements/Emoji/EmojiButton.js +73 -0
  21. package/dist/Editor/Elements/Emoji/EmojiPicker.js +0 -0
  22. package/dist/Editor/Elements/Form/Form.js +24 -13
  23. package/dist/Editor/Elements/Form/FormButton.js +11 -9
  24. package/dist/Editor/Elements/Form/FormElements/FormText.js +4 -2
  25. package/dist/Editor/Elements/Form/FormElements/FormTextArea.js +3 -2
  26. package/dist/Editor/Elements/Form/FormField.js +7 -1
  27. package/dist/Editor/Elements/Grid/Grid.js +143 -47
  28. package/dist/Editor/Elements/Grid/GridButton.js +52 -29
  29. package/dist/Editor/Elements/Grid/GridItem.js +32 -21
  30. package/dist/Editor/Elements/Grid/Styles.js +11 -0
  31. package/dist/Editor/Elements/InlineIcon/InlineIcon.js +0 -1
  32. package/dist/Editor/Elements/List/CheckList.js +57 -0
  33. package/dist/Editor/Elements/List/CheckListButton.js +24 -0
  34. package/dist/Editor/Elements/NewLine/NewLineButton.js +14 -14
  35. package/dist/Editor/Elements/PageSettings/PageSettings.js +4 -2
  36. package/dist/Editor/Elements/PageSettings/PageSettingsButton.js +17 -62
  37. package/dist/Editor/Elements/PageSettings/PageSettingsPopup.js +1 -1
  38. package/dist/Editor/Elements/Signature/Signature.js +9 -3
  39. package/dist/Editor/Elements/Signature/SignatureButton.js +10 -9
  40. package/dist/Editor/Elements/Signature/SignaturePopup.js +42 -6
  41. package/dist/Editor/Elements/SimpleText.js +62 -0
  42. package/dist/Editor/Elements/Table/Styles.js +66 -0
  43. package/dist/Editor/Elements/Table/Table.js +33 -16
  44. package/dist/Editor/Elements/Table/TableCell.js +54 -24
  45. package/dist/Editor/Elements/Table/TableSelector.js +13 -15
  46. package/dist/Editor/Elements/Table/table.css +0 -10
  47. package/dist/Editor/Elements/TopBanner/Styles.js +33 -0
  48. package/dist/Editor/Elements/TopBanner/TopBanner.js +106 -0
  49. package/dist/Editor/Elements/TopBanner/TopBannerButton.js +47 -0
  50. package/dist/Editor/Styles/EditorStyles.js +50 -0
  51. package/dist/Editor/Toolbar/FormatTools/Autocomplete.js +0 -2
  52. package/dist/Editor/Toolbar/FormatTools/Dropdown.js +8 -3
  53. package/dist/Editor/Toolbar/FormatTools/FontFamilyDropdown.js +63 -0
  54. package/dist/Editor/Toolbar/FormatTools/FontSize.js +112 -0
  55. package/dist/Editor/Toolbar/FormatTools/TextSize.js +13 -3
  56. package/dist/Editor/Toolbar/FormatTools/index.js +4 -1
  57. package/dist/Editor/Toolbar/Mini/MiniToolbar.js +101 -0
  58. package/dist/Editor/Toolbar/Mini/Options/Options.js +17 -0
  59. package/dist/Editor/Toolbar/Mini/Styles.js +30 -0
  60. package/dist/Editor/Toolbar/PopupTool/AddElements.js +32 -0
  61. package/dist/Editor/Toolbar/PopupTool/AddTemplates.js +115 -0
  62. package/dist/Editor/Toolbar/PopupTool/PopperHeader.js +65 -0
  63. package/dist/Editor/Toolbar/PopupTool/PopupToolStyle.js +160 -6
  64. package/dist/Editor/Toolbar/PopupTool/TextFormat.js +263 -80
  65. package/dist/Editor/Toolbar/PopupTool/index.js +50 -85
  66. package/dist/Editor/Toolbar/Toolbar.js +189 -129
  67. package/dist/Editor/Toolbar/styles.css +136 -18
  68. package/dist/Editor/Toolbar/toolbarGroups.js +94 -34
  69. package/dist/Editor/assets/svg/AddElementIcon.js +29 -0
  70. package/dist/Editor/assets/svg/AddTemplateIcon.js +29 -0
  71. package/dist/Editor/assets/svg/TextIcon.js +29 -0
  72. package/dist/Editor/common/Icon.js +54 -5
  73. package/dist/Editor/common/ImageList.js +75 -0
  74. package/dist/Editor/common/ImageSelector/ImageSelector.js +117 -0
  75. package/dist/Editor/common/ImageSelector/Options/AddLink.js +44 -0
  76. package/dist/Editor/common/ImageSelector/Options/ChooseAssets.js +39 -0
  77. package/dist/Editor/common/ImageSelector/Options/Upload.js +30 -0
  78. package/dist/Editor/common/ImageSelector/Styles.js +41 -0
  79. package/dist/Editor/common/ImageUploader.js +94 -0
  80. package/dist/Editor/common/MentionsPopup/ElementsListCard.js +66 -0
  81. package/dist/Editor/common/MentionsPopup/MentionsListCard.js +70 -0
  82. package/dist/Editor/common/MentionsPopup/Styles.js +68 -0
  83. package/dist/Editor/common/MentionsPopup/index.js +129 -0
  84. package/dist/Editor/common/Shorthands/elements.js +191 -0
  85. package/dist/Editor/common/Shorthands/index.js +7 -0
  86. package/dist/Editor/common/Shorthands/mentions.js +8 -0
  87. package/dist/Editor/common/StyleBuilder/appHeaderStyle.js +5 -5
  88. package/dist/Editor/common/StyleBuilder/buttonStyle.js +1 -1
  89. package/dist/Editor/common/StyleBuilder/embedImageStyle.js +15 -2
  90. package/dist/Editor/common/StyleBuilder/embedVideoStyle.js +8 -0
  91. package/dist/Editor/common/StyleBuilder/fieldTypes/alignment.js +2 -3
  92. package/dist/Editor/common/StyleBuilder/fieldTypes/backgroundImage.js +23 -35
  93. package/dist/Editor/common/StyleBuilder/fieldTypes/buttonLink.js +3 -20
  94. package/dist/Editor/common/StyleBuilder/fieldTypes/fontSize.js +95 -0
  95. package/dist/Editor/common/StyleBuilder/fieldTypes/icons.js +14 -2
  96. package/dist/Editor/common/StyleBuilder/fieldTypes/index.js +3 -1
  97. package/dist/Editor/common/StyleBuilder/fieldTypes/menusArray.js +0 -1
  98. package/dist/Editor/common/StyleBuilder/fieldTypes/textOptions.js +3 -2
  99. package/dist/Editor/common/StyleBuilder/index.js +0 -1
  100. package/dist/Editor/common/StyleBuilder/tableStyle.js +9 -5
  101. package/dist/Editor/common/ToolbarIcon.js +43 -0
  102. package/dist/Editor/common/Uploader.js +35 -61
  103. package/dist/Editor/common/iconslist.js +46 -1
  104. package/dist/Editor/helper/index.js +0 -1
  105. package/dist/Editor/hooks/useDrag.js +2 -2
  106. package/dist/Editor/hooks/useMentions.js +104 -17
  107. package/dist/Editor/hooks/useMouseMove.js +53 -0
  108. package/dist/Editor/hooks/useScroll.js +26 -0
  109. package/dist/Editor/plugins/withEmbeds.js +12 -0
  110. package/dist/Editor/service/fileupload.js +2 -2
  111. package/dist/Editor/utils/SlateUtilityFunctions.js +61 -9
  112. package/dist/Editor/utils/button.js +2 -1
  113. package/dist/Editor/utils/carousel.js +5 -2
  114. package/dist/Editor/utils/carouselItem.js +2 -2
  115. package/dist/Editor/utils/customHooks/useResize.js +2 -3
  116. package/dist/Editor/utils/customHooks/useTableResize.js +2 -1
  117. package/dist/Editor/utils/embed.js +25 -8
  118. package/dist/Editor/utils/emoji.js +8 -0
  119. package/dist/Editor/utils/events.js +49 -12
  120. package/dist/Editor/utils/form.js +3 -9
  121. package/dist/Editor/utils/formfield.js +2 -1
  122. package/dist/Editor/utils/grid.js +44 -8
  123. package/dist/Editor/utils/gridItem.js +4 -3
  124. package/dist/Editor/utils/insertNewLine.js +12 -0
  125. package/dist/Editor/utils/mentions.js +14 -10
  126. package/dist/Editor/utils/pageSettings.js +67 -0
  127. package/dist/Editor/utils/signature.js +6 -8
  128. package/dist/Editor/utils/table.js +79 -18
  129. package/dist/Editor/utils/topBanner.js +58 -0
  130. package/package.json +6 -2
  131. package/dist/Editor/common/MentionsPopup.js +0 -56
@@ -18,7 +18,9 @@ const Video = ({
18
18
  }) => {
19
19
  const {
20
20
  url,
21
- alt
21
+ alt,
22
+ alignment,
23
+ bannerSpacing
22
24
  } = element;
23
25
  const editor = useSlateStatic();
24
26
  const selected = useSelected();
@@ -28,6 +30,14 @@ const Video = ({
28
30
  const {
29
31
  readOnly
30
32
  } = customProps;
33
+ const {
34
+ vertical,
35
+ horizantal
36
+ } = alignment || {};
37
+ const {
38
+ left,
39
+ right
40
+ } = bannerSpacing || {};
31
41
  const [size, onMouseDown, resizing, onLoad] = useResize({
32
42
  parentDOM,
33
43
  size: element?.size
@@ -93,14 +103,17 @@ const Video = ({
93
103
  at: path
94
104
  });
95
105
  };
106
+ const totalMinus = parseInt(left || 0) + parseInt(right || 0);
107
+ const width = resizing ? `${size.width}px` : `${size.widthInPercent}%`;
96
108
  return /*#__PURE__*/_jsxs("div", {
97
109
  ...attributes,
98
110
  className: "embed has-hover",
99
111
  style: {
100
112
  display: "flex",
101
- width: "100%",
102
- maxWidth: "100%",
103
- boxShadow: selected && focused && "0 0 3px 3px lightgray"
113
+ width: `calc(100% - ${totalMinus}px)`,
114
+ boxShadow: selected && focused && "0 0 3px 3px lightgray",
115
+ justifyContent: horizantal,
116
+ alignContent: vertical
104
117
  },
105
118
  ...element.attr,
106
119
  children: [openSetttings ? /*#__PURE__*/_jsx(EmbedPopup, {
@@ -114,7 +127,7 @@ const Video = ({
114
127
  contentEditable: false,
115
128
  style: {
116
129
  position: "relative",
117
- width: size.widthInPercent ? `${size.widthInPercent}%` : `${size.width}px`,
130
+ width: `${width}`,
118
131
  height: `${size.height}px`
119
132
  },
120
133
  children: [!readOnly && /*#__PURE__*/_jsx(ToolBar, {}),
@@ -136,8 +149,10 @@ const Video = ({
136
149
  className: "embedd-iframe",
137
150
  style: {
138
151
  border: "none",
152
+ position: "absolute",
139
153
  width: "100%",
140
- height: "100%"
154
+ height: "100%",
155
+ left: "0px"
141
156
  },
142
157
  src: url,
143
158
  title: alt
@@ -0,0 +1,73 @@
1
+ import React, { useState, forwardRef, useImperativeHandle } from "react";
2
+ import { useSlateStatic, ReactEditor } from "slate-react";
3
+ import { Paper, Popover } from "@mui/material";
4
+ import data from "@emoji-mart/data";
5
+ import Picker from "@emoji-mart/react";
6
+ import { insertEmoji } from "../../utils/emoji";
7
+ import ToolbarIcon from "../../common/ToolbarIcon";
8
+ import Icon from "../../common/Icon";
9
+ import { jsx as _jsx } from "react/jsx-runtime";
10
+ import { Fragment as _Fragment } from "react/jsx-runtime";
11
+ import { jsxs as _jsxs } from "react/jsx-runtime";
12
+ const EmojiButton = /*#__PURE__*/forwardRef((props, ref) => {
13
+ const {
14
+ icoBtnType,
15
+ selectionTarget
16
+ } = props;
17
+ const editor = useSlateStatic();
18
+ const [anchorEl, setAnchorEl] = useState(null);
19
+ const [target, setTarget] = useState(selectionTarget);
20
+ const open = Boolean(anchorEl);
21
+ useImperativeHandle(ref, () => ({
22
+ triggerClick: target => {
23
+ setTarget(target);
24
+ onClick();
25
+ }
26
+ }));
27
+ const onClick = () => {
28
+ if (editor.selection) {
29
+ const domRange = ReactEditor.toDOMRange(editor, editor.selection);
30
+ const rect = domRange.getBoundingClientRect();
31
+ setAnchorEl({
32
+ getBoundingClientRect: () => rect,
33
+ nodeType: 1
34
+ });
35
+ }
36
+ };
37
+ const onEmojiSelect = emoji => {
38
+ insertEmoji(editor, emoji?.native, target || editor.selection);
39
+ setAnchorEl(null);
40
+ };
41
+ const handleClose = () => {
42
+ setAnchorEl(null);
43
+ };
44
+ return /*#__PURE__*/_jsxs(_Fragment, {
45
+ children: [/*#__PURE__*/_jsx(ToolbarIcon, {
46
+ title: "Emoji",
47
+ onClick: onClick,
48
+ icon: /*#__PURE__*/_jsx(Icon, {
49
+ icon: "emoji"
50
+ }),
51
+ icoBtnType: icoBtnType
52
+ }), /*#__PURE__*/_jsx(Popover, {
53
+ style: {
54
+ zIndex: 10001
55
+ },
56
+ open: open,
57
+ anchorEl: anchorEl,
58
+ anchorOrigin: {
59
+ vertical: "bottom",
60
+ horizontal: "left"
61
+ },
62
+ onClose: handleClose,
63
+ children: /*#__PURE__*/_jsx(Paper, {
64
+ children: /*#__PURE__*/_jsx(Picker, {
65
+ data: data,
66
+ onEmojiSelect: onEmojiSelect
67
+ })
68
+ })
69
+ })]
70
+ });
71
+ });
72
+ EmojiButton.displayName = "EmojiButton";
73
+ export default EmojiButton;
File without changes
@@ -3,9 +3,8 @@ import { Transforms } from "slate";
3
3
  import { useSlateStatic, ReactEditor } from "slate-react";
4
4
  import { IconButton, Tooltip, Grid, Menu, MenuItem, CircularProgress } from "@mui/material";
5
5
  import DeleteIcon from "@mui/icons-material/Delete";
6
- import SettingsIcon from "@mui/icons-material/Settings";
7
- import AddIcon from "@mui/icons-material/Add";
8
6
  import BackupIcon from "@mui/icons-material/Backup";
7
+ import { GridSettingsIcon, GridAddSectionIcon } from "../../common/iconslist";
9
8
  import FormPopup from "./FormPopup";
10
9
  import ButtonPopup from "../Button/ButtonPopup";
11
10
  import { formField } from "../../utils/formfield";
@@ -61,6 +60,7 @@ const Form = props => {
61
60
  const [editButton, setEditButton] = useState(false);
62
61
  const [anchorEl, setAnchorEl] = useState(null);
63
62
  const [loading, setLoading] = useState(false);
63
+ const [showOptions, setShowOptions] = useState(false);
64
64
  const path = ReactEditor.findPath(editor, element);
65
65
  const btnBorderStyle = buttonProps?.borderColor?.indexOf("linear") >= 0 ? {
66
66
  borderImageSource: buttonProps?.borderColor,
@@ -170,33 +170,42 @@ const Form = props => {
170
170
  setAnchorEl(e.currentTarget);
171
171
  }
172
172
  };
173
+ const onMouseOver = () => {
174
+ setShowOptions(true);
175
+ };
176
+ const onMouseLeave = () => {
177
+ setShowOptions(false);
178
+ };
173
179
  const FormToolbar = () => {
174
180
  return /*#__PURE__*/_jsxs("div", {
175
- className: "",
181
+ className: "element-toolbar hr",
176
182
  contentEditable: false,
177
183
  style: {
178
- backgroundColor: "#ccc",
179
- width: "fit-content"
184
+ top: "-42px",
185
+ left: "0px"
180
186
  },
181
187
  children: [/*#__PURE__*/_jsx(Tooltip, {
182
188
  title: "Form Settings",
183
189
  arrow: true,
184
190
  children: /*#__PURE__*/_jsx(IconButton, {
185
191
  onClick: onSettings,
186
- children: /*#__PURE__*/_jsx(SettingsIcon, {})
192
+ className: "mr",
193
+ children: /*#__PURE__*/_jsx(GridSettingsIcon, {})
187
194
  })
188
195
  }), /*#__PURE__*/_jsx(Tooltip, {
189
196
  title: "Add Form Field",
190
197
  arrow: true,
191
198
  children: /*#__PURE__*/_jsx(IconButton, {
192
199
  onClick: onAddFormField,
193
- children: /*#__PURE__*/_jsx(AddIcon, {})
200
+ className: "mr",
201
+ children: /*#__PURE__*/_jsx(GridAddSectionIcon, {})
194
202
  })
195
203
  }), /*#__PURE__*/_jsx(Tooltip, {
196
204
  title: "Delete Form",
197
205
  arrow: true,
198
206
  children: /*#__PURE__*/_jsx(IconButton, {
199
207
  onClick: onDelete,
208
+ className: "mr",
200
209
  children: /*#__PURE__*/_jsx(DeleteIcon, {})
201
210
  })
202
211
  })]
@@ -206,10 +215,12 @@ const Form = props => {
206
215
  ...attributes,
207
216
  className: "form-wrapper element-root",
208
217
  style: {
209
- border: !readOnly ? "1px dotted red" : "none",
218
+ border: !readOnly ? "none" : "none",
210
219
  padding: "10px"
211
220
  },
212
- children: [!readOnly && /*#__PURE__*/_jsx(FormToolbar, {}), /*#__PURE__*/_jsxs("form", {
221
+ onMouseOver: onMouseOver,
222
+ onMouseLeave: onMouseLeave,
223
+ children: [/*#__PURE__*/_jsxs("form", {
213
224
  id: `${formName}`,
214
225
  onSubmit: handleSubmit,
215
226
  style: {
@@ -222,14 +233,14 @@ const Form = props => {
222
233
  paddingLeft: `${left}px`,
223
234
  paddingRight: `${right}px`,
224
235
  paddingTop: `${top}px`,
225
- paddingBottom: `${bottom}px`
236
+ paddingBottom: `${bottom}px`,
237
+ position: "relative"
226
238
  },
227
239
  ref: formEle,
228
240
  children: [/*#__PURE__*/_jsx(Grid, {
229
241
  className: "form-grid",
230
242
  item: true,
231
243
  xs: 12,
232
- spacing: 2,
233
244
  children: /*#__PURE__*/_jsxs(Grid, {
234
245
  container: true,
235
246
  spacing: 2,
@@ -278,7 +289,7 @@ const Form = props => {
278
289
  })
279
290
  })]
280
291
  })
281
- }), loading && /*#__PURE__*/_jsx("div", {
292
+ }), !readOnly && showOptions && /*#__PURE__*/_jsx(FormToolbar, {}), loading && /*#__PURE__*/_jsx("div", {
282
293
  style: {
283
294
  position: "absolute",
284
295
  top: 0,
@@ -314,7 +325,7 @@ const Form = props => {
314
325
  title: "Button Settings",
315
326
  arrow: true,
316
327
  children: /*#__PURE__*/_jsx(IconButton, {
317
- children: /*#__PURE__*/_jsx(SettingsIcon, {})
328
+ children: /*#__PURE__*/_jsx(GridSettingsIcon, {})
318
329
  })
319
330
  })
320
331
  }), /*#__PURE__*/_jsx(MenuItem, {
@@ -1,21 +1,23 @@
1
1
  import React from "react";
2
2
  import { useSlateStatic } from "slate-react";
3
- import { IconButton, Tooltip } from "@mui/material";
4
- import { FormIcon } from "../../common/iconslist";
5
3
  import { insertForm } from "../../utils/form";
4
+ import ToolbarIcon from "../../common/ToolbarIcon";
5
+ import Icon from "../../common/Icon";
6
6
  import { jsx as _jsx } from "react/jsx-runtime";
7
- const FormButton = props => {
7
+ const FormButton = ({
8
+ icoBtnType
9
+ }) => {
8
10
  const editor = useSlateStatic();
9
11
  const onClick = () => {
10
12
  insertForm(editor);
11
13
  };
12
- return /*#__PURE__*/_jsx(Tooltip, {
14
+ return /*#__PURE__*/_jsx(ToolbarIcon, {
13
15
  title: "Form",
14
- arrow: true,
15
- children: /*#__PURE__*/_jsx(IconButton, {
16
- onClick: onClick,
17
- children: /*#__PURE__*/_jsx(FormIcon, {})
18
- })
16
+ onClick: onClick,
17
+ icon: /*#__PURE__*/_jsx(Icon, {
18
+ icon: "form"
19
+ }),
20
+ icoBtnType: icoBtnType
19
21
  });
20
22
  };
21
23
  export default FormButton;
@@ -12,7 +12,9 @@ const FormText = props => {
12
12
  borderWidth,
13
13
  borderColor,
14
14
  textColor,
15
- bgColor
15
+ bgColor,
16
+ lockSpacing,
17
+ ...rest
16
18
  } = fieldProps;
17
19
  const {
18
20
  left,
@@ -36,7 +38,7 @@ const FormText = props => {
36
38
  },
37
39
  contentEditable: false,
38
40
  children: /*#__PURE__*/_jsx("input", {
39
- ...fieldProps,
41
+ ...rest,
40
42
  onChange: onChange,
41
43
  style: {
42
44
  width: "100%",
@@ -12,7 +12,8 @@ const FormTextArea = props => {
12
12
  borderWidth,
13
13
  borderColor,
14
14
  textColor,
15
- bgColor
15
+ bgColor,
16
+ ...rest
16
17
  } = fieldProps;
17
18
  const {
18
19
  left,
@@ -36,7 +37,7 @@ const FormTextArea = props => {
36
37
  },
37
38
  contentEditable: false,
38
39
  children: /*#__PURE__*/_jsx("textarea", {
39
- ...fieldProps,
40
+ ...rest,
40
41
  onChange: onChange,
41
42
  style: {
42
43
  width: "100%",
@@ -12,6 +12,7 @@ const FormField = props => {
12
12
  const {
13
13
  attributes,
14
14
  element,
15
+ children: rootChildren,
15
16
  customProps
16
17
  } = props;
17
18
  const {
@@ -94,7 +95,12 @@ const FormField = props => {
94
95
  element: element,
95
96
  onSave: onSave,
96
97
  onClose: onClose
97
- }) : null]
98
+ }) : null, /*#__PURE__*/_jsx("span", {
99
+ style: {
100
+ display: "none"
101
+ },
102
+ children: rootChildren
103
+ })]
98
104
  });
99
105
  };
100
106
  export default FormField;
@@ -1,15 +1,20 @@
1
+ /* eslint-disable no-unused-vars */
1
2
  import React, { useState, useEffect } from "react";
2
3
  import { Transforms, Path, Node } from "slate";
3
4
  import { useSelected, useSlateStatic, ReactEditor } from "slate-react";
4
5
  import { gridItem } from "../../utils/gridItem";
5
6
  import GridPopup from "./GridPopup";
6
- import { IconButton, Tooltip } from "@mui/material";
7
- // import CompressIcon from "@mui/icons-material/Compress";
7
+ import { IconButton, Tooltip, Grid as GridContainer } from "@mui/material";
8
8
  import { insertGrid } from "../../utils/grid";
9
- import useDragAndDrop from "../../common/useDragAndDrop";
9
+ // import useDragAndDrop from "../../common/useDragAndDrop";
10
10
  import useResize from "../../utils/customHooks/useResize";
11
11
  import { GridAddGridIcon, GridAddSectionIcon, GridSettingsIcon } from "../../common/iconslist";
12
+ import ArrowUpwardIcon from "@mui/icons-material/ArrowUpward";
13
+ import ArrowDownwardIcon from "@mui/icons-material/ArrowDownward";
14
+ import KeyboardReturnIcon from "@mui/icons-material/KeyboardReturn";
15
+ import { useEditorContext } from "../../hooks/useMouseMove";
12
16
  import { jsx as _jsx } from "react/jsx-runtime";
17
+ import { Fragment as _Fragment } from "react/jsx-runtime";
13
18
  import { jsxs as _jsxs } from "react/jsx-runtime";
14
19
  const Grid = props => {
15
20
  const {
@@ -29,7 +34,7 @@ const Grid = props => {
29
34
  bgColor,
30
35
  alignment,
31
36
  backgroundImage,
32
- size: elSize,
37
+ // size: elSize,
33
38
  fgColor,
34
39
  borderWidth,
35
40
  borderColor,
@@ -53,23 +58,24 @@ const Grid = props => {
53
58
  bottomLeft,
54
59
  bottomRight
55
60
  } = borderRadius || {};
56
- const {
57
- height: elHeight
58
- } = elSize || {};
61
+ // const { height: elHeight } = elSize || {};
59
62
  const editor = useSlateStatic();
60
- const selected = useSelected();
63
+ // const selected = useSelected();
61
64
  // const [selected, setSelected] = useState(false);
62
65
  const path = ReactEditor.findPath(editor, element);
63
66
  const [parentDOM, setParentDOM] = useState(null);
64
-
65
67
  // resize
66
- const [size, onMouseDown, resizing, onLoad] = useResize({
68
+ const [size,, resizing, onLoad] = useResize({
67
69
  parentDOM,
68
70
  size: element?.size,
69
71
  isGrid: true
70
72
  });
71
73
  const arr = Array.from(Node.elements(editor));
72
74
  const ele = arr.find(([elem]) => element === elem);
75
+ const {
76
+ hoverPath
77
+ } = useEditorContext();
78
+ const selected = hoverPath === path.join(",");
73
79
  useEffect(() => {
74
80
  if (editor && ele[1] !== undefined) {
75
81
  const dom = ReactEditor.toDOMNode(editor, Node.get(editor, ele[1]));
@@ -154,49 +160,115 @@ const Grid = props => {
154
160
  console.log(err);
155
161
  }
156
162
  };
157
- const onDrop = dropElement => {
163
+ const onMoveSection = direction => e => {
158
164
  try {
159
- Transforms.insertNodes(editor, JSON.parse(dropElement), {
160
- at: path,
161
- select: true
162
- });
165
+ e.preventDefault();
166
+ e.stopPropagation();
167
+ if (direction) {
168
+ let moveTo = direction === "up" ? path[0] - 1 : path[0] + 1;
169
+ if (moveTo < 0) {
170
+ moveTo = 0;
171
+ } else if (moveTo > editor.children.length - 1) {
172
+ moveTo = editor.children.length - 1;
173
+ }
174
+ Transforms.moveNodes(editor, {
175
+ at: [path[0]],
176
+ to: [moveTo]
177
+ });
178
+ }
163
179
  } catch (err) {
164
180
  console.log(err);
165
181
  }
166
182
  };
167
- const onDragEnd = () => {
183
+ const onNewLine = direction => () => {
168
184
  try {
169
- const currentDelpath = ReactEditor.findPath(editor, element);
170
- if (currentDelpath) {
171
- Transforms.removeNodes(editor, {
172
- at: currentDelpath
185
+ if (direction) {
186
+ let moveTo = direction === "up" ? path[0] - 1 : path[0] + 1;
187
+ let lastLine = false;
188
+ if (moveTo < 0) {
189
+ moveTo = 0;
190
+ } else if (moveTo > editor.children.length - 1) {
191
+ moveTo = editor.children.length;
192
+ lastLine = true;
193
+ }
194
+ Transforms.insertNodes(editor, {
195
+ type: "paragraph",
196
+ children: [{
197
+ text: ""
198
+ }]
199
+ }, {
200
+ at: [moveTo]
173
201
  });
202
+ if (lastLine) {
203
+ Transforms.move(editor, {
204
+ at: [moveTo]
205
+ });
206
+ }
174
207
  }
175
208
  } catch (err) {
176
209
  console.log(err);
177
210
  }
178
211
  };
179
- const grid_drag_id = `grid_drag_${path.join("_")}`;
180
- const [dndElements, isDragging, isActiveDrag] = useDragAndDrop({
181
- editor,
182
- id: grid_drag_id,
183
- selected,
184
- path,
185
- element,
186
- onDragEnd,
187
- onDrop
188
- });
189
212
 
190
- // const onMouseOver = (e) => {
191
- // e.stopPropagation();
192
- // setSelected(true);
213
+ // const onDrop = (dropElement) => {
214
+ // try {
215
+ // Transforms.insertNodes(editor, JSON.parse(dropElement), {
216
+ // at: path,
217
+ // select: true,
218
+ // });
219
+ // } catch (err) {
220
+ // console.log(err);
221
+ // }
193
222
  // };
194
223
 
195
- // const onMouseLeave = (e) => {
196
- // e.stopPropagation();
197
- // setSelected(false);
224
+ // const onDragEnd = () => {
225
+ // try {
226
+ // const currentDelpath = ReactEditor.findPath(editor, element);
227
+ // if (currentDelpath) {
228
+ // Transforms.removeNodes(editor, { at: currentDelpath });
229
+ // }
230
+ // } catch (err) {
231
+ // console.log(err);
232
+ // }
198
233
  // };
199
234
 
235
+ // const grid_drag_id = `grid_drag_${path.join("_")}`;
236
+
237
+ // const [dndElements, isDragging, isActiveDrag] = useDragAndDrop({
238
+ // editor,
239
+ // id: grid_drag_id,
240
+ // selected,
241
+ // path,
242
+ // element,
243
+ // onDragEnd,
244
+ // onDrop,
245
+ // });
246
+
247
+ const NewLineButtons = () => {
248
+ return !readOnly && selected && path.length === 2 ? /*#__PURE__*/_jsxs(_Fragment, {
249
+ children: [/*#__PURE__*/_jsx("div", {
250
+ className: "element-selector-ctrl tc",
251
+ children: /*#__PURE__*/_jsx(Tooltip, {
252
+ title: "Add Space above",
253
+ arrow: true,
254
+ children: /*#__PURE__*/_jsx(IconButton, {
255
+ onClick: onNewLine("up"),
256
+ children: /*#__PURE__*/_jsx(KeyboardReturnIcon, {})
257
+ })
258
+ })
259
+ }), /*#__PURE__*/_jsx("div", {
260
+ className: "element-selector-ctrl bc",
261
+ children: /*#__PURE__*/_jsx(Tooltip, {
262
+ title: "Add Space below",
263
+ arrow: true,
264
+ children: /*#__PURE__*/_jsx(IconButton, {
265
+ onClick: onNewLine("down"),
266
+ children: /*#__PURE__*/_jsx(KeyboardReturnIcon, {})
267
+ })
268
+ })
269
+ })]
270
+ }) : null;
271
+ };
200
272
  const GridToolBar = () => {
201
273
  return selected ? /*#__PURE__*/_jsxs("div", {
202
274
  className: "grid-container-toolbar",
@@ -222,7 +294,23 @@ const Grid = props => {
222
294
  onClick: onAddSection(null, true),
223
295
  children: /*#__PURE__*/_jsx(GridAddSectionIcon, {})
224
296
  })
225
- })]
297
+ }), path.length === 2 ? /*#__PURE__*/_jsxs(_Fragment, {
298
+ children: [/*#__PURE__*/_jsx(Tooltip, {
299
+ title: "Move Up",
300
+ arrow: true,
301
+ children: /*#__PURE__*/_jsx(IconButton, {
302
+ onClick: onMoveSection("up"),
303
+ children: /*#__PURE__*/_jsx(ArrowUpwardIcon, {})
304
+ })
305
+ }), /*#__PURE__*/_jsx(Tooltip, {
306
+ title: "Move Down",
307
+ arrow: true,
308
+ children: /*#__PURE__*/_jsx(IconButton, {
309
+ onClick: onMoveSection("down"),
310
+ children: /*#__PURE__*/_jsx(ArrowDownwardIcon, {})
311
+ })
312
+ })]
313
+ }) : null]
226
314
  }) : null;
227
315
  };
228
316
  const sectionId = id ? {
@@ -231,8 +319,9 @@ const Grid = props => {
231
319
  const bgImage = backgroundImage && backgroundImage !== "none" ? {
232
320
  backgroundImage: `url(${backgroundImage})`
233
321
  } : {};
234
- return /*#__PURE__*/_jsxs("div", {
235
- className: `grid-container ${grid} has-hover element-root ${isDragging ? "dragging" : ""} ${isActiveDrag ? "active_drag" : ""}`,
322
+ return /*#__PURE__*/_jsxs(GridContainer, {
323
+ container: true,
324
+ className: `grid-container ${grid} has-hover element-root`,
236
325
  ...attributes,
237
326
  ...sectionId,
238
327
  style: {
@@ -243,10 +332,8 @@ const Grid = props => {
243
332
  borderWidth: borderWidth || "1px",
244
333
  borderRadius: `${topLeft}px ${topRight}px ${bottomLeft}px ${bottomRight}px`,
245
334
  borderStyle: borderStyle || "solid"
246
- }
247
- // onMouseOver={onMouseOver}
248
- // onMouseLeave={onMouseLeave}
249
- ,
335
+ },
336
+ "data-path": path.join(","),
250
337
  children: [fgColor && /*#__PURE__*/_jsx("div", {
251
338
  style: {
252
339
  position: "absolute",
@@ -279,7 +366,9 @@ const Grid = props => {
279
366
  onClose: onClose,
280
367
  onDelete: onDelete,
281
368
  customProps: customProps
282
- }) : null, /*#__PURE__*/_jsx("div", {
369
+ }) : null, /*#__PURE__*/_jsx(GridContainer, {
370
+ item: true,
371
+ xs: 12,
283
372
  className: "grid-c-wrpr",
284
373
  style: {
285
374
  display: "flex",
@@ -290,11 +379,18 @@ const Grid = props => {
290
379
  alignItems: vertical || "start",
291
380
  justifyContent: horizantal || "start",
292
381
  flexDirection: flexDirection || "row",
293
- width: "100%",
294
- height: resizing ? `${size?.height}px` : elHeight ? `${elHeight}px` : "fit-content"
382
+ width: "100%"
383
+ // height cause overlap issues TBD
384
+ // height: resizing
385
+ // ? `${size?.height}px`
386
+ // : elHeight
387
+ // ? `${elHeight}px`
388
+ // : "fit-content",
295
389
  },
390
+
391
+ "data-path": path.join(","),
296
392
  children: children
297
- })]
393
+ }), /*#__PURE__*/_jsx(NewLineButtons, {})]
298
394
  });
299
395
  };
300
396
  export default Grid;