@flozy/editor 4.9.3 → 4.9.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (34) hide show
  1. package/dist/Editor/Editor.css +21 -11
  2. package/dist/Editor/Elements/AI/PopoverAIInput.js +3 -3
  3. package/dist/Editor/Elements/AI/Styles.js +7 -7
  4. package/dist/Editor/Elements/Carousel/Carousel.js +3 -0
  5. package/dist/Editor/Elements/Divider/Divider.js +4 -2
  6. package/dist/Editor/Elements/Link/LinkButton.js +1 -1
  7. package/dist/Editor/Elements/Search/SearchAttachment.js +6 -9
  8. package/dist/Editor/Elements/Search/SearchButton.js +4 -4
  9. package/dist/Editor/Elements/Search/SearchList.js +7 -5
  10. package/dist/Editor/Elements/Signature/SignaturePopup.js +2 -1
  11. package/dist/Editor/Elements/Table/AddRowCol.js +3 -2
  12. package/dist/Editor/Elements/Table/DragButton.js +6 -2
  13. package/dist/Editor/Elements/Table/DragStyles.js +62 -36
  14. package/dist/Editor/Elements/Table/Styles.js +1 -1
  15. package/dist/Editor/Elements/Table/Table.js +8 -3
  16. package/dist/Editor/Elements/Table/TableCell.js +24 -10
  17. package/dist/Editor/Elements/Table/tableHelper.js +83 -0
  18. package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/index.js +3 -3
  19. package/dist/Editor/Toolbar/PopupTool/PopupToolStyle.js +26 -22
  20. package/dist/Editor/Toolbar/PopupTool/index.js +13 -11
  21. package/dist/Editor/common/MentionsPopup/Styles.js +1 -1
  22. package/dist/Editor/common/RnD/ElementSettings/Settings/FormSettings.js +10 -35
  23. package/dist/Editor/common/StyleBuilder/fieldTypes/backgroundImage.js +5 -0
  24. package/dist/Editor/common/StyleBuilder/fieldTypes/card.js +10 -2
  25. package/dist/Editor/common/StyleBuilder/formStyle.js +101 -69
  26. package/dist/Editor/common/StyleBuilder/index.js +8 -34
  27. package/dist/Editor/common/Uploader.js +8 -0
  28. package/dist/Editor/common/iconListV2.js +2 -0
  29. package/dist/Editor/common/iconslist.js +1 -0
  30. package/dist/Editor/helper/deserialize/index.js +5 -11
  31. package/dist/Editor/hooks/useEditorScroll.js +1 -1
  32. package/dist/Editor/hooks/useTable.js +37 -30
  33. package/dist/Editor/utils/helper.js +11 -0
  34. package/package.json +1 -1
@@ -622,7 +622,21 @@ blockquote {
622
622
  }
623
623
 
624
624
  .MuiIconButton-root.btnActive {
625
- background-color: #ccc;
625
+ svg path {
626
+ stroke: #2563EB;
627
+ }
628
+
629
+ svg text,
630
+ svg circle,
631
+ .fill-svg,
632
+ .fill-path,
633
+ .fill-path path {
634
+ fill: #2563EB;
635
+ }
636
+
637
+ path.fill-path {
638
+ stroke: none;
639
+ }
626
640
  }
627
641
 
