@flozy/editor 1.6.0 → 1.6.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.
Files changed (110) hide show
  1. package/dist/Editor/CommonEditor.js +131 -104
  2. package/dist/Editor/DialogWrapper.js +3 -0
  3. package/dist/Editor/Editor.css +27 -36
  4. package/dist/Editor/Elements/Accordion/AccordionButton.js +13 -12
  5. package/dist/Editor/Elements/AppHeader/AppHeader.js +2 -2
  6. package/dist/Editor/Elements/Button/ButtonToolIcon.js +10 -9
  7. package/dist/Editor/Elements/Button/EditorButton.js +4 -20
  8. package/dist/Editor/Elements/Carousel/Carousel.js +47 -28
  9. package/dist/Editor/Elements/Carousel/CarouselButton.js +7 -8
  10. package/dist/Editor/Elements/Color Picker/ColorButtons.js +133 -0
  11. package/dist/Editor/Elements/Color Picker/ColorPicker.js +39 -19
  12. package/dist/Editor/Elements/Color Picker/Styles.js +51 -0
  13. package/dist/Editor/Elements/Color Picker/defaultColors.js +1 -1
  14. package/dist/Editor/Elements/Embed/Embed.js +33 -126
  15. package/dist/Editor/Elements/Embed/Image.js +15 -7
  16. package/dist/Editor/Elements/Embed/Video.js +12 -5
  17. package/dist/Editor/Elements/Emoji/EmojiButton.js +73 -0
  18. package/dist/Editor/Elements/Emoji/EmojiPicker.js +0 -0
  19. package/dist/Editor/Elements/Form/Form.js +24 -12
  20. package/dist/Editor/Elements/Form/FormButton.js +11 -9
  21. package/dist/Editor/Elements/Form/FormElements/FormText.js +1 -0
  22. package/dist/Editor/Elements/Form/FormField.js +7 -1
  23. package/dist/Editor/Elements/Grid/Grid.js +15 -4
  24. package/dist/Editor/Elements/Grid/GridButton.js +52 -29
  25. package/dist/Editor/Elements/Grid/GridItem.js +30 -19
  26. package/dist/Editor/Elements/Grid/Styles.js +11 -0
  27. package/dist/Editor/Elements/List/CheckList.js +57 -0
  28. package/dist/Editor/Elements/List/CheckListButton.js +24 -0
  29. package/dist/Editor/Elements/NewLine/NewLineButton.js +14 -14
  30. package/dist/Editor/Elements/PageSettings/PageSettingsButton.js +17 -60
  31. package/dist/Editor/Elements/Signature/Signature.js +9 -3
  32. package/dist/Editor/Elements/Signature/SignatureButton.js +10 -9
  33. package/dist/Editor/Elements/Signature/SignaturePopup.js +42 -6
  34. package/dist/Editor/Elements/SimpleText.js +62 -0
  35. package/dist/Editor/Elements/Table/Styles.js +66 -0
  36. package/dist/Editor/Elements/Table/Table.js +33 -16
  37. package/dist/Editor/Elements/Table/TableCell.js +54 -24
  38. package/dist/Editor/Elements/Table/TableSelector.js +13 -15
  39. package/dist/Editor/Elements/Table/table.css +0 -10
  40. package/dist/Editor/Elements/TopBanner/Styles.js +33 -0
  41. package/dist/Editor/Elements/TopBanner/TopBanner.js +106 -0
  42. package/dist/Editor/Elements/TopBanner/TopBannerButton.js +47 -0
  43. package/dist/Editor/Styles/EditorStyles.js +50 -0
  44. package/dist/Editor/Toolbar/FormatTools/Dropdown.js +8 -3
  45. package/dist/Editor/Toolbar/FormatTools/FontFamilyDropdown.js +16 -16
  46. package/dist/Editor/Toolbar/FormatTools/FontSize.js +17 -17
  47. package/dist/Editor/Toolbar/FormatTools/TextSize.js +13 -3
  48. package/dist/Editor/Toolbar/FormatTools/index.js +3 -2
  49. package/dist/Editor/Toolbar/Mini/MiniToolbar.js +101 -0
  50. package/dist/Editor/Toolbar/Mini/Options/Options.js +17 -0
  51. package/dist/Editor/Toolbar/Mini/Styles.js +30 -0
  52. package/dist/Editor/Toolbar/PopupTool/AddElements.js +32 -0
  53. package/dist/Editor/Toolbar/PopupTool/AddTemplates.js +115 -0
  54. package/dist/Editor/Toolbar/PopupTool/PopperHeader.js +65 -0
  55. package/dist/Editor/Toolbar/PopupTool/PopupToolStyle.js +160 -6
  56. package/dist/Editor/Toolbar/PopupTool/TextFormat.js +263 -80
  57. package/dist/Editor/Toolbar/PopupTool/index.js +33 -44
  58. package/dist/Editor/Toolbar/Toolbar.js +178 -134
  59. package/dist/Editor/Toolbar/styles.css +1 -1
  60. package/dist/Editor/Toolbar/toolbarGroups.js +83 -34
  61. package/dist/Editor/assets/svg/AddElementIcon.js +29 -0
  62. package/dist/Editor/assets/svg/AddTemplateIcon.js +29 -0
  63. package/dist/Editor/assets/svg/TextIcon.js +29 -0
  64. package/dist/Editor/common/Icon.js +48 -5
  65. package/dist/Editor/common/ImageList.js +10 -4
  66. package/dist/Editor/common/ImageSelector/ImageSelector.js +117 -0
  67. package/dist/Editor/common/ImageSelector/Options/AddLink.js +44 -0
  68. package/dist/Editor/common/ImageSelector/Options/ChooseAssets.js +39 -0
  69. package/dist/Editor/common/ImageSelector/Options/Upload.js +30 -0
  70. package/dist/Editor/common/ImageSelector/Styles.js +41 -0
  71. package/dist/Editor/common/ImageUploader.js +19 -8
  72. package/dist/Editor/common/MentionsPopup/ElementsListCard.js +66 -0
  73. package/dist/Editor/common/MentionsPopup/MentionsListCard.js +70 -0
  74. package/dist/Editor/common/MentionsPopup/Styles.js +68 -0
  75. package/dist/Editor/common/MentionsPopup/index.js +129 -0
  76. package/dist/Editor/common/Shorthands/elements.js +191 -0
  77. package/dist/Editor/common/Shorthands/index.js +7 -0
  78. package/dist/Editor/common/Shorthands/mentions.js +8 -0
  79. package/dist/Editor/common/StyleBuilder/fieldTypes/backgroundImage.js +21 -73
  80. package/dist/Editor/common/StyleBuilder/fieldTypes/buttonLink.js +3 -20
  81. package/dist/Editor/common/StyleBuilder/index.js +0 -1
  82. package/dist/Editor/common/StyleBuilder/tableStyle.js +9 -5
  83. package/dist/Editor/common/ToolbarIcon.js +43 -0
  84. package/dist/Editor/common/Uploader.js +10 -7
  85. package/dist/Editor/common/iconslist.js +46 -1
  86. package/dist/Editor/hooks/useMentions.js +104 -17
  87. package/dist/Editor/hooks/useMouseMove.js +53 -0
  88. package/dist/Editor/hooks/useScroll.js +26 -0
  89. package/dist/Editor/plugins/withEmbeds.js +12 -0
  90. package/dist/Editor/service/fileupload.js +2 -2
  91. package/dist/Editor/utils/SlateUtilityFunctions.js +61 -10
  92. package/dist/Editor/utils/carousel.js +5 -2
  93. package/dist/Editor/utils/carouselItem.js +2 -2
  94. package/dist/Editor/utils/customHooks/useResize.js +2 -3
  95. package/dist/Editor/utils/customHooks/useTableResize.js +2 -1
  96. package/dist/Editor/utils/embed.js +19 -5
  97. package/dist/Editor/utils/emoji.js +8 -0
  98. package/dist/Editor/utils/events.js +49 -12
  99. package/dist/Editor/utils/form.js +3 -9
  100. package/dist/Editor/utils/formfield.js +2 -1
  101. package/dist/Editor/utils/grid.js +44 -8
  102. package/dist/Editor/utils/gridItem.js +4 -3
  103. package/dist/Editor/utils/insertNewLine.js +12 -0
  104. package/dist/Editor/utils/mentions.js +14 -10
  105. package/dist/Editor/utils/pageSettings.js +67 -0
  106. package/dist/Editor/utils/signature.js +6 -8
  107. package/dist/Editor/utils/table.js +79 -18
  108. package/dist/Editor/utils/topBanner.js +58 -0
  109. package/package.json +4 -1
  110. package/dist/Editor/common/MentionsPopup.js +0 -56
