@flozy/editor 1.4.0 → 1.4.1

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.
@@ -75,13 +75,15 @@ const CommonEditor = /*#__PURE__*/forwardRef((props, ref) => {
75
75
  pageProps
76
76
  } = pageSettings || {};
77
77
  const {
78
- bannerSpacing
78
+ bannerSpacing,
79
+ pageBgImage,
80
+ pageColor
79
81
  } = pageProps || {
80
82
  bannerSpacing: {
81
- left: 8,
82
- right: 8,
83
- top: 8,
84
- bottom: 8
83
+ left: 0,
84
+ right: 0,
85
+ top: 0,
86
+ bottom: 0
85
87
  }
86
88
  };
87
89
  useEffect(() => {
@@ -257,7 +259,8 @@ const CommonEditor = /*#__PURE__*/forwardRef((props, ref) => {
257
259
  className: "editor-wrapper",
258
260
  style: {
259
261
  border: "1px solid #f3f3f3",
260
- background: pageProps?.pageColor || defaultBG || "#FFF",
262
+ backgroundImage: pageBgImage ? `url(${pageBgImage})` : "none",
263
+ backgroundColor: pageColor || defaultBG || "#FFF",
261
264
  color: pageProps?.color || "#000",
262
265
  paddingLeft: `${bannerSpacing?.left}px`,
263
266
  paddingRight: `${bannerSpacing?.right}px`,
@@ -546,4 +546,4 @@ blockquote {
546
546
 
547
547
  .empty-carousel-wrapper .grid-item-toolbar {
548
548
  left: 0px;
549
- }
549
+ }
@@ -34,6 +34,9 @@ function AppHeader(props) {
34
34
  appLogo,
35
35
  menus,
36
36
  bgColor,
37
+ bgColorHover,
38
+ textColor,
39
+ textColorHover,
37
40
  menuStyle,
38
41
  bannerSpacing,
39
42
  fontSize,
@@ -210,10 +213,15 @@ function AppHeader(props) {
210
213
  component: "a",
211
214
  href: item.url,
212
215
  sx: {
213
- color: "#fff",
214
216
  fontFamily: fontFamily,
215
217
  textTransform: "none",
216
- fontSize: fontSize || "16px"
218
+ fontSize: fontSize || "16px",
219
+ color: textColor || "#FFF",
220
+ background: bgColor || "none",
221
+ "&:hover": {
222
+ color: textColorHover || textColor || "#FFF",
223
+ background: bgColorHover || bgColor || "none"
224
+ }
217
225
  },
218
226
  children: item.text
219
227
  }, item)) : null]
@@ -1,7 +1,8 @@
1
1
  import React, { useState } from "react";
2
2
  import { Transforms } from "slate";
3
3
  import { ReactEditor, useSlateStatic } from "slate-react";
4
- import { IconButton, Menu, MenuItem, Tooltip } from "@mui/material";
4
+ import { IconButton, Menu, MenuItem, Tooltip, Box } from "@mui/material";
5
+ import * as fIcons from "@mui/icons-material";
5
6
  import SettingsIcon from "@mui/icons-material/Settings";
6
7
  import OpenInNewIcon from "@mui/icons-material/OpenInNew";
7
8
  import DeleteIcon from "@mui/icons-material/Delete";
@@ -13,7 +14,8 @@ const EditorButton = props => {
13
14
  const {
14
15
  attributes,
15
16
  element,
16
- customProps
17
+ customProps,
18
+ children
17
19
  } = props;
18
20
  const {
19
21
  readOnly,
@@ -34,7 +36,11 @@ const EditorButton = props => {
34
36
  buttonLink,
35
37
  textSize,
36
38
  textAlign,
37
- fontFamily
39
+ fontFamily,
40
+ textColorHover,
41
+ bgColorHover,
42
+ buttonIcon,
43
+ iconPosition
38
44
  } = element;
39
45
  const {
40
46
  linkType,
@@ -52,6 +58,7 @@ const EditorButton = props => {
52
58
  right,
53
59
  bottom
54
60
  } = bannerSpacing || {};
61
+ const BtnIcon = buttonIcon ? fIcons[buttonIcon] : null;
55
62
  const onClick = async e => {
56
63
  if (readOnly) {
57
64
  if (metadata?.buttonLink?.handler) {
@@ -121,15 +128,19 @@ const EditorButton = props => {
121
128
  return /*#__PURE__*/_jsxs("div", {
122
129
  className: "editor-btn-wrapper",
123
130
  ...attributes,
131
+ style: {
132
+ display: "inline"
133
+ },
124
134
  children: [/*#__PURE__*/_jsx("div", {
125
135
  className: "editor-btn-wrapper-inner",
126
136
  style: {
127
- textAlign: textAlign || "left"
137
+ textAlign: textAlign || "left",
138
+ display: "inline"
128
139
  },
129
- children: /*#__PURE__*/_jsx("button", {
130
- contentEditable: false,
131
- className: "editor-btn",
132
- style: {
140
+ contentEditable: false,
141
+ children: /*#__PURE__*/_jsxs(Box, {
142
+ component: "button",
143
+ sx: {
133
144
  background: bgColor || "rgb(30, 75, 122)",
134
145
  borderWidth: "1px",
135
146
  borderBlockStyle: "solid",
@@ -141,11 +152,33 @@ const EditorButton = props => {
141
152
  paddingBottom: `${bottom || 8}px`,
142
153
  color: `${textColor || "#FFFFFF"}`,
143
154
  fontSize: textSize || "inherit",
144
- fontFamily: fontFamily || "PoppinsRegular"
155
+ fontFamily: fontFamily || "PoppinsRegular",
156
+ display: "inline-flex",
157
+ alignItems: "center",
158
+ "&:hover": {
159
+ color: `${textColorHover || textColor || "#FFFFFF"}`,
160
+ background: bgColorHover || bgColor || "rgb(30, 75, 122)"
161
+ }
145
162
  },
146
163
  onClick: onClick,
147
- children: label || "My Button"
164
+ children: [BtnIcon && iconPosition === "start" && /*#__PURE__*/_jsx(BtnIcon, {
165
+ style: {
166
+ paddingLeft: "4px",
167
+ paddingRight: "4px"
168
+ }
169
+ }), label || "My Button", BtnIcon && iconPosition === "end" && /*#__PURE__*/_jsx(BtnIcon, {
170
+ style: {
171
+ paddingLeft: "4px",
172
+ paddingRight: "4px"
173
+ }
174
+ })]
148
175
  })
176
+ }), /*#__PURE__*/_jsx("div", {
177
+ contentEditable: true,
178
+ style: {
179
+ display: "inline"
180
+ },
181
+ children: children
149
182
  }), /*#__PURE__*/_jsxs(Menu, {
150
183
  className: "editor-btn-options",
151
184
  open: anchorEl !== null,
@@ -25,10 +25,12 @@ const ChipText = props => {
25
25
  bottomLeft,
26
26
  bottomRight
27
27
  } = borderRadius || {};
28
- return /*#__PURE__*/_jsx("span", {
28
+ return /*#__PURE__*/_jsx("button", {
29
29
  ...attributes,
30
30
  className: "editor-chip-text",
31
+ contentEditable: false,
31
32
  style: {
33
+ display: "inline",
32
34
  paddingLeft: `${left}px`,
33
35
  paddingRight: `${right}px`,
34
36
  paddingTop: `${top}px`,
@@ -38,7 +40,10 @@ const ChipText = props => {
38
40
  background: bgColor || "#CCC",
39
41
  color: textColor
40
42
  },
41
- children: children
43
+ children: /*#__PURE__*/_jsx("div", {
44
+ contentEditable: true,
45
+ children: children
46
+ })
42
47
  });
43
48
  };
44
49
  export default ChipText;
@@ -53,7 +53,7 @@ const Grid = props => {
53
53
  Transforms.insertNodes(editor, [{
54
54
  ...gridItem()
55
55
  }], {
56
- at: insertPath
56
+ at: [...path, children.length]
57
57
  });
58
58
  // new line
59
59
  Transforms.insertNodes(editor, [{
@@ -31,7 +31,8 @@ const GridItem = props => {
31
31
  } = bannerSpacing || {};
32
32
  const {
33
33
  vertical,
34
- horizantal
34
+ horizantal,
35
+ flexDirection
35
36
  } = alignment || {};
36
37
  const editor = useSlateStatic();
37
38
  const selected = useSelected();
@@ -62,6 +63,7 @@ const GridItem = props => {
62
63
  const updateData = {
63
64
  ...data
64
65
  };
66
+ console.log(updateData);
65
67
  delete updateData.children;
66
68
  Transforms.setNodes(editor, {
67
69
  ...updateData
@@ -85,7 +87,7 @@ const GridItem = props => {
85
87
  ...attributes,
86
88
  style: {
87
89
  display: "flex",
88
- flexDirection: "column",
90
+ flexDirection: flexDirection || "column",
89
91
  backgroundColor: bgColor,
90
92
  alignItems: horizantal,
91
93
  justifyContent: vertical,
@@ -97,14 +99,16 @@ const GridItem = props => {
97
99
  contentEditable: false,
98
100
  children: /*#__PURE__*/_jsx(GridItemToolbar, {})
99
101
  }), /*#__PURE__*/_jsx("div", {
102
+ className: "gi-inner-cw",
100
103
  style: {
101
104
  display: "flex",
102
- flexDirection: "column",
105
+ flexDirection: flexDirection || "column",
103
106
  width: "100%",
104
107
  paddingLeft: `${left}px`,
105
108
  paddingRight: `${right}px`,
106
109
  paddingTop: `${top}px`,
107
- paddingBottom: `${bottom}px`
110
+ paddingBottom: `${bottom}px`,
111
+ justifyContent: vertical
108
112
  },
109
113
  children: children
110
114
  }), openSetttings ? /*#__PURE__*/_jsx(GridItemPopup, {
@@ -0,0 +1,144 @@
1
+ const default_grid = {
2
+ type: "grid",
3
+ grid: "container",
4
+ children: [{
5
+ type: "grid-item",
6
+ grid: 12,
7
+ children: [{
8
+ type: "alignCenter",
9
+ children: [{
10
+ type: "paragraph",
11
+ children: [{
12
+ text: "Ship Sites with Style.",
13
+ fontSize: "huge",
14
+ fontFamily: "PoppinsBold"
15
+ }]
16
+ }]
17
+ }],
18
+ bgColor: "rgba(255, 255, 255, 0)",
19
+ lockSpacing: true,
20
+ bannerSpacing: {
21
+ top: "16",
22
+ left: "16",
23
+ right: "16",
24
+ bottom: "16"
25
+ },
26
+ alignment: {
27
+ horizantal: "center"
28
+ }
29
+ }, {
30
+ type: "grid-item",
31
+ grid: 12,
32
+ children: [{
33
+ type: "alignCenter",
34
+ children: [{
35
+ type: "paragraph",
36
+ children: [{
37
+ text: "Lorem Ipsum je fiktívny text, používaný pri návrhu tlačovín a typografie. Lorem Ipsum je štandardným výplňovým textom už od 16. storočia, keď neznámy tlačiar zobral sadzobnicu plnú tlačových znakov a pomiešal ich, aby tak vytvoril vzorkovú knihu. Prežil nielen päť storočí, ale aj skok do elektronickej sadzby, a pritom zostal v podstate nezmenený. Spopularizovaný bol v 60-tych rokoch 20.storočia, vydaním hárkov Letraset, ktoré obsahovali pasáže Lorem Ipsum, a neskôr aj softvérom ako Aldus PageMaker, ktorý obsahoval verzie Lorem Ipsum."
38
+ }]
39
+ }]
40
+ }],
41
+ bgColor: "rgba(255, 255, 255, 0)",
42
+ lockSpacing: true,
43
+ bannerSpacing: {
44
+ top: "16",
45
+ left: "16",
46
+ right: "16",
47
+ bottom: "16"
48
+ }
49
+ }, {
50
+ type: "grid-item",
51
+ grid: 12,
52
+ children: [{
53
+ type: "paragraph",
54
+ children: [{
55
+ text: ""
56
+ }]
57
+ }, {
58
+ type: "paragraph",
59
+ children: [{
60
+ text: ""
61
+ }]
62
+ }, {
63
+ type: "button",
64
+ children: [{
65
+ text: " "
66
+ }],
67
+ buttonLink: {
68
+ linkType: "webAddress"
69
+ },
70
+ label: "Gettings Started",
71
+ bgColor: "rgba(192,192,192, 1)",
72
+ textColor: "rgba(0,0,0,1)",
73
+ lockSpacing: true,
74
+ bannerSpacing: {
75
+ top: "16",
76
+ left: "16",
77
+ right: "16",
78
+ bottom: "16"
79
+ },
80
+ lockRadius: true,
81
+ borderRadius: {
82
+ topLeft: "12",
83
+ topRight: "12",
84
+ bottomLeft: "12",
85
+ bottomRight: "12"
86
+ },
87
+ bgColorHover: "rgba(0, 0, 0, 1)",
88
+ textColorHover: "rgba(255, 255, 255, 1)",
89
+ borderColor: "rgba(175, 51, 242, 0)"
90
+ }, {
91
+ type: "button",
92
+ children: [{
93
+ text: ""
94
+ }],
95
+ buttonLink: {
96
+ linkType: "webAddress"
97
+ },
98
+ label: "Learn More",
99
+ bgColor: "rgba(192,192,192, 1)",
100
+ textColor: "rgba(0,0,0,1)",
101
+ lockSpacing: false,
102
+ bannerSpacing: {
103
+ top: "16",
104
+ left: "32",
105
+ right: "32",
106
+ bottom: "16"
107
+ },
108
+ lockRadius: true,
109
+ borderRadius: {
110
+ topLeft: "12",
111
+ topRight: "12",
112
+ bottomLeft: "12",
113
+ bottomRight: "12"
114
+ },
115
+ borderColor: "rgba(175, 51, 242, 0)",
116
+ bgColorHover: "rgba(0,0,0,1)",
117
+ textColorHover: "rgba(255,255,255, 1)"
118
+ }],
119
+ bgColor: "rgba(255, 255, 255, 0)",
120
+ alignment: {
121
+ flexDirection: "row",
122
+ vertical: "center",
123
+ horizantal: "center"
124
+ },
125
+ lockSpacing: true,
126
+ bannerSpacing: {
127
+ top: "16",
128
+ left: "16",
129
+ right: "16",
130
+ bottom: "16"
131
+ }
132
+ }],
133
+ alignment: {
134
+ flexDirection: "column"
135
+ },
136
+ lockSpacing: true,
137
+ bannerSpacing: {
138
+ top: "16",
139
+ left: "16",
140
+ right: "16",
141
+ bottom: "16"
142
+ }
143
+ };
144
+ export default JSON.stringify(default_grid);
@@ -54,6 +54,7 @@ const PageSettingsButton = props => {
54
54
  ...data
55
55
  };
56
56
  delete updateData.children;
57
+ console.log(openSetttings);
57
58
  if (openSetttings?.path) {
58
59
  Transforms.setNodes(editor, {
59
60
  pageProps: {
@@ -63,6 +64,7 @@ const PageSettingsButton = props => {
63
64
  at: openSetttings?.path
64
65
  });
65
66
  } else {
67
+ console.log(editor.children.length);
66
68
  Transforms.insertNodes(editor, [{
67
69
  type: "page-settings",
68
70
  pageProps: {
@@ -71,7 +73,9 @@ const PageSettingsButton = props => {
71
73
  children: [{
72
74
  text: ""
73
75
  }]
74
- }]);
76
+ }], {
77
+ at: [editor.children.length]
78
+ });
75
79
  }
76
80
  onClose();
77
81
  };
@@ -0,0 +1,33 @@
1
+ import React from "react";
2
+ import { Autocomplete, TextField } from "@mui/material";
3
+ import { activeMark } from "../../utils/SlateUtilityFunctions.js";
4
+ import { jsx as _jsx } from "react/jsx-runtime";
5
+ const SelectFreeSolo = ({
6
+ editor,
7
+ format,
8
+ options
9
+ }) => {
10
+ const value = activeMark(editor, format);
11
+ console.log(options);
12
+ const changeMarkData = (event, format) => {
13
+ event.preventDefault();
14
+ console.log(event.target.value, format);
15
+ // const value = event.target.value;
16
+ // addMarkData(editor, { format, value });
17
+ };
18
+
19
+ return /*#__PURE__*/_jsx(Autocomplete, {
20
+ size: "small",
21
+ style: {},
22
+ value: value?.value,
23
+ className: "editor-dd",
24
+ onChange: e => changeMarkData(e, format),
25
+ getOptionLabel: option => option.text,
26
+ options: options,
27
+ freeSolo: true,
28
+ renderInput: params => /*#__PURE__*/_jsx(TextField, {
29
+ ...params
30
+ })
31
+ });
32
+ };
33
+ export default SelectFreeSolo;
@@ -0,0 +1,29 @@
1
+ import React from "react";
2
+ import { TextField } from "@mui/material";
3
+ import { addMarkData, activeMark } from "../../utils/SlateUtilityFunctions.js";
4
+ import { sizeMap } from "../../utils/font.js";
5
+ import { jsx as _jsx } from "react/jsx-runtime";
6
+ const Text = ({
7
+ editor,
8
+ format,
9
+ options,
10
+ style = {}
11
+ }) => {
12
+ const value = activeMark(editor, format);
13
+ const changeMarkData = (event, format) => {
14
+ event.preventDefault();
15
+ const value = event.target.value;
16
+ addMarkData(editor, {
17
+ format,
18
+ value
19
+ });
20
+ };
21
+ return /*#__PURE__*/_jsx(TextField, {
22
+ size: "small",
23
+ style: style,
24
+ value: sizeMap[value],
25
+ className: "editor-text",
26
+ onChange: e => changeMarkData(e, format)
27
+ });
28
+ };
29
+ export default Text;
@@ -1,4 +1,6 @@
1
1
  import BlockButton from "./BlockButton";
2
2
  import Dropdown from "./Dropdown";
3
3
  import MarkButton from "./MarkButton";
4
- export { BlockButton, Dropdown, MarkButton };
4
+ import Autocomplete from "./Autocomplete";
5
+ import Text from "./Text";
6
+ export { BlockButton, Dropdown, MarkButton, Autocomplete, Text };
@@ -5,7 +5,6 @@ import { Editor, Range } from "slate";
5
5
  import { useSlate, useFocused } from "slate-react";
6
6
  import TextFormat from "./TextFormat";
7
7
  import usePopupStyle from "./PopupToolStyle";
8
- import useFormat from "../../utils/customHooks/useFormat";
9
8
  import { jsx as _jsx } from "react/jsx-runtime";
10
9
  import { jsxs as _jsxs } from "react/jsx-runtime";
11
10
  const PopupTool = () => {
@@ -18,9 +17,7 @@ const PopupTool = () => {
18
17
  } = editor;
19
18
  const open = Boolean(anchorEl);
20
19
  const id = open ? "popup-edit-tool" : "";
21
- console.log(useFormat(editor, null));
22
20
  useEffect(() => {
23
- console.log(selection, inFocus);
24
21
  if (!selection || !inFocus || Range.isCollapsed(selection) || Editor.string(editor, selection) === "") {
25
22
  setAnchorEl(null);
26
23
  } else {
@@ -20,8 +20,10 @@ import ButtonToolIcon from "../Elements/Button/ButtonToolIcon";
20
20
  import PageSettingsButton from "../Elements/PageSettings/PageSettingsButton";
21
21
  import CarouselButton from "../Elements/Carousel/CarouselButton";
22
22
  import AppHeaderButton from "../Elements/AppHeader/AppHeaderButton";
23
- import "./styles.css";
24
23
  import FormButton from "../Elements/Form/FormButton.js";
24
+ import Text from "./FormatTools/Text";
25
+ import ChipTextButton from "../Elements/ChipText/ChipTextButton";
26
+ import "./styles.css";
25
27
  import { jsx as _jsx } from "react/jsx-runtime";
26
28
  import { jsxs as _jsxs } from "react/jsx-runtime";
27
29
  const Toolbar = props => {
@@ -65,6 +67,14 @@ const Toolbar = props => {
65
67
  ...element,
66
68
  editor: editor
67
69
  }, element.id);
70
+ case "text":
71
+ return /*#__PURE__*/_jsx(Text, {
72
+ ...element,
73
+ editor: editor,
74
+ style: {
75
+ width: "80px"
76
+ }
77
+ }, element.id);
68
78
  case "link":
69
79
  return /*#__PURE__*/_jsx(LinkButton, {
70
80
  active: isBlockActive(editor, "link"),
@@ -128,14 +138,11 @@ const Toolbar = props => {
128
138
  return /*#__PURE__*/_jsx(CarouselButton, {
129
139
  editor: editor
130
140
  }, element.id);
131
- // case "chip-text":
132
- // return (
133
- // <ChipTextButton
134
- // key={element.id}
135
- // editor={editor}
136
- // customProps={customProps}
137
- // />
138
- // );
141
+ case "chip-text":
142
+ return /*#__PURE__*/_jsx(ChipTextButton, {
143
+ editor: editor,
144
+ customProps: customProps
145
+ }, element.id);
139
146
  // case "drawer":
140
147
  // return (
141
148
  // <DrawerMenuButton
@@ -80,5 +80,22 @@ const appHeaderStyle = [{
80
80
  key: "borderColor",
81
81
  type: "color"
82
82
  }]
83
+ }, {
84
+ tab: "Hover Colors",
85
+ value: "hoverColors",
86
+ fields: [{
87
+ label: "Text",
88
+ key: "textColorHover",
89
+ type: "color",
90
+ needPreview: true
91
+ }, {
92
+ label: "Background",
93
+ key: "bgColorHover",
94
+ type: "color"
95
+ }, {
96
+ label: "Border",
97
+ key: "borderColorHover",
98
+ type: "color"
99
+ }]
83
100
  }];
84
101
  export default appHeaderStyle;
@@ -39,6 +39,25 @@ const buttonStyle = [{
39
39
  key: "buttonLink",
40
40
  type: "buttonLink"
41
41
  }]
42
+ }, {
43
+ tab: "Icon",
44
+ value: "icon",
45
+ fields: [{
46
+ label: "Icon Position",
47
+ key: "iconPosition",
48
+ type: "textOptions",
49
+ options: [{
50
+ value: "start",
51
+ label: "Start"
52
+ }, {
53
+ value: "end",
54
+ label: "End"
55
+ }]
56
+ }, {
57
+ label: "Button Icons",
58
+ key: "buttonIcon",
59
+ type: "icons"
60
+ }]
42
61
  }, {
43
62
  tab: "Position",
44
63
  value: "position",
@@ -88,6 +107,23 @@ const buttonStyle = [{
88
107
  key: "borderColor",
89
108
  type: "color"
90
109
  }]
110
+ }, {
111
+ tab: "Hover Colors",
112
+ value: "hoverColors",
113
+ fields: [{
114
+ label: "Text",
115
+ key: "textColorHover",
116
+ type: "color",
117
+ needPreview: true
118
+ }, {
119
+ label: "Background",
120
+ key: "bgColorHover",
121
+ type: "color"
122
+ }, {
123
+ label: "Border",
124
+ key: "borderColorHover",
125
+ type: "color"
126
+ }]
91
127
  }, {
92
128
  tab: "Save As Template",
93
129
  value: "saveAsTemplate",
@@ -104,7 +104,7 @@ const Alignment = props => {
104
104
  row: true,
105
105
  "aria-labelledby": "demo-row-radio-buttons-group-label",
106
106
  name: "flexDirection",
107
- value: value?.flexDirection || "row",
107
+ value: value?.flexDirection || "column",
108
108
  onChange: handleChange,
109
109
  children: [/*#__PURE__*/_jsx(FormControlLabel, {
110
110
  value: "row",
@@ -0,0 +1,107 @@
1
+ import React, { useState } from "react";
2
+ import { Grid, IconButton, TextField, Tooltip } from "@mui/material";
3
+ import * as fIcons from "@mui/icons-material";
4
+ import { jsx as _jsx } from "react/jsx-runtime";
5
+ import { jsxs as _jsxs } from "react/jsx-runtime";
6
+ const MUIIcons = Object.keys(fIcons).reduce((a, b) => {
7
+ if (b.indexOf("Outlined") > -1) {
8
+ a.outlined.push(b);
9
+ } else if (b.indexOf("Rounded") > -1) {
10
+ a.rounded.push(b);
11
+ } else if (b.indexOf("Sharp") > -1) {
12
+ a.sharp.push(b);
13
+ } else if (b.indexOf("TwoTone") > -1) {
14
+ a.tt.push(b);
15
+ } else {
16
+ a.filled.push(b);
17
+ }
18
+ return a;
19
+ }, {
20
+ filled: [],
21
+ outlined: [],
22
+ rounded: [],
23
+ tt: [],
24
+ sharp: []
25
+ });
26
+ const Icons = props => {
27
+ const {
28
+ value,
29
+ data,
30
+ onChange
31
+ } = props;
32
+ const {
33
+ key
34
+ } = data;
35
+ const [val, setVal] = useState("");
36
+ const [list, setList] = useState(MUIIcons.filled.slice(0, 90));
37
+ const onSelectIcon = ico => () => {
38
+ onChange({
39
+ [key]: ico
40
+ });
41
+ };
42
+ const handleChange = e => {
43
+ const keyVal = e.target.value?.toLowerCase();
44
+ setVal(keyVal);
45
+ if (keyVal) {
46
+ setList(MUIIcons.filled.filter(f => {
47
+ return f.toLowerCase().indexOf(keyVal) > -1;
48
+ }).slice(0, 90));
49
+ } else {
50
+ setList(MUIIcons.filled.slice(0, 90));
51
+ }
52
+ };
53
+ const SelectedIcon = value ? fIcons[value] : null;
54
+ return /*#__PURE__*/_jsxs(Grid, {
55
+ container: true,
56
+ children: [/*#__PURE__*/_jsx(Grid, {
57
+ item: true,
58
+ xs: 12,
59
+ children: /*#__PURE__*/_jsxs(Grid, {
60
+ container: true,
61
+ style: {
62
+ display: "flex",
63
+ alignItems: "center",
64
+ padding: "12px"
65
+ },
66
+ children: [/*#__PURE__*/_jsx(Grid, {
67
+ item: true,
68
+ xs: 10,
69
+ children: /*#__PURE__*/_jsx(TextField, {
70
+ fullWidth: true,
71
+ size: "small",
72
+ placeholder: "Search Icons...",
73
+ value: val,
74
+ onChange: handleChange
75
+ })
76
+ }), /*#__PURE__*/_jsx(Grid, {
77
+ item: true,
78
+ xs: 2,
79
+ style: {
80
+ paddingLeft: "8px"
81
+ },
82
+ children: SelectedIcon && /*#__PURE__*/_jsx(SelectedIcon, {})
83
+ })]
84
+ })
85
+ }), /*#__PURE__*/_jsx(Grid, {
86
+ item: true,
87
+ xs: 12,
88
+ textAlign: "center",
89
+ style: {
90
+ maxHeight: "200px",
91
+ overflowY: "auto"
92
+ },
93
+ children: list.map(m => {
94
+ const Ico = fIcons[m];
95
+ return /*#__PURE__*/_jsx(Tooltip, {
96
+ title: m,
97
+ arrow: true,
98
+ children: /*#__PURE__*/_jsx(IconButton, {
99
+ onClick: onSelectIcon(m),
100
+ children: /*#__PURE__*/_jsx(Ico, {})
101
+ })
102
+ }, `mui_ico_${m}`);
103
+ })
104
+ })]
105
+ });
106
+ };
107
+ export default Icons;
@@ -13,6 +13,7 @@ import SaveAsTemplate from "./saveAsTemplate";
13
13
  import TextAlign from "./textAlign";
14
14
  import TextOptions from "./textOptions";
15
15
  import SelectBox from "./selectBox";
16
+ import Icons from "./icons";
16
17
  const FieldMap = {
17
18
  text: Text,
18
19
  bannerSpacing: BannerSpacing,
@@ -28,6 +29,7 @@ const FieldMap = {
28
29
  saveAsTemplate: SaveAsTemplate,
29
30
  textAlign: TextAlign,
30
31
  textOptions: TextOptions,
31
- selectBox: SelectBox
32
+ selectBox: SelectBox,
33
+ icons: Icons
32
34
  };
33
35
  export default FieldMap;
@@ -1,6 +1,7 @@
1
1
  import React from "react";
2
- import { Grid, MenuItem, Select } from "@mui/material";
2
+ import { FormControlLabel, Grid, MenuItem, Select } 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 TextOptions = props => {
5
6
  const {
6
7
  value,
@@ -19,13 +20,19 @@ const TextOptions = props => {
19
20
  };
20
21
  return /*#__PURE__*/_jsx(Grid, {
21
22
  container: true,
22
- children: /*#__PURE__*/_jsx(Grid, {
23
+ children: /*#__PURE__*/_jsxs(Grid, {
23
24
  item: true,
24
25
  xs: 12,
25
26
  style: {
26
27
  padding: "10px"
27
28
  },
28
- children: /*#__PURE__*/_jsx(Select, {
29
+ children: [/*#__PURE__*/_jsx("label", {
30
+ style: {
31
+ marginBottom: "8px",
32
+ display: "flex"
33
+ },
34
+ children: data?.label
35
+ }), /*#__PURE__*/_jsx(Select, {
29
36
  onChange: handleChange,
30
37
  value: value || options[0]?.value,
31
38
  placeholder: data?.label,
@@ -37,7 +44,7 @@ const TextOptions = props => {
37
44
  children: renderOption ? renderOption(m) : m.label || m.text
38
45
  }, `${key}_${m.value}`);
39
46
  })
40
- })
47
+ })]
41
48
  })
42
49
  });
43
50
  };
@@ -30,7 +30,7 @@ const StyleContent = props => {
30
30
  style: {
31
31
  marginTop: "12px"
32
32
  },
33
- children: [...fields].map(m => {
33
+ children: [...fields].map((m, i) => {
34
34
  const FieldComponent = FieldMap[m.type];
35
35
  return FieldComponent ? /*#__PURE__*/_jsx(FieldComponent, {
36
36
  data: m,
@@ -39,7 +39,7 @@ const StyleContent = props => {
39
39
  elementProps: element,
40
40
  customProps: customProps,
41
41
  handleClose: handleClose
42
- }, `ei_stt_tab_${value}_${m.key}`) : null;
42
+ }, `ei_stt_tab_${value}_${m.key}_${i}`) : null;
43
43
  })
44
44
  })
45
45
  }, value);
@@ -7,11 +7,11 @@ const pageSettingsStyle = [{
7
7
  type: "color"
8
8
  }, {
9
9
  label: "Background URL",
10
- key: "pageColor",
10
+ key: "pageBgImage",
11
11
  type: "text"
12
12
  }, {
13
13
  label: "Background Image",
14
- key: "pageColor",
14
+ key: "pageBgImage",
15
15
  type: "backgroundImage"
16
16
  }, {
17
17
  label: "Background",
@@ -166,7 +166,7 @@ export const getMarked = (leaf, children) => {
166
166
  });
167
167
  }
168
168
  if (leaf.fontSize) {
169
- const size = sizeMap[leaf.fontSize];
169
+ const size = sizeMap[leaf.fontSize] || leaf.fontSize;
170
170
  children = /*#__PURE__*/_jsx("span", {
171
171
  style: {
172
172
  fontSize: size
@@ -1,13 +1,7 @@
1
1
  import { Transforms } from "slate";
2
- import { gridItem } from "./gridItem";
2
+ import default_grid from "../Elements/Grid/templates/default_grid";
3
3
  export const insertGrid = (editor, item) => {
4
- const grid = !item ? {
5
- type: "grid",
6
- grid: "container",
7
- children: [{
8
- ...gridItem()
9
- }]
10
- } : item;
4
+ const grid = !item ? JSON.parse(default_grid) : item;
11
5
  const {
12
6
  selection
13
7
  } = editor;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flozy/editor",
3
- "version": "1.4.0",
3
+ "version": "1.4.1",
4
4
  "description": "An Editor for flozy app brain",
5
5
  "files": [
6
6
  "dist"