@flozy/editor 4.5.7 → 4.5.8

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 (65) hide show
  1. package/dist/Editor/ChatEditor.js +14 -2
  2. package/dist/Editor/CommonEditor.js +19 -16
  3. package/dist/Editor/Editor.css +1 -19
  4. package/dist/Editor/Elements/AI/AIInput.js +5 -4
  5. package/dist/Editor/Elements/AI/PopoverAIInput.js +29 -40
  6. package/dist/Editor/Elements/AI/Styles.js +1 -1
  7. package/dist/Editor/Elements/Button/EditorButton.js +4 -8
  8. package/dist/Editor/Elements/Embed/Embed.css +1 -1
  9. package/dist/Editor/Elements/Embed/Image.js +3 -4
  10. package/dist/Editor/Elements/Embed/Video.js +4 -4
  11. package/dist/Editor/Elements/Form/Form.js +1 -0
  12. package/dist/Editor/Elements/Form/Workflow/FormWorkflow.js +12 -3
  13. package/dist/Editor/Elements/FreeGrid/FreeGrid.js +0 -30
  14. package/dist/Editor/Elements/FreeGrid/FreeGridBox.js +0 -2
  15. package/dist/Editor/Elements/FreeGrid/FreeGridItem.js +1 -3
  16. package/dist/Editor/Elements/FreeGrid/Options/AddElement.js +0 -4
  17. package/dist/Editor/Elements/FreeGrid/Options/sectionItemOptions.js +1 -5
  18. package/dist/Editor/Elements/FreeGrid/styles.js +1 -82
  19. package/dist/Editor/Elements/Mentions/Mentions.js +3 -2
  20. package/dist/Editor/Elements/Signature/SignaturePopup.js +7 -24
  21. package/dist/Editor/Elements/Signature/Signed.js +1 -1
  22. package/dist/Editor/Elements/SimpleText/index.js +8 -6
  23. package/dist/Editor/Elements/Table/TableRow.js +1 -1
  24. package/dist/Editor/Styles/EditorStyles.js +2 -2
  25. package/dist/Editor/Toolbar/Mini/MiniToolbar.js +2 -1
  26. package/dist/Editor/Toolbar/PopupTool/ButtonTemplatesCard.js +29 -35
  27. package/dist/Editor/Toolbar/PopupTool/FullViewCard.js +30 -35
  28. package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/index.js +4 -4
  29. package/dist/Editor/Toolbar/PopupTool/PopupToolStyle.js +38 -22
  30. package/dist/Editor/Toolbar/PopupTool/TextFormat.js +1 -0
  31. package/dist/Editor/Toolbar/PopupTool/index.js +5 -5
  32. package/dist/Editor/common/FontLoader/FontLoader.js +6 -6
  33. package/dist/Editor/common/Icon.js +1 -1
  34. package/dist/Editor/common/RnD/DragOver/index.js +1 -0
  35. package/dist/Editor/common/RnD/ElementOptions/Actions.js +1 -14
  36. package/dist/Editor/common/RnD/ElementOptions/styles.js +0 -5
  37. package/dist/Editor/common/RnD/ElementSettings/OtherSettings/Settings.js +1 -1
  38. package/dist/Editor/common/RnD/ElementSettings/OtherSettings/index.js +2 -32
  39. package/dist/Editor/common/RnD/ElementSettings/settingsConstants.js +1 -2
  40. package/dist/Editor/common/RnD/RnDCopy.js +0 -2
  41. package/dist/Editor/common/RnD/Utils/gridDropItem.js +3 -5
  42. package/dist/Editor/common/RnD/index.js +30 -64
  43. package/dist/Editor/common/Section/index.js +1 -11
  44. package/dist/Editor/common/Section/styles.js +0 -16
  45. package/dist/Editor/common/Shorthands/mentions.js +1 -1
  46. package/dist/Editor/common/iconslist.js +0 -23
  47. package/dist/Editor/helper/index.js +2 -4
  48. package/dist/Editor/hooks/useBreakpoints.js +1 -1
  49. package/dist/Editor/hooks/useMentions.js +39 -13
  50. package/dist/Editor/hooks/useMouseMove.js +4 -5
  51. package/dist/Editor/hooks/withCommon.js +7 -3
  52. package/dist/Editor/plugins/withHTML.js +29 -0
  53. package/dist/Editor/utils/Decorators/index.js +2 -3
  54. package/dist/Editor/utils/RnD/RnDCtrlCmds.js +1 -16
  55. package/dist/Editor/utils/SlateUtilityFunctions.js +0 -18
  56. package/dist/Editor/utils/chatEditor/SlateUtilityFunctions.js +1 -24
  57. package/dist/Editor/utils/customHooks/useResize.js +5 -4
  58. package/dist/Editor/utils/events.js +0 -36
  59. package/dist/Editor/utils/helper.js +39 -11
  60. package/package.json +1 -1
  61. package/dist/Editor/common/RnD/ElementSettings/OtherSettings/Signature.js +0 -53
  62. package/dist/Editor/helper/RnD/focusNode.js +0 -74
  63. package/dist/Editor/hooks/useDragging.js +0 -51
  64. package/dist/Editor/hooks/withRestrictedNodes.js +0 -48
  65. package/dist/Editor/utils/Decorators/highlightSelection.js +0 -16
