@flozy/editor 1.5.9 → 1.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. package/dist/Editor/CommonEditor.js +195 -94
  2. package/dist/Editor/DialogWrapper.js +3 -0
  3. package/dist/Editor/Editor.css +211 -50
  4. package/dist/Editor/Elements/Accordion/Accordion.js +0 -1
  5. package/dist/Editor/Elements/Accordion/AccordionButton.js +13 -12
  6. package/dist/Editor/Elements/Accordion/AccordionSummary.js +0 -1
  7. package/dist/Editor/Elements/AppHeader/AppHeader.js +136 -133
  8. package/dist/Editor/Elements/AppHeader/AppHeaderPopup.js +4 -2
  9. package/dist/Editor/Elements/Button/ButtonToolIcon.js +10 -9
  10. package/dist/Editor/Elements/Button/EditorButton.js +8 -24
  11. package/dist/Editor/Elements/Carousel/Carousel.js +47 -28
  12. package/dist/Editor/Elements/Carousel/CarouselButton.js +7 -8
  13. package/dist/Editor/Elements/Color Picker/ColorButtons.js +133 -0
  14. package/dist/Editor/Elements/Color Picker/ColorPicker.js +49 -58
  15. package/dist/Editor/Elements/Color Picker/Styles.js +51 -0
  16. package/dist/Editor/Elements/Color Picker/defaultColors.js +1 -1
  17. package/dist/Editor/Elements/Embed/Embed.js +35 -126
  18. package/dist/Editor/Elements/Embed/Image.js +24 -7
  19. package/dist/Editor/Elements/Embed/Video.js +21 -6
  20. package/dist/Editor/Elements/Emoji/EmojiButton.js +73 -0
  21. package/dist/Editor/Elements/Emoji/EmojiPicker.js +0 -0
  22. package/dist/Editor/Elements/Form/Form.js +24 -13
  23. package/dist/Editor/Elements/Form/FormButton.js +11 -9
  24. package/dist/Editor/Elements/Form/FormElements/FormText.js +4 -2
  25. package/dist/Editor/Elements/Form/FormElements/FormTextArea.js +3 -2
  26. package/dist/Editor/Elements/Form/FormField.js +7 -1
  27. package/dist/Editor/Elements/Grid/Grid.js +143 -47
  28. package/dist/Editor/Elements/Grid/GridButton.js +52 -29
  29. package/dist/Editor/Elements/Grid/GridItem.js +32 -21
  30. package/dist/Editor/Elements/Grid/Styles.js +11 -0
  31. package/dist/Editor/Elements/InlineIcon/InlineIcon.js +0 -1
  32. package/dist/Editor/Elements/List/CheckList.js +57 -0
  33. package/dist/Editor/Elements/List/CheckListButton.js +24 -0
  34. package/dist/Editor/Elements/NewLine/NewLineButton.js +14 -14
  35. package/dist/Editor/Elements/PageSettings/PageSettings.js +4 -2
  36. package/dist/Editor/Elements/PageSettings/PageSettingsButton.js +17 -62
  37. package/dist/Editor/Elements/PageSettings/PageSettingsPopup.js +1 -1
  38. package/dist/Editor/Elements/Signature/Signature.js +9 -3
  39. package/dist/Editor/Elements/Signature/SignatureButton.js +10 -9
  40. package/dist/Editor/Elements/Signature/SignaturePopup.js +42 -6
  41. package/dist/Editor/Elements/SimpleText.js +62 -0
  42. package/dist/Editor/Elements/Table/Styles.js +66 -0
  43. package/dist/Editor/Elements/Table/Table.js +33 -16
  44. package/dist/Editor/Elements/Table/TableCell.js +54 -24
  45. package/dist/Editor/Elements/Table/TableSelector.js +13 -15
  46. package/dist/Editor/Elements/Table/table.css +0 -10
  47. package/dist/Editor/Elements/TopBanner/Styles.js +33 -0
  48. package/dist/Editor/Elements/TopBanner/TopBanner.js +106 -0
  49. package/dist/Editor/Elements/TopBanner/TopBannerButton.js +47 -0
  50. package/dist/Editor/Styles/EditorStyles.js +50 -0
  51. package/dist/Editor/Toolbar/FormatTools/Autocomplete.js +0 -2
  52. package/dist/Editor/Toolbar/FormatTools/Dropdown.js +8 -3
  53. package/dist/Editor/Toolbar/FormatTools/FontFamilyDropdown.js +63 -0
  54. package/dist/Editor/Toolbar/FormatTools/FontSize.js +112 -0
  55. package/dist/Editor/Toolbar/FormatTools/TextSize.js +13 -3
  56. package/dist/Editor/Toolbar/FormatTools/index.js +4 -1
  57. package/dist/Editor/Toolbar/Mini/MiniToolbar.js +101 -0
  58. package/dist/Editor/Toolbar/Mini/Options/Options.js +17 -0
  59. package/dist/Editor/Toolbar/Mini/Styles.js +30 -0
  60. package/dist/Editor/Toolbar/PopupTool/AddElements.js +32 -0
  61. package/dist/Editor/Toolbar/PopupTool/AddTemplates.js +115 -0
  62. package/dist/Editor/Toolbar/PopupTool/PopperHeader.js +65 -0
  63. package/dist/Editor/Toolbar/PopupTool/PopupToolStyle.js +160 -6
  64. package/dist/Editor/Toolbar/PopupTool/TextFormat.js +263 -80
  65. package/dist/Editor/Toolbar/PopupTool/index.js +50 -85
  66. package/dist/Editor/Toolbar/Toolbar.js +189 -129
  67. package/dist/Editor/Toolbar/styles.css +136 -18
  68. package/dist/Editor/Toolbar/toolbarGroups.js +94 -34
  69. package/dist/Editor/assets/svg/AddElementIcon.js +29 -0
  70. package/dist/Editor/assets/svg/AddTemplateIcon.js +29 -0
  71. package/dist/Editor/assets/svg/TextIcon.js +29 -0
  72. package/dist/Editor/common/Icon.js +54 -5
  73. package/dist/Editor/common/ImageList.js +75 -0
  74. package/dist/Editor/common/ImageSelector/ImageSelector.js +117 -0
  75. package/dist/Editor/common/ImageSelector/Options/AddLink.js +44 -0
  76. package/dist/Editor/common/ImageSelector/Options/ChooseAssets.js +39 -0
  77. package/dist/Editor/common/ImageSelector/Options/Upload.js +30 -0
  78. package/dist/Editor/common/ImageSelector/Styles.js +41 -0
  79. package/dist/Editor/common/ImageUploader.js +94 -0
  80. package/dist/Editor/common/MentionsPopup/ElementsListCard.js +66 -0
  81. package/dist/Editor/common/MentionsPopup/MentionsListCard.js +70 -0
  82. package/dist/Editor/common/MentionsPopup/Styles.js +68 -0
  83. package/dist/Editor/common/MentionsPopup/index.js +129 -0
  84. package/dist/Editor/common/Shorthands/elements.js +191 -0
  85. package/dist/Editor/common/Shorthands/index.js +7 -0
  86. package/dist/Editor/common/Shorthands/mentions.js +8 -0
  87. package/dist/Editor/common/StyleBuilder/appHeaderStyle.js +5 -5
  88. package/dist/Editor/common/StyleBuilder/buttonStyle.js +1 -1
  89. package/dist/Editor/common/StyleBuilder/embedImageStyle.js +15 -2
  90. package/dist/Editor/common/StyleBuilder/embedVideoStyle.js +8 -0
  91. package/dist/Editor/common/StyleBuilder/fieldTypes/alignment.js +2 -3
  92. package/dist/Editor/common/StyleBuilder/fieldTypes/backgroundImage.js +23 -35
  93. package/dist/Editor/common/StyleBuilder/fieldTypes/buttonLink.js +3 -20
  94. package/dist/Editor/common/StyleBuilder/fieldTypes/fontSize.js +95 -0
  95. package/dist/Editor/common/StyleBuilder/fieldTypes/icons.js +14 -2
  96. package/dist/Editor/common/StyleBuilder/fieldTypes/index.js +3 -1
  97. package/dist/Editor/common/StyleBuilder/fieldTypes/menusArray.js +0 -1
  98. package/dist/Editor/common/StyleBuilder/fieldTypes/textOptions.js +3 -2
  99. package/dist/Editor/common/StyleBuilder/index.js +0 -1
  100. package/dist/Editor/common/StyleBuilder/tableStyle.js +9 -5
  101. package/dist/Editor/common/ToolbarIcon.js +43 -0
  102. package/dist/Editor/common/Uploader.js +35 -61
  103. package/dist/Editor/common/iconslist.js +46 -1
  104. package/dist/Editor/helper/index.js +0 -1
  105. package/dist/Editor/hooks/useDrag.js +2 -2
  106. package/dist/Editor/hooks/useMentions.js +104 -17
  107. package/dist/Editor/hooks/useMouseMove.js +53 -0
  108. package/dist/Editor/hooks/useScroll.js +26 -0
  109. package/dist/Editor/plugins/withEmbeds.js +12 -0
  110. package/dist/Editor/service/fileupload.js +2 -2
  111. package/dist/Editor/utils/SlateUtilityFunctions.js +61 -9
  112. package/dist/Editor/utils/button.js +2 -1
  113. package/dist/Editor/utils/carousel.js +5 -2
  114. package/dist/Editor/utils/carouselItem.js +2 -2
  115. package/dist/Editor/utils/customHooks/useResize.js +2 -3
  116. package/dist/Editor/utils/customHooks/useTableResize.js +2 -1
  117. package/dist/Editor/utils/embed.js +25 -8
  118. package/dist/Editor/utils/emoji.js +8 -0
  119. package/dist/Editor/utils/events.js +49 -12
  120. package/dist/Editor/utils/form.js +3 -9
  121. package/dist/Editor/utils/formfield.js +2 -1
  122. package/dist/Editor/utils/grid.js +44 -8
  123. package/dist/Editor/utils/gridItem.js +4 -3
  124. package/dist/Editor/utils/insertNewLine.js +12 -0
  125. package/dist/Editor/utils/mentions.js +14 -10
  126. package/dist/Editor/utils/pageSettings.js +67 -0
  127. package/dist/Editor/utils/signature.js +6 -8
  128. package/dist/Editor/utils/table.js +79 -18
  129. package/dist/Editor/utils/topBanner.js +58 -0
  130. package/package.json +6 -2
  131. package/dist/Editor/common/MentionsPopup.js +0 -56
