@flozy/editor 10.4.5 → 10.4.7

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 (192) hide show
  1. package/dist/Editor/ChatEditor.js +17 -16
  2. package/dist/Editor/CommonEditor.js +134 -18
  3. package/dist/Editor/DialogWrapper.js +31 -25
  4. package/dist/Editor/Editor.css +46 -8
  5. package/dist/Editor/Elements/AI/PopoverAIInput.js +11 -3
  6. package/dist/Editor/Elements/Accordion/Accordion.js +46 -9
  7. package/dist/Editor/Elements/Accordion/AccordionSummary.js +1 -23
  8. package/dist/Editor/Elements/AppHeader/AppHeader.js +10 -5
  9. package/dist/Editor/Elements/Button/EditorButton.js +26 -10
  10. package/dist/Editor/Elements/Carousel/CarouselItem.js +2 -1
  11. package/dist/Editor/Elements/Color Picker/ColorButtons.js +61 -14
  12. package/dist/Editor/Elements/Color Picker/ColorPicker.css +25 -1
  13. package/dist/Editor/Elements/Color Picker/ColorPicker.js +10 -7
  14. package/dist/Editor/Elements/Color Picker/Styles.js +15 -13
  15. package/dist/Editor/Elements/DataView/Layouts/ColumnView.js +4 -2
  16. package/dist/Editor/Elements/DataView/Layouts/DataTypes/Components/MultiSelect.js +482 -0
  17. package/dist/Editor/Elements/DataView/Layouts/DataTypes/Components/SelectV1.js +513 -0
  18. package/dist/Editor/Elements/DataView/Layouts/DataTypes/MultiSelectType.js +27 -11
  19. package/dist/Editor/Elements/DataView/Layouts/DataTypes/SelectType.js +29 -9
  20. package/dist/Editor/Elements/DataView/Layouts/Options/AddOptions.js +17 -6
  21. package/dist/Editor/Elements/DataView/Layouts/Options/EditOption.js +4 -3
  22. package/dist/Editor/Elements/DataView/Layouts/Options/index.js +11 -0
  23. package/dist/Editor/Elements/DataView/Layouts/ViewData.js +8 -4
  24. package/dist/Editor/Elements/Embed/Image.js +3 -2
  25. package/dist/Editor/Elements/Embed/Video.js +1 -1
  26. package/dist/Editor/Elements/EmbedScript/Code.js +14 -2
  27. package/dist/Editor/Elements/EmbedScript/EmbedScriptPopup.js +57 -28
  28. package/dist/Editor/Elements/EmbedScript/styles.js +89 -0
  29. package/dist/Editor/Elements/Form/Form.js +184 -171
  30. package/dist/Editor/Elements/Form/FormElements/FormText.js +23 -6
  31. package/dist/Editor/Elements/Form/FormElements/FormTextArea.js +2 -2
  32. package/dist/Editor/Elements/Form/FormField.js +13 -6
  33. package/dist/Editor/Elements/Form/Workflow/Styles.js +24 -22
  34. package/dist/Editor/Elements/FreeGrid/FreeGrid.js +40 -32
  35. package/dist/Editor/Elements/FreeGrid/FreeGridBox.js +7 -4
  36. package/dist/Editor/Elements/FreeGrid/FreeGridItem.js +1 -0
  37. package/dist/Editor/Elements/FreeGrid/Options/More.js +8 -8
  38. package/dist/Editor/Elements/FreeGrid/helper.js +115 -0
  39. package/dist/Editor/Elements/FreeGrid/styles.js +75 -7
  40. package/dist/Editor/Elements/Grid/Grid.js +14 -2
  41. package/dist/Editor/Elements/Grid/GridItem.js +1 -1
  42. package/dist/Editor/Elements/List/CheckList.js +3 -2
  43. package/dist/Editor/Elements/Search/SearchAttachment.js +40 -9
  44. package/dist/Editor/Elements/Search/SearchButton.js +9 -8
  45. package/dist/Editor/Elements/Search/SearchList.js +9 -7
  46. package/dist/Editor/Elements/Signature/Signature.css +2 -1
  47. package/dist/Editor/Elements/Signature/SignatureOptions/DrawSignature.js +18 -5
  48. package/dist/Editor/Elements/Signature/SignatureOptions/UploadSignature.js +16 -3
  49. package/dist/Editor/Elements/SimpleText/index.js +6 -1
  50. package/dist/Editor/Elements/SimpleText/style.js +2 -2
  51. package/dist/Editor/Elements/Table/DragButton.js +0 -1
  52. package/dist/Editor/Elements/Table/Draggable.js +6 -2
  53. package/dist/Editor/Elements/Table/Styles.js +7 -0
  54. package/dist/Editor/Elements/Table/Table.js +3 -3
  55. package/dist/Editor/Elements/Table/TableCell.js +31 -8
  56. package/dist/Editor/Elements/Title/title.js +6 -6
  57. package/dist/Editor/Elements/Variables/VariableButton.js +10 -1
  58. package/dist/Editor/MiniEditor.js +2 -1
  59. package/dist/Editor/Styles/EditorStyles.js +5 -5
  60. package/dist/Editor/Toolbar/FormatTools/Dropdown.js +27 -3
  61. package/dist/Editor/Toolbar/FormatTools/FontFamilyAutocomplete.js +4 -3
  62. package/dist/Editor/Toolbar/FormatTools/MarkButton.js +2 -2
  63. package/dist/Editor/Toolbar/FormatTools/TextSize.js +10 -13
  64. package/dist/Editor/Toolbar/Mini/MiniToolbar.js +2 -1
  65. package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/MiniColorPicker.js +4 -2
  66. package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/SelectFontSize.js +6 -13
  67. package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/SelectTypography.js +167 -42
  68. package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/index.js +7 -4
  69. package/dist/Editor/Toolbar/PopupTool/PopperHeader.js +2 -1
  70. package/dist/Editor/Toolbar/PopupTool/PopupToolStyle.js +72 -12
  71. package/dist/Editor/Toolbar/PopupTool/TextFormat.js +100 -27
  72. package/dist/Editor/Toolbar/PopupTool/ThemeTextFormat.js +439 -0
  73. package/dist/Editor/Toolbar/PopupTool/index.js +1 -1
  74. package/dist/Editor/Toolbar/toolbarGroups.js +48 -6
  75. package/dist/Editor/assets/svg/BackIcon.js +18 -0
  76. package/dist/Editor/assets/svg/ClearAllRounded.js +31 -0
  77. package/dist/Editor/assets/svg/ResetIconNew.js +23 -0
  78. package/dist/Editor/assets/svg/SettingsIcon.js +1 -0
  79. package/dist/Editor/assets/svg/ThemeIcons.js +293 -0
  80. package/dist/Editor/common/Checkbox/index.js +46 -0
  81. package/dist/Editor/common/Checkbox/styles.js +45 -0
  82. package/dist/Editor/common/ColorPickerButton.js +41 -16
  83. package/dist/Editor/common/CustomColorPicker/index.js +130 -0
  84. package/dist/Editor/common/CustomColorPicker/style.js +53 -0
  85. package/dist/Editor/common/CustomDialog2/index.js +94 -0
  86. package/dist/Editor/common/CustomDialog2/style.js +67 -0
  87. package/dist/Editor/common/CustomSelect.js +43 -0
  88. package/dist/Editor/common/DnD/DragHandleButton.js +1 -1
  89. package/dist/Editor/common/FontLoader/FontLoader.js +3 -0
  90. package/dist/Editor/common/Icon.js +31 -1
  91. package/dist/Editor/common/ImageSelector/ImageSelector.js +2 -2
  92. package/dist/Editor/common/ImageSelector/Styles.js +3 -9
  93. package/dist/Editor/common/LinkSettings/NavComponents.js +61 -55
  94. package/dist/Editor/common/LinkSettings/index.js +82 -80
  95. package/dist/Editor/common/LinkSettings/navOptions.js +2 -2
  96. package/dist/Editor/common/LinkSettings/style.js +209 -74
  97. package/dist/Editor/common/MentionsPopup/index.js +4 -1
  98. package/dist/Editor/common/RadioGroup/index.js +48 -0
  99. package/dist/Editor/common/RadioGroup/styles.js +29 -0
  100. package/dist/Editor/common/RnD/ElementOptions/Actions.js +13 -15
  101. package/dist/Editor/common/RnD/ElementOptions/Icons/LinkIcon.js +1 -0
  102. package/dist/Editor/common/RnD/ElementOptions/index.js +2 -2
  103. package/dist/Editor/common/RnD/ElementOptions/styles.js +28 -1
  104. package/dist/Editor/common/RnD/ElementSettings/OtherSettings/Settings.js +6 -5
  105. package/dist/Editor/common/RnD/ElementSettings/OtherSettings/Signature.js +4 -3
  106. package/dist/Editor/common/RnD/ElementSettings/Settings/AppHeaderSettings.js +3 -2
  107. package/dist/Editor/common/RnD/ElementSettings/Settings/BoxSettings.js +3 -2
  108. package/dist/Editor/common/RnD/ElementSettings/Settings/ButtonSettings.js +3 -2
  109. package/dist/Editor/common/RnD/ElementSettings/Settings/CodeSettings.js +3 -2
  110. package/dist/Editor/common/RnD/ElementSettings/Settings/FormSettings.js +4 -2
  111. package/dist/Editor/common/RnD/ElementSettings/Settings/ImageSettings.js +3 -2
  112. package/dist/Editor/common/RnD/ElementSettings/Settings/TableSettings.js +3 -2
  113. package/dist/Editor/common/RnD/ElementSettings/Settings/TextSettings.js +3 -1
  114. package/dist/Editor/common/RnD/ElementSettings/Settings/VideoSettings.js +3 -2
  115. package/dist/Editor/common/RnD/ElementSettings/styles.js +146 -12
  116. package/dist/Editor/common/RnD/OptionsPopup/index.js +8 -5
  117. package/dist/Editor/common/RnD/OptionsPopup/style.js +120 -19
  118. package/dist/Editor/common/RnD/SwitchViewport/SwitchViewport.js +8 -5
  119. package/dist/Editor/common/RnD/Theme/MainThemeProvider.js +17 -0
  120. package/dist/Editor/common/RnD/Theme/ViewportStimulator.js +6 -3
  121. package/dist/Editor/common/RnD/Utils/gridDropItem.js +28 -19
  122. package/dist/Editor/common/RnD/Utils/index.js +3 -1
  123. package/dist/Editor/common/RnD/VirtualElement/VirtualTextElement.js +42 -58
  124. package/dist/Editor/common/RnD/VirtualElement/helper.js +323 -132
  125. package/dist/Editor/common/RnD/VirtualElement/styles.js +16 -0
  126. package/dist/Editor/common/RnD/index.js +67 -38
  127. package/dist/Editor/common/Select/index.js +44 -5
  128. package/dist/Editor/common/Select/styles.js +30 -2
  129. package/dist/Editor/common/Shorthands/elements.js +65 -11
  130. package/dist/Editor/common/SnackBar/index.js +43 -0
  131. package/dist/Editor/common/StyleBuilder/accordionTitleBtnStyle.js +2 -2
  132. package/dist/Editor/common/StyleBuilder/accordionTitleStyle.js +12 -9
  133. package/dist/Editor/common/StyleBuilder/buttonStyle.js +4 -2
  134. package/dist/Editor/common/StyleBuilder/embedVideoStyle.js +4 -0
  135. package/dist/Editor/common/StyleBuilder/fieldTypes/backgroundImage.js +5 -0
  136. package/dist/Editor/common/StyleBuilder/fieldTypes/bannerSpacing.js +12 -2
  137. package/dist/Editor/common/StyleBuilder/fieldTypes/borderRadius.js +15 -7
  138. package/dist/Editor/common/StyleBuilder/fieldTypes/card.js +16 -8
  139. package/dist/Editor/common/StyleBuilder/fieldTypes/color.js +36 -10
  140. package/dist/Editor/common/StyleBuilder/fieldTypes/embedUpload.js +115 -0
  141. package/dist/Editor/common/StyleBuilder/fieldTypes/fontSize.js +16 -7
  142. package/dist/Editor/common/StyleBuilder/fieldTypes/index.js +3 -1
  143. package/dist/Editor/common/StyleBuilder/fieldTypes/lineSpacing.js +7 -6
  144. package/dist/Editor/common/StyleBuilder/fieldTypes/menusArray.js +13 -6
  145. package/dist/Editor/common/StyleBuilder/fieldTypes/textOptions.js +15 -7
  146. package/dist/Editor/common/StyleBuilder/pageSettingsStyle.js +5 -7
  147. package/dist/Editor/common/SwipeableDrawer/style.js +14 -12
  148. package/dist/Editor/common/Uploader.js +16 -0
  149. package/dist/Editor/common/iconListV2.js +177 -6
  150. package/dist/Editor/common/iconslist.js +24 -0
  151. package/dist/Editor/commonStyle.js +186 -62
  152. package/dist/Editor/helper/index.js +5 -1
  153. package/dist/Editor/helper/textIndeces.js +58 -0
  154. package/dist/Editor/helper/theme.js +203 -2
  155. package/dist/Editor/hooks/useEditorTheme.js +153 -0
  156. package/dist/Editor/hooks/useMouseMove.js +8 -5
  157. package/dist/Editor/hooks/useTable.js +5 -4
  158. package/dist/Editor/hooks/useThemeValues.js +63 -0
  159. package/dist/Editor/plugins/withEmbeds.js +1 -1
  160. package/dist/Editor/plugins/withHTML.js +3 -1
  161. package/dist/Editor/plugins/withTable.js +1 -1
  162. package/dist/Editor/theme/ThemeList.js +50 -173
  163. package/dist/Editor/theme/index.js +149 -0
  164. package/dist/Editor/themeSettings/ActiveTheme.js +82 -0
  165. package/dist/Editor/themeSettings/buttons/index.js +300 -0
  166. package/dist/Editor/themeSettings/buttons/style.js +23 -0
  167. package/dist/Editor/themeSettings/colorTheme/index.js +310 -0
  168. package/dist/Editor/themeSettings/colorTheme/style.js +81 -0
  169. package/dist/Editor/themeSettings/fonts/PreviewElement.js +121 -0
  170. package/dist/Editor/themeSettings/fonts/index.js +240 -0
  171. package/dist/Editor/themeSettings/fonts/style.js +62 -0
  172. package/dist/Editor/themeSettings/icons.js +60 -0
  173. package/dist/Editor/themeSettings/index.js +380 -0
  174. package/dist/Editor/themeSettings/style.js +299 -0
  175. package/dist/Editor/themeSettingsAI/icons.js +96 -0
  176. package/dist/Editor/themeSettingsAI/index.js +355 -0
  177. package/dist/Editor/themeSettingsAI/saveTheme.js +202 -0
  178. package/dist/Editor/themeSettingsAI/style.js +332 -0
  179. package/dist/Editor/utils/SlateUtilityFunctions.js +172 -46
  180. package/dist/Editor/utils/accordion.js +14 -4
  181. package/dist/Editor/utils/button.js +1 -17
  182. package/dist/Editor/utils/customHooks/useTableResize.js +49 -9
  183. package/dist/Editor/utils/draftToSlate.js +3 -2
  184. package/dist/Editor/utils/events.js +50 -6
  185. package/dist/Editor/utils/font.js +40 -37
  186. package/dist/Editor/utils/form.js +4 -4
  187. package/dist/Editor/utils/formfield.js +9 -2
  188. package/dist/Editor/utils/helper.js +210 -26
  189. package/dist/Editor/utils/insertAppHeader.js +1 -1
  190. package/dist/Editor/utils/signature.js +2 -9
  191. package/dist/Editor/utils/updateFormName.js +22 -0
  192. package/package.json +4 -4
