@flozy/editor 11.0.3 → 11.0.5

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 (146) hide show
  1. package/dist/Editor/ChatEditor.js +17 -16
  2. package/dist/Editor/CommonEditor.js +129 -16
  3. package/dist/Editor/DialogWrapper.js +31 -25
  4. package/dist/Editor/Editor.css +36 -8
  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 +28 -22
  8. package/dist/Editor/Elements/Accordion/AccordionButton.js +12 -3
  9. package/dist/Editor/Elements/AppHeader/AppHeader.js +3 -3
  10. package/dist/Editor/Elements/Attachments/AttachmentStyles.js +16 -0
  11. package/dist/Editor/Elements/Attachments/Attachments.js +153 -11
  12. package/dist/Editor/Elements/Attachments/AttachmentsButton.js +8 -3
  13. package/dist/Editor/Elements/Button/EditorButton.js +23 -7
  14. package/dist/Editor/Elements/Color Picker/ColorButtons.js +61 -14
  15. package/dist/Editor/Elements/Color Picker/ColorPicker.css +25 -1
  16. package/dist/Editor/Elements/Color Picker/ColorPicker.js +10 -7
  17. package/dist/Editor/Elements/Color Picker/Styles.js +15 -13
  18. package/dist/Editor/Elements/Embed/Embed.js +36 -43
  19. package/dist/Editor/Elements/Embed/Image.js +236 -23
  20. package/dist/Editor/Elements/Embed/Video.js +245 -15
  21. package/dist/Editor/Elements/Form/Form.js +16 -10
  22. package/dist/Editor/Elements/Form/FormField.js +1 -1
  23. package/dist/Editor/Elements/Form/Workflow/Styles.js +24 -22
  24. package/dist/Editor/Elements/Form/Workflow/constant.js +25 -1
  25. package/dist/Editor/Elements/FreeGrid/FreeGrid.js +31 -74
  26. package/dist/Editor/Elements/FreeGrid/FreeGridBox.js +9 -5
  27. package/dist/Editor/Elements/FreeGrid/FreeGridItem.js +3 -1
  28. package/dist/Editor/Elements/FreeGrid/Options/More.js +7 -7
  29. package/dist/Editor/Elements/FreeGrid/helper.js +194 -0
  30. package/dist/Editor/Elements/FreeGrid/styles.js +15 -0
  31. package/dist/Editor/Elements/Grid/GridItem.js +1 -1
  32. package/dist/Editor/Elements/PageSettings/PageSettingsButton.js +2 -1
  33. package/dist/Editor/Elements/Signature/SignatureOptions/TypeSignature.js +3 -2
  34. package/dist/Editor/Elements/Signature/SignaturePopup.js +24 -6
  35. package/dist/Editor/Elements/SimpleText/style.js +2 -2
  36. package/dist/Editor/Elements/Table/Table.js +3 -3
  37. package/dist/Editor/Elements/Title/title.js +6 -6
  38. package/dist/Editor/Elements/TopBanner/TopBanner.js +4 -2
  39. package/dist/Editor/Elements/TopBanner/TopBannerButton.js +5 -3
  40. package/dist/Editor/Elements/Variables/VariableButton.js +10 -1
  41. package/dist/Editor/MiniEditor.js +2 -1
  42. package/dist/Editor/Styles/EditorStyles.js +19 -4
  43. package/dist/Editor/Toolbar/FormatTools/Dropdown.js +27 -3
  44. package/dist/Editor/Toolbar/FormatTools/FontFamilyAutocomplete.js +4 -3
  45. package/dist/Editor/Toolbar/FormatTools/MarkButton.js +2 -2
  46. package/dist/Editor/Toolbar/FormatTools/TextSize.js +33 -29
  47. package/dist/Editor/Toolbar/Mini/MiniToolbar.js +2 -1
  48. package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/MiniColorPicker.js +4 -2
  49. package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/SelectFontSize.js +25 -23
  50. package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/SelectList.js +25 -7
  51. package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/SelectTypography.js +167 -42
  52. package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/index.js +24 -8
  53. package/dist/Editor/Toolbar/PopupTool/PopperHeader.js +2 -1
  54. package/dist/Editor/Toolbar/PopupTool/PopupToolStyle.js +70 -10
  55. package/dist/Editor/Toolbar/PopupTool/TextFormat.js +73 -14
  56. package/dist/Editor/Toolbar/PopupTool/ThemeTextFormat.js +439 -0
  57. package/dist/Editor/Toolbar/PopupTool/index.js +4 -3
  58. package/dist/Editor/Toolbar/toolbarGroups.js +56 -10
  59. package/dist/Editor/assets/svg/BackIcon.js +18 -0
  60. package/dist/Editor/assets/svg/ThemeIcons.js +293 -0
  61. package/dist/Editor/common/ColorPickerButton.js +38 -16
  62. package/dist/Editor/common/CustomColorPicker/index.js +130 -0
  63. package/dist/Editor/common/CustomColorPicker/style.js +53 -0
  64. package/dist/Editor/common/CustomDialog2/index.js +94 -0
  65. package/dist/Editor/common/CustomDialog2/style.js +67 -0
  66. package/dist/Editor/common/CustomSelect.js +43 -0
  67. package/dist/Editor/common/DnD/DragHandleButton.js +1 -1
  68. package/dist/Editor/common/FontLoader/FontLoader.js +4 -0
  69. package/dist/Editor/common/Icon.js +28 -0
  70. package/dist/Editor/common/ImageSelector/ImageSelector.js +45 -7
  71. package/dist/Editor/common/ImageSelector/Options/Upload.js +26 -11
  72. package/dist/Editor/common/ImageSelector/Styles.js +3 -9
  73. package/dist/Editor/common/LinkSettings/NavComponents.js +6 -2
  74. package/dist/Editor/common/MentionsPopup/index.js +9 -1
  75. package/dist/Editor/common/RnD/ElementSettings/OtherSettings/Settings.js +2 -1
  76. package/dist/Editor/common/RnD/ElementSettings/Settings/AppHeaderSettings.js +3 -2
  77. package/dist/Editor/common/RnD/ElementSettings/Settings/BoxSettings.js +3 -2
  78. package/dist/Editor/common/RnD/ElementSettings/Settings/ButtonSettings.js +3 -2
  79. package/dist/Editor/common/RnD/ElementSettings/Settings/CodeSettings.js +3 -2
  80. package/dist/Editor/common/RnD/ElementSettings/Settings/FormSettings.js +4 -2
  81. package/dist/Editor/common/RnD/ElementSettings/Settings/ImageSettings.js +20 -7
  82. package/dist/Editor/common/RnD/ElementSettings/Settings/TableSettings.js +3 -2
  83. package/dist/Editor/common/RnD/ElementSettings/Settings/TextSettings.js +9 -1
  84. package/dist/Editor/common/RnD/ElementSettings/Settings/VideoSettings.js +20 -7
  85. package/dist/Editor/common/RnD/SwitchViewport/SwitchViewport.js +11 -2
  86. package/dist/Editor/common/RnD/Theme/MainThemeProvider.js +17 -0
  87. package/dist/Editor/common/RnD/Theme/ViewportStimulator.js +6 -3
  88. package/dist/Editor/common/RnD/Utils/gridDropItem.js +28 -11
  89. package/dist/Editor/common/RnD/Utils/index.js +3 -1
  90. package/dist/Editor/common/RnD/VirtualElement/VirtualTextElement.js +52 -63
  91. package/dist/Editor/common/RnD/VirtualElement/helper.js +320 -130
  92. package/dist/Editor/common/RnD/VirtualElement/styles.js +22 -0
  93. package/dist/Editor/common/RnD/index.js +61 -14
  94. package/dist/Editor/common/Shorthands/elements.js +62 -4
  95. package/dist/Editor/common/StyleBuilder/buttonStyle.js +4 -2
  96. package/dist/Editor/common/StyleBuilder/embedVideoStyle.js +4 -0
  97. package/dist/Editor/common/StyleBuilder/fieldTypes/backgroundImage.js +15 -2
  98. package/dist/Editor/common/StyleBuilder/fieldTypes/bannerSpacing.js +12 -2
  99. package/dist/Editor/common/StyleBuilder/fieldTypes/borderRadius.js +15 -7
  100. package/dist/Editor/common/StyleBuilder/fieldTypes/card.js +16 -8
  101. package/dist/Editor/common/StyleBuilder/fieldTypes/color.js +36 -10
  102. package/dist/Editor/common/StyleBuilder/fieldTypes/embedUpload.js +115 -0
  103. package/dist/Editor/common/StyleBuilder/fieldTypes/fontSize.js +16 -7
  104. package/dist/Editor/common/StyleBuilder/fieldTypes/index.js +3 -1
  105. package/dist/Editor/common/StyleBuilder/fieldTypes/textOptions.js +15 -7
  106. package/dist/Editor/common/StyleBuilder/index.js +8 -4
  107. package/dist/Editor/common/Uploader.js +125 -17
  108. package/dist/Editor/common/UploaderWithProgress.js +183 -0
  109. package/dist/Editor/common/iconslist.js +21 -0
  110. package/dist/Editor/commonStyle.js +67 -18
  111. package/dist/Editor/helper/index.js +10 -2
  112. package/dist/Editor/helper/textIndeces.js +58 -0
  113. package/dist/Editor/helper/theme.js +203 -2
  114. package/dist/Editor/hooks/useEditorTheme.js +153 -0
  115. package/dist/Editor/hooks/useMouseMove.js +9 -3
  116. package/dist/Editor/hooks/useThemeValues.js +63 -0
  117. package/dist/Editor/plugins/withEmbeds.js +12 -1
  118. package/dist/Editor/plugins/withHTML.js +3 -1
  119. package/dist/Editor/plugins/withTable.js +1 -1
  120. package/dist/Editor/service/fileupload.js +70 -0
  121. package/dist/Editor/theme/ThemeList.js +50 -173
  122. package/dist/Editor/theme/index.js +149 -0
  123. package/dist/Editor/themeSettings/ActiveTheme.js +82 -0
  124. package/dist/Editor/themeSettings/buttons/index.js +300 -0
  125. package/dist/Editor/themeSettings/buttons/style.js +23 -0
  126. package/dist/Editor/themeSettings/colorTheme/index.js +310 -0
  127. package/dist/Editor/themeSettings/colorTheme/style.js +81 -0
  128. package/dist/Editor/themeSettings/fonts/PreviewElement.js +121 -0
  129. package/dist/Editor/themeSettings/fonts/index.js +240 -0
  130. package/dist/Editor/themeSettings/fonts/style.js +62 -0
  131. package/dist/Editor/themeSettings/icons.js +60 -0
  132. package/dist/Editor/themeSettings/index.js +380 -0
  133. package/dist/Editor/themeSettings/style.js +299 -0
  134. package/dist/Editor/themeSettingsAI/icons.js +96 -0
  135. package/dist/Editor/themeSettingsAI/index.js +355 -0
  136. package/dist/Editor/themeSettingsAI/saveTheme.js +202 -0
  137. package/dist/Editor/themeSettingsAI/style.js +332 -0
  138. package/dist/Editor/utils/SlateUtilityFunctions.js +191 -40
  139. package/dist/Editor/utils/accordion.js +67 -39
  140. package/dist/Editor/utils/button.js +1 -17
  141. package/dist/Editor/utils/draftToSlate.js +3 -2
  142. package/dist/Editor/utils/events.js +94 -89
  143. package/dist/Editor/utils/font.js +40 -37
  144. package/dist/Editor/utils/helper.js +98 -22
  145. package/package.json +4 -4
  146. package/dist/Editor/Elements/DataView/Layouts/DataTypes/Components/MultiSelect.js +0 -454
