@flozy/editor 4.4.7 → 4.4.9

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 (56) hide show
  1. package/dist/Editor/ChatEditor.js +2 -14
  2. package/dist/Editor/CommonEditor.js +13 -30
  3. package/dist/Editor/Editor.css +7 -1
  4. package/dist/Editor/Elements/AI/AIInput.js +4 -5
  5. package/dist/Editor/Elements/AI/PopoverAIInput.js +40 -29
  6. package/dist/Editor/Elements/AI/Styles.js +1 -1
  7. package/dist/Editor/Elements/Button/EditorButton.js +8 -4
  8. package/dist/Editor/Elements/Embed/Embed.css +1 -1
  9. package/dist/Editor/Elements/Embed/Image.js +4 -3
  10. package/dist/Editor/Elements/Embed/Video.js +4 -4
  11. package/dist/Editor/Elements/Form/Form.js +0 -1
  12. package/dist/Editor/Elements/Form/Workflow/FormWorkflow.js +3 -12
  13. package/dist/Editor/Elements/FreeGrid/FreeGrid.js +25 -0
  14. package/dist/Editor/Elements/FreeGrid/FreeGridItem.js +3 -1
  15. package/dist/Editor/Elements/FreeGrid/Options/AddElement.js +4 -0
  16. package/dist/Editor/Elements/FreeGrid/Options/sectionItemOptions.js +5 -1
  17. package/dist/Editor/Elements/FreeGrid/styles.js +37 -0
  18. package/dist/Editor/Elements/Mentions/Mentions.js +2 -3
  19. package/dist/Editor/Elements/Signature/SignaturePopup.js +7 -3
  20. package/dist/Editor/Elements/Signature/Signed.js +1 -1
  21. package/dist/Editor/Elements/SimpleText/index.js +3 -2
  22. package/dist/Editor/Elements/Table/TableRow.js +1 -1
  23. package/dist/Editor/Styles/EditorStyles.js +2 -2
  24. package/dist/Editor/Toolbar/Mini/MiniToolbar.js +1 -2
  25. package/dist/Editor/Toolbar/PopupTool/ButtonTemplatesCard.js +35 -29
  26. package/dist/Editor/Toolbar/PopupTool/FullViewCard.js +35 -30
  27. package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/index.js +4 -4
  28. package/dist/Editor/Toolbar/PopupTool/PopupToolStyle.js +22 -38
  29. package/dist/Editor/Toolbar/PopupTool/TextFormat.js +0 -1
  30. package/dist/Editor/Toolbar/PopupTool/index.js +5 -5
  31. package/dist/Editor/common/FontLoader/FontLoader.js +6 -6
  32. package/dist/Editor/common/Icon.js +1 -1
  33. package/dist/Editor/common/RnD/ElementOptions/Actions.js +14 -1
  34. package/dist/Editor/common/RnD/ElementSettings/OtherSettings/Settings.js +1 -1
  35. package/dist/Editor/common/RnD/ElementSettings/OtherSettings/Signature.js +53 -0
  36. package/dist/Editor/common/RnD/ElementSettings/OtherSettings/index.js +32 -2
  37. package/dist/Editor/common/RnD/ElementSettings/settingsConstants.js +2 -1
  38. package/dist/Editor/common/RnD/Utils/gridDropItem.js +5 -3
  39. package/dist/Editor/common/RnD/index.js +17 -17
  40. package/dist/Editor/common/Section/index.js +11 -1
  41. package/dist/Editor/common/Section/styles.js +14 -0
  42. package/dist/Editor/common/Shorthands/mentions.js +1 -1
  43. package/dist/Editor/helper/RnD/focusNode.js +70 -0
  44. package/dist/Editor/helper/index.js +4 -2
  45. package/dist/Editor/hooks/useBreakpoints.js +1 -1
  46. package/dist/Editor/hooks/useMentions.js +13 -39
  47. package/dist/Editor/hooks/withCommon.js +2 -7
  48. package/dist/Editor/plugins/withHTML.js +0 -29
  49. package/dist/Editor/utils/Decorators/highlightSelection.js +16 -0
  50. package/dist/Editor/utils/Decorators/index.js +3 -2
  51. package/dist/Editor/utils/SlateUtilityFunctions.js +18 -0
  52. package/dist/Editor/utils/chatEditor/SlateUtilityFunctions.js +24 -1
  53. package/dist/Editor/utils/customHooks/useResize.js +4 -5
  54. package/dist/Editor/utils/events.js +36 -0
  55. package/dist/Editor/utils/helper.js +1 -8
  56. package/package.json +1 -1
