@flozy/editor 11.2.2 → 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 +22 -7
- 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 +4 -2
- 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 +8 -4
- 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";
|
|
@@ -40,6 +42,12 @@ const EditorButton = props => {
|
|
|
40
42
|
const [openMoreOptions, setOpenMoreOptions] = useState(false);
|
|
41
43
|
const [, setIconLoaded] = useState(false);
|
|
42
44
|
const classes = useCommonStyle(appTheme);
|
|
45
|
+
const {
|
|
46
|
+
theme: selectedTheme
|
|
47
|
+
} = useEditorTheme();
|
|
48
|
+
const {
|
|
49
|
+
buttonTheme
|
|
50
|
+
} = getTheme(selectedTheme);
|
|
43
51
|
const {
|
|
44
52
|
label,
|
|
45
53
|
bgColor,
|
|
@@ -53,8 +61,8 @@ const EditorButton = props => {
|
|
|
53
61
|
fontFamily,
|
|
54
62
|
textColorHover,
|
|
55
63
|
bgColorHover,
|
|
64
|
+
// buttonIcon,
|
|
56
65
|
borderColorHover,
|
|
57
|
-
buttonIcon,
|
|
58
66
|
iconPosition = "start",
|
|
59
67
|
borderStyle,
|
|
60
68
|
borderWidth,
|
|
@@ -75,6 +83,7 @@ const EditorButton = props => {
|
|
|
75
83
|
};
|
|
76
84
|
const isTrigger = linkType === "nextTrigger" || linkType === "prevTrigger";
|
|
77
85
|
const refURl = isTrigger ? buttonLink?.url : url;
|
|
86
|
+
const buttonIcon = element?.buttonIcon || buttonTheme?.buttonIcon;
|
|
78
87
|
const BtnIcon = buttonIcon ? buttonIcon : null;
|
|
79
88
|
windowVar.lastButtonProps = element;
|
|
80
89
|
const handleTrigger = async () => {
|
|
@@ -265,19 +274,14 @@ const EditorButton = props => {
|
|
|
265
274
|
display: "inline-block"
|
|
266
275
|
},
|
|
267
276
|
children: [/*#__PURE__*/_jsxs(Box, {
|
|
277
|
+
className: `btn textAlign-${tAlign} button theme-element`,
|
|
268
278
|
ref: buttonRef,
|
|
269
|
-
className: `btn textAlign-${tAlign}`,
|
|
270
279
|
sx: {
|
|
271
280
|
textDecoration: "none",
|
|
272
|
-
background: bgColor || "rgb(30, 75, 122)",
|
|
273
281
|
borderBlockStyle: "solid",
|
|
274
|
-
borderColor: borderColor || "transparent",
|
|
275
282
|
borderWidth: borderWidth !== undefined ? borderWidth : borderColor || borderColorHover ? "1px" : "0px",
|
|
276
283
|
...btnSp,
|
|
277
284
|
borderStyle: borderStyle || "solid",
|
|
278
|
-
color: `${textColor || "#FFFFFF"}`,
|
|
279
|
-
fontSize: textSize || "inherit",
|
|
280
|
-
fontFamily: fontFamily || "PoppinsRegular",
|
|
281
285
|
display: "inline-flex",
|
|
282
286
|
alignItems: "center",
|
|
283
287
|
position: "relative",
|
|
@@ -292,6 +296,17 @@ const EditorButton = props => {
|
|
|
292
296
|
"& .element-toolbar": {
|
|
293
297
|
display: "flex"
|
|
294
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 || {})
|
|
295
310
|
}
|
|
296
311
|
},
|
|
297
312
|
...buttonProps,
|
|
@@ -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
|
+
}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import React, { useState } from "react";
|
|
2
2
|
import { ReactEditor } from "slate-react";
|
|
3
|
-
import
|
|
4
|
-
import { IconButton, Tooltip, Box, Popover } from "@mui/material";
|
|
3
|
+
import { IconButton, Tooltip, Box, Popover, useTheme } from "@mui/material";
|
|
5
4
|
import { addMarkData, activeMark } from "../../utils/SlateUtilityFunctions";
|
|
6
5
|
import ColorButtons from "./ColorButtons";
|
|
7
6
|
import ColorPickerStyles from "./Styles";
|
|
8
7
|
import colorWheel from "./colorWheel.png";
|
|
9
8
|
import "./ColorPicker.css";
|
|
10
9
|
import { useEditorContext } from "../../hooks/useMouseMove";
|
|
10
|
+
import CustomColorPicker from "../../common/CustomColorPicker";
|
|
11
|
+
import { getSelectedElementColor } from "../../utils/helper";
|
|
11
12
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
12
13
|
import { Fragment as _Fragment } from "react/jsx-runtime";
|
|
13
14
|
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
@@ -25,7 +26,8 @@ const ColorPicker = props => {
|
|
|
25
26
|
classes,
|
|
26
27
|
forMiniTool,
|
|
27
28
|
openColorTool,
|
|
28
|
-
closeColorTool
|
|
29
|
+
closeColorTool,
|
|
30
|
+
type
|
|
29
31
|
} = props;
|
|
30
32
|
const {
|
|
31
33
|
theme
|
|
@@ -34,6 +36,7 @@ const ColorPicker = props => {
|
|
|
34
36
|
const [anchorEl, setAnchorEl] = useState(null);
|
|
35
37
|
const open = Boolean(anchorEl);
|
|
36
38
|
const pickerStyles = ColorPickerStyles(theme);
|
|
39
|
+
const muiTheme = useTheme();
|
|
37
40
|
const onOpen = e => {
|
|
38
41
|
e.preventDefault();
|
|
39
42
|
setAnchorEl(e.currentTarget);
|
|
@@ -58,7 +61,7 @@ const ColorPicker = props => {
|
|
|
58
61
|
setAnchorEl(null);
|
|
59
62
|
setSelection(null);
|
|
60
63
|
};
|
|
61
|
-
const activeColor = activeMark(editor, format) || DEFAULT_COLOR[format];
|
|
64
|
+
const activeColor = type === "textColor" ? getSelectedElementColor(editor, format, muiTheme) : activeMark(editor, format) || DEFAULT_COLOR[format];
|
|
62
65
|
return /*#__PURE__*/_jsxs(_Fragment, {
|
|
63
66
|
children: [forMiniTool ? null : /*#__PURE__*/_jsx(Tooltip, {
|
|
64
67
|
title: title,
|
|
@@ -96,10 +99,10 @@ const ColorPicker = props => {
|
|
|
96
99
|
horizontal: "top"
|
|
97
100
|
},
|
|
98
101
|
sx: classes.colorPickerPopup,
|
|
99
|
-
children: /*#__PURE__*/_jsx(
|
|
102
|
+
children: /*#__PURE__*/_jsx(CustomColorPicker, {
|
|
100
103
|
gradient: true,
|
|
101
|
-
|
|
102
|
-
|
|
104
|
+
onChange: handleFormSubmit,
|
|
105
|
+
color: activeColor
|
|
103
106
|
})
|
|
104
107
|
})]
|
|
105
108
|
});
|
|
@@ -20,24 +20,26 @@ const ColorPickerStyles = theme => ({
|
|
|
20
20
|
background: `${theme?.palette?.editor?.miniToolBarBackground}`,
|
|
21
21
|
border: `1px solid ${theme?.palette?.editor?.miniToolBarBorder} !important`,
|
|
22
22
|
borderRadius: "7px !important",
|
|
23
|
-
padding: "0px
|
|
24
|
-
|
|
23
|
+
padding: "0px 10px",
|
|
24
|
+
"@media only screen and (max-width: 600px)": {
|
|
25
25
|
marginTop: "-40px"
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
28
|
},
|
|
29
29
|
colorButtonSingle: {
|
|
30
|
+
border: "1.5px solid #DCE4EC !important",
|
|
30
31
|
"&.active": {
|
|
31
|
-
"&:before": {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
}
|
|
32
|
+
// "&:before": {
|
|
33
|
+
// content: '" "',
|
|
34
|
+
// position: "absolute",
|
|
35
|
+
// top: "-4px",
|
|
36
|
+
// left: "-4px",
|
|
37
|
+
// width: "calc(100% + 8px)",
|
|
38
|
+
// height: "calc(100% + 8px)",
|
|
39
|
+
// border: "2px solid #2563EB",
|
|
40
|
+
// borderRadius: "50%",
|
|
41
|
+
// },
|
|
42
|
+
outline: "2px solid #2563EB"
|
|
41
43
|
}
|
|
42
44
|
},
|
|
43
45
|
colorButtonsInner: {
|
|
@@ -59,7 +61,7 @@ const ColorPickerStyles = theme => ({
|
|
|
59
61
|
width: "24px",
|
|
60
62
|
height: "24px",
|
|
61
63
|
margin: "0px 4px",
|
|
62
|
-
border: "
|
|
64
|
+
border: "1.5px solid #DCE4EC"
|
|
63
65
|
}
|
|
64
66
|
},
|
|
65
67
|
colorPickerIcon: {
|