@flozy/editor 11.2.3 → 11.2.4

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 (145) hide show
  1. package/dist/Editor/ChatEditor.js +7 -7
  2. package/dist/Editor/CommonEditor.js +86 -24
  3. package/dist/Editor/DialogWrapper.js +31 -25
  4. package/dist/Editor/Editor.css +37 -4
  5. package/dist/Editor/Elements/AI/PopoverAIInput.js +11 -3
  6. package/dist/Editor/Elements/AppHeader/AppHeader.js +3 -3
  7. package/dist/Editor/Elements/Attachments/AttachmentStyles.js +16 -0
  8. package/dist/Editor/Elements/Attachments/Attachments.js +239 -11
  9. package/dist/Editor/Elements/Attachments/AttachmentsButton.js +11 -4
  10. package/dist/Editor/Elements/Button/EditorButton.js +32 -44
  11. package/dist/Editor/Elements/Color Picker/ColorButtons.js +61 -14
  12. package/dist/Editor/Elements/Color Picker/ColorPicker.css +25 -1
  13. package/dist/Editor/Elements/Color Picker/ColorPicker.js +10 -7
  14. package/dist/Editor/Elements/Color Picker/Styles.js +15 -13
  15. package/dist/Editor/Elements/DataView/Layouts/DataTypes/Components/Select.js +134 -55
  16. package/dist/Editor/Elements/DataView/Layouts/DataTypes/Components/SelectV1.js +7 -8
  17. package/dist/Editor/Elements/DataView/Layouts/DataTypes/PersonType.js +8 -3
  18. package/dist/Editor/Elements/DataView/Layouts/Options/EditProperty.js +1 -1
  19. package/dist/Editor/Elements/DataView/Layouts/TableStyles.js +1 -1
  20. package/dist/Editor/Elements/Embed/Embed.js +37 -43
  21. package/dist/Editor/Elements/Embed/Image.js +307 -26
  22. package/dist/Editor/Elements/Embed/Video.js +355 -35
  23. package/dist/Editor/Elements/EmbedScript/EmbedScriptPopup.js +9 -6
  24. package/dist/Editor/Elements/EmbedScript/styles.js +17 -1
  25. package/dist/Editor/Elements/Form/FormField.js +1 -1
  26. package/dist/Editor/Elements/Form/Workflow/Styles.js +25 -22
  27. package/dist/Editor/Elements/Form/Workflow/constant.js +25 -1
  28. package/dist/Editor/Elements/FreeGrid/FreeGrid.js +37 -76
  29. package/dist/Editor/Elements/FreeGrid/FreeGridBox.js +9 -5
  30. package/dist/Editor/Elements/FreeGrid/FreeGridItem.js +3 -1
  31. package/dist/Editor/Elements/FreeGrid/helper.js +194 -0
  32. package/dist/Editor/Elements/FreeGrid/styles.js +15 -0
  33. package/dist/Editor/Elements/Grid/GridItem.js +1 -1
  34. package/dist/Editor/Elements/PageSettings/PageSettingsButton.js +2 -1
  35. package/dist/Editor/Elements/Table/Table.js +2 -1
  36. package/dist/Editor/Elements/Table/TableCell.js +10 -3
  37. package/dist/Editor/Elements/Title/title.js +4 -5
  38. package/dist/Editor/Elements/TopBanner/TopBanner.js +4 -2
  39. package/dist/Editor/Elements/TopBanner/TopBannerButton.js +5 -3
  40. package/dist/Editor/Styles/EditorStyles.js +19 -5
  41. package/dist/Editor/Toolbar/FormatTools/Dropdown.js +27 -3
  42. package/dist/Editor/Toolbar/FormatTools/FontFamilyAutocomplete.js +4 -3
  43. package/dist/Editor/Toolbar/FormatTools/MarkButton.js +2 -2
  44. package/dist/Editor/Toolbar/FormatTools/TextSize.js +33 -29
  45. package/dist/Editor/Toolbar/Mini/MiniToolbar.js +2 -1
  46. package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/MiniColorPicker.js +3 -1
  47. package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/SelectFontSize.js +25 -23
  48. package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/SelectTypography.js +167 -42
  49. package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/index.js +15 -5
  50. package/dist/Editor/Toolbar/PopupTool/PopperHeader.js +2 -1
  51. package/dist/Editor/Toolbar/PopupTool/PopupToolStyle.js +65 -7
  52. package/dist/Editor/Toolbar/PopupTool/TextFormat.js +66 -12
  53. package/dist/Editor/Toolbar/PopupTool/ThemeTextFormat.js +439 -0
  54. package/dist/Editor/Toolbar/PopupTool/index.js +6 -4
  55. package/dist/Editor/Toolbar/toolbarGroups.js +48 -6
  56. package/dist/Editor/assets/svg/BackIcon.js +18 -0
  57. package/dist/Editor/assets/svg/ThemeIcons.js +293 -0
  58. package/dist/Editor/common/ColorPickerButton.js +38 -19
  59. package/dist/Editor/common/CustomColorPicker/index.js +130 -0
  60. package/dist/Editor/common/CustomColorPicker/style.js +53 -0
  61. package/dist/Editor/common/CustomDialog2/index.js +94 -0
  62. package/dist/Editor/common/CustomDialog2/style.js +67 -0
  63. package/dist/Editor/common/CustomSelect.js +43 -0
  64. package/dist/Editor/common/DnD/DragHandleButton.js +1 -1
  65. package/dist/Editor/common/FontLoader/FontLoader.js +1 -0
  66. package/dist/Editor/common/Icon.js +28 -0
  67. package/dist/Editor/common/ImageSelector/ImageSelector.js +66 -13
  68. package/dist/Editor/common/ImageSelector/Options/ChooseAssets.js +1 -1
  69. package/dist/Editor/common/ImageSelector/Options/RecentUploads.js +483 -0
  70. package/dist/Editor/common/ImageSelector/Options/Upload.js +26 -11
  71. package/dist/Editor/common/ImageSelector/Styles.js +3 -9
  72. package/dist/Editor/common/RnD/ElementSettings/OtherSettings/Settings.js +2 -1
  73. package/dist/Editor/common/RnD/ElementSettings/Settings/AppHeaderSettings.js +3 -2
  74. package/dist/Editor/common/RnD/ElementSettings/Settings/BoxSettings.js +3 -2
  75. package/dist/Editor/common/RnD/ElementSettings/Settings/ButtonSettings.js +3 -2
  76. package/dist/Editor/common/RnD/ElementSettings/Settings/CodeSettings.js +3 -2
  77. package/dist/Editor/common/RnD/ElementSettings/Settings/FormSettings.js +3 -2
  78. package/dist/Editor/common/RnD/ElementSettings/Settings/ImageSettings.js +20 -7
  79. package/dist/Editor/common/RnD/ElementSettings/Settings/TableSettings.js +3 -2
  80. package/dist/Editor/common/RnD/ElementSettings/Settings/TextSettings.js +2 -0
  81. package/dist/Editor/common/RnD/ElementSettings/Settings/VideoSettings.js +20 -7
  82. package/dist/Editor/common/RnD/GuideLines/styles.js +1 -1
  83. package/dist/Editor/common/RnD/Theme/MainThemeProvider.js +17 -0
  84. package/dist/Editor/common/RnD/Theme/ViewportStimulator.js +6 -3
  85. package/dist/Editor/common/RnD/Utils/gridDropItem.js +28 -11
  86. package/dist/Editor/common/RnD/Utils/index.js +3 -1
  87. package/dist/Editor/common/RnD/VirtualElement/VirtualTextElement.js +52 -63
  88. package/dist/Editor/common/RnD/VirtualElement/helper.js +248 -68
  89. package/dist/Editor/common/RnD/VirtualElement/styles.js +22 -0
  90. package/dist/Editor/common/RnD/index.js +61 -14
  91. package/dist/Editor/common/Shorthands/elements.js +55 -3
  92. package/dist/Editor/common/StyleBuilder/buttonStyle.js +5 -15
  93. package/dist/Editor/common/StyleBuilder/embedVideoStyle.js +4 -0
  94. package/dist/Editor/common/StyleBuilder/fieldStyle.js +1 -0
  95. package/dist/Editor/common/StyleBuilder/fieldTypes/backgroundImage.js +13 -3
  96. package/dist/Editor/common/StyleBuilder/fieldTypes/bannerSpacing.js +12 -2
  97. package/dist/Editor/common/StyleBuilder/fieldTypes/borderRadius.js +15 -7
  98. package/dist/Editor/common/StyleBuilder/fieldTypes/color.js +36 -10
  99. package/dist/Editor/common/StyleBuilder/fieldTypes/fontSize.js +13 -4
  100. package/dist/Editor/common/StyleBuilder/fieldTypes/menusArray.js +2 -0
  101. package/dist/Editor/common/StyleBuilder/fieldTypes/text.js +16 -4
  102. package/dist/Editor/common/StyleBuilder/fieldTypes/textOptions.js +15 -7
  103. package/dist/Editor/common/StyleBuilder/formStyle.js +19 -13
  104. package/dist/Editor/common/StyleBuilder/index.js +10 -19
  105. package/dist/Editor/common/Uploader.js +118 -17
  106. package/dist/Editor/common/UploaderWithProgress.js +183 -0
  107. package/dist/Editor/common/iconslist.js +21 -0
  108. package/dist/Editor/commonStyle.js +111 -53
  109. package/dist/Editor/helper/index.js +4 -1
  110. package/dist/Editor/helper/theme.js +203 -2
  111. package/dist/Editor/hooks/useEditorTheme.js +153 -0
  112. package/dist/Editor/hooks/useMouseMove.js +12 -3
  113. package/dist/Editor/hooks/useTable.js +62 -1
  114. package/dist/Editor/hooks/useThemeValues.js +63 -0
  115. package/dist/Editor/plugins/withEmbeds.js +1 -1
  116. package/dist/Editor/plugins/withHTML.js +56 -3
  117. package/dist/Editor/plugins/withTable.js +1 -1
  118. package/dist/Editor/service/fileTracking.js +22 -0
  119. package/dist/Editor/service/fileupload.js +77 -0
  120. package/dist/Editor/theme/ThemeList.js +50 -173
  121. package/dist/Editor/theme/index.js +149 -0
  122. package/dist/Editor/themeSettings/ActiveTheme.js +82 -0
  123. package/dist/Editor/themeSettings/buttons/index.js +300 -0
  124. package/dist/Editor/themeSettings/buttons/style.js +23 -0
  125. package/dist/Editor/themeSettings/colorTheme/index.js +310 -0
  126. package/dist/Editor/themeSettings/colorTheme/style.js +81 -0
  127. package/dist/Editor/themeSettings/fonts/PreviewElement.js +121 -0
  128. package/dist/Editor/themeSettings/fonts/index.js +240 -0
  129. package/dist/Editor/themeSettings/fonts/style.js +62 -0
  130. package/dist/Editor/themeSettings/icons.js +60 -0
  131. package/dist/Editor/themeSettings/index.js +380 -0
  132. package/dist/Editor/themeSettings/style.js +299 -0
  133. package/dist/Editor/themeSettingsAI/icons.js +96 -0
  134. package/dist/Editor/themeSettingsAI/index.js +355 -0
  135. package/dist/Editor/themeSettingsAI/saveTheme.js +202 -0
  136. package/dist/Editor/themeSettingsAI/style.js +332 -0
  137. package/dist/Editor/utils/SlateUtilityFunctions.js +165 -40
  138. package/dist/Editor/utils/accordion.js +1 -1
  139. package/dist/Editor/utils/attachments.js +138 -2
  140. package/dist/Editor/utils/button.js +1 -17
  141. package/dist/Editor/utils/font.js +40 -37
  142. package/dist/Editor/utils/formfield.js +2 -2
  143. package/dist/Editor/utils/helper.js +101 -3
  144. package/dist/Editor/utils/insertAppHeader.js +8 -4
  145. package/package.json +1 -1