@@ -0,0 +1,133 @@
1
+ import React, { useState } from "react";
2
+ import { Box, IconButton, Popover } from "@mui/material";
3
+ import ArrowDropDownIcon from "@mui/icons-material/ArrowDropDown";
4
+ import Button from "../../common/Button";
5
+ import { colors } from "./defaultColors";
6
+ import { jsx as _jsx } from "react/jsx-runtime";
7
+ import { jsxs as _jsxs } from "react/jsx-runtime";
8
+ let c = [];
9
+ const ColorChunks = (recentColors = []) => [...recentColors, ...colors].reduce((a, b, i) => {
10
+ if (i % 7 === 0) {
11
+ a.push(c);
12
+ c = [];
13
+ }
14
+ c.push(b);
15
+ return a;
16
+ }, []).reverse();
17
+ const SingleColorButton = ({
18
+ crs,
19
+ index,
20
+ handleSelect,
21
+ classes,
22
+ handleMore,
23
+ activeColor
24
+ }) => {
25
+ return /*#__PURE__*/_jsxs(Box, {
26
+ style: {
27
+ width: "100%",
28
+ display: "flex",
29
+ alignItems: "center",
30
+ padding: "8px"
31
+ },
32
+ children: [crs.map(m => /*#__PURE__*/_jsx(Button, {
33
+ onClick: handleSelect(m),
34
+ style: {
35
+ background: m
36
+ },
37
+ sx: classes.colorButtonSingle,
38
+ className: `${activeColor === m ? "active" : ""}`
39
+ }, `color_bs_${m}`)), index === 0 && handleMore ? /*#__PURE__*/_jsx(IconButton, {
40
+ onClick: handleMore,
41
+ className: "more-btn-cbs",
42
+ children: /*#__PURE__*/_jsx(ArrowDropDownIcon, {})
43
+ }) : null]
44
+ }, `ci_bs_row_${index}}`);
45
+ };
46
+ export const AllColors = props => {
47
+ const {
48
+ classes,
49
+ onSelect,
50
+ activeColor
51
+ } = props;
52
+ const all = ColorChunks([]);
53
+ return /*#__PURE__*/_jsx(Box, {
54
+ component: "div",
55
+ sx: classes.allColor,
56
+ children: /*#__PURE__*/_jsx(Box, {
57
+ sx: classes.allColorInner,
58
+ children: /*#__PURE__*/_jsx(Box, {
59
+ className: "buttonsWrpr",
60
+ children: all.map((m, i) => {
61
+ return /*#__PURE__*/_jsx(SingleColorButton, {
62
+ crs: m,
63
+ index: i,
64
+ handleSelect: onSelect,
65
+ classes: classes,
66
+ activeColor: activeColor
67
+ }, `si_btn_row1_${m}_${i}`);
68
+ })
69
+ })
70
+ })
71
+ });
72
+ };
73
+ const ColorButtons = props => {
74
+ const {
75
+ onSelect,
76
+ classes,
77
+ activeColor
78
+ } = props;
79
+ const [row1, ...restRows] = ColorChunks([]);
80
+ const [anchorEl, setAnchorEl] = useState(null);
81
+ const open = Boolean(anchorEl);
82
+ const handleMore = e => {
83
+ setAnchorEl(e.currentTarget);
84
+ };
85
+ const handleClose = () => {
86
+ setAnchorEl(null);
87
+ };
88
+ const handleSelect = color => () => {
89
+ onSelect(color);
90
+ };
91
+ return /*#__PURE__*/_jsxs(Box, {
92
+ component: "span",
93
+ sx: classes.colorButtons,
94
+ children: [/*#__PURE__*/_jsx(Box, {
95
+ className: "buttonsWrpr first",
96
+ children: [row1].map((m, i) => {
97
+ return /*#__PURE__*/_jsx(SingleColorButton, {
98
+ crs: m,
99
+ index: i,
100
+ handleSelect: handleSelect,
101
+ classes: classes,
102
+ handleMore: handleMore,
103
+ activeColor: activeColor
104
+ }, `si_btn_row1_${m}_${i}`);
105
+ })
106
+ }), /*#__PURE__*/_jsx(Popover, {
107
+ open: open,
108
+ anchorEl: anchorEl,
109
+ onClose: handleClose,
110
+ anchorOrigin: {
111
+ vertical: "bottom",
112
+ horizontal: "right"
113
+ },
114
+ transformOrigin: {
115
+ vertical: "top",
116
+ horizontal: "right"
117
+ },
118
+ children: /*#__PURE__*/_jsx(Box, {
119
+ sx: classes.colorButtonsInner,
120
+ children: restRows.map((m, i) => {
121
+ return /*#__PURE__*/_jsx(SingleColorButton, {
122
+ crs: m,
123
+ index: i,
124
+ handleSelect: handleSelect,
125
+ classes: classes,
126
+ activeColor: activeColor
127
+ }, `si_btn_${m}_${i}`);
128
+ })
129
+ })
130
+ })]
131
+ });
132
+ };
133
+ export default ColorButtons;
@@ -1,13 +1,15 @@
1
- import React, { useRef, useState } from "react";
1
+ import React, { useState } from "react";
2
2
  import { ReactEditor } from "slate-react";