@@ -1,7 +1,6 @@
1
1
  import { Editor, Transforms, Node, Path } from "slate";
2
2
  import { isSelectionInNodeType, getCaretPosition, onPasteRnDNode, bringItemToFB } from "../../helper";
3
3
  import focusOnNewItem from "../../helper/RnD/focusOnNewItem";
4
- import { ReactEditor } from "slate-react";
5
4
  const RND_ITEM_TYPES = ["freegrid", "freegridItem", "freegridBox"];
6
5
  const parsePath = path => path?.split("|").map(m => parseInt(m));
7
6
  const selectAll = (event, {
@@ -158,7 +157,7 @@ const onBringBack = (event, {
158
157
  console.log(err);
159
158
  }
160
159
  };
161
- export const onInsertFragment = ({
160
+ export const onInsertFragment = async ({
162
161
  editor,
163
162
  slateNodes
164
163
  }) => {
@@ -182,20 +181,6 @@ export const onInsertFragment = ({
182
181
  setSelectedElement: window.updateSelectedItem
183
182
  });
184
183
  }
185
- } else {
186
- ReactEditor.focus(editor);
187
- if (editor.children.length === 0) {
188
- Transforms.insertNodes(editor, {
189
- text: ""
190
- }, {
191
- at: [0]
192
- });
193
- }
194
- Transforms.insertNodes(editor, [{
195
- ...slateNodes
196
- }], {
197
- at: [editor.children.length - 1]
198
- });
199
184
  }
200
185
  } catch (err) {
201
186
  console.log(err);
@@ -232,15 +232,6 @@ export const getMarked = (leaf, children, theme) => {
232
232
  })
233
233
  });
234
234
  }
