@flozy/editor 5.1.7 → 5.1.9
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/Elements/Divider/Divider.js +1 -1
- package/dist/Editor/Elements/Embed/Image.js +11 -7
- package/dist/Editor/Elements/Grid/GridItem.js +3 -0
- package/dist/Editor/Elements/Grid/Styles.js +6 -0
- package/dist/Editor/Elements/Table/Styles.js +77 -59
- package/dist/Editor/Elements/Table/Table.js +51 -28
- package/dist/Editor/Elements/Table/TableCell.js +4 -1
- package/dist/Editor/hooks/useTable.js +18 -6
- package/dist/Editor/plugins/withHTML.js +42 -2
- package/dist/Editor/utils/customHooks/useResize.js +7 -4
- package/dist/Editor/utils/customHooks/useTableResize.js +6 -2
- package/dist/Editor/utils/helper.js +3 -0
- package/package.json +1 -1
|
@@ -4,7 +4,7 @@ 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
|
-
import { IconButton, Tooltip, Box, useTheme } from "@mui/material";
|
|
7
|
+
import { IconButton, Tooltip, Box, useTheme, Popper } from "@mui/material";
|
|
8
8
|
import { GridSettingsIcon, LinkIcon } from "../../common/iconslist";
|
|
9
9
|
import { useEditorContext } from "../../hooks/useMouseMove";
|
|
10
10
|
import { getTRBLBreakPoints, getBreakPointsValue, groupByBreakpoint } from "../../helper/theme";
|
|
@@ -19,15 +19,15 @@ import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
19
19
|
const ToolBar = ({
|
|
20
20
|
isEmpty,
|
|
21
21
|
onSettings,
|
|
22
|
-
setOpenNav
|
|
22
|
+
setOpenNav,
|
|
23
|
+
topM
|
|
23
24
|
}) => {
|
|
24
25
|
return !isEmpty ? /*#__PURE__*/_jsxs("div", {
|
|
25
26
|
className: "element-toolbar visible-on-hover",
|
|
26
27
|
contentEditable: false,
|
|
27
28
|
style: {
|
|
28
|
-
top: "
|
|
29
|
-
|
|
30
|
-
left: "auto",
|
|
29
|
+
top: "-5px",
|
|
30
|
+
left: topM ? "35px" : "0px",
|
|
31
31
|
margin: "0px"
|
|
32
32
|
},
|
|
33
33
|
children: [/*#__PURE__*/_jsx(Tooltip, {
|
|
@@ -155,7 +155,10 @@ const Image = props => {
|
|
|
155
155
|
}, {
|
|
156
156
|
at: path
|
|
157
157
|
});
|
|
158
|
-
}
|
|
158
|
+
},
|
|
159
|
+
MW: 32,
|
|
160
|
+
MH: 32,
|
|
161
|
+
MP: 2
|
|
159
162
|
});
|
|
160
163
|
const arr = Array.from(Node.elements(editor));
|
|
161
164
|
const ele = arr.find(([elem]) => element === elem);
|
|
@@ -277,7 +280,8 @@ const Image = props => {
|
|
|
277
280
|
children: [!readOnly && /*#__PURE__*/_jsx(ToolBar, {
|
|
278
281
|
isEmpty: isEmpty,
|
|
279
282
|
onSettings: onSettings,
|
|
280
|
-
setOpenNav: setOpenNav
|
|
283
|
+
setOpenNav: setOpenNav,
|
|
284
|
+
topM: size.width < 100
|
|
281
285
|
}), /*#__PURE__*/_jsx(ImageContent, {
|
|
282
286
|
...element,
|
|
283
287
|
readOnly: readOnly,
|
|
@@ -52,6 +52,7 @@ const GridItemToolbar = props => {
|
|
|
52
52
|
sx: classes.popTools,
|
|
53
53
|
className: "gi-tool-pp",
|
|
54
54
|
disablePortal: true,
|
|
55
|
+
contentEditable: false,
|
|
55
56
|
children: [/*#__PURE__*/_jsx(Tooltip, {
|
|
56
57
|
title: "Column Settings",
|
|
57
58
|
arrow: true,
|
|
@@ -354,12 +355,14 @@ const GridItem = props => {
|
|
|
354
355
|
onMouseDown: onMouseDown,
|
|
355
356
|
height: "auto"
|
|
356
357
|
}) : null, /*#__PURE__*/_jsxs(Dialog, {
|
|
358
|
+
sx: classes.dialog,
|
|
357
359
|
open: Boolean(alert),
|
|
358
360
|
onClose: handleClose,
|
|
359
361
|
children: [/*#__PURE__*/_jsx(DialogContent, {
|
|
360
362
|
children: alert
|
|
361
363
|
}), /*#__PURE__*/_jsx(DialogActions, {
|
|
362
364
|
children: /*#__PURE__*/_jsx(Button, {
|
|
365
|
+
variant: "contained",
|
|
363
366
|
onClick: handleClose,
|
|
364
367
|
children: "Close"
|
|
365
368
|
})
|
|
@@ -106,6 +106,12 @@ const GridStyles = (theme, appTheme) => ({
|
|
|
106
106
|
}
|
|
107
107
|
}
|
|
108
108
|
}
|
|
109
|
+
},
|
|
110
|
+
dialog: {
|
|
111
|
+
"& .MuiPaper-root": {
|
|
112
|
+
background: appTheme?.palette?.editor?.background,
|
|
113
|
+
color: appTheme?.palette?.editor?.textColor
|
|
114
|
+
}
|
|
109
115
|
}
|
|
110
116
|
});
|
|
111
117
|
export default GridStyles;
|
|
@@ -1,70 +1,88 @@
|
|
|
1
|
-
const TableStyles = theme =>
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
"
|
|
15
|
-
|
|
1
|
+
const TableStyles = theme => {
|
|
2
|
+
const {
|
|
3
|
+
background,
|
|
4
|
+
closeButtonSvgStroke,
|
|
5
|
+
activeColor,
|
|
6
|
+
signaturePopUpTabButtonSelectedBg,
|
|
7
|
+
signaturePopUpTabButtonSelectedSvg
|
|
8
|
+
} = theme?.palette?.editor || {};
|
|
9
|
+
return {
|
|
10
|
+
tableToolBar: {
|
|
11
|
+
position: "absolute",
|
|
12
|
+
top: "-24px",
|
|
13
|
+
left: 0,
|
|
14
|
+
transition: "all 0.3s",
|
|
15
|
+
"& button": {
|
|
16
|
+
backgroundColor: background,
|
|
17
|
+
border: "1px solid rgba(37, 99, 235, 0.32)",
|
|
18
|
+
boxShadow: "0px 0px 10px 0px rgba(0, 0, 0, 0.16)",
|
|
19
|
+
borderRadius: "50%",
|
|
20
|
+
padding: "4px",
|
|
21
|
+
margin: "2px",
|
|
22
|
+
"&:hover": {
|
|
23
|
+
backgroundColor: background
|
|
24
|
+
},
|
|
25
|
+
"& svg": {
|
|
26
|
+
width: "18px",
|
|
27
|
+
height: "18px",
|
|
28
|
+
"& path": {
|
|
29
|
+
stroke: closeButtonSvgStroke
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
"&.selected": {
|
|
33
|
+
outline: `1.5px solid ${activeColor || "#2563EB"}`,
|
|
34
|
+
background: signaturePopUpTabButtonSelectedBg,
|
|
35
|
+
"& svg": {
|
|
36
|
+
"& path": {
|
|
37
|
+
stroke: signaturePopUpTabButtonSelectedSvg
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
16
41
|
},
|
|
17
|
-
"
|
|
18
|
-
width: "
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
42
|
+
"&.active": {
|
|
43
|
+
width: "auto",
|
|
44
|
+
"& .toggle": {
|
|
45
|
+
rotate: "180deg"
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
"& .toolbtn": {
|
|
49
|
+
"& svg": {
|
|
50
|
+
stroke: "rgb(100, 116, 139)"
|
|
22
51
|
}
|
|
23
52
|
}
|
|
24
53
|
},
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
54
|
+
table: {
|
|
55
|
+
"& td": {
|
|
56
|
+
padding: "8px 8px"
|
|
57
|
+
},
|
|
58
|
+
"& .selection-area-tc": {
|
|
59
|
+
position: "absolute",
|
|
60
|
+
width: "100%",
|
|
61
|
+
height: "100%",
|
|
62
|
+
top: 0,
|
|
63
|
+
left: 0,
|
|
64
|
+
outline: "1px solid #2563EB",
|
|
65
|
+
pointerEvents: "none"
|
|
66
|
+
},
|
|
67
|
+
"& .hide-drag-btn-wrapper": {
|
|
68
|
+
"& .row-drag-btn": {
|
|
69
|
+
display: "none"
|
|
70
|
+
}
|
|
34
71
|
}
|
|
35
|
-
}
|
|
36
|
-
},
|
|
37
|
-
table: {
|
|
38
|
-
"& td": {
|
|
39
|
-
padding: "8px 8px"
|
|
40
72
|
},
|
|
41
|
-
|
|
73
|
+
cellResizer: {
|
|
42
74
|
position: "absolute",
|
|
43
|
-
|
|
44
|
-
|
|
75
|
+
cursor: "col-resize",
|
|
76
|
+
right: "-2px",
|
|
45
77
|
top: 0,
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
display: "none"
|
|
78
|
+
background: "transparent",
|
|
79
|
+
width: "3px",
|
|
80
|
+
borderRadius: "0px",
|
|
81
|
+
zIndex: 1,
|
|
82
|
+
"&:hover": {
|
|
83
|
+
background: "#2563EB"
|
|
53
84
|
}
|
|
54
85
|
}
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
position: "absolute",
|
|
58
|
-
cursor: "col-resize",
|
|
59
|
-
right: "-2px",
|
|
60
|
-
top: 0,
|
|
61
|
-
background: "transparent",
|
|
62
|
-
width: "3px",
|
|
63
|
-
borderRadius: "0px",
|
|
64
|
-
zIndex: 1,
|
|
65
|
-
"&:hover": {
|
|
66
|
-
background: "#2563EB"
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
});
|
|
86
|
+
};
|
|
87
|
+
};
|
|
70
88
|
export default TableStyles;
|
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
import React, { useEffect, useRef, useState } from "react";
|
|
2
2
|
import { Editor, Transforms } from "slate";
|
|
3
3
|
import { ReactEditor, useSelected, useSlateStatic } from "slate-react";
|
|
4
|
-
import { Box, IconButton, Tooltip, Table as TableComp, TableBody, useTheme, Popper, Fade } from "@mui/material";
|
|
4
|
+
import { Box, IconButton, Tooltip, Table as TableComp, TableBody, useTheme, Popper, Fade, ClickAwayListener } from "@mui/material";
|
|
5
5
|
import { TableUtil } from "../../utils/table";
|
|
6
6
|
import TablePopup from "./TablePopup";
|
|
7
7
|
import { useEditorContext, useEditorSelection } from "../../hooks/useMouseMove";
|
|
8
8
|
import TableStyles from "./Styles";
|
|
9
9
|
import "./table.css";
|
|
10
10
|
import { groupByBreakpoint } from "../../helper/theme";
|
|
11
|
-
import useTable, { TableProvider } from "../../hooks/useTable";
|
|
11
|
+
import useTable, { TableProvider, getDefaultTableSelection } from "../../hooks/useTable";
|
|
12
12
|
import AddRowCol from "./AddRowCol";
|
|
13
13
|
import TableTool from "./TableTool";
|
|
14
14
|
import { MoreIcon, SettingsIcon } from "../../assets/svg/TableIcons";
|
|
15
|
+
import { getSelectedCls } from "../../utils/helper";
|
|
15
16
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
16
17
|
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
17
18
|
const hideRowDragBtns = (hide, dragRowBtnCls) => {
|
|
@@ -20,6 +21,40 @@ const hideRowDragBtns = (hide, dragRowBtnCls) => {
|
|
|
20
21
|
rowDragBtns?.forEach(btn => btn.style.display = hide);
|
|
21
22
|
}
|
|
22
23
|
};
|
|
24
|
+
const MoreTableSettings = props => {
|
|
25
|
+
const {
|
|
26
|
+
exandTools,
|
|
27
|
+
handleAction,
|
|
28
|
+
editorTheme,
|
|
29
|
+
setExpandTools
|
|
30
|
+
} = props;
|
|
31
|
+
const {
|
|
32
|
+
updateTableSelection
|
|
33
|
+
} = useTable();
|
|
34
|
+
return /*#__PURE__*/_jsx(Popper, {
|
|
35
|
+
open: Boolean(exandTools),
|
|
36
|
+
anchorEl: exandTools,
|
|
37
|
+
contentEditable: false,
|
|
38
|
+
sx: {
|
|
39
|
+
zIndex: 2000
|
|
40
|
+
},
|
|
41
|
+
placement: "bottom-start",
|
|
42
|
+
children: /*#__PURE__*/_jsx(ClickAwayListener, {
|
|
43
|
+
onClickAway: () => setExpandTools(false),
|
|
44
|
+
children: /*#__PURE__*/_jsx("div", {
|
|
45
|
+
children: /*#__PURE__*/_jsx(TableTool, {
|
|
46
|
+
theme: editorTheme,
|
|
47
|
+
handleToolAction: (type, option) => {
|
|
48
|
+
handleAction(type, option);
|
|
49
|
+
if (type === "duplicate") {
|
|
50
|
+
updateTableSelection(getDefaultTableSelection());
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
})
|
|
54
|
+
})
|
|
55
|
+
})
|
|
56
|
+
});
|
|
57
|
+
};
|
|
23
58
|
const ToolBar = props => {
|
|
24
59
|
const {
|
|
25
60
|
selected,
|
|
@@ -27,7 +62,8 @@ const ToolBar = props => {
|
|
|
27
62
|
classes,
|
|
28
63
|
handleExpand,
|
|
29
64
|
handleAction,
|
|
30
|
-
exandTools
|
|
65
|
+
exandTools,
|
|
66
|
+
openSetttings
|
|
31
67
|
} = props;
|
|
32
68
|
const {
|
|
33
69
|
getSelectedCells
|
|
@@ -43,7 +79,7 @@ const ToolBar = props => {
|
|
|
43
79
|
arrow: true,
|
|
44
80
|
onClick: () => handleAction("settings"),
|
|
45
81
|
children: /*#__PURE__*/_jsx(IconButton, {
|
|
46
|
-
className: "toolbtn toggle",
|
|
82
|
+
className: getSelectedCls("toolbtn toggle", openSetttings),
|
|
47
83
|
children: /*#__PURE__*/_jsx(SettingsIcon, {})
|
|
48
84
|
})
|
|
49
85
|
}), /*#__PURE__*/_jsx(Tooltip, {
|
|
@@ -51,7 +87,7 @@ const ToolBar = props => {
|
|
|
51
87
|
arrow: true,
|
|
52
88
|
onClick: handleExpand,
|
|
53
89
|
children: /*#__PURE__*/_jsx(IconButton, {
|
|
54
|
-
className: "toolbtn toggle",
|
|
90
|
+
className: getSelectedCls("toolbtn toggle", exandTools),
|
|
55
91
|
children: /*#__PURE__*/_jsx(MoreIcon, {})
|
|
56
92
|
})
|
|
57
93
|
})]
|
|
@@ -100,6 +136,7 @@ const Table = props => {
|
|
|
100
136
|
break;
|
|
101
137
|
case "duplicate":
|
|
102
138
|
table.duplicateTable();
|
|
139
|
+
setExpandTools(false);
|
|
103
140
|
break;
|
|
104
141
|
case "settings":
|
|
105
142
|
if (tableProps) {
|
|
@@ -198,7 +235,8 @@ const Table = props => {
|
|
|
198
235
|
otherProps: {
|
|
199
236
|
dragRowBtnCls,
|
|
200
237
|
tablePath: path,
|
|
201
|
-
openSetttings
|
|
238
|
+
openSetttings,
|
|
239
|
+
exandTools
|
|
202
240
|
},
|
|
203
241
|
children: [/*#__PURE__*/_jsxs("div", {
|
|
204
242
|
style: {
|
|
@@ -249,28 +287,13 @@ const Table = props => {
|
|
|
249
287
|
classes: classes,
|
|
250
288
|
handleExpand: handleExpand,
|
|
251
289
|
handleAction: handleAction,
|
|
252
|
-
exandTools: exandTools
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
zIndex: 2000
|
|
260
|
-
},
|
|
261
|
-
placement: "bottom-start",
|
|
262
|
-
children: ({
|
|
263
|
-
TransitionProps
|
|
264
|
-
}) => /*#__PURE__*/_jsx(Fade, {
|
|
265
|
-
...TransitionProps,
|
|
266
|
-
timeout: 350,
|
|
267
|
-
children: /*#__PURE__*/_jsx("div", {
|
|
268
|
-
children: /*#__PURE__*/_jsx(TableTool, {
|
|
269
|
-
theme: editorTheme,
|
|
270
|
-
handleToolAction: handleAction
|
|
271
|
-
})
|
|
272
|
-
})
|
|
273
|
-
})
|
|
290
|
+
exandTools: exandTools,
|
|
291
|
+
openSetttings: openSetttings
|
|
292
|
+
}), /*#__PURE__*/_jsx(MoreTableSettings, {
|
|
293
|
+
exandTools: exandTools,
|
|
294
|
+
handleAction: handleAction,
|
|
295
|
+
editorTheme: editorTheme,
|
|
296
|
+
setExpandTools: setExpandTools
|
|
274
297
|
}), openSetttings ? /*#__PURE__*/_jsx(TablePopup, {
|
|
275
298
|
element: tableProps?.styleProps || {},
|
|
276
299
|
onSave: onSave,
|
|
@@ -87,7 +87,10 @@ const TableCell = props => {
|
|
|
87
87
|
const isHeader = path.length >= 2 ? path[path.length - 2] === 0 : false;
|
|
88
88
|
const [size, onMouseDown, resizing, onLoad] = useTableResize({
|
|
89
89
|
parentDOM,
|
|
90
|
-
size: element?.size
|
|
90
|
+
size: element?.size,
|
|
91
|
+
minMaxProps: {
|
|
92
|
+
minWidth: 30
|
|
93
|
+
}
|
|
91
94
|
});
|
|
92
95
|
const [tableSize, setTableSize] = useState({});
|
|
93
96
|
const [openSettings, setOpenSettings] = useState(false);
|
|
@@ -8,6 +8,19 @@ import { serializeToText } from "../utils/serializeToText";
|
|
|
8
8
|
import { createCopiedTableStructure, getRectangleBounds, tableNodeToDom } from "../Elements/Table/tableHelper";
|
|
9
9
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
10
10
|
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
11
|
+
const selectFirstCell = (tablePath, editor, updateTableSelection) => {
|
|
12
|
+
const firstCell = [...tablePath, 0, 0];
|
|
13
|
+
const end = Editor.end(editor, firstCell);
|
|
14
|
+
Transforms.select(editor, {
|
|
15
|
+
anchor: end,
|
|
16
|
+
focus: end
|
|
17
|
+
});
|
|
18
|
+
updateTableSelection({
|
|
19
|
+
startCellPath: firstCell,
|
|
20
|
+
endCellPath: [],
|
|
21
|
+
isDragging: false
|
|
22
|
+
});
|
|
23
|
+
};
|
|
11
24
|
const handleDragEnd = (dragData, editor, resetAll) => {
|
|
12
25
|
const {
|
|
13
26
|
active,
|
|
@@ -65,7 +78,7 @@ export const TableProvider = ({
|
|
|
65
78
|
otherProps = {}
|
|
66
79
|
}) => {
|
|
67
80
|
const {
|
|
68
|
-
|
|
81
|
+
tablePath
|
|
69
82
|
} = otherProps;
|
|
70
83
|
const [hoverPath, setHoverPath] = useState(null);
|
|
71
84
|
const [tableSelection, setTableSelection] = useState(getDefaultTableSelection());
|
|
@@ -105,7 +118,8 @@ export const TableProvider = ({
|
|
|
105
118
|
tableSelection,
|
|
106
119
|
tableResizing,
|
|
107
120
|
setTableResizing,
|
|
108
|
-
otherProps
|
|
121
|
+
otherProps,
|
|
122
|
+
resetAll
|
|
109
123
|
};
|
|
110
124
|
}, [hoverPath, editor?.selection, tableSelection, tableResizing]);
|
|
111
125
|
useEffect(() => {
|
|
@@ -171,10 +185,8 @@ export const TableProvider = ({
|
|
|
171
185
|
};
|
|
172
186
|
}, [tableSelection, editor, tableSelection]);
|
|
173
187
|
useEffect(() => {
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
}
|
|
177
|
-
}, [openSetttings]);
|
|
188
|
+
selectFirstCell(tablePath, editor, updateTableSelection);
|
|
189
|
+
}, []);
|
|
178
190
|
return /*#__PURE__*/_jsx(TableContext.Provider, {
|
|
179
191
|
value: values,
|
|
180
192
|
children: /*#__PURE__*/_jsxs(DndContext, {
|
|
@@ -2,6 +2,7 @@ import { Transforms, Editor, Element, Node, Path } from "slate";
|
|
|
2
2
|
import deserialize from "../helper/deserialize";
|
|
3
3
|
import { decodeAndParseBase64 } from "../utils/helper";
|
|
4
4
|
const avoidDefaultInsert = ["table", "grid"];
|
|
5
|
+
const LIST_TAGS = ["ol", "ul", "img", "table"];
|
|
5
6
|
const loopChildren = (children = [], defaultInsert) => {
|
|
6
7
|
if (!children?.length) {
|
|
7
8
|
return defaultInsert;
|
|
@@ -120,12 +121,21 @@ const withHtml = editor => {
|
|
|
120
121
|
const slateHTML = data?.getData("application/x-slate-fragment");
|
|
121
122
|
const html = data?.getData("text/html");
|
|
122
123
|
const currentEl = getCurrentElement(editor);
|
|
123
|
-
|
|
124
|
+
const eltype = currentEl?.type;
|
|
125
|
+
const isTitlePath = editor?.selection?.anchor?.path[0] === 0;
|
|
124
126
|
if (slateHTML && !formatFragment[eltype]) {
|
|
125
127
|
const [tableCellNode] = Editor.nodes(editor, {
|
|
126
128
|
match: n => !Editor.isEditor(n) && Element.isElement(n) && n.type === "table-cell"
|
|
127
129
|
});
|
|
128
130
|
const decoded = decodeAndParseBase64(slateHTML);
|
|
131
|
+
if (decoded && decoded[0] && decoded[0]?.type !== "paragraph" && isTitlePath) {
|
|
132
|
+
decoded.unshift({
|
|
133
|
+
type: "title",
|
|
134
|
+
children: [{
|
|
135
|
+
text: ""
|
|
136
|
+
}]
|
|
137
|
+
});
|
|
138
|
+
}
|
|
129
139
|
if (tableCellNode) {
|
|
130
140
|
const tableCellChild = getTableCellChild(decoded);
|
|
131
141
|
if (tableCellChild?.length) {
|
|
@@ -170,10 +180,40 @@ const withHtml = editor => {
|
|
|
170
180
|
Transforms.insertText(editor, text);
|
|
171
181
|
}
|
|
172
182
|
} else {
|
|
173
|
-
handleInsert(editor, () =>
|
|
183
|
+
handleInsert(editor, () => {
|
|
184
|
+
if (isTitlePath) {
|
|
185
|
+
Transforms.insertNodes(editor, [{
|
|
186
|
+
type: "title",
|
|
187
|
+
children: [{
|
|
188
|
+
text: ""
|
|
189
|
+
}]
|
|
190
|
+
}], {
|
|
191
|
+
at: [0]
|
|
192
|
+
});
|
|
193
|
+
insertData(data);
|
|
194
|
+
}
|
|
195
|
+
}, decoded);
|
|
174
196
|
}
|
|
175
197
|
} else if (html) {
|
|
176
198
|
const parsed = new DOMParser().parseFromString(html, "text/html");
|
|
199
|
+
const rootElement = parsed.body || parsed.documentElement;
|
|
200
|
+
const isList = LIST_TAGS.includes(rootElement.firstChild.tagName.toLowerCase());
|
|
201
|
+
|
|
202
|
+
// if selection is in title add the empty paragraph
|
|
203
|
+
if (isTitlePath && isList) {
|
|
204
|
+
// Check if the first child exists and is not a paragraph
|
|
205
|
+
if (!rootElement.firstChild || rootElement.firstChild.tagName.toLowerCase() !== "p") {
|
|
206
|
+
// Create a new empty paragraph element
|
|
207
|
+
const emptyParagraph = parsed.createElement("p");
|
|
208
|
+
|
|
209
|
+
// Insert the empty paragraph at the beginning
|
|
210
|
+
if (rootElement.firstChild) {
|
|
211
|
+
rootElement.insertBefore(emptyParagraph, rootElement.firstChild);
|
|
212
|
+
} else {
|
|
213
|
+
rootElement.appendChild(emptyParagraph);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
177
217
|
const isGoogleSheet = parsed.body.querySelector("google-sheets-html-origin");
|
|
178
218
|
if (isGoogleSheet) {
|
|
179
219
|
if (editor.isChatEditor) {
|
|
@@ -4,7 +4,10 @@ const useResize = ({
|
|
|
4
4
|
parentDOM,
|
|
5
5
|
size: allSize,
|
|
6
6
|
isGrid,
|
|
7
|
-
onChange
|
|
7
|
+
onChange,
|
|
8
|
+
MH,
|
|
9
|
+
MW,
|
|
10
|
+
MP
|
|
8
11
|
}) => {
|
|
9
12
|
const device = getDevice(window.innerWidth);
|
|
10
13
|
const defaultSize = getBreakPointsValue(allSize);
|
|
@@ -52,9 +55,9 @@ const useResize = ({
|
|
|
52
55
|
const cWP = calcWidth / width * 100;
|
|
53
56
|
const calcHeight = (parseInt(currentSize.height) || height) + e.movementY;
|
|
54
57
|
const calc = {
|
|
55
|
-
width: Math.max(calcWidth, 140),
|
|
56
|
-
height: Math.max(calcHeight, 50),
|
|
57
|
-
widthInPercent: cWP > 100 ? 100 : Math.max(cWP, 15)
|
|
58
|
+
width: Math.max(calcWidth, MW || 140),
|
|
59
|
+
height: Math.max(calcHeight, MH || 50),
|
|
60
|
+
widthInPercent: cWP > 100 ? 100 : Math.max(cWP, MP || 15)
|
|
58
61
|
};
|
|
59
62
|
latest = calc;
|
|
60
63
|
return calc;
|
|
@@ -2,7 +2,8 @@ import { useState } from "react";
|
|
|
2
2
|
const useTableResize = ({
|
|
3
3
|
parentDOM,
|
|
4
4
|
size: defaultSize,
|
|
5
|
-
onDone
|
|
5
|
+
onDone,
|
|
6
|
+
minMaxProps = {}
|
|
6
7
|
}) => {
|
|
7
8
|
const {
|
|
8
9
|
width
|
|
@@ -38,10 +39,13 @@ const useTableResize = ({
|
|
|
38
39
|
setIsDone(1);
|
|
39
40
|
};
|
|
40
41
|
const onMouseMove = e => {
|
|
42
|
+
const {
|
|
43
|
+
minWidth
|
|
44
|
+
} = minMaxProps || {};
|
|
41
45
|
setSize(currentSize => {
|
|
42
46
|
const calcWidth = currentSize?.width + e.movementX;
|
|
43
47
|
return {
|
|
44
|
-
width: calcWidth,
|
|
48
|
+
width: minWidth && calcWidth < minWidth ? minWidth : calcWidth,
|
|
45
49
|
height: currentSize.height + e.movementY,
|
|
46
50
|
widthInPercent: calcWidth / width * 100
|
|
47
51
|
};
|
|
@@ -676,4 +676,7 @@ export function getInitialValue(value = [], readOnly) {
|
|
|
676
676
|
return newValue;
|
|
677
677
|
}
|
|
678
678
|
return value;
|
|
679
|
+
}
|
|
680
|
+
export function getSelectedCls(defaultCls = "", selected, selectedClsName = "selected") {
|
|
681
|
+
return `${defaultCls} ${selected ? selectedClsName : ""}`;
|
|
679
682
|
}
|