@flozy/editor 9.6.9 → 9.7.0

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 (256) hide show
  1. package/dist/Editor/ChatEditor.js +19 -26
  2. package/dist/Editor/CommonEditor.js +25 -139
  3. package/dist/Editor/DialogWrapper.js +25 -31
  4. package/dist/Editor/Editor.css +9 -13
  5. package/dist/Editor/Elements/AI/AIInput.js +3 -5
  6. package/dist/Editor/Elements/AI/CustomSelect.js +5 -9
  7. package/dist/Editor/Elements/AI/PopoverAIInput.js +2 -4
  8. package/dist/Editor/Elements/Accordion/Accordion.js +3 -4
  9. package/dist/Editor/Elements/Accordion/AccordionBtnPopup.js +1 -4
  10. package/dist/Editor/Elements/Accordion/AccordionButton.js +2 -6
  11. package/dist/Editor/Elements/Accordion/AccordionTitlePopup.js +1 -4
  12. package/dist/Editor/Elements/AppHeader/AppHeader.js +3 -3
  13. package/dist/Editor/Elements/AppHeader/AppHeaderButton.js +2 -6
  14. package/dist/Editor/Elements/AppHeader/AppHeaderPopup.js +1 -4
  15. package/dist/Editor/Elements/Attachments/AttachmentsButton.js +1 -4
  16. package/dist/Editor/Elements/Button/ButtonPopup.js +1 -4
  17. package/dist/Editor/Elements/Button/ButtonToolIcon.js +2 -6
  18. package/dist/Editor/Elements/Button/EditorButton.js +30 -43
  19. package/dist/Editor/Elements/Carousel/Carousel.js +4 -5
  20. package/dist/Editor/Elements/Carousel/CarouselButton.js +2 -6
  21. package/dist/Editor/Elements/Carousel/CarouselItem.js +2 -3
  22. package/dist/Editor/Elements/ChipText/ChipTextPopup.js +1 -4
  23. package/dist/Editor/Elements/CodeToText/CodeToText.js +4 -5
  24. package/dist/Editor/Elements/CodeToText/HtmlContextMenu.js +2 -6
  25. package/dist/Editor/Elements/Color Picker/ColorButtons.js +14 -60
  26. package/dist/Editor/Elements/Color Picker/ColorPicker.css +1 -25
  27. package/dist/Editor/Elements/Color Picker/ColorPicker.js +7 -10
  28. package/dist/Editor/Elements/Color Picker/Styles.js +13 -15
  29. package/dist/Editor/Elements/Colorbox/ColorboxButton.js +2 -6
  30. package/dist/Editor/Elements/DataView/DataView.js +2 -5
  31. package/dist/Editor/Elements/DataView/DataViewButton.js +2 -6
  32. package/dist/Editor/Elements/DataView/Layouts/ColumnView.js +2 -4
  33. package/dist/Editor/Elements/DataView/Layouts/DataTypes/MultiSelectType.js +6 -21
  34. package/dist/Editor/Elements/DataView/Layouts/FilterSort/SortOptions/ChooseSort.js +12 -13
  35. package/dist/Editor/Elements/DataView/Layouts/FilterSort/SortOptions/index.js +4 -7
  36. package/dist/Editor/Elements/DataView/Layouts/FilterSort/index.js +5 -7
  37. package/dist/Editor/Elements/DataView/Layouts/FilterView.js +7 -9
  38. package/dist/Editor/Elements/DataView/Layouts/Options/AddOptions.js +3 -8
  39. package/dist/Editor/Elements/DataView/Layouts/Options/AddProperty.js +3 -5
  40. package/dist/Editor/Elements/DataView/Layouts/Options/AllProperties.js +5 -6
  41. package/dist/Editor/Elements/DataView/Layouts/Options/ChangeProperty.js +3 -5
  42. package/dist/Editor/Elements/DataView/Layouts/Options/EditOption.js +7 -9
  43. package/dist/Editor/Elements/DataView/Layouts/Options/EditProperty.js +12 -15
  44. package/dist/Editor/Elements/DataView/Layouts/Options/FilterProperty.js +2 -3
  45. package/dist/Editor/Elements/DataView/Layouts/Options/PropertyList.js +2 -3
  46. package/dist/Editor/Elements/DataView/Layouts/Options/index.js +6 -23
  47. package/dist/Editor/Elements/DataView/Layouts/TableView.js +4 -6
  48. package/dist/Editor/Elements/DataView/Layouts/ViewData.js +4 -8
  49. package/dist/Editor/Elements/DataView/Layouts/index.js +1 -3
  50. package/dist/Editor/Elements/DataView/Providers/DataViewProvider.js +2 -5
  51. package/dist/Editor/Elements/Divider/Divider.js +3 -5
  52. package/dist/Editor/Elements/Divider/DividerButton.js +2 -6
  53. package/dist/Editor/Elements/Divider/DividerPopup.js +2 -3
  54. package/dist/Editor/Elements/Embed/Embed.js +1 -4
  55. package/dist/Editor/Elements/Embed/EmbedPopup.js +1 -4
  56. package/dist/Editor/Elements/Embed/Image.js +9 -14
  57. package/dist/Editor/Elements/Embed/Video.js +6 -9
  58. package/dist/Editor/Elements/EmbedScript/Code.js +4 -7
  59. package/dist/Editor/Elements/EmbedScript/EmbedScript.js +2 -6
  60. package/dist/Editor/Elements/EmbedScript/EmbedScriptPopup.js +5 -8
  61. package/dist/Editor/Elements/Emoji/EmojiButton.js +2 -6
  62. package/dist/Editor/Elements/Form/FieldPopup.js +1 -4
  63. package/dist/Editor/Elements/Form/Form.js +9 -12
  64. package/dist/Editor/Elements/Form/FormButton.js +2 -6
  65. package/dist/Editor/Elements/Form/FormPopup.js +2 -3
  66. package/dist/Editor/Elements/Form/Workflow/FormWorkflow.js +12 -18
  67. package/dist/Editor/Elements/Form/Workflow/ListWorkflow.js +8 -13
  68. package/dist/Editor/Elements/Form/Workflow/MoreOptions.js +2 -3
  69. package/dist/Editor/Elements/Form/Workflow/Styles.js +22 -24
  70. package/dist/Editor/Elements/Form/Workflow/UserInputs.js +2 -4
  71. package/dist/Editor/Elements/Form/Workflow/index.js +9 -15
  72. package/dist/Editor/Elements/FreeGrid/FreeGrid.js +23 -67
  73. package/dist/Editor/Elements/FreeGrid/FreeGridBox.js +6 -31
  74. package/dist/Editor/Elements/FreeGrid/FreeGridButton.js +2 -6
  75. package/dist/Editor/Elements/FreeGrid/FreeGridItem.js +5 -38
  76. package/dist/Editor/Elements/FreeGrid/Options/AddElement.js +2 -3
  77. package/dist/Editor/Elements/FreeGrid/Options/More.js +4 -10
  78. package/dist/Editor/Elements/FreeGrid/styles.js +0 -3
  79. package/dist/Editor/Elements/Grid/Grid.js +10 -13
  80. package/dist/Editor/Elements/Grid/GridButton.js +5 -9
  81. package/dist/Editor/Elements/Grid/GridItem.js +8 -14
  82. package/dist/Editor/Elements/Grid/GridItemPopup.js +1 -4
  83. package/dist/Editor/Elements/Grid/GridPopup.js +1 -4
  84. package/dist/Editor/Elements/Grid/SectionPopup.js +1 -4
  85. package/dist/Editor/Elements/Link/Link.js +5 -8
  86. package/dist/Editor/Elements/Link/LinkButton.js +1 -4
  87. package/dist/Editor/Elements/List/CheckList.js +9 -14
  88. package/dist/Editor/Elements/NewLine/NewLineButton.js +2 -6
  89. package/dist/Editor/Elements/PageSettings/PageSettingsButton.js +1 -4
  90. package/dist/Editor/Elements/PageSettings/PageSettingsPopup.js +1 -4
  91. package/dist/Editor/Elements/Search/SearchButton.js +4 -7
  92. package/dist/Editor/Elements/Search/SearchList.js +3 -7
  93. package/dist/Editor/Elements/Signature/SignatureButton.js +2 -6
  94. package/dist/Editor/Elements/Signature/SignatureOptions/TypeSignature.js +2 -6
  95. package/dist/Editor/Elements/Signature/SignatureOptions/UploadSignature.js +1 -4
  96. package/dist/Editor/Elements/Signature/SignaturePopup.js +16 -17
  97. package/dist/Editor/Elements/SimpleText/index.js +4 -5
  98. package/dist/Editor/Elements/SimpleText/style.js +2 -2
  99. package/dist/Editor/Elements/Table/DragButton.js +2 -4
  100. package/dist/Editor/Elements/Table/Table.js +12 -24
  101. package/dist/Editor/Elements/Table/TablePopup.js +1 -4
  102. package/dist/Editor/Elements/Table/TableSelector.js +6 -10
  103. package/dist/Editor/Elements/Table/TableTool.js +4 -8
  104. package/dist/Editor/Elements/Title/title.js +2 -15
  105. package/dist/Editor/Elements/TopBanner/TopBannerButton.js +1 -4
  106. package/dist/Editor/Elements/Variables/VariableButton.js +1 -10
  107. package/dist/Editor/MiniEditor.js +3 -10
  108. package/dist/Editor/Styles/EditorStyles.js +5 -5
  109. package/dist/Editor/Toolbar/Basic/index.js +1 -2
  110. package/dist/Editor/Toolbar/FormatTools/BlockButton.js +2 -6
  111. package/dist/Editor/Toolbar/FormatTools/Dropdown.js +3 -27
  112. package/dist/Editor/Toolbar/FormatTools/FontFamilyAutocomplete.js +3 -4
  113. package/dist/Editor/Toolbar/FormatTools/MarkButton.js +4 -8
  114. package/dist/Editor/Toolbar/FormatTools/TextSize.js +13 -10
  115. package/dist/Editor/Toolbar/Mini/MiniToolbar.js +5 -17
  116. package/dist/Editor/Toolbar/PopupTool/AddTemplates.js +5 -10
  117. package/dist/Editor/Toolbar/PopupTool/ButtonTemplatesCard.js +4 -10
  118. package/dist/Editor/Toolbar/PopupTool/FullViewCard.js +4 -10
  119. package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/MiniColorPicker.js +3 -9
  120. package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/SelectAlignment.js +35 -42
  121. package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/SelectFontSize.js +13 -6
  122. package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/SelectList.js +51 -58
  123. package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/SelectSuperSubscript.js +22 -29
  124. package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/SelectTypography.js +87 -226
  125. package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/index.js +10 -20
  126. package/dist/Editor/Toolbar/PopupTool/PopperHeader.js +5 -10
  127. package/dist/Editor/Toolbar/PopupTool/PopupToolStyle.js +11 -71
  128. package/dist/Editor/Toolbar/PopupTool/TemplateCard.js +5 -11
  129. package/dist/Editor/Toolbar/PopupTool/TextFormat.js +45 -128
  130. package/dist/Editor/Toolbar/PopupTool/index.js +10 -20
  131. package/dist/Editor/Toolbar/Toolbar.js +10 -20
  132. package/dist/Editor/Toolbar/toolbarGroups.js +6 -48
  133. package/dist/Editor/common/ColorPickerButton.js +14 -39
  134. package/dist/Editor/common/CustomDialog/index.js +10 -8
  135. package/dist/Editor/common/DnD/DragHandleButton.js +1 -1
  136. package/dist/Editor/common/FontLoader/FontLoader.js +0 -3
  137. package/dist/Editor/common/Icon.js +0 -28
  138. package/dist/Editor/common/ImageSelector/ImageSelector.js +8 -10
  139. package/dist/Editor/common/ImageSelector/Options/AddLink.js +4 -6
  140. package/dist/Editor/common/ImageSelector/Options/Upload.js +1 -1
  141. package/dist/Editor/common/ImageSelector/Styles.js +9 -3
  142. package/dist/Editor/common/ImageSelector/UploadStyles.js +9 -9
  143. package/dist/Editor/common/LinkSettings/NavComponents.js +10 -14
  144. package/dist/Editor/common/LinkSettings/index.js +14 -20
  145. package/dist/Editor/common/LinkSettings/navOptions.js +1 -1
  146. package/dist/Editor/common/MUIIcon/index.js +3 -0
  147. package/dist/Editor/common/MentionsPopup/index.js +2 -6
  148. package/dist/Editor/common/RnD/ContextMenu/CMenus.js +22 -22
  149. package/dist/Editor/common/RnD/ContextMenu/index.js +2 -3
  150. package/dist/Editor/common/RnD/ElementOptions/index.js +2 -7
  151. package/dist/Editor/common/RnD/ElementSettings/OtherSettings/SaveAsTemplate.js +3 -8
  152. package/dist/Editor/common/RnD/ElementSettings/OtherSettings/Settings.js +3 -7
  153. package/dist/Editor/common/RnD/ElementSettings/Settings/AppHeaderSettings.js +2 -3
  154. package/dist/Editor/common/RnD/ElementSettings/Settings/BoxSettings.js +2 -3
  155. package/dist/Editor/common/RnD/ElementSettings/Settings/ButtonSettings.js +2 -3
  156. package/dist/Editor/common/RnD/ElementSettings/Settings/CodeSettings.js +2 -3
  157. package/dist/Editor/common/RnD/ElementSettings/Settings/FormSettings.js +4 -7
  158. package/dist/Editor/common/RnD/ElementSettings/Settings/ImageSettings.js +2 -3
  159. package/dist/Editor/common/RnD/ElementSettings/Settings/TableSettings.js +2 -3
  160. package/dist/Editor/common/RnD/ElementSettings/Settings/TextSettings.js +2 -6
  161. package/dist/Editor/common/RnD/ElementSettings/Settings/VideoSettings.js +2 -3
  162. package/dist/Editor/common/RnD/ElementSettings/styles.js +1 -0
  163. package/dist/Editor/common/RnD/OptionsPopup/index.js +3 -4
  164. package/dist/Editor/common/RnD/ShadowElement.js +1 -2
  165. package/dist/Editor/common/RnD/SwitchViewport/SwitchViewport.js +4 -11
  166. package/dist/Editor/common/RnD/Theme/ViewportStimulator.js +3 -6
  167. package/dist/Editor/common/RnD/Utils/gridDropItem.js +8 -55
  168. package/dist/Editor/common/RnD/Utils/index.js +0 -3
  169. package/dist/Editor/common/RnD/VirtualElement/index.js +103 -187
  170. package/dist/Editor/common/RnD/VirtualElement/styles.js +7 -151
  171. package/dist/Editor/common/RnD/VirtualElement/updateAutoProps.js +3 -5
  172. package/dist/Editor/common/RnD/index.js +13 -64
  173. package/dist/Editor/common/Section/index.js +4 -7
  174. package/dist/Editor/common/Shorthands/elements.js +3 -74
  175. package/dist/Editor/common/StyleBuilder/appHeaderStyle.js +4 -4
  176. package/dist/Editor/common/StyleBuilder/boxStyle.js +2 -2
  177. package/dist/Editor/common/StyleBuilder/buttonStyle.js +4 -6
  178. package/dist/Editor/common/StyleBuilder/dividerStyles.js +2 -2
  179. package/dist/Editor/common/StyleBuilder/embedVideoStyle.js +6 -6
  180. package/dist/Editor/common/StyleBuilder/fieldStyle.js +2 -2
  181. package/dist/Editor/common/StyleBuilder/fieldTypes/alignment.js +9 -13
  182. package/dist/Editor/common/StyleBuilder/fieldTypes/backgroundImage.js +3 -11
  183. package/dist/Editor/common/StyleBuilder/fieldTypes/bannerSpacing.js +5 -19
  184. package/dist/Editor/common/StyleBuilder/fieldTypes/borderRadius.js +10 -22
  185. package/dist/Editor/common/StyleBuilder/fieldTypes/buttonLink.js +3 -6
  186. package/dist/Editor/common/StyleBuilder/fieldTypes/card.js +13 -27
  187. package/dist/Editor/common/StyleBuilder/fieldTypes/color.js +14 -43
  188. package/dist/Editor/common/StyleBuilder/fieldTypes/elementSize.js +6 -10
  189. package/dist/Editor/common/StyleBuilder/fieldTypes/fontSize.js +6 -19
  190. package/dist/Editor/common/StyleBuilder/fieldTypes/gridSize.js +2 -6
  191. package/dist/Editor/common/StyleBuilder/fieldTypes/icons.js +2 -5
  192. package/dist/Editor/common/StyleBuilder/fieldTypes/menusArray.js +6 -9
  193. package/dist/Editor/common/StyleBuilder/fieldTypes/metaDataMapping.js +2 -8
  194. package/dist/Editor/common/StyleBuilder/fieldTypes/saveAsTemplate.js +11 -12
  195. package/dist/Editor/common/StyleBuilder/fieldTypes/selectBox.js +2 -6
  196. package/dist/Editor/common/StyleBuilder/fieldTypes/text.js +4 -8
  197. package/dist/Editor/common/StyleBuilder/fieldTypes/textAlign.js +2 -6
  198. package/dist/Editor/common/StyleBuilder/fieldTypes/textOptions.js +12 -21
  199. package/dist/Editor/common/StyleBuilder/formStyle.js +7 -7
  200. package/dist/Editor/common/StyleBuilder/gridItemStyle.js +6 -6
  201. package/dist/Editor/common/StyleBuilder/gridStyle.js +5 -5
  202. package/dist/Editor/common/StyleBuilder/index.js +5 -8
  203. package/dist/Editor/common/StyleBuilder/pageSettingsStyle.js +7 -5
  204. package/dist/Editor/common/Uploader.js +5 -16
  205. package/dist/Editor/commonStyle.js +12 -23
  206. package/dist/Editor/helper/index.js +3 -27
  207. package/dist/Editor/helper/theme.js +2 -202
  208. package/dist/Editor/hooks/useDrag.js +1 -1
  209. package/dist/Editor/hooks/useEditorScroll.js +1 -0
  210. package/dist/Editor/hooks/useMouseMove.js +3 -9
  211. package/dist/Editor/plugins/withEmbeds.js +1 -1
  212. package/dist/Editor/plugins/withHTML.js +9 -11
  213. package/dist/Editor/plugins/withLayout.js +2 -3
  214. package/dist/Editor/plugins/withTable.js +1 -1
  215. package/dist/Editor/theme/ThemeList.js +173 -50
  216. package/dist/Editor/utils/SlateUtilityFunctions.js +60 -201
  217. package/dist/Editor/utils/draftToSlate.js +2 -3
  218. package/dist/Editor/utils/font.js +37 -40
  219. package/dist/Editor/utils/freegrid.js +3 -3
  220. package/dist/Editor/utils/helper.js +21 -92
  221. package/package.json +3 -3
  222. package/dist/Editor/Elements/DataView/Layouts/DataTypes/Components/MultiSelect.js +0 -425
  223. package/dist/Editor/Toolbar/PopupTool/ThemeTextFormat.js +0 -436
  224. package/dist/Editor/assets/svg/ClearAllRounded.js +0 -31
  225. package/dist/Editor/assets/svg/ThemeIcons.js +0 -291
  226. package/dist/Editor/common/CustomColorPicker/index.js +0 -131
  227. package/dist/Editor/common/CustomColorPicker/style.js +0 -53
  228. package/dist/Editor/common/CustomDialog2/index.js +0 -94
  229. package/dist/Editor/common/CustomDialog2/style.js +0 -67
  230. package/dist/Editor/common/CustomSelect.js +0 -43
  231. package/dist/Editor/common/RnD/Theme/MainThemeProvider.js +0 -17
  232. package/dist/Editor/common/RnD/VirtualElement/BoxHeaderAutoAlignment.js +0 -43
  233. package/dist/Editor/common/RnD/VirtualElement/ForceAutoAlignment.js +0 -44
  234. package/dist/Editor/common/RnD/VirtualElement/VirtualTextElement.js +0 -134
  235. package/dist/Editor/common/RnD/VirtualElement/helper.js +0 -375
  236. package/dist/Editor/common/SnackBar/index.js +0 -43
  237. package/dist/Editor/helper/textIndeces.js +0 -58
  238. package/dist/Editor/hooks/useAutoScroll.js +0 -38
  239. package/dist/Editor/hooks/useEditorTheme.js +0 -153
  240. package/dist/Editor/hooks/useThemeValues.js +0 -63
  241. package/dist/Editor/theme/index.js +0 -149
  242. package/dist/Editor/themeSettings/ActiveTheme.js +0 -72
  243. package/dist/Editor/themeSettings/buttons/index.js +0 -290
  244. package/dist/Editor/themeSettings/buttons/style.js +0 -23
  245. package/dist/Editor/themeSettings/colorTheme/index.js +0 -310
  246. package/dist/Editor/themeSettings/colorTheme/style.js +0 -81
  247. package/dist/Editor/themeSettings/fonts/PreviewElement.js +0 -121
  248. package/dist/Editor/themeSettings/fonts/index.js +0 -240
  249. package/dist/Editor/themeSettings/fonts/style.js +0 -61
  250. package/dist/Editor/themeSettings/icons.js +0 -60
  251. package/dist/Editor/themeSettings/index.js +0 -351
  252. package/dist/Editor/themeSettings/style.js +0 -220
  253. package/dist/Editor/themeSettingsAI/icons.js +0 -96
  254. package/dist/Editor/themeSettingsAI/index.js +0 -355
  255. package/dist/Editor/themeSettingsAI/saveTheme.js +0 -205
  256. package/dist/Editor/themeSettingsAI/style.js +0 -259
