@flozy/editor 1.4.3 → 1.4.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (27) hide show
  1. package/README.md +3 -0
  2. package/dist/Editor/CommonEditor.js +124 -34
  3. package/dist/Editor/Editor.css +23 -0
  4. package/dist/Editor/Elements/AppHeader/AppHeader.js +146 -99
  5. package/dist/Editor/Elements/AppHeader/useEleveateScroll.js +53 -0
  6. package/dist/Editor/Elements/Embed/Image.js +14 -13
  7. package/dist/Editor/Elements/Grid/Grid.js +136 -12
  8. package/dist/Editor/Elements/Grid/GridItem.js +1 -5
  9. package/dist/Editor/Elements/Signature/SignatureOptions/DrawSignature.js +16 -7
  10. package/dist/Editor/Elements/Signature/SignatureOptions/UploadSignature.js +5 -8
  11. package/dist/Editor/Elements/Signature/SignaturePopup.js +28 -18
  12. package/dist/Editor/Toolbar/FormatTools/Autocomplete.js +4 -4
  13. package/dist/Editor/Toolbar/Toolbar.js +2 -1
  14. package/dist/Editor/common/DroppableOverlay.js +33 -0
  15. package/dist/Editor/common/EditorIcons.js +27 -0
  16. package/dist/Editor/common/StyleBuilder/appHeaderStyle.js +5 -0
  17. package/dist/Editor/common/StyleBuilder/fieldTypes/alignment.js +12 -7
  18. package/dist/Editor/common/StyleBuilder/fieldTypes/selectBox.js +8 -4
  19. package/dist/Editor/common/StyleBuilder/gridItemStyle.js +0 -5
  20. package/dist/Editor/common/StyleBuilder/gridStyle.js +10 -0
  21. package/dist/Editor/common/useDragAndDrop.js +83 -0
  22. package/dist/Editor/helper/index.js +15 -1
  23. package/dist/Editor/hooks/useWindowResize.js +21 -0
  24. package/dist/Editor/utils/customHooks/useResize.js +6 -4
  25. package/dist/Editor/utils/grid.js +3 -3
  26. package/dist/Editor/utils/insertAppHeader.js +1 -1
  27. package/package.json +3 -1
@@ -1,11 +1,16 @@
1
- import React, { useState } from "react";
2
- import { Transforms, Path } from "slate";
1
+ import React, { useState, useEffect } from "react";
2
+ import { Transforms, Path, Node } from "slate";
3
3
  import { useSelected, useSlateStatic, ReactEditor } from "slate-react";
4
4
  import { gridItem } from "../../utils/gridItem";
5
5
  import GridPopup from "./GridPopup";
6
6
  import { IconButton, Tooltip } from "@mui/material";
7
7
  import SettingsIcon from "@mui/icons-material/Settings";
8
8
  import AddIcon from "@mui/icons-material/Add";
9
+ import NoteAddIcon from "@mui/icons-material/NoteAdd";
10
+ import CompressIcon from "@mui/icons-material/Compress";
11
+ import { insertGrid } from "../../utils/grid";
12
+ import useDragAndDrop from "../../common/useDragAndDrop";
13
+ import useResize from "../../utils/customHooks/useResize";
9
14
  import { jsx as _jsx } from "react/jsx-runtime";
10
15
  import { jsxs as _jsxs } from "react/jsx-runtime";
