@flozy/editor 11.0.7 → 11.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (159) hide show
  1. package/dist/Editor/ChatEditor.js +17 -16
  2. package/dist/Editor/CommonEditor.js +141 -28
  3. package/dist/Editor/DialogWrapper.js +31 -25
  4. package/dist/Editor/Editor.css +39 -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 +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/DataView/Layouts/DataTypes/Components/Select.js +134 -55
  19. package/dist/Editor/Elements/DataView/Layouts/DataTypes/Components/SelectV1.js +7 -8
  20. package/dist/Editor/Elements/DataView/Layouts/DataTypes/PersonType.js +8 -3
  21. package/dist/Editor/Elements/DataView/Layouts/Options/EditProperty.js +1 -1
  22. package/dist/Editor/Elements/DataView/Layouts/TableStyles.js +1 -1
  23. package/dist/Editor/Elements/Embed/Embed.css +5 -0
  24. package/dist/Editor/Elements/Embed/Embed.js +36 -43
  25. package/dist/Editor/Elements/Embed/Image.js +242 -23
  26. package/dist/Editor/Elements/Embed/Video.js +277 -32
  27. package/dist/Editor/Elements/Form/Form.js +35 -10
  28. package/dist/Editor/Elements/Form/FormField.js +1 -1
  29. package/dist/Editor/Elements/Form/Workflow/Styles.js +24 -22
  30. package/dist/Editor/Elements/Form/Workflow/constant.js +25 -1
  31. package/dist/Editor/Elements/FreeGrid/FreeGrid.js +31 -74
  32. package/dist/Editor/Elements/FreeGrid/FreeGridBox.js +9 -5
  33. package/dist/Editor/Elements/FreeGrid/FreeGridItem.js +3 -1
  34. package/dist/Editor/Elements/FreeGrid/Options/More.js +7 -7
  35. package/dist/Editor/Elements/FreeGrid/helper.js +194 -0
  36. package/dist/Editor/Elements/FreeGrid/styles.js +15 -0
  37. package/dist/Editor/Elements/Grid/GridItem.js +1 -1
  38. package/dist/Editor/Elements/PageSettings/PageSettingsButton.js +2 -1
  39. package/dist/Editor/Elements/Signature/SignaturePopup.js +13 -6
  40. package/dist/Editor/Elements/SimpleText/index.js +4 -1
  41. package/dist/Editor/Elements/SimpleText/style.js +2 -2
  42. package/dist/Editor/Elements/Table/Table.js +5 -4
  43. package/dist/Editor/Elements/Table/TableCell.js +10 -3
  44. package/dist/Editor/Elements/Title/title.js +10 -11
  45. package/dist/Editor/Elements/TopBanner/TopBanner.js +4 -2
  46. package/dist/Editor/Elements/TopBanner/TopBannerButton.js +5 -3
  47. package/dist/Editor/Elements/Variables/VariableButton.js +10 -1
  48. package/dist/Editor/MiniEditor.js +2 -1
  49. package/dist/Editor/Styles/EditorStyles.js +20 -5
  50. package/dist/Editor/Toolbar/FormatTools/Dropdown.js +27 -3
  51. package/dist/Editor/Toolbar/FormatTools/FontFamilyAutocomplete.js +4 -3
  52. package/dist/Editor/Toolbar/FormatTools/MarkButton.js +2 -2
  53. package/dist/Editor/Toolbar/FormatTools/TextSize.js +33 -29
  54. package/dist/Editor/Toolbar/Mini/MiniToolbar.js +2 -1
  55. package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/MiniColorPicker.js +4 -2
  56. package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/SelectFontSize.js +25 -23
  57. package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/SelectList.js +25 -7
  58. package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/SelectTypography.js +167 -42
  59. package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/index.js +24 -8
  60. package/dist/Editor/Toolbar/PopupTool/PopperHeader.js +2 -1
  61. package/dist/Editor/Toolbar/PopupTool/PopupToolStyle.js +70 -10
  62. package/dist/Editor/Toolbar/PopupTool/TextFormat.js +73 -14
  63. package/dist/Editor/Toolbar/PopupTool/ThemeTextFormat.js +439 -0
  64. package/dist/Editor/Toolbar/PopupTool/index.js +7 -4
  65. package/dist/Editor/Toolbar/toolbarGroups.js +56 -10
  66. package/dist/Editor/assets/svg/BackIcon.js +18 -0
  67. package/dist/Editor/assets/svg/ThemeIcons.js +293 -0
  68. package/dist/Editor/common/ColorPickerButton.js +38 -16
  69. package/dist/Editor/common/CustomColorPicker/index.js +130 -0
  70. package/dist/Editor/common/CustomColorPicker/style.js +53 -0
  71. package/dist/Editor/common/CustomDialog2/index.js +94 -0
  72. package/dist/Editor/common/CustomDialog2/style.js +67 -0
  73. package/dist/Editor/common/CustomSelect.js +43 -0
  74. package/dist/Editor/common/DnD/DragHandleButton.js +1 -1
  75. package/dist/Editor/common/FontLoader/FontLoader.js +4 -0
  76. package/dist/Editor/common/Icon.js +28 -0
  77. package/dist/Editor/common/ImageSelector/ImageSelector.js +45 -7
  78. package/dist/Editor/common/ImageSelector/Options/Upload.js +26 -11
  79. package/dist/Editor/common/ImageSelector/Styles.js +3 -9
  80. package/dist/Editor/common/LinkSettings/NavComponents.js +6 -2
  81. package/dist/Editor/common/MentionsPopup/index.js +9 -1
  82. package/dist/Editor/common/RnD/ElementSettings/OtherSettings/Settings.js +2 -1
  83. package/dist/Editor/common/RnD/ElementSettings/Settings/AppHeaderSettings.js +3 -2
  84. package/dist/Editor/common/RnD/ElementSettings/Settings/BoxSettings.js +3 -2
  85. package/dist/Editor/common/RnD/ElementSettings/Settings/ButtonSettings.js +3 -2
  86. package/dist/Editor/common/RnD/ElementSettings/Settings/CodeSettings.js +3 -2
  87. package/dist/Editor/common/RnD/ElementSettings/Settings/FormSettings.js +4 -2
  88. package/dist/Editor/common/RnD/ElementSettings/Settings/ImageSettings.js +20 -7
  89. package/dist/Editor/common/RnD/ElementSettings/Settings/TableSettings.js +3 -2
  90. package/dist/Editor/common/RnD/ElementSettings/Settings/TextSettings.js +9 -1
  91. package/dist/Editor/common/RnD/ElementSettings/Settings/VideoSettings.js +20 -7
  92. package/dist/Editor/common/RnD/GuideLines/styles.js +1 -1
  93. package/dist/Editor/common/RnD/SwitchViewport/SwitchViewport.js +11 -2
  94. package/dist/Editor/common/RnD/Theme/MainThemeProvider.js +17 -0
  95. package/dist/Editor/common/RnD/Theme/ViewportStimulator.js +6 -3
  96. package/dist/Editor/common/RnD/Utils/gridDropItem.js +28 -11
  97. package/dist/Editor/common/RnD/Utils/index.js +3 -1
  98. package/dist/Editor/common/RnD/VirtualElement/VirtualTextElement.js +52 -63
  99. package/dist/Editor/common/RnD/VirtualElement/helper.js +320 -130
  100. package/dist/Editor/common/RnD/VirtualElement/styles.js +22 -0
  101. package/dist/Editor/common/RnD/index.js +61 -14
  102. package/dist/Editor/common/Shorthands/elements.js +62 -4
  103. package/dist/Editor/common/StyleBuilder/buttonStyle.js +4 -2
  104. package/dist/Editor/common/StyleBuilder/embedVideoStyle.js +4 -0
  105. package/dist/Editor/common/StyleBuilder/fieldStyle.js +1 -0
  106. package/dist/Editor/common/StyleBuilder/fieldTypes/backgroundImage.js +15 -2
  107. package/dist/Editor/common/StyleBuilder/fieldTypes/bannerSpacing.js +12 -2
  108. package/dist/Editor/common/StyleBuilder/fieldTypes/borderRadius.js +15 -7
  109. package/dist/Editor/common/StyleBuilder/fieldTypes/card.js +16 -8
  110. package/dist/Editor/common/StyleBuilder/fieldTypes/color.js +36 -10
  111. package/dist/Editor/common/StyleBuilder/fieldTypes/embedUpload.js +115 -0
  112. package/dist/Editor/common/StyleBuilder/fieldTypes/fontSize.js +16 -7
  113. package/dist/Editor/common/StyleBuilder/fieldTypes/index.js +3 -1
  114. package/dist/Editor/common/StyleBuilder/fieldTypes/menusArray.js +2 -0
  115. package/dist/Editor/common/StyleBuilder/fieldTypes/textOptions.js +15 -7
  116. package/dist/Editor/common/StyleBuilder/formStyle.js +19 -13
  117. package/dist/Editor/common/StyleBuilder/index.js +8 -4
  118. package/dist/Editor/common/Uploader.js +125 -17
  119. package/dist/Editor/common/UploaderWithProgress.js +183 -0
  120. package/dist/Editor/common/iconslist.js +21 -0
  121. package/dist/Editor/commonStyle.js +67 -18
  122. package/dist/Editor/helper/index.js +10 -2
  123. package/dist/Editor/helper/textIndeces.js +58 -0
  124. package/dist/Editor/helper/theme.js +203 -2
  125. package/dist/Editor/hooks/useEditorTheme.js +153 -0
  126. package/dist/Editor/hooks/useMouseMove.js +9 -3
  127. package/dist/Editor/hooks/useTable.js +62 -1
  128. package/dist/Editor/hooks/useThemeValues.js +63 -0
  129. package/dist/Editor/plugins/withEmbeds.js +12 -1
  130. package/dist/Editor/plugins/withHTML.js +58 -3
  131. package/dist/Editor/plugins/withTable.js +1 -1
  132. package/dist/Editor/service/fileupload.js +70 -0
  133. package/dist/Editor/theme/ThemeList.js +50 -173
  134. package/dist/Editor/theme/index.js +149 -0
  135. package/dist/Editor/themeSettings/ActiveTheme.js +82 -0
  136. package/dist/Editor/themeSettings/buttons/index.js +300 -0
  137. package/dist/Editor/themeSettings/buttons/style.js +23 -0
  138. package/dist/Editor/themeSettings/colorTheme/index.js +310 -0
  139. package/dist/Editor/themeSettings/colorTheme/style.js +81 -0
  140. package/dist/Editor/themeSettings/fonts/PreviewElement.js +121 -0
  141. package/dist/Editor/themeSettings/fonts/index.js +240 -0
  142. package/dist/Editor/themeSettings/fonts/style.js +62 -0
  143. package/dist/Editor/themeSettings/icons.js +60 -0
  144. package/dist/Editor/themeSettings/index.js +380 -0
  145. package/dist/Editor/themeSettings/style.js +299 -0
  146. package/dist/Editor/themeSettingsAI/icons.js +96 -0
  147. package/dist/Editor/themeSettingsAI/index.js +355 -0
  148. package/dist/Editor/themeSettingsAI/saveTheme.js +202 -0
  149. package/dist/Editor/themeSettingsAI/style.js +332 -0
  150. package/dist/Editor/utils/SlateUtilityFunctions.js +191 -40
  151. package/dist/Editor/utils/accordion.js +67 -39
  152. package/dist/Editor/utils/button.js +1 -17
  153. package/dist/Editor/utils/draftToSlate.js +3 -2
  154. package/dist/Editor/utils/events.js +94 -89
  155. package/dist/Editor/utils/font.js +40 -37
  156. package/dist/Editor/utils/helper.js +100 -23
  157. package/dist/Editor/utils/insertAppHeader.js +8 -4
  158. package/package.json +4 -4
  159. package/dist/Editor/Elements/DataView/Layouts/DataTypes/Components/MultiSelect.js +0 -454
