@flozy/editor 5.1.6 → 5.1.8
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/Editor/Elements/AppHeader/AppHeader.js +6 -6
- package/dist/Editor/Elements/DataView/DataView.js +9 -1
- package/dist/Editor/Elements/DataView/Layouts/ColumnView.js +10 -3
- package/dist/Editor/Elements/DataView/Layouts/DataTypes/Components/Select.js +27 -5
- package/dist/Editor/Elements/DataView/Layouts/DataTypes/Components/styles.js +9 -1
- package/dist/Editor/Elements/DataView/Layouts/DataTypes/DateType.js +5 -1
- package/dist/Editor/Elements/DataView/Layouts/DataTypes/MultiSelectType.js +2 -1
- package/dist/Editor/Elements/DataView/Layouts/DataTypes/PersonType.js +3 -3
- package/dist/Editor/Elements/DataView/Layouts/FilterSort/styles.js +1 -1
- package/dist/Editor/Elements/DataView/Layouts/Options/ChangeProperty.js +1 -3
- package/dist/Editor/Elements/DataView/Layouts/Options/styles.js +2 -2
- package/dist/Editor/Elements/DataView/Layouts/TableStyles.js +13 -1
- package/dist/Editor/Elements/DataView/styles.js +3 -3
- package/dist/Editor/Elements/FreeGrid/breakpointConstants.js +4 -4
- package/dist/Editor/Elements/FreeGrid/styles.js +1 -1
- package/dist/Editor/Elements/Grid/GridButton.js +0 -1
- package/dist/Editor/Elements/Grid/GridItem.js +21 -30
- package/dist/Editor/Elements/SimpleText/style.js +5 -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/Toolbar/FormatTools/Dropdown.js +1 -2
- package/dist/Editor/Toolbar/PopupTool/PopperHeader.js +3 -4
- package/dist/Editor/Toolbar/PopupTool/PopupToolStyle.js +0 -5
- package/dist/Editor/common/Icon.js +5 -5
- package/dist/Editor/common/MentionsPopup/Styles.js +0 -1
- package/dist/Editor/common/RnD/GuideLines/styles.js +3 -3
- package/dist/Editor/common/RnD/ShadowElement.js +1 -1
- package/dist/Editor/hooks/useTable.js +18 -6
- package/dist/Editor/utils/customHooks/useTableResize.js +6 -2
- package/dist/Editor/utils/helper.js +3 -0
- package/package.json +1 -1
@@ -250,10 +250,10 @@ function AppHeader(props) {
|
|
250
250
|
},
|
251
251
|
sx: {
|
252
252
|
mr: 2,
|
253
|
-
[theme
|
253
|
+
[theme?.breakpoints?.up("sm")]: {
|
254
254
|
display: "none"
|
255
255
|
},
|
256
|
-
[theme
|
256
|
+
[theme?.breakpoints.between("xs", "md")]: {
|
257
257
|
display: "block"
|
258
258
|
}
|
259
259
|
},
|
@@ -272,10 +272,10 @@ function AppHeader(props) {
|
|
272
272
|
},
|
273
273
|
sx: {
|
274
274
|
flexGrow: 1,
|
275
|
-
[theme
|
275
|
+
[theme?.breakpoints?.up("sm")]: {
|
276
276
|
display: "block"
|
277
277
|
},
|
278
|
-
[theme
|
278
|
+
[theme?.breakpoints?.between("xs", "md")]: {
|
279
279
|
display: "none"
|
280
280
|
},
|
281
281
|
"& img": {
|
@@ -293,10 +293,10 @@ function AppHeader(props) {
|
|
293
293
|
}) : null, appTitle]
|
294
294
|
}), /*#__PURE__*/_jsxs(Box, {
|
295
295
|
sx: {
|
296
|
-
[theme
|
296
|
+
[theme?.breakpoints?.up("sm")]: {
|
297
297
|
display: "block"
|
298
298
|
},
|
299
|
-
[theme
|
299
|
+
[theme?.breakpoints?.between("xs", "md")]: {
|
300
300
|
display: "none"
|
301
301
|
}
|
302
302
|
},
|
@@ -34,6 +34,14 @@ const DataView = props => {
|
|
34
34
|
} = element;
|
35
35
|
const classes = useDataViewStyles(theme, appTheme);
|
36
36
|
const path = ReactEditor.findPath(editor, element);
|
37
|
+
const users = CHARACTERS?.map(m => {
|
38
|
+
const name = [m?.first_name || "", m?.last_name || ""]?.join(" ").trim();
|
39
|
+
return {
|
40
|
+
value: m?.email,
|
41
|
+
name: name || m?.username || m?.email,
|
42
|
+
avatar: m?.avatar || null
|
43
|
+
};
|
44
|
+
});
|
37
45
|
const onDuplicate = () => {
|
38
46
|
try {
|
39
47
|
const newPath = ReactEditor.findPath(editor, element);
|
@@ -80,7 +88,7 @@ const DataView = props => {
|
|
80
88
|
properties,
|
81
89
|
layouts,
|
82
90
|
rows,
|
83
|
-
users:
|
91
|
+
users: users,
|
84
92
|
tableTitle: title
|
85
93
|
},
|
86
94
|
path: path,
|
@@ -27,8 +27,13 @@ const ColumnView = props => {
|
|
27
27
|
};
|
28
28
|
return /*#__PURE__*/_jsxs(Box, {
|
29
29
|
component: "td",
|
30
|
-
|
31
|
-
|
30
|
+
children: [needAnchor ? /*#__PURE__*/_jsx("span", {
|
31
|
+
ref: anchorRef,
|
32
|
+
style: {
|
33
|
+
position: "absolute",
|
34
|
+
width: "1px"
|
35
|
+
}
|
36
|
+
}) : null, /*#__PURE__*/_jsx(DataType, {
|
32
37
|
options: property?.options,
|
33
38
|
property: property?.key,
|
34
39
|
value: row[property?.key] || "",
|
@@ -37,13 +42,15 @@ const ColumnView = props => {
|
|
37
42
|
readOnly: readOnly
|
38
43
|
}), needAnchor && !readOnly ? /*#__PURE__*/_jsx(Popper, {
|
39
44
|
sx: {
|
40
|
-
zIndex: 1000
|
45
|
+
zIndex: 1000,
|
46
|
+
marginTop: "20px !important"
|
41
47
|
},
|
42
48
|
open: open,
|
43
49
|
anchorEl: anchorEl,
|
44
50
|
placement: "left",
|
45
51
|
container: anchorRef?.current,
|
46
52
|
className: `tv-tr-pop ${selected ? "active" : ""}`,
|
53
|
+
disablePortal: true,
|
47
54
|
children: /*#__PURE__*/_jsx(Checkbox, {
|
48
55
|
onClick: handleSelect(row?.id),
|
49
56
|
size: "small",
|
@@ -1,10 +1,22 @@
|
|
1
1
|
import React from "react";
|
2
2
|
import TextField from "@mui/material/TextField";
|
3
3
|
import Autocomplete from "@mui/material/Autocomplete";
|
4
|
-
import { Box, Chip, useTheme } from "@mui/material";
|
4
|
+
import { Avatar, Box, Chip, useTheme } from "@mui/material";
|
5
5
|
import { useEditorContext } from "../../../../../hooks/useMouseMove";
|
6
6
|
import useCompStyles from "./styles";
|
7
7
|
import { jsx as _jsx } from "react/jsx-runtime";
|
8
|
+
const AvatarIcon = props => {
|
9
|
+
const {
|
10
|
+
option,
|
11
|
+
avatar
|
12
|
+
} = props;
|
13
|
+
const nameIndex = option.label || option.value;
|
14
|
+
return avatar ? /*#__PURE__*/_jsx(Avatar, {
|
15
|
+
alt: option.label || option.value,
|
16
|
+
src: option.avatar || null,
|
17
|
+
children: nameIndex[0] || ""
|
18
|
+
}) : null;
|
19
|
+
};
|
8
20
|
const filter = (opt, params, selectedOpt) => {
|
9
21
|
const selectedVals = selectedOpt?.map(m => m?.value);
|
10
22
|
const fv = opt?.filter(f => !selectedVals.includes(f.value));
|
@@ -20,14 +32,16 @@ export default function Select(props) {
|
|
20
32
|
} = useEditorContext();
|
21
33
|
const classes = useCompStyles(theme, appTheme);
|
22
34
|
const {
|
23
|
-
value,
|
35
|
+
value: pValue,
|
24
36
|
onChange,
|
25
37
|
options,
|
26
38
|
multiple = false,
|
27
39
|
limitTags = 2,
|
28
40
|
placeholder = "",
|
29
|
-
disabled = false
|
41
|
+
disabled = false,
|
42
|
+
optionAvatar = false
|
30
43
|
} = props;
|
44
|
+
const value = Array.isArray(pValue) ? pValue : [];
|
31
45
|
return /*#__PURE__*/_jsx(Autocomplete, {
|
32
46
|
disabled: disabled,
|
33
47
|
className: "tv-ac-field",
|
@@ -101,7 +115,11 @@ export default function Select(props) {
|
|
101
115
|
sx: {
|
102
116
|
background: option?.color || "#CCC",
|
103
117
|
border: "none"
|
104
|
-
}
|
118
|
+
},
|
119
|
+
avatar: /*#__PURE__*/_jsx(AvatarIcon, {
|
120
|
+
option: option,
|
121
|
+
avatar: optionAvatar
|
122
|
+
})
|
105
123
|
}, key) : null;
|
106
124
|
})
|
107
125
|
});
|
@@ -117,7 +135,11 @@ export default function Select(props) {
|
|
117
135
|
label: option.label || option.value || "",
|
118
136
|
sx: {
|
119
137
|
backgroundColor: option.color || "#CCC"
|
120
|
-
}
|
138
|
+
},
|
139
|
+
avatar: /*#__PURE__*/_jsx(AvatarIcon, {
|
140
|
+
option: option,
|
141
|
+
avatar: optionAvatar
|
142
|
+
})
|
121
143
|
})
|
122
144
|
}, key);
|
123
145
|
},
|
@@ -4,7 +4,7 @@ const useCompStyles = (theme, appTheme) => ({
|
|
4
4
|
background: appTheme?.palette?.editor?.tv_pop_bg,
|
5
5
|
color: appTheme?.palette?.editor?.tv_text_primary,
|
6
6
|
borderRadius: "8px",
|
7
|
-
[theme
|
7
|
+
[theme?.breakpoints?.between("xs", "md")]: {},
|
8
8
|
"& ul": {
|
9
9
|
padding: "4px",
|
10
10
|
"& li": {
|
@@ -40,6 +40,14 @@ const useCompStyles = (theme, appTheme) => ({
|
|
40
40
|
borderRadius: "8px",
|
41
41
|
color: appTheme?.palette?.editor?.tv_text_primary,
|
42
42
|
fontSize: "14px",
|
43
|
+
"& .MuiAvatar-root": {
|
44
|
+
width: "20px",
|
45
|
+
height: "20px",
|
46
|
+
marginLeft: "8px",
|
47
|
+
fontSize: "16px",
|
48
|
+
padding: "2px",
|
49
|
+
textTransform: "capitalize"
|
50
|
+
},
|
43
51
|
"&.Mui-selected": {
|
44
52
|
background: appTheme?.palette?.editor?.tv_hover_bg,
|
45
53
|
color: appTheme?.palette?.editor?.tv_hover_text,
|
@@ -2,6 +2,10 @@ import React from "react";
|
|
2
2
|
import DatePicker from "react-datepicker";
|
3
3
|
import { useDataView } from "../../Providers/DataViewProvider";
|
4
4
|
import { jsx as _jsx } from "react/jsx-runtime";
|
5
|
+
function isValidDate(dateString) {
|
6
|
+
const date = new Date(dateString);
|
7
|
+
return !isNaN(date.getTime());
|
8
|
+
}
|
5
9
|
const DateType = props => {
|
6
10
|
const {
|
7
11
|
rowIndex,
|
@@ -19,7 +23,7 @@ const DateType = props => {
|
|
19
23
|
};
|
20
24
|
return /*#__PURE__*/_jsx(DatePicker, {
|
21
25
|
disabled: readOnly,
|
22
|
-
selected: value ? new Date(value) : "",
|
26
|
+
selected: isValidDate(value) ? new Date(value) : "",
|
23
27
|
onChange: handleChange
|
24
28
|
});
|
25
29
|
};
|
@@ -6,7 +6,7 @@ const MultiSelectType = props => {
|
|
6
6
|
const {
|
7
7
|
rowIndex,
|
8
8
|
property,
|
9
|
-
value,
|
9
|
+
value: pValue,
|
10
10
|
options,
|
11
11
|
label = "",
|
12
12
|
readOnly
|
@@ -14,6 +14,7 @@ const MultiSelectType = props => {
|
|
14
14
|
const {
|
15
15
|
onChange
|
16
16
|
} = useDataView();
|
17
|
+
const value = Array.isArray(pValue) ? pValue : [];
|
17
18
|
const coloredValues = [...(value || [])]?.map(m => {
|
18
19
|
return {
|
19
20
|
...m,
|
@@ -13,7 +13,6 @@ const PersonType = props => {
|
|
13
13
|
onChange,
|
14
14
|
users
|
15
15
|
} = useDataView();
|
16
|
-
console.log(users);
|
17
16
|
const handleChange = data => {
|
18
17
|
onChange(rowIndex, {
|
19
18
|
[property]: data?.filter(f => f?.value)
|
@@ -22,9 +21,10 @@ const PersonType = props => {
|
|
22
21
|
return /*#__PURE__*/_jsx(Select, {
|
23
22
|
value: value || [],
|
24
23
|
onChange: handleChange,
|
25
|
-
options: users,
|
24
|
+
options: users || [],
|
26
25
|
multiple: false,
|
27
|
-
disabled: readOnly
|
26
|
+
disabled: readOnly,
|
27
|
+
optionAvatar: true
|
28
28
|
});
|
29
29
|
};
|
30
30
|
export default PersonType;
|
@@ -6,7 +6,7 @@ const useFilterSortStyles = (theme, appTheme) => ({
|
|
6
6
|
background: appTheme?.palette?.editor?.tv_pop_bg,
|
7
7
|
color: appTheme?.palette?.editor?.tv_text_primary,
|
8
8
|
borderRadius: "12px",
|
9
|
-
[theme
|
9
|
+
[theme?.breakpoints?.between("xs", "md")]: {
|
10
10
|
borderRadius: "16px 16px 0px 0px",
|
11
11
|
maxHeight: "50%"
|
12
12
|
},
|
@@ -2,7 +2,6 @@ import React from "react";
|
|
2
2
|
import { Box, IconButton } from "@mui/material";
|
3
3
|
import CloseIcon from "@mui/icons-material/Close";
|
4
4
|
import PropertyList from "./PropertyList";
|
5
|
-
import { TYPE_LABELS } from "./Constants";
|
6
5
|
import ArrowBackIcon from "@mui/icons-material/ArrowBack";
|
7
6
|
import { jsx as _jsx } from "react/jsx-runtime";
|
8
7
|
import { jsxs as _jsxs } from "react/jsx-runtime";
|
@@ -16,8 +15,7 @@ const ChangeProperty = props => {
|
|
16
15
|
const onSelect = property => () => {
|
17
16
|
onEvent("updateProperty", {
|
18
17
|
...(mode?.edit || {}),
|
19
|
-
type: property?.type
|
20
|
-
label: TYPE_LABELS[mode?.type] === mode?.label ? property?.label : mode?.label
|
18
|
+
type: property?.type
|
21
19
|
});
|
22
20
|
};
|
23
21
|
const onBack = () => {
|
@@ -6,7 +6,7 @@ const useOptionsStyles = (theme, appTheme) => ({
|
|
6
6
|
borderRadius: "12px",
|
7
7
|
background: appTheme?.palette?.editor?.tv_pop_bg,
|
8
8
|
color: appTheme?.palette?.editor?.tv_text_primary,
|
9
|
-
[theme
|
9
|
+
[theme?.breakpoints?.between("xs", "md")]: {
|
10
10
|
borderRadius: "16px 16px 0px 0px",
|
11
11
|
maxHeight: "50%"
|
12
12
|
},
|
@@ -171,7 +171,7 @@ const useOptionsStyles = (theme, appTheme) => ({
|
|
171
171
|
justifyContent: "space-between",
|
172
172
|
marginBottom: "8px"
|
173
173
|
},
|
174
|
-
[theme
|
174
|
+
[theme?.breakpoints?.between("xs", "md")]: {
|
175
175
|
width: "calc(100% - 24px)"
|
176
176
|
}
|
177
177
|
}
|
@@ -3,7 +3,7 @@ const useTableStyles = (theme, appTheme) => ({
|
|
3
3
|
border: `1px solid ${appTheme?.palette?.editor?.tv_border}`,
|
4
4
|
borderRadius: "7px 7px 0px 0px",
|
5
5
|
overflowX: "auto",
|
6
|
-
[theme
|
6
|
+
[theme?.breakpoints?.between("xs", "md")]: {}
|
7
7
|
},
|
8
8
|
table: {
|
9
9
|
borderCollapse: "separate",
|
@@ -86,6 +86,18 @@ const useTableStyles = (theme, appTheme) => ({
|
|
86
86
|
"& svg": {
|
87
87
|
color: appTheme?.palette?.editor?.tv_text
|
88
88
|
}
|
89
|
+
},
|
90
|
+
"& .MuiAvatar-root": {
|
91
|
+
width: "20px",
|
92
|
+
height: "20px",
|
93
|
+
marginLeft: "8px",
|
94
|
+
fontSize: "16px",
|
95
|
+
padding: "2px",
|
96
|
+
textTransform: "capitalize"
|
97
|
+
},
|
98
|
+
"& .MuiChip-label": {
|
99
|
+
paddingLeft: "6px",
|
100
|
+
paddingRight: "8px"
|
89
101
|
}
|
90
102
|
}
|
91
103
|
},
|
@@ -34,7 +34,7 @@ const useDataViewStyles = (theme, appTheme) => ({
|
|
34
34
|
"& .mr": {
|
35
35
|
marginRight: "4px"
|
36
36
|
},
|
37
|
-
[theme
|
37
|
+
[theme?.breakpoints?.between("xs", "md")]: {
|
38
38
|
display: "flex",
|
39
39
|
flexDirection: "column"
|
40
40
|
}
|
@@ -105,13 +105,13 @@ const useDataViewStyles = (theme, appTheme) => ({
|
|
105
105
|
"& .MuiInputBase-root": {
|
106
106
|
width: "100%"
|
107
107
|
},
|
108
|
-
[theme
|
108
|
+
[theme?.breakpoints?.between("xs", "md")]: {
|
109
109
|
width: "100%",
|
110
110
|
marginRight: "0px"
|
111
111
|
}
|
112
112
|
},
|
113
113
|
"& .tv-fi-wrpr": {
|
114
|
-
[theme
|
114
|
+
[theme?.breakpoints?.between("xs", "md")]: {
|
115
115
|
width: "100%",
|
116
116
|
justifyContent: "end"
|
117
117
|
}
|
@@ -47,22 +47,22 @@ export function wrapThemeBreakpoints(sxProp, prop, theme) {
|
|
47
47
|
const formatedSxProp = Object.keys(sxProp).reduce((a, b) => {
|
48
48
|
switch (b) {
|
49
49
|
case "md":
|
50
|
-
a[theme
|
50
|
+
a[theme?.breakpoints?.up("lg")] = {
|
51
51
|
[prop]: sxProp["md"] || sxProp["lg"]
|
52
52
|
};
|
53
53
|
break;
|
54
54
|
case "sm":
|
55
|
-
a[theme
|
55
|
+
a[theme?.breakpoints?.up("lg")] = {
|
56
56
|
[prop]: sxProp["sm"] || sxProp["lg"]
|
57
57
|
};
|
58
58
|
break;
|
59
59
|
case "xs":
|
60
|
-
a[theme
|
60
|
+
a[theme?.breakpoints?.between("xs", "md")] = {
|
61
61
|
[prop]: sxProp["xs"] || sxProp["lg"]
|
62
62
|
};
|
63
63
|
break;
|
64
64
|
default:
|
65
|
-
a[theme
|
65
|
+
a[theme?.breakpoints?.up("lg")] = {
|
66
66
|
[prop]: sxProp["lg"]
|
67
67
|
};
|
68
68
|
}
|
@@ -1,7 +1,6 @@
|
|
1
1
|
import React, { useState } from "react";
|
2
2
|
import { Button, Dialog, DialogContent, DialogTitle, Grid, Tooltip, Box } from "@mui/material";
|
3
3
|
import { insertGrid, insertPlainGrid } from "../../utils/grid";
|
4
|
-
import { GridIcon } from "../../common/iconslist";
|
5
4
|
import ToolbarIcon from "../../common/ToolbarIcon";
|
6
5
|
import GridStyles from "./Styles";
|
7
6
|
import { GridElement } from "../../common/iconListV2";
|
@@ -51,18 +51,7 @@ const GridItemToolbar = props => {
|
|
51
51
|
placement: "top-end",
|
52
52
|
sx: classes.popTools,
|
53
53
|
className: "gi-tool-pp",
|
54
|
-
|
55
|
-
modifiers: [{
|
56
|
-
name: "preventOverflow",
|
57
|
-
options: {
|
58
|
-
boundary: "clippingParents" // Ensure it respects parent boundaries
|
59
|
-
}
|
60
|
-
}, {
|
61
|
-
name: "hide",
|
62
|
-
options: {
|
63
|
-
padding: 8 // Adjust padding for visibility
|
64
|
-
}
|
65
|
-
}],
|
54
|
+
disablePortal: true,
|
66
55
|
children: [/*#__PURE__*/_jsx(Tooltip, {
|
67
56
|
title: "Column Settings",
|
68
57
|
arrow: true,
|
@@ -305,24 +294,26 @@ const GridItem = props => {
|
|
305
294
|
},
|
306
295
|
"data-path": path.join(","),
|
307
296
|
"data-info": "handle-outside-editor-click",
|
308
|
-
children: [!readOnly && /*#__PURE__*/_jsxs(
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
297
|
+
children: [!readOnly && /*#__PURE__*/_jsxs(_Fragment, {
|
298
|
+
children: [/*#__PURE__*/_jsxs("div", {
|
299
|
+
className: `element-selector ${selected ? "selected" : ""}`,
|
300
|
+
contentEditable: false,
|
301
|
+
style: {
|
302
|
+
zIndex: 1000
|
303
|
+
},
|
304
|
+
children: [/*#__PURE__*/_jsx("div", {
|
305
|
+
className: "element-selector-dots tl",
|
306
|
+
children: " "
|
307
|
+
}), /*#__PURE__*/_jsx("div", {
|
308
|
+
className: "element-selector-dots tr",
|
309
|
+
children: " "
|
310
|
+
}), /*#__PURE__*/_jsx("div", {
|
311
|
+
className: "element-selector-dots bl",
|
312
|
+
children: " "
|
313
|
+
}), /*#__PURE__*/_jsx("div", {
|
314
|
+
className: "element-selector-dots br",
|
315
|
+
children: " "
|
316
|
+
})]
|
326
317
|
}), /*#__PURE__*/_jsx(GridItemToolbar, {
|
327
318
|
classes: classes,
|
328
319
|
selected: selected,
|
@@ -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);
|
@@ -1,8 +1,7 @@
|
|
1
1
|
import React from "react";
|
2
2
|
import { Select, MenuItem } from "@mui/material";
|
3
3
|
import { addMarkData, activeMark } from "../../utils/SlateUtilityFunctions.js";
|
4
|
-
import
|
5
|
-
import KeyboardArrowDownRoundedIcon from '@mui/icons-material/KeyboardArrowDownRounded';
|
4
|
+
import KeyboardArrowDownRoundedIcon from "@mui/icons-material/KeyboardArrowDownRounded";
|
6
5
|
import { jsx as _jsx } from "react/jsx-runtime";
|
7
6
|
const Dropdown = ({
|
8
7
|
classes,
|
@@ -1,7 +1,6 @@
|
|
1
1
|
import React, { useState } from "react";
|
2
2
|
import { Grid, Typography, IconButton, Tooltip, TextField, InputAdornment } from "@mui/material";
|
3
3
|
import CloseIcon from "@mui/icons-material/Close";
|
4
|
-
import OpenInFullIcon from "@mui/icons-material/OpenInFull";
|
5
4
|
import CloseFullscreenIcon from "@mui/icons-material/CloseFullscreen";
|
6
5
|
import Icon from "../../common/Icon";
|
7
6
|
import { ToggleFullScreenIcon } from "../../common/iconListV2";
|
@@ -68,14 +67,14 @@ const PopperHeader = props => {
|
|
68
67
|
justifyContent: "end",
|
69
68
|
children: [needFullscreen ? /*#__PURE__*/_jsxs(Grid, {
|
70
69
|
sx: {
|
71
|
-
position:
|
70
|
+
position: "relative"
|
72
71
|
},
|
73
72
|
className: "inputField",
|
74
73
|
children: [/*#__PURE__*/_jsx(IconButton, {
|
75
|
-
className: openSearch ?
|
74
|
+
className: openSearch ? "searchContainer" : "",
|
76
75
|
onClick: handleSearchButton,
|
77
76
|
children: /*#__PURE__*/_jsx(Icon, {
|
78
|
-
icon: openSearch ?
|
77
|
+
icon: openSearch ? "closeIcon" : "SearchIcon"
|
79
78
|
})
|
80
79
|
}), openSearch && /*#__PURE__*/_jsx(SearchBox, {
|
81
80
|
classes: classes,
|
@@ -177,11 +177,6 @@ const usePopupStyle = theme => ({
|
|
177
177
|
justifyContent: "start",
|
178
178
|
borderRadius: "10px !important",
|
179
179
|
transition: "background-color 0.3s ease",
|
180
|
-
"& .colorBoxElementIcon": {
|
181
|
-
"& path": {
|
182
|
-
fill: theme?.palette?.type === "dark" ? "none" : ""
|
183
|
-
}
|
184
|
-
},
|
185
180
|
"& .signatureElementIcon": {
|
186
181
|
"& path": {
|
187
182
|
fill: `${theme?.palette?.editor?.closeButtonSvgStroke}`
|
@@ -21,11 +21,11 @@ import TextIcon from "../assets/svg/TextIcon";
|
|
21
21
|
import AddElementIcon from "../assets/svg/AddElementIcon";
|
22
22
|
import AddTemplateIcon from "../assets/svg/AddTemplateIcon";
|
23
23
|
import OpenLinkIcon from "../assets/svg/OpenLinkIcon";
|
24
|
+
import EditIcon from "@mui/icons-material/Edit";
|
25
|
+
import DeleteIcon from "@mui/icons-material/Delete";
|
24
26
|
import { BrainIcon } from "../assets/svg/BrainIcon";
|
25
27
|
import DocsIcon from "../assets/svg/DocsIcon";
|
26
28
|
import UserIcon from "../assets/svg/UserIcon";
|
27
|
-
import EditIcon from "@mui/icons-material/Edit";
|
28
|
-
import DeleteIcon from "@mui/icons-material/Delete";
|
29
29
|
import { jsx as _jsx } from "react/jsx-runtime";
|
30
30
|
import { jsxs as _jsxs } from "react/jsx-runtime";
|
31
31
|
const iconList = {
|
@@ -276,11 +276,11 @@ const iconList = {
|
|
276
276
|
fill: "#64748B"
|
277
277
|
}
|
278
278
|
}),
|
279
|
+
editIcon: /*#__PURE__*/_jsx(EditIcon, {}),
|
280
|
+
deleteIcon: /*#__PURE__*/_jsx(DeleteIcon, {}),
|
279
281
|
brain: /*#__PURE__*/_jsx(BrainIcon, {}),
|
280
282
|
docsIcon: /*#__PURE__*/_jsx(DocsIcon, {}),
|
281
|
-
userIcon: /*#__PURE__*/_jsx(UserIcon, {})
|
282
|
-
editIcon: /*#__PURE__*/_jsx(EditIcon, {}),
|
283
|
-
deleteIcon: /*#__PURE__*/_jsx(DeleteIcon, {})
|
283
|
+
userIcon: /*#__PURE__*/_jsx(UserIcon, {})
|
284
284
|
};
|
285
285
|
export const icons = {
|
286
286
|
...iconList
|
@@ -22,7 +22,7 @@ const useGuideLineStyle = ({
|
|
22
22
|
backgroundColor: "#FFF",
|
23
23
|
pointerEvents: "none",
|
24
24
|
zIndex: 1,
|
25
|
-
[theme
|
25
|
+
[theme?.breakpoints?.between("xs", "md")]: {
|
26
26
|
left: "calc(50% - 160px)"
|
27
27
|
}
|
28
28
|
},
|
@@ -35,13 +35,13 @@ const useGuideLineStyle = ({
|
|
35
35
|
backgroundColor: "#FFF",
|
36
36
|
pointerEvents: "none",
|
37
37
|
zIndex: 1,
|
38
|
-
[theme
|
38
|
+
[theme?.breakpoints?.between("xs", "md")]: {
|
39
39
|
left: "calc(50% + 160px)"
|
40
40
|
}
|
41
41
|
},
|
42
42
|
"& .white-wrapper": {
|
43
43
|
overflowX: "hidden",
|
44
|
-
[theme
|
44
|
+
[theme?.breakpoints?.between("xs", "md")]: {
|
45
45
|
position: "absolute",
|
46
46
|
width: "calc(50% - 162px)",
|
47
47
|
height: "calc(100% - 2px)",
|
@@ -10,7 +10,7 @@ const useShadowElementStyles = ({
|
|
10
10
|
position: "relative",
|
11
11
|
backgroundColor: "rgba(0,0,0,0)",
|
12
12
|
marginLeft: `calc((100% - 980px) * 0.5)`,
|
13
|
-
[theme
|
13
|
+
[theme?.breakpoints?.between("xs", "md")]: {
|
14
14
|
marginLeft: `calc((100% - 320px) * 0.5)`
|
15
15
|
}
|
16
16
|
}
|
@@ -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,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
|
}
|