@flozy/editor 6.0.6 → 6.0.8

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 (114) hide show
  1. package/dist/Editor/ChatEditor.js +7 -7
  2. package/dist/Editor/CommonEditor.js +79 -21
  3. package/dist/Editor/DialogWrapper.js +31 -25
  4. package/dist/Editor/Editor.css +21 -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/Providers/DataViewProvider.js +1 -1
  12. package/dist/Editor/Elements/Embed/Image.js +2 -2
  13. package/dist/Editor/Elements/FreeGrid/FreeGrid.js +0 -14
  14. package/dist/Editor/Elements/FreeGrid/styles.js +3 -0
  15. package/dist/Editor/Elements/Grid/GridItem.js +2 -3
  16. package/dist/Editor/Elements/Link/Link.js +70 -43
  17. package/dist/Editor/Elements/SimpleText/index.js +7 -12
  18. package/dist/Editor/Elements/SimpleText/style.js +2 -2
  19. package/dist/Editor/Elements/Table/Table.js +12 -12
  20. package/dist/Editor/Elements/Title/title.js +13 -1
  21. package/dist/Editor/Elements/Variables/Style.js +28 -2
  22. package/dist/Editor/Elements/Variables/VariableButton.js +17 -4
  23. package/dist/Editor/Toolbar/FormatTools/Dropdown.js +27 -3
  24. package/dist/Editor/Toolbar/FormatTools/FontFamilyAutocomplete.js +4 -3
  25. package/dist/Editor/Toolbar/FormatTools/MarkButton.js +2 -2
  26. package/dist/Editor/Toolbar/FormatTools/TextSize.js +7 -15
  27. package/dist/Editor/Toolbar/PopupTool/AddTemplates.js +9 -8
  28. package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/SelectFontSize.js +6 -13
  29. package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/SelectTypography.js +210 -85
  30. package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/index.js +2 -1
  31. package/dist/Editor/Toolbar/PopupTool/PopupToolStyle.js +16 -12
  32. package/dist/Editor/Toolbar/PopupTool/TextFormat.js +56 -9
  33. package/dist/Editor/Toolbar/PopupTool/ThemeTextFormat.js +438 -0
  34. package/dist/Editor/Toolbar/PopupTool/index.js +32 -43
  35. package/dist/Editor/Toolbar/toolbarGroups.js +48 -6
  36. package/dist/Editor/assets/svg/ThemeIcons.js +291 -0
  37. package/dist/Editor/common/ColorPickerButton.js +32 -9
  38. package/dist/Editor/common/CustomColorPicker/index.js +106 -0
  39. package/dist/Editor/common/CustomColorPicker/style.js +53 -0
  40. package/dist/Editor/common/CustomDialog/index.js +94 -0
  41. package/dist/Editor/common/CustomDialog/style.js +67 -0
  42. package/dist/Editor/common/CustomSelect.js +33 -0
  43. package/dist/Editor/common/DnD/DragHandleButton.js +1 -1
  44. package/dist/Editor/common/DnD/Draggable.js +0 -1
  45. package/dist/Editor/common/FontLoader/FontList.js +3 -11
  46. package/dist/Editor/common/FontLoader/FontLoader.js +74 -42
  47. package/dist/Editor/common/Icon.js +28 -0
  48. package/dist/Editor/common/ImageSelector/Options/Upload.js +1 -1
  49. package/dist/Editor/common/ImageSelector/Styles.js +3 -9
  50. package/dist/Editor/common/ImageSelector/UploadStyles.js +1 -2
  51. package/dist/Editor/common/MentionsPopup/Styles.js +3 -9
  52. package/dist/Editor/common/RnD/ElementSettings/OtherSettings/Settings.js +2 -1
  53. package/dist/Editor/common/RnD/ElementSettings/Settings/AppHeaderSettings.js +3 -2
  54. package/dist/Editor/common/RnD/ElementSettings/Settings/BoxSettings.js +3 -2
  55. package/dist/Editor/common/RnD/ElementSettings/Settings/ButtonSettings.js +3 -2
  56. package/dist/Editor/common/RnD/ElementSettings/Settings/CodeSettings.js +3 -2
  57. package/dist/Editor/common/RnD/ElementSettings/Settings/FormSettings.js +4 -2
  58. package/dist/Editor/common/RnD/ElementSettings/Settings/ImageSettings.js +3 -2
  59. package/dist/Editor/common/RnD/ElementSettings/Settings/TableSettings.js +3 -2
  60. package/dist/Editor/common/RnD/ElementSettings/Settings/VideoSettings.js +3 -2
  61. package/dist/Editor/common/RnD/ElementSettings/styles.js +0 -1
  62. package/dist/Editor/common/RnD/SwitchViewport/SwitchViewport.js +8 -2
  63. package/dist/Editor/common/RnD/Theme/MainThemeProvider.js +17 -0
  64. package/dist/Editor/common/RnD/Theme/ViewportStimulator.js +6 -3
  65. package/dist/Editor/common/RnD/Utils/gridDropItem.js +5 -4
  66. package/dist/Editor/common/RnD/Utils/index.js +40 -0
  67. package/dist/Editor/common/RnD/index.js +23 -3
  68. package/dist/Editor/common/Section/index.js +60 -89
  69. package/dist/Editor/common/Shorthands/elements.js +54 -0
  70. package/dist/Editor/common/StyleBuilder/buttonStyle.js +4 -2
  71. package/dist/Editor/common/StyleBuilder/fieldTypes/backgroundImage.js +5 -0
  72. package/dist/Editor/common/StyleBuilder/fieldTypes/bannerSpacing.js +12 -2
  73. package/dist/Editor/common/StyleBuilder/fieldTypes/borderRadius.js +15 -7
  74. package/dist/Editor/common/StyleBuilder/fieldTypes/card.js +10 -2
  75. package/dist/Editor/common/StyleBuilder/fieldTypes/color.js +35 -11
  76. package/dist/Editor/common/StyleBuilder/fieldTypes/fontSize.js +13 -4
  77. package/dist/Editor/common/StyleBuilder/fieldTypes/textOptions.js +15 -7
  78. package/dist/Editor/common/Uploader.js +8 -0
  79. package/dist/Editor/commonStyle.js +55 -65
  80. package/dist/Editor/helper/deserialize/index.js +1 -1
  81. package/dist/Editor/helper/index.js +2 -2
  82. package/dist/Editor/helper/theme.js +200 -2
  83. package/dist/Editor/hooks/useDrag.js +17 -11
  84. package/dist/Editor/hooks/useEditorScroll.js +1 -2
  85. package/dist/Editor/hooks/useEditorTheme.js +153 -0
  86. package/dist/Editor/hooks/useMouseMove.js +9 -3
  87. package/dist/Editor/plugins/withEmbeds.js +1 -1
  88. package/dist/Editor/plugins/withHTML.js +3 -9
  89. package/dist/Editor/plugins/withLayout.js +1 -1
  90. package/dist/Editor/plugins/withTable.js +1 -1
  91. package/dist/Editor/theme/ThemeList.js +50 -173
  92. package/dist/Editor/theme/index.js +144 -0
  93. package/dist/Editor/themeSettings/ActiveTheme.js +72 -0
  94. package/dist/Editor/themeSettings/buttons/index.js +283 -0
  95. package/dist/Editor/themeSettings/buttons/style.js +21 -0
  96. package/dist/Editor/themeSettings/colorTheme/index.js +292 -0
  97. package/dist/Editor/themeSettings/colorTheme/style.js +77 -0
  98. package/dist/Editor/themeSettings/fonts/PreviewElement.js +121 -0
  99. package/dist/Editor/themeSettings/fonts/index.js +220 -0
  100. package/dist/Editor/themeSettings/fonts/style.js +44 -0
  101. package/dist/Editor/themeSettings/icons.js +60 -0
  102. package/dist/Editor/themeSettings/index.js +320 -0
  103. package/dist/Editor/themeSettings/style.js +152 -0
  104. package/dist/Editor/themeSettingsAI/icons.js +96 -0
  105. package/dist/Editor/themeSettingsAI/index.js +356 -0
  106. package/dist/Editor/themeSettingsAI/saveTheme.js +197 -0
  107. package/dist/Editor/themeSettingsAI/style.js +250 -0
  108. package/dist/Editor/utils/SlateUtilityFunctions.js +157 -49
  109. package/dist/Editor/utils/button.js +0 -14
  110. package/dist/Editor/utils/draftToSlate.js +3 -2
  111. package/dist/Editor/utils/font.js +40 -37
  112. package/dist/Editor/utils/helper.js +48 -20
  113. package/dist/Editor/utils/link.js +1 -1
  114. package/package.json +6 -3
