@flozy/editor 7.0.9 → 8.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (120) hide show
  1. package/dist/Editor/ChatEditor.js +7 -7
  2. package/dist/Editor/CommonEditor.js +106 -33
  3. package/dist/Editor/DialogWrapper.js +31 -25
  4. package/dist/Editor/Editor.css +32 -16
  5. package/dist/Editor/Elements/AppHeader/AppHeader.js +3 -3
  6. package/dist/Editor/Elements/Button/EditorButton.js +25 -9
  7. package/dist/Editor/Elements/Color Picker/ColorButtons.js +57 -12
  8. package/dist/Editor/Elements/Color Picker/ColorPicker.css +25 -1
  9. package/dist/Editor/Elements/Color Picker/ColorPicker.js +4 -4
  10. package/dist/Editor/Elements/Color Picker/Styles.js +1 -1
  11. package/dist/Editor/Elements/DataView/Layouts/TableStyles.js +15 -0
  12. package/dist/Editor/Elements/DataView/Layouts/TableView.js +111 -29
  13. package/dist/Editor/Elements/DataView/Providers/DataViewProvider.js +1 -1
  14. package/dist/Editor/Elements/DataView/styles.js +8 -8
  15. package/dist/Editor/Elements/Embed/Image.js +2 -2
  16. package/dist/Editor/Elements/FreeGrid/FreeGrid.js +0 -14
  17. package/dist/Editor/Elements/FreeGrid/FreeGridBox.js +2 -1
  18. package/dist/Editor/Elements/FreeGrid/FreeGridItem.js +2 -1
  19. package/dist/Editor/Elements/FreeGrid/styles.js +3 -0
  20. package/dist/Editor/Elements/Grid/GridItem.js +2 -3
  21. package/dist/Editor/Elements/Link/Link.js +70 -43
  22. package/dist/Editor/Elements/SimpleText/index.js +7 -12
  23. package/dist/Editor/Elements/SimpleText/style.js +2 -2
  24. package/dist/Editor/Elements/Table/Table.js +12 -12
  25. package/dist/Editor/Elements/Title/title.js +13 -1
  26. package/dist/Editor/Elements/Variables/Style.js +28 -2
  27. package/dist/Editor/Elements/Variables/VariableButton.js +17 -4
  28. package/dist/Editor/Styles/EditorStyles.js +287 -291
  29. package/dist/Editor/Toolbar/FormatTools/Dropdown.js +27 -3
  30. package/dist/Editor/Toolbar/FormatTools/FontFamilyAutocomplete.js +4 -3
  31. package/dist/Editor/Toolbar/FormatTools/MarkButton.js +2 -2
  32. package/dist/Editor/Toolbar/FormatTools/TextSize.js +7 -15
  33. package/dist/Editor/Toolbar/PopupTool/AddTemplates.js +9 -8
  34. package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/SelectFontSize.js +6 -13
  35. package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/SelectTypography.js +210 -85
  36. package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/index.js +2 -1
  37. package/dist/Editor/Toolbar/PopupTool/PopupToolStyle.js +16 -12
  38. package/dist/Editor/Toolbar/PopupTool/TextFormat.js +56 -9
  39. package/dist/Editor/Toolbar/PopupTool/ThemeTextFormat.js +438 -0
  40. package/dist/Editor/Toolbar/PopupTool/index.js +31 -38
  41. package/dist/Editor/Toolbar/toolbarGroups.js +48 -6
  42. package/dist/Editor/assets/svg/ThemeIcons.js +291 -0
  43. package/dist/Editor/common/ColorPickerButton.js +35 -9
  44. package/dist/Editor/common/CustomColorPicker/index.js +106 -0
  45. package/dist/Editor/common/CustomColorPicker/style.js +53 -0
  46. package/dist/Editor/common/CustomDialog/index.js +90 -0
  47. package/dist/Editor/common/CustomDialog/style.js +67 -0
  48. package/dist/Editor/common/CustomDialog/styles.js +80 -0
  49. package/dist/Editor/common/CustomSelect.js +33 -0
  50. package/dist/Editor/common/DnD/DragHandleButton.js +1 -1
  51. package/dist/Editor/common/DnD/Draggable.js +0 -1
  52. package/dist/Editor/common/FontLoader/FontList.js +3 -11
  53. package/dist/Editor/common/FontLoader/FontLoader.js +74 -42
  54. package/dist/Editor/common/Icon.js +28 -0
  55. package/dist/Editor/common/ImageSelector/Options/Upload.js +1 -1
  56. package/dist/Editor/common/ImageSelector/Styles.js +3 -9
  57. package/dist/Editor/common/ImageSelector/UploadStyles.js +1 -2
  58. package/dist/Editor/common/MentionsPopup/Styles.js +6 -12
  59. package/dist/Editor/common/RnD/ElementSettings/OtherSettings/Settings.js +2 -1
  60. package/dist/Editor/common/RnD/ElementSettings/Settings/AppHeaderSettings.js +3 -2
  61. package/dist/Editor/common/RnD/ElementSettings/Settings/BoxSettings.js +3 -2
  62. package/dist/Editor/common/RnD/ElementSettings/Settings/ButtonSettings.js +3 -2
  63. package/dist/Editor/common/RnD/ElementSettings/Settings/CodeSettings.js +3 -2
  64. package/dist/Editor/common/RnD/ElementSettings/Settings/FormSettings.js +4 -2
  65. package/dist/Editor/common/RnD/ElementSettings/Settings/ImageSettings.js +3 -2
  66. package/dist/Editor/common/RnD/ElementSettings/Settings/TableSettings.js +3 -2
  67. package/dist/Editor/common/RnD/ElementSettings/Settings/VideoSettings.js +3 -2
  68. package/dist/Editor/common/RnD/ElementSettings/styles.js +0 -1
  69. package/dist/Editor/common/RnD/SwitchViewport/SwitchViewport.js +8 -2
  70. package/dist/Editor/common/RnD/Theme/MainThemeProvider.js +17 -0
  71. package/dist/Editor/common/RnD/Theme/ViewportStimulator.js +6 -3
  72. package/dist/Editor/common/RnD/Utils/gridDropItem.js +5 -4
  73. package/dist/Editor/common/RnD/Utils/index.js +45 -0
  74. package/dist/Editor/common/RnD/index.js +23 -3
  75. package/dist/Editor/common/Section/index.js +60 -89
  76. package/dist/Editor/common/Shorthands/elements.js +54 -0
  77. package/dist/Editor/common/StyleBuilder/buttonStyle.js +4 -2
  78. package/dist/Editor/common/StyleBuilder/fieldTypes/backgroundImage.js +5 -0
  79. package/dist/Editor/common/StyleBuilder/fieldTypes/bannerSpacing.js +12 -2
  80. package/dist/Editor/common/StyleBuilder/fieldTypes/borderRadius.js +15 -7
  81. package/dist/Editor/common/StyleBuilder/fieldTypes/card.js +10 -2
  82. package/dist/Editor/common/StyleBuilder/fieldTypes/color.js +35 -11
  83. package/dist/Editor/common/StyleBuilder/fieldTypes/fontSize.js +13 -4
  84. package/dist/Editor/common/StyleBuilder/fieldTypes/textOptions.js +15 -7
  85. package/dist/Editor/common/Uploader.js +8 -0
  86. package/dist/Editor/commonStyle.js +55 -65
  87. package/dist/Editor/helper/deserialize/index.js +1 -1
  88. package/dist/Editor/helper/index.js +2 -2
  89. package/dist/Editor/helper/theme.js +200 -2
  90. package/dist/Editor/hooks/useEditorScroll.js +1 -1
  91. package/dist/Editor/hooks/useEditorTheme.js +153 -0
  92. package/dist/Editor/hooks/useMouseMove.js +9 -3
  93. package/dist/Editor/plugins/withEmbeds.js +1 -1
  94. package/dist/Editor/plugins/withHTML.js +5 -9
  95. package/dist/Editor/plugins/withLayout.js +1 -1
  96. package/dist/Editor/plugins/withTable.js +1 -1
  97. package/dist/Editor/theme/ThemeList.js +50 -173
  98. package/dist/Editor/theme/index.js +144 -0
  99. package/dist/Editor/themeSettings/ActiveTheme.js +72 -0
  100. package/dist/Editor/themeSettings/buttons/index.js +283 -0
  101. package/dist/Editor/themeSettings/buttons/style.js +21 -0
  102. package/dist/Editor/themeSettings/colorTheme/index.js +292 -0
  103. package/dist/Editor/themeSettings/colorTheme/style.js +77 -0
  104. package/dist/Editor/themeSettings/fonts/PreviewElement.js +121 -0
  105. package/dist/Editor/themeSettings/fonts/index.js +220 -0
  106. package/dist/Editor/themeSettings/fonts/style.js +44 -0
  107. package/dist/Editor/themeSettings/icons.js +60 -0
  108. package/dist/Editor/themeSettings/index.js +320 -0
  109. package/dist/Editor/themeSettings/style.js +152 -0
  110. package/dist/Editor/themeSettingsAI/icons.js +96 -0
  111. package/dist/Editor/themeSettingsAI/index.js +356 -0
  112. package/dist/Editor/themeSettingsAI/saveTheme.js +197 -0
  113. package/dist/Editor/themeSettingsAI/style.js +250 -0
  114. package/dist/Editor/utils/SlateUtilityFunctions.js +157 -49
  115. package/dist/Editor/utils/button.js +0 -14
  116. package/dist/Editor/utils/draftToSlate.js +3 -2
  117. package/dist/Editor/utils/font.js +40 -37
  118. package/dist/Editor/utils/helper.js +59 -19
  119. package/dist/Editor/utils/link.js +1 -1
  120. package/package.json +5 -2