@@ -1,9 +1,15 @@
1
1
  import React, { useState, useEffect, useRef } from "react";
2
2
  import { useSlateStatic, ReactEditor } from "slate-react";
3
3
  import { Node, Transforms } from "slate";
4
- import { IconButton, Tooltip, Box, useTheme } from "@mui/material";
4
+ import IconButton from "@mui/material/IconButton";
5
+ import Tooltip from "@mui/material/Tooltip";
6
+ import Box from "@mui/material/Box";
7
+ import useTheme from "@mui/material/styles/useTheme";
8
+ import Grid from "@mui/material/Grid";
9
+ import CircularProgress from "@mui/material/CircularProgress";
5
10
  import DeleteIcon from "@mui/icons-material/Delete";
6
11
  import AspectRatioIcon from "@mui/icons-material/AspectRatio";
12
+ import HighlightOffRoundedIcon from "@mui/icons-material/HighlightOffRounded";
7
13
  import Icon from "../../common/Icon";
8
14
  import useResize from "../../utils/customHooks/useResize";
9
15
  import EmbedPopup from "./EmbedPopup";
@@ -13,13 +19,19 @@ import { getEmbedURL } from "../../helper";
13
19
  import { getBreakPointsValue, getTRBLBreakPoints, groupByBreakpoint } from "../../helper/theme";
