@flozy/editor 4.0.2 → 4.0.3
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.
- package/dist/Editor/ChatEditor.js +14 -9
- package/dist/Editor/CommonEditor.js +110 -167
- package/dist/Editor/Editor.css +3 -43
- package/dist/Editor/Elements/AI/AIInput.js +33 -31
- package/dist/Editor/Elements/AI/CustomSelect.js +12 -19
- package/dist/Editor/Elements/AI/PopoverAIInput.js +97 -73
- package/dist/Editor/Elements/AI/Styles.js +2 -2
- package/dist/Editor/Elements/AI/helper.js +3 -5
- package/dist/Editor/Elements/Accordion/AccordionSummary.js +4 -15
- package/dist/Editor/Elements/AppHeader/AppHeader.js +3 -3
- package/dist/Editor/Elements/Button/EditorButton.js +16 -28
- package/dist/Editor/Elements/Carousel/CarouselButton.js +1 -2
- package/dist/Editor/Elements/Color Picker/ColorButtons.js +15 -60
- package/dist/Editor/Elements/Color Picker/ColorPicker.css +1 -25
- package/dist/Editor/Elements/Color Picker/ColorPicker.js +4 -4
- package/dist/Editor/Elements/Color Picker/Styles.js +1 -3
- package/dist/Editor/Elements/Form/Workflow/FormWorkflow.js +3 -12
- package/dist/Editor/Elements/Form/Workflow/UserInputs.js +1 -2
- package/dist/Editor/Elements/Grid/Grid.js +0 -2
- package/dist/Editor/Elements/Grid/GridItem.js +1 -3
- package/dist/Editor/Elements/Link/Link.js +1 -6
- package/dist/Editor/Elements/Link/LinkButton.js +2 -4
- package/dist/Editor/Elements/Link/LinkPopup.js +14 -73
- package/dist/Editor/Elements/NewLine/NewLineButton.js +1 -2
- package/dist/Editor/Elements/Signature/Signature.css +6 -13
- package/dist/Editor/Elements/Signature/SignatureOptions/UploadSignature.js +1 -2
- package/dist/Editor/Elements/Signature/SignaturePopup.js +30 -185
- package/dist/Editor/Elements/SimpleText/index.js +1 -11
- package/dist/Editor/Elements/SimpleText/style.js +1 -1
- package/dist/Editor/MiniEditor.js +1 -3
- package/dist/Editor/Toolbar/Basic/index.js +2 -4
- package/dist/Editor/Toolbar/FormatTools/Dropdown.js +3 -27
- package/dist/Editor/Toolbar/FormatTools/MarkButton.js +2 -2
- package/dist/Editor/Toolbar/FormatTools/TextSize.js +13 -7
- package/dist/Editor/Toolbar/Mini/MiniToolbar.js +5 -34
- package/dist/Editor/Toolbar/PopupTool/ButtonTemplatesCard.js +13 -12
- package/dist/Editor/Toolbar/PopupTool/FullViewCard.js +13 -12
- package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/CustomSelectTool.js +0 -3
- package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/SelectFontSize.js +11 -4
- package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/SelectTypography.js +86 -213
- package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/index.js +2 -4
- package/dist/Editor/Toolbar/PopupTool/PopupToolStyle.js +44 -123
- package/dist/Editor/Toolbar/PopupTool/TextFormat.js +44 -106
- package/dist/Editor/Toolbar/PopupTool/index.js +3 -5
- package/dist/Editor/Toolbar/toolbarGroups.js +11 -53
- package/dist/Editor/assets/svg/AIIcons.js +1 -153
- package/dist/Editor/common/ColorPickerButton.js +9 -25
- package/dist/Editor/common/DnD/DragHandleButton.js +1 -1
- package/dist/Editor/common/EditorIcons.js +7 -7
- package/dist/Editor/common/Icon.js +24 -51
- package/dist/Editor/common/ImageList.js +3 -16
- package/dist/Editor/common/ImageSelector/ImageSelector.js +9 -30
- package/dist/Editor/common/ImageSelector/Styles.js +1 -2
- package/dist/Editor/common/LinkSettings/NavComponents.js +2 -5
- package/dist/Editor/common/LinkSettings/index.js +2 -4
- package/dist/Editor/common/LinkSettings/navOptions.js +2 -7
- package/dist/Editor/common/LinkSettings/style.js +8 -11
- package/dist/Editor/common/MentionsPopup/Styles.js +1 -1
- package/dist/Editor/common/Shorthands/elements.js +9 -63
- package/dist/Editor/common/StyleBuilder/buttonStyle.js +2 -4
- package/dist/Editor/common/StyleBuilder/fieldTypes/bannerSpacing.js +23 -39
- package/dist/Editor/common/StyleBuilder/fieldTypes/borderRadius.js +23 -33
- package/dist/Editor/common/StyleBuilder/fieldTypes/buttonLink.js +1 -1
- package/dist/Editor/common/StyleBuilder/fieldTypes/color.js +7 -31
- package/dist/Editor/common/StyleBuilder/fieldTypes/fontSize.js +4 -13
- package/dist/Editor/common/StyleBuilder/fieldTypes/textOptions.js +4 -14
- package/dist/Editor/common/StyleBuilder/index.js +1 -1
- package/dist/Editor/commonStyle.js +0 -6
- package/dist/Editor/helper/theme.js +4 -191
- package/dist/Editor/hooks/useMouseMove.js +1 -4
- package/dist/Editor/hooks/useWindowMessage.js +7 -10
- package/dist/Editor/plugins/withEmbeds.js +1 -1
- package/dist/Editor/plugins/withHTML.js +1 -1
- package/dist/Editor/plugins/withTable.js +1 -1
- package/dist/Editor/theme/ThemeList.js +173 -50
- package/dist/Editor/utils/SlateUtilityFunctions.js +25 -161
- package/dist/Editor/utils/button.js +17 -1
- package/dist/Editor/utils/font.js +37 -40
- package/dist/Editor/utils/helper.js +1 -30
- package/package.json +1 -2
- package/dist/Editor/Elements/AI/VoiceToText/AudioWave.js +0 -73
- package/dist/Editor/Elements/AI/VoiceToText/index.js +0 -184
- package/dist/Editor/Elements/AI/VoiceToText/style.js +0 -40
- package/dist/Editor/Elements/Link/LinkPopupStyles.js +0 -28
- package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/SelectSuperSubscript.js +0 -59
- package/dist/Editor/Toolbar/PopupTool/ThemeTextFormat.js +0 -438
- package/dist/Editor/assets/svg/ThemeIcons.js +0 -291
- package/dist/Editor/common/CustomColorPicker/index.js +0 -106
- package/dist/Editor/common/CustomColorPicker/style.js +0 -53
- package/dist/Editor/common/CustomDialog/index.js +0 -94
- package/dist/Editor/common/CustomDialog/style.js +0 -67
- package/dist/Editor/common/CustomSelect.js +0 -33
- package/dist/Editor/common/iconListV2.js +0 -843
- package/dist/Editor/hooks/useEditorTheme.js +0 -139
- package/dist/Editor/theme/index.js +0 -144
- package/dist/Editor/themeSettings/ActiveTheme.js +0 -72
- package/dist/Editor/themeSettings/buttons/index.js +0 -290
- package/dist/Editor/themeSettings/buttons/style.js +0 -21
- package/dist/Editor/themeSettings/colorTheme/index.js +0 -290
- package/dist/Editor/themeSettings/colorTheme/style.js +0 -77
- package/dist/Editor/themeSettings/fonts/PreviewElement.js +0 -123
- package/dist/Editor/themeSettings/fonts/index.js +0 -213
- package/dist/Editor/themeSettings/fonts/style.js +0 -44
- package/dist/Editor/themeSettings/icons.js +0 -60
- package/dist/Editor/themeSettings/index.js +0 -320
- package/dist/Editor/themeSettings/style.js +0 -152
- package/dist/Editor/themeSettingsAI/icons.js +0 -96
- package/dist/Editor/themeSettingsAI/index.js +0 -356
- package/dist/Editor/themeSettingsAI/saveTheme.js +0 -190
- package/dist/Editor/themeSettingsAI/style.js +0 -247
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Editor, Transforms, Element as SlateElement
|
|
1
|
+
import { Editor, Transforms, Element as SlateElement } from "slate";
|
|
2
2
|
import { Box } from "@mui/material";
|
|
3
3
|
import { fontFamilyMap, sizeMap } from "./font";
|
|
4
4
|
import Link from "../Elements/Link/Link";
|
|
@@ -34,12 +34,12 @@ import SimpleText from "../Elements/SimpleText";
|
|
|
34
34
|
import CheckList from "../Elements/List/CheckList";
|
|
35
35
|
import { isEmptyTextNode } from "../helper";
|
|
36
36
|
import Attachments from "../Elements/Attachments/Attachments";
|
|
37
|
-
import { getBreakPointsValue
|
|
37
|
+
import { getBreakPointsValue } from "../helper/theme";
|
|
38
38
|
import Variables from "../Elements/Variables/Variable";
|
|
39
|
+
import insertNewLine from "./insertNewLine";
|
|
39
40
|
import Divider from "../Elements/Divider/Divider";
|
|
40
41
|
import { getBorderColor } from "./helper";
|
|
41
42
|
import Code from "../Elements/EmbedScript/Code";
|
|
42
|
-
import { ReactEditor } from "slate-react";
|
|
43
43
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
44
44
|
const alignment = ["alignLeft", "alignRight", "alignCenter"];
|
|
45
45
|
const list_types = ["orderedList", "unorderedList"];
|
|
@@ -47,17 +47,7 @@ const LIST_FORMAT_TYPE = {
|
|
|
47
47
|
orderedList: "list-item",
|
|
48
48
|
unorderedList: "list-item"
|
|
49
49
|
};
|
|
50
|
-
|
|
51
|
-
// const NEWLINESAFTER = [
|
|
52
|
-
// "headingOne",
|
|
53
|
-
// "headingTwo",
|
|
54
|
-
// "headingThree",
|
|
55
|
-
// "headingFour",
|
|
56
|
-
// "headingFive",
|
|
57
|
-
// "headingSix",
|
|
58
|
-
// ];
|
|
59
|
-
|
|
60
|
-
const THEME_BLOCK_FIELDS = ["headingOne", "headingTwo", "headingThree", "headingFour", "headingFive", "headingSix", "paragraphOne", "paragraphTwo", "paragraphThree"];
|
|
50
|
+
const NEWLINESAFTER = ["headingOne", "headingTwo", "headingThree"];
|
|
61
51
|
export const toggleBlock = (editor, format, selection = true, attr = {}) => {
|
|
62
52
|
const isActive = isBlockActive(editor, format);
|
|
63
53
|
const isList = list_types.includes(format);
|
|
@@ -90,9 +80,8 @@ export const toggleBlock = (editor, format, selection = true, attr = {}) => {
|
|
|
90
80
|
if (!selection) {
|
|
91
81
|
Transforms.insertText(editor, "");
|
|
92
82
|
}
|
|
93
|
-
const forActiveType = THEME_BLOCK_FIELDS.some(f => f === format) ? format : "paragraph";
|
|
94
83
|
Transforms.setNodes(editor, {
|
|
95
|
-
type: isActive ?
|
|
84
|
+
type: isActive ? "paragraph" : isList ? LIST_FORMAT_TYPE[format] : format,
|
|
96
85
|
...attr
|
|
97
86
|
});
|
|
98
87
|
if (isList && !isActive) {
|
|
@@ -101,12 +90,10 @@ export const toggleBlock = (editor, format, selection = true, attr = {}) => {
|
|
|
101
90
|
children: []
|
|
102
91
|
});
|
|
103
92
|
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
// }
|
|
93
|
+
if (NEWLINESAFTER.indexOf(format) > -1) {
|
|
94
|
+
insertNewLine(editor);
|
|
95
|
+
}
|
|
108
96
|
};
|
|
109
|
-
|
|
110
97
|
export const addMarkData = (editor, data) => {
|
|
111
98
|
try {
|
|
112
99
|
Editor.addMark(editor, data.format, data.value);
|
|
@@ -115,14 +102,9 @@ export const addMarkData = (editor, data) => {
|
|
|
115
102
|
}
|
|
116
103
|
};
|
|
117
104
|
export const toggleMark = (editor, format) => {
|
|
118
|
-
const isActive =
|
|
105
|
+
const isActive = isMarkActive(editor, format);
|
|
119
106
|
if (isActive) {
|
|
120
|
-
|
|
121
|
-
if (isThemeSupportedMark) {
|
|
122
|
-
Editor.addMark(editor, format, false);
|
|
123
|
-
} else {
|
|
124
|
-
Editor.removeMark(editor, format);
|
|
125
|
-
}
|
|
107
|
+
Editor.removeMark(editor, format);
|
|
126
108
|
} else {
|
|
127
109
|
Editor.addMark(editor, format, true);
|
|
128
110
|
}
|
|
@@ -136,53 +118,6 @@ export const isMarkActive = (editor, format) => {
|
|
|
136
118
|
return null;
|
|
137
119
|
}
|
|
138
120
|
};
|
|
139
|
-
export const isMarkBtnActive = (editor, format) => {
|
|
140
|
-
switch (format) {
|
|
141
|
-
case "bold":
|
|
142
|
-
{
|
|
143
|
-
const style = getSelectedElementStyle("font-weight", editor);
|
|
144
|
-
return style === "700";
|
|
145
|
-
}
|
|
146
|
-
case "italic":
|
|
147
|
-
{
|
|
148
|
-
const style = getSelectedElementStyle("font-style", editor);
|
|
149
|
-
return style === format;
|
|
150
|
-
}
|
|
151
|
-
// case "underline": {
|
|
152
|
-
// const style = getSelectedElementStyle("text-decoration");
|
|
153
|
-
|
|
154
|
-
// return style?.includes(format);
|
|
155
|
-
// }
|
|
156
|
-
// case "strikethrough": {
|
|
157
|
-
// const style = getSelectedElementStyle("text-decoration");
|
|
158
|
-
|
|
159
|
-
// return style?.includes("line-through");
|
|
160
|
-
// }
|
|
161
|
-
default:
|
|
162
|
-
return isMarkActive(editor, format);
|
|
163
|
-
}
|
|
164
|
-
};
|
|
165
|
-
export const getSelectedElementStyle = (styleProperty, editor) => {
|
|
166
|
-
try {
|
|
167
|
-
if (!editor.selection) {
|
|
168
|
-
return "";
|
|
169
|
-
}
|
|
170
|
-
if (Range.isCollapsed(editor.selection)) {
|
|
171
|
-
return "";
|
|
172
|
-
}
|
|
173
|
-
const domRange = ReactEditor.toDOMRange(editor, editor.selection);
|
|
174
|
-
const selectedDomNode = domRange.commonAncestorContainer;
|
|
175
|
-
|
|
176
|
-
// If it's a text node, get its parent element
|
|
177
|
-
const selectedElement = selectedDomNode.nodeType === 3 ? selectedDomNode.parentElement : selectedDomNode;
|
|
178
|
-
if (selectedElement) {
|
|
179
|
-
const computedStyle = window.getComputedStyle(selectedElement);
|
|
180
|
-
return computedStyle.getPropertyValue(styleProperty) || "";
|
|
181
|
-
}
|
|
182
|
-
} catch (err) {
|
|
183
|
-
console.log(err);
|
|
184
|
-
}
|
|
185
|
-
};
|
|
186
121
|
export const isBlockActive = (editor, format) => {
|
|
187
122
|
const [match] = Editor.nodes(editor, {
|
|
188
123
|
match: n => !Editor.isEditor(n) && SlateElement.isElement(n) && n.type === format
|
|
@@ -225,31 +160,6 @@ export const activeMark = (editor, format) => {
|
|
|
225
160
|
return null;
|
|
226
161
|
}
|
|
227
162
|
};
|
|
228
|
-
|
|
229
|
-
// to avoid the styles, that automatically assign from themes
|
|
230
|
-
const getThemeMarkedLeaf = (leaf, children) => {
|
|
231
|
-
const {
|
|
232
|
-
italic,
|
|
233
|
-
bold
|
|
234
|
-
} = leaf || {};
|
|
235
|
-
const style = {};
|
|
236
|
-
if (italic === false) {
|
|
237
|
-
style.fontStyle = "normal";
|
|
238
|
-
}
|
|
239
|
-
if (bold === false) {
|
|
240
|
-
style.fontWeight = "normal";
|
|
241
|
-
}
|
|
242
|
-
if (Object.keys(style).length) {
|
|
243
|
-
children = /*#__PURE__*/_jsx(Box, {
|
|
244
|
-
component: "span",
|
|
245
|
-
sx: {
|
|
246
|
-
"& span": style
|
|
247
|
-
},
|
|
248
|
-
children: children
|
|
249
|
-
});
|
|
250
|
-
}
|
|
251
|
-
return children;
|
|
252
|
-
};
|
|
253
163
|
export const getMarked = (leaf, children) => {
|
|
254
164
|
const className = leaf?.doublequote ? "doublequote" : "";
|
|
255
165
|
if (leaf.bold) {
|
|
@@ -267,7 +177,6 @@ export const getMarked = (leaf, children) => {
|
|
|
267
177
|
children: children
|
|
268
178
|
});
|
|
269
179
|
}
|
|
270
|
-
children = getThemeMarkedLeaf(leaf, children);
|
|
271
180
|
if (leaf.strikethrough) {
|
|
272
181
|
children = /*#__PURE__*/_jsx("span", {
|
|
273
182
|
style: {
|
|
@@ -301,22 +210,17 @@ export const getMarked = (leaf, children) => {
|
|
|
301
210
|
} : {
|
|
302
211
|
color: leaf.color
|
|
303
212
|
};
|
|
304
|
-
const fontSize = {
|
|
305
|
-
lg: sizeMap[leaf.fontSize] || leaf.fontSize,
|
|
306
|
-
...getBreakPointsValue(leaf.fontSize, null, "overrideText")
|
|
307
|
-
};
|
|
308
|
-
const fontSizesImportant = {};
|
|
309
|
-
Object.entries(fontSize).forEach(([key, value]) => {
|
|
310
|
-
fontSizesImportant[key] = `${value} !important`;
|
|
311
|
-
});
|
|
312
213
|
children = /*#__PURE__*/_jsx("span", {
|
|
214
|
+
style: {
|
|
215
|
+
background: leaf.bgColor
|
|
216
|
+
},
|
|
313
217
|
children: /*#__PURE__*/_jsx(Box, {
|
|
314
218
|
className: className,
|
|
315
219
|
component: "span",
|
|
316
220
|
sx: {
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
221
|
+
fontSize: {
|
|
222
|
+
lg: sizeMap[leaf.fontSize] || leaf.fontSize,
|
|
223
|
+
...getBreakPointsValue(leaf.fontSize, null, "overrideText")
|
|
320
224
|
},
|
|
321
225
|
...textStyles,
|
|
322
226
|
fontFamily: family,
|
|
@@ -346,71 +250,31 @@ export const getBlock = props => {
|
|
|
346
250
|
} = props;
|
|
347
251
|
const attributes = props.attributes ?? {};
|
|
348
252
|
const isEmpty = isEmptyTextNode(element);
|
|
349
|
-
const commonHeadingProps = () => ({
|
|
350
|
-
...attributes,
|
|
351
|
-
...element.attr,
|
|
352
|
-
className: `content-editable ${isEmpty ? "empty" : ""} theme-element`
|
|
353
|
-
});
|
|
354
|
-
const commonParaProps = paraType => ({
|
|
355
|
-
...attributes,
|
|
356
|
-
...element.attr,
|
|
357
|
-
className: `content-editable ${isEmpty ? "empty" : ""} theme-element ${paraType}`
|
|
358
|
-
});
|
|
359
253
|
switch (element.type) {
|
|
360
254
|
case "headingOne":
|
|
361
255
|
return /*#__PURE__*/_jsx("h1", {
|
|
362
|
-
...
|
|
256
|
+
...attributes,
|
|
257
|
+
...element.attr,
|
|
258
|
+
className: `content-editable ${isEmpty ? "empty" : ""}`,
|
|
363
259
|
placeholder: "Heading 1",
|
|
364
260
|
children: children
|
|
365
261
|
});
|
|
366
262
|
case "headingTwo":
|
|
367
263
|
return /*#__PURE__*/_jsx("h2", {
|
|
368
|
-
...
|
|
264
|
+
...attributes,
|
|
265
|
+
...element.attr,
|
|
266
|
+
className: `content-editable ${isEmpty ? "empty" : ""}`,
|
|
369
267
|
placeholder: "Heading 2",
|
|
370
268
|
children: children
|
|
371
269
|
});
|
|
372
270
|
case "headingThree":
|
|
373
271
|
return /*#__PURE__*/_jsx("h3", {
|
|
374
|
-
...
|
|
272
|
+
...attributes,
|
|
273
|
+
...element.attr,
|
|
274
|
+
className: `content-editable ${isEmpty ? "empty" : ""}`,
|
|
375
275
|
placeholder: "Heading 3",
|
|
376
276
|
children: children
|
|
377
277
|
});
|
|
378
|
-
case "headingFour":
|
|
379
|
-
return /*#__PURE__*/_jsx("h4", {
|
|
380
|
-
...commonHeadingProps(),
|
|
381
|
-
placeholder: "Heading 4",
|
|
382
|
-
children: children
|
|
383
|
-
});
|
|
384
|
-
case "headingFive":
|
|
385
|
-
return /*#__PURE__*/_jsx("h5", {
|
|
386
|
-
...commonHeadingProps(),
|
|
387
|
-
placeholder: "Heading 5",
|
|
388
|
-
children: children
|
|
389
|
-
});
|
|
390
|
-
case "headingSix":
|
|
391
|
-
return /*#__PURE__*/_jsx("h6", {
|
|
392
|
-
...commonHeadingProps(),
|
|
393
|
-
placeholder: "Heading 6",
|
|
394
|
-
children: children
|
|
395
|
-
});
|
|
396
|
-
case "paragraphOne":
|
|
397
|
-
return /*#__PURE__*/_jsx("p", {
|
|
398
|
-
...commonParaProps("para1"),
|
|
399
|
-
placeholder: "Paragraph 1",
|
|
400
|
-
children: children
|
|
401
|
-
});
|
|
402
|
-
case "paragraphTwo":
|
|
403
|
-
return /*#__PURE__*/_jsx("p", {
|
|
404
|
-
...commonParaProps("para2"),
|
|
405
|
-
placeholder: "Paragraph 2",
|
|
406
|
-
children: children
|
|
407
|
-
});
|
|
408
|
-
case "paragraphThree":
|
|
409
|
-
return /*#__PURE__*/_jsx("p", {
|
|
410
|
-
...commonParaProps("para3"),
|
|
411
|
-
placeholder: "Paragraph 3",
|
|
412
|
-
children: children
|
|
413
|
-
});
|
|
414
278
|
case "blockquote":
|
|
415
279
|
return /*#__PURE__*/_jsx("blockquote", {
|
|
416
280
|
...attributes,
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Transforms } from "slate";
|
|
2
2
|
import insertNewLine from "./insertNewLine";
|
|
3
|
+
import { windowVar } from "./helper";
|
|
3
4
|
export const insertButton = editor => {
|
|
4
5
|
const button = {
|
|
5
6
|
type: "button",
|
|
@@ -9,7 +10,22 @@ export const insertButton = editor => {
|
|
|
9
10
|
buttonLink: {
|
|
10
11
|
linkType: "webAddress"
|
|
11
12
|
},
|
|
12
|
-
iconPosition: "start"
|
|
13
|
+
iconPosition: "start",
|
|
14
|
+
bgColor: "#2563EB",
|
|
15
|
+
textColor: "#FFF",
|
|
16
|
+
borderRadius: {
|
|
17
|
+
topLeft: 30,
|
|
18
|
+
topRight: 30,
|
|
19
|
+
bottomLeft: 30,
|
|
20
|
+
bottomRight: 30
|
|
21
|
+
},
|
|
22
|
+
bannerSpacing: {
|
|
23
|
+
left: 16,
|
|
24
|
+
top: 8,
|
|
25
|
+
right: 16,
|
|
26
|
+
bottom: 8
|
|
27
|
+
},
|
|
28
|
+
...(windowVar.lastButtonProps || {})
|
|
13
29
|
};
|
|
14
30
|
Transforms.insertNodes(editor, button);
|
|
15
31
|
Transforms.move(editor);
|
|
@@ -7,43 +7,43 @@ export const sizeMap = {
|
|
|
7
7
|
export const fontFamilyMap = {
|
|
8
8
|
PoppinsRegular: "PoppinsRegular",
|
|
9
9
|
PoppinsBold: "PoppinsBold",
|
|
10
|
-
sans:
|
|
11
|
-
serif:
|
|
12
|
-
monospace:
|
|
13
|
-
roboto: "Roboto, sans-serif",
|
|
14
|
-
qwitcher: '
|
|
15
|
-
garamond: '
|
|
16
|
-
anton: "Anton, sans-serif",
|
|
17
|
-
dmserif: '
|
|
18
|
-
inter: "Inter, sans-serif",
|
|
19
|
-
libre: '
|
|
20
|
-
montserrat: "Montserrat, sans-serif",
|
|
21
|
-
opensans: '
|
|
22
|
-
publicsans: '
|
|
23
|
-
raleway: "Raleway, sans-serif",
|
|
24
|
-
spacemono: '
|
|
25
|
-
bulgarian: '
|
|
26
|
-
impact: "Impact, serif",
|
|
27
|
-
redacted: '
|
|
28
|
-
greatVibes: '
|
|
29
|
-
zeyada: "Zeyada, cursive",
|
|
30
|
-
allura: "Allura, cursive",
|
|
31
|
-
pinyon: '
|
|
32
|
-
muellerhoff: '
|
|
33
|
-
dawning: '
|
|
10
|
+
sans: "Helvetica,Arial, sans serif",
|
|
11
|
+
serif: "Georgia, Times New Roaman,serif",
|
|
12
|
+
monospace: "Monaco, Courier New,monospace",
|
|
13
|
+
roboto: "'Roboto', sans-serif",
|
|
14
|
+
qwitcher: "'Qwitcher Grypen', cursive",
|
|
15
|
+
garamond: "'EB Garamond', serif",
|
|
16
|
+
anton: "'Anton', sans-serif",
|
|
17
|
+
dmserif: "'DM Serif Text', serif",
|
|
18
|
+
inter: "'Inter', sans-serif",
|
|
19
|
+
libre: "'Libre Baskerville', serif",
|
|
20
|
+
montserrat: "'Montserrat', sans-serif",
|
|
21
|
+
opensans: "'Open Sans', sans-serif",
|
|
22
|
+
publicsans: "'Public Sans', sans-serif",
|
|
23
|
+
raleway: "'Raleway', sans-serif",
|
|
24
|
+
spacemono: "'Space Mono', sans-serif",
|
|
25
|
+
bulgarian: "'Bulgarian Garamond', monospace",
|
|
26
|
+
impact: "'Impact', serif",
|
|
27
|
+
redacted: "'Redacted Script', cursive",
|
|
28
|
+
greatVibes: "'Great Vibes', cursive",
|
|
29
|
+
zeyada: "'Zeyada', cursive",
|
|
30
|
+
allura: "'Allura', cursive",
|
|
31
|
+
pinyon: "'Pinyon Script', cursive",
|
|
32
|
+
muellerhoff: "'Herr Von Muellerhoff', cursive",
|
|
33
|
+
dawning: "'Dawning of a New Day', cursive",
|
|
34
34
|
// New Font Added for Type Signature
|
|
35
|
-
comingsoon: '
|
|
36
|
-
dancingScript: '
|
|
37
|
-
engagement: "Engagement, cursive",
|
|
38
|
-
gaegu: "Gaegu, cursive",
|
|
39
|
-
ingridDarling: '
|
|
40
|
-
kitaOne: "
|
|
41
|
-
laBelleAurore: '
|
|
42
|
-
lobster: "Lobster, cursive",
|
|
43
|
-
meaCulpa: '
|
|
44
|
-
meddon: "Meddon, cursive",
|
|
45
|
-
merriWeather: "Merriweather, serif",
|
|
46
|
-
theGirlNextDoor: '
|
|
35
|
+
comingsoon: "'Coming Soon', cursive",
|
|
36
|
+
dancingScript: "'Dancing Script', cursive",
|
|
37
|
+
engagement: "'Engagement', cursive",
|
|
38
|
+
gaegu: "'Gaegu', cursive",
|
|
39
|
+
ingridDarling: "'Ingrid Darling', cursive",
|
|
40
|
+
kitaOne: "'Kite One', sans - serif",
|
|
41
|
+
laBelleAurore: "'La Belle Aurore', cursive",
|
|
42
|
+
lobster: "'Lobster', cursive",
|
|
43
|
+
meaCulpa: "'Mea Culpa', cursive",
|
|
44
|
+
meddon: "'Meddon', cursive",
|
|
45
|
+
merriWeather: "'Merriweather', serif",
|
|
46
|
+
theGirlNextDoor: "'The Girl Next Door', cursive"
|
|
47
47
|
};
|
|
48
48
|
export const fontOptions = Object.keys(fontFamilyMap).map(m => {
|
|
49
49
|
return {
|
|
@@ -62,8 +62,5 @@ export const signedTextFonts = Object.keys(fontFamilyMap).slice(-12).map(m => {
|
|
|
62
62
|
export const headingMap = {
|
|
63
63
|
"headingOne": "32px",
|
|
64
64
|
"headingTwo": "24px",
|
|
65
|
-
"headingThree": "19px"
|
|
66
|
-
"headingFour": "16px",
|
|
67
|
-
"headingFive": "13px",
|
|
68
|
-
"headingSix": "11px"
|
|
65
|
+
"headingThree": "19px"
|
|
69
66
|
};
|
|
@@ -246,8 +246,7 @@ export const handleLinkType = (url, linkType, readOnly, openInNewTab, onClick =
|
|
|
246
246
|
props.target = "_blank";
|
|
247
247
|
}
|
|
248
248
|
break;
|
|
249
|
-
case "
|
|
250
|
-
case "prevTrigger":
|
|
249
|
+
case "actionTrigger":
|
|
251
250
|
if (!readOnly) {
|
|
252
251
|
props.component = "button";
|
|
253
252
|
props.onClick = () => {};
|
|
@@ -379,34 +378,6 @@ export const decodeString = str => {
|
|
|
379
378
|
console.log(err);
|
|
380
379
|
}
|
|
381
380
|
};
|
|
382
|
-
export const getContrastColor = color => {
|
|
383
|
-
let r, g, b;
|
|
384
|
-
|
|
385
|
-
// Check if the color is in hex format
|
|
386
|
-
if (color.startsWith("#")) {
|
|
387
|
-
r = parseInt(color.substring(1, 3), 16);
|
|
388
|
-
g = parseInt(color.substring(3, 5), 16);
|
|
389
|
-
b = parseInt(color.substring(5, 7), 16);
|
|
390
|
-
}
|
|
391
|
-
// Check if the color is in RGB/RGBA format
|
|
392
|
-
else if (color.startsWith("rgb")) {
|
|
393
|
-
const rgbValues = color.replace(/^rgba?\(|\s+|\)$/g, "") // Remove the rgb/rgba and spaces
|
|
394
|
-
.split(","); // Split the values into an array
|
|
395
|
-
|
|
396
|
-
r = parseInt(rgbValues[0]);
|
|
397
|
-
g = parseInt(rgbValues[1]);
|
|
398
|
-
b = parseInt(rgbValues[2]);
|
|
399
|
-
} else {
|
|
400
|
-
// If the format is not recognized, default to black text
|
|
401
|
-
return "#000000";
|
|
402
|
-
}
|
|
403
|
-
|
|
404
|
-
// Calculate relative luminance
|
|
405
|
-
const luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255;
|
|
406
|
-
|
|
407
|
-
// Return black for light colors, white for dark colors
|
|
408
|
-
return luminance > 0.5 ? "#000000" : "#FFFFFF";
|
|
409
|
-
};
|
|
410
381
|
export const onDeleteKey = (event, {
|
|
411
382
|
editor
|
|
412
383
|
}) => {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flozy/editor",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.3",
|
|
4
4
|
"description": "An Editor for flozy app brain",
|
|
5
5
|
"files": [
|
|
6
6
|
"dist"
|
|
@@ -46,7 +46,6 @@
|
|
|
46
46
|
"slate-react": "^0.98.3",
|
|
47
47
|
"styled-components": "^5.3.11",
|
|
48
48
|
"use-debounce": "^10.0.0",
|
|
49
|
-
"wavesurfer.js": "^7.8.6",
|
|
50
49
|
"web-vitals": "^2.1.4",
|
|
51
50
|
"y-websocket": "^1.5.0",
|
|
52
51
|
"yjs": "^13.6.8"
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
import { Box } from "@mui/material";
|
|
2
|
-
import { useEffect, useRef, useState } from "react";
|
|
3
|
-
import WaveSurfer from "wavesurfer.js";
|
|
4
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
5
|
-
const SoundWave = props => {
|
|
6
|
-
const {
|
|
7
|
-
audioChunks = null
|
|
8
|
-
} = props; // Initialize to null if not provided
|
|
9
|
-
const waveContent = useRef(null);
|
|
10
|
-
const wavesurfer = useRef(null);
|
|
11
|
-
const [playOnce, setPlayOnce] = useState(false);
|
|
12
|
-
useEffect(() => {
|
|
13
|
-
if (waveContent.current) {
|
|
14
|
-
if (wavesurfer.current) {
|
|
15
|
-
wavesurfer.current.destroy();
|
|
16
|
-
}
|
|
17
|
-
wavesurfer.current = WaveSurfer.create({
|
|
18
|
-
container: waveContent.current,
|
|
19
|
-
waveColor: "#2563EB",
|
|
20
|
-
progressColor: "#2563EB",
|
|
21
|
-
cursorWidth: 0,
|
|
22
|
-
// Disable the cursor
|
|
23
|
-
barWidth: 2,
|
|
24
|
-
barGap: 1,
|
|
25
|
-
barRadius: 2,
|
|
26
|
-
scrollParent: false,
|
|
27
|
-
// Prevent scrolling
|
|
28
|
-
height: waveContent.current.clientHeight // Set height to fit container
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
// Fit the waveform to the container width
|
|
32
|
-
const resize = () => {
|
|
33
|
-
if (wavesurfer.current) {
|
|
34
|
-
const containerWidth = waveContent.current.clientWidth;
|
|
35
|
-
const duration = wavesurfer.current.getDuration();
|
|
36
|
-
if (duration > 0) {
|
|
37
|
-
const newZoom = containerWidth / duration;
|
|
38
|
-
wavesurfer.current.zoom(newZoom);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
};
|
|
42
|
-
window.addEventListener("resize", resize);
|
|
43
|
-
resize();
|
|
44
|
-
return () => {
|
|
45
|
-
window.removeEventListener("resize", resize);
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
}, []);
|
|
49
|
-
useEffect(() => {
|
|
50
|
-
if (wavesurfer.current && audioChunks) {
|
|
51
|
-
const audioBlob = new Blob(audioChunks, {
|
|
52
|
-
type: "audio/webm"
|
|
53
|
-
});
|
|
54
|
-
const recordedUrl = URL.createObjectURL(audioBlob);
|
|
55
|
-
wavesurfer.current.load(recordedUrl).then().catch(e => console.error("Error loading audio: ", e));
|
|
56
|
-
if (!playOnce) {
|
|
57
|
-
setPlayOnce(true);
|
|
58
|
-
}
|
|
59
|
-
} else if (wavesurfer.current && !audioChunks) {
|
|
60
|
-
// Clear the waveform when audioChunks is null
|
|
61
|
-
wavesurfer.current.empty();
|
|
62
|
-
}
|
|
63
|
-
}, [audioChunks, playOnce]);
|
|
64
|
-
return /*#__PURE__*/_jsx(Box, {
|
|
65
|
-
ref: waveContent,
|
|
66
|
-
style: {
|
|
67
|
-
width: "100%",
|
|
68
|
-
height: "100%",
|
|
69
|
-
overflow: "hidden"
|
|
70
|
-
}
|
|
71
|
-
});
|
|
72
|
-
};
|
|
73
|
-
export const AudioWave = SoundWave;
|