@@ -7,43 +7,43 @@ export const sizeMap = {
7
7
  export const fontFamilyMap = {
8
8
  PoppinsRegular: "PoppinsRegular",
9
9
  PoppinsBold: "PoppinsBold",
10
- sans: "Helvetica,Arial, sans serif",
11
- serif: "Georgia, Times New Roaman,serif",
12
- monospace: "Monaco, Courier New,monospace",
13
- roboto: "'Roboto', sans-serif",
14
- qwitcher: "'Qwitcher Grypen', cursive",
15
- garamond: "'EB Garamond', serif",
16
- anton: "'Anton', sans-serif",
17
- dmserif: "'DM Serif Text', serif",
18
- inter: "'Inter', sans-serif",
19
- libre: "'Libre Baskerville', serif",
20
- montserrat: "'Montserrat', sans-serif",
21
- opensans: "'Open Sans', sans-serif",
22
- publicsans: "'Public Sans', sans-serif",
23
- raleway: "'Raleway', sans-serif",
24
- spacemono: "'Space Mono', sans-serif",
25
- bulgarian: "'Bulgarian Garamond', monospace",
26
- impact: "'Impact', serif",
27
- redacted: "'Redacted Script', cursive",
28
- greatVibes: "'Great Vibes', cursive",
29
- zeyada: "'Zeyada', cursive",
30
- allura: "'Allura', cursive",
31
- pinyon: "'Pinyon Script', cursive",
32
- muellerhoff: "'Herr Von Muellerhoff', cursive",
33
- dawning: "'Dawning of a New Day', cursive",
10
+ sans: 'Helvetica, Arial, "sans serif"',
11
+ serif: 'Georgia, "Times New Roaman", serif',
12
+ monospace: 'Monaco, "Courier New", monospace',
13
+ roboto: "Roboto, sans-serif",
14
+ qwitcher: '"Qwitcher Grypen", cursive',
15
+ garamond: '"EB Garamond", serif',
16
+ anton: "Anton, sans-serif",
17
+ dmserif: '"DM Serif Text", serif',
18
+ inter: "Inter, sans-serif",
19
+ libre: '"Libre Baskerville", serif',
20
+ montserrat: "Montserrat, sans-serif",
21
+ opensans: '"Open Sans", sans-serif',
22
+ publicsans: '"Public Sans", sans-serif',
23
+ raleway: "Raleway, sans-serif",
24
+ spacemono: '"Space Mono", sans-serif',
25
+ bulgarian: '"Bulgarian Garamond", monospace',
26
+ impact: "Impact, serif",
27
+ redacted: '"Redacted Script", cursive',
28
+ greatVibes: '"Great Vibes", cursive',
29
+ zeyada: "Zeyada, cursive",
30
+ allura: "Allura, cursive",
31
+ pinyon: '"Pinyon Script", cursive',
32
+ muellerhoff: '"Herr Von Muellerhoff", cursive',
33
+ dawning: '"Dawning of a New Day", cursive',
34
34
  // New Font Added for Type Signature
35
- comingsoon: "'Coming Soon', cursive",
36
- dancingScript: "'Dancing Script', cursive",
37
- engagement: "'Engagement', cursive",
38
- gaegu: "'Gaegu', cursive",
39
- ingridDarling: "'Ingrid Darling', cursive",
40
- kitaOne: "'Kite One', sans - serif",
41
- laBelleAurore: "'La Belle Aurore', cursive",
42
- lobster: "'Lobster', cursive",
43
- meaCulpa: "'Mea Culpa', cursive",
44
- meddon: "'Meddon', cursive",
45
- merriWeather: "'Merriweather', serif",
46
- theGirlNextDoor: "'The Girl Next Door', cursive"
35
+ comingsoon: '"Coming Soon", cursive',
36
+ dancingScript: '"Dancing Script", cursive',
37
+ engagement: "Engagement, cursive",
38
+ gaegu: "Gaegu, cursive",
39
+ ingridDarling: '"Ingrid Darling", cursive',
40
+ kitaOne: "Times",
41
+ laBelleAurore: '"La Belle Aurore", cursive',
42
+ lobster: "Lobster, cursive",
43
+ meaCulpa: '"Mea Culpa", cursive',
44
+ meddon: "Meddon, cursive",
45
+ merriWeather: "Merriweather, serif",
46
+ theGirlNextDoor: '"The Girl Next Door", cursive'
47
47
  };
48
48
  export const fontOptions = Object.keys(fontFamilyMap).map(m => {
49
49
  return {
@@ -62,7 +62,10 @@ export const signedTextFonts = Object.keys(fontFamilyMap).slice(-12).map(m => {
62
62
  export const headingMap = {
63
63
  headingOne: "32px",
64
64
  headingTwo: "24px",
65
- headingThree: "19px"
65
+ headingThree: "19px",
66
+ headingFour: "16px",
67
+ headingFive: "13px",
68
+ headingSix: "11px"
66
69
  };
67
70
  export const fontWeightOptions = [{
68
71
  text: "Bold",
@@ -12,10 +12,10 @@ export const FORM_NODE = () => {
12
12
  },
13
13
  buttonProps: {
14
14
  bannerSpacing: {
15
- left: 12,
16
- right: 12,
17
- top: 12,
18
- bottom: 12
15
+ left: 24,
16
+ right: 24,
17
+ top: 4,
18
+ bottom: 4
19
19
  }
20
20
  },
21
21
  workflow: [],
@@ -7,6 +7,7 @@ export const formField = data => {
7
7
  name: `field_${new Date().getTime()}`,
8
8
  key: `field_${new Date().getTime()}`,
9
9
  label: `field_${new Date().getTime()}`,
10
+ uid: `field_${new Date().getTime()}`,
10
11
  placeholder: "Placeholder...",
11
12
  children: [{
12
13
  text: ""
@@ -22,8 +23,14 @@ export const formField = data => {
22
23
  },
23
24
  fontFamily: data?.fontFamily ? data?.fontFamily : "",
24
25
  textSize: data?.textSize ? data?.textSize : "",
25
- textColor: data?.textColor ? data?.textColor : "",
26
- fontWeight: data?.fontWeight ? data?.fontWeight : "500"
26
+ textColor: data?.textColor && `${data?.textColor} !important`,
27
+ fontWeight: data?.fontWeight ? data?.fontWeight : "500",
28
+ borderRadius: {
29
+ topLeft: 8,
30
+ topRight: 8,
31
+ bottomLeft: 8,
32
+ bottomRight: 8
33
+ }
27
34
  };
28
35
  };
29
36
  export const insertGridItem = editor => {
@@ -2,6 +2,8 @@ import { Editor, Node, Transforms, Element, Path, Range, Text } from "slate";
2
2
  import { ReactEditor } from "slate-react";
3
3
  import insertNewLine from "./insertNewLine";
4
4
  import { getDevice } from "../helper/theme";
5
+ import { activeMark, getSelectedElementStyle } from "./SlateUtilityFunctions";
6
+ import { getCurrentElementText } from "../plugins/withHTML";
5
7
  export const windowVar = {};
6
8
  let ST_TIMEOUT = null;
7
9
  const BLOCKS = ["grid", "dataView"];
@@ -333,7 +335,8 @@ const handleLinkBtnClick = (e, props, isMobilePreview, metadata) => {
333
335
  }
334
336
  }
335
337
  };
336
- export const handleLinkType = (url, linkType, readOnly, openInNewTab, onClick = () => {}, metadata = {}) => {
338
+ export const handleLinkType = (url, linkType, readOnly, openInNewTab, onClick = () => {}, metadata = {}, isEditMode, isCustomMobile // for drawer in App Header
339
+ ) => {
337
340
  const props = {};
338
341
  if (!readOnly) {
339
342
  return {
@@ -365,6 +368,9 @@ export const handleLinkType = (url, linkType, readOnly, openInNewTab, onClick =
365
368
  case "page":
366
369
  const [page = "", section] = url?.split("#") || [];
367
370
  const sec = section ? `#${section}` : "";
371
+ if (isEditMode) {
372
+ break;
373
+ }
368
374
  if (page === "_currentPage") {
369
375
  props.component = "button";
370
376
  props.onClick = () => {
@@ -385,11 +391,12 @@ export const handleLinkType = (url, linkType, readOnly, openInNewTab, onClick =
385
391
  const currentUserPage = getCurrentUserPage();
386
392
  props.href = isCurrentPage(page) ? `./${currentUserPage}${sec}` : `./${url}`;
387
393
  if (openInNewTab) {
388
- if (isCurrentPage(page)) {
389
- // temp fix, if user is presented in current page, open in new tab option is restricted, we will scroll to the element in current page
390
- } else {
391
- props.target = "_blank";
392
- }
394
+ // if (isCurrentPage(page)) {
395
+ // // temp fix, if user is presented in current page, open in new tab option is restricted, we will scroll to the element in current page
396
+ // } else {
397
+ // props.target = "_blank";
398
+ // }
399
+ props.target = "_blank";
393
400
  }
394
401
  }
395
402
  break;
@@ -424,7 +431,7 @@ export const handleLinkType = (url, linkType, readOnly, openInNewTab, onClick =
424
431
 
425
432
  // for iphone fix
426
433
  if (props.component === "a" && props.href) {
427
- const isMobile = getDevice(window.innerWidth) === "xs";
434
+ const isMobile = isCustomMobile || getDevice(window.innerWidth) === "xs";
428
435
  if (isMobile) {
429
436
  props.component = "button"; // iphone is opening two tabs, on open in new tab because of a tag.
430
437
  }
@@ -485,6 +492,34 @@ export const decodeString = str => {
485
492
  console.log(err);
486
493
  }
487
494
  };
495
+ export const getContrastColor = color => {
496
+ let r, g, b;
497
+
498
+ // Check if the color is in hex format
499
+ if (color.startsWith("#")) {
500
+ r = parseInt(color.substring(1, 3), 16);
501
+ g = parseInt(color.substring(3, 5), 16);
502
+ b = parseInt(color.substring(5, 7), 16);
503
+ }
504
+ // Check if the color is in RGB/RGBA format
505
+ else if (color.startsWith("rgb")) {
506
+ const rgbValues = color.replace(/^rgba?\(|\s+|\)$/g, "") // Remove the rgb/rgba and spaces
507
+ .split(","); // Split the values into an array
508
+
509
+ r = parseInt(rgbValues[0]);
510
+ g = parseInt(rgbValues[1]);
511
+ b = parseInt(rgbValues[2]);
512
+ } else {
513
+ // If the format is not recognized, default to black text
514
+ return "#000000";
515
+ }
516
+
517
+ // Calculate relative luminance
518
+ const luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255;
519
+
520
+ // Return black for light colors, white for dark colors
521
+ return luminance > 0.5 ? "#000000" : "#FFFFFF";
522
+ };
488
523
  export const onDeleteKey = (event, {
489
524
  editor
490
525
  }) => {
@@ -702,6 +737,10 @@ export const isRestrictedNode = (event, editor) => {
702
737
  return isNodeRestricted;
703
738
  }
704
739
  };
740
+ export function capitalizeFirstLetter(str) {
741
+ if (!str) return str;
742
+ return str.charAt(0).toUpperCase() + str.slice(1);
743
+ }
705
744
  export const insertLineBreakAtEndOfPath = (editor, path) => {
706
745
  try {
707
746
  const [node, nodePath] = Editor.node(editor, path); // Get the node at the specified path
@@ -720,6 +759,13 @@ export const insertLineBreakAtEndOfPath = (editor, path) => {
720
759
  console.log(err);
721
760
  }
722
761
  };
762
+ export function isHavingSelection(editor) {
763
+ try {
764
+ return editor?.selection && !Range.isCollapsed(editor.selection);
765
+ } catch (err) {
766
+ console.log(err);
767
+ }
768
+ }
723
769
  const omitNodes = ["site-settings", "page-settings"];
724
770
  export function getInitialValue(value = [], readOnly) {
725
771
  if (readOnly === "readonly" && value?.length) {
@@ -750,20 +796,17 @@ export function getInitialValue(value = [], readOnly) {
750
796
  }
751
797
  return value;
752
798
  }
753
- export function capitalizeFirstLetter(str) {
754
- if (!str) return str;
755
- return str.charAt(0).toUpperCase() + str.slice(1);
756
- }
757
- export function isHavingSelection(editor) {
758
- try {
759
- return editor?.selection && !Range.isCollapsed(editor.selection);
760
- } catch (err) {
761
- console.log(err);
762
- }
763
- }
764
799
  export function getSelectedCls(defaultCls = "", selected, selectedClsName = "selected") {
765
800
  return `${defaultCls} ${selected ? selectedClsName : ""}`;
766
801
  }
802
+ export function handleNegativeInteger(val) {
803
+ return val < 0 ? 0 : val;
804
+ }
805
+ export const containsSurrogatePair = text => {
806
+ // Match surrogate pairs (high and low surrogate)
807
+ const surrogatePairRegex = /[\uD800-\uDBFF][\uDC00-\uDFFF]/;
808
+ return surrogatePairRegex.test(text);
809
+ };
767
810
  export const getNodeWithType = (editor, nodeType = "", otherOptions) => {
768
811
  try {
769
812
  const options = {
@@ -777,11 +820,6 @@ export const getNodeWithType = (editor, nodeType = "", otherOptions) => {
777
820
  return [];
778
821
  }
779
822
  };
780
- export const containsSurrogatePair = text => {
781
- // Match surrogate pairs (high and low surrogate)
782
- const surrogatePairRegex = /[\uD800-\uDBFF][\uDC00-\uDFFF]/;
783
- return surrogatePairRegex.test(text);
784
- };
785
823
  export const getSlateDom = (editor, range) => {
786
824
  try {
787
825
  const slateDom = ReactEditor.toDOMRange(editor, range);
@@ -831,9 +869,24 @@ export const hideSlateSelection = () => {
831
869
  const root = document.documentElement;
832
870
  root.style.setProperty("--slate-highlight-bg", "none");
833
871
  };
834
- export function handleNegativeInteger(val) {
835
- return val < 0 ? 0 : val;
836
- }
872
+ export const insertSlashNode = (editor, insertNode) => {
873
+ try {
874
+ // Delete the currently selected text
875
+ editor.deleteFragment();
876
+ const currentText = getCurrentElementText(editor);
877
+ const currentPath = editor?.selection?.anchor?.path;
878
+ let insertAt = currentPath;
879
+ if (currentText?.trim()) {
880
+ const parentPath = Path.parent(currentPath);
881
+ insertAt = Path.next(parentPath);
882
+ }
883
+ Transforms.insertNodes(editor, insertNode, {
884
+ at: insertAt
885
+ });
886
+ } catch (err) {
887
+ console.log(err);
888
+ }
889
+ };
837
890
  export const isEverythingSelected = editor => {
838
891
  const {
839
892
  selection
@@ -863,4 +916,135 @@ export const getCurrentNodeText = editor => {
863
916
  } catch (error) {
864
917
  console.log("Error:", error);
865
918
  }
919
+ };
920
+ function convertColorToRgb(color) {
921
+ if (color?.startsWith("#")) {
922
+ // HEX to RGB
923
+ let hex = color.replace("#", "");
924
+ let r, g, b;
925
+ if (hex.length === 3) {
926
+ hex = hex.split("").map(x => x + x).join("");
927
+ }
928
+ if (hex.length === 6) {
929
+ [r, g, b] = [hex.substring(0, 2), hex.substring(2, 4), hex.substring(4, 6)].map(val => parseInt(val, 16));
930
+ return `rgb(${r}, ${g}, ${b})`;
931
+ }
932
+ } else {
933
+ return color;
934
+ }
935
+ }
936
+ export const getSelectedColor = (selectedColor, theme, hideThemeColors) => {
937
+ const colorVars = hideThemeColors ? null : theme?.vars?.colors;
938
+ let selectedValue = selectedColor;
939
+ if (colorVars) {
940
+ const convertedColor = convertColorToRgb(selectedColor);
941
+ Object.entries(theme.colors).forEach(([key, value]) => {
942
+ const convertedThemeColor = convertColorToRgb(value);
943
+ if (convertedThemeColor === convertedColor) {
944
+ selectedValue = colorVars[key];
945
+ }
946
+ });
947
+ }
948
+ return selectedValue;
949
+ };
950
+ const themeTextFormats = ["headingOne", "headingTwo", "headingThree", "headingFour", "headingFive", "headingSix", "paragraphOne", "paragraphTwo", "paragraphThree"];
951
+ export const getSelectedElementColor = (editor, format, theme) => {
952
+ const [isThemeText] = Editor.nodes(editor, {
953
+ at: editor.selection,
954
+ match: n => themeTextFormats.includes(n?.type)
955
+ });
956
+ if (!isThemeText) {
957
+ return activeMark(editor, "color") || "#000000";
958
+ }
959
+ const color = getSelectedElementStyle(format, editor, format);
960
+ return getSelectedColor(color, theme);
961
+ };
962
+ export const isHavingColor = color => {
963
+ if (!color) {
964
+ return false;
965
+ }
966
+ if (color.includes("rgba")) {
967
+ const match = color.match(/rgba?\((\d+),\s*(\d+),\s*(\d+),?\s*(\d*\.?\d+)?\)/);
968
+ if (!match) return false; // Invalid format
969
+
970
+ const alpha = match[4] !== undefined ? parseFloat(match[4]) : 1; // Default alpha = 1
971
+ return alpha !== 0;
972
+ }
973
+ return true;
974
+ };
975
+ const handleCopiedList = (el, domRange) => {
976
+ // Ensure you're working with an Element, not a Text node
977
+ const startEl = domRange.startContainer.nodeType === Node.ELEMENT_NODE ? domRange.startContainer : domRange.startContainer.parentElement;
978
+ const liEl = startEl?.closest("li");
979
+ let listType = "";
980
+ if (liEl) {
981
+ const listEl = liEl.closest("ul, ol");
982
+ if (listEl) {
983
+ listType = listEl.tagName === "OL" ? "OL" : "UL";
984
+ }
985
+ }
986
+ const parent = el.parentElement;
987
+ if (listType === "OL") {
988
+ const index = Array.from(parent.children).indexOf(el) + 1;
989
+ el.insertAdjacentText("afterbegin", `${index}. `);
990
+ } else {
991
+ el.insertAdjacentText("afterbegin", "- ");
992
+ }
993
+ };
994
+ const getCopiedTextFormat = domRange => {
995
+ const contents = domRange.cloneContents();
996
+ const div = document.createElement("div");
997
+ div.appendChild(contents);
998
+
999
+ // Replace <br> with newlines
1000
+ div.querySelectorAll("br").forEach(br => br.replaceWith("\n"));
1001
+ const BLOCK_TAGS = ["DIV", "P", "LI", "H1", "H2", "H3", "H4", "H5", "H6"];
1002
+ div.querySelectorAll(BLOCK_TAGS.join(",")).forEach(el => {
1003
+ if (el.tagName === "LI") {
1004
+ handleCopiedList(el, domRange);
1005
+ }
1006
+ el.insertAdjacentText("beforeend", "\n");
1007
+ });
1008
+ let text = div.textContent || "";
1009
+ text = text
1010
+ // Remove spaces or tabs that appear just before a newline
1011
+ // e.g., "text \n" → "text\n"
1012
+ .replace(/[ \t]+\n/g, "\n")
1013
+
1014
+ // Collapse multiple consecutive newlines into a single newline
1015
+ // e.g., "\n\n\n" → "\n"
1016
+ .replace(/\n{2,}/g, "\n")
1017
+
1018
+ // Remove leading and trailing whitespace from the final text
1019
+ .trim();
1020
+ return text;
1021
+ };
1022
+ const getCopiedHTMLFormat = domRange => {
1023
+ const htmlContents = domRange.cloneContents();
1024
+ const container = document.createElement("div");
1025
+ container.appendChild(htmlContents);
1026
+ const html = container.innerHTML;
1027
+ return html;
1028
+ };
1029
+ const getCopiedSlateFormat = editor => {
1030
+ // Get Slate fragment
1031
+ const fragment = JSON.stringify(Editor.fragment(editor, editor.selection));
1032
+ const encodedFragment = window.btoa(encodeURIComponent(fragment));
1033
+ return encodedFragment;
1034
+ };
1035
+ export const handleCopy = (event, editor) => {
1036
+ const {
1037
+ selection
1038
+ } = editor;
1039
+ if (!selection || Range.isCollapsed(selection)) return;
1040
+ event.preventDefault();
1041
+ const domRange = ReactEditor.toDOMRange(editor, selection);
1042
+ const text = getCopiedTextFormat(domRange);
1043
+ const html = getCopiedHTMLFormat(domRange);
1044
+ const encodedFragment = getCopiedSlateFormat(editor);
1045
+
1046
+ // Set all formats manually
1047
+ event.clipboardData?.setData("text/html", html);
1048
+ event.clipboardData?.setData("text/plain", text);
1049
+ event.clipboardData?.setData("application/x-slate-fragment", encodedFragment);
866
1050
  };
@@ -51,7 +51,7 @@ export const createAppHeaderNode = ({
51
51
  children: [{
52
52
  type: "grid-item",
53
53
  grid: 12,
54
- children: [...appHeaderNode({
54
+ children: [appHeaderNode({
55
55
  menus
56
56
  })],
57
57
  bgColor: "rgba(255, 255, 255, 0)",
@@ -1,9 +1,5 @@
1
- import { Path, Transforms } from "slate";
2
- import insertNewLine from "./insertNewLine";
3
- import { getCurrentElementText } from "../plugins/withHTML";
1
+ import { insertSlashNode } from "./helper";
4
2
  export const insertSignature = editor => {
5
- const hasText = getCurrentElementText(editor);
6
- const insertPath = hasText ? Path.next(Path.parent(editor?.selection.focus.path)) : editor.selection.anchor.path;
7
3
  const signature = {
8
4
  type: "signature",
9
5
  alignment: "center",
@@ -17,8 +13,5 @@ export const insertSignature = editor => {
17
13
  text: " "
18
14
  }]
19
15
  };
20
- Transforms.insertNodes(editor, signature, {
21
- at: insertPath
22
- });
23
- insertNewLine(editor);
16
+ insertSlashNode(editor, signature);
24
17
  };
@@ -0,0 +1,22 @@
1
+ const updateFormName = node => {
2
+ try {
3
+ if (!node || typeof node !== "object") return node;
4
+ let updatedNode = {
5
+ ...node
6
+ };
7
+ if (updatedNode.type === "form") {
8
+ const timeStamp = Date.now();
9
+ const newFormName = `form_${timeStamp}`;
10
+ updatedNode.formName = newFormName;
11
+ updatedNode.uid = newFormName;
12
+ }
13
+ if (Array.isArray(updatedNode.children)) {
14
+ updatedNode.children = updatedNode.children.map(child => updateFormName(child));
15
+ }
16
+ return updatedNode;
17
+ } catch (err) {
18
+ console.warn("Error inside updateFormName", err);
19
+ return node;
20
+ }
21
+ };
22
+ export default updateFormName;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flozy/editor",
3
- "version": "10.4.5",
3
+ "version": "10.4.7",
4
4
  "description": "An Editor for flozy app brain",
5
5
  "files": [
6
6
  "dist"
@@ -38,7 +38,6 @@
38
38
  "react-icons": "^4.10.1",
39
39
  "react-katex": "^3.0.1",
40
40
  "react-rnd": "^10.4.11",
41
- "react-scripts": "5.0.1",
42
41
  "react-signature-canvas": "^1.0.6",
43
42
  "react-slick": "^0.29.0",
44
43
  "sanitize-html": "^2.13.0",
@@ -69,7 +68,7 @@
69
68
  "storybook": "storybook dev -p 6006",
70
69
  "build-storybook": "NODE_OPTIONS='--max_old_space_size=4096' storybook build",
71
70
  "publish:npm": "rm -rf dist && mkdir dist && babel src/components -d dist --copy-files",
72
- "publish:local": "rm -rf /Users/agmac03/flozy/client/node_modules/@flozy/editor/dist && babel src/components -d /Users/agmac03/flozy/client/node_modules/@flozy/editor/dist --copy-files",
71
+ "publish:local": "rm -rf /Users/agenciflow08/Documents/flozyapp/client/node_modules/@flozy/editor/dist && babel src/components -d /Users/agenciflow08/Documents/flozyapp/client/node_modules/@flozy/editor/dist --copy-files",
73
72
  "publish:flozy": "./publish-flozy.sh",
74
73
  "publish:flozy2": "./publish-flozy2.sh",
75
74
  "publish:permission": "chmod +x publish-flozy.sh && chmod +x publish-flozy2.sh"
@@ -122,7 +121,8 @@
122
121
  "prop-types": "^15.8.1",
123
122
  "source-map-explorer": "^2.5.3",
124
123
  "storybook": "^7.4.0",
125
- "webpack": "^5.88.2"
124
+ "webpack": "^5.88.2",
125
+ "react-scripts": "5.0.1"
126
126
  },
127
127
  "overrides": {
128
128
  "react-refresh": "0.11.0"