@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.
- package/dist/Editor/ChatEditor.js +17 -16
- package/dist/Editor/CommonEditor.js +134 -18
- package/dist/Editor/DialogWrapper.js +31 -25
- package/dist/Editor/Editor.css +46 -8
- package/dist/Editor/Elements/AI/PopoverAIInput.js +11 -3
- package/dist/Editor/Elements/Accordion/Accordion.js +46 -9
- package/dist/Editor/Elements/Accordion/AccordionSummary.js +1 -23
- package/dist/Editor/Elements/AppHeader/AppHeader.js +10 -5
- package/dist/Editor/Elements/Button/EditorButton.js +26 -10
- package/dist/Editor/Elements/Carousel/CarouselItem.js +2 -1
- package/dist/Editor/Elements/Color Picker/ColorButtons.js +61 -14
- package/dist/Editor/Elements/Color Picker/ColorPicker.css +25 -1
- package/dist/Editor/Elements/Color Picker/ColorPicker.js +10 -7
- package/dist/Editor/Elements/Color Picker/Styles.js +15 -13
- package/dist/Editor/Elements/DataView/Layouts/ColumnView.js +4 -2
- package/dist/Editor/Elements/DataView/Layouts/DataTypes/Components/MultiSelect.js +482 -0
- package/dist/Editor/Elements/DataView/Layouts/DataTypes/Components/SelectV1.js +513 -0
- package/dist/Editor/Elements/DataView/Layouts/DataTypes/MultiSelectType.js +27 -11
- package/dist/Editor/Elements/DataView/Layouts/DataTypes/SelectType.js +29 -9
- package/dist/Editor/Elements/DataView/Layouts/Options/AddOptions.js +17 -6
- package/dist/Editor/Elements/DataView/Layouts/Options/EditOption.js +4 -3
- package/dist/Editor/Elements/DataView/Layouts/Options/index.js +11 -0
- package/dist/Editor/Elements/DataView/Layouts/ViewData.js +8 -4
- package/dist/Editor/Elements/Embed/Image.js +3 -2
- package/dist/Editor/Elements/Embed/Video.js +1 -1
- package/dist/Editor/Elements/EmbedScript/Code.js +14 -2
- package/dist/Editor/Elements/EmbedScript/EmbedScriptPopup.js +57 -28
- package/dist/Editor/Elements/EmbedScript/styles.js +89 -0
- package/dist/Editor/Elements/Form/Form.js +184 -171
- package/dist/Editor/Elements/Form/FormElements/FormText.js +23 -6
- package/dist/Editor/Elements/Form/FormElements/FormTextArea.js +2 -2
- package/dist/Editor/Elements/Form/FormField.js +13 -6
- package/dist/Editor/Elements/Form/Workflow/Styles.js +24 -22
- package/dist/Editor/Elements/FreeGrid/FreeGrid.js +40 -32
- package/dist/Editor/Elements/FreeGrid/FreeGridBox.js +7 -4
- package/dist/Editor/Elements/FreeGrid/FreeGridItem.js +1 -0
- package/dist/Editor/Elements/FreeGrid/Options/More.js +8 -8
- package/dist/Editor/Elements/FreeGrid/helper.js +115 -0
- package/dist/Editor/Elements/FreeGrid/styles.js +75 -7
- package/dist/Editor/Elements/Grid/Grid.js +14 -2
- package/dist/Editor/Elements/Grid/GridItem.js +1 -1
- package/dist/Editor/Elements/List/CheckList.js +3 -2
- package/dist/Editor/Elements/Search/SearchAttachment.js +40 -9
- package/dist/Editor/Elements/Search/SearchButton.js +9 -8
- package/dist/Editor/Elements/Search/SearchList.js +9 -7
- package/dist/Editor/Elements/Signature/Signature.css +2 -1
- package/dist/Editor/Elements/Signature/SignatureOptions/DrawSignature.js +18 -5
- package/dist/Editor/Elements/Signature/SignatureOptions/UploadSignature.js +16 -3
- package/dist/Editor/Elements/SimpleText/index.js +6 -1
- package/dist/Editor/Elements/SimpleText/style.js +2 -2
- package/dist/Editor/Elements/Table/DragButton.js +0 -1
- package/dist/Editor/Elements/Table/Draggable.js +6 -2
- package/dist/Editor/Elements/Table/Styles.js +7 -0
- package/dist/Editor/Elements/Table/Table.js +3 -3
- package/dist/Editor/Elements/Table/TableCell.js +31 -8
- package/dist/Editor/Elements/Title/title.js +6 -6
- package/dist/Editor/Elements/Variables/VariableButton.js +10 -1
- package/dist/Editor/MiniEditor.js +2 -1
- package/dist/Editor/Styles/EditorStyles.js +5 -5
- package/dist/Editor/Toolbar/FormatTools/Dropdown.js +27 -3
- package/dist/Editor/Toolbar/FormatTools/FontFamilyAutocomplete.js +4 -3
- package/dist/Editor/Toolbar/FormatTools/MarkButton.js +2 -2
- package/dist/Editor/Toolbar/FormatTools/TextSize.js +10 -13
- package/dist/Editor/Toolbar/Mini/MiniToolbar.js +2 -1
- package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/MiniColorPicker.js +4 -2
- package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/SelectFontSize.js +6 -13
- package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/SelectTypography.js +167 -42
- package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/index.js +7 -4
- package/dist/Editor/Toolbar/PopupTool/PopperHeader.js +2 -1
- package/dist/Editor/Toolbar/PopupTool/PopupToolStyle.js +72 -12
- package/dist/Editor/Toolbar/PopupTool/TextFormat.js +100 -27
- package/dist/Editor/Toolbar/PopupTool/ThemeTextFormat.js +439 -0
- package/dist/Editor/Toolbar/PopupTool/index.js +1 -1
- package/dist/Editor/Toolbar/toolbarGroups.js +48 -6
- package/dist/Editor/assets/svg/BackIcon.js +18 -0
- package/dist/Editor/assets/svg/ClearAllRounded.js +31 -0
- package/dist/Editor/assets/svg/ResetIconNew.js +23 -0
- package/dist/Editor/assets/svg/SettingsIcon.js +1 -0
- package/dist/Editor/assets/svg/ThemeIcons.js +293 -0
- package/dist/Editor/common/Checkbox/index.js +46 -0
- package/dist/Editor/common/Checkbox/styles.js +45 -0
- package/dist/Editor/common/ColorPickerButton.js +41 -16
- package/dist/Editor/common/CustomColorPicker/index.js +130 -0
- package/dist/Editor/common/CustomColorPicker/style.js +53 -0
- package/dist/Editor/common/CustomDialog2/index.js +94 -0
- package/dist/Editor/common/CustomDialog2/style.js +67 -0
- package/dist/Editor/common/CustomSelect.js +43 -0
- package/dist/Editor/common/DnD/DragHandleButton.js +1 -1
- package/dist/Editor/common/FontLoader/FontLoader.js +3 -0
- package/dist/Editor/common/Icon.js +31 -1
- package/dist/Editor/common/ImageSelector/ImageSelector.js +2 -2
- package/dist/Editor/common/ImageSelector/Styles.js +3 -9
- package/dist/Editor/common/LinkSettings/NavComponents.js +61 -55
- package/dist/Editor/common/LinkSettings/index.js +82 -80
- package/dist/Editor/common/LinkSettings/navOptions.js +2 -2
- package/dist/Editor/common/LinkSettings/style.js +209 -74
- package/dist/Editor/common/MentionsPopup/index.js +4 -1
- package/dist/Editor/common/RadioGroup/index.js +48 -0
- package/dist/Editor/common/RadioGroup/styles.js +29 -0
- package/dist/Editor/common/RnD/ElementOptions/Actions.js +13 -15
- package/dist/Editor/common/RnD/ElementOptions/Icons/LinkIcon.js +1 -0
- package/dist/Editor/common/RnD/ElementOptions/index.js +2 -2
- package/dist/Editor/common/RnD/ElementOptions/styles.js +28 -1
- package/dist/Editor/common/RnD/ElementSettings/OtherSettings/Settings.js +6 -5
- package/dist/Editor/common/RnD/ElementSettings/OtherSettings/Signature.js +4 -3
- package/dist/Editor/common/RnD/ElementSettings/Settings/AppHeaderSettings.js +3 -2
- package/dist/Editor/common/RnD/ElementSettings/Settings/BoxSettings.js +3 -2
- package/dist/Editor/common/RnD/ElementSettings/Settings/ButtonSettings.js +3 -2
- package/dist/Editor/common/RnD/ElementSettings/Settings/CodeSettings.js +3 -2
- package/dist/Editor/common/RnD/ElementSettings/Settings/FormSettings.js +4 -2
- package/dist/Editor/common/RnD/ElementSettings/Settings/ImageSettings.js +3 -2
- package/dist/Editor/common/RnD/ElementSettings/Settings/TableSettings.js +3 -2
- package/dist/Editor/common/RnD/ElementSettings/Settings/TextSettings.js +3 -1
- package/dist/Editor/common/RnD/ElementSettings/Settings/VideoSettings.js +3 -2
- package/dist/Editor/common/RnD/ElementSettings/styles.js +146 -12
- package/dist/Editor/common/RnD/OptionsPopup/index.js +8 -5
- package/dist/Editor/common/RnD/OptionsPopup/style.js +120 -19
- package/dist/Editor/common/RnD/SwitchViewport/SwitchViewport.js +8 -5
- package/dist/Editor/common/RnD/Theme/MainThemeProvider.js +17 -0
- package/dist/Editor/common/RnD/Theme/ViewportStimulator.js +6 -3
- package/dist/Editor/common/RnD/Utils/gridDropItem.js +28 -19
- package/dist/Editor/common/RnD/Utils/index.js +3 -1
- package/dist/Editor/common/RnD/VirtualElement/VirtualTextElement.js +42 -58
- package/dist/Editor/common/RnD/VirtualElement/helper.js +323 -132
- package/dist/Editor/common/RnD/VirtualElement/styles.js +16 -0
- package/dist/Editor/common/RnD/index.js +67 -38
- package/dist/Editor/common/Select/index.js +44 -5
- package/dist/Editor/common/Select/styles.js +30 -2
- package/dist/Editor/common/Shorthands/elements.js +65 -11
- package/dist/Editor/common/SnackBar/index.js +43 -0
- package/dist/Editor/common/StyleBuilder/accordionTitleBtnStyle.js +2 -2
- package/dist/Editor/common/StyleBuilder/accordionTitleStyle.js +12 -9
- package/dist/Editor/common/StyleBuilder/buttonStyle.js +4 -2
- package/dist/Editor/common/StyleBuilder/embedVideoStyle.js +4 -0
- package/dist/Editor/common/StyleBuilder/fieldTypes/backgroundImage.js +5 -0
- package/dist/Editor/common/StyleBuilder/fieldTypes/bannerSpacing.js +12 -2
- package/dist/Editor/common/StyleBuilder/fieldTypes/borderRadius.js +15 -7
- package/dist/Editor/common/StyleBuilder/fieldTypes/card.js +16 -8
- package/dist/Editor/common/StyleBuilder/fieldTypes/color.js +36 -10
- package/dist/Editor/common/StyleBuilder/fieldTypes/embedUpload.js +115 -0
- package/dist/Editor/common/StyleBuilder/fieldTypes/fontSize.js +16 -7
- package/dist/Editor/common/StyleBuilder/fieldTypes/index.js +3 -1
- package/dist/Editor/common/StyleBuilder/fieldTypes/lineSpacing.js +7 -6
- package/dist/Editor/common/StyleBuilder/fieldTypes/menusArray.js +13 -6
- package/dist/Editor/common/StyleBuilder/fieldTypes/textOptions.js +15 -7
- package/dist/Editor/common/StyleBuilder/pageSettingsStyle.js +5 -7
- package/dist/Editor/common/SwipeableDrawer/style.js +14 -12
- package/dist/Editor/common/Uploader.js +16 -0
- package/dist/Editor/common/iconListV2.js +177 -6
- package/dist/Editor/common/iconslist.js +24 -0
- package/dist/Editor/commonStyle.js +186 -62
- package/dist/Editor/helper/index.js +5 -1
- package/dist/Editor/helper/textIndeces.js +58 -0
- package/dist/Editor/helper/theme.js +203 -2
- package/dist/Editor/hooks/useEditorTheme.js +153 -0
- package/dist/Editor/hooks/useMouseMove.js +8 -5
- package/dist/Editor/hooks/useTable.js +5 -4
- package/dist/Editor/hooks/useThemeValues.js +63 -0
- package/dist/Editor/plugins/withEmbeds.js +1 -1
- package/dist/Editor/plugins/withHTML.js +3 -1
- package/dist/Editor/plugins/withTable.js +1 -1
- package/dist/Editor/theme/ThemeList.js +50 -173
- package/dist/Editor/theme/index.js +149 -0
- package/dist/Editor/themeSettings/ActiveTheme.js +82 -0
- package/dist/Editor/themeSettings/buttons/index.js +300 -0
- package/dist/Editor/themeSettings/buttons/style.js +23 -0
- package/dist/Editor/themeSettings/colorTheme/index.js +310 -0
- package/dist/Editor/themeSettings/colorTheme/style.js +81 -0
- package/dist/Editor/themeSettings/fonts/PreviewElement.js +121 -0
- package/dist/Editor/themeSettings/fonts/index.js +240 -0
- package/dist/Editor/themeSettings/fonts/style.js +62 -0
- package/dist/Editor/themeSettings/icons.js +60 -0
- package/dist/Editor/themeSettings/index.js +380 -0
- package/dist/Editor/themeSettings/style.js +299 -0
- package/dist/Editor/themeSettingsAI/icons.js +96 -0
- package/dist/Editor/themeSettingsAI/index.js +355 -0
- package/dist/Editor/themeSettingsAI/saveTheme.js +202 -0
- package/dist/Editor/themeSettingsAI/style.js +332 -0
- package/dist/Editor/utils/SlateUtilityFunctions.js +172 -46
- package/dist/Editor/utils/accordion.js +14 -4
- package/dist/Editor/utils/button.js +1 -17
- package/dist/Editor/utils/customHooks/useTableResize.js +49 -9
- package/dist/Editor/utils/draftToSlate.js +3 -2
- package/dist/Editor/utils/events.js +50 -6
- package/dist/Editor/utils/font.js +40 -37
- package/dist/Editor/utils/form.js +4 -4
- package/dist/Editor/utils/formfield.js +9 -2
- package/dist/Editor/utils/helper.js +210 -26
- package/dist/Editor/utils/insertAppHeader.js +1 -1
- package/dist/Editor/utils/signature.js +2 -9
- package/dist/Editor/utils/updateFormName.js +22 -0
- 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:
|
11
|
-
serif:
|
12
|
-
monospace:
|
13
|
-
roboto: "
|
14
|
-
qwitcher: "
|
15
|
-
garamond: "
|
16
|
-
anton: "
|
17
|
-
dmserif: "
|
18
|
-
inter: "
|
19
|
-
libre: "
|
20
|
-
montserrat: "
|
21
|
-
opensans: "
|
22
|
-
publicsans: "
|
23
|
-
raleway: "
|
24
|
-
spacemono: "
|
25
|
-
bulgarian: "
|
26
|
-
impact: "
|
27
|
-
redacted: "
|
28
|
-
greatVibes: "
|
29
|
-
zeyada: "
|
30
|
-
allura: "
|
31
|
-
pinyon: "
|
32
|
-
muellerhoff: "
|
33
|
-
dawning: "
|
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: "
|
36
|
-
dancingScript: "
|
37
|
-
engagement: "
|
38
|
-
gaegu: "
|
39
|
-
ingridDarling: "
|
40
|
-
kitaOne: "
|
41
|
-
laBelleAurore: "
|
42
|
-
lobster: "
|
43
|
-
meaCulpa: "
|
44
|
-
meddon: "
|
45
|
-
merriWeather: "
|
46
|
-
theGirlNextDoor: "
|
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",
|
@@ -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
|
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
|
-
|
390
|
-
} else {
|
391
|
-
|
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
|
835
|
-
|
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
|
};
|
@@ -1,9 +1,5 @@
|
|
1
|
-
import {
|
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
|
-
|
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.
|
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/
|
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"
|