@flozy/editor 6.0.4 → 6.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Editor/CommonEditor.js +17 -15
- package/dist/Editor/Editor.css +3 -4
- package/dist/Editor/Elements/AI/PopoverAIInput.js +12 -2
- package/dist/Editor/Elements/Button/EditorButton.js +0 -1
- package/dist/Editor/Elements/DataView/DataView.js +3 -4
- package/dist/Editor/Elements/DataView/Layouts/DataTypes/NumberType.js +1 -5
- package/dist/Editor/Elements/DataView/Layouts/DataTypes/TextType.js +1 -5
- package/dist/Editor/Elements/DataView/Layouts/FilterView.js +19 -23
- package/dist/Editor/Elements/Form/Form.js +0 -1
- package/dist/Editor/Elements/FreeGrid/styles.js +0 -1
- package/dist/Editor/Elements/List/CheckList.js +1 -2
- package/dist/Editor/Elements/Search/SearchAttachment.js +0 -1
- package/dist/Editor/Elements/Search/SearchList.js +1 -8
- package/dist/Editor/Elements/SimpleText/index.js +7 -19
- package/dist/Editor/Elements/SimpleText/style.js +1 -5
- package/dist/Editor/Elements/Table/Table.js +15 -15
- package/dist/Editor/Elements/Table/TableCell.js +9 -14
- package/dist/Editor/MiniEditor.js +2 -4
- package/dist/Editor/Toolbar/PopupTool/AddTemplates.js +28 -37
- package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/SelectAlignment.js +1 -3
- package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/SelectFontSize.js +1 -1
- package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/SelectList.js +1 -3
- package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/SelectTypography.js +8 -3
- package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/index.js +3 -9
- package/dist/Editor/Toolbar/PopupTool/TemplateCard.js +1 -1
- package/dist/Editor/Toolbar/PopupTool/TextFormat.js +0 -45
- package/dist/Editor/Toolbar/PopupTool/index.js +29 -39
- package/dist/Editor/common/FontLoader/FontList.js +11 -11
- package/dist/Editor/common/FontLoader/FontLoader.js +75 -45
- package/dist/Editor/common/ImageSelector/Options/Upload.js +1 -1
- package/dist/Editor/common/ImageSelector/UploadStyles.js +1 -2
- package/dist/Editor/common/RnD/ElementSettings/styles.js +0 -1
- package/dist/Editor/common/RnD/SwitchViewport/SwitchViewport.js +0 -6
- package/dist/Editor/common/Section/index.js +60 -89
- package/dist/Editor/common/StyleBuilder/fieldTypes/index.js +1 -3
- package/dist/Editor/common/StyleBuilder/pageSettingsStyle.js +0 -4
- package/dist/Editor/commonStyle.js +0 -5
- package/dist/Editor/helper/deserialize/index.js +1 -1
- package/dist/Editor/helper/theme.js +1 -24
- package/dist/Editor/hooks/useEditorScroll.js +1 -1
- package/dist/Editor/hooks/useMouseMove.js +4 -6
- package/dist/Editor/plugins/withHTML.js +1 -7
- package/dist/Editor/utils/SlateUtilityFunctions.js +10 -11
- package/dist/Editor/utils/customHooks/useTableResize.js +1 -2
- package/dist/Editor/utils/helper.js +0 -41
- package/dist/Editor/utils/pageSettings.js +2 -14
- package/dist/Editor/utils/table.js +0 -21
- package/package.json +3 -3
- package/dist/Editor/common/StyleBuilder/fieldTypes/lineSpacing.js +0 -79
- package/dist/Editor/helper/ensureWrappedVariables.js +0 -28
@@ -4,7 +4,6 @@ import TemplateCard from "./TemplateCard";
|
|
4
4
|
import FullViewCard from "./FullViewCard";
|
5
5
|
import ButtonTemplateCard from "./ButtonTemplatesCard";
|
6
6
|
import { jsx as _jsx } from "react/jsx-runtime";
|
7
|
-
import { Fragment as _Fragment } from "react/jsx-runtime";
|
8
7
|
import { jsxs as _jsxs } from "react/jsx-runtime";
|
9
8
|
const CATEGORIES_SORT_INDEX = {
|
10
9
|
Brief: 1,
|
@@ -47,7 +46,7 @@ const ProgressBar = ({
|
|
47
46
|
alignItems: "center",
|
48
47
|
margin: 0,
|
49
48
|
padding: 0,
|
50
|
-
height: "
|
49
|
+
height: "50px",
|
51
50
|
overflow: "hidden"
|
52
51
|
},
|
53
52
|
children: /*#__PURE__*/_jsx(CircularProgress, {})
|
@@ -70,49 +69,41 @@ const AddTemplates = props => {
|
|
70
69
|
const [categories, setCategories] = useState([]);
|
71
70
|
const [category, setCategory] = useState("");
|
72
71
|
const [templates, setTemplates] = useState([]);
|
72
|
+
const [filteredTemplates, setFilteredTemplates] = useState([]);
|
73
73
|
useEffect(() => {
|
74
|
-
|
74
|
+
getTemplatesList();
|
75
75
|
}, []);
|
76
|
-
const
|
77
|
-
|
78
|
-
const categoryDB = await services("listCategory");
|
79
|
-
if (categoryDB?.data?.Template?.length > 0) {
|
80
|
-
setCategories(categoryDB.data.Template);
|
81
|
-
setCategory(categoryDB.data.Template[0]);
|
82
|
-
getTemplatesList(categoryDB.data.Template[0]);
|
83
|
-
}
|
84
|
-
setLoading(false);
|
76
|
+
const sortCategory = (a, b) => {
|
77
|
+
return (CATEGORIES_SORT_INDEX[a] || Infinity) - (CATEGORIES_SORT_INDEX[b] || Infinity);
|
85
78
|
};
|
86
|
-
const getTemplatesList = async
|
79
|
+
const getTemplatesList = async () => {
|
87
80
|
setLoading(true);
|
88
|
-
const result = await services("listTemplates", {
|
89
|
-
|
90
|
-
|
91
|
-
|
81
|
+
const result = await services("listTemplates", {});
|
82
|
+
const tempList = result?.data?.filter(f => f.type === "Template");
|
83
|
+
const lic = tempList?.reduce((a, b) => {
|
84
|
+
if (a.indexOf(b.category) < 0) {
|
85
|
+
a.push(b.category);
|
86
|
+
}
|
87
|
+
return a;
|
88
|
+
}, []).sort(sortCategory);
|
89
|
+
const ft = tempList?.filter(f => f.category === lic[0]);
|
90
|
+
setTemplates(tempList);
|
91
|
+
setCategories(lic);
|
92
|
+
setCategory(lic[0]);
|
93
|
+
setFilteredTemplates(ft);
|
92
94
|
setLoading(false);
|
93
95
|
};
|
94
96
|
const handleChange = (event, newValue) => {
|
95
|
-
setTemplates([]);
|
96
97
|
onSearch("");
|
97
98
|
setCategory(newValue);
|
98
|
-
|
99
|
+
setFilteredTemplates(templates.filter(f => f.category === newValue));
|
99
100
|
};
|
100
|
-
const onSelectTemplate = card =>
|
101
|
+
const onSelectTemplate = card => () => {
|
101
102
|
try {
|
102
|
-
|
103
|
-
data
|
104
|
-
} = await services("templateContent", {
|
105
|
-
id: card?.id
|
106
|
-
});
|
107
|
-
const content = data?.content;
|
108
|
-
if (content) {
|
109
|
-
editor.insertNode(JSON.parse(content));
|
110
|
-
} else {
|
111
|
-
console.log("No data found");
|
112
|
-
}
|
103
|
+
editor.insertNode(JSON.parse(card.content));
|
113
104
|
onClose();
|
114
105
|
} catch (err) {
|
115
|
-
console.log(
|
106
|
+
console.log(err);
|
116
107
|
}
|
117
108
|
};
|
118
109
|
const filterByTitle = f => {
|
@@ -182,16 +173,16 @@ const AddTemplates = props => {
|
|
182
173
|
data: categories,
|
183
174
|
handleChange: handleChange
|
184
175
|
})
|
185
|
-
}), /*#__PURE__*/
|
176
|
+
}), /*#__PURE__*/_jsxs(Grid, {
|
186
177
|
container: true,
|
187
178
|
spacing: 0,
|
188
179
|
className: `${fullScreen ? "fullscreen" : ""}`,
|
189
180
|
sx: classes.templateCardsWrpr,
|
190
|
-
children:
|
181
|
+
children: [/*#__PURE__*/_jsx(ProgressBar, {
|
191
182
|
loading: loading
|
192
|
-
})
|
193
|
-
|
194
|
-
})
|
183
|
+
}), filteredTemplates.filter(filterByTitle).map(m => {
|
184
|
+
return renderTemplate(m);
|
185
|
+
})]
|
195
186
|
})]
|
196
187
|
});
|
197
188
|
};
|
@@ -51,8 +51,7 @@ const alignmentOptions = [{
|
|
51
51
|
}];
|
52
52
|
function SelectAlignment({
|
53
53
|
editor,
|
54
|
-
classes
|
55
|
-
closeMainPopup
|
54
|
+
classes
|
56
55
|
}) {
|
57
56
|
const selected = useMemo(() => {
|
58
57
|
return alignmentOptions.find(t => isBlockActive(editor, t.value));
|
@@ -60,7 +59,6 @@ function SelectAlignment({
|
|
60
59
|
const onChange = (format, option) => {
|
61
60
|
if (option.type === "block") {
|
62
61
|
toggleBlock(editor, format);
|
63
|
-
closeMainPopup();
|
64
62
|
}
|
65
63
|
};
|
66
64
|
return /*#__PURE__*/_jsx(CustomSelectTool, {
|
@@ -68,8 +68,7 @@ const listOptions = [{
|
|
68
68
|
}];
|
69
69
|
function SelectList({
|
70
70
|
editor,
|
71
|
-
classes
|
72
|
-
closeMainPopup
|
71
|
+
classes
|
73
72
|
}) {
|
74
73
|
const selectedList = useMemo(() => {
|
75
74
|
return listOptions.find(t => isBlockActive(editor, t.value));
|
@@ -80,7 +79,6 @@ function SelectList({
|
|
80
79
|
} else if (option.type === "accordion") {
|
81
80
|
insertAccordion(editor);
|
82
81
|
}
|
83
|
-
closeMainPopup();
|
84
82
|
};
|
85
83
|
return /*#__PURE__*/_jsx(CustomSelectTool, {
|
86
84
|
options: listOptions,
|
@@ -125,6 +125,7 @@ function SelectTypography({
|
|
125
125
|
...upData
|
126
126
|
}
|
127
127
|
});
|
128
|
+
closeMainPopup();
|
128
129
|
};
|
129
130
|
const selectedBlock = useMemo(() => {
|
130
131
|
return typographyOptions.find(t => {
|
@@ -151,17 +152,21 @@ function SelectTypography({
|
|
151
152
|
toggleBlock(editor, format);
|
152
153
|
if (option.type === "block") {
|
153
154
|
// reset old font size
|
154
|
-
|
155
|
+
let updatedValue = !selectedBlock ? {} : {
|
156
|
+
xs: "16px",
|
157
|
+
sm: "16px",
|
158
|
+
md: "16px",
|
159
|
+
lg: "16px"
|
160
|
+
};
|
155
161
|
addMarkData(editor, {
|
156
162
|
format: "fontSize",
|
157
|
-
value:
|
163
|
+
value: updatedValue
|
158
164
|
});
|
159
165
|
} else if (option.type === "mark") {
|
160
166
|
const size = sizeMap[option.value] || "";
|
161
167
|
const [sizeInNumber] = size.split("px");
|
162
168
|
updateMarkData(Number(sizeInNumber));
|
163
169
|
}
|
164
|
-
closeMainPopup();
|
165
170
|
};
|
166
171
|
return /*#__PURE__*/_jsx(CustomSelectTool, {
|
167
172
|
options: typographyOptions,
|
@@ -14,7 +14,6 @@ import MiniColorPicker from "./MiniColorPicker";
|
|
14
14
|
import SelectAlignment from "./SelectAlignment";
|
15
15
|
import SelectFontSize from "./SelectFontSize";
|
16
16
|
import InfinityAITool from "./InfinityAITool";
|
17
|
-
import { viewSlateSelection } from "../../../utils/helper";
|
18
17
|
import { jsx as _jsx } from "react/jsx-runtime";
|
19
18
|
import { jsxs as _jsxs } from "react/jsx-runtime";
|
20
19
|
const DEFAULT_COLOR = {
|
@@ -61,15 +60,13 @@ const MiniTextFormat = props => {
|
|
61
60
|
className: "verticalLine"
|
62
61
|
}), /*#__PURE__*/_jsx(SelectList, {
|
63
62
|
classes: classes,
|
64
|
-
editor: editor
|
65
|
-
closeMainPopup: closeMainPopup
|
63
|
+
editor: editor
|
66
64
|
}), /*#__PURE__*/_jsx("div", {
|
67
65
|
className: "verticalLine mr-1"
|
68
66
|
}), /*#__PURE__*/_jsx(SelectAlignment, {
|
69
67
|
fontAlign: fontAlign,
|
70
68
|
classes: classes,
|
71
|
-
editor: editor
|
72
|
-
closeMainPopup: closeMainPopup
|
69
|
+
editor: editor
|
73
70
|
}), /*#__PURE__*/_jsx("div", {
|
74
71
|
className: "verticalLine mr-1"
|
75
72
|
}), /*#__PURE__*/_jsx(SelectFontSize, {
|
@@ -101,10 +98,7 @@ const MiniTextFormat = props => {
|
|
101
98
|
editor: editor,
|
102
99
|
customProps: customProps
|
103
100
|
}, link.id), /*#__PURE__*/_jsx(IconButton, {
|
104
|
-
onClick: e =>
|
105
|
-
viewSlateSelection();
|
106
|
-
setAnchorEl(document.getElementById("mini-text-editor-wrapper"));
|
107
|
-
},
|
101
|
+
onClick: e => setAnchorEl(document.getElementById("mini-text-editor-wrapper")),
|
108
102
|
className: `textSettingsIcon ${open ? "btnActive" : ""}`,
|
109
103
|
children: /*#__PURE__*/_jsx(TextToolIcon, {})
|
110
104
|
}), /*#__PURE__*/_jsx(Popper, {
|
@@ -47,7 +47,7 @@ const TemplateCard = props => {
|
|
47
47
|
}), /*#__PURE__*/_jsx(CardMedia, {
|
48
48
|
className: `template-card-media ${fullScreen ? "fullscreen" : ""}`,
|
49
49
|
component: "div",
|
50
|
-
image: m?.
|
50
|
+
image: m?.thumbnail,
|
51
51
|
alt: m?.title,
|
52
52
|
sx: classes.templateCardMedia
|
53
53
|
}), /*#__PURE__*/_jsx(PreviewAndSelect, {
|
@@ -14,8 +14,6 @@ import SelectSuperSubscript from "./MiniTextFormat/SelectSuperSubscript";
|
|
14
14
|
import { ColorResetIcon, TextDefaultStyleIcon } from "../../common/iconListV2";
|
15
15
|
import FontFamilyAutocomplete from "../FormatTools/FontFamilyAutocomplete";
|
16
16
|
import { useEditorContext } from "../../hooks/useMouseMove";
|
17
|
-
import LineSpacing from "../../common/StyleBuilder/fieldTypes/lineSpacing";
|
18
|
-
import { getPageSettings } from "../../utils/pageSettings";
|
19
17
|
import { jsx as _jsx } from "react/jsx-runtime";
|
20
18
|
import { jsxs as _jsxs } from "react/jsx-runtime";
|
21
19
|
const allTools = toolbarGroups.flat();
|
@@ -33,18 +31,10 @@ const TextFormat = props => {
|
|
33
31
|
const [anchorEl, setAnchorEl] = useState(null);
|
34
32
|
const [type, setType] = useState(null);
|
35
33
|
const open = Boolean(anchorEl);
|
36
|
-
const {
|
37
|
-
element: pageSt
|
38
|
-
} = getPageSettings(editor) || {};
|
39
|
-
const pageSettingLine = pageSt?.pageProps?.lineHeight;
|
40
34
|
const {
|
41
35
|
fontFamilies,
|
42
36
|
theme
|
43
37
|
} = useEditorContext();
|
44
|
-
const {
|
45
|
-
activeBreakPoint
|
46
|
-
} = useEditorContext();
|
47
|
-
const breakpoint = activeBreakPoint === "" ? "lg" : activeBreakPoint;
|
48
38
|
const fontWeight = allTools.find(f => f.format === "fontWeight");
|
49
39
|
const fontStyle = allTools.filter(f => f.type === "mark" && f.format !== "strikethrough" && f.format !== "superscript" && f.format !== "subscript");
|
50
40
|
const fontAlign = allTools.filter(f => f.format?.indexOf("align") >= 0);
|
@@ -61,8 +51,6 @@ const TextFormat = props => {
|
|
61
51
|
color: "",
|
62
52
|
bgColor: ""
|
63
53
|
};
|
64
|
-
let lineSpacingValue = activeMark(editor, 'lineHeight');
|
65
|
-
lineSpacingValue = lineSpacingValue?.[breakpoint] !== undefined ? lineSpacingValue : pageSettingLine;
|
66
54
|
const handleColorPicker = type => e => {
|
67
55
|
setType(type);
|
68
56
|
setAnchorEl(e.currentTarget);
|
@@ -103,13 +91,6 @@ const TextFormat = props => {
|
|
103
91
|
value
|
104
92
|
});
|
105
93
|
};
|
106
|
-
const handleLineSpacing = data => {
|
107
|
-
const [[format, value]] = Object.entries(data);
|
108
|
-
addMarkData(editor, {
|
109
|
-
format,
|
110
|
-
value
|
111
|
-
});
|
112
|
-
};
|
113
94
|
return /*#__PURE__*/_jsxs(Grid, {
|
114
95
|
container: true,
|
115
96
|
sx: classes.textFormatWrapper,
|
@@ -379,32 +360,6 @@ const TextFormat = props => {
|
|
379
360
|
xs: 12,
|
380
361
|
sx: classes.dividerGrid,
|
381
362
|
children: /*#__PURE__*/_jsx(Divider, {})
|
382
|
-
}), /*#__PURE__*/_jsxs(Grid, {
|
383
|
-
item: true,
|
384
|
-
xs: 12,
|
385
|
-
children: [/*#__PURE__*/_jsx(Typography, {
|
386
|
-
variant: "body1",
|
387
|
-
color: "primary",
|
388
|
-
sx: classes.typoLabel,
|
389
|
-
children: "Line Spacing"
|
390
|
-
}), /*#__PURE__*/_jsx(Grid, {
|
391
|
-
item: true,
|
392
|
-
xs: 12,
|
393
|
-
className: "typo-icons",
|
394
|
-
sx: classes.evenSpace,
|
395
|
-
children: /*#__PURE__*/_jsx(LineSpacing, {
|
396
|
-
value: lineSpacingValue,
|
397
|
-
onChange: handleLineSpacing,
|
398
|
-
data: {
|
399
|
-
key: 'lineHeight'
|
400
|
-
}
|
401
|
-
})
|
402
|
-
})]
|
403
|
-
}), /*#__PURE__*/_jsx(Grid, {
|
404
|
-
item: true,
|
405
|
-
xs: 12,
|
406
|
-
sx: classes.dividerGrid,
|
407
|
-
children: /*#__PURE__*/_jsx(Divider, {})
|
408
363
|
}), /*#__PURE__*/_jsx(Grid, {
|
409
364
|
item: true,
|
410
365
|
xs: 12,
|
@@ -1,5 +1,5 @@
|
|
1
|
-
import React, {
|
2
|
-
import { Popper,
|
1
|
+
import React, { useEffect, useState } from "react";
|
2
|
+
import { Popper, Paper, ClickAwayListener } from "@mui/material";
|
3
3
|
import { Editor, Range, Transforms } from "slate";
|
4
4
|
import { ReactEditor, useSlate } from "slate-react";
|
5
5
|
import useDrag from "../../hooks/useDrag";
|
@@ -9,7 +9,6 @@ import { useEditorContext } from "../../hooks/useMouseMove";
|
|
9
9
|
import usePopupStyles from "../PopupTool/PopupToolStyle";
|
10
10
|
import useEditorScroll from "../../hooks/useEditorScroll";
|
11
11
|
import { isCarouselSelected } from "../../helper";
|
12
|
-
import { hideSlateSelection } from "../../utils/helper";
|
13
12
|
import { jsx as _jsx } from "react/jsx-runtime";
|
14
13
|
const PopupTool = props => {
|
15
14
|
const {
|
@@ -21,7 +20,8 @@ const PopupTool = props => {
|
|
21
20
|
const classes = usePopupStyles(theme);
|
22
21
|
const {
|
23
22
|
setPopupType,
|
24
|
-
openAI
|
23
|
+
openAI,
|
24
|
+
selectedElement
|
25
25
|
} = useEditorContext();
|
26
26
|
const [anchorEl, setAnchorEl] = useState(null);
|
27
27
|
const [open, setOpen] = useState(false);
|
@@ -32,13 +32,10 @@ const PopupTool = props => {
|
|
32
32
|
const [event] = useDrag(anchorEl);
|
33
33
|
const id = open ? "popup-edit-tool" : "";
|
34
34
|
const [size] = useWindowResize();
|
35
|
-
const {
|
36
|
-
selectedElement
|
37
|
-
} = useEditorContext();
|
38
|
-
const updateAnchorEl = useCallback(() => {
|
35
|
+
const updateAnchorEl = isScroll => {
|
39
36
|
try {
|
40
37
|
const isHavingSelection = selection && !Range.isCollapsed(selection);
|
41
|
-
if (isHavingSelection) {
|
38
|
+
if (isHavingSelection && event === "end") {
|
42
39
|
const domRange = ReactEditor.toDOMRange(editor, editor.selection);
|
43
40
|
const editorContainer = document.querySelector("#slate-wrapper-scroll-container")?.getBoundingClientRect();
|
44
41
|
const rect = domRange.getBoundingClientRect();
|
@@ -47,16 +44,21 @@ const PopupTool = props => {
|
|
47
44
|
rect.y = -500; // hide the popper
|
48
45
|
}
|
49
46
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
}
|
47
|
+
// Create a dummy anchor element to match Popper's requirements
|
48
|
+
const anchor = document.createElement("div");
|
49
|
+
anchor.style.position = "absolute";
|
50
|
+
anchor.style.top = `${rect.top + window.scrollY}px`;
|
51
|
+
anchor.style.left = `${rect.left + window.scrollX}px`;
|
52
|
+
document.body.appendChild(anchor);
|
53
|
+
if (!anchorEl || isScroll === "scroll") {
|
54
|
+
setAnchorEl(anchor);
|
55
|
+
setOpen(true);
|
56
|
+
}
|
55
57
|
}
|
56
58
|
} catch (err) {
|
57
59
|
console.log(err);
|
58
60
|
}
|
59
|
-
}
|
61
|
+
};
|
60
62
|
useEditorScroll(editorWrapper, updateAnchorEl);
|
61
63
|
useEffect(() => {
|
62
64
|
const userStoppedSelection = size?.device === "xs" ? true : event === "end"; // for mobile, when user starts the selection, we are gonna show the popup tool
|
@@ -80,18 +82,12 @@ const PopupTool = props => {
|
|
80
82
|
}
|
81
83
|
}, [event, anchorEl]);
|
82
84
|
useEffect(() => {
|
83
|
-
if (!selection || Range.isCollapsed(selection) || Editor.string(editor, selection) === "") {
|
85
|
+
if (!selection || Range.isCollapsed(selection) || Editor.string(editor, selection) === "" || selectedElement?.enable === 1) {
|
84
86
|
setAnchorEl(null);
|
85
87
|
} else {
|
86
88
|
updateAnchorEl();
|
87
|
-
hideSlateSelection(); // removes slate selection background, when there is no selection
|
88
|
-
}
|
89
|
-
}, [selection]);
|
90
|
-
useEffect(() => {
|
91
|
-
if (selectedElement?.enable === 1) {
|
92
|
-
setAnchorEl(null);
|
93
89
|
}
|
94
|
-
}, [selection,
|
90
|
+
}, [selection, event, selectedElement?.enable]);
|
95
91
|
const handleClose = () => {
|
96
92
|
// setAnchorEl(null);
|
97
93
|
setOpen(false);
|
@@ -117,24 +113,18 @@ const PopupTool = props => {
|
|
117
113
|
id: id,
|
118
114
|
open: open,
|
119
115
|
anchorEl: anchorEl,
|
120
|
-
transition: true,
|
121
116
|
sx: classes.popupWrapper,
|
122
117
|
placement: "top-start",
|
123
|
-
children: ({
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
editor: editor,
|
134
|
-
classes: classes,
|
135
|
-
closeMainPopup: handleClose,
|
136
|
-
customProps: customProps
|
137
|
-
})
|
118
|
+
children: /*#__PURE__*/_jsx(Paper, {
|
119
|
+
style: {
|
120
|
+
borderRadius: "6px",
|
121
|
+
border: "1px solid #8360FD"
|
122
|
+
},
|
123
|
+
children: /*#__PURE__*/_jsx(MiniTextFormat, {
|
124
|
+
editor: editor,
|
125
|
+
classes: classes,
|
126
|
+
closeMainPopup: handleClose,
|
127
|
+
customProps: customProps
|
138
128
|
})
|
139
129
|
})
|
140
130
|
})
|
@@ -1,11 +1,11 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
export const
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
1
|
+
const otherFonts = ["PoppinsRegular", "PoppinsBold", "Qwitcher Grypen", "Bulgarian Garamond", "Redacted Script", "Herr Von Muellerhoff", "Dawning of a New Day", "Coming Soon", "Engagement", "Ingrid Darling", "La Belle Aurore", "Mea Culpa", "The Girl Next Door"];
|
2
|
+
const mostUsedGoogleFonts = ["Roboto", "Poppins", "Lato", "Inter", "Nunito", "Ubuntu", "Oswald", "Rubik", "Roboto Slab", "PT Sans", "Work Sans", "Lora", "Mulish", "DM Sans", "Fira Sans", "Quicksand", "Barlow", "Manrope", "IBM Plex Sans", "PT Serif", "Libre Franklin", "Bebas Neue", "Cabin", "Titillium Web", "Heebo", "Noto Serif", "Jost", "Source Code Pro", "Josefin Sans", "Dosis", "Fira Sans Condensed", "Archivo", "Noto Serif JP", "Crimson Text", "Cairo", "Pacifico", "Red Hat Display", "Assistant", "Comfortaa", "Lexend", "Fjalla One", "Caveat", "Arvo", "Lobster", "Schibsted Grotesk", "EB Garamond", "Sora", "Kalam", "Onest", "Space Grotesk", "Outfit", "Plus Jakarta Sans"];
|
3
|
+
const systemFonts = ["Monaco", "Helvetica", "Georgia", "Times New Roman", "Courier New", "Impact"];
|
4
|
+
export const googleFontList = [...mostUsedGoogleFonts, ...otherFonts];
|
5
|
+
const fontList = [...mostUsedGoogleFonts, ...otherFonts, ...systemFonts];
|
6
|
+
export const defaultFontFamilies = {
|
7
|
+
id: 1,
|
8
|
+
format: "fontFamily",
|
9
|
+
type: "fontfamilydropdown",
|
10
|
+
options: fontList || []
|
11
|
+
};
|
@@ -1,7 +1,11 @@
|
|
1
|
-
import { useEffect } from "react";
|
1
|
+
import { useEffect, useState } from "react";
|
2
2
|
import WebFont from "webfontloader";
|
3
3
|
import { useEditorContext } from "../../hooks/useMouseMove";
|
4
|
-
import {
|
4
|
+
import { googleFontList } from "./FontList";
|
5
|
+
import CircularProgress from "@mui/material/CircularProgress";
|
6
|
+
import Box from "@mui/material/Box";
|
7
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
8
|
+
import { Fragment as _Fragment } from "react/jsx-runtime";
|
5
9
|
const FontLoader = props => {
|
6
10
|
const {
|
7
11
|
otherProps,
|
@@ -10,69 +14,74 @@ const FontLoader = props => {
|
|
10
14
|
const {
|
11
15
|
setFontFamilies
|
12
16
|
} = useEditorContext();
|
17
|
+
const [loading, setLoading] = useState(true);
|
13
18
|
const loadFontsInBatches = (families, batchSize = 5, maxRetries = 3) => {
|
14
19
|
let currentIndex = 0;
|
15
20
|
let retryCount = 0;
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
loadNextBatch();
|
34
|
-
},
|
35
|
-
inactive: () => {
|
36
|
-
// console.log(`Font loading failed for: ${batch}`);
|
37
|
-
|
38
|
-
if (retryCount < maxRetries) {
|
39
|
-
retryCount++;
|
40
|
-
// console.log(`Retrying batch (${retryCount}/${maxRetries})...`);
|
41
|
-
// Retry loading the same batch
|
42
|
-
loadNextBatch();
|
43
|
-
} else {
|
44
|
-
// console.log(
|
45
|
-
// `Max retries reached for batch: ${batch}. Moving to the next batch.`
|
46
|
-
// );
|
21
|
+
const loadNextBatch = () => {
|
22
|
+
try {
|
23
|
+
if (currentIndex >= families?.length) {
|
24
|
+
// console.log("All fonts have been loaded");
|
25
|
+
setLoading(false);
|
26
|
+
return;
|
27
|
+
}
|
28
|
+
const batch = families?.slice(currentIndex, currentIndex + batchSize);
|
29
|
+
const batchWithWeights = batch?.map(font => `${font}:300,400,600,700`);
|
30
|
+
WebFont.load({
|
31
|
+
google: {
|
32
|
+
families: [...batchWithWeights]
|
33
|
+
},
|
34
|
+
classes: false,
|
35
|
+
timeout: 2000,
|
36
|
+
active: () => {
|
37
|
+
// console.log(`Fonts loaded successfully: ${batch}`);
|
47
38
|
currentIndex += batchSize;
|
48
39
|
retryCount = 0; // Reset retry count for the next batch
|
49
40
|
loadNextBatch();
|
41
|
+
},
|
42
|
+
inactive: () => {
|
43
|
+
// console.log(`Font loading failed for: ${batch}`);
|
44
|
+
if (retryCount < maxRetries) {
|
45
|
+
retryCount++;
|
46
|
+
// console.log(`Retrying batch (${retryCount}/${maxRetries})...`);
|
47
|
+
// Retry loading the same batch
|
48
|
+
loadNextBatch();
|
49
|
+
} else {
|
50
|
+
// console.log(
|
51
|
+
// `Max retries reached for batch: ${batch}. Moving to the next batch.`
|
52
|
+
// );
|
53
|
+
currentIndex += batchSize;
|
54
|
+
retryCount = 0;
|
55
|
+
loadNextBatch();
|
56
|
+
}
|
50
57
|
}
|
51
|
-
}
|
52
|
-
})
|
53
|
-
|
58
|
+
});
|
59
|
+
} catch (err) {
|
60
|
+
setLoading(false);
|
61
|
+
}
|
62
|
+
};
|
54
63
|
loadNextBatch();
|
55
64
|
};
|
56
65
|
useEffect(() => {
|
57
|
-
let families = [...
|
66
|
+
let families = [...googleFontList];
|
58
67
|
if (!readOnly) {
|
59
68
|
otherProps?.services("listGoogleFont", []).then(data => {
|
60
|
-
families = [...
|
61
|
-
const filteredfamilies = families?.filter(font => !font?.includes("Material"));
|
69
|
+
families = [...(data?.data || [])];
|
62
70
|
setFontFamilies({
|
63
71
|
id: 1,
|
64
72
|
format: "fontFamily",
|
65
73
|
type: "fontfamilydropdown",
|
66
|
-
options:
|
74
|
+
options: families || []
|
67
75
|
});
|
68
76
|
loadFontsInBatches(families);
|
69
77
|
}).catch(err => {
|
70
78
|
// console.log(err);
|
79
|
+
setLoading(false);
|
71
80
|
});
|
72
81
|
} else {
|
73
82
|
function correctFontArray(fontString) {
|
74
|
-
let fontsArray = fontString
|
75
|
-
let cleanedFontsArray = [...new Set(fontsArray
|
83
|
+
let fontsArray = fontString?.split(",");
|
84
|
+
let cleanedFontsArray = [...new Set(fontsArray?.map(font => font.trim()))];
|
76
85
|
return cleanedFontsArray;
|
77
86
|
}
|
78
87
|
function sanitizeFontFamily(fontFamily) {
|
@@ -88,11 +97,32 @@ const FontLoader = props => {
|
|
88
97
|
let families = Array.from(fontSet);
|
89
98
|
families = correctFontArray(families.join(", "));
|
90
99
|
families = families?.map(font => font?.replace(/\"/g, ""));
|
91
|
-
families = families?.map(font => font?.replace(", sans-serif", ""));
|
92
|
-
families = families
|
100
|
+
families = families?.map(font => font?.replace(", sans-serif", ""));
|
101
|
+
families = families?.filter(font => googleFontList?.includes(font));
|
93
102
|
loadFontsInBatches(families);
|
94
103
|
}
|
104
|
+
|
105
|
+
// Set timeout to hide loader after 5 seconds
|
106
|
+
const timeoutId = setTimeout(() => {
|
107
|
+
setLoading(false);
|
108
|
+
}, 5000);
|
109
|
+
return () => clearTimeout(timeoutId);
|
95
110
|
}, []);
|
96
|
-
return
|
111
|
+
return /*#__PURE__*/_jsx(_Fragment, {
|
112
|
+
children: loading ? /*#__PURE__*/_jsx(Box, {
|
113
|
+
sx: {
|
114
|
+
position: "absolute",
|
115
|
+
top: 0,
|
116
|
+
left: 0,
|
117
|
+
right: 0,
|
118
|
+
bottom: 0,
|
119
|
+
zIndex: 99999,
|
120
|
+
display: "flex",
|
121
|
+
justifyContent: "center",
|
122
|
+
alignItems: "center"
|
123
|
+
},
|
124
|
+
children: /*#__PURE__*/_jsx(CircularProgress, {})
|
125
|
+
}) : null
|
126
|
+
});
|
97
127
|
};
|
98
128
|
export default FontLoader;
|