@flozy/editor 1.4.3 → 1.4.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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",