@@ -2,7 +2,6 @@ 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
5
  export const windowVar = {};
7
6
  let ST_TIMEOUT = null;
8
7
  const BLOCKS = ["grid", "dataView"];
@@ -169,11 +168,11 @@ export const handleInsertLastElement = (event, editor) => {
169
168
  }
170
169
  const hasPath = event.target.dataset.path;
171
170
  const lastElement = editor.children[editor.children?.length - 1];
172
- const isFreeGrid = lastElement?.type === "freegrid" || lastElement?.children?.[0]?.type === "freegrid";
171
+ const isFreeGrid = lastElement?.type === "freegrid" || lastElement?.children[0]?.type === "freegrid";
173
172
  if (isFreeGrid) {
174
173
  return;
175
174
  }
176
- const isLastElementEmpty = lastElement && lastElement.type === "paragraph" && !lastElement.children[0]?.text && !lastElement.children?.some(c => BLOCKS.includes(c.type));
175
+ const isLastElementEmpty = lastElement.type === "paragraph" && !lastElement.children[0]?.text && !lastElement.children?.some(c => BLOCKS.includes(c.type));
177
176
  if (!ReactEditor.isFocused(editor)) {
178
177
  if (isLastElementEmpty) {
179
178
  if (hasPath) {
@@ -481,34 +480,6 @@ export const decodeString = str => {
481
480
  console.log(err);
482
481
  }
483
482
  };
484
- export const getContrastColor = color => {
485
- let r, g, b;
486
-
487
- // Check if the color is in hex format
488
- if (color.startsWith("#")) {
489
- r = parseInt(color.substring(1, 3), 16);
490
- g = parseInt(color.substring(3, 5), 16);
491
- b = parseInt(color.substring(5, 7), 16);
492
- }
493
- // Check if the color is in RGB/RGBA format
494
- else if (color.startsWith("rgb")) {
495
- const rgbValues = color.replace(/^rgba?\(|\s+|\)$/g, "") // Remove the rgb/rgba and spaces
496
- .split(","); // Split the values into an array
497
-
498
- r = parseInt(rgbValues[0]);
499
- g = parseInt(rgbValues[1]);
500
- b = parseInt(rgbValues[2]);
501
- } else {
502
- // If the format is not recognized, default to black text
503
- return "#000000";
504
- }
505
-
506
- // Calculate relative luminance
507
- const luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255;
508
-
509
- // Return black for light colors, white for dark colors
510
- return luminance > 0.5 ? "#000000" : "#FFFFFF";
511
- };
512
483
  export const onDeleteKey = (event, {
513
484
  editor
514
485
  }) => {
@@ -726,10 +697,6 @@ export const isRestrictedNode = (event, editor) => {
726
697
  return isNodeRestricted;
727
698
  }
728
699
  };
729
- export function capitalizeFirstLetter(str) {
730
- if (!str) return str;
731
- return str.charAt(0).toUpperCase() + str.slice(1);
732
- }
733
700
  export const insertLineBreakAtEndOfPath = (editor, path) => {
734
701
  try {
735
702
  const [node, nodePath] = Editor.node(editor, path); // Get the node at the specified path
@@ -748,13 +715,6 @@ export const insertLineBreakAtEndOfPath = (editor, path) => {
748
715
  console.log(err);
749
716
  }
750
717
  };
751
- export function isHavingSelection(editor) {
752
- try {
753
- return editor?.selection && !Range.isCollapsed(editor.selection);
754
- } catch (err) {
755
- console.log(err);
756
- }
757
- }
758
718
  const omitNodes = ["site-settings", "page-settings"];
759
719
  export function getInitialValue(value = [], readOnly) {
760
720
  if (readOnly === "readonly" && value?.length) {
@@ -785,17 +745,20 @@ export function getInitialValue(value = [], readOnly) {
785
745
  }
786
746
  return value;
787
747
  }
748
+ export function capitalizeFirstLetter(str) {
749
+ if (!str) return str;
750
+ return str.charAt(0).toUpperCase() + str.slice(1);
751
+ }
752
+ export function isHavingSelection(editor) {
753
+ try {
754
+ return editor?.selection && !Range.isCollapsed(editor.selection);
755
+ } catch (err) {
756
+ console.log(err);
757
+ }
758
+ }
788
759
  export function getSelectedCls(defaultCls = "", selected, selectedClsName = "selected") {
789
760
  return `${defaultCls} ${selected ? selectedClsName : ""}`;
790
761
  }
791
- export function handleNegativeInteger(val) {
792
- return val < 0 ? 0 : val;
793
- }
794
- export const containsSurrogatePair = text => {
795
- // Match surrogate pairs (high and low surrogate)
796
- const surrogatePairRegex = /[\uD800-\uDBFF][\uDC00-\uDFFF]/;
797
- return surrogatePairRegex.test(text);
798
- };
799
762
  export const getNodeWithType = (editor, nodeType = "", otherOptions) => {
800
763
  try {
801
764
  const options = {
@@ -809,6 +772,11 @@ export const getNodeWithType = (editor, nodeType = "", otherOptions) => {
809
772
  return [];
810
773
  }
811
774
  };
775
+ export const containsSurrogatePair = text => {
776
+ // Match surrogate pairs (high and low surrogate)
777
+ const surrogatePairRegex = /[\uD800-\uDBFF][\uDC00-\uDFFF]/;
778
+ return surrogatePairRegex.test(text);
779
+ };
812
780
  export const getSlateDom = (editor, range) => {
813
781
  try {
814
782
  const slateDom = ReactEditor.toDOMRange(editor, range);
@@ -858,6 +826,9 @@ export const hideSlateSelection = () => {
858
826
  const root = document.documentElement;
859
827
  root.style.setProperty("--slate-highlight-bg", "none");
860
828
  };
829
+ export function handleNegativeInteger(val) {
830
+ return val < 0 ? 0 : val;
831
+ }
861
832
  export const isEverythingSelected = editor => {
862
833
  const {
863
834
  selection
@@ -887,46 +858,4 @@ export const getCurrentNodeText = editor => {
887
858
  } catch (error) {
888
859
  console.log("Error:", error);
889
860
  }
890
- };
891
- function convertColorToRgb(color) {
892
- if (color?.startsWith("#")) {
893
- // HEX to RGB
894
- let hex = color.replace("#", "");
895
- let r, g, b;
896
- if (hex.length === 3) {
897
- hex = hex.split("").map(x => x + x).join("");
898
- }
899
- if (hex.length === 6) {
900
- [r, g, b] = [hex.substring(0, 2), hex.substring(2, 4), hex.substring(4, 6)].map(val => parseInt(val, 16));
901
- return `rgb(${r}, ${g}, ${b})`;
902
- }
903
- } else {
904
- return color;
905
- }
906
- }
907
- export const getSelectedColor = (selectedColor, theme) => {
908
- const colorVars = theme?.vars?.colors;
909
- let selectedValue = selectedColor;
910
- if (colorVars) {
911
- const convertedColor = convertColorToRgb(selectedColor);
912
- Object.entries(theme.colors).forEach(([key, value]) => {
913
- const convertedThemeColor = convertColorToRgb(value);
914
- if (convertedThemeColor === convertedColor) {
915
- selectedValue = colorVars[key];
916
- }
917
- });
918
- }
919
- return selectedValue;
920
- };
921
- const themeTextFormats = ["headingOne", "headingTwo", "headingThree", "headingFour", "headingFive", "headingSix", "paragraphOne", "paragraphTwo", "paragraphThree"];
922
- export const getSelectedElementColor = (editor, format, theme) => {
923
- const [isThemeText] = Editor.nodes(editor, {
924
- at: editor.selection,
925
- match: n => themeTextFormats.includes(n?.type)
926
- });
927
- if (!isThemeText) {
928
- return activeMark(editor, "color") || "#000000";
929
- }
930
- const color = getSelectedElementStyle(format, editor, format);
931
- return getSelectedColor(color, theme);
932
861
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flozy/editor",
3
- "version": "9.6.9",
3
+ "version": "9.7.0",
4
4
  "description": "An Editor for flozy app brain",
5
5
  "files": [
6
6
  "dist"
@@ -61,7 +61,7 @@
61
61
  "scripts": {
62
62
  "prepare": "husky install .husky",
63
63
  "analyze": "source-map-explorer build/static/js/*.js",
64
- "lint": "./node_modules/.bin/eslint --ignore-path .gitignore .",
64
+ "lint": "./node_modules/. bin/eslint --ignore-path .gitignore .",
65
65
  "start": "craco start",
66
66
  "build": "NODE_OPTIONS='--max_old_space_size=4096' craco build",
67
67
  "test": "craco test --passWithNoTests",
@@ -69,7 +69,7 @@
69
69
  "storybook": "storybook dev -p 6006",
70
70
  "build-storybook": "NODE_OPTIONS='--max_old_space_size=4096' storybook build",
71
71
  "publish:npm": "rm -rf dist && mkdir dist && babel src/components -d dist --copy-files",
72
- "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",
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",
73
73
  "publish:flozy": "./publish-flozy.sh",
74
74
  "publish:flozy2": "./publish-flozy2.sh",
75
75
  "publish:permission": "chmod +x publish-flozy.sh && chmod +x publish-flozy2.sh"
@@ -1,425 +0,0 @@
1
- import React, { useEffect, useState } from "react";
2
- import { Autocomplete, Box, Chip, Divider, Popover, TextField, Typography, List, ListItem, ListItemButton, IconButton, SwipeableDrawer, Tooltip } from "@mui/material";
3
- import { CloseIcon } from "../../../../../common/iconslist";
4
- import { useEditorContext } from "../../../../../hooks/useMouseMove";
5
- import Icon from "../../../../../common/Icon";
6
- import { colors } from "../../../../Color Picker/defaultColors";
7
- import PropertySettings from "../../Options";
8
- import SnackbarAlert from "../../../../../common/SnackBar";
9
- import ClearAllRounded from "../../../../../assets/svg/ClearAllRounded";
10
- import { jsx as _jsx } from "react/jsx-runtime";
11
- import { jsxs as _jsxs } from "react/jsx-runtime";
12
- const EXCLUDED_COLORS = new Set(["#000000", "#0F172A", "#2563EB", "#FFFFFF", "#64748B"]);
13
- const DEFAULT_COLORS = colors?.filter(f => !f?.includes("linear") && !EXCLUDED_COLORS?.has(f));
14
- const generateRandomColor = () => {
15
- const randomIndex = Math.floor(Math.random() * DEFAULT_COLORS?.length);
16
- return DEFAULT_COLORS[randomIndex];
17
- };
18
- const MultiSelectWithPopover = props => {
19
- const {
20
- options = [],
21
- value,
22
- onChange,
23
- onUpdate,
24
- property,
25
- wrapColumn = false,
26
- translation
27
- } = props;
28
- const [anchorEl, setAnchorEl] = useState(null);
29
- const [anchorElOption, setAnchorElOption] = useState(null);
30
- const [currentIndex, setCurrentIndex] = useState(null);
31
- const [selectedOptions, setSelectedOptions] = useState(value);
32
- const [availableOptions, setAvailableOptions] = useState(options);
33
- const [showSnackBar, setShowSnackBar] = useState(false);
34
- const [chipColor, setChipColor] = useState(generateRandomColor());
35
- const [inputValue, setInputValue] = useState("");
36
- const {
37
- theme
38
- } = useEditorContext();
39
- const isMobile = window.matchMedia("(max-width: 899px)")?.matches || false;
40
- const PopoverComponent = isMobile ? SwipeableDrawer : Popover;
41
- const mode = {
42
- type: "editOptionMulti",
43
- edit: {
44
- label: "Multi Select",
45
- visible: true,
46
- key: property,
47
- type: "multi-select",
48
- options: options || [],
49
- optionIndex: currentIndex,
50
- hideBackButton: true
51
- }
52
- };
53
- const customScrollStyles = {
54
- scrollbarWidth: "thin",
55
- scrollbarColor: `${theme?.palette?.editor?.brainPopupScroll} transparent`,
56
- "&::-webkit-scrollbar": {
57
- width: "6px"
58
- },
59
- "&::-webkit-scrollbar-thumb": {
60
- backgroundColor: theme?.palette?.editor?.brainPopupScroll,
61
- borderRadius: "3px"
62
- },
63
- "&::-webkit-scrollbar-track": {
64
- display: "none"
65
- }
66
- };
67
- useEffect(() => {
68
- if (inputValue?.trim()) {
69
- setChipColor(prevColor => prevColor || generateRandomColor());
70
- } else {
71
- setChipColor(generateRandomColor());
72
- }
73
- }, [inputValue]);
74
- useEffect(() => {
75
- setAvailableOptions(options);
76
- }, [options]);
77
- const handleOpenPopover = event => {
78
- setAnchorEl(event.currentTarget);
79
- };
80
- const handleClosePopover = () => {
81
- setAnchorEl(null);
82
- };
83
- const handleAddOption = newValue => {
84
- const trimmedValue = newValue?.trim();
85
- if (!trimmedValue) return;
86
- const newOption = {
87
- value: trimmedValue,
88
- color: chipColor
89
- };
90
- if (!availableOptions?.some(opt => opt?.value === trimmedValue)) {
91
- setAvailableOptions(prev => [...prev, newOption]);
92
- setSelectedOptions(prev => [...prev, newOption]);
93
- onUpdate([newOption, ...availableOptions]);
94
- }
95
- setInputValue("");
96
- };
97
- const onClose = () => {
98
- setAnchorEl(anchorElOption);
99
- setAnchorElOption(null);
100
- };
101
- const onEditOption = (type, data) => {
102
- const updateData = data?.edit ? data?.edit?.options : data?.options;
103
- onUpdate(updateData);
104
- if (data?.edit?.options) {
105
- const updatedSelectedOptions = selectedOptions?.filter(selOption => updateData?.some(availOption => availOption?.value === selOption?.value && availOption?.color === selOption?.color));
106
- setSelectedOptions(updatedSelectedOptions);
107
- onClose();
108
- }
109
- };
110
- const handleEditOption = (e, index) => {
111
- e.stopPropagation();
112
- setCurrentIndex(index);
113
- setAnchorElOption(anchorEl);
114
- setAnchorEl(null);
115
- };
116
- const handleSelectOption = option => {
117
- if (!selectedOptions?.some(opt => opt?.value === option?.value)) {
118
- setSelectedOptions(prev => [...prev, option]);
119
- onChange(selectedOptions);
120
- } else {
121
- setShowSnackBar(true);
122
- }
123
- };
124
- const handleClearSelection = () => {
125
- setSelectedOptions([]);
126
- };
127
- const filteredOptions = availableOptions?.filter(option => option?.value?.toLowerCase()?.includes(inputValue?.toLowerCase()));
128
- const isExactMatch = availableOptions?.some(opt => opt?.value?.toLowerCase() === inputValue?.toLowerCase());
129
- const open = Boolean(anchorEl);
130
- const openEditOption = Boolean(anchorElOption);
131
- const id = open ? "autocomplete-popover" : undefined;
132
- return /*#__PURE__*/_jsxs("div", {
133
- children: [/*#__PURE__*/_jsx(Box, {
134
- sx: {
135
- display: "flex",
136
- flexWrap: wrapColumn ? "wrap" : "nowrap",
137
- overflowX: wrapColumn ? "hidden" : "auto",
138
- gap: 0.5,
139
- padding: "8px",
140
- cursor: "pointer"
141
- },
142
- onClick: handleOpenPopover,
143
- children: selectedOptions?.map((option, index) => /*#__PURE__*/_jsx(Chip, {
144
- label: option?.value,
145
- onDelete: event => {
146
- event.stopPropagation();
147
- setSelectedOptions(prev => prev.filter(selected => selected?.value !== option?.value));
148
- },
149
- deleteIcon: /*#__PURE__*/_jsx(CloseIcon, {}),
150
- variant: "filled",
151
- sx: {
152
- backgroundColor: option?.color,
153
- color: '#0F172A',
154
- "& .MuiChip-deleteIcon": {
155
- flexShrink: 0,
156
- "& path": {
157
- stroke: '#0F172A'
158
- }
159
- },
160
- "&:hover": {
161
- opacity: 0.8
162
- }
163
- }
164
- }, index))
165
- }), /*#__PURE__*/_jsx(PopoverComponent, {
166
- id: id,
167
- open: open,
168
- anchorEl: anchorEl,
169
- anchor: "bottom",
170
- onClose: handleClosePopover,
171
- anchorOrigin: {
172
- vertical: "top",
173
- horizontal: "left"
174
- },
175
- transformOrigin: {
176
- vertical: "top",
177
- horizontal: "left"
178
- },
179
- sx: {
180
- "& .MuiPaper-root": {
181
- borderRadius: "20px",
182
- background: theme?.palette?.editor?.textFormatBgColor,
183
- border: `1px solid ${theme?.palette?.editor?.popUpBorderColor}`,
184
- boxShadow: "0px 4px 10px 0px #00000029"
185
- }
186
- },
187
- children: /*#__PURE__*/_jsxs(Box, {
188
- sx: {
189
- width: isMobile ? "100%" : 300
190
- },
191
- children: [/*#__PURE__*/_jsx(Autocomplete, {
192
- multiple: true,
193
- freeSolo: true,
194
- disablePortal: true,
195
- PopperComponent: () => null,
196
- sx: {
197
- "& .MuiFormControl-root": {
198
- maxHeight: "250px",
199
- overflowY: "auto",
200
- overflowX: "hidden",
201
- pr: '12px',
202
- pl: '12px',
203
- maxWidth: isMobile ? "100%" : "275px",
204
- marginTop: '12px',
205
- ...customScrollStyles
206
- }
207
- },
208
- disableClearable: true,
209
- options: [],
210
- getOptionLabel: option => options?.value || "",
211
- value: selectedOptions,
212
- onChange: (event, newValues) => {
213
- const addedOptions = newValues?.filter(value => typeof value === "object" || typeof value === "string" && value?.trim() !== "")?.map(value => typeof value === "string" ? {
214
- value,
215
- color: chipColor
216
- } : value);
217
- const isDuplicate = addedOptions?.some(newOpt => (selectedOptions || [])?.some(opt => opt.value === newOpt.value));
218
- if (!isDuplicate) {
219
- setSelectedOptions([...selectedOptions, ...addedOptions]);
220
- }
221
- },
222
- inputValue: inputValue,
223
- onInputChange: (event, newInputValue) => setInputValue(newInputValue),
224
- onKeyDown: event => {
225
- if (event.key === "Enter" && inputValue.trim()) {
226
- event.preventDefault();
227
- handleAddOption(inputValue);
228
- }
229
- },
230
- filterOptions: (options, params) => options?.filter(option => option?.value?.toLowerCase()?.includes(params?.inputValue?.toLowerCase())),
231
- renderInput: params => /*#__PURE__*/_jsx(TextField, {
232
- ...params,
233
- variant: "standard",
234
- InputProps: {
235
- ...params.InputProps,
236
- disableUnderline: true,
237
- sx: {
238
- display: "flex",
239
- flexWrap: "wrap",
240
- fontFamily: "Inter",
241
- fontWeight: 400,
242
- fontSize: "12px",
243
- color: theme?.palette?.editor?.secondaryTextColor,
244
- "&::placeholder": {
245
- color: theme?.palette?.editor?.secondaryTextColor
246
- },
247
- "& .MuiAutocomplete-input": {
248
- minWidth: "100px !important"
249
- }
250
- },
251
- endAdornment: /*#__PURE__*/_jsx(Tooltip, {
252
- arrow: true,
253
- title: "Clear Selected",
254
- children: /*#__PURE__*/_jsx(IconButton, {
255
- onClick: handleClearSelection,
256
- sx: {
257
- padding: 0,
258
- minWidth: "unset",
259
- "& .MuiSvgIcon-root": {
260
- fontSize: 20
261
- },
262
- '& rect': {
263
- fill: theme?.palette?.editor?.closeButtonSvgStroke
264
- },
265
- '&:hover': {
266
- backgroundColor: 'transparent'
267
- }
268
- },
269
- children: /*#__PURE__*/_jsx(ClearAllRounded, {})
270
- })
271
- })
272
- },
273
- sx: {
274
- backgroundColor: "transparent",
275
- fontFamily: 'Inter',
276
- fontWeight: 400,
277
- fontSize: '12px'
278
- },
279
- placeholder: "Create new one..."
280
- }),
281
- renderTags: (tagValues, getTagProps) => tagValues.map((option, index) => /*#__PURE__*/_jsx(Chip, {
282
- variant: "filled",
283
- label: option?.value,
284
- ...getTagProps({
285
- index
286
- }),
287
- onDelete: event => {
288
- event.stopPropagation();
289
- setSelectedOptions(prev => prev.filter(selected => selected?.value !== option?.value));
290
- },
291
- deleteIcon: /*#__PURE__*/_jsx(CloseIcon, {}),
292
- sx: {
293
- backgroundColor: option?.color,
294
- color: '#0F172A',
295
- "& .MuiChip-deleteIcon": {
296
- flexShrink: 0,
297
- "& path": {
298
- stroke: '#0F172A'
299
- }
300
- },
301
- "&:hover": {
302
- opacity: 0.8
303
- }
304
- }
305
- }, index))
306
- }), /*#__PURE__*/_jsx(Divider, {
307
- sx: {
308
- mt: '12px',
309
- borderBottom: `1px solid ${theme?.palette?.editor?.popUpBorderColor}`,
310
- boxShadow: theme?.palette?.editor?.dividerDropShadow
311
- }
312
- }), /*#__PURE__*/_jsx(Box, {
313
- sx: {
314
- pl: '4px'
315
- },
316
- children: /*#__PURE__*/_jsxs(List, {
317
- sx: {
318
- maxHeight: "250px",
319
- overflowY: "auto",
320
- ...customScrollStyles
321
- },
322
- children: [/*#__PURE__*/_jsx(Typography, {
323
- sx: {
324
- mb: 1,
325
- pl: '8px',
326
- color: theme?.palette?.editor?.secondaryTextColor,
327
- fontFamily: 'Inter',
328
- fontWeight: 400,
329
- fontSize: '12px'
330
- },
331
- children: "Choose an option or create one"
332
- }), filteredOptions?.map((option, index) => /*#__PURE__*/_jsx(ListItem, {
333
- disablePadding: true,
334
- children: /*#__PURE__*/_jsxs(ListItemButton, {
335
- onClick: () => handleSelectOption(option),
336
- sx: {
337
- justifyContent: 'space-between',
338
- '&:hover': {
339
- '& path': {
340
- stroke: theme?.palette?.editor?.activeColor
341
- },
342
- borderRadius: '12px'
343
- }
344
- },
345
- children: [/*#__PURE__*/_jsx(Chip, {
346
- label: option?.value,
347
- sx: {
348
- backgroundColor: option?.color,
349
- color: '#0F172A',
350
- fontWeight: 500,
351
- fontSize: "12px",
352
- fontFamily: "Inter",
353
- padding: "4px 12px",
354
- borderRadius: "16px",
355
- maxWidth: "180px",
356
- whiteSpace: "nowrap",
357
- overflow: "hidden",
358
- textOverflow: "ellipsis"
359
- }
360
- }), /*#__PURE__*/_jsx(IconButton, {
361
- size: "small",
362
- sx: {
363
- '& path': {
364
- stroke: theme?.palette?.editor?.closeButtonSvgStroke
365
- },
366
- '&:hover': {
367
- backgroundColor: 'transparent'
368
- }
369
- },
370
- onClick: e => handleEditOption(e, index),
371
- children: /*#__PURE__*/_jsx(Icon, {
372
- icon: "rightArrow"
373
- })
374
- })]
375
- })
376
- }, index)), inputValue?.trim() && !isExactMatch && /*#__PURE__*/_jsx(ListItem, {
377
- disablePadding: true,
378
- children: /*#__PURE__*/_jsxs(ListItemButton, {
379
- onClick: () => handleAddOption(inputValue),
380
- sx: {
381
- display: "flex",
382
- alignItems: "center"
383
- },
384
- children: [/*#__PURE__*/_jsx(Typography, {
385
- sx: {
386
- color: theme?.palette?.editor?.secondaryTextColor,
387
- marginRight: "6px",
388
- fontSize: "14px",
389
- fontFamily: "Inter"
390
- },
391
- children: "Create"
392
- }), /*#__PURE__*/_jsx(Chip, {
393
- label: `${inputValue}`,
394
- sx: {
395
- backgroundColor: chipColor,
396
- color: '#0F172A',
397
- fontWeight: 500,
398
- fontSize: "12px",
399
- fontFamily: "Inter",
400
- borderRadius: "16px",
401
- maxWidth: "180px",
402
- whiteSpace: "nowrap",
403
- overflow: "hidden",
404
- textOverflow: "ellipsis"
405
- }
406
- })]
407
- })
408
- })]
409
- })
410
- })]
411
- })
412
- }), openEditOption ? /*#__PURE__*/_jsx(PropertySettings, {
413
- open: openEditOption,
414
- anchorEl: anchorElOption,
415
- mode: mode,
416
- onClose: onClose,
417
- onEvent: onEditOption,
418
- translation: translation
419
- }) : null, showSnackBar ? /*#__PURE__*/_jsx(SnackbarAlert, {
420
- message: "Option already selected!",
421
- setShowSnackBar: setShowSnackBar
422
- }) : null]
423
- });
424
- };
425
- export default MultiSelectWithPopover;