@@ -17,6 +17,7 @@ import VirtualElement from "./VirtualElement";
17
17
  import { ItemTypes } from "./ElementSettings/settingsConstants";
18
18
  import { focusSelection, clearSelection } from "../../helper";
19
19
  import { selectText } from "../../utils/helper";
20
+ import { removeSign } from "./ElementSettings/OtherSettings";
20
21
  import { jsx as _jsx } from "react/jsx-runtime";
21
22
  import { jsxs as _jsxs } from "react/jsx-runtime";
22
23
  import { Fragment as _Fragment } from "react/jsx-runtime";
@@ -155,6 +156,7 @@ const RnD = props => {
155
156
  switch (e.detail) {
156
157
  case 1:
157
158
  if (!enable) {
159
+ // focusSelection(editor, { path });
158
160
  setSelectedElement({
159
161
  path: str_path,
160
162
  enable: 1,
@@ -162,7 +164,6 @@ const RnD = props => {
162
164
  anchorEl: rndRef?.current
163
165
  });
164
166
  }
165
- // ReactEditor.focus(editor);
166
167
  break;
167
168
  case 2:
168
169
  focusSelection(editor, {
@@ -225,6 +226,13 @@ const RnD = props => {
225
226
  selectedActionPath: path
226
227
  });
227
228
  break;
229
+ case "signatureSettings":
230
+ setSelectedElement({
231
+ ...selectedElementProps,
232
+ selectedAction: actionType,
233
+ selectedActionPath: path
234
+ });
235
+ break;
228
236
  case "imageFrame":
229
237
  setSelectedElement({
230
238
  ...selectedElementProps,
@@ -233,6 +241,9 @@ const RnD = props => {
233
241
  selectedActionPath: path
234
242
  });
235
243
  break;
244
+ case "removeSign":
245
+ removeSign(editor, sp);
246
+ break;
236
247
  case "saveAsTemplate":
237
248
  const curPath = type === "parent" ? Path.parent(path) : path;
238
249
  const currentNode = Node.get(editor, curPath);
@@ -270,7 +281,9 @@ const RnD = props => {
270
281
  dragOver: null
271
282
  }, null);
272
283
  }
284
+ // focusSelection(editor, { path: updated_at });
273
285
  };
286
+
274
287
  const onDragStart = e => {
275
288
  e.preventDefault();
276
289
  if (e?.target?.dataset?.path?.split(",").join("|") === sp) {
@@ -299,7 +312,7 @@ const RnD = props => {
299
312
  width,
300
313
  height
301
314
  },
302
- isDragging: 1,
315
+ isDragging: true,
303
316
  parentPath: getParentSectionPath({
304
317
  ref
305
318
  }, ".freegrid-container-parent")
@@ -311,15 +324,13 @@ const RnD = props => {
311
324
  };
312
325
  const onDrag = (e, d) => {
313
326
  e.preventDefault();
314
- e.stopPropagation();
315
327
  const lines = getClosestDraggable(e.clientX, e.clientY, `.freegrid-section_${parentSectionPath} .freegrid-container .freegrid-item.inactive-drag`.replace(/\|/g, "\\|"), ".freegrid-item.active-drag:not(.exclude-virtual)");
316
- console.log(lines);
317
328
  setAbsPosition({
318
329
  ...absPosition,
319
330
  "--zIndex": 2000
320
331
  });
321
332
  updateDragging({
322
- isDragging: 2,
333
+ isDragging: true,
323
334
  position: {
324
335
  ...dragging.position,
325
336
  x: e.clientX,
@@ -337,7 +348,7 @@ const RnD = props => {
337
348
  const onDragStop = (e, d) => {
338
349
  e.preventDefault();
339
350
  e.stopPropagation();
340
- if (dragging?.isDragging === 2 && dragging?.position?.strXY) {
351
+ if (dragging?.isDragging && dragging?.position?.strXY) {
341
352
  d.x = e.x;
342
353
  d.y = e.y;
343
354
  d.offsetX = e.offsetX;
@@ -370,17 +381,6 @@ const RnD = props => {
370
381
  setAbsPosition({
371
382
  ...ud
372
383
  });
373
- } else {
374
- // invalid drags
375
- // found in dev mode and in safari browser
376
- updateDragging({
377
- isDragging: 0,
378
- position: {},
379
- lines: [],
380
- active: false,
381
- id: null
382
- });
383
- setPosition({});
384
384
  }
385
385
  };
386
386
  const onResizeStop = (e, direction, ref, d, position) => {
@@ -104,6 +104,13 @@ const Section = props => {
104
104
  };
105
105
  const isFreeGrid = element?.children?.find(f => f.type === "freegrid");
106
106
  const needHover = element?.children?.find(f => f.type === "grid" && !list_types.includes(element.type)) ? "needHover" : "";
107
+ let tempProps = {};
108
+ if (element?.type === "temp") {
109
+ tempProps = {
110
+ "--left": `${element?.left}px`,
111
+ "--top": `${element?.top}px`
112
+ };
113
+ }
107
114
  const sectionBgImage = sectionBackgroundImage && sectionBackgroundImage !== "none" ? {
108
115
  backgroundImage: `url(${sectionBackgroundImage})`
109
116
  } : {};
@@ -122,7 +129,10 @@ const Section = props => {
122
129
  }, theme);
123
130
  return path.length === 1 && !isFreeGrid ? /*#__PURE__*/_jsxs(Box, {
124
131
  component: "div",
125
- className: `ed-section-wrapper ${readOnly ? "" : "hselect"} ${needHover}`,
132
+ className: `ed-section-wrapper ${readOnly ? "" : "hselect"} ${needHover} is-${element?.type}`,
133
+ style: {
134
+ ...tempProps
135
+ },
126
136
  sx: {
127
137
  ...classes.root,
128
138
  background: sectionBgColor,
@@ -52,6 +52,20 @@ const SectionStyle = theme => ({
52
52
  [theme.breakpoints.between("xs", "md")]: {
53
53
  maxWidth: `320px !important`
54
54
  }
55
+ },
56
+ "&.is-temp": {
57
+ position: "fixed",
58
+ background: "red",
59
+ padding: "12px",
60
+ width: "10px",
61
+ height: "10px",
62
+ // left: 0,
63
+ // top: 0,
64
+ margin: "auto",
65
+ left: "var(--left)",
66
+ top: "var(--top)",
67
+ zIndex: 1000,
68
+ pointerEvents: "none"
55
69
  }
56
70
  }
57
71
  });
@@ -3,6 +3,6 @@ const mentions = props => {
3
3
  CHARACTERS,
4
4
  search
5
5
  } = props;
6
- return CHARACTERS.filter(c => c?.name?.toLowerCase()?.startsWith(search?.toLowerCase())).slice(0, 10);
6
+ return CHARACTERS.filter(c => c.name.toLowerCase().startsWith(search?.toLowerCase())).slice(0, 10);
7
7
  };
8
8
  export default mentions;
@@ -0,0 +1,70 @@
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
+ text: ""
21
+ }],
22
+ left,
23
+ top
24
+ }, {
25
+ at: [editor.children.length]
26
+ });
27
+ } else {
28
+ Transforms.setNodes(editor, {
29
+ type: "temp",
30
+ temp: TEMP_NODE_ID,
31
+ children: [{
32
+ text: ""
33
+ }],
34
+ left,
35
+ top
36
+ }, {
37
+ at: tempNodeEntry[1]
38
+ });
39
+ }
40
+ };
41
+ export const focusUsingTemporaryNode = (editor, selectedDOM) => {
42
+ // de-select and select
43
+ Transforms.deselect(editor);
44
+
45
+ // Ensure the temporary node exists
46
+ ensureTemporaryFocusNode(editor, selectedDOM);
47
+
48
+ // Select the temporary node without causing scroll
49
+ const [tempNodeEntry] = Editor.nodes(editor, {
50
+ at: [],
51
+ match: n => n.temp === TEMP_NODE_ID
52
+ });
53
+ if (tempNodeEntry) {
54
+ const [, path] = tempNodeEntry;
55
+ Transforms.select(editor, path); // Move selection to the temp node
56
+ }
57
+
58
+ ReactEditor.focus(editor);
59
+ };
60
+ export const cleanupTemporaryFocusNode = editor => {
61
+ // Remove the temporary focus node if it exists
62
+ for (const [, path] of Editor.nodes(editor, {
63
+ at: [],
64
+ match: n => n.temp === TEMP_NODE_ID
65
+ })) {
66
+ Transforms.removeNodes(editor, {
67
+ at: path
68
+ });
69
+ }
70
+ };
@@ -4,6 +4,7 @@ import html2canvas from "html2canvas";
4
4
  import { rectIntersection, closestCenter } from "@dnd-kit/core";
5
5
  import { getQueryStrings } from "../utils/SlateUtilityFunctions";
6
6
  import { Node } from "slate";
7
+ // import { focusUsingTemporaryNode } from "./RnD/focusNode";
7
8
  const HIDE_PLACHOLDERS = ["grid", "grid-item", "table"];
8
9
  const PREVIEW_IMAGE_HIDE_CLASS = ["grid-container-toolbar", "grid-item-toolbar", "element-toolbar", "mini-tool-wrpr-ei", "element-selector", "element-selector-ctrl"];
9
10
  const RND_ITEMS = ["freegridItem", "freegridBox"];
@@ -254,8 +255,9 @@ export const focusSelection = (editor, {
254
255
  const selectedDOM = ReactEditor.toDOMNode(editor, selectedNode);
255
256
  selectedDOM.scrollIntoView({
256
257
  behavior: "smooth",
257
- block: "center"
258
+ block: "nearest"
258
259
  });
260
+ // focusUsingTemporaryNode(editor, selectedDOM);
259
261
  } catch (err) {
260
262
  console.log(err);
261
263
  }
@@ -302,7 +304,7 @@ export const getTextColor = (color = "") => {
302
304
  WebkitTextFillColor: "transparent !important",
303
305
  color: "transparent !important",
304
306
  caretColor: "black",
305
- '& span': {
307
+ "& span": {
306
308
  color: "transparent !important"
307
309
  }
308
310
  } : {
@@ -1,6 +1,6 @@
1
1
  import { useMediaQuery } from "@mui/material";
2
2
  export const STIMULATOR_MOCK = {
3
- xs: "@media (min-width: 1200px) and (max-width: 7680px)"
3
+ xs: "@media (min-width: 1200px) and (max-width: 1980px)"
4
4
  };
5
5
  export const isStimulator = () => {
6
6
  try {
@@ -13,7 +13,7 @@ const getStartEnd = ({
13
13
  // Get start and end, modify it as we move along.
14
14
  let [start, end] = Range.edges(selection);
15
15
 
16
- // Move backwards to find the start of the word
16
+ // Move backwards
17
17
  while (true) {
18
18
  const before = Editor.before(editor, start, {
19
19
  unit: "character"
@@ -22,15 +22,16 @@ const getStartEnd = ({
22
22
  anchor: before,
23
23
  focus: start
24
24
  });
25
- if (before) {
26
- if (wordBefore.trim() === "") {
27
- break;
28
- } else if (SHORTHAND_CMDS.indexOf(wordBefore) < 0) {
29
- start = before;
30
- } else {
31
- start = before;
25
+ if (before && wordBefore && SHORTHAND_CMDS.indexOf(wordBefore) < 0) {
26
+ start = before;
27
+ if (start.offset === 0) {
28
+ // Means we've wrapped to beginning of another block
32
29
  break;
33
30
  }
31
+ } else if (SHORTHAND_CMDS.indexOf(wordBefore) >= 0) {
32
+ // reached the character end
33
+ start = before;
34
+ break;
34
35
  } else {
35
36
  break;
36
37
  }
@@ -40,38 +41,11 @@ const getStartEnd = ({
40
41
  focus: end
41
42
  };
42
43
  const word = Editor.string(editor, wordRange);
43
- const firstChar = word[0];
44
-
45
- // Handle the commands
46
- if (firstChar === '@') {
47
- // Only trigger @ if preceded by a space
48
- const isPrecededBySpace = Editor.string(editor, {
49
- anchor: {
50
- path: start.path,
51
- offset: start.offset - 1
52
- },
53
- focus: start
54
- }).trim() === "";
55
- if (isPrecededBySpace) {
56
- return {
57
- word,
58
- search: word.substring(1),
59
- target: wordRange,
60
- type: TYPES[firstChar]
61
- };
62
- }
63
- } else if (firstChar === '/') {
64
- return {
65
- word,
66
- search: word.substring(1),
67
- target: wordRange,
68
- type: TYPES[firstChar]
69
- };
70
- }
71
44
  return {
72
- word: "",
73
- wordRange: null,
74
- type: null
45
+ word,
46
+ search: word?.substring(1, word.length),
47
+ target: wordRange,
48
+ type: TYPES[word[0]]
75
49
  };
76
50
  } catch (err) {
77
51
  return {
@@ -9,12 +9,7 @@ import withLayout from "../plugins/withLayout";
9
9
  import withHtml from "../plugins/withHTML";
10
10
  import withErrorHandling from "./withErrorHandling";
11
11
  import withCustomDeleteBackward from "../plugins/withCustomDeleteBackward";
12
- const withCommon = (props, {
13
- needLayout = false,
14
- isChatEditor = false
15
- }) => {
16
- const editor = needLayout ? withErrorHandling(withHtml(withEquation(withLayout(withHistory(withEmbeds(withTables(withLinks(withMentions(withCustomDeleteBackward(withReact(props))))))))))) : withErrorHandling(withHtml(withEquation(withHistory(withEmbeds(withTables(withLinks(withMentions(withCustomDeleteBackward(withReact(props))))))))));
17
- editor.isChatEditor = isChatEditor;
18
- return editor;
12
+ const withCommon = (props, rest = {}) => {
13
+ return rest.needLayout ? withErrorHandling(withHtml(withEquation(withLayout(withHistory(withEmbeds(withTables(withLinks(withMentions(withCustomDeleteBackward(withReact(props))))))))))) : withErrorHandling(withHtml(withEquation(withHistory(withEmbeds(withTables(withLinks(withMentions(withCustomDeleteBackward(withReact(props))))))))));
19
14
  };
20
15
  export default withCommon;
@@ -114,23 +114,6 @@ const withHtml = editor => {
114
114
  const defaultInsert = loopChildren(decoded, true);
115
115
  if (defaultInsert) {
116
116
  insertData(data);
117
- // } else if (editor.isChatEditor) {
118
- // // Only convert table to paragraphs if in chat editor mode
119
- // const paragraphs = decoded.map(row =>
120
- // row.children.map(cell =>
121
- // cell.children.map(paragraph =>
122
- // paragraph.children.map(textNode => textNode.text).join('')
123
- // ).join(' ')
124
- // ).join(' ')
125
- // ).join('\n'); // Joining with a newline for separate paragraphs
126
-
127
- // // Insert text as paragraphs
128
- // const textNodes = paragraphs.split('\n').map(text => ({
129
- // type: 'paragraph',
130
- // children: [{ text }]
131
- // }));
132
-
133
- // Transforms.insertNodes(editor, textNodes);
134
117
  } else {
135
118
  // do not paste table, grid inside table cell
136
119
  // only plain text for internal paste
@@ -144,9 +127,6 @@ const withHtml = editor => {
144
127
  const parsed = new DOMParser().parseFromString(html, "text/html");
145
128
  const isGoogleSheet = parsed.body.querySelector("google-sheets-html-origin");
146
129
  if (isGoogleSheet) {
147
- if (editor.isChatEditor) {
148
- return;
149
- }
150
130
  const table = parsed.body.querySelector("table");
151
131
  const colGrp = table.querySelector("colgroup");
152
132
  if (colGrp) {
@@ -158,15 +138,6 @@ const withHtml = editor => {
158
138
  }
159
139
  const fragment = deserialize(parsed.body);
160
140
  const formattedFragment = formatFragment[eltype] ? formatFragment[eltype](fragment) : fragment;
161
- let is_img_table = false;
162
- formattedFragment.map(f => {
163
- if (f.type === 'image' || f?.type?.includes('table')) {
164
- is_img_table = true;
165
- }
166
- });
167
- if (editor.isChatEditor && is_img_table) {
168
- return;
169
- }
170
141
  handleInsert(editor, () => Transforms.insertFragment(editor, formattedFragment), formattedFragment);
171
142
  return;
172
143
  } else {
@@ -0,0 +1,16 @@
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;
@@ -1,5 +1,6 @@
1
+ import highlightSelection from "./highlightSelection";
1
2
  import link from "./link";
2
- const decorators = d => {
3
- return [...link(d)];
3
+ const decorators = (d, editor) => {
4
+ return [...link(d, editor), ...highlightSelection(d, editor)];
4
5
  };
5
6
  export default decorators;
@@ -232,6 +232,15 @@ 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
+ }
235
244
  if (leaf.decoration === "link") {
236
245
  children = /*#__PURE__*/_jsx("a", {
237
246
  style: {
@@ -529,6 +538,15 @@ export const getBlock = props => {
529
538
  return /*#__PURE__*/_jsx(Code, {
530
539
  ...props
531
540
  });
541
+ // RnD Focus Node
542
+ case "temp":
543
+ return /*#__PURE__*/_jsx("span", {
544
+ ...attributes,
545
+ ...element.attr,
546
+ contentEditable: false,
547
+ className: "temp-focus-node",
548
+ children: children
549
+ });
532
550
  default:
533
551
  return /*#__PURE__*/_jsx(SimpleText, {
534
552
  ...props,
@@ -1,6 +1,9 @@
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";
4
7
  import Mentions from "../../Elements/Mentions/Mentions";
5
8
  import CheckList from "../../Elements/List/CheckList";
6
9
  import { isEmptyTextNode } from "../../helper";
@@ -337,11 +340,31 @@ export const getBlock = props => {
337
340
  ...props,
338
341
  isEmpty: isEmpty
339
342
  });
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
+ });
340
363
  case "mention":
341
364
  return /*#__PURE__*/_jsx(Mentions, {
342
365
  ...props
343
366
  });
344
367
  default:
345
- return null;
368
+ return;
346
369
  }
347
370
  };
@@ -10,7 +10,7 @@ const useResize = ({
10
10
  const defaultSize = getBreakPointsValue(allSize);
11
11
  const {
12
12
  width,
13
- height = 370
13
+ height
14
14
  } = parentDOM?.getBoundingClientRect() || {
15
15
  ...defaultSize
16
16
  };
@@ -50,11 +50,10 @@ 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;
54
53
  const calc = {
55
- width: Math.max(calcWidth, 140),
56
- height: Math.max(calcHeight, 50),
57
- widthInPercent: cWP > 100 ? 100 : Math.max(cWP, 15)
54
+ width: calcWidth,
55
+ height: (parseInt(currentSize.height) || height) + e.movementY,
56
+ widthInPercent: cWP > 100 ? 100 : cWP
58
57
  };
59
58
  latest = calc;
60
59
  return calc;
@@ -285,4 +285,40 @@ 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
+ }
288
324
  };
@@ -1,4 +1,4 @@
1
- import { Editor, Node, Transforms, Element, Path } from "slate";
1
+ import { Editor, Node, Transforms, Element } from "slate";
2
2
  import { ReactEditor } from "slate-react";
3
3
  import insertNewLine from "./insertNewLine";
4
4
  import { getDevice } from "../helper/theme";
@@ -470,11 +470,4 @@ export const editorThemeStyle = {
470
470
  };
471
471
  export const getEditorTheme = (themeType = "light") => {
472
472
  return editorThemeStyle[themeType] || {};
473
- };
474
- export const getPreviousNode = editor => {
475
- try {
476
- const parentPath = Path.parent(editor?.selection?.anchor?.path);
477
- const prevPath = Path.previous(parentPath);
478
- return getNode(editor, prevPath);
479
- } catch (err) {}
480
473
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flozy/editor",
3
- "version": "4.4.7",
3
+ "version": "4.4.9",
4
4
  "description": "An Editor for flozy app brain",
5
5
  "files": [
6
6
  "dist"