14
20
  import { useEditorContext } from "../../hooks/useMouseMove";
15
21
  import useCommonStyle from "../../commonStyle";
22
+ import ImageSelector from "../../common/ImageSelector/ImageSelector";
16
23
  import { jsx as _jsx } from "react/jsx-runtime";
17
24
  import { jsxs as _jsxs } from "react/jsx-runtime";
25
+ import { Fragment as _Fragment } from "react/jsx-runtime";
18
26
  const TYPE_LABELS = {
19
27
  calendly: "Embed Calendly or Other",
20
28
  video: "Embed Video or Other",
21
29
  image: "Embed Image or Other"
22
30
  };
31
+ const detectUrlType = url => {
32
+ if (typeof url !== "string") return "iframe";
33
+ return /\.(mp4|webm|ogg|mov|avi|mkv|flv|wmv)$/i.test(url.trim()) ? "video" : "iframe";
34
+ };
23
35
  const VideoContent = props => {
24
36
  const {
25
37
  resizing,
@@ -32,12 +44,26 @@ const VideoContent = props => {
32
44
  videoSX
33
45
  } = props;
34
46
  const iframeRef = useRef(null);
47
+ const mediaType = detectUrlType(embedURL);
35
48
  useEffect(() => {
36
49
  if (iframeRef.current) {
37
50
  iframeRef.current.src = "about:blank"; // reloading the iframe
38
51
  iframeRef.current.src = embedURL;
39
52
  }
40
53
  }, [embedURL, iframeRef.current]);
54
+ const commonSx = {
55
+ border: "none",
56
+ position: "absolute",
57
+ width: "100%",
58
+ height: "100%",
59
+ maxWidth: "100%",
60
+ left: 0,
61
+ ...(gradientBorder(borderColor) || {}),
62
+ borderWidth: borderWidth || "1px",
63
+ borderStyle: borderStyle || "solid",
64
+ background: bgColor || "transparent",
65
+ ...videoSX
66
+ };
41
67
  return resizing ? /*#__PURE__*/_jsx("div", {
42
68
  style: {
43
69
  width: "100%",
@@ -51,24 +77,14 @@ const VideoContent = props => {
51
77
  icon: "videoPlayer"
52
78
  })
53
79
  }) : /*#__PURE__*/_jsx(Box, {
54
- ref: iframeRef,
55
- component: "iframe",
80
+ component: mediaType,
81
+ ref: mediaType === "iframe" ? iframeRef : undefined,
82
+ src: embedURL,
83
+ controls: mediaType === "video",
84
+ allowFullScreen: mediaType === "iframe",
56
85
  className: "embedd-iframe",
57
- sx: {
58
- border: "none",
59
- position: "absolute",
60
- width: "100%",
61
- height: "100%",
62
- maxWidth: "100%",
63
- left: "0px",
64
- ...(gradientBorder(borderColor) || {}),
65
- borderWidth: borderWidth || "1px",
66
- borderStyle: borderStyle || "solid",
67
- background: bgColor || "transparent",
68
- ...videoSX
69
- },
70
- title: alt,
71
- allowFullScreen: true
86
+ sx: commonSx,
87
+ title: alt
72
88
  });
73
89
  };
74
90
  const VideoPlaceholder = props => {
@@ -78,18 +94,104 @@ const VideoPlaceholder = props => {
78
94
  onSettings,
79
95
  classes,
80
96
  type,
81
- translation
97
+ translation,
98
+ uploadStatus,
99
+ setUploadStatus,
100
+ uploadTerminator,
101
+ uniqueId,
102
+ editor,
103
+ path,
104
+ embedURL
82
105
  } = props;
83
- return !url ? !readOnly ? /*#__PURE__*/_jsxs(Box, {
106
+ const cancelUpload = e => {
107
+ e.stopPropagation();
108
+ uploadTerminator(uniqueId, setUploadStatus);
109
+ Transforms.setNodes(editor, {
110
+ isUpload: false,
111
+ isUploading: false,
112
+ file: null
113
+ }, {
114
+ at: path
115
+ });
116
+ };
117
+ return !url ? !readOnly ? /*#__PURE__*/_jsx(Box, {
84
118
  component: "button",
85
119
  className: "element-empty-btn",
86
- onClick: onSettings,
120
+ onClick: !uploadStatus?.isUploading ? onSettings : () => {},
87
121
  sx: {
88
122
  ...classes.emptyThumbBtn
89
123
  },
90
- children: [/*#__PURE__*/_jsx(Icon, {
91
- icon: "video"
92
- }), TYPE_LABELS[type] || translation("Embed Video or Other")]
124
+ children: uploadStatus?.isUploading ? /*#__PURE__*/_jsxs(Grid, {
125
+ container: true,
126
+ direction: "row",
127
+ style: {
128
+ display: "flex",
129
+ justifyContent: "space-between"
130
+ },
131
+ children: [/*#__PURE__*/_jsx(Grid, {
132
+ style: {
133
+ width: "80%"
134
+ },
135
+ children: /*#__PURE__*/_jsxs(Grid, {
136
+ container: true,
137
+ direction: "row",
138
+ sx: {
139
+ justifyContent: "flex-start",
140
+ alignItems: "center"
141
+ // gap: 1,
142
+ },
143
+ children: [/*#__PURE__*/_jsx(Grid, {
144
+ children: /*#__PURE__*/_jsx(Icon, {
145
+ icon: "image"
146
+ })
147
+ }), /*#__PURE__*/_jsx(Grid, {
148
+ style: {
149
+ width: "80%"
150
+ },
151
+ children: /*#__PURE__*/_jsxs(Box, {
152
+ display: "flex",
153
+ flexDirection: "column",
154
+ alignItems: "flex-start",
155
+ justifyContent: "flex-start",
156
+ children: [/*#__PURE__*/_jsx(Box, {
157
+ className: "truncateText",
158
+ children: uploadStatus?.fileName
159
+ }), /*#__PURE__*/_jsxs(Box, {
160
+ display: "flex",
161
+ alignItems: "center",
162
+ gap: 1,
163
+ marginTop: 1,
164
+ children: [/*#__PURE__*/_jsx(Box, {
165
+ children: uploadStatus?.fileSize
166
+ }), /*#__PURE__*/_jsx(CircularProgress, {
167
+ variant: "determinate",
168
+ value: uploadStatus?.uploadPercentage ?? 0,
169
+ className: "circularProgress-cls",
170
+ size: 15,
171
+ thickness: 8
172
+ }), /*#__PURE__*/_jsx(Box, {
173
+ children: `${uploadStatus?.uploadPercentage?.toFixed(0) ?? 0}%`
174
+ })]
175
+ })]
176
+ })
177
+ })]
178
+ })
179
+ }), /*#__PURE__*/_jsx(Grid, {
180
+ children: /*#__PURE__*/_jsx(HighlightOffRoundedIcon, {
181
+ className: "uploadCancel",
182
+ sx: {
183
+ cursor: "pointer"
184
+ },
185
+ onClick: e => {
186
+ cancelUpload(e);
187
+ }
188
+ })
189
+ })]
190
+ }) : /*#__PURE__*/_jsxs(_Fragment, {
191
+ children: [/*#__PURE__*/_jsx(Icon, {
192
+ icon: "video"
193
+ }), TYPE_LABELS[type] || translation("Embed Video or Other")]
194
+ })
93
195
  }) : /*#__PURE__*/_jsxs(Box, {
94
196
  sx: {
95
197
  color: "#64748B !important",
@@ -120,14 +222,23 @@ const Video = ({
120
222
  xsHidden,
121
223
  width: oldWidth,
122
224
  bannerSpacing,
123
- aspectRatio
225
+ aspectRatio,
226
+ file,
227
+ isUploading,
228
+ uniqueId,
229
+ fromFreeGrid
124
230
  } = element;
125
231
  const editor = useSlateStatic();
126
232
  const [openSetttings, setOpenSettings] = useState(false);
127
233
  const [parentDOM, setParentDOM] = useState(null);
128
234
  const {
129
235
  readOnly,
130
- translation
236
+ translation,
237
+ services,
238
+ uploadFile,
239
+ resumeUploadState,
240
+ uploadTerminator,
241
+ isUploadInProgress = () => false
131
242
  } = customProps;
132
243
  const {
133
244
  vertical,
@@ -148,6 +259,63 @@ const Video = ({
148
259
  return element?.size || {};
149
260
  }
150
261
  };
262
+ const xhrRef = useRef(null);
263
+ const [openUploadPopup, setUploadPopupOpen] = useState(false);
264
+ const [uploadStatus, setUploadStatus] = useState({
265
+ isUploading: false,
266
+ uploadPercentage: 0
267
+ });
268
+ const onClickUpload = () => {
269
+ setUploadPopupOpen(true);
270
+ };
271
+ const onSelectVideo = async video => {
272
+ handleClose();
273
+ let finalURL = null;
274
+ try {
275
+ if (video?.isUpload === false) {
276
+ finalURL = video?.embedURL;
277
+ } else {
278
+ const id = !uniqueId ? crypto?.randomUUID() : uniqueId;
279
+ const result = await services("uploadFile", video?.file);
280
+ const uploadUrl = result?.data?.[0];
281
+ const fileEntry = {
282
+ ...video,
283
+ xhrRef,
284
+ presidnedURL: uploadUrl,
285
+ status: "uploading"
286
+ };
287
+ uploadFile(id, fileEntry, setUploadStatus, onSave, "video");
288
+ if (!fromFreeGrid) {
289
+ Transforms.setNodes(editor, {
290
+ uniqueId: id,
291
+ isUploading: true
292
+ }, {
293
+ at: path
294
+ });
295
+ } else {
296
+ Transforms.setNodes(editor, {
297
+ isUploading: true
298
+ }, {
299
+ at: path
300
+ });
301
+ }
302
+ }
303
+ if (finalURL) {
304
+ const updateObject = {
305
+ ...element,
306
+ url: finalURL
307
+ };
308
+ onSave(updateObject);
309
+ } else {
310
+ return;
311
+ }
312
+ } catch (error) {
313
+ console.log(error);
314
+ }
315
+ };
316
+ const handleClose = () => {
317
+ setUploadPopupOpen(false);
318
+ };
151
319
  const [size, onMouseDown, resizing, onLoad] = useResize({
152
320
  parentDOM,
153
321
  size: getSize(),
@@ -161,12 +329,49 @@ const Video = ({
161
329
  });
162
330
  const arr = Array.from(Node.elements(editor));
163
331
  const ele = arr.find(([elem]) => element === elem);
332
+ const noUploadTracks = () => {
333
+ setUploadStatus({
334
+ isUploading: false,
335
+ uploadPercentage: 0,
336
+ fileName: null,
337
+ fileSize: null
338
+ });
339
+ };
340
+ useEffect(() => {
341
+ const isUploading = isUploadInProgress(uniqueId);
342
+ if (fromFreeGrid) {
343
+ if (isUploading) {
344
+ resumeUploadState(uniqueId, setUploadStatus, onSave, noUploadTracks, "image");
345
+ } else {
346
+ if (!isUploading && file) {
347
+ onSelectVideo({
348
+ file: file
349
+ });
350
+ }
351
+ }
352
+ }
353
+ return () => {
354
+ // Transforms.setNodes(editor, { isUploading: false }, { at: path });
355
+ };
356
+ }, [uniqueId, isUploading, file]);
164
357
  useEffect(() => {
165
358
  if (editor && ele && ele[1] !== undefined) {
166
359
  const dom = ReactEditor.toDOMNode(editor, Node.get(editor, ele[1]));
167
360
  setParentDOM(dom);
168
361
  onLoad(element?.size || {});
169
362
  }
363
+ if (!fromFreeGrid) {
364
+ if (uniqueId && isUploading) {
365
+ resumeUploadState(uniqueId, setUploadStatus, onSave, noUploadTracks, "video");
366
+ } else if (file && isUploading) {
367
+ onSelectVideo({
368
+ file: file
369
+ });
370
+ }
371
+ }
372
+ return () => {
373
+ // xhrRef?.current?.abort();
374
+ };
170
375
  }, []);
171
376
  const ToolBar = () => {
172
377
  return /*#__PURE__*/_jsxs("div", {
@@ -194,12 +399,34 @@ const Video = ({
194
399
  };
195
400
  const onSave = data => {
196
401
  try {
197
- const updateData = {
198
- ...data
199
- };
402
+ let updateData = {};
403
+ if (typeof data === "string") {
404
+ updateData = {
405
+ url: data,
406
+ isUploading: false
407
+ };
408
+ } else if (typeof data?.url !== "string") {
409
+ updateData = {
410
+ ...data,
411
+ url: ""
412
+ };
413
+ onSelectVideo({
414
+ file: data?.url?.file,
415
+ isUpload: true,
416
+ setUploadStatus,
417
+ services: customProps?.services
418
+ });
419
+ } else {
420
+ updateData = data;
421
+ }
200
422
  delete updateData.children;
423
+ Transforms.select(editor, path);
424
+ ReactEditor.focus(editor);
201
425
  Transforms.setNodes(editor, {
202
- ...updateData
426
+ ...updateData,
427
+ isUpload: false,
428
+ isUploading: false,
429
+ file: null
203
430
  }, {
204
431
  at: path
205
432
  });
@@ -281,13 +508,19 @@ const Video = ({
281
508
  children: [!readOnly && url && /*#__PURE__*/_jsx(ToolBar, {}), /*#__PURE__*/_jsx(VideoPlaceholder, {
282
509
  ...element,
283
510
  embedURL: embedURL,
284
- onSettings: onSettings,
511
+ onSettings: onClickUpload,
285
512
  videoSX: videoSX,
286
513
  url: url,
287
514
  readOnly: readOnly,
288
515
  resizing: resizing,
289
516
  classes: classes,
290
- translation: translation
517
+ translation: translation,
518
+ uploadStatus: uploadStatus,
519
+ setUploadStatus: setUploadStatus,
520
+ uploadTerminator: uploadTerminator,
521
+ uniqueId: uniqueId,
522
+ editor: editor,
523
+ path: path
291
524
  }), !readOnly && url ? /*#__PURE__*/_jsx(IconButton, {
292
525
  onPointerDown: onMouseDown,
293
526
  style: {
@@ -295,6 +528,18 @@ const Video = ({
295
528
  },
296
529
  className: "resize-br visible-on-hover",
297
530
  children: /*#__PURE__*/_jsx(AspectRatioIcon, {})
531
+ }) : null, openUploadPopup ? /*#__PURE__*/_jsx(ImageSelector, {
532
+ open: true,
533
+ Add: true,
534
+ commentMore: true,
535
+ actions: true,
536
+ title: "Video",
537
+ onClose: handleClose,
538
+ customProps: customProps,
539
+ onSelectImage: onSelectVideo,
540
+ setUploadPopupOpen: setUploadPopupOpen,
541
+ setUploadStatus: setUploadStatus,
542
+ xhrRef: xhrRef
298
543
  }) : null]
299
544
  }), children]
300
545
  });
@@ -109,7 +109,20 @@ const Form = props => {
109
109
  if ((readOnly || test) && formEle && formEle?.current) {
110
110
  const formData = new FormData(formEle?.current);
111
111
  setLoading(true);
112
- const response = [];
112
+ let response = [];
113
+ const formDataEntries = [...formData.entries()];
114
+ const childFields = element?.children?.filter(el => el?.type === "form-field");
115
+ response = formDataEntries.map(([key, value], index) => {
116
+ const fieldData = childFields[index];
117
+ return {
118
+ fieldKey: key,
119
+ [key]: value,
120
+ placeholder: fieldData?.placeholder || "",
121
+ form_name: formName,
122
+ tagName: tagName,
123
+ uid: fieldData?.uid || formName
124
+ };
125
+ });
113
126
  let user_email = "";
114
127
  let meta_data = [];
115
128
  const validations = [];
@@ -153,16 +166,28 @@ const Form = props => {
153
166
  rules: rule?.length > 0 && rule
154
167
  });
155
168
  }
156
- const placeholder = fieldData?.name === pair[0] ? fieldData?.placeholder : "";
157
- response?.push({
158
- fieldKey: pair[0],
159
- [pair[0]]: pair[1],
160
- placeholder: placeholder,
161
- form_name: formName,
162
- tagName: tagName,
163
- uid: fieldData?.uid
164
- });
169
+
170
+ // Commented out — duplicate field loop caused by 'pair'. Not needed inside this loop.
171
+ // const formDataEntries = [...formData.entries()];
172
+ // const childFields = element?.children?.filter(
173
+ // (el) => el?.type === "form-field"
174
+ // );
175
+ // response = [];
176
+ // for (let i = 0; i < formDataEntries.length; i++) {
177
+ // const [key, value] = formDataEntries[i];
178
+ // const fieldData = childFields[i];
179
+
180
+ // response.push({
181
+ // fieldKey: key,
182
+ // [key]: value,
183
+ // placeholder: fieldData?.placeholder || "",
184
+ // form_name: formName,
185
+ // tagName: tagName,
186
+ // uid: fieldData?.uid || formName,
187
+ // });
188
+ // }
165
189
  }
190
+
166
191
  let params = {
167
192
  page_id: page_id,
168
193
  agency_id: agency_id,
@@ -1,5 +1,5 @@
1
1
  import React, { useState } from "react";
2
- import { Transforms, Node } from "slate";
2
+ import { Transforms } from "slate";
3
3
  import { useSlateStatic, ReactEditor } from "slate-react";
4
4
  import { IconButton, Tooltip, Grid, useTheme } from "@mui/material";
5
5
  import FormElements from "./FormElements";
@@ -9,20 +9,20 @@ const FormStyles = theme => ({
9
9
  color: "#94A3B8"
10
10
  },
11
11
  bodyTextArea: {
12
- '& .mini-editor-cls': {
13
- padding: '12px',
14
- '&:focus-visible': {
15
- outline: 'none',
16
- border: 'none'
12
+ "& .mini-editor-cls": {
13
+ padding: "12px",
14
+ "&:focus-visible": {
15
+ outline: "none",
16
+ border: "none"
17
17
  }
18
18
  },
19
19
  "& .editorWorkflow": {
20
- minHeight: '130px',
21
- padding: '12px',
20
+ minHeight: "130px",
21
+ padding: "12px",
22
22
  paddingBottom: 0,
23
- '&:focus-visible': {
24
- outline: 'none',
25
- border: 'none'
23
+ "&:focus-visible": {
24
+ outline: "none",
25
+ border: "none"
26
26
  }
27
27
  }
28
28
  },
@@ -105,7 +105,7 @@ const FormStyles = theme => ({
105
105
  padding: "4px 22px",
106
106
  textTransform: "none",
107
107
  border: "1px solid #D8DDE1",
108
- minWidth: '126px',
108
+ minWidth: "126px",
109
109
  "& svg": {
110
110
  "& path": {
111
111
  stroke: "#64748B"
@@ -169,17 +169,19 @@ const FormStyles = theme => ({
169
169
  }
170
170
  },
171
171
  colorButtonSingle: {
172
+ border: "1.5px solid #DCE4EC !important",
172
173
  "&.active": {
173
- "&:before": {
174
- content: '" "',
175
- position: "absolute",
176
- top: "-5px",
177
- left: "-5px",
178
- width: "calc(100% + 4px)",
179
- height: "calc(100% + 4px)",
180
- border: "3px solid blue",
181
- borderRadius: "50%"
182
- }
174
+ // "&:before": {
175
+ // content: '" "',
176
+ // position: "absolute",
177
+ // top: "-5px",
178
+ // left: "-5px",
179
+ // width: "calc(100% + 4px)",
180
+ // height: "calc(100% + 4px)",
181
+ // border: "3px solid blue",
182
+ // borderRadius: "50%",
183
+ // },
184
+ outline: "2px solid #2563EB"
183
185
  }
184
186
  },
185
187
  colorButtonsInner: {
@@ -249,7 +251,7 @@ const FormStyles = theme => ({
249
251
  }
250
252
  },
251
253
  root: {
252
- padding: '10px'
254
+ padding: "10px"
253
255
  }
254
256
  });
255
257
  export default FormStyles;
@@ -1,3 +1,27 @@
1
1
  export const minutes = [30, 35, 40, 45, 50, 55];
2
2
  export const hours = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23];
3
- export const days = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31];
3
+ export const days = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31];
4
+ export const allowedFormat = {
5
+ Document: ".pdf,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.txt,.rtf",
6
+ Image: "image/*",
7
+ Video: ".mp4,.webm,.ogg,.mov,.avi,.mkv",
8
+ Embed: "*"
9
+ };
10
+ export const maxSizeMap = {
11
+ Image: 25 * 1024 * 1024,
12
+ // Test -> 5 * 1024 * 1024 -> 5MB
13
+ Video: 1024 * 1024 * 1024,
14
+ Document: 25 * 1024 * 1024,
15
+ Embed: Infinity
16
+ };
17
+ export const allowedTypes = {
18
+ Document: ["application/pdf", "application/msword", "application/vnd.openxmlformats-officedocument.wordprocessingml.document", "application/vnd.ms-excel", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "application/vnd.ms-powerpoint", "application/vnd.openxmlformats-officedocument.presentationml.presentation", "text/plain", "application/rtf"],
19
+ Image: ["image/jpeg", "image/png", "image/gif", "image/webp", "image/svg+xml"],
20
+ Video: ["video/mp4", "video/webm", "video/ogg", "video/quicktime", "video/x-msvideo", "video/x-matroska"],
21
+ Embed: ["*"]
22
+ };
23
+ export const extensionMap = {
24
+ Video: ["mp4", "webm", "ogg", "mov", "avi", "mkv"],
25
+ Image: ["jpg", "jpeg", "png", "gif", "webp", "svg"],
26
+ Document: ["pdf", "doc", "docx", "xls", "xlsx", "ppt", "pptx", "txt", "rtf"]
27
+ };