@@ -1,33 +1,226 @@
1
- import React from "react";
2
- import { Box, Card, CardMedia, CardContent, Typography } from "@mui/material";
1
+ import React, { useEffect, useRef, useState } from "react";
2
+ import Box from '@mui/material/Box';
3
+ import Card from '@mui/material/Card';
4
+ import CardMedia from '@mui/material/CardMedia';
5
+ import CardContent from '@mui/material/CardContent';
6
+ import Typography from '@mui/material/Typography';
7
+ import CircularProgress from '@mui/material/CircularProgress';
8
+ import IconButton from '@mui/material/IconButton';
3
9
  import PictureAsPdfIcon from "@mui/icons-material/PictureAsPdf";
4
10
  import TextSnippetIcon from "@mui/icons-material/TextSnippet";
11
+ import HighlightOffRoundedIcon from "@mui/icons-material/HighlightOffRounded";
12
+ import { Transforms } from "slate";
13
+ import { ReactEditor, useSlateStatic } from "slate-react";
5
14
  import { formatDate } from "../../utils/helper";
6
15
  import Icon from "../../common/Icon";
7
16
  import { getEmbedURL } from "../../helper";
8
17
  import Video from "../Embed/Video";
18
+ import { formatFileSize } from "../../service/fileupload";
19
+ import { useEditorContext } from "../../hooks/useMouseMove";
20
+ import useAttachmentStyle from "./AttachmentStyles";
9
21
  import { jsx as _jsx } from "react/jsx-runtime";