235
- if (leaf.highlight) {
236
- children = /*#__PURE__*/_jsx("span", {
237
- style: {
238
- background: "#EAEBFE",
239
- color: "inherit"
240
- },
241
- children: children
242
- });
243
- }
244
235
  if (leaf.decoration === "link") {
245
236
  children = /*#__PURE__*/_jsx("a", {
246
237
  style: {
@@ -538,15 +529,6 @@ export const getBlock = props => {
538
529
  return /*#__PURE__*/_jsx(Code, {
539
530
  ...props
540
531
  });
541
- // RnD Focus Node
542
- case "temp":
543
- return /*#__PURE__*/_jsx("span", {
544
- ...attributes,
545
- ...element.attr,
546
- className: "temp-focus-node",
547
- contentEditable: false,
548
- children: children
549
- });
550
532
  default:
551
533
  return /*#__PURE__*/_jsx(SimpleText, {
552
534
  ...props,
@@ -1,9 +1,6 @@
1
1
  import { Editor, Transforms, Element as SlateElement } from "slate";
2
2
  import { Box } from "@mui/material";
3
3
  import { fontFamilyMap, sizeMap } from "../font";
4
- import Table from "../../Elements/Table/Table";
5
- import TableRow from "../../Elements/Table/TableRow";
6
- import TableCell from "../../Elements/Table/TableCell";
7
4
  import Mentions from "../../Elements/Mentions/Mentions";
8
5
  import CheckList from "../../Elements/List/CheckList";
9
6
  import { isEmptyTextNode } from "../../helper";
@@ -340,31 +337,11 @@ export const getBlock = props => {
340
337
  ...props,
341
338
  isEmpty: isEmpty
342
339
  });
343
- case "table":
344
- return /*#__PURE__*/_jsx(Table, {
345
- ...props
346
- });
347
- case "table-head":
348
- return /*#__PURE__*/_jsx("thead", {
349
- children: children
350
- });
351
- case "table-body":
352
- return /*#__PURE__*/_jsx("tbody", {
353
- children: children
354
- });
355
- case "table-row":
356
- return /*#__PURE__*/_jsx(TableRow, {
357
- ...props
358
- });
359
- case "table-cell":
360
- return /*#__PURE__*/_jsx(TableCell, {
361
- ...props
362
- });
363
340
  case "mention":
364
341
  return /*#__PURE__*/_jsx(Mentions, {
365
342
  ...props
366
343
  });
367
344
  default:
368
- return;
345
+ return null;
369
346
  }
370
347
  };
@@ -10,7 +10,7 @@ const useResize = ({
10
10
  const defaultSize = getBreakPointsValue(allSize);
11
11
  const {
12
12
  width,
13
- height
13
+ height = 370
14
14
  } = parentDOM?.getBoundingClientRect() || {
15
15
  ...defaultSize
16
16
  };
@@ -50,10 +50,11 @@ const useResize = ({
50
50
  setSize(currentSize => {
51
51
  const calcWidth = (currentSize.width || width) + e.movementX;
52
52
  const cWP = calcWidth / width * 100;
53
+ const calcHeight = (parseInt(currentSize.height) || height) + e.movementY;
53
54
  const calc = {
54
- width: calcWidth,
55
- height: (parseInt(currentSize.height) || height) + e.movementY,
56
- widthInPercent: cWP > 100 ? 100 : cWP
55
+ width: Math.max(calcWidth, 140),
56
+ height: Math.max(calcHeight, 50),
57
+ widthInPercent: cWP > 100 ? 100 : Math.max(cWP, 15)
57
58
  };
58
59
  latest = calc;
59
60
  return calc;
@@ -285,40 +285,4 @@ export const enterEvent = (e, editor, isMobile) => {
285
285
  } catch (err) {
286
286
  console.log(err);
287
287
  }
288
- };
289
- export const upDownArrowKeyEvents = (e, editor) => {
290
- try {
291
- const {
292
- selection
293
- } = editor;
294
- if (!selection || Range.isCollapsed(selection)) {
295
- return;
296
- }
297
- const parentPath = selection.anchor.path.slice(0, -1);
298
- const nextNodePath = [...parentPath];
299
- const index = parentPath[parentPath.length - 1];
300
- const parentNode = Editor.parent(editor, parentPath);
301
- if (parentNode.children[index + 1]) {
302
- nextNodePath[parentPath.length - 1] += 1;
303
- } else {
304
- return;
305
- }
306
- Transforms.move(editor, {
307
- distance: 0,
308
- unit: 'offset',
309
- reverse: false
310
- });
311
- Transforms.select(editor, {
312
- anchor: {
313
- path: nextNodePath,
314
- offset: 0
315
- },
316
- focus: {
317
- path: nextNodePath,
318
- offset: 0
319
- }
320
- });
321
- } catch (err) {
322
- console.log(err);
323
- }
324
288
  };
@@ -1,4 +1,4 @@
1
- import { Editor, Node, Transforms, Element, Path } from "slate";
1
+ import { Editor, Node, Transforms, Element, Path, Range } from "slate";
2
2
  import { ReactEditor } from "slate-react";
3
3
  import insertNewLine from "./insertNewLine";
4
4
  import { getDevice } from "../helper/theme";
@@ -471,19 +471,47 @@ export const editorThemeStyle = {
471
471
  export const getEditorTheme = (themeType = "light") => {
472
472
  return editorThemeStyle[themeType] || {};
473
473
  };
474
- export const isFreeGrid = (nodes, types = ["freegrid", "freegridItem", "freegridBox"]) => {
474
+ export const getPreviousNode = editor => {
475
475
  try {
476
- for (const node of nodes) {
477
- if (types.includes(node.type)) {
478
- return true;
479
- }
480
- if (node.children && isFreeGrid(node.children, types)) {
481
- return true;
476
+ const parentPath = Path.parent(editor?.selection?.anchor?.path);
477
+ const previousPath = Path.previous(parentPath);
478
+ const previousNode = Node.get(editor, previousPath);
479
+ return {
480
+ previousNode,
481
+ previousPath
482
+ };
483
+ } catch (err) {
484
+ return;
485
+ }
486
+ };
487
+ export const isPageSettings = (event, editor) => {
488
+ let isPageSettingsNode = false;
489
+ try {
490
+ const {
491
+ selection
492
+ } = editor;
493
+ const cursorAtStartingPosition = !selection?.focus?.offset;
494
+ const textSelection = selection && !Range.isCollapsed(selection);
495
+ if (cursorAtStartingPosition && !textSelection) {
496
+ // on backspace, the node gonna delete will be the previous node from current position, that why getting the previous node
497
+ const {
498
+ previousNode,
499
+ previousPath
500
+ } = getPreviousNode(editor);
501
+ if (previousNode?.type === "page-settings") {
502
+ event.preventDefault(); // stops deleting backward
503
+
504
+ // move the cursor to node which is before page-settings node
505
+ const pathBeforePageSettings = Path.previous(previousPath);
506
+ const endPath = Editor.end(editor, pathBeforePageSettings);
507
+ Transforms.select(editor, endPath);
508
+ isPageSettingsNode = true;
482
509
  }
483
510
  }
484
- return false;
511
+ return isPageSettingsNode;
485
512
  } catch (err) {
486
- console.log('isFreeGrid error:', err);
487
- return false;
513
+ // if there is no previous node error throws, user reached the starting node and startting position
514
+ isPageSettingsNode = true;
515
+ return isPageSettingsNode;
488
516
  }
489
517
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flozy/editor",
3
- "version": "4.5.7",
3
+ "version": "4.5.8",
4
4
  "description": "An Editor for flozy app brain",
5
5
  "files": [
6
6
  "dist"
@@ -1,53 +0,0 @@
1
- import SignaturePopup from "../../../../Elements/Signature/SignaturePopup";
2
- import { Path, Transforms } from "slate";
3
- import { formatDate } from "../../../../utils/helper";
4
- import { jsx as _jsx } from "react/jsx-runtime";
5
- import { Fragment as _Fragment } from "react/jsx-runtime";
6
- const Signature = props => {
7
- const {
8
- onClose,
9
- customProps,
10
- editor,
11
- path
12
- } = props;
13
- const pPath = path?.split("|")?.map(m => parseInt(m));
14
- const element_path = [...pPath, 0];
15
- const onSave = (data = {}) => {
16
- onClear();
17
- Transforms.insertNodes(editor, [{
18
- type: "sign",
19
- signature: null,
20
- fontFamily: "",
21
- signedBy: "",
22
- signedOn: formatDate(new Date(), "MM/DD/YYYY"),
23
- signedText: "",
24
- children: [{
25
- text: ""
26
- }],
27
- ...data
28
- }], {
29
- at: element_path
30
- });
31
- const parentPath = Path.parent(element_path);
32
- Transforms.setNodes(editor, {
33
- childType: "sign"
34
- }, {
35
- at: parentPath
36
- });
37
- };
38
- const onClear = () => {
39
- Transforms.removeNodes(editor, {
40
- at: element_path
41
- });
42
- };
43
- return /*#__PURE__*/_jsx(_Fragment, {
44
- children: /*#__PURE__*/_jsx(SignaturePopup, {
45
- onSave: onSave,
46
- onClear: onClear,
47
- handleClose: onClose,
48
- customProps: customProps,
49
- onlyPopup: true
50
- })
51
- });
52
- };
53
- export default Signature;
@@ -1,74 +0,0 @@
1
- import { Editor, Transforms } from "slate";
2
- import { ReactEditor } from "slate-react";
3
- const TEMP_NODE_ID = "temp-focus-node";
4
- const ensureTemporaryFocusNode = (editor, selectedDOM) => {
5
- // Check if the temporary focus node already exists
6
- const {
7
- left,
8
- top
9
- } = selectedDOM?.getBoundingClientRect();
10
- const [tempNodeEntry] = Editor.nodes(editor, {
11
- at: [],
12
- match: n => n.temp === TEMP_NODE_ID
13
- });
14
- if (!tempNodeEntry) {
15
- // If not, insert the temporary focus node at the start of the editor
16
- Transforms.insertNodes(editor, {
17
- type: "temp",
18
- temp: TEMP_NODE_ID,
19
- children: [{
20
- type: "restrictedType",
21
- text: ""
22
- }],
23
- left,
24
- top
25
- }, {
26
- at: [editor.children.length]
27
- });
28
- }
29
- };
30
- export const focusUsingTemporaryNode = (editor, selectedDOM) => {
31
- Transforms.deselect(editor);
32
-
33
- // Ensure the temporary node exists
34
- ensureTemporaryFocusNode(editor, selectedDOM);
35
-
36
- // Select the temporary node without causing scroll
37
- const [tempNodeEntry] = Editor.nodes(editor, {
38
- at: [],
39
- match: n => n.temp === TEMP_NODE_ID
40
- });
41
- if (tempNodeEntry) {
42
- const [, path] = tempNodeEntry;
43
- Transforms.select(editor, path);
44
- }
45
- ReactEditor.focus(editor);
46
- };
47
- export const cleanupTemporaryFocusNode = editor => {
48
- // Remove the temporary focus node if it exists
49
- for (const [, path] of Editor.nodes(editor, {
50
- at: [],
51
- match: n => n.temp === TEMP_NODE_ID
52
- })) {
53
- Transforms.removeNodes(editor, {
54
- at: path
55
- });
56
- }
57
- };
58
- export const dragOverOn = (previousPath, currentPath) => {
59
- try {
60
- const previousElement = document.querySelector(`[data-dragoverid="${previousPath}"]`);
61
- const currentElement = document.querySelector(`[data-dragoverid="${currentPath}"]`);
62
- // Remove 'dragOver' class from the current element, if it exists
63
- if (previousElement && previousElement.classList.contains("rnd-dragOver")) {
64
- previousElement.classList.remove("rnd-dragOver");
65
- }
66
-
67
- // Add 'dragOver' class to the new element
68
- if (currentElement) {
69
- currentElement.classList.add("rnd-dragOver");
70
- }
71
- } catch (err) {
72
- console.log(err);
73
- }
74
- };
@@ -1,51 +0,0 @@
1
- import { useState, useCallback, useRef } from "react";
2
- const initialState = {
3
- id: null,
4
- active: false,
5
- isDragging: 0,
6
- dragOver: false,
7
- dragOverType: null
8
- };
9
- const useDragging = () => {
10
- const [dragging, setDragging] = useState({
11
- ...initialState
12
- });
13
-
14
- // Ref to keep the latest draggingStatus
15
- const draggingRef = useRef(dragging);
16
- const updateDragging = newStatus => {
17
- setDragging(prevStatus => {
18
- const updatedStatus = {
19
- ...prevStatus,
20
- ...newStatus
21
- };
22
- draggingRef.current = updatedStatus; // Update the ref to hold latest status
23
- return updatedStatus;
24
- });
25
- };
26
- const startDragging = useCallback(data => {
27
- // console.log("dragissue", "startDragging");
28
- updateDragging({
29
- ...data
30
- });
31
- }, []);
32
- const stopDragging = useCallback(() => {
33
- // console.log("dragissue", "stopDragging");
34
- updateDragging({
35
- ...initialState
36
- });
37
- }, []);
38
- const setDragOver = useCallback(isOver => {
39
- updateDragging({
40
- dragOver: isOver
41
- });
42
- }, []);
43
- return {
44
- dragging,
45
- draggingRef,
46
- startDragging,
47
- stopDragging,
48
- setDragOver
49
- };
50
- };
51
- export default useDragging;
@@ -1,48 +0,0 @@
1
- import { Editor } from "slate";
2
-
3
- // Custom insertText that prevents updates in specific node types
4
- const withRestrictedNodes = editor => {
5
- const {
6
- insertText,
7
- deleteBackward
8
- } = editor;
9
-
10
- // Override insertText
11
- editor.insertText = text => {
12
- const {
13
- selection
14
- } = editor;
15
- if (selection) {
16
- const [node] = Editor.node(editor, selection);
17
- console.log(node);
18
-
19
- // Prevent insertText if node type matches
20
- if (node && node.type === "restrictedType") {
21
- return; // Skip inserting text
22
- }
23
- }
24
-
25
- // Call the original insertText if node type does not match
26
- insertText(text);
27
- };
28
-
29
- // Similarly override deleteBackward if needed
30
- editor.deleteBackward = (...args) => {
31
- const {
32
- selection
33
- } = editor;
34
- if (selection) {
35
- const [node] = Editor.node(editor, selection);
36
-
37
- // Prevent deletion if node type matches
38
- if (node && node.type === "restrictedType") {
39
- return; // Skip deleting text
40
- }
41
- }
42
-
43
- // Call the original deleteBackward if node type does not match
44
- deleteBackward(...args);
45
- };
46
- return editor;
47
- };
48
- export default withRestrictedNodes;
@@ -1,16 +0,0 @@
1
- import { Editor, Range, Text } from "slate";
2
- const highlightSelection = ([node, path], editor = {}) => {
3
- if (Text.isText(node) && editor?.selection) {
4
- const intersection = Range.intersection(editor.selection, Editor.range(editor, path));
5
- if (intersection == null) {
6
- return [];
7
- }
8
- const range = {
9
- highlight: true,
10
- ...intersection
11
- };
12
- return [range];
13
- }
14
- return [];
15
- };
16
- export default highlightSelection;