@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.
- package/dist/Editor/ChatEditor.js +7 -7
- package/dist/Editor/CommonEditor.js +86 -24
- package/dist/Editor/DialogWrapper.js +31 -25
- package/dist/Editor/Editor.css +37 -4
- package/dist/Editor/Elements/AI/PopoverAIInput.js +11 -3
- package/dist/Editor/Elements/AppHeader/AppHeader.js +3 -3
- package/dist/Editor/Elements/Attachments/AttachmentStyles.js +16 -0
- package/dist/Editor/Elements/Attachments/Attachments.js +239 -11
- package/dist/Editor/Elements/Attachments/AttachmentsButton.js +11 -4
- package/dist/Editor/Elements/Button/EditorButton.js +32 -44
- package/dist/Editor/Elements/Color Picker/ColorButtons.js +61 -14
- package/dist/Editor/Elements/Color Picker/ColorPicker.css +25 -1
- package/dist/Editor/Elements/Color Picker/ColorPicker.js +10 -7
- package/dist/Editor/Elements/Color Picker/Styles.js +15 -13
- package/dist/Editor/Elements/DataView/Layouts/DataTypes/Components/Select.js +134 -55
- package/dist/Editor/Elements/DataView/Layouts/DataTypes/Components/SelectV1.js +7 -8
- package/dist/Editor/Elements/DataView/Layouts/DataTypes/PersonType.js +8 -3
- package/dist/Editor/Elements/DataView/Layouts/Options/EditProperty.js +1 -1
- package/dist/Editor/Elements/DataView/Layouts/TableStyles.js +1 -1
- package/dist/Editor/Elements/Embed/Embed.js +37 -43
- package/dist/Editor/Elements/Embed/Image.js +307 -26
- package/dist/Editor/Elements/Embed/Video.js +355 -35
- package/dist/Editor/Elements/EmbedScript/EmbedScriptPopup.js +9 -6
- package/dist/Editor/Elements/EmbedScript/styles.js +17 -1
- package/dist/Editor/Elements/Form/FormField.js +1 -1
- package/dist/Editor/Elements/Form/Workflow/Styles.js +25 -22
- package/dist/Editor/Elements/Form/Workflow/constant.js +25 -1
- package/dist/Editor/Elements/FreeGrid/FreeGrid.js +37 -76
- package/dist/Editor/Elements/FreeGrid/FreeGridBox.js +9 -5
- package/dist/Editor/Elements/FreeGrid/FreeGridItem.js +3 -1
- package/dist/Editor/Elements/FreeGrid/helper.js +194 -0
- package/dist/Editor/Elements/FreeGrid/styles.js +15 -0
- package/dist/Editor/Elements/Grid/GridItem.js +1 -1
- package/dist/Editor/Elements/PageSettings/PageSettingsButton.js +2 -1
- package/dist/Editor/Elements/Table/Table.js +2 -1
- package/dist/Editor/Elements/Table/TableCell.js +10 -3
- package/dist/Editor/Elements/Title/title.js +4 -5
- package/dist/Editor/Elements/TopBanner/TopBanner.js +4 -2
- package/dist/Editor/Elements/TopBanner/TopBannerButton.js +5 -3
- package/dist/Editor/Styles/EditorStyles.js +19 -5
- package/dist/Editor/Toolbar/FormatTools/Dropdown.js +27 -3
- package/dist/Editor/Toolbar/FormatTools/FontFamilyAutocomplete.js +4 -3
- package/dist/Editor/Toolbar/FormatTools/MarkButton.js +2 -2
- package/dist/Editor/Toolbar/FormatTools/TextSize.js +33 -29
- package/dist/Editor/Toolbar/Mini/MiniToolbar.js +2 -1
- package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/MiniColorPicker.js +3 -1
- package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/SelectFontSize.js +25 -23
- package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/SelectTypography.js +167 -42
- package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/index.js +15 -5
- package/dist/Editor/Toolbar/PopupTool/PopperHeader.js +2 -1
- package/dist/Editor/Toolbar/PopupTool/PopupToolStyle.js +65 -7
- package/dist/Editor/Toolbar/PopupTool/TextFormat.js +66 -12
- package/dist/Editor/Toolbar/PopupTool/ThemeTextFormat.js +439 -0
- package/dist/Editor/Toolbar/PopupTool/index.js +6 -4
- package/dist/Editor/Toolbar/toolbarGroups.js +48 -6
- package/dist/Editor/assets/svg/BackIcon.js +18 -0
- package/dist/Editor/assets/svg/ThemeIcons.js +293 -0
- package/dist/Editor/common/ColorPickerButton.js +38 -19
- package/dist/Editor/common/CustomColorPicker/index.js +130 -0
- package/dist/Editor/common/CustomColorPicker/style.js +53 -0
- package/dist/Editor/common/CustomDialog2/index.js +94 -0
- package/dist/Editor/common/CustomDialog2/style.js +67 -0
- package/dist/Editor/common/CustomSelect.js +43 -0
- package/dist/Editor/common/DnD/DragHandleButton.js +1 -1
- package/dist/Editor/common/FontLoader/FontLoader.js +1 -0
- package/dist/Editor/common/Icon.js +28 -0
- package/dist/Editor/common/ImageSelector/ImageSelector.js +66 -13
- package/dist/Editor/common/ImageSelector/Options/ChooseAssets.js +1 -1
- package/dist/Editor/common/ImageSelector/Options/RecentUploads.js +483 -0
- package/dist/Editor/common/ImageSelector/Options/Upload.js +26 -11
- package/dist/Editor/common/ImageSelector/Styles.js +3 -9
- package/dist/Editor/common/RnD/ElementSettings/OtherSettings/Settings.js +2 -1
- package/dist/Editor/common/RnD/ElementSettings/Settings/AppHeaderSettings.js +3 -2
- package/dist/Editor/common/RnD/ElementSettings/Settings/BoxSettings.js +3 -2
- package/dist/Editor/common/RnD/ElementSettings/Settings/ButtonSettings.js +3 -2
- package/dist/Editor/common/RnD/ElementSettings/Settings/CodeSettings.js +3 -2
- package/dist/Editor/common/RnD/ElementSettings/Settings/FormSettings.js +3 -2
- package/dist/Editor/common/RnD/ElementSettings/Settings/ImageSettings.js +20 -7
- package/dist/Editor/common/RnD/ElementSettings/Settings/TableSettings.js +3 -2
- package/dist/Editor/common/RnD/ElementSettings/Settings/TextSettings.js +2 -0
- package/dist/Editor/common/RnD/ElementSettings/Settings/VideoSettings.js +20 -7
- package/dist/Editor/common/RnD/GuideLines/styles.js +1 -1
- package/dist/Editor/common/RnD/Theme/MainThemeProvider.js +17 -0
- package/dist/Editor/common/RnD/Theme/ViewportStimulator.js +6 -3
- package/dist/Editor/common/RnD/Utils/gridDropItem.js +28 -11
- package/dist/Editor/common/RnD/Utils/index.js +3 -1
- package/dist/Editor/common/RnD/VirtualElement/VirtualTextElement.js +52 -63
- package/dist/Editor/common/RnD/VirtualElement/helper.js +248 -68
- package/dist/Editor/common/RnD/VirtualElement/styles.js +22 -0
- package/dist/Editor/common/RnD/index.js +61 -14
- package/dist/Editor/common/Shorthands/elements.js +55 -3
- package/dist/Editor/common/StyleBuilder/buttonStyle.js +5 -15
- package/dist/Editor/common/StyleBuilder/embedVideoStyle.js +4 -0
- package/dist/Editor/common/StyleBuilder/fieldStyle.js +1 -0
- package/dist/Editor/common/StyleBuilder/fieldTypes/backgroundImage.js +13 -3
- package/dist/Editor/common/StyleBuilder/fieldTypes/bannerSpacing.js +12 -2
- package/dist/Editor/common/StyleBuilder/fieldTypes/borderRadius.js +15 -7
- package/dist/Editor/common/StyleBuilder/fieldTypes/color.js +36 -10
- package/dist/Editor/common/StyleBuilder/fieldTypes/fontSize.js +13 -4
- package/dist/Editor/common/StyleBuilder/fieldTypes/menusArray.js +2 -0
- package/dist/Editor/common/StyleBuilder/fieldTypes/text.js +16 -4
- package/dist/Editor/common/StyleBuilder/fieldTypes/textOptions.js +15 -7
- package/dist/Editor/common/StyleBuilder/formStyle.js +19 -13
- package/dist/Editor/common/StyleBuilder/index.js +10 -19
- package/dist/Editor/common/Uploader.js +118 -17
- package/dist/Editor/common/UploaderWithProgress.js +183 -0
- package/dist/Editor/common/iconslist.js +21 -0
- package/dist/Editor/commonStyle.js +111 -53
- package/dist/Editor/helper/index.js +4 -1
- package/dist/Editor/helper/theme.js +203 -2
- package/dist/Editor/hooks/useEditorTheme.js +153 -0
- package/dist/Editor/hooks/useMouseMove.js +12 -3
- package/dist/Editor/hooks/useTable.js +62 -1
- package/dist/Editor/hooks/useThemeValues.js +63 -0
- package/dist/Editor/plugins/withEmbeds.js +1 -1
- package/dist/Editor/plugins/withHTML.js +56 -3
- package/dist/Editor/plugins/withTable.js +1 -1
- package/dist/Editor/service/fileTracking.js +22 -0
- package/dist/Editor/service/fileupload.js +77 -0
- package/dist/Editor/theme/ThemeList.js +50 -173
- package/dist/Editor/theme/index.js +149 -0
- package/dist/Editor/themeSettings/ActiveTheme.js +82 -0
- package/dist/Editor/themeSettings/buttons/index.js +300 -0
- package/dist/Editor/themeSettings/buttons/style.js +23 -0
- package/dist/Editor/themeSettings/colorTheme/index.js +310 -0
- package/dist/Editor/themeSettings/colorTheme/style.js +81 -0
- package/dist/Editor/themeSettings/fonts/PreviewElement.js +121 -0
- package/dist/Editor/themeSettings/fonts/index.js +240 -0
- package/dist/Editor/themeSettings/fonts/style.js +62 -0
- package/dist/Editor/themeSettings/icons.js +60 -0
- package/dist/Editor/themeSettings/index.js +380 -0
- package/dist/Editor/themeSettings/style.js +299 -0
- package/dist/Editor/themeSettingsAI/icons.js +96 -0
- package/dist/Editor/themeSettingsAI/index.js +355 -0
- package/dist/Editor/themeSettingsAI/saveTheme.js +202 -0
- package/dist/Editor/themeSettingsAI/style.js +332 -0
- package/dist/Editor/utils/SlateUtilityFunctions.js +165 -40
- package/dist/Editor/utils/accordion.js +1 -1
- package/dist/Editor/utils/attachments.js +138 -2
- package/dist/Editor/utils/button.js +1 -17
- package/dist/Editor/utils/font.js +40 -37
- package/dist/Editor/utils/formfield.js +2 -2
- package/dist/Editor/utils/helper.js +101 -3
- package/dist/Editor/utils/insertAppHeader.js +8 -4
- package/package.json +1 -1
|
@@ -1,33 +1,226 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import
|
|
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
|
|
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:
|
|
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
|
-
|
|
89
|
-
|
|
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
|
-
|
|
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
|
-
|
|
25
|
-
|
|
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(
|
|
297
|
-
|
|
298
|
-
|
|
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
|
-
|
|
281
|
+
borderBlockStyle: "solid",
|
|
282
|
+
borderWidth: borderWidth !== undefined ? borderWidth : borderColor || borderColorHover ? "1px" : "0px",
|
|
305
283
|
...btnSp,
|
|
306
|
-
|
|
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
|
|
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__*/
|
|
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:
|
|
172
|
+
children: /*#__PURE__*/_jsxs(Box, {
|
|
162
173
|
sx: classes.colorButtonsInner,
|
|
163
|
-
children:
|
|
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
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
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
|
+
}
|