@@ -1,19 +1,26 @@
1
- import React from "react";
1
+ import React, { useMemo } from "react";
2
2
  import { TextField, IconButton, Grid, Typography } from "@mui/material";
3
3
  import { sizeMap } from "../../../utils/font.js";
4
4
  import { TextMinusIcon, TextPlusIcon } from "../../../common/iconslist.js";
5
+ import { getElementStyle } from "../../../helper/theme.js";
6
+ import { useSlateStatic } from "slate-react";
5
7
  import { jsx as _jsx } from "react/jsx-runtime";
6
8
  import { jsxs as _jsxs } from "react/jsx-runtime";
7
9
  const FontSize = props => {
8
10
  const {
9
- value,
11
+ value: val,
10
12
  data,
11
- onChange
13
+ onChange,
14
+ elementProps
12
15
  } = props;
13
16
  const {
14
17
  key,
15
18
  width
16
19
  } = data;
20
+ const editor = useSlateStatic();
21
+ const value = useMemo(() => {
22
+ return getElementStyle(editor, elementProps, "font-size") || val;
23
+ }, [editor, val]);
17
24
  const handleChange = e => {
18
25
  let inc = parseInt(e.target.value) || 16;
19
26
  inc = inc > 200 ? 200 : inc;
@@ -24,7 +31,9 @@ const FontSize = props => {
24
31
  const getSizeVal = () => {
25
32
  try {
26
33
  const size = `${value}`?.indexOf("px") >= 0 ? value : sizeMap[value] || value;
27
- return parseInt(size || 16);
34
+ const defaultSize = 16;
35
+ const val = parseInt(size || defaultSize);
36
+ return isNaN(val) ? defaultSize : val;
28
37
  } catch (err) {
29
38
  return "";
30
39
  }
@@ -1,13 +1,13 @@
1
- import React from "react";
1
+ import React, { useMemo } from "react";
2
2
  import { FormControl, Grid, ListItemIcon, ListSubheader, MenuItem, Select, Typography } from "@mui/material";
3
- import { getBreakPointsValue } from "../../../helper/theme";
3
+ import { getBreakPointsValue, getElementStyle } from "../../../helper/theme";
4
4
  import useWindowResize from "../../../hooks/useWindowResize";
5
5
  import { useEditorContext } from "../../../hooks/useMouseMove";
6
6
  import FontFamilyAutocomplete from "../../../Toolbar/FormatTools/FontFamilyAutocomplete";
7
7
  import { useSlate } from "slate-react";
8
8
  import KeyboardArrowDownRoundedIcon from "@mui/icons-material/KeyboardArrowDownRounded";
9
9
 
10
- // hideMetaDataOptions -- pass true to hide metadata option in select field
10
+ // hideMetaDataOptions -- pass true to hide metadata option in select field
11
11
  import { jsx as _jsx } from "react/jsx-runtime";
12
12
  import { jsxs as _jsxs } from "react/jsx-runtime";
13
13
  import { Fragment as _Fragment } from "react/jsx-runtime";
@@ -30,14 +30,22 @@ const TextOptions = props => {
30
30
  renderOption,
31
31
  width,
32
32
  webFont = false,
33
- hideMetaDataOptions = false
33
+ hideMetaDataOptions = false,
34
+ themeEnabled
34
35
  } = data;
35
36
  const {
36
37
  fontFamilies
37
38
  } = useEditorContext();
38
- const editor = useSlate();
39
39
  const [size] = useWindowResize();
40
- const value = isBreakpoint ? getBreakPointsValue(val, size?.device) : val;
40
+ const editor = useSlate();
41
+ const value = useMemo(() => {
42
+ const userValue = isBreakpoint ? getBreakPointsValue(val, size?.device) : val;
43
+ if (themeEnabled) {
44
+ // editor takes a little amount of time to update the new style in element, in that case userValue will be returned
45
+ return getElementStyle(editor, elementProps, key) || userValue;
46
+ }
47
+ return userValue;
48
+ }, [editor, isBreakpoint, val, size?.device]);
41
49
  const metaDataMappingOptions = metaMappings?.boards || [];
42
50
  const updatedOption = !hideMetaDataOptions && elementProps?.metadatamapping ? [...options, ...metaDataMappingOptions] : webFont ? fontFamilies?.options : options;
43
51
  const handleChange = (e, d) => {
@@ -116,7 +124,7 @@ const TextOptions = props => {
116
124
  editor: editor,
117
125
  format: key,
118
126
  options: fontFamilies.options,
119
- width: '100%',
127
+ width: "100%",
120
128
  onChange: onChange,
121
129
  val: value,
122
130
  webFont: true
@@ -4,6 +4,7 @@ import { convertBase64 } from "../utils/helper";
4
4
  import { uploadFile } from "../service/fileupload";
5
5
  import Icon from "./Icon";
6
6
  import UploadStyles from "../common/ImageSelector/UploadStyles";
7
+ import { useEditorContext } from "../hooks/useMouseMove";
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";
@@ -18,6 +19,9 @@ const Uploader = props => {
18
19
  const [base64, setBase64] = useState(value?.url);
19
20
  const [fileName, setFileName] = useState("");
20
21
  const [uploading, setUploading] = useState(false);
22
+ const {
23
+ theme
24
+ } = useEditorContext();
21
25
  const handleChange = async e => {
22
26
  const uFile = e.target.files[0];
23
27
  const strImage = await convertBase64(uFile);
@@ -99,6 +103,10 @@ const Uploader = props => {
99
103
  className: "uploadImageSection",
100
104
  children: base64 ? renderThumb() : /*#__PURE__*/_jsx(Grid, {
101
105
  className: "uploadImageText",
106
+ sx: {
107
+ background: `${theme?.palette?.editor?.inputFieldBgColor}`,
108
+ border: `1px solid ${theme?.palette?.editor?.inputFieldBorder}`
109
+ },
102
110
  children: /*#__PURE__*/_jsxs(Button, {
103
111
  component: "label",
104
112
  variant: "text",
@@ -51,40 +51,30 @@ const useCommonStyle = theme => ({
51
51
  },
52
52
  "& .MuiPaper-root": {
53
53
  border: `unset !important`,
54
- borderRadius: '0px',
55
- height: 'fit-content'
54
+ borderRadius: "0px",
55
+ height: "fit-content",
56
+ padding: "2px"
56
57
  },
57
58
  "& p": {
58
59
  marginBottom: "7px",
59
60
  marginTop: "4px"
60
61
  },
61
- "& .MuiPaper-root": {
62
- border: 'unset !important',
63
- borderRadius: '0px',
64
- height: 'fit-content',
65
- padding: '2px'
62
+ "& p": {
63
+ marginBottom: "7px",
64
+ marginTop: "4px"
66
65
  },
67
66
  "& .muiIconsListParent": {
68
67
  "& svg": {
69
68
  color: `${theme?.palette?.editor?.svgTextAlignStrokeColor} !important`
70
69
  },
71
- "&::-webkit-scrollbar-thumb": {
72
- background: `none !important`
73
- },
74
- "&::-webkit-scrollbar-track": {
75
- visibility: "hidden"
76
- },
77
70
  "&::-webkit-scrollbar-thumb": {
78
71
  background: `${theme?.palette?.editor?.brainPopupScroll} !important`
79
- },
80
- "&::-webkit-scrollbar-track": {
81
- visibility: "hidden"
82
72
  }
83
73
  },
84
74
  "& .MuiGrid-root>.MuiGrid-item": {
85
75
  paddingRight: "0px !important",
86
76
  fontFamily: "Inter, sans-serif",
87
- height: 'fit-content'
77
+ height: "fit-content"
88
78
  },
89
79
  "& .MuiInputBase-root": {
90
80
  borderRadius: "10px",
@@ -145,11 +135,11 @@ const useCommonStyle = theme => ({
145
135
  borderRadius: "10px",
146
136
  width: "46px !important",
147
137
  marginLeft: "10px",
148
- height: '36px !important'
138
+ height: "36px !important"
149
139
  }
150
140
  },
151
- '& .MuiFormHelperText-root': {
152
- margin: '4px 0px 0px 0px',
141
+ "& .MuiFormHelperText-root": {
142
+ margin: "4px 0px 0px 0px",
153
143
  color: theme?.palette?.editor?.closeButtonSvgStroke,
154
144
  fontFamily: "Inter, sans-serif"
155
145
  }
@@ -405,14 +395,14 @@ const useCommonStyle = theme => ({
405
395
  padding: "8px 12px",
406
396
  fontSize: "12px",
407
397
  color: theme?.palette?.editor?.menuOptionTextColor,
408
- fontWeight: '500',
398
+ fontWeight: "500",
409
399
  fontFamily: "Inter, sans-serif",
410
- minHeight: '36px',
400
+ minHeight: "36px",
411
401
  "&:hover": {
412
402
  backgroundColor: theme?.palette?.editor?.menuOptionHoverBackground
413
403
  }
414
404
  },
415
- '& .Mui-selected': {
405
+ "& .Mui-selected": {
416
406
  background: `${theme?.palette?.editor?.menuOptionSelectedOption} !important`
417
407
  },
418
408
  "& .MuiListSubheader-root": {
@@ -421,16 +411,16 @@ const useCommonStyle = theme => ({
421
411
  fontSize: "12px"
422
412
  },
423
413
  "& .MuiPaper-root": {
424
- borderRadius: '8px',
425
- padding: '0px',
414
+ borderRadius: "8px",
415
+ padding: "0px",
426
416
  background: `${theme?.palette?.editor?.textWeightPopUpBackground} !important`
427
417
  },
428
- '& .MuiButtonBase-root': {
429
- margin: '4px',
430
- borderRadius: '6px'
418
+ "& .MuiButtonBase-root": {
419
+ margin: "4px",
420
+ borderRadius: "6px"
431
421
  },
432
- '& .MuiList-root': {
433
- padding: '0px'
422
+ "& .MuiList-root": {
423
+ padding: "0px"
434
424
  }
435
425
  },
436
426
  datePicker: {
@@ -475,27 +465,27 @@ const useCommonStyle = theme => ({
475
465
  }
476
466
  }
477
467
  },
478
- pageSettingPopUpRoot: {
479
- padding: "16px 8px 16px 10px!important",
480
- height: "100%"
481
- },
482
468
  buttonMoreOption: {
483
469
  background: `${theme?.palette?.editor?.aiInputBackground} !important`,
484
470
  border: `1px solid ${theme?.palette?.editor?.buttonBorder1} !important`,
485
- padding: '4px !important',
486
- '& svg': {
487
- width: '18px !important',
488
- height: '18px !important',
489
- '& path': {
471
+ padding: "4px !important",
472
+ "& svg": {
473
+ width: "18px !important",
474
+ height: "18px !important",
475
+ "& path": {
490
476
  stroke: `${theme?.palette?.editor?.closeButtonSvgStroke} !important`
491
477
  }
492
478
  }
493
479
  },
480
+ pageSettingPopUpRoot: {
481
+ padding: "16px 8px 16px 10px!important",
482
+ height: "100%"
483
+ },
494
484
  buttonMoreOption2: {
495
485
  background: `${theme?.palette?.editor?.aiInputBackground} !important`,
496
486
  border: `1px solid ${theme?.palette?.editor?.buttonBorder1} !important`,
497
- '& svg': {
498
- '& path': {
487
+ "& svg": {
488
+ "& path": {
499
489
  fill: `${theme?.palette?.editor?.closeButtonSvgStroke} !important`
500
490
  }
501
491
  }
@@ -503,11 +493,11 @@ const useCommonStyle = theme => ({
503
493
  buttonMoreOption3: {
504
494
  background: `${theme?.palette?.editor?.aiInputBackground} !important`,
505
495
  border: `1px solid ${theme?.palette?.editor?.buttonBorder1} !important`,
506
- padding: '5px !important',
507
- '& svg': {
508
- width: '16px !important',
509
- height: '16px !important',
510
- '& path': {
496
+ padding: "5px !important",
497
+ "& svg": {
498
+ width: "16px !important",
499
+ height: "16px !important",
500
+ "& path": {
511
501
  stroke: `${theme?.palette?.editor?.closeButtonSvgStroke} !important`
512
502
  }
513
503
  }
@@ -515,37 +505,37 @@ const useCommonStyle = theme => ({
515
505
  resizeButton: {
516
506
  background: theme?.palette?.editor?.aiInputBackground,
517
507
  border: `1px solid ${theme?.palette?.editor?.buttonBorder1}`,
518
- padding: '5px !important',
519
- borderRadius: '50% !important',
520
- '& svg': {
521
- width: '18px',
522
- height: '18px',
523
- '& path': {
508
+ padding: "5px !important",
509
+ borderRadius: "50% !important",
510
+ "& svg": {
511
+ width: "18px",
512
+ height: "18px",
513
+ "& path": {
524
514
  fill: `${theme?.palette?.editor?.closeButtonSvgStroke}`
525
515
  }
526
516
  },
527
- '&:hover': {
517
+ "&:hover": {
528
518
  background: theme?.palette?.editor?.aiInputBackground
529
519
  }
530
520
  },
531
521
  gradientFillBtn: {
532
522
  background: `linear-gradient(112.61deg, #2C63ED 19.3%, #8360FD 88.14%) !important`,
533
- textTransform: 'math-auto !important',
534
- color: '#FFFFFF !important',
535
- padding: '0px 12px !important',
536
- height: '32px',
537
- borderRadius: '8px',
538
- fontWeight: '500',
539
- fontSize: '14px'
523
+ textTransform: "math-auto !important",
524
+ color: "#FFFFFF !important",
525
+ padding: "0px 12px !important",
526
+ height: "32px",
527
+ borderRadius: "8px",
528
+ fontWeight: "500",
529
+ fontSize: "14px"
540
530
  },
541
531
  emptyThumbBtn: {
542
532
  background: `${theme?.palette?.editor?.sectionSettingIconHover} !important`,
543
533
  color: `${theme?.palette?.editor?.textColor} !important`,
544
- fontSize: '14px !important',
545
- '& svg': {
546
- width: '20px !important',
547
- height: '20px !important',
548
- '& path': {
534
+ fontSize: "14px !important",
535
+ "& svg": {
536
+ width: "20px !important",
537
+ height: "20px !important",
538
+ "& path": {
549
539
  stroke: `${theme?.palette?.editor?.closeButtonSvgStroke} !important`
550
540
  }
551
541
  }
@@ -175,7 +175,7 @@ const deserialize = el => {
175
175
  if (el.nodeType === 3) {
176
176
  // if there is any line-breaks
177
177
  const match = /\r|\n/.exec(el.textContent);
178
- const text = el.textContent.replace(/\r|\n/g, "").trim();
178
+ const text = el.textContent?.trim()?.length === 0 ? el.textContent.replace(/\r|\n/g, "").trim() : el.textContent;
179
179
  return match && !text ? null : {
180
180
  text,
181
181
  ...getInlineTextStyles(el.parentNode)
@@ -337,14 +337,14 @@ export const isCarouselSelected = editor => {
337
337
  return false;
338
338
  }
339
339
  const [nodeEntry] = Editor.nodes(editor, {
340
- match: n => !Editor.isEditor(n) && Element.isElement(n) && n.type === 'carousel'
340
+ match: n => !Editor.isEditor(n) && Element.isElement(n) && n.type === "carousel"
341
341
  });
342
342
  if (!nodeEntry) {
343
343
  return false;
344
344
  }
345
345
  const [node] = nodeEntry;
346
346
  const carouselDom = ReactEditor.toDOMNode(editor, node);
347
- const isEdit = carouselDom.classList.contains('carousel_slider_edit');
347
+ const isEdit = carouselDom.classList.contains("carousel_slider_edit");
348
348
  return !isEdit;
349
349
  } catch (err) {
350
350
  console.log(err);
@@ -1,4 +1,6 @@
1
+ import { ReactEditor } from "slate-react";
1
2
  import { sizeMap } from "../utils/font";
3
+ import { Editor, Node } from "slate";
2
4
  export const breakpoints = {
3
5
  small: 0,
4
6
  mobile: 600,
@@ -33,7 +35,7 @@ const overrideValues = (value, ot) => {
33
35
  return Object.keys(value).reduce((a, b) => {
34
36
  return {
35
37
  ...a,
36
- [b]: overrides[ot] ? overrides[ot](value[b]) : value
38
+ [b]: overrides[ot] ? overrides[ot](value[b], value) : value
37
39
  };
38
40
  }, {});
39
41
  };
@@ -50,7 +52,15 @@ const overrides = {
50
52
  overrideReSizeH: val => {
51
53
  return val ? `${val?.height}px` : "auto";
52
54
  },
53
- overrideBorderRadius: val => {
55
+ overrideBorderRadius: (val, breakpointValues) => {
56
+ if (!val?.topLeft) {
57
+ Object.values(breakpointValues || {}).forEach(v => {
58
+ if (v) {
59
+ // Applying the values from breakpoints that exist to those that do not have
60
+ val = v;
61
+ }
62
+ });
63
+ }
54
64
  return `${val?.topLeft}px ${val?.topRight}px ${val?.bottomLeft}px ${val?.bottomRight}px`;
55
65
  }
56
66
  };
@@ -118,6 +128,194 @@ export const getTRBLBreakPoints = (value, breakpoint) => {
118
128
  console.log(err);
119
129
  }
120
130
  };
131
+ export function getElementStyle(editor, element, stylePropertyName) {
132
+ try {
133
+ const path = ReactEditor.findPath(editor, element);
134
+ if (path?.length) {
135
+ const currentEle = Node.get(editor, path);
136
+ const dom = ReactEditor.toDOMNode(editor, currentEle);
137
+ const editorBtn = dom?.querySelector(".button.theme-element");
138
+ return getElementProperty(editorBtn, stylePropertyName);
139
+ }
140
+ } catch (err) {
141
+ // console.log(err);
142
+ }
143
+ }
144
+ export function getTextSizeVal(editor) {
145
+ try {
146
+ const currentNode = Node.get(editor, editor.selection.anchor.path);
147
+ const currentElement = ReactEditor.toDOMNode(editor, currentNode);
148
+ if (currentElement) {
149
+ const element = currentElement.querySelector('span[data-slate-string="true"]');
150
+ return getElementProperty(element, "font-size");
151
+ }
152
+ } catch (err) {
153
+ // console.log(err);
154
+ }
155
+ }
156
+ export function getVariableValue(val) {
157
+ const bodyElement = document.body;
158
+ const computedStyle = getComputedStyle(bodyElement);
159
+ const [, variableName] = val?.match(/var\((--[^)]+)\)/) || [];
160
+ const varValue = computedStyle.getPropertyValue(variableName).trim();
161
+ return varValue;
162
+ }
163
+ const MAP_PROPERTY_KEYS = {
164
+ fontFamily: "font-family",
165
+ fontSize: "font-size",
166
+ textSize: "font-size",
167
+ fontWeight: "font-weight"
168
+ };
169
+ export function getElementProperty(element, styleProperty) {
170
+ if (!element) {
171
+ return "";
172
+ }
173
+ const computedStyle = window.getComputedStyle(element);
174
+ const property = MAP_PROPERTY_KEYS[styleProperty] || styleProperty;
175
+ let style = computedStyle.getPropertyValue(property);
176
+ if (property === "font-family") {
177
+ style = style.replace(/"/g, ""); // remove double quotes if exists e.g: '"Courier New"'
178
+ }
179
+
180
+ return style || "";
181
+ }
182
+ export const textThemeFields = ["fontFamily", "fontSize", "color", "bold", "italic"
183
+ // "underline",
184
+ // "strikethrough",
185
+ ];
186
+
187
+ const themeElements = ["headingOne", "headingTwo", "headingThree", "headingFour", "headingFive", "headingSix", "paragraphOne", "paragraphTwo", "paragraphThree"];
188
+ export const isTextCustomized = editor => {
189
+ try {
190
+ if (editor.selection) {
191
+ const currentElement = Node.parent(editor, editor?.selection?.anchor?.path);
192
+ if (!currentElement) {
193
+ return false;
194
+ }
195
+ const {
196
+ children,
197
+ type
198
+ } = currentElement;
199
+ if (!themeElements.includes(type)) {
200
+ return false;
201
+ }
202
+ if (children?.length > 1) {
203
+ return true;
204
+ }
205
+ const customized = textThemeFields.some(field => {
206
+ const element = children[0] || {};
207
+ const value = element[field];
208
+ if (field === "fontSize") {
209
+ return Object.keys(value || {}).length;
210
+ } else {
211
+ return value;
212
+ }
213
+ });
214
+ return customized;
215
+ } else {
216
+ return null;
217
+ }
218
+ } catch (err) {
219
+ return null;
220
+ }
221
+ };
222
+ const addToTheme = (field, value, element) => {
223
+ switch (field) {
224
+ case "fontFamily":
225
+ return {
226
+ fontFamily: value
227
+ };
228
+ case "fontSize":
229
+ return {
230
+ fontSize: value?.lg
231
+ };
232
+ case "color":
233
+ return {
234
+ color: value
235
+ };
236
+ case "bold":
237
+ return {
238
+ fontWeight: "bold"
239
+ };
240
+ case "italic":
241
+ return {
242
+ fontStyle: "italic"
243
+ };
244
+ // case "underline":
245
+ // case "strikethrough":
246
+ // let textDecoration = "";
247
+
248
+ // if (element.underline) {
249
+ // textDecoration = "underline";
250
+ // }
251
+
252
+ // if (element.strikethrough) {
253
+ // textDecoration += " strikethrough";
254
+ // }
255
+
256
+ // return { textDecoration };
257
+ default:
258
+ return {};
259
+ }
260
+ };
261
+ const MAP_TEXT_THEME_FIELD = {
262
+ headingOne: "h1",
263
+ headingTwo: "h2",
264
+ headingThree: "h3",
265
+ headingFour: "h4",
266
+ headingFive: "h5",
267
+ headingSix: "h6",
268
+ paragraphOne: "para1",
269
+ paragraphTwo: "para2",
270
+ paragraphThree: "para3"
271
+ };
272
+ export const saveToTheme = editor => {
273
+ try {
274
+ if (editor.selection) {
275
+ const currentElement = Node.parent(editor, editor?.selection?.anchor?.path);
276
+ if (!currentElement) {
277
+ return false;
278
+ }
279
+ const {
280
+ children
281
+ } = currentElement;
282
+ if (children?.length > 1) {
283
+ return true;
284
+ }
285
+ let theme = {};
286
+ textThemeFields.forEach(field => {
287
+ const element = children[0] || {};
288
+ const value = element[field];
289
+ let style = {};
290
+ let isValueExist = false;
291
+ if (value) {
292
+ isValueExist = true;
293
+ if (field === "fontSize") {
294
+ isValueExist = !!Object.keys(value).length;
295
+ }
296
+ }
297
+ if (isValueExist) {
298
+ style = addToTheme(field, value, element);
299
+ }
300
+ theme = {
301
+ ...theme,
302
+ ...style
303
+ };
304
+ });
305
+ textThemeFields.forEach(field => {
306
+ Editor.removeMark(editor, field);
307
+ });
308
+ return {
309
+ field: MAP_TEXT_THEME_FIELD[currentElement?.type],
310
+ theme
311
+ };
312
+ }
313
+ } catch (err) {
314
+ return;
315
+ }
316
+ };
317
+ export const HEADING_THEME_FIELDS = ["h1", "h2", "h3", "h4", "h5", "h6"];
318
+ export const PARAGRAPH_THEME_FIELDS = ["para1", "para2", "para3"];
121
319
  export const getBRValue = (props, rbr = "lg") => {
122
320
  const {
123
321
  value,
@@ -1,20 +1,26 @@
1
- import { useCallback, useEffect, useState } from "react";
1
+ import { useEffect, useState } from "react";
2
2
  const useDrag = () => {
3
3
  const [event, setEvent] = useState("");
4
- const onMouseDown = useCallback(() => {
5
- setEvent("start");
6
- }, []);
7
- const onMouseUp = useCallback(() => {
8
- setEvent("end");
9
- }, []);
10
4
  useEffect(() => {
11
- document.addEventListener("pointerdown", onMouseDown);
12
- document.addEventListener("pointerup", onMouseUp);
5
+ addListener();
13
6
  return () => {
14
- document.removeEventListener("pointerdown", onMouseDown);
15
- document.removeEventListener("pointerup", onMouseUp);
7
+ removeListener();
16
8
  };
17
9
  }, []);
10
+ const onMouseDown = () => {
11
+ setEvent("start");
12
+ };
13
+ const onMouseUp = () => {
14
+ setEvent("end");
15
+ };
16
+ const addListener = () => {
17
+ document.addEventListener("pointerdown", onMouseDown);
18
+ document.addEventListener("pointerup", onMouseUp);
19
+ };
20
+ const removeListener = () => {
21
+ document.removeEventListener("pointerdown", onMouseDown);
22
+ document.removeEventListener("pointerup", onMouseUp);
23
+ };
18
24
  return [event];
19
25
  };
20
26
  export default useDrag;
@@ -4,9 +4,8 @@ function useEditorScroll(editorWrapper = {
4
4
  }, callback) {
5
5
  useEffect(() => {
6
6
  const handleScroll = () => {
7
- console.log("Editor debug useEditorScroll ====>", editorWrapper, callback);
8
7
  if (editorWrapper.current) {
9
- callback();
8
+ callback("scroll");
10
9
  }
11
10
  };
12
11
  const currentEditorWrapper = editorWrapper.current;