628
642
  .embed .element-toolbar {
@@ -1214,14 +1228,6 @@ blockquote {
1214
1228
  position: absolute;
1215
1229
  }
1216
1230
 
1217
- .dividerComponent:hover {
1218
- padding: 10px 0;
1219
- }
1220
-
1221
- .dividerComponent.readonlyDivider:hover {
1222
- padding: 0;
1223
- }
1224
-
1225
1231
  .dividerComponent:hover .divider-settings {
1226
1232
  display: block;
1227
1233
  }
@@ -1229,7 +1235,10 @@ blockquote {
1229
1235
  @media (max-width: 899px) {
1230
1236
  .MuiPopover-root {
1231
1237
  z-index: 1302 !important;
1232
- }
1238
+ }
1239
+ canvas {
1240
+ max-width: 100% !important;
1241
+ }
1233
1242
  }
1234
1243
 
1235
1244
  .settingsHeader {
@@ -1250,4 +1259,5 @@ blockquote {
1250
1259
 
1251
1260
  .hideScroll::-webkit-scrollbar-thumb:hover {
1252
1261
  background: none !important;
1253
- }
1262
+ }
1263
+
@@ -1,4 +1,4 @@
1
- import { useEffect, useRef, useState } from "react";
1
+ import { useCallback, useEffect, useRef, useState } from "react";
2
2
  import { useEditorContext } from "../../hooks/useMouseMove";
3
3
  import Styles from "./Styles";
4
4
  import { Fade, Paper, Popper } from "@mui/material";
@@ -178,9 +178,9 @@ function PopoverAIInput({
178
178
  const selectedEleRef = useRef({});
179
179
  const classes = Styles();
180
180
  const editor = useSlate();
181
- const updateAnchor = () => {
181
+ const updateAnchor = useCallback(() => {
182
182
  updateAnchorEl(setAnchorEl, editor, openAI, selectedEleRef.current);
183
- };
183
+ }, [setAnchorEl, editor, openAI, selectedEleRef.current]);
184
184
  useEditorScroll(editorWrapper, updateAnchor);
185
185
  const onClickOutside = () => {
186
186
  setAnchorEl(null);
@@ -142,13 +142,13 @@ const Styles = theme => ({
142
142
  gap: "8px"
143
143
  },
144
144
  "&:hover": {
145
- backgroundColor: `${theme?.palette?.editor?.menuOptionSelectedOption} !important`,
146
- "& svg path": {
147
- stroke: `${theme?.palette?.editor?.menuOptionTextColor} !important`
148
- },
149
- "& svg": {
150
- color: `${theme?.palette?.editor?.menuOptionTextColor} !important`
151
- }
145
+ backgroundColor: `${theme?.palette?.editor?.menuOptionSelectedOption} !important`
146
+ },
147
+ "& svg path": {
148
+ stroke: `${theme?.palette?.editor?.menuOptionTextColor} !important`
149
+ },
150
+ "& svg": {
151
+ color: `${theme?.palette?.editor?.menuOptionTextColor} !important`
152
152
  },
153
153
  "&.active": {
154
154
  background: `${theme?.palette?.containers?.bg3 || "#E9F3FE"}`,
@@ -52,10 +52,13 @@ const Carousel = props => {
52
52
  useEffect(() => {
53
53
  setRefresh(new Date().getTime());
54
54
  }, []);
55
+
56
+ //comment this for carosul selection on insert
55
57
  useEffect(() => {
56
58
  if (!edit) {
57
59
  ReactEditor.focus(editor);
58
60
  Transforms.select(editor, ReactEditor.findPath(editor, element));
61
+ Transforms.deselect(editor);
59
62
  }
60
63
  }, [edit]);
61
64
  const onAddSlide = () => {
@@ -100,11 +100,12 @@ const Divider = props => {
100
100
  };
101
101
  return /*#__PURE__*/_jsxs("div", {
102
102
  ...attributes,
103
- className: `dividerComponent ${readOnly ? 'readonlyDivider' : ''}`,
103
+ className: `dividerComponent`,
104
104
  style: {
105
105
  userSelect: "none",
106
106
  position: 'relative'
107
107
  },
108
+ contentEditable: false,
108
109
  children: [!readOnly && /*#__PURE__*/_jsx("div", {
109
110
  className: `element-root element-selector`,
110
111
  contentEditable: false,
@@ -124,7 +125,8 @@ const Divider = props => {
124
125
  userSelect: "none",
125
126
  borderTop: !borderColor?.includes("linear") ? `${width} ${borderStyle} ${borderColor}` : `transparent`,
126
127
  backgroundImage: borderColor?.includes("linear") ? borderColor : "none",
127
- height: borderColor?.includes("linear") ? borderWidth : undefined
128
+ height: borderColor?.includes("linear") ? borderWidth : undefined,
129
+ marginTop: '15px'
128
130
  }
129
131
  }), /*#__PURE__*/_jsx("span", {
130
132
  style: {
@@ -64,7 +64,7 @@ const LinkButton = props => {
64
64
  title: "Link",
65
65
  arrow: true,
66
66
  children: /*#__PURE__*/_jsx(IconButton, {
67
- className: `${showInput ? "clicked" : ""} ${isActive ? "btnActive" : ""}`,
67
+ className: `${showInput ? "clicked btnActive" : ""} ${isActive ? "btnActive" : ""}`,
68
68
  format: "link",
69
69
  onClick: toggleLink,
70
70
  children: /*#__PURE__*/_jsx(Icon, {
@@ -27,7 +27,7 @@ const SearchAttachment = props => {
27
27
  metadata?.actionHandler(type, element);
28
28
  }
29
29
  };
30
- return /*#__PURE__*/_jsxs(Box, {
30
+ return /*#__PURE__*/_jsx(Box, {
31
31
  component: "div",
32
32
  className: "attachment-wrpr-ev2",
33
33
  ...attributes,
@@ -35,7 +35,7 @@ const SearchAttachment = props => {
35
35
  style: {
36
36
  display: "block"
37
37
  },
38
- children: [/*#__PURE__*/_jsxs(Card, {
38
+ children: /*#__PURE__*/_jsxs(Card, {
39
39
  style: {
40
40
  display: "flex",
41
41
  justifyContent: "flex-start",
@@ -45,7 +45,7 @@ const SearchAttachment = props => {
45
45
  padding: "0px 10px",
46
46
  boxShadow: "none",
47
47
  border: `1px solid ${theme?.palette?.primary?.slashBrainBorder}`,
48
- borderRadius: "7px",
48
+ borderRadius: "7px !important",
49
49
  background: theme?.palette?.containers?.slashBrainCardBg,
50
50
  cursor: 'pointer',
51
51
  "& *::selection": {
@@ -76,7 +76,7 @@ const SearchAttachment = props => {
76
76
  paddingBottom: '3px'
77
77
  }
78
78
  },
79
- children: /*#__PURE__*/_jsx(Typography, {
79
+ children: /*#__PURE__*/_jsxs(Typography, {
80
80
  sx: {
81
81
  fontWeight: "500",
82
82
  background: theme?.palette?.text?.slashBrainText,
@@ -95,13 +95,10 @@ const SearchAttachment = props => {
95
95
  },
96
96
  component: "div",
97
97
  variant: "subtitle1",
98
- children: label
98
+ children: [label, children]
99
99
  })
100
100
  })]
101
- }), /*#__PURE__*/_jsx("span", {
102
- contentEditable: false,
103
- children: children
104
- })]
101
+ })
105
102
  });
106
103
  };
107
104
  export default SearchAttachment;
@@ -110,8 +110,8 @@ const SearchButton = /*#__PURE__*/forwardRef((props, ref) => {
110
110
  children: /*#__PURE__*/_jsx(Paper, {
111
111
  sx: {
112
112
  width: '100%',
113
- background: theme?.palette?.background?.paper,
114
- borderColor: theme?.palette?.type === 'dark' ? theme?.palette?.primary?.border2 : 'transparent'
113
+ background: theme?.palette?.editor?.miniToolBarBackground,
114
+ borderColor: theme?.palette?.type === 'dark' ? theme?.palette?.editor?.popUpBorderColor : 'transparent'
115
115
  },
116
116
  children: /*#__PURE__*/_jsx(SearchAndDocList, {
117
117
  mapData: mapData,
@@ -143,9 +143,9 @@ const SearchButton = /*#__PURE__*/forwardRef((props, ref) => {
143
143
  sx: {
144
144
  padding: 0,
145
145
  width: '330px',
146
- background: theme?.palette?.background?.paper,
146
+ background: theme?.palette?.editor?.miniToolBarBackground,
147
147
  border: '1px solid',
148
- borderColor: theme?.palette?.type === 'dark' ? theme?.palette?.primary?.border2 : 'transparent',
148
+ borderColor: theme?.palette?.type === 'dark' ? theme?.palette?.editor?.popUpBorderColor : 'transparent',
149
149
  borderRadius: '12px',
150
150
  '&.MuiPaper-root-MuiPopover-paper': {
151
151
  borderRadius: '12px !important'
@@ -36,7 +36,7 @@ const SearchAndDocList = ({
36
36
  sx: {
37
37
  borderRadius: "6px",
38
38
  backgroundColor: theme?.palette?.containers?.bg7,
39
- border: theme?.palette?.type === 'dark' ? `1px solid ${theme?.palette?.primary?.border2}` : '',
39
+ border: theme?.palette?.type === 'dark' ? `1px solid ${theme?.palette?.editor?.popUpBorderColor}` : '',
40
40
  padding: "5px",
41
41
  "&:hover": {
42
42
  backgroundColor: theme?.palette?.containers?.bg8,
@@ -111,24 +111,27 @@ const SearchAndDocList = ({
111
111
  maxHeight: '400px',
112
112
  minWidth: "275px",
113
113
  overflowY: 'auto',
114
+ overflowX: 'hidden',
114
115
  padding: '0px 16px 8px',
115
116
  marginBottom: '20px',
116
117
  scrollbarWidth: "thin",
117
118
  scrollbarColor: `${theme?.palette?.primary?.slashBrainBorder} transparent`,
118
119
  "&::-webkit-scrollbar": {
119
120
  width: "3px",
120
- height: "3px !important"
121
+ height: "3px !important",
122
+ borderRadius: "10px"
121
123
  },
122
124
  "&::-webkit-scrollbar-thumb": {
123
125
  backgroundColor: theme?.palette?.primary?.slashBrainBorder,
124
- borderRadius: "4px",
126
+ borderRadius: "10px",
125
127
  width: "3px !important"
126
128
  },
127
129
  "&::-webkit-scrollbar-thumb:hover": {
128
130
  backgroundColor: theme?.palette?.primary?.slashBrainBorder
129
131
  },
130
132
  "&::-webkit-scrollbar-track": {
131
- background: "transparent"
133
+ background: "transparent",
134
+ borderRadius: "10px"
132
135
  }
133
136
  },
134
137
  children: [mapData?.map((doc, index) => {
@@ -206,7 +209,6 @@ const SearchAndDocList = ({
206
209
  justifyContent: "center",
207
210
  alignItems: 'center',
208
211
  sx: {
209
- minWidth: "330px",
210
212
  minHeight: '400px',
211
213
  padding: '0px 16px 8px',
212
214
  position: 'absolute'
@@ -471,7 +471,8 @@ const SignaturePopup = props => {
471
471
  classes: classes,
472
472
  value: brush.color,
473
473
  onSave: onBrushColor,
474
- recentColors: []
474
+ recentColors: [],
475
+ hideGradient: true
475
476
  }), /*#__PURE__*/_jsx("span", {
476
477
  style: {
477
478
  marginLeft: "10px",
@@ -59,11 +59,12 @@ function AddRowCol(props) {
59
59
  children: /*#__PURE__*/_jsx(Button, {
60
60
  sx: {
61
61
  fontSize: "14px",
62
- border: "1px dotted #8DA8E3",
63
- color: "#2563EB",
62
+ border: "1px dashed #8DA8E3",
63
+ color: "#2563EB !important",
64
64
  padding: "0px 4px",
65
65
  minWidth: "unset",
66
66
  lineHeight: "18px",
67
+ fontWeight: "lighter !important",
67
68
  ...buttonStyle,
68
69
  opacity: showBtn ? 1 : 0
69
70
  },
@@ -73,7 +73,7 @@ function DragButton({
73
73
  modifiers: [{
74
74
  name: "offset",
75
75
  options: {
76
- offset: [0, -14] // align the drag icon by -8
76
+ offset: [0, -12]
77
77
  }
78
78
  }, {
79
79
  name: "flip",
@@ -81,7 +81,7 @@ function DragButton({
81
81
  }],
82
82
 
83
83
  disablePortal: dragType !== "row",
84
- className: className,
84
+ className: `${className}`,
85
85
  children: ({
86
86
  TransitionProps
87
87
  }) => /*#__PURE__*/_jsx(Fade, {
@@ -94,6 +94,10 @@ function DragButton({
94
94
  sx: dragType === "row" ? {
95
95
  transform: "rotate(90deg)"
96
96
  } : {},
97
+ className: `${showTool ? "active" : ""}`,
98
+ style: {
99
+ lineHeight: 0
100
+ },
97
101
  children: /*#__PURE__*/_jsx(IconButton, {
98
102
  onClick: () => {
99
103
  onDragClick();
@@ -1,43 +1,69 @@
1
- const DragStyles = theme => ({
2
- popper: {
3
- zIndex: 1000,
4
- "& .MuiPaper-root": {
5
- borderRadius: "4px !important",
6
- "&:hover": {
7
- border: `1px solid ${theme?.palatte?.editor?.activeColor || "#2563EB"}`
1
+ const DragStyles = theme => {
2
+ const {
3
+ containers,
4
+ editor
5
+ } = theme?.palette || {};
6
+ const {
7
+ buttonBorder,
8
+ background,
9
+ activeColor,
10
+ signaturePopUpTabButtonSelectedBg,
11
+ signaturePopUpTabButtonSelectedSvg
12
+ } = editor || {};
13
+ const onDragActive = {
14
+ outline: `1.5px solid ${activeColor || "#2563EB"}`,
15
+ background: `${signaturePopUpTabButtonSelectedBg} !important`,
16
+ "& svg ellipse": {
17
+ fill: `${signaturePopUpTabButtonSelectedSvg}`
18
+ }
19
+ };
20
+ return {
21
+ popper: {
22
+ zIndex: 1000,
23
+ "& .MuiPaper-root": {
24
+ borderRadius: "3px !important",
25
+ outline: `1.5px solid ${buttonBorder}`,
26
+ backgroundColor: `${background}`,
27
+ "&:hover": onDragActive,
28
+ "&.active": onDragActive
29
+ },
30
+ "& .MuiIconButton-root": {
31
+ padding: "4px 6px",
32
+ borderRadius: "none",
33
+ "& .dragIcon": {
34
+ width: "14px",
35
+ height: "10px"
36
+ },
37
+ "&:hover": {
38
+ background: "none"
39
+ }
8
40
  }
9
41
  },
10
- "& .MuiIconButton-root": {
11
- padding: "4px 8px",
12
- "&:hover": {
13
- background: "none"
42
+ toolPopper: {
43
+ zIndex: 4001,
44
+ "& .MuiPaper-root": {
45
+ borderRadius: "8px"
14
46
  }
15
- }
16
- },
17
- toolPopper: {
18
- zIndex: 4001,
19
- "& .MuiPaper-root": {
20
- borderRadius: "8px"
21
- }
22
- },
23
- mobileToolDrawer: {
24
- "& .customSelectContainer": {
25
- border: "none !important",
26
- padding: "0px !important"
27
- }
28
- },
29
- drawerContainer: {
30
- "&.MuiDrawer-root": {
31
- zIndex: 1301
32
47
  },
33
- "& .MuiDrawer-paper": {
34
- borderTopLeftRadius: 8,
35
- borderTopRightRadius: 8,
36
- backgroundColor: theme.palette.containers.card
48
+ mobileToolDrawer: {
49
+ "& .customSelectContainer": {
50
+ border: "none !important",
51
+ padding: "0px !important"
52
+ }
37
53
  },
38
- "& .customSelectContainer": {
39
- border: "none"
54
+ drawerContainer: {
55
+ "&.MuiDrawer-root": {
56
+ zIndex: 1301
57
+ },
58
+ "& .MuiDrawer-paper": {
59
+ borderTopLeftRadius: 8,
60
+ borderTopRightRadius: 8,
61
+ backgroundColor: containers?.card
62
+ },
63
+ "& .customSelectContainer": {
64
+ border: "none"
65
+ }
40
66
  }
41
- }
42
- });
67
+ };
68
+ };
43
69
  export default DragStyles;
@@ -59,7 +59,7 @@ const TableStyles = theme => ({
59
59
  right: "-2px",
60
60
  top: 0,
61
61
  background: "transparent",
62
- width: "4px",
62
+ width: "3px",
63
63
  borderRadius: "0px",
64
64
  zIndex: 1,
65
65
  "&:hover": {
@@ -8,7 +8,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 { TableProvider } from "../../hooks/useTable";
11
+ import useTable, { TableProvider } from "../../hooks/useTable";
12
12
  import AddRowCol from "./AddRowCol";
13
13
  import TableTool from "./TableTool";
14
14
  import { useDebouncedCallback } from "use-debounce";
@@ -30,7 +30,11 @@ const ToolBar = props => {
30
30
  handleAction,
31
31
  exandTools
32
32
  } = props;
33
- return selected && !showTool ? /*#__PURE__*/_jsxs(Box, {
33
+ const {
34
+ getSelectedCells
35
+ } = useTable();
36
+ const viewTool = selected && !showTool && getSelectedCells()?.length <= 1;
37
+ return viewTool ? /*#__PURE__*/_jsxs(Box, {
34
38
  component: "div",
35
39
  contentEditable: false,
36
40
  className: `tableToolBar ${exandTools ? "active" : ""}`,
@@ -185,7 +189,8 @@ const Table = props => {
185
189
  return /*#__PURE__*/_jsxs(TableProvider, {
186
190
  editor: editor,
187
191
  otherProps: {
188
- dragRowBtnCls
192
+ dragRowBtnCls,
193
+ tablePath: path
189
194
  },
190
195
  children: [/*#__PURE__*/_jsxs("div", {
191
196
  style: {
@@ -1,4 +1,4 @@
1
- import React, { useState, useEffect } from "react";
1
+ import React, { useState, useEffect, useMemo } from "react";
2
2
  import { Editor, Element, Path, Transforms } from "slate";
3
3
  import { Box } from "@mui/material";
4
4
  import { useSlateStatic, ReactEditor } from "slate-react";
@@ -190,11 +190,19 @@ const TableCell = props => {
190
190
  if (!contentEditable) {
191
191
  e.preventDefault();
192
192
  }
193
- updateTableSelection({
194
- startCellPath: path,
195
- endCellPath: [],
196
- isDragging: true
197
- });
193
+ if (
194
+ // for shift selection
195
+ e.shiftKey && startCellPath?.length && startCellPath.toString() !== path.toString()) {
196
+ updateTableSelection({
197
+ endCellPath: path
198
+ });
199
+ } else {
200
+ updateTableSelection({
201
+ startCellPath: path,
202
+ endCellPath: [],
203
+ isDragging: true
204
+ });
205
+ }
198
206
  };
199
207
  const onMouseUp = e => {
200
208
  if (startCellPath?.length) {
@@ -211,6 +219,7 @@ const TableCell = props => {
211
219
  const isCellSelected = selectionPath?.length && Path.equals(selectionPath, path);
212
220
  if (!isCellSelected) {
213
221
  // focus the clicked cell
222
+ ReactEditor.focus(editor);
214
223
  Transforms.select(editor, {
215
224
  anchor: Editor.end(editor, path),
216
225
  focus: Editor.end(editor, path)
@@ -225,10 +234,15 @@ const TableCell = props => {
225
234
  const cellId = path.toString() + "table-cell";
226
235
  const cellRef = document.getElementById(cellId);
227
236
  const contentEditable = !readOnly && isCellEditable(startCellPath, path);
228
- const commonTdProps = {
229
- id: cellId,
230
- contentEditable
231
- };
237
+ const commonTdProps = useMemo(() => {
238
+ const props = {
239
+ id: cellId
240
+ };
241
+ if (!contentEditable) {
242
+ props.contentEditable = false;
243
+ }
244
+ return props;
245
+ }, [contentEditable, cellId]);
232
246
  const handleTouchMove = e => {
233
247
  const touch = e.touches[0]; // Get the current touch point
234
248
  const element = document.elementFromPoint(touch.clientX, touch.clientY);
@@ -0,0 +1,83 @@
1
+ import { getNode } from "../../utils/helper";
2
+ import { serializeToText } from "../../utils/serializeToText";
3
+ export const getRectangleBounds = tableSelection => {
4
+ const {
5
+ startCellPath,
6
+ endCellPath
7
+ } = tableSelection;
8
+ if (!startCellPath?.length) return [];
9
+ const startPath = startCellPath.slice(0, -2);
10
+ const startCell = startCellPath.slice(-2);
11
+ const endCell = endCellPath.slice(-2);
12
+ const [startRow, startCol] = startCell;
13
+ const [endRow, endCol] = endCell?.length ? endCell : startCell;
14
+ const minRow = Math.min(startRow, endRow);
15
+ const maxRow = Math.max(startRow, endRow);
16
+ const minCol = Math.min(startCol, endCol);
17
+ const maxCol = Math.max(startCol, endCol);
18
+ const selectedPaths = [];
19
+ for (let row = minRow; row <= maxRow; row++) {
20
+ for (let col = minCol; col <= maxCol; col++) {
21
+ selectedPaths.push([...startPath, row, col]);
22
+ }
23
+ }
24
+ return selectedPaths;
25
+ };
26
+ export const createCopiedTableStructure = (editor, tableSelection, currentTableNode, tablePath, selectedText) => {
27
+ const selectedCells = getRectangleBounds(tableSelection);
28
+ const formattedCells = selectedCells.map(cell => cell.slice(-2));
29
+ const tableChild = [];
30
+ const rowIndexes = [...new Set(formattedCells.map(cell => cell[0]))];
31
+ rowIndexes.forEach((rowIndex, row_i) => {
32
+ const row = {
33
+ type: "table-row",
34
+ children: []
35
+ };
36
+
37
+ // Filter cells that belong to the current row
38
+ const cellsInRow = formattedCells.filter(cell => cell[0] === rowIndex);
39
+
40
+ // Iterate over the columns of the row to create table cells
41
+ const columnIndexes = [...new Set(cellsInRow.map(cell => cell[1]))];
42
+ columnIndexes.forEach((columnIndex, col_i) => {
43
+ const cellPath = [...tablePath, rowIndex, columnIndex];
44
+ const columnNode = getNode(editor, cellPath);
45
+ const cellNode = selectedText // we can select text in only one column
46
+ ? {
47
+ ...columnNode,
48
+ type: "table-cell",
49
+ children: [{
50
+ type: "paragraph",
51
+ children: [{
52
+ text: selectedText
53
+ }],
54
+ cellBgColor: "#FFFFFF"
55
+ }]
56
+ } : columnNode;
57
+ row.children.push(cellNode);
58
+ });
59
+ tableChild.push(row);
60
+ });
61
+ const table = {
62
+ ...currentTableNode,
63
+ children: tableChild,
64
+ rows: rowIndexes?.length,
65
+ columns: tableChild[0]?.children?.length // first row's children length
66
+ };
67
+
68
+ return table;
69
+ };
70
+ export const tableNodeToDom = (tableNode, selectedText) => {
71
+ const tableEle = document.createElement("table");
72
+ tableNode.children?.forEach(row => {
73
+ const rowEle = document.createElement("tr");
74
+ row?.children?.forEach(cell => {
75
+ const cellEle = document.createElement("td");
76
+ const cellText = selectedText || serializeToText(cell);
77
+ cellEle.innerHTML = cellText;
78
+ rowEle.appendChild(cellEle);
79
+ });
80
+ tableEle.appendChild(rowEle);
81
+ });
82
+ return tableEle;
83
+ };
@@ -1,4 +1,4 @@
1
- import { Button, Fade, Grid, Paper, Popper } from "@mui/material";
1
+ import { Fade, Grid, IconButton, Paper, Popper } from "@mui/material";
2
2
  import SelectTypography from "./SelectTypography";
3
3
  import SelectList from "./SelectList";
4
4
  import { toolbarGroups } from "../../toolbarGroups";
@@ -95,9 +95,9 @@ const MiniTextFormat = props => {
95
95
  active: isBlockActive(editor, link.format),
96
96
  editor: editor,
97
97
  customProps: customProps
98
- }, link.id), /*#__PURE__*/_jsx(Button, {
98
+ }, link.id), /*#__PURE__*/_jsx(IconButton, {
99
99
  onClick: e => setAnchorEl(document.getElementById("mini-text-editor-wrapper")),
100
- className: "textSettingsIcon",
100
+ className: `textSettingsIcon ${open ? "btnActive" : ""}`,
101
101
  children: /*#__PURE__*/_jsx(TextToolIcon, {})
102
102
  }), /*#__PURE__*/_jsx(Popper, {
103
103
  id: id,