@@ -10,6 +10,8 @@ import { AllColors } from "../../Elements/Color Picker/ColorButtons";
10
10
  import { fontFamilyMap } from "../../utils/font";
11
11
  import { getBorderColor } from "../../utils/helper";
12
12
  import SelectTypography from "./MiniTextFormat/SelectTypography";
13
+ import { isTextCustomized, saveToTheme } from "../../helper/theme";
14
+ import { useEditorTheme } from "../../hooks/useEditorTheme";
13
15
  import SelectSuperSubscript from "./MiniTextFormat/SelectSuperSubscript";
14
16
  import { ColorResetIcon, TextDefaultStyleIcon } from "../../common/iconListV2";
15
17
  import FontFamilyAutocomplete from "../FormatTools/FontFamilyAutocomplete";
@@ -39,7 +41,7 @@ const TextFormat = props => {
39
41
  const pageSettingLine = pageSt?.pageProps?.lineHeight;
40
42
  const {
41
43
  fontFamilies,
42
- theme
44
+ theme: appTheme
43
45
  } = useEditorContext();
44
46
  const {
45
47
  activeBreakPoint
@@ -61,7 +63,12 @@ const TextFormat = props => {
61
63
  color: "",
62
64
  bgColor: ""
63
65
  };
64
- let lineSpacingValue = activeMark(editor, 'lineHeight');
66
+ const {
67
+ theme,
68
+ updateTheme
69
+ } = useEditorTheme();
70
+ const customized = isTextCustomized(editor);
71
+ let lineSpacingValue = activeMark(editor, "lineHeight");
65
72
  lineSpacingValue = lineSpacingValue?.[breakpoint] !== undefined ? lineSpacingValue : pageSettingLine;
66
73
  const handleColorPicker = type => e => {
67
74
  setType(type);
@@ -115,6 +122,50 @@ const TextFormat = props => {
115
122
  sx: classes.textFormatWrapper,
116
123
  className: "text-formatter-popup",
117
124
  children: [/*#__PURE__*/_jsxs(Grid, {
125
+ item: true,
126
+ xs: 12,
127
+ children: [/*#__PURE__*/_jsxs(Grid, {
128
+ container: true,
129
+ justifyContent: "space-between",
130
+ alignItems: "center",
131
+ children: [/*#__PURE__*/_jsx(Grid, {
132
+ item: true,
133
+ children: /*#__PURE__*/_jsx(Typography, {
134
+ variant: "body1",
135
+ color: "primary",
136
+ sx: classes.typoLabel,
137
+ children: "Style"
138
+ })
139
+ }), /*#__PURE__*/_jsx(Grid, {
140
+ item: true,
141
+ children: theme?.id ? /*#__PURE__*/_jsx(Button, {
142
+ sx: classes.defaultBtn,
143
+ onClick: () => {
144
+ const {
145
+ field,
146
+ theme
147
+ } = saveToTheme(editor) || {};
148
+ updateTheme(theme, {
149
+ action: "ELEMENT_PROPS_CHANGE",
150
+ fieldName: field
151
+ });
152
+ },
153
+ disabled: !customized,
154
+ children: "Save to theme"
155
+ }) : null
156
+ })]
157
+ }), /*#__PURE__*/_jsx(Grid, {
158
+ item: true,
159
+ xs: 12,
160
+ sx: classes.textFormatField,
161
+ children: /*#__PURE__*/_jsx(SelectTypography, {
162
+ editor: editor,
163
+ classes: classes,
164
+ closeMainPopup: () => {},
165
+ type: "fullWidth"
166
+ })
167
+ })]
168
+ }), /*#__PURE__*/_jsxs(Grid, {
118
169
  item: true,
119
170
  xs: 12,
120
171
  children: [/*#__PURE__*/_jsxs(Grid, {
@@ -267,7 +318,7 @@ const TextFormat = props => {
267
318
  children: /*#__PURE__*/_jsx(Button, {
268
319
  sx: classes.defaultBtn2,
269
320
  startIcon: /*#__PURE__*/_jsx(ColorResetIcon, {
270
- stroke: theme?.palette?.type === "dark" ? "#505359" : "#A2B0B9"
321
+ stroke: appTheme?.palette?.type === "dark" ? "#505359" : "#A2B0B9"
271
322
  }),
272
323
  onClick: handleDefault({
273
324
  format: "bgColor"
@@ -355,11 +406,7 @@ const TextFormat = props => {
355
406
  xs: 12,
356
407
  className: "typo-icons",
357
408
  sx: classes.evenSpace,
358
- children: [/*#__PURE__*/_jsx(SelectTypography, {
359
- classes: classes,
360
- editor: editor,
361
- closeMainPopup: closeMainPopup || onClose
362
- }), fontStyle?.map((m, i) => {
409
+ children: [fontStyle?.map((m, i) => {
363
410
  return /*#__PURE__*/_jsx(MarkButton, {
364
411
  editor: editor,
365
412
  ...m
@@ -396,7 +443,7 @@ const TextFormat = props => {
396
443
  value: lineSpacingValue,
397
444
  onChange: handleLineSpacing,
398
445
  data: {
399
- key: 'lineHeight'
446
+ key: "lineHeight"
400
447
  }
401
448
  })
402
449
  })]
@@ -0,0 +1,438 @@
1
+ import { Button, Grid, IconButton, Popover, TextField, Tooltip, Typography } from "@mui/material";
2
+ import { useEditorContext } from "../../hooks/useMouseMove";
3
+ import FormatClearIcon from "@mui/icons-material/FormatClear";
4
+ import usePopupStyles from "../PopupTool/PopupToolStyle";
5
+ import { TextMinusIcon, TextPlusIcon } from "../../common/iconslist";
6
+ import { BREAKPOINTS_DEVICES, getBreakPointsValue, getVariableValue } from "../../helper/theme";
7
+ import useWindowResize from "../../hooks/useWindowResize";
8
+ import { toolbarGroups } from "../toolbarGroups";
9
+ import Icon from "../../common/Icon";
10
+ import { useMemo, useState } from "react";
11
+ import CommonButton from "../../common/Button";
12
+ import CustomSelect from "../../common/CustomSelect";
13
+ import ColorButtons from "../../Elements/Color Picker/ColorButtons";
14
+ import FormatColorResetIcon from "@mui/icons-material/FormatColorReset";
15
+ import ColorPickerStyles from "../../Elements/Color Picker/Styles";
16
+ import colorWheel from "../../Elements/Color Picker/colorWheel.png";
17
+ import CustomColorPicker from "../../common/CustomColorPicker";
18
+ import FontFamilyAutocomplete from "../FormatTools/FontFamilyAutocomplete";
19
+ import { googleFontList as defaultFonts } from "../../common/FontLoader/FontList";
20
+ import { jsx as _jsx } from "react/jsx-runtime";
21
+ import { jsxs as _jsxs } from "react/jsx-runtime";
22
+ import { Fragment as _Fragment } from "react/jsx-runtime";
23
+ function getFontStyleProps(settings = {}, format) {
24
+ const {
25
+ fontWeight,
26
+ fontStyle
27
+ } = settings;
28
+ let isActive;
29
+ let onClick;
30
+ switch (format) {
31
+ case "bold":
32
+ isActive = fontWeight === "bold" || fontWeight === "700";
33
+ onClick = () => {
34
+ return {
35
+ fontWeight: isActive ? "normal" : "bold"
36
+ };
37
+ };
38
+ break;
39
+ case "italic":
40
+ isActive = fontStyle === "italic";
41
+ onClick = () => {
42
+ return {
43
+ fontStyle: isActive ? "unset" : "italic"
44
+ };
45
+ };
46
+ break;
47
+
48
+ // case "underline":
49
+ // isActive = textDecoration.includes("underline");
50
+ // onClick = () => {
51
+ // let otherTextDecoration = textDecoration?.includes("line-through")
52
+ // ? "line-through"
53
+ // : "";
54
+
55
+ // otherTextDecoration += isActive ? "" : " underline";
56
+
57
+ // return { textDecoration: otherTextDecoration };
58
+ // };
59
+ // break;
60
+ // case "strikethrough":
61
+ // isActive = textDecoration.includes("line-through");
62
+ // onClick = () => {
63
+ // let otherTextDecoration = textDecoration?.includes("underline")
64
+ // ? "underline"
65
+ // : "";
66
+
67
+ // otherTextDecoration += isActive ? "" : " line-through";
68
+
69
+ // return { textDecoration: otherTextDecoration };
70
+ // };
71
+ // break;
72
+
73
+ default:
74
+ isActive = false;
75
+ onClick = () => {};
76
+ break;
77
+ }
78
+ return {
79
+ isActive,
80
+ onClick
81
+ };
82
+ }
83
+ const allTools = toolbarGroups.flat();
84
+ function ThemeTextFormat(props) {
85
+ const {
86
+ settings,
87
+ updateSettings,
88
+ onSaveTextSettings,
89
+ onClose
90
+ } = props;
91
+ const {
92
+ theme,
93
+ fontFamilies
94
+ } = useEditorContext();
95
+ const classes = usePopupStyles(theme);
96
+ const pickerStyles = ColorPickerStyles(theme);
97
+ const fontStyle = allTools.filter(f => f.type === "mark" && f.themeEnabled);
98
+ const fontWeight = allTools.find(f => f.format === "fontWeight");
99
+ const fontFamilyVal = useMemo(() => {
100
+ const {
101
+ fontFamily = ""
102
+ } = settings;
103
+ let font = fontFamily.startsWith("var") ? getVariableValue(fontFamily) : fontFamily;
104
+ return font;
105
+ }, [settings]);
106
+ const fontWeightVal = useMemo(() => {
107
+ const {
108
+ options
109
+ } = fontWeight || {};
110
+ const selected = options?.find(o => o.value === settings?.fontWeight || o.numVal === settings?.fontWeight);
111
+ return selected?.value;
112
+ }, [settings?.fontWeight]);
113
+ return /*#__PURE__*/_jsxs(Grid, {
114
+ container: true,
115
+ sx: classes.textFormatWrapper,
116
+ children: [/*#__PURE__*/_jsxs(Grid, {
117
+ item: true,
118
+ xs: 12,
119
+ children: [/*#__PURE__*/_jsxs(Grid, {
120
+ container: true,
121
+ justifyContent: "space-between",
122
+ alignItems: "center",
123
+ children: [/*#__PURE__*/_jsx(Grid, {
124
+ item: true,
125
+ children: /*#__PURE__*/_jsx(Typography, {
126
+ variant: "body1",
127
+ color: "primary",
128
+ sx: classes.typoLabel,
129
+ children: "Font Family"
130
+ })
131
+ }), /*#__PURE__*/_jsx(Grid, {
132
+ item: true,
133
+ children: /*#__PURE__*/_jsx(Button, {
134
+ sx: classes.defaultBtn,
135
+ startIcon: /*#__PURE__*/_jsx(FormatClearIcon, {}),
136
+ onClick: () => updateSettings({
137
+ fontFamily: defaultFonts[0]
138
+ }),
139
+ children: "Default"
140
+ })
141
+ })]
142
+ }), /*#__PURE__*/_jsx(Grid, {
143
+ item: true,
144
+ xs: 12,
145
+ sx: classes.textFormatField,
146
+ children: /*#__PURE__*/_jsx(FontFamilyAutocomplete, {
147
+ editor: {},
148
+ format: "fontFamily",
149
+ options: fontFamilies?.options,
150
+ width: "100%",
151
+ onChange: updateSettings,
152
+ val: fontFamilyVal || defaultFonts[0],
153
+ webFont: true
154
+ })
155
+ })]
156
+ }), /*#__PURE__*/_jsxs(Grid, {
157
+ container: true,
158
+ spacing: 2,
159
+ children: [/*#__PURE__*/_jsxs(Grid, {
160
+ item: true,
161
+ xs: 6,
162
+ children: [/*#__PURE__*/_jsx(Typography, {
163
+ variant: "body1",
164
+ color: "primary",
165
+ sx: classes.typoLabel,
166
+ children: "Font Weight"
167
+ }), /*#__PURE__*/_jsx(Grid, {
168
+ item: true,
169
+ xs: 12,
170
+ sx: classes.textFormatField,
171
+ children: /*#__PURE__*/_jsx(CustomSelect, {
172
+ options: fontWeight?.options || [],
173
+ classes: classes,
174
+ onChange: e => {
175
+ updateSettings({
176
+ fontWeight: e.target.value
177
+ });
178
+ },
179
+ value: fontWeightVal
180
+ })
181
+ })]
182
+ }), /*#__PURE__*/_jsxs(Grid, {
183
+ item: true,
184
+ xs: 6,
185
+ children: [/*#__PURE__*/_jsx(Typography, {
186
+ variant: "body1",
187
+ color: "primary",
188
+ sx: classes.typoLabel,
189
+ children: "Font Size"
190
+ }), /*#__PURE__*/_jsx(Grid, {
191
+ item: true,
192
+ xs: 12,
193
+ sx: classes.textFormatCG,
194
+ children: /*#__PURE__*/_jsx(TextSize, {
195
+ classes: classes,
196
+ value: settings?.fontSize || 16,
197
+ onChange: fontSize => updateSettings({
198
+ fontSize
199
+ }),
200
+ fullWidth: true
201
+ })
202
+ })]
203
+ })]
204
+ }), /*#__PURE__*/_jsxs(Grid, {
205
+ item: true,
206
+ xs: 12,
207
+ sx: classes.textFormatField,
208
+ style: {
209
+ marginTop: "14px"
210
+ },
211
+ children: [/*#__PURE__*/_jsxs(Grid, {
212
+ container: true,
213
+ justifyContent: "space-between",
214
+ alignItems: "center",
215
+ children: [/*#__PURE__*/_jsx(Grid, {
216
+ item: true,
217
+ children: /*#__PURE__*/_jsx(Typography, {
218
+ variant: "body1",
219
+ color: "primary",
220
+ sx: classes.typoLabel,
221
+ children: "Text Color"
222
+ })
223
+ }), /*#__PURE__*/_jsx(Grid, {
224
+ item: true,
225
+ children: /*#__PURE__*/_jsx(Button, {
226
+ sx: classes.defaultBtn,
227
+ startIcon: /*#__PURE__*/_jsx(FormatColorResetIcon, {}),
228
+ onClick: () => updateSettings({
229
+ color: "#ddd"
230
+ }),
231
+ children: "Default"
232
+ })
233
+ })]
234
+ }), /*#__PURE__*/_jsx(Grid, {
235
+ sx: classes.textFormatColorWrpr,
236
+ children: /*#__PURE__*/_jsx(ColorPicker, {
237
+ classes: classes,
238
+ pickerStyles: pickerStyles,
239
+ onChange: color => updateSettings({
240
+ color
241
+ }),
242
+ color: settings?.color,
243
+ disableEditTheme: true
244
+ })
245
+ })]
246
+ }), /*#__PURE__*/_jsxs(Grid, {
247
+ item: true,
248
+ xs: 12,
249
+ children: [/*#__PURE__*/_jsx(Typography, {
250
+ variant: "body1",
251
+ color: "primary",
252
+ sx: classes.typoLabel,
253
+ children: "Typography"
254
+ }), /*#__PURE__*/_jsx(Grid, {
255
+ item: true,
256
+ xs: 12,
257
+ className: "typo-icons",
258
+ sx: classes.evenSpace,
259
+ children: fontStyle?.map((m, i) => {
260
+ const {
261
+ isActive,
262
+ onClick
263
+ } = getFontStyleProps(settings, m.format) || {};
264
+ return /*#__PURE__*/_jsx(CommonButton, {
265
+ active: isActive,
266
+ onClick: () => {
267
+ const style = onClick();
268
+ updateSettings(style);
269
+ },
270
+ children: /*#__PURE__*/_jsx(Icon, {
271
+ icon: m.format
272
+ })
273
+ }, i);
274
+ })
275
+ })]
276
+ }), /*#__PURE__*/_jsx(Grid, {
277
+ item: true,
278
+ xs: 12,
279
+ sx: {
280
+ mt: 2
281
+ },
282
+ children: /*#__PURE__*/_jsxs("div", {
283
+ style: {
284
+ display: "flex",
285
+ justifyContent: "end",
286
+ margin: "8px",
287
+ position: "absolute",
288
+ bottom: 0,
289
+ right: 0
290
+ },
291
+ children: [/*#__PURE__*/_jsx(Button, {
292
+ onClick: onClose,
293
+ className: "secondaryBtn",
294
+ children: "Cancel"
295
+ }), /*#__PURE__*/_jsx(Button, {
296
+ onClick: onSaveTextSettings,
297
+ className: "primaryBtn",
298
+ children: "Save"
299
+ })]
300
+ })
301
+ })]
302
+ });
303
+ }
304
+ export default ThemeTextFormat;
305
+ function TextSize(props) {
306
+ const {
307
+ classes,
308
+ value: val,
309
+ onChange,
310
+ fullWidth
311
+ } = props;
312
+ const [size] = useWindowResize();
313
+ const value = getBreakPointsValue(val, size?.device);
314
+ const updateMarkData = newVal => {
315
+ let upData = {
316
+ ...getBreakPointsValue(val),
317
+ [size?.device]: `${newVal}px`
318
+ };
319
+
320
+ // if desktop update to all other devices
321
+ // to avoid default normal size
322
+ if (size?.device === "lg") {
323
+ upData = BREAKPOINTS_DEVICES.reduce((a, b) => {
324
+ a[b] = `${newVal}px`;
325
+ return a;
326
+ }, {});
327
+ }
328
+ onChange(upData);
329
+ };
330
+ const onChangeSize = e => {
331
+ let inc = parseInt(e.target.value) || 8;
332
+ inc = inc > 200 ? 200 : inc;
333
+ updateMarkData(inc || 8);
334
+ };
335
+ const getSizeVal = () => {
336
+ try {
337
+ return parseInt(value);
338
+ } catch (err) {
339
+ return "";
340
+ }
341
+ };
342
+ const combinedOldVal = getSizeVal();
343
+ const onIncreaseSize = () => {
344
+ let inc = (combinedOldVal || 0) + 1;
345
+ inc = inc > 200 ? 200 : inc;
346
+ updateMarkData(inc);
347
+ };
348
+ const onDecreaseSize = () => {
349
+ const newVal = combinedOldVal - 1 < 0 ? 0 : combinedOldVal - 1;
350
+ updateMarkData(newVal);
351
+ };
352
+ return /*#__PURE__*/_jsx(TextField, {
353
+ sx: classes?.textSize,
354
+ value: combinedOldVal,
355
+ onChange: onChangeSize,
356
+ size: "small",
357
+ inputProps: {
358
+ style: {
359
+ width: fullWidth ? "100%" : "30px",
360
+ textAlign: "center",
361
+ height: "19px",
362
+ fontSize: "14px"
363
+ }
364
+ },
365
+ fullWidth: fullWidth,
366
+ InputProps: {
367
+ style: {
368
+ borderRadius: "8px"
369
+ },
370
+ endAdornment: /*#__PURE__*/_jsxs("div", {
371
+ className: "textFontArrows",
372
+ children: [/*#__PURE__*/_jsx(IconButton, {
373
+ onClick: onIncreaseSize,
374
+ size: "small",
375
+ children: /*#__PURE__*/_jsx(TextPlusIcon, {})
376
+ }), /*#__PURE__*/_jsx(IconButton, {
377
+ onClick: onDecreaseSize,
378
+ size: "small",
379
+ children: /*#__PURE__*/_jsx(TextMinusIcon, {})
380
+ })]
381
+ })
382
+ }
383
+ });
384
+ }
385
+ function ColorPicker(props) {
386
+ const {
387
+ classes,
388
+ pickerStyles,
389
+ onChange,
390
+ color,
391
+ disableEditTheme
392
+ } = props;
393
+ const [anchorEl, setAnchorEl] = useState(null);
394
+ const open = Boolean(anchorEl);
395
+ const handleClose = () => {
396
+ setAnchorEl(null);
397
+ };
398
+ return /*#__PURE__*/_jsxs(_Fragment, {
399
+ children: [/*#__PURE__*/_jsx(Tooltip, {
400
+ title: "",
401
+ arrow: true,
402
+ children: /*#__PURE__*/_jsx(IconButton, {
403
+ sx: pickerStyles.colorPickerIcon,
404
+ onClick: e => {
405
+ setAnchorEl(e.currentTarget);
406
+ },
407
+ children: /*#__PURE__*/_jsx("img", {
408
+ src: colorWheel,
409
+ alt: "color wheel"
410
+ })
411
+ })
412
+ }), /*#__PURE__*/_jsx(ColorButtons, {
413
+ classes: pickerStyles,
414
+ onSelect: onChange,
415
+ activeColor: color,
416
+ disableEditTheme: disableEditTheme
417
+ }), /*#__PURE__*/_jsx(Popover, {
418
+ open: open,
419
+ anchorEl: anchorEl,
420
+ onClose: handleClose,
421
+ anchorOrigin: {
422
+ vertical: "top",
423
+ horizontal: "center"
424
+ },
425
+ transformOrigin: {
426
+ vertical: "bottom",
427
+ horizontal: "top"
428
+ },
429
+ sx: classes.colorPickerPopup,
430
+ children: /*#__PURE__*/_jsx(CustomColorPicker, {
431
+ gradient: true,
432
+ onChange: onChange,
433
+ color: color,
434
+ disableEditTheme: disableEditTheme
435
+ })
436
+ })]
437
+ });
438
+ }
@@ -1,5 +1,5 @@
1
- import React, { useCallback, useEffect, useState } from "react";
2
- import { Popper, Fade, Paper, ClickAwayListener } from "@mui/material";
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";
@@ -21,7 +21,8 @@ const PopupTool = props => {
21
21
  const classes = usePopupStyles(theme);
22
22
  const {
23
23
  setPopupType,
24
- openAI
24
+ openAI,
25
+ selectedElement
25
26
  } = useEditorContext();
26
27
  const [anchorEl, setAnchorEl] = useState(null);
27
28
  const [open, setOpen] = useState(false);
@@ -32,13 +33,11 @@ const PopupTool = props => {
32
33
  const [event] = useDrag(anchorEl);
33
34
  const id = open ? "popup-edit-tool" : "";
34
35
  const [size] = useWindowResize();
35
- const {
36
- selectedElement
37
- } = useEditorContext();
38
- const updateAnchorEl = useCallback(() => {
36
+ const isMobile = window.matchMedia("(max-width: 899px)")?.matches || false;
37
+ const updateAnchorEl = isScroll => {
39
38
  try {
40
39
  const isHavingSelection = selection && !Range.isCollapsed(selection);
41
- if (isHavingSelection) {
40
+ if (isHavingSelection && event === "end") {
42
41
  const domRange = ReactEditor.toDOMRange(editor, editor.selection);
43
42
  const editorContainer = document.querySelector("#slate-wrapper-scroll-container")?.getBoundingClientRect();
44
43
  const rect = domRange.getBoundingClientRect();
@@ -47,16 +46,21 @@ const PopupTool = props => {
47
46
  rect.y = -500; // hide the popper
48
47
  }
49
48
 
50
- setAnchorEl({
51
- clientWidth: rect.width,
52
- clientHeight: rect.height,
53
- getBoundingClientRect: () => rect
54
- });
49
+ // Create a dummy anchor element to match Popper's requirements
50
+ const anchor = document.createElement("div");
51
+ anchor.style.position = "absolute";
52
+ anchor.style.top = `${rect.top + window.scrollY}px`;
53
+ anchor.style.left = `${rect.left + window.scrollX}px`;
54
+ document.body.appendChild(anchor);
55
+ if (!anchorEl || isScroll === "scroll") {
56
+ setAnchorEl(anchor);
57
+ setOpen(true);
58
+ }
55
59
  }
56
60
  } catch (err) {
57
61
  console.log(err);
58
62
  }
59
- }, [selection]);
63
+ };
60
64
  useEditorScroll(editorWrapper, updateAnchorEl);
61
65
  useEffect(() => {
62
66
  const userStoppedSelection = size?.device === "xs" ? true : event === "end"; // for mobile, when user starts the selection, we are gonna show the popup tool
@@ -80,18 +84,13 @@ const PopupTool = props => {
80
84
  }
81
85
  }, [event, anchorEl]);
82
86
  useEffect(() => {
83
- if (!selection || Range.isCollapsed(selection) || Editor.string(editor, selection) === "") {
87
+ if (!selection || Range.isCollapsed(selection) || Editor.string(editor, selection) === "" || selectedElement?.enable === 1) {
84
88
  setAnchorEl(null);
85
89
  } else {
86
90
  updateAnchorEl();
87
91
  hideSlateSelection(); // removes slate selection background, when there is no selection
88
92
  }
89
- }, [selection]);
90
- useEffect(() => {
91
- if (selectedElement?.enable === 1) {
92
- setAnchorEl(null);
93
- }
94
- }, [selection, selectedElement?.path, selectedElement?.enable]);
93
+ }, [selection, event, selectedElement?.enable]);
95
94
  const handleClose = () => {
96
95
  // setAnchorEl(null);
97
96
  setOpen(false);
@@ -100,7 +99,7 @@ const PopupTool = props => {
100
99
  return open && !openAI ? /*#__PURE__*/_jsx(ClickAwayListener, {
101
100
  onClickAway: e => {
102
101
  // close the mini toolbar, if user clicks outside the editor (in Flozy app.)
103
- if (e.target !== document.body) {
102
+ if (e.target !== document.body && !isMobile) {
104
103
  // e.target returns body, if the user clicks material ui select popup inside the tool bar, on that time, we don't need to close
105
104
  handleClose();
106
105
  }
@@ -117,24 +116,18 @@ const PopupTool = props => {
117
116
  id: id,
118
117
  open: open,
119
118
  anchorEl: anchorEl,
120
- transition: true,
121
119
  sx: classes.popupWrapper,
122
120
  placement: "top-start",
123
- children: ({
124
- TransitionProps
125
- }) => /*#__PURE__*/_jsx(Fade, {
126
- ...TransitionProps,
127
- children: /*#__PURE__*/_jsx(Paper, {
128
- style: {
129
- borderRadius: "6px",
130
- border: "1px solid #8360FD"
131
- },
132
- children: /*#__PURE__*/_jsx(MiniTextFormat, {
133
- editor: editor,
134
- classes: classes,
135
- closeMainPopup: handleClose,
136
- customProps: customProps
137
- })
121
+ children: /*#__PURE__*/_jsx(Paper, {
122
+ style: {
123
+ borderRadius: "6px",
124
+ border: "1px solid #8360FD"
125
+ },
126
+ children: /*#__PURE__*/_jsx(MiniTextFormat, {
127
+ editor: editor,
128
+ classes: classes,
129
+ closeMainPopup: handleClose,
130
+ customProps: customProps
138
131
  })
139
132
  })
140
133
  })