3
- import Button from "../../common/Button";
4
- import { addMarkData, activeMark } from "../../utils/SlateUtilityFunctions";
5
3
  import { Transforms } from "slate";
6
- import usePopup from "../../utils/customHooks/usePopup";
4
+ import ColorPickerTool from "react-gcolor-picker";
5
+ import { IconButton, Tooltip, Box, Popover } from "@mui/material";
6
+ import { addMarkData, activeMark } from "../../utils/SlateUtilityFunctions";
7
7
  import { logo } from "./LogoIcon";
8
8
  import "./ColorPicker.css";
9
- import ColorPickerTool from "react-gcolor-picker";
9
+ import ColorButtons from "./ColorButtons";
10
+ import ColorPickerStyles from "./Styles";
10
11
  import { jsx as _jsx } from "react/jsx-runtime";
12
+ import { Fragment as _Fragment } from "react/jsx-runtime";
11
13
  import { jsxs as _jsxs } from "react/jsx-runtime";
12
14
  const DEFAULT_COLOR = {
13
15
  color: "#000000",
@@ -18,15 +20,17 @@ const ColorPicker = ({
18
20
  editor,
19
21
  showHex,
20
22
  title,
21
- rounded
23
+ classes
22
24
  }) => {
23
25
  const [selection, setSelection] = useState();
24
- const colorPickerRef = useRef(null);
25
- const [showOptions, setShowOptions] = usePopup(colorPickerRef);
26
- const toggleOption = e => {
26
+ const [anchorEl, setAnchorEl] = useState(null);
27
+ const open = Boolean(anchorEl);
28
+ const pickerStyles = ColorPickerStyles();
29
+ const onOpen = e => {
30
+ e.preventDefault();
31
+ setAnchorEl(e.currentTarget);
27
32
  setSelection(editor.selection);
28
33
  selection && ReactEditor.focus(editor);
29
- setShowOptions(prev => !prev);
30
34
  };
31
35
  const handleFormSubmit = color => {
32
36
  if (!color) return;
@@ -35,57 +39,43 @@ const ColorPicker = ({
35
39
  format,
36
40
  value: color
37
41
  });
38
- setShowOptions(false);
39
42
  selection && ReactEditor.focus(editor);
43
+ handleClose();
40
44
  };
41
- const activeColor = showOptions ? DEFAULT_COLOR[format] : activeMark(editor, format);
42
- return /*#__PURE__*/_jsxs("div", {
43
- className: "",
44
- ref: colorPickerRef,
45
- style: {
46
- display: "flex",
47
- alignItems: "center",
48
- position: "relative",
49
- padding: rounded ? "6px" : "0px"
50
- },
51
- children: [rounded ? /*#__PURE__*/_jsx(Button, {
52
- style: {
53
- color: activeColor,
54
- opacity: "1",
55
- width: "24px",
56
- height: "24px",
57
- backgroundColor: activeColor,
58
- border: "1px solid #ccc",
59
- marginRight: "12px"
60
- },
61
- className: showOptions ? "clicked" : "",
62
- onClick: toggleOption,
63
- title: title
64
- }) : /*#__PURE__*/_jsx(Button, {
65
- style: {
66
- color: activeColor,
67
- opacity: "1"
68
- },
69
- className: showOptions ? "clicked" : "",
70
- onClick: toggleOption,
45
+ const onSelect = color => {
46
+ handleFormSubmit(color);
47
+ };
48
+ const handleClose = () => {
49
+ setAnchorEl(null);
50
+ };
51
+ const activeColor = activeMark(editor, format) || DEFAULT_COLOR[format];
52
+ const Logo = logo[format](activeColor);
53
+ return /*#__PURE__*/_jsxs(_Fragment, {
54
+ children: [/*#__PURE__*/_jsx(Tooltip, {
71
55
  title: title,
72
- children: logo[format](activeColor)
73
- }), showHex ? /*#__PURE__*/_jsx("div", {
74
- style: {
75
- display: "flex"
76
- },
56
+ arrow: true,
57
+ children: /*#__PURE__*/_jsx(IconButton, {
58
+ onClick: onOpen,
59
+ children: Logo
60
+ })
61
+ }), showHex ? /*#__PURE__*/_jsx(Box, {
62
+ sx: classes.hexStyle,
77
63
  children: activeColor
78
- }) : null, showOptions && /*#__PURE__*/_jsx("div", {
79
- style: {
80
- position: "fixed",
81
- top: 0,
82
- left: 0,
83
- right: 0,
84
- bottom: 0,
85
- margin: "auto",
86
- zIndex: 100,
87
- width: "300px",
88
- height: "300px"
64
+ }) : null, /*#__PURE__*/_jsx(ColorButtons, {
65
+ classes: pickerStyles,
66
+ onSelect: onSelect,
67
+ activeColor: activeColor
68
+ }), /*#__PURE__*/_jsx(Popover, {
69
+ open: open,
70
+ anchorEl: anchorEl,
71
+ onClose: handleClose,
72
+ anchorOrigin: {
73
+ vertical: "bottom",
74
+ horizontal: "center"
75
+ },
76
+ transformOrigin: {
77
+ vertical: "top",
78
+ horizontal: "center"
89
79
  },
90
80
  children: /*#__PURE__*/_jsx(ColorPickerTool, {
91
81
  gradient: true,
@@ -96,6 +86,7 @@ const ColorPicker = ({
96
86
  });
97
87
  };
98
88
  ColorPicker.defaultProps = {
99
- rounded: false
89
+ rounded: false,
90
+ classes: {}
100
91
  };
101
92
  export default ColorPicker;
@@ -0,0 +1,51 @@
1
+ const ColorPickerStyles = () => ({
2
+ colorButtons: {
3
+ "& .buttonsWrpr": {
4
+ display: "flex",
5
+ justifyCotnent: "center"
6
+ },
7
+ "& button": {
8
+ width: "24px",
9
+ height: "24px",
10
+ marginRight: "8px",
11
+ border: "1px solid #ccc"
12
+ }
13
+ },
14
+ colorButtonSingle: {
15
+ "&.active": {
16
+ "&:before": {
17
+ content: '" "',
18
+ position: "absolute",
19
+ top: "-5px",
20
+ left: "-5px",
21
+ width: "calc(100% + 4px)",
22
+ height: "calc(100% + 4px)",
23
+ border: "3px solid blue",
24
+ borderRadius: "50%"
25
+ }
26
+ }
27
+ },
28
+ colorButtonsInner: {
29
+ width: "100%",
30
+ padding: "4px",
31
+ display: "flex",
32
+ justifyCotnent: "center",
33
+ alignItems: "center",
34
+ flexDirection: "column",
35
+ "& .buttonsWrpr": {
36
+ display: "flex",
37
+ justifyCotnent: "center",
38
+ alignItems: "center"
39
+ },
40
+ ".more-btn-cbs": {
41
+ display: "none"
42
+ },
43
+ "& button": {
44
+ width: "24px",
45
+ height: "24px",
46
+ margin: "0px 4px",
47
+ border: "1px solid #ccc"
48
+ }
49
+ }
50
+ });
51
+ export default ColorPickerStyles;
@@ -1 +1 @@
1
- export const colors = ["#000000", "#e60000", "#ff9900", "#ffff00", "#008a00", "#0066cc", "#9933ff", "#ffffff", "#facccc", "#ffebcc", "#ffffcc", "#cce8cc", "#cce0f5", "#ebd6ff", "#bbbbbb", "#f06666", "#ffc266", "#ffff66", "#66b966", "#66a3e0", "#c285ff", "#888888", "#a10000", "#b26b00", "#b2b200", "#006100", "#0047b2", "#6b24b2", "#444444", "#5c0000", "#663d00", "#666600", "#003700", "#002966", "#3d1466"];
1
+ export const colors = ["#000000", "#e60000", "#ff9900", "#ffff00", "#008a00", "#0066cc", "#9933ff", "#ffffff", "#facccc", "#ffebcc", "#ffffcc", "#cce8cc", "#cce0f5", "#ebd6ff", "#bbbbbb", "#f06666", "#ffc266", "#ffff66", "#66b966", "#66a3e0", "#c285ff", "#888888", "#a10000", "#b26b00", "#b2b200", "#006100", "#0047b2", "#6b24b2", "#444444", "#5c0000", "#663d00", "#666600", "#003700", "#002966", "#3d1466", "linear-gradient(90deg, #3F2AB7 12.5%, #0DC9B5 100%)", "linear-gradient(95.19deg, #A831E7 4.17%, #F05339 88.89%)"];
@@ -1,50 +1,47 @@
1
- import React, { useRef, useState } from "react";
1
+ import React, { useState } from "react";
2
2
  import { Transforms } from "slate";
3
3
  import { ReactEditor } from "slate-react";
4
- import { Grid, Dialog, DialogTitle, DialogContent, DialogActions, Button, TextField, IconButton, Typography, Tooltip } from "@mui/material";
5
- import CloseIcon from "@mui/icons-material/Close";
6
4
  import Icon from "../../common/Icon";
7
5
  import { isBlockActive } from "../../utils/SlateUtilityFunctions";
8
- import usePopup from "../../utils/customHooks/usePopup";
9
6
  import { insertEmbed } from "../../utils/embed";
10
- import Uploader from "../../common/Uploader";
11
7
  import "./Embed.css";
12
- // import commonStyle from "../../commonStyle";
13
- // import styled from "@emotion/styled";
8
+ import ToolbarIcon from "../../common/ToolbarIcon";
9
+ import ImageSelector from "../../common/ImageSelector/ImageSelector";
14
10
  import { jsx as _jsx } from "react/jsx-runtime";
15
- import { jsxs as _jsxs } from "react/jsx-runtime";
16
11
  import { Fragment as _Fragment } from "react/jsx-runtime";
12
+ import { jsxs as _jsxs } from "react/jsx-runtime";
17
13
  const EMBED_LABEL = {
18
14
  image: "Image",
19
- video: "Video or Embed"
15
+ video: "Video",
16
+ embed: "Embed"
20
17
  };
21
18
  const Embed = ({
22
19
  editor,
23
20
  format,
21
+ lbT,
24
22
  customProps,
25
- className
23
+ icoBtnType
26
24
  }) => {
27
- const urlInputRef = useRef();
28
25
  const [open, setOpen] = useState(false);
29
- const [showInput, setShowInput] = usePopup(urlInputRef);
30
26
  const [formData, setFormData] = useState({
31
27
  url: "",
32
- alt: ""
28
+ alt: "",
29
+ images: []
33
30
  });
34
31
  const [selection, setSelection] = useState();
35
- const handleFormSubmit = () => {
36
- if (formData?.url) {
32
+ const handleFormSubmit = fd => {
33
+ if (fd?.url || fd?.images.length > 0) {
37
34
  selection && Transforms.select(editor, selection);
38
35
  selection && ReactEditor.focus(editor);
39
36
  insertEmbed(editor, {
40
- ...formData
37
+ ...fd
41
38
  }, format);
42
- setShowInput(false);
43
39
  setFormData({
44
40
  url: "",
45
41
  alt: ""
46
42
  });
47
43
  }
44
+ handleClose();
48
45
  };
49
46
  const onToggle = e => {
50
47
  e.preventDefault();
@@ -52,122 +49,34 @@ const Embed = ({
52
49
  selection && ReactEditor.focus(editor);
53
50
  setOpen(true);
54
51
  };
55
- const onSave = () => {
56
- handleFormSubmit();
57
- setOpen(false);
58
- };
59
- const onClose = () => {
52
+ const handleClose = () => {
60
53
  setOpen(false);
61
54
  };
62
- const onUploaded = uploadedData => {
63
- setFormData({
64
- ...formData,
65
- ...uploadedData
66
- });
67
- };
68
- const handleChange = e => {
69
- setFormData({
55
+ const onSelectImage = img => {
56
+ const fd = {
70
57
  ...formData,
71
- [e.target.name]: e.target.value
58
+ url: img
59
+ };
60
+ setFormData(fd);
61
+ handleFormSubmit({
62
+ ...fd
72
63
  });
73
64
  };
74
- const imageURL = formData?.url === "none" || !formData?.url ? "" : formData?.url;
75
65
  return /*#__PURE__*/_jsxs(_Fragment, {
76
- children: [/*#__PURE__*/_jsx(Tooltip, {
77
- title: EMBED_LABEL[format],
78
- arrow: true,
79
- children: /*#__PURE__*/_jsx(IconButton, {
80
- className: isBlockActive(editor, format) ? "active" : "",
81
- style: {
82
- border: showInput ? "1px solid lightgray" : "",
83
- borderBottom: "none"
84
- },
85
- format: format,
86
- onClick: onToggle,
87
- children: /*#__PURE__*/_jsx(Icon, {
88
- icon: format
89
- })
90
- })
91
- }), /*#__PURE__*/_jsx(Dialog, {
66
+ children: [/*#__PURE__*/_jsx(ToolbarIcon, {
67
+ className: isBlockActive(editor, format) ? "active" : "",
68
+ title: EMBED_LABEL[lbT || format],
69
+ onClick: onToggle,
70
+ icon: /*#__PURE__*/_jsx(Icon, {
71
+ icon: lbT || format
72
+ }),
73
+ icoBtnType: icoBtnType
74
+ }), /*#__PURE__*/_jsx(ImageSelector, {
92
75
  open: open,
93
- fullWidth: true,
94
- className: `dialogComp`,
95
- children: /*#__PURE__*/_jsxs(Grid, {
96
- item: true,
97
- xs: 12,
98
- sx: {
99
- p: 3
100
- },
101
- children: [/*#__PURE__*/_jsx(DialogTitle, {
102
- sx: {
103
- p: 0,
104
- pb: 2
105
- },
106
- children: /*#__PURE__*/_jsxs(Grid, {
107
- container: true,
108
- justifyContent: "space-between",
109
- children: [/*#__PURE__*/_jsx(Typography, {
110
- variant: "h6",
111
- className: "popupTitle",
112
- color: "primary",
113
- children: EMBED_LABEL[format] || "Embed"
114
- }), /*#__PURE__*/_jsx(Grid, {
115
- style: {
116
- display: "flex"
117
- },
118
- children: /*#__PURE__*/_jsx(IconButton, {
119
- onClick: onClose,
120
- className: "close-popupbtn",
121
- children: /*#__PURE__*/_jsx(CloseIcon, {})
122
- })
123
- })]
124
- })
125
- }), /*#__PURE__*/_jsx(DialogContent, {
126
- sx: {
127
- p: 0
128
- },
129
- children: /*#__PURE__*/_jsxs(Grid, {
130
- container: true,
131
- children: [format === "image" ? /*#__PURE__*/_jsx(Uploader, {
132
- value: formData,
133
- data: {
134
- key: "url"
135
- },
136
- customProps: customProps,
137
- onUploaded: onUploaded,
138
- disableUpload: format === "video"
139
- }) : null, /*#__PURE__*/_jsx(Grid, {
140
- item: true,
141
- xs: 12,
142
- style: {
143
- paddingTop: "12px"
144
- },
145
- children: /*#__PURE__*/_jsx(TextField, {
146
- name: "url",
147
- placeholder: `Add ${format} url here`,
148
- size: "small",
149
- fullWidth: true,
150
- onChange: handleChange,
151
- value: imageURL || ""
152
- })
153
- })]
154
- })
155
- }), /*#__PURE__*/_jsxs(DialogActions, {
156
- sx: {
157
- p: 0,
158
- pt: 2
159
- },
160
- children: [/*#__PURE__*/_jsx(Button, {
161
- onClick: onClose,
162
- className: "secondaryBtn",
163
- children: "Cancel"
164
- }), /*#__PURE__*/_jsx(Button, {
165
- onClick: onSave,
166
- className: "primaryBtn",
167
- children: "Save"
168
- })]
169
- })]
170
- })
76
+ onClose: handleClose,
77
+ customProps: customProps,
78
+ onSelectImage: onSelectImage,
79
+ title: EMBED_LABEL[lbT || format]
171
80
  })]
172
81
  });
173
82
  };
@@ -1,11 +1,13 @@
1
1
  import React, { useEffect, useState } from "react";
2
- import { useSlateStatic, useSelected, ReactEditor } from "slate-react";
2
+ import { useSlateStatic, ReactEditor } from "slate-react";
3
3
  import { Node, Transforms, Editor } from "slate";
4
4
  import AspectRatioIcon from "@mui/icons-material/AspectRatio";
5
5
  import useResize from "../../utils/customHooks/useResize";
6
6
  import EmbedPopup from "./EmbedPopup";
7
7
  import { IconButton, Tooltip } from "@mui/material";
8
8
  import { GridSettingsIcon } from "../../common/iconslist";
9
+ import QuiltedImageList from "../../common/ImageList";
10
+ import { useEditorContext } from "../../hooks/useMouseMove";
9
11
  import { jsx as _jsx } from "react/jsx-runtime";
10
12
  import { jsxs as _jsxs } from "react/jsx-runtime";
11
13
  const Image = ({
@@ -17,11 +19,14 @@ const Image = ({
17
19
  const {
18
20
  url,
19
21
  alt,
22
+ images = [],
20
23
  bannerSpacing,
21
24
  alignment,
22
25
  bgColor,
23
26
  borderColor,
24
- borderRadius
27
+ borderRadius,
28
+ cols,
29
+ rowHeight
25
30
  } = element;
26
31
  const {
27
32
  readOnly
@@ -43,7 +48,7 @@ const Image = ({
43
48
  horizantal
44
49
  } = alignment || {};
45
50
  const editor = useSlateStatic();
46
- const selected = useSelected();
51
+ // const selected = useSelected();
47
52
  const [parentDOM, setParentDOM] = useState(null);
48
53
  const [openSetttings, setOpenSettings] = useState(false);
49
54
  const [size, onMouseDown, resizing, onLoad] = useResize({
@@ -53,8 +58,12 @@ const Image = ({
53
58
  const arr = Array.from(Node.elements(editor));
54
59
  const ele = arr.find(([elem]) => element === elem);
55
60
  const path = ReactEditor.findPath(editor, element);
61
+ const {
62
+ hoverPath
63
+ } = useEditorContext();
64
+ const selected = hoverPath === path.join(",");
56
65
  useEffect(() => {
57
- if (editor && ele[1] !== undefined) {
66
+ if (editor && ele && ele[1] !== undefined) {
58
67
  const dom = ReactEditor.toDOMNode(editor, Node.get(editor, ele[1]));
59
68
  setParentDOM(dom);
60
69
  onLoad(element?.size || {});
@@ -125,6 +134,7 @@ const Image = ({
125
134
  }) : null;
126
135
  };
127
136
  const totalMinus = (parseInt(left) || 0) + (parseInt(right) || 0);
137
+ const width = resizing ? `${size.width}px` : `${size.widthInPercent}%`;
128
138
  return /*#__PURE__*/_jsxs("div", {
129
139
  ...attributes,
130
140
  className: "embed has-hover",
@@ -142,6 +152,7 @@ const Image = ({
142
152
  border: `1px solid ${borderColor}`
143
153
  },
144
154
  ...element.attr,
155
+ "data-path": path.join(","),
145
156
  children: [openSetttings ? /*#__PURE__*/_jsx(EmbedPopup, {
146
157
  element: element,
147
158
  onSave: onSave,
@@ -153,16 +164,22 @@ const Image = ({
153
164
  contentEditable: false,
154
165
  style: {
155
166
  position: "relative",
156
- width: size.widthInPercent ? `${size.widthInPercent}%` : `${size.width}px`,
167
+ width: `${width}`,
157
168
  height: `${size.height}px`
158
169
  },
159
- children: [!readOnly && /*#__PURE__*/_jsx(ToolBar, {}), /*#__PURE__*/_jsx("img", {
170
+ children: [!readOnly && /*#__PURE__*/_jsx(ToolBar, {}), images?.length > 1 ? /*#__PURE__*/_jsx(QuiltedImageList, {
171
+ itemData: images || [],
172
+ readOnly: true,
173
+ rowHeight: rowHeight,
174
+ cols: cols
175
+ }) : /*#__PURE__*/_jsx("img", {
160
176
  style: {
161
177
  borderRadius: `${topLeft}px ${topRight}px ${bottomLeft}px ${bottomRight}px`
162
178
  },
163
179
  alt: alt,
164
180
  src: url,
165
- onClick: handleImageClick
181
+ onClick: handleImageClick,
182
+ "data-path": path.join(",")
166
183
  }), selected && !readOnly && /*#__PURE__*/_jsx(IconButton, {
167
184
  onPointerDown: onMouseDown,
168
185
  style: {