@@ -1,13 +1,14 @@
1
1
  import React, { useState } from "react";
2
2
  import { ReactEditor } from "slate-react";
3
- import ColorPickerTool from "react-gcolor-picker";
4
- import { IconButton, Tooltip, Box, Popover } from "@mui/material";
3
+ import { IconButton, Tooltip, Box, Popover, useTheme } from "@mui/material";
5
4
  import { addMarkData, activeMark } from "../../utils/SlateUtilityFunctions";
6
5
  import ColorButtons from "./ColorButtons";
7
6
  import ColorPickerStyles from "./Styles";
8
7
  import colorWheel from "./colorWheel.png";
9
8
  import "./ColorPicker.css";
10
9
  import { useEditorContext } from "../../hooks/useMouseMove";
10
+ import CustomColorPicker from "../../common/CustomColorPicker";
11
+ import { getSelectedElementColor } from "../../utils/helper";
11
12
  import { jsx as _jsx } from "react/jsx-runtime";
12
13
  import { Fragment as _Fragment } from "react/jsx-runtime";
13
14
  import { jsxs as _jsxs } from "react/jsx-runtime";
@@ -25,7 +26,8 @@ const ColorPicker = props => {
25
26
  classes,
26
27
  forMiniTool,
27
28
  openColorTool,
28
- closeColorTool
29
+ closeColorTool,
30
+ type
29
31
  } = props;
