@flozy/editor 5.0.4 → 5.0.6
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/Editor/CommonEditor.js +6 -4
- package/dist/Editor/Editor.css +19 -1
- package/dist/Editor/Elements/Button/EditorButton.js +71 -53
- package/dist/Editor/Elements/Color Picker/ColorButtons.js +4 -2
- package/dist/Editor/Elements/DataView/DataView.js +101 -0
- package/dist/Editor/Elements/DataView/DataViewButton.js +23 -0
- package/dist/Editor/Elements/DataView/Layouts/ColumnView.js +59 -0
- package/dist/Editor/Elements/DataView/Layouts/DataTypes/CheckType.js +30 -0
- package/dist/Editor/Elements/DataView/Layouts/DataTypes/Components/Select.js +128 -0
- package/dist/Editor/Elements/DataView/Layouts/DataTypes/Components/SimpleSelect.js +25 -0
- package/dist/Editor/Elements/DataView/Layouts/DataTypes/DateType.js +26 -0
- package/dist/Editor/Elements/DataView/Layouts/DataTypes/MultiSelectType.js +38 -0
- package/dist/Editor/Elements/DataView/Layouts/DataTypes/NumberType.js +30 -0
- package/dist/Editor/Elements/DataView/Layouts/DataTypes/PersonType.js +30 -0
- package/dist/Editor/Elements/DataView/Layouts/DataTypes/SelectType.js +35 -0
- package/dist/Editor/Elements/DataView/Layouts/DataTypes/TextType.js +36 -0
- package/dist/Editor/Elements/DataView/Layouts/DataTypes/index.js +17 -0
- package/dist/Editor/Elements/DataView/Layouts/FilterSort/SortOptions/ChooseField.js +28 -0
- package/dist/Editor/Elements/DataView/Layouts/FilterSort/SortOptions/ChooseSort.js +37 -0
- package/dist/Editor/Elements/DataView/Layouts/FilterSort/SortOptions/index.js +74 -0
- package/dist/Editor/Elements/DataView/Layouts/FilterSort/index.js +59 -0
- package/dist/Editor/Elements/DataView/Layouts/FilterSort/styles.js +66 -0
- package/dist/Editor/Elements/DataView/Layouts/FilterView.js +174 -0
- package/dist/Editor/Elements/DataView/Layouts/Formula.js +29 -0
- package/dist/Editor/Elements/DataView/Layouts/Options/AddOptions.js +113 -0
- package/dist/Editor/Elements/DataView/Layouts/Options/AddProperty.js +37 -0
- package/dist/Editor/Elements/DataView/Layouts/Options/AllProperties.js +111 -0
- package/dist/Editor/Elements/DataView/Layouts/Options/ChangeProperty.js +62 -0
- package/dist/Editor/Elements/DataView/Layouts/Options/ColumnsList.js +36 -0
- package/dist/Editor/Elements/DataView/Layouts/Options/Constants.js +101 -0
- package/dist/Editor/Elements/DataView/Layouts/Options/EditOption.js +158 -0
- package/dist/Editor/Elements/DataView/Layouts/Options/EditProperty.js +190 -0
- package/dist/Editor/Elements/DataView/Layouts/Options/FilterProperty.js +42 -0
- package/dist/Editor/Elements/DataView/Layouts/Options/PropertyList.js +30 -0
- package/dist/Editor/Elements/DataView/Layouts/Options/index.js +110 -0
- package/dist/Editor/Elements/DataView/Layouts/Options/styles.js +176 -0
- package/dist/Editor/Elements/DataView/Layouts/TableStyles.js +94 -0
- package/dist/Editor/Elements/DataView/Layouts/TableView.js +214 -0
- package/dist/Editor/Elements/DataView/Layouts/ViewData.js +83 -0
- package/dist/Editor/Elements/DataView/Layouts/index.js +25 -0
- package/dist/Editor/Elements/DataView/Providers/DataViewProvider.js +288 -0
- package/dist/Editor/Elements/DataView/Utils/globalSearch.js +15 -0
- package/dist/Editor/Elements/DataView/Utils/multiSortRows.js +72 -0
- package/dist/Editor/Elements/DataView/styles.js +133 -0
- package/dist/Editor/Elements/FreeGrid/styles.js +2 -1
- package/dist/Editor/Elements/Grid/GridItem.js +2 -1
- package/dist/Editor/Elements/Search/SearchAttachment.js +3 -2
- package/dist/Editor/Elements/Search/SearchButton.js +7 -2
- package/dist/Editor/Elements/Search/SearchList.js +51 -17
- package/dist/Editor/Elements/Signature/Signature.css +1 -1
- package/dist/Editor/Elements/Table/AddRowCol.js +1 -1
- package/dist/Editor/Elements/Table/DragButton.js +71 -68
- package/dist/Editor/Elements/Table/Styles.js +2 -2
- package/dist/Editor/Elements/Table/Table.js +10 -7
- package/dist/Editor/Elements/Table/TableCell.js +21 -21
- package/dist/Editor/Elements/Table/tableHelper.js +4 -16
- package/dist/Editor/Toolbar/PopupTool/index.js +1 -1
- package/dist/Editor/Toolbar/Toolbar.js +6 -0
- package/dist/Editor/Toolbar/toolbarGroups.js +4 -0
- package/dist/Editor/assets/svg/OpenLinkIcon.js +3 -3
- package/dist/Editor/common/Icon.js +7 -1
- package/dist/Editor/common/MentionsPopup/Styles.js +12 -4
- package/dist/Editor/common/MentionsPopup/index.js +1 -1
- package/dist/Editor/common/Shorthands/elements.js +13 -1
- package/dist/Editor/common/StyleBuilder/tableStyle.js +1 -1
- package/dist/Editor/common/SwipeableDrawer/style.js +1 -1
- package/dist/Editor/common/iconslist.js +6 -3
- package/dist/Editor/hooks/useTable.js +4 -5
- package/dist/Editor/plugins/withEmbeds.js +1 -1
- package/dist/Editor/plugins/withHTML.js +18 -2
- package/dist/Editor/plugins/withLayout.js +48 -1
- package/dist/Editor/utils/SlateUtilityFunctions.js +16 -0
- package/dist/Editor/utils/dataView.js +43 -0
- package/dist/Editor/utils/embed.js +2 -1
- package/dist/Editor/utils/helper.js +19 -1
- package/dist/Editor/utils/insertNewLine.js +19 -1
- package/package.json +1 -1
@@ -188,9 +188,6 @@ const TableCell = props => {
|
|
188
188
|
setHoverPath(null);
|
189
189
|
};
|
190
190
|
const onMouseDownInCell = e => {
|
191
|
-
if (!contentEditable) {
|
192
|
-
e.preventDefault();
|
193
|
-
}
|
194
191
|
if (
|
195
192
|
// for shift selection
|
196
193
|
e.shiftKey && startCellPath?.length && startCellPath.toString() !== path.toString()) {
|
@@ -218,13 +215,6 @@ const TableCell = props => {
|
|
218
215
|
const selectionPath = currentEditorSelection?.slice(0, -2);
|
219
216
|
const isCellSelected = selectionPath?.length && Path.equals(selectionPath, path);
|
220
217
|
if (!isCellSelected) {
|
221
|
-
// focus the clicked cell
|
222
|
-
ReactEditor.focus(editor);
|
223
|
-
Transforms.select(editor, {
|
224
|
-
anchor: Editor.end(editor, path),
|
225
|
-
focus: Editor.end(editor, path)
|
226
|
-
});
|
227
|
-
|
228
218
|
// after mousedown event, onclick is triggered, while onclick, dragging should be disabled and focus should be on that clicked cell to edit the contents inside it.
|
229
219
|
updateTableSelection({
|
230
220
|
isDragging: false
|
@@ -238,9 +228,11 @@ const TableCell = props => {
|
|
238
228
|
const props = {
|
239
229
|
id: cellId
|
240
230
|
};
|
241
|
-
|
242
|
-
|
243
|
-
|
231
|
+
|
232
|
+
// if (!contentEditable) {
|
233
|
+
// props.contentEditable = false;
|
234
|
+
// }
|
235
|
+
|
244
236
|
return props;
|
245
237
|
}, [contentEditable, cellId]);
|
246
238
|
const handleTouchMove = e => {
|
@@ -256,7 +248,7 @@ const TableCell = props => {
|
|
256
248
|
isDragging: false
|
257
249
|
});
|
258
250
|
};
|
259
|
-
const tbProps = resizing || over || readOnly ? {
|
251
|
+
const tbProps = tableResizing || resizing || over || readOnly ? {
|
260
252
|
...commonTdProps,
|
261
253
|
contentEditable: false
|
262
254
|
} : {
|
@@ -405,6 +397,7 @@ const TableCell = props => {
|
|
405
397
|
fontSize: entireTextSize || "inherit",
|
406
398
|
color: entireTextColor || "inherit",
|
407
399
|
cursor: "text",
|
400
|
+
verticalAlign: "top",
|
408
401
|
...(sizeProps || {})
|
409
402
|
},
|
410
403
|
...tbProps,
|
@@ -417,26 +410,33 @@ const TableCell = props => {
|
|
417
410
|
...dndProps,
|
418
411
|
dragType: currentDraggingType,
|
419
412
|
tableDOM: tableDOM
|
420
|
-
}) : null,
|
413
|
+
}) : null, /*#__PURE__*/_jsx("div", {
|
414
|
+
style: {
|
415
|
+
overflow: "auto hidden"
|
416
|
+
},
|
417
|
+
children: children
|
418
|
+
}), isHeader && !readOnly && tableSize?.height && !showTool ? /*#__PURE__*/_jsx(Resizer, {
|
421
419
|
classes: classes,
|
422
420
|
onMouseDown: onMouseDown,
|
423
421
|
height: tableDOM.getBoundingClientRect()?.height
|
424
|
-
}) : null, hasSelected && !readOnly ? /*#__PURE__*/_jsx("div", {
|
422
|
+
}) : null, hasSelected && !readOnly && !tableResizing ? /*#__PURE__*/_jsx("div", {
|
425
423
|
className: "selection-area-tc",
|
426
424
|
contentEditable: false
|
427
|
-
}) : null,
|
425
|
+
}) : null, /*#__PURE__*/_jsx(DragButton, {
|
428
426
|
...commonDragBtnProps,
|
429
427
|
placement: "top",
|
430
428
|
dragType: "col",
|
431
429
|
onDrag: onColDrag,
|
432
|
-
hideDelete: rowProps?.children?.length <= 1
|
433
|
-
|
430
|
+
hideDelete: rowProps?.children?.length <= 1,
|
431
|
+
show: showColDrag || isColDragging
|
432
|
+
}), /*#__PURE__*/_jsx(DragButton, {
|
434
433
|
...commonDragBtnProps,
|
435
434
|
dragType: "row",
|
436
435
|
onDrag: onRowDrag,
|
437
436
|
hideDelete: parentProps?.children?.length <= 1,
|
438
|
-
className: dragRowBtnCls
|
439
|
-
|
437
|
+
className: dragRowBtnCls,
|
438
|
+
show: showRowDragBtn
|
439
|
+
})]
|
440
440
|
}), openSettings ? /*#__PURE__*/_jsx(TablePopup, {
|
441
441
|
element: tableProps?.styleProps || {},
|
442
442
|
customProps: customProps,
|
@@ -23,7 +23,7 @@ export const getRectangleBounds = tableSelection => {
|
|
23
23
|
}
|
24
24
|
return selectedPaths;
|
25
25
|
};
|
26
|
-
export const createCopiedTableStructure = (editor, tableSelection, currentTableNode, tablePath
|
26
|
+
export const createCopiedTableStructure = (editor, tableSelection, currentTableNode, tablePath) => {
|
27
27
|
const selectedCells = getRectangleBounds(tableSelection);
|
28
28
|
const formattedCells = selectedCells.map(cell => cell.slice(-2));
|
29
29
|
const tableChild = [];
|
@@ -42,19 +42,7 @@ export const createCopiedTableStructure = (editor, tableSelection, currentTableN
|
|
42
42
|
columnIndexes.forEach((columnIndex, col_i) => {
|
43
43
|
const cellPath = [...tablePath, rowIndex, columnIndex];
|
44
44
|
const columnNode = getNode(editor, cellPath);
|
45
|
-
|
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);
|
45
|
+
row.children.push(columnNode);
|
58
46
|
});
|
59
47
|
tableChild.push(row);
|
60
48
|
});
|
@@ -67,13 +55,13 @@ export const createCopiedTableStructure = (editor, tableSelection, currentTableN
|
|
67
55
|
|
68
56
|
return table;
|
69
57
|
};
|
70
|
-
export const tableNodeToDom =
|
58
|
+
export const tableNodeToDom = tableNode => {
|
71
59
|
const tableEle = document.createElement("table");
|
72
60
|
tableNode.children?.forEach(row => {
|
73
61
|
const rowEle = document.createElement("tr");
|
74
62
|
row?.children?.forEach(cell => {
|
75
63
|
const cellEle = document.createElement("td");
|
76
|
-
const cellText =
|
64
|
+
const cellText = serializeToText(cell);
|
77
65
|
cellEle.innerHTML = cellText;
|
78
66
|
rowEle.appendChild(cellEle);
|
79
67
|
});
|
@@ -32,6 +32,7 @@ import ColorboxButton from "../Elements/Colorbox/ColorboxButton.js";
|
|
32
32
|
import DividerButton from "../Elements/Divider/DividerButton.js";
|
33
33
|
import EmbedScript from "../Elements/EmbedScript/EmbedScript.js";
|
34
34
|
import FreeGridButton from "../Elements/FreeGrid/FreeGridButton.js";
|
35
|
+
import DataViewButton from "../Elements/DataView/DataViewButton.js";
|
35
36
|
import SearchButton from "../Elements/Search/SearchButton.js";
|
36
37
|
import { jsx as _jsx } from "react/jsx-runtime";
|
37
38
|
import { jsxs as _jsxs } from "react/jsx-runtime";
|
@@ -118,6 +119,11 @@ export const RenderToolbarIcon = props => {
|
|
118
119
|
editor: editor,
|
119
120
|
icoBtnType: icoBtnType
|
120
121
|
}, element.id);
|
122
|
+
case "dataView":
|
123
|
+
return /*#__PURE__*/_jsx(DataViewButton, {
|
124
|
+
editor: editor,
|
125
|
+
icoBtnType: icoBtnType
|
126
|
+
}, element.id);
|
121
127
|
case "id":
|
122
128
|
return /*#__PURE__*/_jsx(Id, {
|
123
129
|
editor: editor
|
@@ -9,19 +9,19 @@ const OpenLinkIcon = props => {
|
|
9
9
|
xmlns: "http://www.w3.org/2000/svg",
|
10
10
|
children: [/*#__PURE__*/_jsx("path", {
|
11
11
|
d: "M7.58325 6.41615L12.3666 1.63281",
|
12
|
-
stroke: "#
|
12
|
+
stroke: "#64748B",
|
13
13
|
strokeWidth: "1.5",
|
14
14
|
strokeLinecap: "round",
|
15
15
|
strokeLinejoin: "round"
|
16
16
|
}), /*#__PURE__*/_jsx("path", {
|
17
17
|
d: "M12.8334 3.96602V1.16602H10.0334",
|
18
|
-
stroke: "#
|
18
|
+
stroke: "#64748B",
|
19
19
|
strokeWidth: "1.5",
|
20
20
|
strokeLinecap: "round",
|
21
21
|
strokeLinejoin: "round"
|
22
22
|
}), /*#__PURE__*/_jsx("path", {
|
23
23
|
d: "M6.41675 1.16602H5.25008C2.33341 1.16602 1.16675 2.33268 1.16675 5.24935V8.74935C1.16675 11.666 2.33341 12.8327 5.25008 12.8327H8.75008C11.6667 12.8327 12.8334 11.666 12.8334 8.74935V7.58268",
|
24
|
-
stroke: "#
|
24
|
+
stroke: "#64748B",
|
25
25
|
strokeWidth: "1.5",
|
26
26
|
strokeLinecap: "round",
|
27
27
|
strokeLinejoin: "round"
|
@@ -11,6 +11,7 @@ import ArrowRightIcon from "@mui/icons-material/ArrowRight";
|
|
11
11
|
import ArrowDropDownIcon from "@mui/icons-material/ArrowDropDown";
|
12
12
|
import EmailRoundedIcon from "@mui/icons-material/EmailRounded";
|
13
13
|
import InfoOutlinedIcon from "@mui/icons-material/InfoOutlined";
|
14
|
+
import GridOnIcon from "@mui/icons-material/GridOn";
|
14
15
|
import { AccordionTextFormatIcon, BoldTextFormatIcon, BulletedListTextFormatIcon, ButtonElementIcon, CarouselElementIcon, CheckListTextFormatIcon, ColorBoxElementIcon, DividerElementIcon, DocUploadElementIcon, EmbedElementIcon, EmojiElementIcon, FormElementIcon, GridElementIcon, H1, H2, H3, ImageElementIcon, ItalicTextFormatIcon, LinkIconV2, OrderedListTextFormatIcon, SignatureElementIcon, TableElementIcon, TopBannerElementIcon, UnderlineTextFormatIcon, VideoElementIcon, CalendlyIcon, LeftAlignTextFormat, CenterAlignTextFormat, RightAlignTextFormat, JustifyTextFormat, FreeGridElement, AppHeaderElement, CodeElementIcon } from "./iconListV2";
|
15
16
|
import MoreVertRoundedIcon from "@mui/icons-material/MoreVertRounded";
|
16
17
|
import SettingsIcon from "../assets/svg/SettingsIcon";
|
@@ -24,7 +25,7 @@ import { BrainIcon } from "../assets/svg/BrainIcon";
|
|
24
25
|
import DocsIcon from "../assets/svg/DocsIcon";
|
25
26
|
import UserIcon from "../assets/svg/UserIcon";
|
26
27
|
import EditIcon from "@mui/icons-material/Edit";
|
27
|
-
import DeleteIcon from
|
28
|
+
import DeleteIcon from "@mui/icons-material/Delete";
|
28
29
|
import { jsx as _jsx } from "react/jsx-runtime";
|
29
30
|
import { jsxs as _jsxs } from "react/jsx-runtime";
|
30
31
|
const iconList = {
|
@@ -270,6 +271,11 @@ const iconList = {
|
|
270
271
|
addElement: /*#__PURE__*/_jsx(AddElementIcon, {}),
|
271
272
|
addTemplate: /*#__PURE__*/_jsx(AddTemplateIcon, {}),
|
272
273
|
openLinkIcon: /*#__PURE__*/_jsx(OpenLinkIcon, {}),
|
274
|
+
dataView: /*#__PURE__*/_jsx(GridOnIcon, {
|
275
|
+
sx: {
|
276
|
+
fill: "#64748B"
|
277
|
+
}
|
278
|
+
}),
|
273
279
|
brain: /*#__PURE__*/_jsx(BrainIcon, {}),
|
274
280
|
docsIcon: /*#__PURE__*/_jsx(DocsIcon, {}),
|
275
281
|
userIcon: /*#__PURE__*/_jsx(UserIcon, {}),
|
@@ -13,13 +13,21 @@ const usePopupStyles = theme => ({
|
|
13
13
|
"& .MuiBox-root": {
|
14
14
|
"& .renderComp": {
|
15
15
|
padding: "2px 0px 2px 1px",
|
16
|
-
background: "transparent !important"
|
16
|
+
background: "transparent !important",
|
17
|
+
"&:hover": {
|
18
|
+
borderRadius: "10px",
|
19
|
+
background: `${theme?.palette?.editor?.menuOptionHoverBackground} !important`
|
20
|
+
}
|
17
21
|
},
|
18
22
|
"& button": {
|
19
|
-
padding: "0px 0px 0px
|
23
|
+
padding: "0px 0px 0px 4px !important",
|
20
24
|
"& svg": {
|
21
|
-
|
22
|
-
|
25
|
+
width: "18px !important",
|
26
|
+
margin: "5px 12px 6px 6px !important"
|
27
|
+
},
|
28
|
+
"&:hover": {
|
29
|
+
borderRadius: "10px",
|
30
|
+
background: `${theme?.palette?.editor?.menuOptionHoverBackground} !important`
|
23
31
|
}
|
24
32
|
},
|
25
33
|
"& .active": {
|
@@ -97,7 +97,7 @@ const MentionsPopup = /*#__PURE__*/forwardRef((props, ref) => {
|
|
97
97
|
id: `cmd-li-ind-${index}}`,
|
98
98
|
component: "div",
|
99
99
|
onClick: handleClick(char, i),
|
100
|
-
className: `${i === index ? "active" : " "} ${char.renderComponent ? "renderComp" : ""}`,
|
100
|
+
className: `${type !== 'elements' && i === index ? "active" : " "} ${char.renderComponent ? "renderComp" : ""}`,
|
101
101
|
sx: classes.listItem,
|
102
102
|
ref: i === index ? papperRef : null,
|
103
103
|
children: char.renderComponent ? char.renderComponent({
|
@@ -13,6 +13,7 @@ import { insertDivider } from "../../utils/divider";
|
|
13
13
|
import { insertFreeGrid } from "../../utils/freegrid";
|
14
14
|
import { Transforms } from "slate";
|
15
15
|
import { insertInfinityAI } from "../../utils/infinityAI";
|
16
|
+
import { insertDataView } from "../../utils/dataView";
|
16
17
|
import SearchButton from "../../Elements/Search/SearchButton";
|
17
18
|
import { jsx as _jsx } from "react/jsx-runtime";
|
18
19
|
const ELEMENTS_LIST = [{
|
@@ -158,7 +159,7 @@ const ELEMENTS_LIST = [{
|
|
158
159
|
renderComponent: rest => /*#__PURE__*/_jsx(SearchButton, {
|
159
160
|
...rest,
|
160
161
|
element: {
|
161
|
-
name:
|
162
|
+
name: "Brain"
|
162
163
|
},
|
163
164
|
icoBtnType: "cmd"
|
164
165
|
})
|
@@ -262,6 +263,17 @@ const ELEMENTS_LIST = [{
|
|
262
263
|
onInsert: editor => {
|
263
264
|
insertInfinityAI(editor);
|
264
265
|
}
|
266
|
+
}, {
|
267
|
+
name: "Dynamic Table",
|
268
|
+
group: "Dynamic Table",
|
269
|
+
desc: "",
|
270
|
+
type: "dataView",
|
271
|
+
icon: /*#__PURE__*/_jsx(Icon, {
|
272
|
+
icon: "dataView"
|
273
|
+
}),
|
274
|
+
onInsert: editor => {
|
275
|
+
insertDataView(editor);
|
276
|
+
}
|
265
277
|
}];
|
266
278
|
const elements = props => {
|
267
279
|
const {
|
@@ -5,7 +5,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
5
5
|
const allTools = toolbarGroups.flat();
|
6
6
|
const fontWeight = allTools.find(f => f.format === "fontWeight");
|
7
7
|
function getKey(prefix, key) {
|
8
|
-
const settingKey = prefix === "col" ? capitalizeFirstLetter(key) : key;
|
8
|
+
const settingKey = prefix === "col" ? `entire${capitalizeFirstLetter(key)}` : key;
|
9
9
|
return `${prefix}.${settingKey}`;
|
10
10
|
}
|
11
11
|
function getCommonSettings(prefix) {
|
@@ -1343,19 +1343,22 @@ export const GridAddSectionIcon = props => /*#__PURE__*/_jsxs("svg", {
|
|
1343
1343
|
stroke: "#64748B",
|
1344
1344
|
strokeWidth: "1.5",
|
1345
1345
|
strokeLinecap: "round",
|
1346
|
-
strokeLinejoin: "round"
|
1346
|
+
strokeLinejoin: "round",
|
1347
|
+
className: "fillStroke"
|
1347
1348
|
}), /*#__PURE__*/_jsx("path", {
|
1348
1349
|
d: "M10.1733 6.125V14.875",
|
1349
1350
|
stroke: "#64748B",
|
1350
1351
|
strokeWidth: "1.5",
|
1351
1352
|
strokeLinecap: "round",
|
1352
|
-
strokeLinejoin: "round"
|
1353
|
+
strokeLinejoin: "round",
|
1354
|
+
className: "fillStroke"
|
1353
1355
|
}), /*#__PURE__*/_jsx("path", {
|
1354
1356
|
d: "M5.79834 10.5H14.5483",
|
1355
1357
|
stroke: "#64748B",
|
1356
1358
|
strokeWidth: "1.5",
|
1357
1359
|
strokeLinecap: "round",
|
1358
|
-
strokeLinejoin: "round"
|
1360
|
+
strokeLinejoin: "round",
|
1361
|
+
className: "fillStroke"
|
1359
1362
|
})]
|
1360
1363
|
});
|
1361
1364
|
export const FormIcon = () => {
|
@@ -123,21 +123,20 @@ export const TableProvider = ({
|
|
123
123
|
try {
|
124
124
|
const isTextSelected = editor?.selection && !Range.isCollapsed(editor.selection);
|
125
125
|
const customCopy = tableSelection?.startCellPath?.length;
|
126
|
-
if (customCopy) {
|
126
|
+
if (customCopy && !isTextSelected) {
|
127
127
|
event.preventDefault(); // Prevent default copy behavior
|
128
128
|
|
129
129
|
const {
|
130
130
|
tablePath
|
131
131
|
} = otherProps;
|
132
132
|
const [node] = Editor.node(editor, tablePath);
|
133
|
-
const
|
134
|
-
const copiedTableNode = createCopiedTableStructure(editor, tableSelection, node, tablePath, selectedText);
|
133
|
+
const copiedTableNode = createCopiedTableStructure(editor, tableSelection, node, tablePath);
|
135
134
|
const tableNode = [copiedTableNode];
|
136
135
|
const encodedTableNode = encodeToBase64(tableNode);
|
137
136
|
event.clipboardData.setData("application/x-slate-fragment", encodedTableNode);
|
138
|
-
const textData =
|
137
|
+
const textData = serializeToText(tableNode);
|
139
138
|
event.clipboardData.setData("text/plain", textData);
|
140
|
-
const tableDom = tableNodeToDom(copiedTableNode
|
139
|
+
const tableDom = tableNodeToDom(copiedTableNode);
|
141
140
|
event.clipboardData.setData("text/html", tableDom?.outerHTML);
|
142
141
|
}
|
143
142
|
} catch (err) {
|
@@ -22,7 +22,7 @@ const withEmbeds = editor => {
|
|
22
22
|
const parentNode = Node.get(editor, parentPath);
|
23
23
|
const previousPath = Path.previous(parentPath);
|
24
24
|
const previousNode = Node.get(editor, previousPath);
|
25
|
-
if (BlockTypes.includes(previousNode?.children[0]?.type) && parentNode?.type?.indexOf("heading") >= 0) {
|
25
|
+
if (BlockTypes.includes(previousNode?.children[0]?.type) && parentNode?.type?.indexOf("heading") >= 0 && editor.selection.focus.offset === 0) {
|
26
26
|
insertNodes(...[{
|
27
27
|
type: "paragraph",
|
28
28
|
children: [{
|
@@ -68,6 +68,12 @@ const handleInsert = (editor, defaultInsert, fragment = []) => {
|
|
68
68
|
defaultInsert();
|
69
69
|
}
|
70
70
|
};
|
71
|
+
const getTableCellChild = (fragment = []) => {
|
72
|
+
const table = fragment.find(node => node.type === "table");
|
73
|
+
const row = table?.children?.find(node => node.type === "table-row");
|
74
|
+
const cell = row?.children?.find(node => node.type === "table-cell");
|
75
|
+
return cell?.children || [];
|
76
|
+
};
|
71
77
|
const formatFragment = {
|
72
78
|
"list-item": fragment => {
|
73
79
|
let refactorFragment = [];
|
@@ -104,9 +110,19 @@ const withHtml = editor => {
|
|
104
110
|
const slateHTML = data?.getData("application/x-slate-fragment");
|
105
111
|
const html = data?.getData("text/html");
|
106
112
|
const currentEl = getCurrentElement(editor);
|
107
|
-
|
113
|
+
let eltype = currentEl?.type;
|
108
114
|
if (slateHTML && !formatFragment[eltype]) {
|
115
|
+
const [tableCellNode] = Editor.nodes(editor, {
|
116
|
+
match: n => !Editor.isEditor(n) && Element.isElement(n) && n.type === "table-cell"
|
117
|
+
});
|
109
118
|
const decoded = decodeAndParseBase64(slateHTML);
|
119
|
+
if (tableCellNode) {
|
120
|
+
const tableCellChild = getTableCellChild(decoded);
|
121
|
+
if (tableCellChild?.length) {
|
122
|
+
Transforms.insertFragment(editor, tableCellChild);
|
123
|
+
return;
|
124
|
+
}
|
125
|
+
}
|
110
126
|
const [tableNode] = Editor.nodes(editor, {
|
111
127
|
match: n => !Editor.isEditor(n) && Element.isElement(n) && n.type === "table"
|
112
128
|
});
|
@@ -160,7 +176,7 @@ const withHtml = editor => {
|
|
160
176
|
const formattedFragment = formatFragment[eltype] ? formatFragment[eltype](fragment) : fragment;
|
161
177
|
let is_img_table = false;
|
162
178
|
formattedFragment.map(f => {
|
163
|
-
if (f.type ===
|
179
|
+
if (f.type === "image" || f?.type?.includes("table")) {
|
164
180
|
is_img_table = true;
|
165
181
|
}
|
166
182
|
});
|
@@ -56,8 +56,55 @@ const withLayout = editor => {
|
|
56
56
|
}]
|
57
57
|
};
|
58
58
|
Transforms.insertNodes(editor, paragraph, {
|
59
|
-
at:
|
59
|
+
at: [0]
|
60
60
|
});
|
61
|
+
return;
|
62
|
+
}
|
63
|
+
const extractFirstText = node => {
|
64
|
+
if (node.text) {
|
65
|
+
return node.text;
|
66
|
+
}
|
67
|
+
if (node.children) {
|
68
|
+
for (const child of node.children) {
|
69
|
+
const text = extractFirstText(child);
|
70
|
+
if (text) {
|
71
|
+
return text;
|
72
|
+
}
|
73
|
+
}
|
74
|
+
}
|
75
|
+
return "";
|
76
|
+
};
|
77
|
+
const extractRemainingNodes = node => {
|
78
|
+
if (!node.children) {
|
79
|
+
return [];
|
80
|
+
}
|
81
|
+
const [, ...remainingChildren] = node.children;
|
82
|
+
return remainingChildren.map(child => ({
|
83
|
+
...child
|
84
|
+
}));
|
85
|
+
};
|
86
|
+
const firstNode = editor.children[0];
|
87
|
+
const firstContent = extractFirstText(firstNode);
|
88
|
+
if (firstNode.type !== "title") {
|
89
|
+
const titleNode = {
|
90
|
+
type: "title",
|
91
|
+
children: [{
|
92
|
+
text: firstContent
|
93
|
+
}]
|
94
|
+
};
|
95
|
+
Transforms.removeNodes(editor, {
|
96
|
+
at: [0]
|
97
|
+
});
|
98
|
+
Transforms.insertNodes(editor, titleNode, {
|
99
|
+
at: [0],
|
100
|
+
select: true
|
101
|
+
});
|
102
|
+
const remainingNodes = extractRemainingNodes(firstNode);
|
103
|
+
if (remainingNodes.length > 0) {
|
104
|
+
Transforms.insertNodes(editor, remainingNodes, {
|
105
|
+
at: [1]
|
106
|
+
});
|
107
|
+
}
|
61
108
|
}
|
62
109
|
ORDERS_LAYOUT.forEach((enforce, index) => {
|
63
110
|
if (index < editor.children.length) {
|
@@ -43,6 +43,9 @@ import Code from "../Elements/EmbedScript/Code";
|
|
43
43
|
import FreeGrid from "../Elements/FreeGrid/FreeGrid";
|
44
44
|
import FreeGridItem from "../Elements/FreeGrid/FreeGridItem";
|
45
45
|
import FreeGridBox from "../Elements/FreeGrid/FreeGridBox";
|
46
|
+
import DataView from "../Elements/DataView/DataView";
|
47
|
+
import ViewData from "../Elements/DataView/Layouts/ViewData";
|
48
|
+
import ColumnView from "../Elements/DataView/Layouts/ColumnView";
|
46
49
|
import SearchAttachment from "../Elements/Search/SearchAttachment";
|
47
50
|
// import { wrapThemeBreakpoints } from "../Elements/FreeGrid/breakpointConstants";
|
48
51
|
import { jsx as _jsx } from "react/jsx-runtime";
|
@@ -564,6 +567,19 @@ export const getBlock = props => {
|
|
564
567
|
contentEditable: false,
|
565
568
|
children: children
|
566
569
|
});
|
570
|
+
// Data View
|
571
|
+
case "dataView":
|
572
|
+
return /*#__PURE__*/_jsx(DataView, {
|
573
|
+
...props
|
574
|
+
});
|
575
|
+
case "viewData":
|
576
|
+
return /*#__PURE__*/_jsx(ViewData, {
|
577
|
+
...props
|
578
|
+
});
|
579
|
+
case "columnView":
|
580
|
+
return /*#__PURE__*/_jsx(ColumnView, {
|
581
|
+
...props
|
582
|
+
});
|
567
583
|
default:
|
568
584
|
return /*#__PURE__*/_jsx(SimpleText, {
|
569
585
|
...props,
|
@@ -0,0 +1,43 @@
|
|
1
|
+
import { Transforms } from "slate";
|
2
|
+
const getDefaultDatView = () => ({
|
3
|
+
type: "paragraph",
|
4
|
+
children: [{
|
5
|
+
type: "dataView",
|
6
|
+
title: "",
|
7
|
+
layouts: [{
|
8
|
+
key: "view1",
|
9
|
+
type: "table",
|
10
|
+
label: "Table 1 View",
|
11
|
+
value: "table1",
|
12
|
+
filter: [],
|
13
|
+
sort: []
|
14
|
+
}],
|
15
|
+
properties: [{
|
16
|
+
key: "column1",
|
17
|
+
label: "Task",
|
18
|
+
type: "text",
|
19
|
+
visible: true,
|
20
|
+
default: true
|
21
|
+
}],
|
22
|
+
rows: [{
|
23
|
+
id: new Date().getTime(),
|
24
|
+
column1: ""
|
25
|
+
}],
|
26
|
+
children: [{
|
27
|
+
type: "viewData",
|
28
|
+
children: [{
|
29
|
+
text: ""
|
30
|
+
}]
|
31
|
+
}]
|
32
|
+
}]
|
33
|
+
});
|
34
|
+
export const insertDataView = editor => {
|
35
|
+
try {
|
36
|
+
Transforms.insertNodes(editor, {
|
37
|
+
...getDefaultDatView()
|
38
|
+
});
|
39
|
+
Transforms.move(editor);
|
40
|
+
} catch (err) {
|
41
|
+
console.log(err);
|
42
|
+
}
|
43
|
+
};
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import { Transforms } from "slate";
|
2
|
-
import insertNewLine from "./insertNewLine";
|
2
|
+
import insertNewLine, { insertNewLineAfterCurrentPath } from "./insertNewLine";
|
3
3
|
export const insertDefaultEmbed = (editor, type, defaultURL = "", extProps = {}) => {
|
4
4
|
try {
|
5
5
|
const url = defaultURL ? defaultURL : type === "image" ? "" : "";
|
@@ -56,6 +56,7 @@ export const insertEmbed = (editor, embedData, format) => {
|
|
56
56
|
at: editor.selection.anchor.path
|
57
57
|
});
|
58
58
|
insertNewLine(editor);
|
59
|
+
insertNewLineAfterCurrentPath(editor);
|
59
60
|
} catch (err) {
|
60
61
|
console.log(err);
|
61
62
|
}
|
@@ -626,4 +626,22 @@ export const isPageSettings = (event, editor) => {
|
|
626
626
|
export function capitalizeFirstLetter(str) {
|
627
627
|
if (!str) return str;
|
628
628
|
return str.charAt(0).toUpperCase() + str.slice(1);
|
629
|
-
}
|
629
|
+
}
|
630
|
+
export const insertLineBreakAtEndOfPath = (editor, path) => {
|
631
|
+
try {
|
632
|
+
const [node, nodePath] = Editor.node(editor, path); // Get the node at the specified path
|
633
|
+
if (node) {
|
634
|
+
// Insert the line break
|
635
|
+
Transforms.insertNodes(editor, {
|
636
|
+
type: "paragraph",
|
637
|
+
children: [{
|
638
|
+
text: ""
|
639
|
+
}]
|
640
|
+
}, {
|
641
|
+
at: nodePath
|
642
|
+
});
|
643
|
+
}
|
644
|
+
} catch (err) {
|
645
|
+
console.log(err);
|
646
|
+
}
|
647
|
+
};
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import { Transforms } from "slate";
|
1
|
+
import { Editor, Element, Path, Transforms } from "slate";
|
2
2
|
const insertNewLine = editor => {
|
3
3
|
Transforms.insertNodes(editor, {
|
4
4
|
type: "paragraph",
|
@@ -9,4 +9,22 @@ const insertNewLine = editor => {
|
|
9
9
|
at: [editor.children.length]
|
10
10
|
});
|
11
11
|
};
|
12
|
+
export const insertNewLineAfterCurrentPath = editor => {
|
13
|
+
const currentPath = editor?.selection?.anchor?.path;
|
14
|
+
const [tableNode] = Editor.nodes(editor, {
|
15
|
+
match: n => !Editor.isEditor(n) && Element.isElement(n) && n.type === "table"
|
16
|
+
});
|
17
|
+
if (currentPath && tableNode) {
|
18
|
+
const currentParentPath = Path.parent(currentPath);
|
19
|
+
const nextPath = Path.next(currentParentPath);
|
20
|
+
Transforms.insertNodes(editor, {
|
21
|
+
type: "paragraph",
|
22
|
+
children: [{
|
23
|
+
text: ""
|
24
|
+
}]
|
25
|
+
}, {
|
26
|
+
at: nextPath
|
27
|
+
});
|
28
|
+
}
|
29
|
+
};
|
12
30
|
export default insertNewLine;
|