@flozy/editor 1.3.0 → 1.3.2
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/CommonEditor.js +14 -21
- package/dist/Editor/DialogWrapper.js +5 -0
- package/dist/Editor/Elements/Accordion/AccordionButton.js +10 -7
- package/dist/Editor/Elements/AppHeader/AppHeaderButton.js +7 -4
- package/dist/Editor/Elements/Button/ButtonToolIcon.js +7 -4
- package/dist/Editor/Elements/Carousel/Carousel.js +6 -2
- package/dist/Editor/Elements/Carousel/CarouselButton.js +7 -4
- package/dist/Editor/Elements/Color Picker/ColorPicker.js +3 -1
- package/dist/Editor/Elements/Embed/Embed.css +2 -2
- package/dist/Editor/Elements/Embed/Embed.js +17 -12
- package/dist/Editor/Elements/Embed/Image.js +11 -11
- package/dist/Editor/Elements/Embed/Video.js +13 -10
- package/dist/Editor/Elements/Grid/Grid.js +14 -1
- package/dist/Editor/Elements/Grid/GridButton.js +47 -7
- package/dist/Editor/Elements/Grid/GridItem.js +16 -26
- package/dist/Editor/Elements/Grid/templates/full_grid.png +0 -0
- package/dist/Editor/Elements/Grid/templates/index.js +5 -0
- package/dist/Editor/Elements/Link/LinkButton.js +12 -8
- package/dist/Editor/Elements/NewLine/NewLineButton.js +12 -9
- package/dist/Editor/Elements/PageSettings/PageSettingsButton.js +7 -4
- package/dist/Editor/Elements/Signature/SignatureButton.js +7 -4
- package/dist/Editor/Elements/Signature/SignaturePopup.js +2 -4
- package/dist/Editor/Elements/Table/Table.js +4 -1
- package/dist/Editor/Elements/Table/TableCell.js +17 -9
- package/dist/Editor/Elements/Table/TableSelector.js +12 -9
- package/dist/Editor/Toolbar/FormatTools/BlockButton.js +3 -1
- package/dist/Editor/Toolbar/FormatTools/MarkButton.js +3 -1
- package/dist/Editor/Toolbar/Toolbar.js +18 -13
- package/dist/Editor/Toolbar/toolbarGroups.js +34 -17
- package/dist/Editor/common/Button.js +10 -6
- package/dist/Editor/common/ColorPickerButton.js +6 -1
- package/dist/Editor/common/Icon.js +1 -1
- package/dist/Editor/common/StyleBuilder/fieldTypes/bannerSpacing.js +20 -20
- package/dist/Editor/common/StyleBuilder/fieldTypes/borderRadius.js +19 -19
- package/dist/Editor/common/Uploader.js +4 -3
- package/dist/Editor/plugins/withEmbeds.js +0 -1
- package/package.json +1 -1
|
@@ -16,7 +16,6 @@ import "./Editor.css";
|
|
|
16
16
|
import { serialize } from "./utils/serializer";
|
|
17
17
|
import { getThumbnailImage } from "./helper";
|
|
18
18
|
import PopupTool from "./Toolbar/PopupTool";
|
|
19
|
-
import { Button } from "@mui/material";
|
|
20
19
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
21
20
|
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
22
21
|
const PREVIEW_IMAGE_HIDE_CLASS = ["grid-container-toolbar", "grid-item-toolbar", "element-toolbar"];
|
|
@@ -57,7 +56,9 @@ const CommonEditor = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
57
56
|
h: null
|
|
58
57
|
});
|
|
59
58
|
const {
|
|
60
|
-
defaultBG
|
|
59
|
+
defaultBG,
|
|
60
|
+
needDotsBG,
|
|
61
|
+
footer
|
|
61
62
|
} = otherProps || {};
|
|
62
63
|
const editor = useMemo(() => {
|
|
63
64
|
if (collaborativeEditor) return collaborativeEditor;
|
|
@@ -198,12 +199,6 @@ const CommonEditor = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
198
199
|
...partialState
|
|
199
200
|
}));
|
|
200
201
|
};
|
|
201
|
-
const handleChangeViewport = (w, h) => () => {
|
|
202
|
-
setViewport({
|
|
203
|
-
w,
|
|
204
|
-
h
|
|
205
|
-
});
|
|
206
|
-
};
|
|
207
202
|
const onKeyDown = useCallback(event => {
|
|
208
203
|
const isMetaKey = event.metaKey && event.keyCode >= 65 && event.keyCode <= 90;
|
|
209
204
|
const isCtrlKey = event.ctrlKey || isMetaKey;
|
|
@@ -224,27 +219,25 @@ const CommonEditor = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
224
219
|
}
|
|
225
220
|
}, [chars, editor, target, mentions, setMentions]);
|
|
226
221
|
const Overlay = collaborativeEditor && !isReadOnly ? RemoteCursorOverlay : React.Fragment;
|
|
222
|
+
const dotBg = needDotsBG ? {
|
|
223
|
+
background: "white",
|
|
224
|
+
backgroundImage: "radial-gradient(#CCC 2px, transparent 0)",
|
|
225
|
+
backgroundSize: "40px 40px",
|
|
226
|
+
backgroundPosition: "-19px -19px"
|
|
227
|
+
} : {};
|
|
227
228
|
return /*#__PURE__*/_jsx(DialogWrapper, {
|
|
228
229
|
...props,
|
|
229
230
|
fullScreen: fullScreen,
|
|
230
|
-
|
|
231
|
+
footer: footer || "",
|
|
232
|
+
children: /*#__PURE__*/_jsx("div", {
|
|
231
233
|
className: "editor-t-wrapper",
|
|
232
234
|
style: {
|
|
233
235
|
display: "flex",
|
|
234
236
|
flexDirection: "column",
|
|
235
237
|
padding: "0 8px",
|
|
236
|
-
|
|
237
|
-
backgroundImage: "radial-gradient(#CCC 2px, transparent 0)",
|
|
238
|
-
backgroundSize: "40px 40px",
|
|
239
|
-
backgroundPosition: "-19px -19px"
|
|
238
|
+
...dotBg
|
|
240
239
|
},
|
|
241
|
-
children:
|
|
242
|
-
onClick: handleChangeViewport(414, 736),
|
|
243
|
-
children: "414 x 736"
|
|
244
|
-
}), /*#__PURE__*/_jsx(Button, {
|
|
245
|
-
onClick: handleChangeViewport(375, 812),
|
|
246
|
-
children: " 375 x 812"
|
|
247
|
-
}), /*#__PURE__*/_jsxs(Slate, {
|
|
240
|
+
children: /*#__PURE__*/_jsxs(Slate, {
|
|
248
241
|
editor: editor,
|
|
249
242
|
initialValue: value,
|
|
250
243
|
onChange: handleEditorChange,
|
|
@@ -287,7 +280,7 @@ const CommonEditor = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
287
280
|
...htmlAction,
|
|
288
281
|
handleCodeToText: handleCodeToText
|
|
289
282
|
})]
|
|
290
|
-
}, id)
|
|
283
|
+
}, id)
|
|
291
284
|
})
|
|
292
285
|
});
|
|
293
286
|
});
|
|
@@ -33,6 +33,11 @@ const DialogWrapper = props => {
|
|
|
33
33
|
}), /*#__PURE__*/_jsx(DialogContent, {
|
|
34
34
|
children: children
|
|
35
35
|
}), /*#__PURE__*/_jsx(DialogActions, {
|
|
36
|
+
style: {
|
|
37
|
+
justifyContent: "center",
|
|
38
|
+
color: "#64748B",
|
|
39
|
+
fontSize: "13px"
|
|
40
|
+
},
|
|
36
41
|
children: footer
|
|
37
42
|
})]
|
|
38
43
|
}) : children;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import { IconButton } from "@mui/material";
|
|
2
|
+
import { IconButton, Tooltip } from "@mui/material";
|
|
3
3
|
import { insertAccordion } from "../../utils/accordion";
|
|
4
4
|
import { AccordionIcon } from "../../common/iconslist";
|
|
5
5
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
@@ -10,13 +10,16 @@ const AccordionButton = props => {
|
|
|
10
10
|
const handleInsertAccordion = () => {
|
|
11
11
|
insertAccordion(editor);
|
|
12
12
|
};
|
|
13
|
-
return /*#__PURE__*/_jsx(
|
|
14
|
-
onClick: handleInsertAccordion,
|
|
13
|
+
return /*#__PURE__*/_jsx(Tooltip, {
|
|
15
14
|
title: "Accordion",
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
15
|
+
arrow: true,
|
|
16
|
+
children: /*#__PURE__*/_jsx(IconButton, {
|
|
17
|
+
onClick: handleInsertAccordion,
|
|
18
|
+
style: {
|
|
19
|
+
marginLeft: "0px"
|
|
20
|
+
},
|
|
21
|
+
children: /*#__PURE__*/_jsx(AccordionIcon, {})
|
|
22
|
+
})
|
|
20
23
|
});
|
|
21
24
|
};
|
|
22
25
|
export default AccordionButton;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import { IconButton } from "@mui/material";
|
|
2
|
+
import { IconButton, Tooltip } from "@mui/material";
|
|
3
3
|
import { insertAppHeader } from "../../utils/insertAppHeader";
|
|
4
4
|
import { AppHeader } from "../../common/iconslist";
|
|
5
5
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
@@ -10,10 +10,13 @@ const AppHeaderButton = props => {
|
|
|
10
10
|
const handleClick = () => {
|
|
11
11
|
insertAppHeader(editor, {});
|
|
12
12
|
};
|
|
13
|
-
return /*#__PURE__*/_jsx(
|
|
13
|
+
return /*#__PURE__*/_jsx(Tooltip, {
|
|
14
14
|
title: "App Header",
|
|
15
|
-
|
|
16
|
-
children: /*#__PURE__*/_jsx(
|
|
15
|
+
arrow: true,
|
|
16
|
+
children: /*#__PURE__*/_jsx(IconButton, {
|
|
17
|
+
onClick: handleClick,
|
|
18
|
+
children: /*#__PURE__*/_jsx(AppHeader, {})
|
|
19
|
+
})
|
|
17
20
|
});
|
|
18
21
|
};
|
|
19
22
|
export default AppHeaderButton;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import { IconButton } from "@mui/material";
|
|
2
|
+
import { IconButton, Tooltip } from "@mui/material";
|
|
3
3
|
import { insertButton } from "../../utils/button";
|
|
4
4
|
import { ButtonIcon } from "../../common/iconslist";
|
|
5
5
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
@@ -10,10 +10,13 @@ const ButtonToolIcon = props => {
|
|
|
10
10
|
const handleInsertButton = () => {
|
|
11
11
|
insertButton(editor);
|
|
12
12
|
};
|
|
13
|
-
return /*#__PURE__*/_jsx(
|
|
14
|
-
onClick: handleInsertButton,
|
|
13
|
+
return /*#__PURE__*/_jsx(Tooltip, {
|
|
15
14
|
title: "Button",
|
|
16
|
-
|
|
15
|
+
arrow: true,
|
|
16
|
+
children: /*#__PURE__*/_jsx(IconButton, {
|
|
17
|
+
onClick: handleInsertButton,
|
|
18
|
+
children: /*#__PURE__*/_jsx(ButtonIcon, {})
|
|
19
|
+
})
|
|
17
20
|
});
|
|
18
21
|
};
|
|
19
22
|
export default ButtonToolIcon;
|
|
@@ -20,8 +20,12 @@ const Carousel = props => {
|
|
|
20
20
|
const {
|
|
21
21
|
attributes,
|
|
22
22
|
children,
|
|
23
|
-
element
|
|
23
|
+
element,
|
|
24
|
+
customProps
|
|
24
25
|
} = props;
|
|
26
|
+
const {
|
|
27
|
+
readOnly
|
|
28
|
+
} = customProps;
|
|
25
29
|
const editor = useSlateStatic();
|
|
26
30
|
const selected = useSelected();
|
|
27
31
|
const [edit, setEdit] = useState(false);
|
|
@@ -91,7 +95,7 @@ const Carousel = props => {
|
|
|
91
95
|
}) : /*#__PURE__*/_jsx(Slider, {
|
|
92
96
|
...settings,
|
|
93
97
|
children: children
|
|
94
|
-
}, reload), /*#__PURE__*/_jsx(ToolBar, {})]
|
|
98
|
+
}, reload), !readOnly && /*#__PURE__*/_jsx(ToolBar, {})]
|
|
95
99
|
});
|
|
96
100
|
};
|
|
97
101
|
export default Carousel;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import { IconButton } from "@mui/material";
|
|
2
|
+
import { IconButton, Tooltip } from "@mui/material";
|
|
3
3
|
import { insertCarousel } from "../../utils/carousel";
|
|
4
4
|
import { Carousal } from "../../common/iconslist";
|
|
5
5
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
@@ -10,10 +10,13 @@ const CarouselButton = props => {
|
|
|
10
10
|
const handleClick = () => {
|
|
11
11
|
insertCarousel(editor);
|
|
12
12
|
};
|
|
13
|
-
return /*#__PURE__*/_jsx(
|
|
13
|
+
return /*#__PURE__*/_jsx(Tooltip, {
|
|
14
14
|
title: "Carousel",
|
|
15
|
-
|
|
16
|
-
children: /*#__PURE__*/_jsx(
|
|
15
|
+
arrow: true,
|
|
16
|
+
children: /*#__PURE__*/_jsx(IconButton, {
|
|
17
|
+
onClick: handleClick,
|
|
18
|
+
children: /*#__PURE__*/_jsx(Carousal, {})
|
|
19
|
+
})
|
|
17
20
|
});
|
|
18
21
|
};
|
|
19
22
|
export default CarouselButton;
|
|
@@ -18,7 +18,8 @@ const DEFAULT_COLOR = {
|
|
|
18
18
|
const ColorPicker = ({
|
|
19
19
|
format,
|
|
20
20
|
editor,
|
|
21
|
-
showHex
|
|
21
|
+
showHex,
|
|
22
|
+
title
|
|
22
23
|
}) => {
|
|
23
24
|
const [selection, setSelection] = useState();
|
|
24
25
|
const [hexValue, setHexValue] = useState("");
|
|
@@ -81,6 +82,7 @@ const ColorPicker = ({
|
|
|
81
82
|
},
|
|
82
83
|
className: showOptions ? "clicked" : "",
|
|
83
84
|
onClick: toggleOption,
|
|
85
|
+
title: title,
|
|
84
86
|
children: logo[format](activeColor)
|
|
85
87
|
}), showOptions && /*#__PURE__*/_jsxs(_Fragment, {
|
|
86
88
|
children: [/*#__PURE__*/_jsx("div", {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React, { useRef, 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 } from "@mui/material";
|
|
4
|
+
import { Grid, Dialog, DialogTitle, DialogContent, DialogActions, Button, TextField, IconButton, Typography, Tooltip } from "@mui/material";
|
|
5
5
|
import CloseIcon from "@mui/icons-material/Close";
|
|
6
6
|
import Icon from "../../common/Icon";
|
|
7
7
|
import { isBlockActive } from "../../utils/SlateUtilityFunctions";
|
|
@@ -73,16 +73,20 @@ const Embed = ({
|
|
|
73
73
|
};
|
|
74
74
|
const imageURL = formData?.url === "none" || !formData?.url ? "" : formData?.url;
|
|
75
75
|
return /*#__PURE__*/_jsxs(_Fragment, {
|
|
76
|
-
children: [/*#__PURE__*/_jsx(
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
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
|
+
})
|
|
86
90
|
})
|
|
87
91
|
}), /*#__PURE__*/_jsx(Dialog, {
|
|
88
92
|
open: open,
|
|
@@ -141,7 +145,8 @@ const Embed = ({
|
|
|
141
145
|
key: "url"
|
|
142
146
|
},
|
|
143
147
|
customProps: customProps,
|
|
144
|
-
onUploaded: onUploaded
|
|
148
|
+
onUploaded: onUploaded,
|
|
149
|
+
disableUpload: format === "video"
|
|
145
150
|
})]
|
|
146
151
|
})
|
|
147
152
|
}), /*#__PURE__*/_jsxs(DialogActions, {
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import React, { useEffect, useState } from "react";
|
|
2
2
|
import { useSlateStatic, useSelected, ReactEditor } from "slate-react";
|
|
3
|
-
import { Node, Transforms, Editor
|
|
4
|
-
import
|
|
3
|
+
import { Node, Transforms, Editor } from "slate";
|
|
4
|
+
import AspectRatioIcon from "@mui/icons-material/AspectRatio";
|
|
5
5
|
import useResize from "../../utils/customHooks/useResize";
|
|
6
6
|
import { insertImageText } from "../../utils/imageText";
|
|
7
7
|
import EmbedPopup from "./EmbedPopup";
|
|
8
|
+
import { IconButton } from "@mui/material";
|
|
8
9
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
9
10
|
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
10
11
|
const Image = ({
|
|
@@ -21,6 +22,9 @@ const Image = ({
|
|
|
21
22
|
bgColor,
|
|
22
23
|
borderColor
|
|
23
24
|
} = element;
|
|
25
|
+
const {
|
|
26
|
+
readOnly
|
|
27
|
+
} = customProps;
|
|
24
28
|
const {
|
|
25
29
|
left,
|
|
26
30
|
top,
|
|
@@ -123,7 +127,7 @@ const Image = ({
|
|
|
123
127
|
border: `1px solid ${borderColor}`
|
|
124
128
|
},
|
|
125
129
|
...element.attr,
|
|
126
|
-
children: [
|
|
130
|
+
children: [openSetttings ? /*#__PURE__*/_jsx(EmbedPopup, {
|
|
127
131
|
element: element,
|
|
128
132
|
onSave: onSave,
|
|
129
133
|
onClose: onClose,
|
|
@@ -135,22 +139,18 @@ const Image = ({
|
|
|
135
139
|
width: size.widthInPercent ? `${size.widthInPercent}%` : `${size.width}px`,
|
|
136
140
|
height: `${size.height}px`
|
|
137
141
|
},
|
|
138
|
-
children: [/*#__PURE__*/_jsx("img", {
|
|
142
|
+
children: [!readOnly && /*#__PURE__*/_jsx(ToolBar, {}), /*#__PURE__*/_jsx("img", {
|
|
139
143
|
alt: alt,
|
|
140
144
|
src: url,
|
|
141
145
|
onClick: handleImageClick
|
|
142
|
-
}), selected && /*#__PURE__*/_jsx(
|
|
146
|
+
}), selected && !readOnly && /*#__PURE__*/_jsx(IconButton, {
|
|
143
147
|
onPointerDown: onMouseDown,
|
|
144
148
|
style: {
|
|
145
|
-
width: "15px",
|
|
146
|
-
height: "15px",
|
|
147
149
|
opacity: 1,
|
|
148
|
-
background: "
|
|
150
|
+
background: "#FFF"
|
|
149
151
|
},
|
|
150
152
|
className: "resize",
|
|
151
|
-
children: /*#__PURE__*/_jsx(
|
|
152
|
-
icon: "resize"
|
|
153
|
-
})
|
|
153
|
+
children: /*#__PURE__*/_jsx(AspectRatioIcon, {})
|
|
154
154
|
})]
|
|
155
155
|
}), children]
|
|
156
156
|
});
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import React, { useState, useEffect } from "react";
|
|
2
2
|
import { useSelected, useFocused, useSlateStatic, ReactEditor } from "slate-react";
|
|
3
3
|
import { Node, Transforms } from "slate";
|
|
4
|
+
import AspectRatioIcon from "@mui/icons-material/AspectRatio";
|
|
4
5
|
import Icon from "../../common/Icon";
|
|
5
6
|
import useResize from "../../utils/customHooks/useResize";
|
|
7
|
+
import { IconButton } from "@mui/material";
|
|
6
8
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
7
9
|
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
8
10
|
const Video = ({
|
|
@@ -70,22 +72,23 @@ const Video = ({
|
|
|
70
72
|
children: /*#__PURE__*/_jsx(Icon, {
|
|
71
73
|
icon: "videoPlayer"
|
|
72
74
|
})
|
|
73
|
-
}) : /*#__PURE__*/_jsx("
|
|
75
|
+
}) : /*#__PURE__*/_jsx("video", {
|
|
76
|
+
style: {
|
|
77
|
+
border: "none",
|
|
78
|
+
width: "100%",
|
|
79
|
+
height: "100%"
|
|
80
|
+
},
|
|
74
81
|
src: url,
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
}), selected && /*#__PURE__*/_jsx(
|
|
82
|
+
title: alt,
|
|
83
|
+
controls: true
|
|
84
|
+
}), selected && /*#__PURE__*/_jsx(IconButton, {
|
|
78
85
|
onPointerDown: onMouseDown,
|
|
79
86
|
style: {
|
|
80
|
-
width: "15px",
|
|
81
|
-
height: "15px",
|
|
82
87
|
opacity: 1,
|
|
83
|
-
background: "
|
|
88
|
+
background: "#FFF"
|
|
84
89
|
},
|
|
85
90
|
className: "resize",
|
|
86
|
-
children: /*#__PURE__*/_jsx(
|
|
87
|
-
icon: "resize"
|
|
88
|
-
})
|
|
91
|
+
children: /*#__PURE__*/_jsx(AspectRatioIcon, {})
|
|
89
92
|
})]
|
|
90
93
|
}), children]
|
|
91
94
|
});
|
|
@@ -12,6 +12,9 @@ const Grid = props => {
|
|
|
12
12
|
element,
|
|
13
13
|
customProps
|
|
14
14
|
} = props;
|
|
15
|
+
const {
|
|
16
|
+
readOnly
|
|
17
|
+
} = customProps;
|
|
15
18
|
const [openSetttings, setOpenSettings] = useState(false);
|
|
16
19
|
const {
|
|
17
20
|
grid,
|
|
@@ -76,6 +79,13 @@ const Grid = props => {
|
|
|
76
79
|
const onClose = () => {
|
|
77
80
|
setOpenSettings(false);
|
|
78
81
|
};
|
|
82
|
+
const onDelete = () => {
|
|
83
|
+
if (path) {
|
|
84
|
+
Transforms.removeNodes(editor, {
|
|
85
|
+
at: path
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
};
|
|
79
89
|
const GridToolBar = () => {
|
|
80
90
|
return selected ? /*#__PURE__*/_jsxs("div", {
|
|
81
91
|
className: "grid-container-toolbar",
|
|
@@ -83,6 +93,9 @@ const Grid = props => {
|
|
|
83
93
|
children: [/*#__PURE__*/_jsx("button", {
|
|
84
94
|
onClick: onSettings,
|
|
85
95
|
children: "Settings"
|
|
96
|
+
}), /*#__PURE__*/_jsx("button", {
|
|
97
|
+
onClick: onDelete,
|
|
98
|
+
children: "Delete"
|
|
86
99
|
}), /*#__PURE__*/_jsx("button", {
|
|
87
100
|
onClick: onAddGridItem,
|
|
88
101
|
children: "+ Add Item"
|
|
@@ -103,7 +116,7 @@ const Grid = props => {
|
|
|
103
116
|
backgroundImage: backgroundImage ? `url(${backgroundImage})` : "none",
|
|
104
117
|
border: `1px solid ${borderColor}`
|
|
105
118
|
},
|
|
106
|
-
children: [/*#__PURE__*/_jsx(GridToolBar, {}), openSetttings ? /*#__PURE__*/_jsx(GridPopup, {
|
|
119
|
+
children: [!readOnly && /*#__PURE__*/_jsx(GridToolBar, {}), openSetttings ? /*#__PURE__*/_jsx(GridPopup, {
|
|
107
120
|
element: element,
|
|
108
121
|
onSave: onSave,
|
|
109
122
|
onClose: onClose,
|
|
@@ -1,19 +1,59 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import { IconButton } from "@mui/material";
|
|
1
|
+
import React, { useState } from "react";
|
|
2
|
+
import { Dialog, DialogContent, DialogTitle, IconButton, Tooltip } from "@mui/material";
|
|
3
3
|
import { insertGrid } from "../../utils/grid";
|
|
4
4
|
import { GridIcon } from "../../common/iconslist";
|
|
5
|
+
import { ImageList, ImageListItem } from "@mui/material";
|
|
6
|
+
import GRID_TEMPLATES from "./templates";
|
|
5
7
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
8
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
9
|
+
import { Fragment as _Fragment } from "react/jsx-runtime";
|
|
6
10
|
const GridButton = props => {
|
|
7
11
|
const {
|
|
8
12
|
editor
|
|
9
13
|
} = props;
|
|
10
|
-
const
|
|
14
|
+
const [open, setOpen] = useState(false);
|
|
15
|
+
const onButtonClick = () => {
|
|
16
|
+
setOpen(true);
|
|
17
|
+
};
|
|
18
|
+
const handleInsertGrid = () => () => {
|
|
11
19
|
insertGrid(editor);
|
|
20
|
+
handleClose();
|
|
21
|
+
};
|
|
22
|
+
const handleClose = () => {
|
|
23
|
+
setOpen(false);
|
|
12
24
|
};
|
|
13
|
-
return /*#__PURE__*/
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
25
|
+
return /*#__PURE__*/_jsxs(_Fragment, {
|
|
26
|
+
children: [/*#__PURE__*/_jsx(Tooltip, {
|
|
27
|
+
title: "Grid",
|
|
28
|
+
arrow: true,
|
|
29
|
+
children: /*#__PURE__*/_jsx(IconButton, {
|
|
30
|
+
onClick: onButtonClick,
|
|
31
|
+
children: /*#__PURE__*/_jsx(GridIcon, {})
|
|
32
|
+
})
|
|
33
|
+
}), /*#__PURE__*/_jsxs(Dialog, {
|
|
34
|
+
open: open,
|
|
35
|
+
onClose: handleClose,
|
|
36
|
+
fullWidth: true,
|
|
37
|
+
children: [/*#__PURE__*/_jsx(DialogTitle, {
|
|
38
|
+
children: "Templates"
|
|
39
|
+
}), /*#__PURE__*/_jsx(DialogContent, {
|
|
40
|
+
children: /*#__PURE__*/_jsx(ImageList, {
|
|
41
|
+
variant: "quilted",
|
|
42
|
+
cols: 1,
|
|
43
|
+
children: GRID_TEMPLATES.map(item => {
|
|
44
|
+
return /*#__PURE__*/_jsx(ImageListItem, {
|
|
45
|
+
onClick: handleInsertGrid(item),
|
|
46
|
+
children: /*#__PURE__*/_jsx("img", {
|
|
47
|
+
src: item.img,
|
|
48
|
+
alt: item.title,
|
|
49
|
+
width: "auto",
|
|
50
|
+
height: "250px"
|
|
51
|
+
})
|
|
52
|
+
}, item.img);
|
|
53
|
+
})
|
|
54
|
+
})
|
|
55
|
+
})]
|
|
56
|
+
})]
|
|
17
57
|
});
|
|
18
58
|
};
|
|
19
59
|
export default GridButton;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React, { useState } from "react";
|
|
2
|
-
import { Transforms
|
|
2
|
+
import { Transforms } from "slate";
|
|
3
3
|
import { useSelected, useSlateStatic, ReactEditor } from "slate-react";
|
|
4
4
|
import GridItemPopup from "./GridItemPopup";
|
|
5
5
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
@@ -8,8 +8,12 @@ const GridItem = props => {
|
|
|
8
8
|
const {
|
|
9
9
|
attributes,
|
|
10
10
|
children,
|
|
11
|
-
element
|
|
11
|
+
element,
|
|
12
|
+
customProps
|
|
12
13
|
} = props;
|
|
14
|
+
const {
|
|
15
|
+
readOnly
|
|
16
|
+
} = customProps;
|
|
13
17
|
const [openSetttings, setOpenSettings] = useState(false);
|
|
14
18
|
const {
|
|
15
19
|
grid,
|
|
@@ -31,24 +35,6 @@ const GridItem = props => {
|
|
|
31
35
|
const selected = useSelected();
|
|
32
36
|
const itemWidth = (grid || 6) / 12 * 100;
|
|
33
37
|
const path = ReactEditor.findPath(editor, element);
|
|
34
|
-
const onItemSizeDecrease = () => {
|
|
35
|
-
Transforms.setNodes(editor, {
|
|
36
|
-
grid: grid <= 1 ? 1 : grid - 1
|
|
37
|
-
}, {
|
|
38
|
-
match: node => {
|
|
39
|
-
return Element.matches(node, element);
|
|
40
|
-
}
|
|
41
|
-
});
|
|
42
|
-
};
|
|
43
|
-
const onItemSizeIncrease = () => {
|
|
44
|
-
Transforms.setNodes(editor, {
|
|
45
|
-
grid: grid >= 12 ? 12 : grid + 1
|
|
46
|
-
}, {
|
|
47
|
-
match: node => {
|
|
48
|
-
return Element.matches(node, element);
|
|
49
|
-
}
|
|
50
|
-
});
|
|
51
|
-
};
|
|
52
38
|
const GridItemToolbar = () => {
|
|
53
39
|
return selected ? /*#__PURE__*/_jsxs("div", {
|
|
54
40
|
contentEditable: false,
|
|
@@ -60,11 +46,8 @@ const GridItem = props => {
|
|
|
60
46
|
onClick: onSettings,
|
|
61
47
|
children: "Settings"
|
|
62
48
|
}), /*#__PURE__*/_jsx("button", {
|
|
63
|
-
onClick:
|
|
64
|
-
children: "
|
|
65
|
-
}), /*#__PURE__*/_jsx("button", {
|
|
66
|
-
onClick: onItemSizeIncrease,
|
|
67
|
-
children: "+"
|
|
49
|
+
onClick: onDelete,
|
|
50
|
+
children: "Delete"
|
|
68
51
|
})]
|
|
69
52
|
}) : null;
|
|
70
53
|
};
|
|
@@ -86,6 +69,13 @@ const GridItem = props => {
|
|
|
86
69
|
const onClose = () => {
|
|
87
70
|
setOpenSettings(false);
|
|
88
71
|
};
|
|
72
|
+
const onDelete = () => {
|
|
73
|
+
if (path) {
|
|
74
|
+
Transforms.removeNodes(editor, {
|
|
75
|
+
at: path
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
};
|
|
89
79
|
return /*#__PURE__*/_jsxs("div", {
|
|
90
80
|
className: `grid-item xs-${grid}`,
|
|
91
81
|
...attributes,
|
|
@@ -102,7 +92,7 @@ const GridItem = props => {
|
|
|
102
92
|
width: `${itemWidth}%`,
|
|
103
93
|
margin: "0px"
|
|
104
94
|
},
|
|
105
|
-
children: [children, /*#__PURE__*/_jsx(GridItemToolbar, {}), openSetttings ? /*#__PURE__*/_jsx(GridItemPopup, {
|
|
95
|
+
children: [children, !readOnly && /*#__PURE__*/_jsx(GridItemToolbar, {}), openSetttings ? /*#__PURE__*/_jsx(GridItemPopup, {
|
|
106
96
|
element: element,
|
|
107
97
|
onSave: onSave,
|
|
108
98
|
onClose: onClose
|
|
Binary file
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useRef, useState } from "react";
|
|
2
2
|
import { Transforms } from "slate";
|
|
3
|
-
import { Dialog, DialogActions, DialogContent, DialogTitle, FormControl, FormControlLabel, Grid, TextField, Button, IconButton, Typography, Checkbox
|
|
3
|
+
import { Dialog, DialogActions, DialogContent, DialogTitle, FormControl, FormControlLabel, Grid, TextField, Button, IconButton, Typography, Checkbox, Tooltip
|
|
4
4
|
// styled,
|
|
5
5
|
} from "@mui/material";
|
|
6
6
|
// import { styled } from "@mui/material/styles";
|
|
@@ -49,13 +49,17 @@ const LinkButton = props => {
|
|
|
49
49
|
return /*#__PURE__*/_jsxs("div", {
|
|
50
50
|
ref: linkInputRef,
|
|
51
51
|
className: "popup-wrapper1",
|
|
52
|
-
children: [/*#__PURE__*/_jsx(
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
52
|
+
children: [/*#__PURE__*/_jsx(Tooltip, {
|
|
53
|
+
title: "Link",
|
|
54
|
+
arrow: true,
|
|
55
|
+
children: /*#__PURE__*/_jsx(IconButton, {
|
|
56
|
+
className: showInput ? "clicked" : "",
|
|
57
|
+
active: isBlockActive(editor, "link") ? "active" : "",
|
|
58
|
+
format: "link",
|
|
59
|
+
onClick: toggleLink,
|
|
60
|
+
children: /*#__PURE__*/_jsx(Icon, {
|
|
61
|
+
icon: "link"
|
|
62
|
+
})
|
|
59
63
|
})
|
|
60
64
|
}), showInput && /*#__PURE__*/_jsx(Dialog, {
|
|
61
65
|
open: true,
|