@@ -1,5 +1,6 @@
1
1
  import { Transforms } from "slate";
2
2
  import { formField } from "./formfield";
3
+ import insertNewLine from "./insertNewLine";
3
4
  export const insertForm = (editor, item) => {
4
5
  const grid = !item ? {
5
6
  type: "form",
@@ -18,15 +19,8 @@ export const insertForm = (editor, item) => {
18
19
  },
19
20
  children: [{
20
21
  ...formField()
21
- }, {
22
- text: ""
23
22
  }]
24
23
  } : item;
25
- const {
26
- selection
27
- } = editor;
28
- Transforms.insertNodes(editor, grid, {
29
- at: selection.focus.path
30
- });
31
- Transforms.move(editor);
24
+ Transforms.insertNodes(editor, grid);
25
+ insertNewLine(editor);
32
26
  };
@@ -9,7 +9,8 @@ export const formField = () => {
9
9
  children: [{
10
10
  text: ""
11
11
  }],
12
- bgColor: "rgba(255, 255, 255, 0)",
12
+ bgColor: "rgba(255, 255, 255, 1)",
13
+ borderColor: "#ccc",
13
14
  bannerSpacing: {
14
15
  left: 16,
15
16
  right: 16,
@@ -1,12 +1,48 @@
1
1
  import { Transforms } from "slate";
2
2
  import default_grid from "../Elements/Grid/templates/default_grid";
3
+ import insertNewLine from "./insertNewLine";
4
+ import { gridItem } from "./gridItem";
5
+ export const insertPlainGrid = count => {
6
+ const size = 12 / count;
7
+ const items = Array.from(Array(count).keys()).map(() => gridItem({
8
+ grid: size,
9
+ borderColor: "#ccc",
10
+ lockSpacing: true,
11
+ bannerSpacing: {
12
+ top: "16",
13
+ left: "16",
14
+ right: "16",
15
+ bottom: "16"
16
+ }
17
+ }));
18
+ return {
19
+ type: "grid",
20
+ grid: "container",
21
+ children: [...items],
22
+ alignment: {
23
+ flexDirection: "row"
24
+ },
25
+ lockSpacing: true,
26
+ bannerSpacing: {
27
+ top: "16",
28
+ left: "16",
29
+ right: "16",
30
+ bottom: "16"
31
+ }
32
+ };
33
+ };
3
34
  export const insertGrid = (editor, item, path) => {
4
- const grid = !item ? JSON.parse(default_grid) : item;
5
- const {
6
- selection
7
- } = editor;
8
- Transforms.insertNodes(editor, grid, {
9
- at: path || selection.focus.path,
10
- select: true
11
- });
35
+ try {
36
+ const grid = !item ? JSON.parse(default_grid) : item;
37
+ const {
38
+ selection
39
+ } = editor;
40
+ Transforms.insertNodes(editor, grid, {
41
+ at: path || selection.focus.path,
42
+ select: true
43
+ });
44
+ insertNewLine(editor);
45
+ } catch (err) {
46
+ console.log(err);
47
+ }
12
48
  };
@@ -1,15 +1,16 @@
1
1
  import { Transforms } from "slate";
2
- export const gridItem = () => {
2
+ export const gridItem = (props = {}) => {
3
3
  return {
4
4
  type: "grid-item",
5
5
  grid: 6,
6
6
  children: [{
7
7
  type: "paragraph",
8
8
  children: [{
9
- text: `About Us`
9
+ text: " "
10
10
  }]
11
11
  }],
12
- bgColor: "rgba(255, 255, 255, 0)"
12
+ bgColor: "rgba(255, 255, 255, 0)",
13
+ ...(props || {})
13
14
  };
14
15
  };
15
16
  export const insertGridItem = editor => {
@@ -0,0 +1,12 @@
1
+ import { Transforms } from "slate";
2
+ const insertNewLine = editor => {
3
+ Transforms.insertNodes(editor, {
4
+ type: "paragraph",
5
+ children: [{
6
+ text: ""
7
+ }]
8
+ }, {
9
+ at: [editor.children.length]
10
+ });
11
+ };
12
+ export default insertNewLine;
@@ -1,12 +1,16 @@
1
1
  import { Transforms } from "slate";
2
- export const insertMention = (editor, character) => {
3
- const mention = {
4
- type: "mention",
5
- character,
6
- children: [{
7
- text: ""
8
- }]
9
- };
10
- Transforms.insertNodes(editor, mention);
11
- Transforms.move(editor);
2
+ export const insertMention = (editor, character, type) => {
3
+ if (type === "mentions") {
4
+ const mention = {
5
+ type: "mention",
6
+ character,
7
+ children: [{
8
+ text: ""
9
+ }]
10
+ };
11
+ Transforms.insertNodes(editor, mention);
12
+ Transforms.move(editor);
13
+ } else if (type === "elements" && character && character.onInsert) {
14
+ character.onInsert(editor);
15
+ }
12
16
  };
@@ -0,0 +1,67 @@
1
+ import { Editor, Transforms, Element } from "slate";
2
+ export const getPageSettings = editor => {
3
+ try {
4
+ const [pageSettingsNode] = Editor.nodes(editor, {
5
+ at: [],
6
+ match: n => {
7
+ return !Editor.isEditor(n) && Element.isElement(n) && n.type === "page-settings";
8
+ }
9
+ });
10
+ if (pageSettingsNode && pageSettingsNode[0] && pageSettingsNode[1]) {
11
+ const [element, path] = pageSettingsNode;
12
+ return {
13
+ path,
14
+ element
15
+ };
16
+ } else {
17
+ return {
18
+ path: null,
19
+ element: {
20
+ pageProps: {
21
+ pageWidth: "fixed"
22
+ }
23
+ }
24
+ };
25
+ }
26
+ } catch (err) {
27
+ console.log(err);
28
+ return {
29
+ path: null,
30
+ element: {}
31
+ };
32
+ }
33
+ };
34
+ export const insertPageSettings = (editor, pageProps = {}) => {
35
+ Transforms.insertNodes(editor, [{
36
+ type: "page-settings",
37
+ pageProps: {
38
+ ...pageProps,
39
+ pageWidth: "fixed"
40
+ },
41
+ children: [{
42
+ text: ""
43
+ }]
44
+ }], {
45
+ at: [editor.children.length]
46
+ });
47
+ };
48
+ export const updatePageSettings = (editor, pageProps = {}) => {
49
+ try {
50
+ const {
51
+ path
52
+ } = getPageSettings(editor);
53
+ if (path) {
54
+ Transforms.setNodes(editor, {
55
+ pageProps: {
56
+ ...pageProps
57
+ }
58
+ }, {
59
+ at: path
60
+ });
61
+ } else {
62
+ insertPageSettings(editor, pageProps);
63
+ }
64
+ } catch (err) {
65
+ console.log(err);
66
+ }
67
+ };
@@ -1,4 +1,5 @@
1
1
  import { Transforms } from "slate";
2
+ import insertNewLine from "./insertNewLine";
2
3
  export const insertSignature = editor => {
3
4
  const signature = {
4
5
  type: "signature",
@@ -9,15 +10,12 @@ export const insertSignature = editor => {
9
10
  date: "" // YYYY-MM-DD
10
11
  },
11
12
 
12
- size: {
13
- height: 535,
14
- widthInPercent: 99.75490196078437,
15
- width: 1628.000000000001
16
- },
17
13
  children: [{
18
- text: ""
14
+ text: " "
19
15
  }]
20
16
  };
21
- Transforms.insertNodes(editor, signature);
22
- Transforms.move(editor);
17
+ Transforms.insertNodes(editor, signature, {
18
+ at: editor.selection.anchor.path
19
+ });
20
+ insertNewLine(editor);
23
21
  };
@@ -1,5 +1,6 @@
1
1
  import { Transforms, Editor, Range, Element, Path, Node } from "slate";
2
2
  import { ReactEditor } from "slate-react";
3
+ import insertNewLine from "./insertNewLine";
3
4
  const prefixKey = (obj, pk = "") => {
4
5
  return Object.keys(obj).reduce((a, b) => {
5
6
  a[`${pk}${b}`] = obj[b];
@@ -36,18 +37,11 @@ export class TableUtil {
36
37
  }, () => ""));
37
38
  const newTable = createTableNode(cellText, rows, columns);
38
39
  Transforms.insertNodes(this.editor, newTable, {
39
- // mode: "highest",
40
+ // to insert in current line
41
+ // at: this.editor.selection.anchor.path,
40
42
  });
41
- Transforms.insertNodes(this.editor, {
42
- type: "paragraph",
43
- children: [{
44
- text: ""
45
- }]
46
- }
47
- // { mode: "highest" }
48
- );
43
+ insertNewLine(this.editor);
49
44
  };
50
-
51
45
  removeTable = () => {
52
46
  Transforms.removeNodes(this.editor, {
53
47
  match: n => !Editor.isEditor(n) && Element.isElement(n) && n.type === "table"
@@ -64,7 +58,7 @@ export class TableUtil {
64
58
  const tableDOM = ReactEditor.toDOMNode(this.editor, tableNode[0]);
65
59
  return tableDOM;
66
60
  } catch (err) {
67
- console.log(err);
61
+ // console.log(err);
68
62
  }
69
63
  };
70
64
  getTotalWidth = (path, colCount = 0) => {
@@ -223,6 +217,21 @@ export class TableUtil {
223
217
  }, {
224
218
  at: currentCellPath
225
219
  });
220
+
221
+ // cell bg entire
222
+ if (cellProps?.entireBgColor) {
223
+ const {
224
+ rows
225
+ } = tableProps;
226
+ for (let r = 0; r < rows; r++) {
227
+ Transforms.setNodes(this.editor, {
228
+ ...cellProps,
229
+ entireBgColor: cellProps?.entireBgColor
230
+ }, {
231
+ at: [currentCellPath[0], r, currentCellPath[2]]
232
+ });
233
+ }
234
+ }
226
235
  }
227
236
  } catch (err) {
228
237
  console.log(err);
@@ -290,6 +299,61 @@ export class TableUtil {
290
299
  return null;
291
300
  }
292
301
  };
302
+ isCellSelected = selection => {
303
+ try {
304
+ if (!selection || Range.isCollapsed(selection) || Editor.string(this.editor, selection) === "") {
305
+ return false;
306
+ }
307
+ const [tableNode] = Editor.nodes(this.editor, {
308
+ match: n => !Editor.isEditor(n) && Element.isElement(n) && n.type === "table"
309
+ });
310
+ const [, tableCellPath] = Editor.nodes(this.editor, {
311
+ at: selection,
312
+ match: n => !Editor.isEditor(n) && Element.isElement(n) && n.type === "table-cell"
313
+ });
314
+ const {
315
+ anchor,
316
+ focus
317
+ } = this.editor.selection || {};
318
+ if (tableNode && tableNode[0] && tableCellPath && tableCellPath[1] && focus?.path) {
319
+ let startCell = anchor?.path;
320
+ let endCell = focus?.path;
321
+
322
+ // swap for reverse selection
323
+ if (startCell[1] > endCell[1]) {
324
+ startCell = focus?.path;
325
+ endCell = anchor?.path;
326
+ } else if (startCell[2] > endCell[2]) {
327
+ startCell = focus?.path;
328
+ endCell = anchor?.path;
329
+ }
330
+ const {
331
+ columns
332
+ } = tableNode[0];
333
+ const startPath = startCell[0];
334
+ const startRow = startCell[1];
335
+ let startCol = startCell[2];
336
+ const endRow = endCell[1];
337
+ const endCol = endCell[2];
338
+ const selectedCellsPath = [];
339
+ let uptoCol = startRow !== endRow ? columns - 1 : endCol;
340
+ for (let row = startRow; row <= endRow; row++) {
341
+ for (let col = startCol; col <= uptoCol; col++) {
342
+ let nextPath = [startPath, row, col];
343
+ selectedCellsPath.push(nextPath);
344
+ }
345
+ startCol = 0;
346
+ uptoCol = endCol;
347
+ }
348
+ return selectedCellsPath;
349
+ } else {
350
+ return false;
351
+ }
352
+ } catch (err) {
353
+ console.log(err);
354
+ return false;
355
+ }
356
+ };
293
357
  }
294
358
  const createRow = cellText => {
295
359
  const newRow = Array.from(cellText, value => createTableCell(value));
@@ -312,13 +376,10 @@ export const createTableCell = text => {
312
376
  const createTableNode = (cellText, rows, columns) => {
313
377
  const tableChildren = Array.from(cellText, value => createRow(value));
314
378
  let tableNode = {
315
- type: "paragraph",
316
- children: [{
317
- type: "table",
318
- children: tableChildren,
319
- rows,
320
- columns
321
- }]
379
+ type: "table",
380
+ children: tableChildren,
381
+ rows,
382
+ columns
322
383
  };
323
384
  return tableNode;
324
385
  };
@@ -0,0 +1,58 @@
1
+ import { Transforms } from "slate";
2
+ import insertNewLine from "./insertNewLine";
3
+ export const createTopBannerNode = ({
4
+ url,
5
+ alt
6
+ }) => ({
7
+ type: "topbanner",
8
+ alt,
9
+ url,
10
+ children: [{
11
+ text: " "
12
+ }],
13
+ size: {
14
+ widthInPercent: "100%",
15
+ height: "auto"
16
+ }
17
+ });
18
+ export const insertTopBanner = (editor, embedData) => {
19
+ try {
20
+ const {
21
+ url
22
+ } = embedData;
23
+ if (!url) return;
24
+ const embed = createTopBannerNode(embedData);
25
+ Transforms.insertNodes(editor, embed, {
26
+ at: [0]
27
+ });
28
+ insertNewLine(editor);
29
+ } catch (err) {
30
+ console.log(err);
31
+ }
32
+ };
33
+ export const removeTopBanner = editor => {
34
+ try {
35
+ const isTopBanner = editor?.children[0]?.type === "topbanner";
36
+ if (isTopBanner) {
37
+ Transforms.removeNodes(editor, {
38
+ at: [0]
39
+ });
40
+ }
41
+ } catch (err) {
42
+ console.log(err);
43
+ }
44
+ };
45
+ export const updateTopBanner = (editor, attr = {}) => {
46
+ try {
47
+ const isTopBanner = editor?.children[0]?.type === "topbanner";
48
+ if (isTopBanner) {
49
+ Transforms.setNodes(editor, {
50
+ ...attr
51
+ }, {
52
+ at: [0]
53
+ });
54
+ }
55
+ } catch (err) {
56
+ console.log(err);
57
+ }
58
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flozy/editor",
3
- "version": "1.6.0",
3
+ "version": "1.6.1",
4
4
  "description": "An Editor for flozy app brain",
5
5
  "files": [
6
6
  "dist"
@@ -9,6 +9,8 @@
9
9
  "dependencies": {
10
10
  "@dnd-kit/core": "^6.1.0",
11
11
  "@dnd-kit/sortable": "^8.0.0",
12
+ "@emoji-mart/data": "^1.1.2",
13
+ "@emoji-mart/react": "^1.1.1",
12
14
  "@emotion/react": "^11.11.1",
13
15
  "@emotion/styled": "^11.11.0",
14
16
  "@hocuspocus/provider": "^2.5.0",
@@ -20,6 +22,7 @@
20
22
  "@testing-library/jest-dom": "^5.16.5",
21
23
  "@testing-library/react": "^13.4.0",
22
24
  "@testing-library/user-event": "^13.5.0",
25
+ "emoji-mart": "^5.5.2",
23
26
  "html2canvas": "^1.4.1",
24
27
  "husky": "^8.0.3",
25
28
  "interweave": "^13.1.0",
@@ -1,56 +0,0 @@
1
- import React, { useRef, useEffect } from "react";
2
- import { Transforms } from "slate";
3
- import { ReactEditor } from "slate-react";
4
- import { insertMention } from "../utils/mentions";
5
- import { jsx as _jsx } from "react/jsx-runtime";
6
- const MentionsPopup = props => {
7
- const {
8
- editor,
9
- index,
10
- target,
11
- chars,
12
- mentions,
13
- setMentions
14
- } = props;
15
- const ref = useRef(null);
16
- useEffect(() => {
17
- if (target && chars.length > 0) {
18
- const el = ref.current;
19
- const domRange = ReactEditor.toDOMRange(editor, target);
20
- const rect = domRange.getBoundingClientRect();
21
- el.style.top = `${rect.top + window.scrollY + 24}px`;
22
- el.style.left = `${rect.left + window.scrollX}px`;
23
- }
24
- }, [chars.length, editor, index, target]);
25
- return target && chars.length > 0 ? /*#__PURE__*/_jsx("div", {
26
- ref: ref,
27
- style: {
28
- top: "-9999px",
29
- left: "-9999px",
30
- position: "absolute",
31
- zIndex: 1,
32
- padding: "3px",
33
- background: "white",
34
- borderRadius: "4px",
35
- boxShadow: "0 1px 5px rgba(0,0,0,.2)"
36
- },
37
- "data-cy": "mentions-portal",
38
- children: chars.map((char, i) => /*#__PURE__*/_jsx("div", {
39
- onClick: () => {
40
- Transforms.select(editor, target);
41
- insertMention(editor, char);
42
- setMentions({
43
- ...mentions,
44
- target: null
45
- });
46
- },
47
- style: {
48
- padding: "1px 3px",
49
- borderRadius: "3px",
50
- background: i === index ? "#B4D5FF" : "transparent"
51
- },
52
- children: char.name
53
- }, char))
54
- }) : null;
55
- };
56
- export default MentionsPopup;