11
16
  const Grid = props => {
@@ -26,7 +31,9 @@ const Grid = props => {
26
31
  bgColor,
27
32
  alignment,
28
33
  backgroundImage,
29
- borderColor
34
+ borderColor,
35
+ size: elSize,
36
+ fgColor
30
37
  } = element;
31
38
  const {
32
39
  left,
@@ -39,9 +46,45 @@ const Grid = props => {
39
46
  horizantal,
40
47
  flexDirection
41
48
  } = alignment || {};
49
+ const {
50
+ height: elHeight
51
+ } = elSize || {};
42
52
  const editor = useSlateStatic();
43
53
  const selected = useSelected();
44
54
  const path = ReactEditor.findPath(editor, element);
55
+ const [parentDOM, setParentDOM] = useState(null);
56
+
57
+ // resize
58
+ const [size, onMouseDown, resizing, onLoad] = useResize({
59
+ parentDOM,
60
+ size: element?.size,
61
+ isGrid: true
62
+ });
63
+ const arr = Array.from(Node.elements(editor));
64
+ const ele = arr.find(([elem]) => element === elem);
65
+ useEffect(() => {
66
+ if (editor && ele[1] !== undefined) {
67
+ const dom = ReactEditor.toDOMNode(editor, Node.get(editor, ele[1]));
68
+ const {
69
+ height
70
+ } = dom?.getBoundingClientRect();
71
+ setParentDOM(dom);
72
+ onLoad(element?.size || {
73
+ height: height
74
+ });
75
+ }
76
+ }, []);
77
+
78
+ // upadate resize data once resize done
79
+ useEffect(() => {
80
+ if (!resizing) {
81
+ Transforms.setNodes(editor, {
82
+ size: size
83
+ }, {
84
+ at: path
85
+ });
86
+ }
87
+ }, [resizing]);
45
88
  const onAddGridItem = () => {
46
89
  const currentPath = editor.selection?.anchor?.path;
47
90
  const ancestorsPath = Path.ancestors(currentPath, {
@@ -85,12 +128,56 @@ const Grid = props => {
85
128
  setOpenSettings(false);
86
129
  };
87
130
  const onDelete = () => {
88
- if (path) {
89
- Transforms.removeNodes(editor, {
90
- at: path
131
+ try {
132
+ if (path) {
133
+ Transforms.removeNodes(editor, {
134
+ at: path
135
+ });
136
+ }
137
+ } catch (err) {
138
+ console.log(err);
139
+ }
140
+ };
141
+ const onAddSection = (defaultGrid = null, next = true) => () => {
142
+ try {
143
+ const insertPath = next ? Path.next(path) : path;
144
+ insertGrid(editor, defaultGrid, insertPath);
145
+ } catch (err) {
146
+ console.log(err);
147
+ }
148
+ };
149
+ const onDrop = dropElement => {
150
+ try {
151
+ Transforms.insertNodes(editor, JSON.parse(dropElement), {
152
+ at: path,
153
+ select: true
91
154
  });
155
+ } catch (err) {
156
+ console.log(err);
92
157
  }
93
158
  };
159
+ const onDragEnd = () => {
160
+ try {
161
+ const currentDelpath = ReactEditor.findPath(editor, element);
162
+ if (currentDelpath) {
163
+ Transforms.removeNodes(editor, {
164
+ at: currentDelpath
165
+ });
166
+ }
167
+ } catch (err) {
168
+ console.log(err);
169
+ }
170
+ };
171
+ const grid_drag_id = `grid_drag_${path.join("_")}`;
172
+ const [dndElements, isDragging, isActiveDrag] = useDragAndDrop({
173
+ editor,
174
+ id: grid_drag_id,
175
+ selected,
176
+ path,
177
+ element,
178
+ onDragEnd,
179
+ onDrop
180
+ });
94
181
  const GridToolBar = () => {
95
182
  return selected ? /*#__PURE__*/_jsxs("div", {
96
183
  className: "grid-container-toolbar",
@@ -109,6 +196,13 @@ const Grid = props => {
109
196
  onClick: onAddGridItem,
110
197
  children: /*#__PURE__*/_jsx(AddIcon, {})
111
198
  })
199
+ }), /*#__PURE__*/_jsx(Tooltip, {
200
+ title: "Add Section",
201
+ arrow: true,
202
+ children: /*#__PURE__*/_jsx(IconButton, {
203
+ onClick: onAddSection(null, true),
204
+ children: /*#__PURE__*/_jsx(NoteAddIcon, {})
205
+ })
112
206
  })]
113
207
  }) : null;
114
208
  };
@@ -116,7 +210,7 @@ const Grid = props => {
116
210
  id
117
211
  } : {};
118
212
  return /*#__PURE__*/_jsxs("div", {
119
- className: `grid-container ${grid} element-root`,
213
+ className: `grid-container ${grid} has-hover element-root ${isDragging ? "dragging" : ""} ${isActiveDrag ? "active_drag" : ""}`,
120
214
  ...attributes,
121
215
  ...sectionId,
122
216
  style: {
@@ -125,7 +219,17 @@ const Grid = props => {
125
219
  backgroundImage: backgroundImage && backgroundImage !== "none" ? `url(${backgroundImage})` : "none",
126
220
  border: `1px solid ${borderColor}`
127
221
  },
128
- children: [!readOnly && /*#__PURE__*/_jsx("div", {
222
+ children: [fgColor && /*#__PURE__*/_jsx("div", {
223
+ style: {
224
+ position: "absolute",
225
+ pointerEvents: "none",
226
+ width: "100%",
227
+ height: "100%",
228
+ background: fgColor,
229
+ backgroundRepeat: "no-repeat",
230
+ backgroundSize: "cover"
231
+ }
232
+ }), dndElements, !readOnly && /*#__PURE__*/_jsx("div", {
129
233
  className: `element-selector ${selected ? "selected" : ""}`,
130
234
  contentEditable: false,
131
235
  children: /*#__PURE__*/_jsx(GridToolBar, {})
@@ -136,18 +240,38 @@ const Grid = props => {
136
240
  onDelete: onDelete,
137
241
  customProps: customProps
138
242
  }) : null, /*#__PURE__*/_jsx("div", {
243
+ className: "grid-c-wrpr",
139
244
  style: {
140
245
  display: "flex",
141
246
  paddingLeft: `${left}px`,
142
247
  paddingRight: `${right}px`,
143
248
  paddingTop: `${top}px`,
144
249
  paddingBottom: `${bottom}px`,
145
- alignItems: horizantal,
146
- justifyContent: horizantal,
147
- flexDirection: flexDirection,
148
- width: "100%"
250
+ alignItems: vertical || "start",
251
+ justifyContent: horizantal || "start",
252
+ flexDirection: flexDirection || "row",
253
+ width: "100%",
254
+ height: resizing ? `${size?.height}px` : elHeight ? `${elHeight}px` : "fit-content"
149
255
  },
150
256
  children: children
257
+ }), selected && !readOnly && /*#__PURE__*/_jsx(IconButton, {
258
+ onPointerDown: onMouseDown,
259
+ style: {
260
+ opacity: 1,
261
+ background: "#FFF",
262
+ position: "absolute",
263
+ left: 0,
264
+ right: 0,
265
+ bottom: "-28px",
266
+ margin: "auto",
267
+ color: "#FFF",
268
+ backgroundColor: "#2684ff",
269
+ width: "42px",
270
+ height: "42px",
271
+ zIndex: 1000
272
+ },
273
+ className: "",
274
+ children: /*#__PURE__*/_jsx(CompressIcon, {})
151
275
  })]
152
276
  });
153
277
  };
@@ -28,7 +28,6 @@ const GridItem = props => {
28
28
  borderWidth,
29
29
  borderColor,
30
30
  margin,
31
- textColorHover,
32
31
  bgColorHover,
33
32
  borderColorHover,
34
33
  textColor
@@ -108,10 +107,7 @@ const GridItem = props => {
108
107
  marginTop: `${margin?.top || 0}px`,
109
108
  marginBottom: `${margin?.bottom || 0}px`,
110
109
  "&:hover": {
111
- background: `${bgColorHover || bgColor || "transparent"}`,
112
- "& *": {
113
- color: textColorHover || textColor || "inherit"
114
- }
110
+ background: `${bgColorHover || bgColor || "transparent"}`
115
111
  }
116
112
  },
117
113
  children: [!readOnly && /*#__PURE__*/_jsx("div", {
@@ -1,23 +1,32 @@
1
- import React, { useRef } from "react";
1
+ import React, { useRef, useState } from "react";
2
2
  import SignatureCanvas from "react-signature-canvas";
3
3
  import { Grid } from "@mui/material";
4
4
  import { jsx as _jsx } from "react/jsx-runtime";
5
+ import { jsxs as _jsxs } from "react/jsx-runtime";
5
6
  const DrawSignature = props => {
6
7
  let canvasRef = useRef();
7
8
  const {
8
9
  onDataChange,
9
10
  customProps: {
10
- brush
11
+ brush,
12
+ services
11
13
  }
12
14
  } = props;
13
- const onSigned = () => {
15
+ const [uploading, setUploading] = useState(false);
16
+ const onSigned = async () => {
17
+ setUploading(true);
18
+ const strImage = canvasRef.toDataURL();
19
+ const result = await services("uploadFile", {
20
+ image: strImage
21
+ });
22
+ setUploading(false);
14
23
  onDataChange({
15
- signature: canvasRef.toDataURL()
24
+ signature: result?.imageURL || strImage
16
25
  });
17
26
  };
18
- return /*#__PURE__*/_jsx(Grid, {
27
+ return /*#__PURE__*/_jsxs(Grid, {
19
28
  container: true,
20
- children: /*#__PURE__*/_jsx(Grid, {
29
+ children: [uploading ? "Uploading..." : "", /*#__PURE__*/_jsx(Grid, {
21
30
  item: true,
22
31
  xs: 12,
23
32
  style: {
@@ -33,7 +42,7 @@ const DrawSignature = props => {
33
42
  maxWidth: brush.size || 2,
34
43
  penColor: brush?.color || "#000"
35
44
  })
36
- })
45
+ })]
37
46
  });
38
47
  };
39
48
  export default DrawSignature;
@@ -1,6 +1,5 @@
1
1
  import React, { useState } from "react";
2
2
  import { convertBase64 } from "../../../utils/helper";
3
- import { uploadFile } from "../../../service/fileupload";
4
3
  import { Grid, Typography } from "@mui/material";
5
4
  import { CloudUpload } from "../../../common/EditorIcons";
6
5
  import { jsx as _jsx } from "react/jsx-runtime";
@@ -20,15 +19,13 @@ const UploadSignature = props => {
20
19
  };
21
20
  const doUpload = async strImage => {
22
21
  setUploading(true);
23
- const result = await uploadFile({
22
+ const result = await customProps?.services("uploadFile", {
24
23
  image: strImage
25
- }, customProps);
24
+ });
26
25
  setUploading(false);
27
- if (result && result?.imageURL) {
28
- onUploadDone({
29
- signature: result?.imageURL
30
- });
31
- }
26
+ onUploadDone({
27
+ signature: result?.imageURL || strImage
28
+ });
32
29
  };
33
30
  return /*#__PURE__*/_jsxs("div", {
34
31
  className: "signature-tab",
@@ -97,24 +97,34 @@ const SignaturePopup = props => {
97
97
  p: 0,
98
98
  pb: 2
99
99
  },
100
- children: /*#__PURE__*/_jsxs("div", {
101
- style: {
102
- display: "flex",
103
- justifyContent: "space-between"
104
- },
105
- children: [/*#__PURE__*/_jsx(Typography, {
106
- variant: "h6",
107
- className: "popupTitle",
108
- color: "primary",
109
- children: "SIGNATURE"
110
- }), /*#__PURE__*/_jsx("div", {
111
- style: {
112
- display: "flex"
113
- },
114
- children: /*#__PURE__*/_jsx(IconButton, {
115
- onClick: handleClose,
116
- className: "close-popupbtn",
117
- children: /*#__PURE__*/_jsx(CloseIcon, {})
100
+ children: /*#__PURE__*/_jsxs(Grid, {
101
+ container: true,
102
+ justifyContent: "space-between",
103
+ children: [/*#__PURE__*/_jsx(Grid, {
104
+ item: true,
105
+ children: /*#__PURE__*/_jsx(Typography, {
106
+ variant: "h6",
107
+ className: "popupTitle",
108
+ color: "primary",
109
+ children: "SIGNATURE"
110
+ })
111
+ }), /*#__PURE__*/_jsx(Grid, {
112
+ item: true,
113
+ children: /*#__PURE__*/_jsxs(Grid, {
114
+ container: true,
115
+ children: [customProps?.customComponents?.signature?.header?.map((elem, index) => /*#__PURE__*/_jsx(Grid, {
116
+ sx: {
117
+ pr: 1
118
+ },
119
+ children: elem
120
+ }, index)), /*#__PURE__*/_jsx(Grid, {
121
+ item: true,
122
+ children: /*#__PURE__*/_jsx(IconButton, {
123
+ onClick: handleClose,
124
+ className: "close-popupbtn",
125
+ children: /*#__PURE__*/_jsx(CloseIcon, {})
126
+ })
127
+ })]
118
128
  })
119
129
  })]
120
130
  })
@@ -1,8 +1,8 @@
1
1
  import React from "react";
2
- import { Autocomplete, TextField } from "@mui/material";
2
+ import { Autocomplete as SelectFreeSolo, TextField } from "@mui/material";
3
3
  import { activeMark } from "../../utils/SlateUtilityFunctions.js";
4
4
  import { jsx as _jsx } from "react/jsx-runtime";
5
- const SelectFreeSolo = ({
5
+ const Autocomplete = ({
6
6
  editor,
7
7
  format,
8
8
  options
@@ -16,7 +16,7 @@ const SelectFreeSolo = ({
16
16
  // addMarkData(editor, { format, value });
17
17
  };
18
18
 
19
- return /*#__PURE__*/_jsx(Autocomplete, {
19
+ return /*#__PURE__*/_jsx(SelectFreeSolo, {
20
20
  size: "small",
21
21
  style: {},
22
22
  value: value?.value,
@@ -30,4 +30,4 @@ const SelectFreeSolo = ({
30
30
  })
31
31
  });
32
32
  };
33
- export default SelectFreeSolo;
33
+ export default Autocomplete;
@@ -132,7 +132,8 @@ const Toolbar = props => {
132
132
  }, element.id);
133
133
  case "page-settings":
134
134
  return /*#__PURE__*/_jsx(PageSettingsButton, {
135
- editor: editor
135
+ editor: editor,
136
+ customProps: customProps
136
137
  }, element.id);
137
138
  case "carousel":
138
139
  return /*#__PURE__*/_jsx(CarouselButton, {
@@ -0,0 +1,33 @@
1
+ import React from "react";
2
+ import { ReactEditor } from "slate-react";
3
+ import { jsx as _jsx } from "react/jsx-runtime";
4
+ const DroppableOverlay = ({
5
+ editor,
6
+ dragData
7
+ }) => {
8
+ const {
9
+ data: {
10
+ current: {
11
+ element
12
+ }
13
+ }
14
+ } = dragData || {
15
+ data: {
16
+ current: {
17
+ element: null
18
+ }
19
+ }
20
+ };
21
+ const dragEle = element ? ReactEditor.toDOMNode(editor, element) : null;
22
+ const {
23
+ width,
24
+ height
25
+ } = dragEle?.getBoundingClientRect() || {};
26
+ return dragEle ? /*#__PURE__*/_jsx("div", {
27
+ style: {
28
+ width: width,
29
+ height: height
30
+ }
31
+ }) : null;
32
+ };
33
+ export default DroppableOverlay;
@@ -78,4 +78,31 @@ export const CloudUpload = props => /*#__PURE__*/_jsx("svg", {
78
78
  fill: "#2563EB",
79
79
  stroke: "#2563EB"
80
80
  })
81
+ });
82
+ export const WorkFlow = () => /*#__PURE__*/_jsxs("svg", {
83
+ width: "20",
84
+ height: "21",
85
+ viewBox: "0 0 20 21",
86
+ fill: "none",
87
+ xmlns: "http://www.w3.org/2000/svg",
88
+ children: [/*#__PURE__*/_jsx("path", {
89
+ d: "M0 20.4H20V0.4H0V20.4Z",
90
+ fill: "url(#pattern0)"
91
+ }), /*#__PURE__*/_jsxs("defs", {
92
+ children: [/*#__PURE__*/_jsx("pattern", {
93
+ id: "pattern0",
94
+ patternContentUnits: "objectBoundingBox",
95
+ width: "1",
96
+ height: "1",
97
+ children: /*#__PURE__*/_jsx("use", {
98
+ href: "#image0_1919_14564",
99
+ transform: "scale(0.00625)"
100
+ })
101
+ }), /*#__PURE__*/_jsx("image", {
102
+ id: "image0_1919_14564",
103
+ width: "160",
104
+ height: "160",
105
+ href: "data:image/png;base64,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"
106
+ })]
107
+ })]
81
108
  });
@@ -34,6 +34,11 @@ const appHeaderStyle = [{
34
34
  label: "App Logo",
35
35
  key: "appLogo",
36
36
  type: "backgroundImage"
37
+ }, {
38
+ label: "Move Logo to Right",
39
+ key: "isLogoRight",
40
+ type: "selectBox",
41
+ placeholder: "Move Logo to Right"
37
42
  }]
38
43
  }, {
39
44
  tab: "General",
@@ -19,6 +19,7 @@ const Alignment = props => {
19
19
  }
20
20
  });
21
21
  };
22
+ const flexDirection = value?.flexDirection || "row";
22
23
  return /*#__PURE__*/_jsxs(Grid, {
23
24
  container: true,
24
25
  style: {
@@ -34,7 +35,7 @@ const Alignment = props => {
34
35
  children: /*#__PURE__*/_jsx(Typography, {
35
36
  variant: "body1",
36
37
  color: "primary",
37
- children: "Horizantal Position"
38
+ children: "Align Items"
38
39
  })
39
40
  }), /*#__PURE__*/_jsxs(RadioGroup, {
40
41
  row: true,
@@ -45,7 +46,7 @@ const Alignment = props => {
45
46
  children: [/*#__PURE__*/_jsx(FormControlLabel, {
46
47
  value: "start",
47
48
  control: /*#__PURE__*/_jsx(Radio, {}),
48
- label: "Left"
49
+ label: "Start"
49
50
  }), /*#__PURE__*/_jsx(FormControlLabel, {
50
51
  value: "center",
51
52
  control: /*#__PURE__*/_jsx(Radio, {}),
@@ -53,7 +54,7 @@ const Alignment = props => {
53
54
  }), /*#__PURE__*/_jsx(FormControlLabel, {
54
55
  value: "end",
55
56
  control: /*#__PURE__*/_jsx(Radio, {}),
56
- label: "Right"
57
+ label: "End"
57
58
  })]
58
59
  })]
59
60
  })
@@ -66,7 +67,7 @@ const Alignment = props => {
66
67
  children: /*#__PURE__*/_jsx(Typography, {
67
68
  variant: "body1",
68
69
  color: "primary",
69
- children: "Vertical Position"
70
+ children: "Justify Content"
70
71
  })
71
72
  }), /*#__PURE__*/_jsxs(RadioGroup, {
72
73
  row: true,
@@ -77,7 +78,7 @@ const Alignment = props => {
77
78
  children: [/*#__PURE__*/_jsx(FormControlLabel, {
78
79
  value: "start",
79
80
  control: /*#__PURE__*/_jsx(Radio, {}),
80
- label: "Top"
81
+ label: "Start"
81
82
  }), /*#__PURE__*/_jsx(FormControlLabel, {
82
83
  value: "center",
83
84
  control: /*#__PURE__*/_jsx(Radio, {}),
@@ -85,7 +86,7 @@ const Alignment = props => {
85
86
  }), /*#__PURE__*/_jsx(FormControlLabel, {
86
87
  value: "end",
87
88
  control: /*#__PURE__*/_jsx(Radio, {}),
88
- label: "Bottom"
89
+ label: "End"
89
90
  })]
90
91
  })]
91
92
  })
@@ -104,7 +105,7 @@ const Alignment = props => {
104
105
  row: true,
105
106
  "aria-labelledby": "demo-row-radio-buttons-group-label",
106
107
  name: "flexDirection",
107
- value: value?.flexDirection || "column",
108
+ value: flexDirection,
108
109
  onChange: handleChange,
109
110
  children: [/*#__PURE__*/_jsx(FormControlLabel, {
110
111
  value: "row",
@@ -114,6 +115,10 @@ const Alignment = props => {
114
115
  value: "column",
115
116
  control: /*#__PURE__*/_jsx(Radio, {}),
116
117
  label: "Column"
118
+ }), /*#__PURE__*/_jsx(FormControlLabel, {
119
+ value: "row-reverse",
120
+ control: /*#__PURE__*/_jsx(Radio, {}),
121
+ label: "Row reverse"
117
122
  })]
118
123
  })]
119
124
  })
@@ -1,6 +1,7 @@
1
1
  import React from "react";
2
- import { Grid, Checkbox, FormControlLabel } from "@mui/material";
2
+ import { Grid, Checkbox, FormControlLabel, FormHelperText } from "@mui/material";
3
3
  import { jsx as _jsx } from "react/jsx-runtime";
4
+ import { jsxs as _jsxs } from "react/jsx-runtime";
4
5
  const SelectBox = props => {
5
6
  const {
6
7
  value,
@@ -19,16 +20,19 @@ const SelectBox = props => {
19
20
  return /*#__PURE__*/_jsx(Grid, {
20
21
  container: true,
21
22
  padding: 1,
22
- children: /*#__PURE__*/_jsx(Grid, {
23
+ children: /*#__PURE__*/_jsxs(Grid, {
23
24
  item: true,
24
25
  xs: 12,
25
- children: /*#__PURE__*/_jsx(FormControlLabel, {
26
+ children: [/*#__PURE__*/_jsx(FormControlLabel, {
26
27
  control: /*#__PURE__*/_jsx(Checkbox, {
27
28
  value: value,
29
+ checked: value,
28
30
  onChange: handleChange
29
31
  }),
30
32
  label: placeholder
31
- })
33
+ }), /*#__PURE__*/_jsx(FormHelperText, {
34
+ children: data?.helperText
35
+ })]
32
36
  })
33
37
  });
34
38
  };
@@ -71,11 +71,6 @@ const gridItemStyle = [{
71
71
  tab: "Hover Colors",
72
72
  value: "hoverColors",
73
73
  fields: [{
74
- label: "Text",
75
- key: "textColorHover",
76
- type: "color",
77
- needPreview: true
78
- }, {
79
74
  label: "Background",
80
75
  key: "bgColorHover",
81
76
  type: "color"
@@ -7,6 +7,12 @@ const gridStyle = [{
7
7
  key: "id",
8
8
  type: "text",
9
9
  placeholder: "Id should be unique for the page..."
10
+ }, {
11
+ label: "Copy Grid",
12
+ key: "copyGrid",
13
+ type: "selectBox",
14
+ placeholder: "Copy Grid",
15
+ helperText: "This Grid will get copied when creating a new page from this page."
10
16
  }]
11
17
  }, {
12
18
  tab: "Padding",
@@ -63,6 +69,10 @@ const gridStyle = [{
63
69
  label: "Background",
64
70
  key: "bgColor",
65
71
  type: "color"
72
+ }, {
73
+ label: "Foreground Color",
74
+ key: "fgColor",
75
+ type: "color"
66
76
  }, {
67
77
  label: "Border",
68
78
  key: "borderColor",