30
32
  const {
31
33
  theme
@@ -34,6 +36,7 @@ const ColorPicker = props => {
34
36
  const [anchorEl, setAnchorEl] = useState(null);
35
37
  const open = Boolean(anchorEl);
36
38
  const pickerStyles = ColorPickerStyles(theme);
39
+ const muiTheme = useTheme();
37
40
  const onOpen = e => {
38
41
  e.preventDefault();
39
42
  setAnchorEl(e.currentTarget);
@@ -58,7 +61,7 @@ const ColorPicker = props => {
58
61
  setAnchorEl(null);
59
62
  setSelection(null);
60
63
  };
61
- const activeColor = activeMark(editor, format) || DEFAULT_COLOR[format];
64
+ const activeColor = type === "textColor" ? getSelectedElementColor(editor, format, muiTheme) : activeMark(editor, format) || DEFAULT_COLOR[format];
62
65
  return /*#__PURE__*/_jsxs(_Fragment, {
63
66
  children: [forMiniTool ? null : /*#__PURE__*/_jsx(Tooltip, {
64
67
  title: title,
@@ -96,10 +99,10 @@ const ColorPicker = props => {
96
99
  horizontal: "top"
97
100
  },
98
101
  sx: classes.colorPickerPopup,
99
- children: /*#__PURE__*/_jsx(ColorPickerTool, {
102
+ children: /*#__PURE__*/_jsx(CustomColorPicker, {
100
103
  gradient: true,
101
- value: activeColor,
102
- onChange: handleFormSubmit
104
+ onChange: handleFormSubmit,
105
+ color: activeColor
103
106
  })
104
107
  })]
105
108
  });
@@ -20,24 +20,26 @@ const ColorPickerStyles = theme => ({
20
20
  background: `${theme?.palette?.editor?.miniToolBarBackground}`,
21
21
  border: `1px solid ${theme?.palette?.editor?.miniToolBarBorder} !important`,
22
22
  borderRadius: "7px !important",
23
- padding: "0px 5px",
24
- '@media only screen and (max-width: 600px)': {
23
+ padding: "0px 10px",
24
+ "@media only screen and (max-width: 600px)": {
25
25
  marginTop: "-40px"
26
26
  }
27
27
  }
28
28
  },
29
29
  colorButtonSingle: {
30
+ border: "1.5px solid #DCE4EC !important",
30
31
  "&.active": {
31
- "&:before": {
32
- content: '" "',
33
- position: "absolute",
34
- top: "-4px",
35
- left: "-4px",
36
- width: "calc(100% + 8px)",
37
- height: "calc(100% + 8px)",
38
- border: "2px solid #2563EB",
39
- borderRadius: "50%"
40
- }
32
+ // "&:before": {
33
+ // content: '" "',
34
+ // position: "absolute",
35
+ // top: "-4px",
36
+ // left: "-4px",
37
+ // width: "calc(100% + 8px)",
38
+ // height: "calc(100% + 8px)",
39
+ // border: "2px solid #2563EB",
40
+ // borderRadius: "50%",
41
+ // },
42
+ outline: "2px solid #2563EB"
41
43
  }
42
44
  },
43
45
  colorButtonsInner: {
@@ -59,7 +61,7 @@ const ColorPickerStyles = theme => ({
59
61
  width: "24px",
60
62
  height: "24px",
61
63
  margin: "0px 4px",
62
- border: "unset"
64
+ border: "1.5px solid #DCE4EC"
63
65
  }
64
66
  },
65
67
  colorPickerIcon: {
@@ -1,5 +1,4 @@
1
- import React, { useState } from "react";
2
- import { Transforms } from "slate";
1
+ import React, { useRef, useState } from "react";
3
2
  import { ReactEditor } from "slate-react";
4
3
  import Icon from "../../common/Icon";
5
4
  import { isBlockActive } from "../../utils/SlateUtilityFunctions";
@@ -22,55 +21,45 @@ const Embed = ({
22
21
  customProps,
23
22
  icoBtnType
24
23
  }) => {
25
- const [open, setOpen] = useState(false);
26
- const [formData, setFormData] = useState({
27
- url: "",
28
- alt: "",
29
- images: []
30
- });
24
+ const [openSetttings, setUploadPopupOpen] = useState(false);
31
25
  const [selection, setSelection] = useState();
32
26
  const {
33
27
  translation
34
28
  } = customProps;
35
- const handleFormSubmit = fd => {
36
- if (fd?.url || fd?.images.length > 0) {
37
- selection && Transforms.select(editor, selection);
38
- selection && ReactEditor.focus(editor);
39
- insertEmbed(editor, {
40
- ...fd
41
- }, format);
42
- setFormData({
43
- url: "",
44
- alt: ""
45
- });
46
- }
47
- handleClose();
48
- };
29
+ const [uploadStatus, setUploadStatus] = useState({
30
+ isUploading: false,
31
+ uploadPercentage: 0,
32
+ fileName: null,
33
+ fileSize: null
34
+ });
35
+ const xhrRef = useRef(null);
49
36
  const onToggle = e => {
50
37
  e.preventDefault();
51
38
  setSelection(editor.selection);
52
39
  selection && ReactEditor.focus(editor);
53
- setOpen(true);
40
+ setUploadPopupOpen(true);
54
41
  };
55
42
  const handleClose = () => {
56
- setOpen(false);
43
+ setUploadPopupOpen(false);
57
44
  };
58
- const onSelectImage = img => {
59
- const fd = {
60
- ...formData,
61
- url: img
62
- };
63
- setFormData(fd);
64
- let extProps = {};
65
- if (format === "video") {
66
- extProps = {
67
- aspectRatio: "16 / 9"
68
- };
45
+ const onSelectImage = async img => {
46
+ if (img?.isUpload === false) {
47
+ insertEmbed(editor, {
48
+ url: img.embedURL,
49
+ isUploading: false,
50
+ isUpload: false
51
+ }, format);
52
+ } else {
53
+ insertEmbed(editor, {
54
+ url: "",
55
+ file: img.file,
56
+ isUploading: true,
57
+ isUpload: true,
58
+ fileName: img.file?.name,
59
+ fileSize: img.file?.size,
60
+ mimeType: img.file?.type
61
+ }, format);
69
62
  }
70
- handleFormSubmit({
71
- ...fd,
72
- ...extProps
73
- });
74
63
  };
75
64
  return /*#__PURE__*/_jsxs(_Fragment, {
76
65
  children: [/*#__PURE__*/_jsx(ToolbarIcon, {
@@ -82,13 +71,17 @@ const Embed = ({
82
71
  }),
83
72
  icoBtnType: icoBtnType
84
73
  }), /*#__PURE__*/_jsx(ImageSelector, {
85
- open: open,
74
+ open: openSetttings,
86
75
  onClose: handleClose,
87
76
  customProps: customProps,
88
77
  onSelectImage: onSelectImage,
89
- title: EMBED_LABEL[lbT || format]
78
+ title: EMBED_LABEL[lbT || format],
79
+ setUploadStatus: setUploadStatus,
80
+ uploadStatus: uploadStatus,
81
+ xhrRef: xhrRef,
82
+ setUploadPopupOpen: setUploadPopupOpen,
83
+ fromEmbed: true
90
84
  })]
91
85
  });
92
86
  };
93
- export default Embed;
94
- // export default styled(commonStyle)(Embed);
87
+ export default Embed;
@@ -1,10 +1,17 @@
1
- import React, { useEffect, useState } from "react";
1
+ import React, { useEffect, useRef, useState } from "react";
2
2
  import { useSlateStatic, ReactEditor } from "slate-react";
3
3
  import { Node, Transforms, Editor } from "slate";
4
4
  import AspectRatioIcon from "@mui/icons-material/AspectRatio";
5
+ import IconButton from "@mui/material/IconButton";
6
+ import Tooltip from "@mui/material/Tooltip";
7
+ import Box from "@mui/material/Box";
8
+ import useTheme from "@mui/material/styles/useTheme";
9
+ import useMediaQuery from "@mui/material/useMediaQuery";
10
+ import Grid from "@mui/material/Grid";
11
+ import CircularProgress from "@mui/material/CircularProgress";
12
+ import HighlightOffRoundedIcon from "@mui/icons-material/HighlightOffRounded";
5
13
  import useResize from "../../utils/customHooks/useResize";
6
14
  import EmbedPopup from "./EmbedPopup";
7
- import { IconButton, Tooltip, Box, useTheme, useMediaQuery } from "@mui/material";
8
15
  import { LinkIcon } from "../../common/iconslist";
9
16
  import { useEditorContext } from "../../hooks/useMouseMove";
10
17
  import { getTRBLBreakPoints, getBreakPointsValue, groupByBreakpoint } from "../../helper/theme";
@@ -16,8 +23,11 @@ import { handleLinkType } from "../../utils/helper";
16
23
  import { wrapThemeBreakpoints } from "../FreeGrid/breakpointConstants";
17
24
  import useCommonStyle from "../../commonStyle";
18
25
  import SettingsIcon from "../../assets/svg/SettingsIcon";
26
+ import ImageSelector from "../../common/ImageSelector/ImageSelector";
27
+ import { buildUpdateData } from "../../service/fileupload";
19
28
  import { jsx as _jsx } from "react/jsx-runtime";
20
29
  import { jsxs as _jsxs } from "react/jsx-runtime";
30
+ import { Fragment as _Fragment } from "react/jsx-runtime";
21
31
  const ToolBar = ({
22
32
  isEmpty,
23
33
  onSettings,
@@ -67,27 +77,105 @@ const ImageContent = props => {
67
77
  objectFit,
68
78
  webAddress,
69
79
  readOnly,
70
- setOpenSettings,
71
80
  handleImageClick,
72
81
  onTouchEnd,
73
82
  path,
74
83
  theme,
75
84
  classes,
76
- translation
85
+ translation,
86
+ setUploadPopupOpen,
87
+ uploadStatus,
88
+ setUploadStatus,
89
+ uniqueId,
90
+ uploadTerminator,
91
+ editor
77
92
  } = props;
78
- return !url ? !readOnly ? /*#__PURE__*/_jsxs(Box, {
93
+ const cancelUpload = e => {
94
+ e.stopPropagation();
95
+ uploadTerminator(uniqueId, setUploadStatus);
96
+ Transforms.setNodes(editor, {
97
+ isUpload: false,
98
+ isUploading: false,
99
+ file: null
100
+ }, {
101
+ at: path
102
+ });
103
+ };
104
+ return !url ? !readOnly ? /*#__PURE__*/_jsx(Box, {
79
105
  component: "button",
80
106
  className: "element-empty-btn",
81
107
  contentEditable: false,
82
108
  onClick: () => {
83
- setOpenSettings(true);
109
+ if (!uploadStatus?.isUploading) setUploadPopupOpen(true);
84
110
  },
85
111
  sx: {
86
112
  ...classes.emptyThumbBtn
87
113
  },
88
- children: [/*#__PURE__*/_jsx(Icon, {
89
- icon: "image"
90
- }), translation("Add Image")]
114
+ children: uploadStatus?.isUploading ? /*#__PURE__*/_jsxs(Grid, {
115
+ container: true,
116
+ direction: "row",
117
+ sx: {
118
+ justifyContent: "space-between",
119
+ alignItems: "center"
120
+ },
121
+ children: [/*#__PURE__*/_jsx(Grid, {
122
+ children: /*#__PURE__*/_jsxs(Grid, {
123
+ container: true,
124
+ direction: "row",
125
+ sx: {
126
+ justifyContent: "space-between",
127
+ alignItems: "center",
128
+ gap: 1
129
+ },
130
+ children: [/*#__PURE__*/_jsx(Grid, {
131
+ children: /*#__PURE__*/_jsx(Icon, {
132
+ icon: "image"
133
+ })
134
+ }), /*#__PURE__*/_jsx(Grid, {
135
+ children: /*#__PURE__*/_jsxs(Box, {
136
+ display: "flex",
137
+ flexDirection: "column",
138
+ alignItems: "flex-start",
139
+ justifyContent: "space-between",
140
+ children: [/*#__PURE__*/_jsx(Box, {
141
+ className: "truncateText",
142
+ children: uploadStatus?.fileName
143
+ }), /*#__PURE__*/_jsxs(Box, {
144
+ display: "flex",
145
+ alignItems: "center",
146
+ gap: 1,
147
+ marginTop: 1,
148
+ children: [/*#__PURE__*/_jsx(Box, {
149
+ children: uploadStatus?.fileSize
150
+ }), /*#__PURE__*/_jsx(CircularProgress, {
151
+ variant: "determinate",
152
+ value: uploadStatus?.uploadPercentage ?? 0,
153
+ className: "circularProgress-cls",
154
+ size: 15,
155
+ thickness: 8
156
+ }), /*#__PURE__*/_jsx(Box, {
157
+ children: `${uploadStatus?.uploadPercentage?.toFixed(0) ?? 0}%`
158
+ })]
159
+ })]
160
+ })
161
+ })]
162
+ })
163
+ }), /*#__PURE__*/_jsx(Grid, {
164
+ children: /*#__PURE__*/_jsx(HighlightOffRoundedIcon, {
165
+ className: "uploadCancel",
166
+ sx: {
167
+ cursor: "pointer"
168
+ },
169
+ onClick: e => {
170
+ cancelUpload(e);
171
+ }
172
+ })
173
+ })]
174
+ }) : /*#__PURE__*/_jsxs(_Fragment, {
175
+ children: [/*#__PURE__*/_jsx(Icon, {
176
+ icon: "image"
177
+ }), translation("Add Image")]
178
+ })
91
179
  }) : /*#__PURE__*/_jsxs(Box, {
92
180
  sx: {
93
181
  color: "#64748B !important",
@@ -143,11 +231,20 @@ const Image = props => {
143
231
  webAddress,
144
232
  isNewTab,
145
233
  linkType,
146
- framePos
234
+ framePos,
235
+ file,
236
+ isUploading,
237
+ uniqueId,
238
+ fromFreeGrid
147
239
  } = element;
148
240
  const {
149
241
  readOnly,
150
- translation
242
+ translation,
243
+ services,
244
+ uploadFile,
245
+ resumeUploadState,
246
+ uploadTerminator,
247
+ isUploadInProgress = () => false
151
248
  } = customProps;
152
249
  const {
153
250
  vertical,
@@ -162,6 +259,12 @@ const Image = props => {
162
259
  const path = ReactEditor.findPath(editor, element);
163
260
  const [openNav, setOpenNav] = useState(false);
164
261
  const isEmpty = !url && !readOnly;
262
+ const [openUploadPopup, setUploadPopupOpen] = useState(false);
263
+ const [uploadStatus, setUploadStatus] = useState({
264
+ isUploading: false,
265
+ uploadPercentage: 0
266
+ });
267
+ const xhrRef = useRef(null);
165
268
  const getSize = () => {
166
269
  if (element?.size === undefined) {
167
270
  return {
@@ -217,32 +320,120 @@ const Image = props => {
217
320
  console.log(err);
218
321
  }
219
322
  };
323
+ const noUploadTracks = () => {
324
+ setUploadStatus({
325
+ isUploading: false,
326
+ uploadPercentage: 0,
327
+ fileName: null,
328
+ fileSize: null
329
+ });
330
+ Transforms.setNodes(editor, {
331
+ isUploading: false
332
+ }, {
333
+ at: path
334
+ });
335
+ };
336
+ useEffect(() => {
337
+ const isUploading = isUploadInProgress(uniqueId);
338
+ if (fromFreeGrid) {
339
+ if (isUploading) {
340
+ resumeUploadState(uniqueId, setUploadStatus, onSave, noUploadTracks, "image");
341
+ } else {
342
+ if (!isUploading) {
343
+ handleImageUpload({
344
+ file: file
345
+ });
346
+ }
347
+ }
348
+ }
349
+ }, [uniqueId, isUploading, file]);
220
350
  useEffect(() => {
221
351
  if (editor && ele && ele[1] !== undefined) {
222
352
  const dom = ReactEditor.toDOMNode(editor, element);
223
353
  setParentDOM(dom);
224
354
  onLoad(getSize());
225
355
  }
356
+ if (uniqueId && isUploading) {
357
+ resumeUploadState(uniqueId, setUploadStatus, onSave, noUploadTracks, "image");
358
+ } else if (file && isUploading) {
359
+ handleImageUpload({
360
+ file: file
361
+ });
362
+ }
226
363
  }, []);
227
364
  const onSettings = () => {
228
365
  setOpenSettings(true);
229
366
  };
230
367
  const onSave = data => {
231
368
  try {
232
- const updateData = {
233
- ...data
234
- };
235
- delete updateData.children;
236
- Transforms.setNodes(editor, {
237
- ...updateData
238
- }, {
239
- at: path
240
- });
241
- onClose();
369
+ if (!data?.url?.file) {
370
+ const updateData = buildUpdateData(data, url);
371
+ delete updateData.children;
372
+ Transforms.select(editor, path);
373
+ ReactEditor.focus(editor);
374
+ Transforms.setNodes(editor, {
375
+ ...updateData,
376
+ isUpload: false,
377
+ isUploading: false,
378
+ file: null
379
+ }, {
380
+ at: path
381
+ });
382
+ onClose();
383
+ } else {
384
+ handleImageUpload({
385
+ file: data?.url?.file,
386
+ isUpload: true,
387
+ setUploadStatus,
388
+ services: services
389
+ });
390
+ onClose();
391
+ onSave("");
392
+ }
242
393
  } catch (err) {
243
394
  console.log(err);
244
395
  }
245
396
  };
397
+ const handleImageUpload = async uploadProp => {
398
+ try {
399
+ if (uploadProp?.isUpload === false) {
400
+ onSave(uploadProp?.embedURL);
401
+ } else {
402
+ const isAlreadyUploading = isUploadInProgress(uniqueId);
403
+ let result = {};
404
+ if (uploadProp?.file && !isAlreadyUploading) {
405
+ result = await services("uploadFile", uploadProp?.file);
406
+ }
407
+ const uploadUrl = result?.data?.[0];
408
+ if (uploadUrl) {
409
+ const id = !uniqueId ? crypto?.randomUUID() : uniqueId;
410
+ const fileEntry = {
411
+ ...uploadProp,
412
+ xhrRef,
413
+ presidnedURL: uploadUrl,
414
+ status: "uploading"
415
+ };
416
+ uploadFile(id, fileEntry, setUploadStatus, onSave, "image");
417
+ if (!fromFreeGrid) {
418
+ Transforms.setNodes(editor, {
419
+ uniqueId: id,
420
+ isUploading: true
421
+ }, {
422
+ at: path
423
+ });
424
+ } else {
425
+ Transforms.setNodes(editor, {
426
+ isUploading: true
427
+ }, {
428
+ at: path
429
+ });
430
+ }
431
+ }
432
+ }
433
+ } catch (error) {
434
+ console.log(error);
435
+ }
436
+ };
246
437
  const onClose = () => {
247
438
  setOpenSettings(false);
248
439
  };
@@ -324,7 +515,16 @@ const Image = props => {
324
515
  path: path,
325
516
  theme: theme,
326
517
  classes: classes,
327
- translation: translation
518
+ translation: translation,
519
+ setUploadPopupOpen: setUploadPopupOpen,
520
+ openUploadPopup: openUploadPopup,
521
+ uploadStatus: uploadStatus,
522
+ setUploadStatus: setUploadStatus,
523
+ xhrRef: xhrRef,
524
+ onClose: onClose,
525
+ uniqueId: uniqueId,
526
+ uploadTerminator: uploadTerminator,
527
+ editor: editor
328
528
  }), url && frames[frame] ? /*#__PURE__*/_jsx(Box, {
329
529
  component: "div",
330
530
  className: "image-frame",
@@ -372,7 +572,20 @@ const Image = props => {
372
572
  navValue: webAddress,
373
573
  openInNewTab: isNewTab,
374
574
  customProps: customProps
375
- }) : null]
575
+ }) : null, openUploadPopup && /*#__PURE__*/_jsx(ImageSelector, {
576
+ open: true,
577
+ title: "Image",
578
+ onClose: () => setUploadPopupOpen(false),
579
+ customProps: customProps,
580
+ onSelectImage: img => {
581
+ handleImageUpload(img);
582
+ setUploadPopupOpen(false);
583
+ },
584
+ openUploadPopup: openUploadPopup,
585
+ setUploadPopupOpen: setUploadPopupOpen,
586
+ setUploadStatus: setUploadStatus,
587
+ xhrRef: xhrRef
588
+ })]
376
589
  });
377
590
  };
378
591
  export default Image;