22
+ import { Fragment as _Fragment } from "react/jsx-runtime";
10
23
  import { jsxs as _jsxs } from "react/jsx-runtime";
11
24
  const Attachments = props => {
12
25
  const {
13
26
  attributes,
14
27
  element,
15
- children
28
+ children,
29
+ customProps
16
30
  } = props;
17
31
  const {
18
32
  url,
19
33
  type,
20
- date
34
+ date,
35
+ fileName,
36
+ isUploading,
37
+ file,
38
+ fileSize,
39
+ uniqueId
21
40
  } = element;
41
+ const {
42
+ resumeUploadState,
43
+ services,
44
+ uploadFile,
45
+ uploadTerminator
46
+ } = customProps || {};
22
47
  const {
23
48
  isEmbed
24
49
  } = getEmbedURL(element, true);
25
50
  const getLastName = url?.split("/").pop();
26
- const fileName = `${decodeURIComponent(getLastName)}`;
51
+ const fileName2 = `${decodeURIComponent(getLastName)}`;
52
+ const editor = useSlateStatic();
53
+ const {
54
+ theme
55
+ } = useEditorContext();
56
+ const classes = useAttachmentStyle(theme);
57
+ const path = ReactEditor.findPath(editor, element);
58
+ const [redirectURL, setRedirectURL] = useState(isUploading ? null : url);
59
+ const [uploadStatus, setUploadStatus] = useState({
60
+ isUploading: !!isUploading,
61
+ uploadPercentage: 0,
62
+ fileName: fileName || fileName2,
63
+ fileSize: fileSize
64
+ });
65
+ const xhrRef = useRef(null);
66
+ const trackingProcessedRef = useRef(false);
67
+ const cancelUpload = () => {
68
+ Transforms.removeNodes(editor, {
69
+ at: path
70
+ });
71
+ uploadTerminator(uniqueId, setUploadStatus);
72
+ };
73
+ const onSave = async (url, source = null, isUploadCompletion = false) => {
74
+ // Track document upload only if source is not "recent" and we haven't processed tracking yet
75
+ const isFromRecentUploads = source === "recent";
76
+ if (url && typeof url === "string" && !isFromRecentUploads && !isUploadCompletion && !trackingProcessedRef.current) {
77
+ // Mark tracking as processed
78
+ trackingProcessedRef.current = true;
79
+ try {
80
+ const fileExtension = url.split('.').pop()?.toLowerCase();
81
+ const mimeType = getMimeTypeFromExtension(fileExtension);
82
+ const trackingData = {
83
+ file_url: url,
84
+ name: fileName || fileName2 || 'Untitled Document',
85
+ mime_type: mimeType,
86
+ resource_type: "flozy_editor",
87
+ resource_id: customProps?.page_id,
88
+ agency_id: customProps?.agency_id,
89
+ uploaded_by: customProps?.user_id,
90
+ category: "document",
91
+ status: 1,
92
+ created_on: new Date().toISOString()
93
+ };
94
+
95
+ // Try main app service first, fallback to direct implementation
96
+ if (customProps.services && typeof customProps.services === 'function') {
97
+ try {
98
+ const result = await customProps.services('trackEditorUploads', {
99
+ fileData: trackingData,
100
+ category: 'document'
101
+ });
102
+
103
+ // Check if the service call was successful
104
+ if (result && !result.error) {
105
+ console.log("Document upload tracked successfully via main app service:", url);
106
+ } else {
107
+ console.warn('Main app service returned error, falling back to direct tracking:', result);
108
+ const {
109
+ trackFileUpload
110
+ } = await import("../../service/fileTracking");
111
+ await trackFileUpload(trackingData, customProps, 'document');
112
+ console.log("Document upload tracked successfully via fallback:", url);
113
+ }
114
+ } catch (error) {
115
+ console.warn('Main app service failed, falling back to direct tracking:', error);
116
+ const {
117
+ trackFileUpload
118
+ } = await import("../../service/fileTracking");
119
+ await trackFileUpload(trackingData, customProps, 'document');
120
+ console.log("Document upload tracked successfully via fallback:", url);
121
+ }
122
+ } else {
123
+ const {
124
+ trackFileUpload
125
+ } = await import("../../service/fileTracking");
126
+ await trackFileUpload(trackingData, customProps, 'document');
127
+ console.log("Document upload tracked successfully:", url);
128
+ }
129
+ } catch (error) {
130
+ console.error("Failed to track document upload:", error);
131
+ }
132
+ } else {}
133
+
134
+ // Data insertion logic - ALWAYS execute regardless of tracking
135
+ setRedirectURL(url);
136
+ Transforms.setNodes(editor, {
137
+ url: url,
138
+ isUploading: false,
139
+ source: source
140
+ }, {
141
+ at: path
142
+ });
143
+ setUploadStatus({
144
+ isUploading: false,
145
+ uploadPercentage: 0,
146
+ fileName: null,
147
+ fileSize: null
148
+ });
149
+ };
150
+
151
+ // Helper function to get MIME type from file extension
152
+ const getMimeTypeFromExtension = extension => {
153
+ const mimeTypes = {
154
+ 'pdf': 'application/pdf',
155
+ 'doc': 'application/msword',
156
+ 'docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
157
+ 'xls': 'application/vnd.ms-excel',
158
+ 'xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
159
+ 'ppt': 'application/vnd.ms-powerpoint',
160
+ 'pptx': 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
161
+ 'txt': 'text/plain',
162
+ 'csv': 'text/csv',
163
+ 'rtf': 'application/rtf',
164
+ 'pages': 'application/vnd.apple.pages',
165
+ 'numbers': 'application/vnd.apple.numbers',
166
+ 'key': 'application/vnd.apple.keynote'
167
+ };
168
+ return mimeTypes[extension] || 'application/octet-stream';
169
+ };
170
+ const handleFileUpload = async () => {
171
+ if (!file) return;
172
+ try {
173
+ // Reset tracking flag for new upload
174
+ trackingProcessedRef.current = false;
175
+ const id = !uniqueId ? crypto?.randomUUID() : uniqueId;
176
+ const result = await services("uploadFile", file);
177
+ const uploadUrl = result?.data?.[0];
178
+ const fileEntry = {
179
+ file: file,
180
+ xhrRef,
181
+ presidnedURL: uploadUrl,
182
+ status: "uploading"
183
+ };
184
+ uploadFile(id, fileEntry, setUploadStatus, onSave, "document");
185
+ Transforms.setNodes(editor, {
186
+ uniqueId: id,
187
+ isUploading: true
188
+ }, {
189
+ at: path
190
+ });
191
+ } catch (error) {
192
+ console.error("Upload failed:", error);
193
+ setUploadStatus(prev => ({
194
+ ...prev,
195
+ isUploading: false,
196
+ uploadPercentage: 0
197
+ }));
198
+ }
199
+ };
200
+ const noUploadTracks = () => {
201
+ setUploadStatus({
202
+ isUploading: false,
203
+ uploadPercentage: 0,
204
+ fileName: null,
205
+ fileSize: null
206
+ });
207
+ setRedirectURL(null);
208
+ Transforms.removeNodes(editor, {
209
+ at: path
210
+ });
211
+ };
212
+ useEffect(() => {
213
+ if (uniqueId && isUploading) {
214
+ resumeUploadState(uniqueId, setUploadStatus, onSave, noUploadTracks, "document");
215
+ } else if (file && isUploading) {
216
+ handleFileUpload();
217
+ }
218
+ }, []);
27
219
  return !isEmbed ? /*#__PURE__*/_jsxs(Box, {
28
220
  component: "div",
29
221
  className: "attachment-wrpr-ev2",
30
222
  ...attributes,
223
+ sx: classes?.attachmentRoot,
31
224
  contentEditable: false,
32
225
  style: {
33
226
  display: "block"
@@ -41,7 +234,8 @@ const Attachments = props => {
41
234
  padding: "8px",
42
235
  boxShadow: "none",
43
236
  border: "1px solid #eae9e9",
44
- backgroundColor: "#F7F7F7"
237
+ backgroundColor: "#F7F7F7",
238
+ position: "relative"
45
239
  },
46
240
  children: [/*#__PURE__*/_jsx(CardMedia, {
47
241
  sx: {
@@ -67,7 +261,7 @@ const Attachments = props => {
67
261
  })
68
262
  }), /*#__PURE__*/_jsxs(CardContent, {
69
263
  component: "a",
70
- href: url,
264
+ href: redirectURL,
71
265
  target: "_blank",
72
266
  style: {
73
267
  display: "flex",
@@ -76,7 +270,9 @@ const Attachments = props => {
76
270
  padding: "8px",
77
271
  textDecoration: "none",
78
272
  flexDirection: "column",
79
- color: "#0F172A"
273
+ color: "#0F172A",
274
+ flexGrow: uploadStatus?.isUploading && 1,
275
+ width: "80%"
80
276
  },
81
277
  children: [/*#__PURE__*/_jsx(Typography, {
82
278
  style: {
@@ -85,16 +281,48 @@ const Attachments = props => {
85
281
  fontSize: "14px"
86
282
  },
87
283
  component: "div",
88
- children: fileName
89
- }), /*#__PURE__*/_jsx(Typography, {
284
+ className: "truncateText",
285
+ children: fileName2 || fileName
286
+ }), /*#__PURE__*/_jsxs(Typography, {
90
287
  style: {
91
288
  fontWeight: "normal",
92
289
  color: "#64748b",
93
290
  fontSize: "11px"
94
291
  },
95
292
  component: "div",
96
- children: formatDate(date)
293
+ className: "uploadinDetails",
294
+ children: [uploadStatus?.isUploading && /*#__PURE__*/_jsxs(_Fragment, {
295
+ children: [/*#__PURE__*/_jsx(Typography, {
296
+ sx: {
297
+ fontSize: 12,
298
+ color: "#64748b"
299
+ },
300
+ children: `${formatFileSize(fileSize)}`
301
+ }), /*#__PURE__*/_jsx(CircularProgress, {
302
+ variant: "determinate",
303
+ value: uploadStatus?.uploadPercentage ?? 0,
304
+ size: 20,
305
+ thickness: 5
306
+ }), /*#__PURE__*/_jsx(Typography, {
307
+ sx: {
308
+ fontSize: 12,
309
+ color: "#64748b"
310
+ },
311
+ children: `${uploadStatus?.uploadPercentage?.toFixed(0) ?? 0}%`
312
+ })]
313
+ }), !uploadStatus?.isUploading && formatDate(date)]
97
314
  })]
315
+ }), uploadStatus?.isUploading && /*#__PURE__*/_jsx(IconButton, {
316
+ onClick: cancelUpload,
317
+ sx: {
318
+ position: "absolute",
319
+ right: 4,
320
+ top: 4
321
+ },
322
+ "aria-label": "Cancel upload",
323
+ size: "small",
324
+ className: "cancelBtn",
325
+ children: /*#__PURE__*/_jsx(HighlightOffRoundedIcon, {})
98
326
  })]
99
327
  }), /*#__PURE__*/_jsx("span", {
100
328
  contentEditable: false,
@@ -4,6 +4,7 @@ import ToolbarIcon from "../../common/ToolbarIcon";
4
4
  import Icon from "../../common/Icon";
5
5
  import ImageSelector from "../../common/ImageSelector/ImageSelector";
6
6
  import { insertAttachments } from "../../utils/attachments";
7
+ import { insertUploadStatusNodeForAttachment } from "../../service/fileupload";
7
8
  import { jsx as _jsx } from "react/jsx-runtime";
8
9
  import { Fragment as _Fragment } from "react/jsx-runtime";
9
10
  import { jsxs as _jsxs } from "react/jsx-runtime";
@@ -20,10 +21,16 @@ const AttachmentsButton = props => {
20
21
  const handleClick = () => {
21
22
  SetOpen(true);
22
23
  };
23
- const onSelectImage = url => {
24
- insertAttachments(editor, {
25
- url
26
- });
24
+ const onSelectImage = async url => {
25
+ // Check if this is a recent upload (has source "recent") or manual URL entry (isUpload === false)
26
+ if (!url?.isUpload && url?.embedURL) {
27
+ await insertAttachments(editor, {
28
+ url: url?.embedURL,
29
+ source: url?.source // Pass the source information (will be "recent" for recent uploads)
30
+ }, customProps);
31
+ } else {
32
+ insertUploadStatusNodeForAttachment(editor, url?.file);
33
+ }
27
34
  handleClose();
28
35
  };
29
36
  const handleClose = () => {
@@ -9,6 +9,8 @@ import { WorkflowIcon } from "../../common/iconslist";
9
9
  import { getTRBLBreakPoints, getBreakPointsValue, groupByBreakpoint } from "../../helper/theme";
10
10
  import { handleLinkType, windowVar } from "../../utils/helper";
11
11
  import LinkSettings from "../../common/LinkSettings";
12
+ import { useEditorTheme } from "../../hooks/useEditorTheme";
13
+ import { getTheme } from "../../theme";
12
14
  import Icon from "../../common/Icon";
13
15
  import { useEditorContext } from "../../hooks/useMouseMove";
14
16
  import useCommonStyle from "../../commonStyle";
@@ -35,16 +37,17 @@ const EditorButton = props => {
35
37
  } = customProps;
36
38
  const editor = useSlateStatic();
37
39
  const path = ReactEditor.findPath(editor, element);
38
-
39
- // Helper function to detect if a color value is a gradient
40
- const isGradientColor = color => {
41
- return color && typeof color === "string" && color.includes("gradient");
42
- };
43
40
  const [edit, setEdit] = useState(false);
44
41
  const [openNav, setOpenNav] = useState(false);
45
42
  const [openMoreOptions, setOpenMoreOptions] = useState(false);
46
43
  const [, setIconLoaded] = useState(false);
47
44
  const classes = useCommonStyle(appTheme);
45
+ const {
46
+ theme: selectedTheme
47
+ } = useEditorTheme();
48
+ const {
49
+ buttonTheme
50
+ } = getTheme(selectedTheme);
48
51
  const {
49
52
  label,
50
53
  bgColor,
@@ -58,8 +61,8 @@ const EditorButton = props => {
58
61
  fontFamily,
59
62
  textColorHover,
60
63
  bgColorHover,
64
+ // buttonIcon,
61
65
  borderColorHover,
62
- buttonIcon,
63
66
  iconPosition = "start",
64
67
  borderStyle,
65
68
  borderWidth,
@@ -80,10 +83,8 @@ const EditorButton = props => {
80
83
  };
81
84
  const isTrigger = linkType === "nextTrigger" || linkType === "prevTrigger";
82
85
  const refURl = isTrigger ? buttonLink?.url : url;
86
+ const buttonIcon = element?.buttonIcon || buttonTheme?.buttonIcon;
83
87
  const BtnIcon = buttonIcon ? buttonIcon : null;
84
-
85
- // Check if borderColor is a gradient
86
- const isBorderGradient = isGradientColor(borderColor);
87
88
  windowVar.lastButtonProps = element;
88
89
  const handleTrigger = async () => {
89
90
  if (!readOnly) {
@@ -209,32 +210,6 @@ const EditorButton = props => {
209
210
  ...getTRBLBreakPoints(bannerSpacing)
210
211
  }
211
212
  }, theme);
212
- const btnSp2 = groupByBreakpoint({
213
- borderRadius: {
214
- ...getBreakPointsValue(borderRadius || {}, null, "overrideBorderRadius", true)
215
- }
216
- }, theme);
217
- const buttonBoxSx = {
218
- position: "relative",
219
- display: "inline-block",
220
- ...btnSp2,
221
- ...(isBorderGradient ? {
222
- padding: borderWidth !== undefined ? borderWidth : borderColor ? "1px" : "0px",
223
- background: borderColor,
224
- backgroundClip: "padding-box, border-box",
225
- boxSizing: "border-box",
226
- "&:hover": {
227
- background: borderColorHover || borderColor
228
- }
229
- } : {
230
- borderWidth: borderWidth !== undefined ? borderWidth : borderColor ? "1px" : "0px",
231
- borderStyle: borderStyle || "solid",
232
- borderColor: borderColor || "transparent",
233
- "&:hover": {
234
- borderColor: borderColorHover || borderColor || "transparent"
235
- }
236
- })
237
- };
238
213
  const pSp = groupByBreakpoint({
239
214
  display: {
240
215
  xs: xsHidden ? "none" : "inline-block",
@@ -293,19 +268,20 @@ const EditorButton = props => {
293
268
  },
294
269
  position: "relative"
295
270
  },
296
- children: /*#__PURE__*/_jsxs(Box, {
297
- component: "span",
298
- sx: buttonBoxSx,
271
+ children: /*#__PURE__*/_jsxs("span", {
272
+ style: {
273
+ position: "relative",
274
+ display: "inline-block"
275
+ },
299
276
  children: [/*#__PURE__*/_jsxs(Box, {
277
+ className: `btn textAlign-${tAlign} button theme-element`,
300
278
  ref: buttonRef,
301
- className: `btn textAlign-${tAlign}`,
302
279
  sx: {
303
280
  textDecoration: "none",
304
- background: bgColor || "rgb(30, 75, 122)",
281
+ borderBlockStyle: "solid",
282
+ borderWidth: borderWidth !== undefined ? borderWidth : borderColor || borderColorHover ? "1px" : "0px",
305
283
  ...btnSp,
306
- color: `${textColor || "#FFFFFF"}`,
307
- fontSize: textSize || "inherit",
308
- fontFamily: fontFamily || "PoppinsRegular",
284
+ borderStyle: borderStyle || "solid",
309
285
  display: "inline-flex",
310
286
  alignItems: "center",
311
287
  position: "relative",
@@ -316,15 +292,27 @@ const EditorButton = props => {
316
292
  "&:hover": {
317
293
  color: `${textColorHover || textColor || "#FFFFFF"}`,
318
294
  background: bgColorHover || bgColor || "rgb(30, 75, 122)",
295
+ borderColor: borderColorHover || borderColor || "transparent",
319
296
  "& .element-toolbar": {
320
297
  display: "flex"
321
298
  }
299
+ },
300
+ color: textColor ? `${textColor} !important` : "#FFFFFF",
301
+ fontSize: textSize ? `${textSize}px !important` : "inherit",
302
+ fontFamily: fontFamily ? `${fontFamily} !important` : "PoppinsRegular",
303
+ background: `${bgColor} !important`,
304
+ borderColor: `${borderColor} !important`,
305
+ borderRadius: {
306
+ ...getBreakPointsValue(borderRadius || buttonTheme?.borderRadius || {}, null, "overrideBorderRadius", true)
307
+ },
308
+ padding: {
309
+ ...getTRBLBreakPoints(bannerSpacing || buttonTheme?.bannerSpacing || {})
322
310
  }
323
311
  },
324
312
  ...buttonProps,
325
313
  children: [BtnIcon && iconPosition === "start" && /*#__PURE__*/_jsx(MUIIcon, {
326
314
  ...muiIconProps
327
- }), label || translation("My Button 12"), BtnIcon && iconPosition === "end" && /*#__PURE__*/_jsx(MUIIcon, {
315
+ }), label || translation("My Button"), BtnIcon && iconPosition === "end" && /*#__PURE__*/_jsx(MUIIcon, {
328
316
  ...muiIconProps
329
317
  })]
330
318
  }), !readOnly && buttonRef?.current && /*#__PURE__*/_jsx(Popper, {
@@ -1,11 +1,15 @@
1
1
  import React, { useState } from "react";
2
- import { Box, IconButton, Popover } from "@mui/material";
2
+ import { Box, IconButton, Popover, Typography, useTheme } from "@mui/material";
3
3
  import KeyboardArrowDownRoundedIcon from "@mui/icons-material/KeyboardArrowDownRounded";
4
4
  import Button from "../../common/Button";
5
5
  import { colors } from "./defaultColors";
6
6
  import ColorPicker from "./colorPicker.svg";
7
+ import { useSlateStatic } from "slate-react";
8
+ import { Transforms } from "slate";
9
+ import { useEditorContext } from "../../hooks/useMouseMove";
7
10
  import { jsx as _jsx } from "react/jsx-runtime";
8
11
  import { jsxs as _jsxs } from "react/jsx-runtime";
12
+ import { Fragment as _Fragment } from "react/jsx-runtime";
9
13
  let c = [];
10
14
  const ColorChunks = (recentColors = []) => [...recentColors, ...colors].reduce((a, b, i) => {
11
15
  if (i % 7 === 0) {
@@ -32,8 +36,8 @@ const SingleColorButton = ({
32
36
  width: "100%",
33
37
  display: "flex",
34
38
  alignItems: "center",
35
- padding: padding || "8px 0px",
36
- justifyContent: "center"
39
+ padding: padding || "8px 0px"
40
+ // justifyContent: "center",
37
41
  },
38
42
  children: [crs.map(m => /*#__PURE__*/_jsx(Button, {
39
43
  onClick: handleSelect(m),
@@ -110,12 +114,18 @@ const ColorButtons = props => {
110
114
  openColorTool,
111
115
  onClose,
112
116
  onColorPickerClick,
117
+ disableEditTheme,
113
118
  defaultColors = []
114
119
  } = props;
115
120
  const [row1, ...restRows] = ColorChunks([]);
116
121
  const [anchorEl, setAnchorEl] = useState(null);
117
122
  const open = Boolean(anchorEl);
118
123
  const firstRow = defaultColors?.length ? defaultColors : row1;
124
+ const theme = useTheme();
125
+ const editor = useSlateStatic();
126
+ const {
127
+ setOpenTheme
128
+ } = useEditorContext();
119
129
  const handleMore = e => {
120
130
  setAnchorEl(e.currentTarget);
121
131
  };
@@ -128,6 +138,7 @@ const ColorButtons = props => {
128
138
  const handleSelect = color => () => {
129
139
  onSelect(color);
130
140
  };
141
+ const colorVars = theme?.vars?.colors || {};
131
142
  return /*#__PURE__*/_jsxs(Box, {
132
143
  component: "span",
133
144
  sx: classes.colorButtons,
@@ -144,7 +155,7 @@ const ColorButtons = props => {
144
155
  activeColor: activeColor
145
156
  }, `si_btn_row1_${m}_${i}`);
146
157
  })
147
- }), /*#__PURE__*/_jsxs(Popover, {
158
+ }), /*#__PURE__*/_jsx(Popover, {
148
159
  open: open || openColorTool,
149
160
  anchorEl: anchorEl || openColorTool,
150
161
  onClose: handleClose,
@@ -158,9 +169,40 @@ const ColorButtons = props => {
158
169
  },
159
170
  sx: classes.colorPopper,
160
171
  className: "colorPopper",
161
- children: [/*#__PURE__*/_jsx(Box, {
172
+ children: /*#__PURE__*/_jsxs(Box, {
162
173
  sx: classes.colorButtonsInner,
163
- children: restRows.map((m, i) => {
174
+ children: [Object.values(colorVars)?.length ? /*#__PURE__*/_jsxs(_Fragment, {
175
+ children: [/*#__PURE__*/_jsxs(Box, {
176
+ component: "div",
177
+ className: "singleColorTitleWrapper",
178
+ children: [/*#__PURE__*/_jsx(Typography, {
179
+ variant: "subtitle2",
180
+ children: "Theme colours"
181
+ }), disableEditTheme ? null : /*#__PURE__*/_jsx("div", {
182
+ className: "editBtn",
183
+ onClick: () => {
184
+ Transforms.deselect(editor, {
185
+ at: editor.selection
186
+ });
187
+ handleClose();
188
+ setOpenTheme("editThemeColor");
189
+ },
190
+ children: "Edit"
191
+ })]
192
+ }), /*#__PURE__*/_jsx(SingleColorButton, {
193
+ crs: Object.values(colorVars),
194
+ handleSelect: handleSelect,
195
+ classes: classes,
196
+ activeColor: activeColor
197
+ })]
198
+ }) : null, /*#__PURE__*/_jsx(Box, {
199
+ component: "div",
200
+ className: "singleColorTitleWrapper",
201
+ children: /*#__PURE__*/_jsx(Typography, {
202
+ variant: "subtitle2",
203
+ children: "Custom colour"
204
+ })
205
+ }), restRows.map((m, i) => {
164
206
  return /*#__PURE__*/_jsx(SingleColorButton, {
165
207
  id: `p2_${id}`,
166
208
  crs: m,
@@ -169,14 +211,19 @@ const ColorButtons = props => {
169
211
  classes: classes,
170
212
  activeColor: activeColor
171
213
  }, `si_btn_${m}_${i}`);
172
- })
173
- }), forMiniTool ? /*#__PURE__*/_jsx(IconButton, {
174
- onClick: onColorPickerClick,
175
- children: /*#__PURE__*/_jsx("img", {
176
- src: ColorPicker,
177
- alt: "color wheel"
178
- })
179
- }) : null]
214
+ }), forMiniTool ? /*#__PURE__*/_jsx(IconButton, {
215
+ onClick: onColorPickerClick,
216
+ style: {
217
+ alignSelf: "start",
218
+ margin: "6px",
219
+ padding: "0px"
220
+ },
221
+ children: /*#__PURE__*/_jsx("img", {
222
+ src: ColorPicker,
223
+ alt: "color wheel"
224
+ })
225
+ }) : null]
226
+ })
180
227
  })]
181
228
  });
182
229
  };
@@ -60,4 +60,28 @@
60
60
  padding: 0 15px !important;
61
61
  width: 60px !important;
62
62
  flex-shrink: 0;
63
- }
63
+ }
64
+
65
+
66
+ .singleColorTitleWrapper {
67
+ display: flex;
68
+ justify-content: space-between;
69
+ align-items: center;
70
+ padding: 10px;
71
+ width: 100%;
72
+ border-bottom: 1px solid #DCE4EC;
73
+ }
74
+
75
+ .singleColorTitleWrapper .MuiTypography-root {
76
+ font-weight: 600;
77
+ }
78
+
79
+ .singleColorTitleWrapper .editBtn {
80
+ text-transform: none;
81
+ color: #2563EB;
82
+ text-decoration: underline;
83
+ padding: 0px;
84
+ min-width: unset;
85
+ cursor: pointer;
86
+ font-size: 14px;
87
+ }