@pega/cosmos-react-rte 2.0.0-dev.10.0 → 2.0.0-dev.13.0

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 (53) hide show
  1. package/lib/components/RichTextEditor/DecoratorComponents/Table.d.ts +2 -0
  2. package/lib/components/RichTextEditor/DecoratorComponents/Table.d.ts.map +1 -1
  3. package/lib/components/RichTextEditor/DecoratorComponents/Table.js +4 -3
  4. package/lib/components/RichTextEditor/DecoratorComponents/Table.js.map +1 -1
  5. package/lib/components/RichTextEditor/RichTextEditor.context.d.ts +2 -2
  6. package/lib/components/RichTextEditor/RichTextEditor.context.d.ts.map +1 -1
  7. package/lib/components/RichTextEditor/RichTextEditor.context.js.map +1 -1
  8. package/lib/components/RichTextEditor/RichTextEditor.d.ts.map +1 -1
  9. package/lib/components/RichTextEditor/RichTextEditor.js +39 -42
  10. package/lib/components/RichTextEditor/RichTextEditor.js.map +1 -1
  11. package/lib/components/RichTextEditor/RichTextEditor.styles.d.ts +2 -0
  12. package/lib/components/RichTextEditor/RichTextEditor.styles.d.ts.map +1 -1
  13. package/lib/components/RichTextEditor/RichTextEditor.styles.js +96 -45
  14. package/lib/components/RichTextEditor/RichTextEditor.styles.js.map +1 -1
  15. package/lib/components/RichTextEditor/RichTextViewer.d.ts.map +1 -1
  16. package/lib/components/RichTextEditor/RichTextViewer.js +7 -16
  17. package/lib/components/RichTextEditor/RichTextViewer.js.map +1 -1
  18. package/lib/components/RichTextEditor/Toolbar/AnchorButton.js +7 -12
  19. package/lib/components/RichTextEditor/Toolbar/AnchorButton.js.map +1 -1
  20. package/lib/components/RichTextEditor/Toolbar/ImageButton.js +3 -5
  21. package/lib/components/RichTextEditor/Toolbar/ImageButton.js.map +1 -1
  22. package/lib/components/RichTextEditor/Toolbar/TextSelect.js +1 -4
  23. package/lib/components/RichTextEditor/Toolbar/TextSelect.js.map +1 -1
  24. package/lib/components/RichTextEditor/Toolbar/Toolbar.d.ts.map +1 -1
  25. package/lib/components/RichTextEditor/Toolbar/Toolbar.js +5 -16
  26. package/lib/components/RichTextEditor/Toolbar/Toolbar.js.map +1 -1
  27. package/lib/components/RichTextEditor/Toolbar/ToolbarButton.js +2 -3
  28. package/lib/components/RichTextEditor/Toolbar/ToolbarButton.js.map +1 -1
  29. package/lib/components/RichTextEditor/mocks/RichTextEditor.mocks.d.ts +3 -0
  30. package/lib/components/RichTextEditor/mocks/RichTextEditor.mocks.d.ts.map +1 -0
  31. package/lib/components/RichTextEditor/mocks/RichTextEditor.mocks.js +36 -0
  32. package/lib/components/RichTextEditor/mocks/RichTextEditor.mocks.js.map +1 -0
  33. package/lib/components/RichTextEditor/utils/EditorCommands.d.ts.map +1 -1
  34. package/lib/components/RichTextEditor/utils/EditorCommands.js +21 -32
  35. package/lib/components/RichTextEditor/utils/EditorCommands.js.map +1 -1
  36. package/lib/components/RichTextEditor/utils/ListCommands.js +8 -12
  37. package/lib/components/RichTextEditor/utils/ListCommands.js.map +1 -1
  38. package/lib/components/RichTextEditor/utils/htmlConverter.d.ts.map +1 -1
  39. package/lib/components/RichTextEditor/utils/htmlConverter.js +2 -2
  40. package/lib/components/RichTextEditor/utils/htmlConverter.js.map +1 -1
  41. package/lib/components/RichTextEditor/utils/interactionRenderer.js +1 -1
  42. package/lib/components/RichTextEditor/utils/interactionRenderer.js.map +1 -1
  43. package/lib/components/RichTextEditor/utils/markdownConverter.d.ts.map +1 -1
  44. package/lib/components/RichTextEditor/utils/markdownConverter.js +4 -7
  45. package/lib/components/RichTextEditor/utils/markdownConverter.js.map +1 -1
  46. package/lib/components/RichTextEditor/utils/renderers.js +1 -2
  47. package/lib/components/RichTextEditor/utils/renderers.js.map +1 -1
  48. package/lib/components/RichTextEditor/utils/search.js +1 -2
  49. package/lib/components/RichTextEditor/utils/search.js.map +1 -1
  50. package/lib/components/RichTextEditor/utils/slateConverter.d.ts.map +1 -1
  51. package/lib/components/RichTextEditor/utils/slateConverter.js +1 -0
  52. package/lib/components/RichTextEditor/utils/slateConverter.js.map +1 -1
  53. package/package.json +14 -12
@@ -73,7 +73,6 @@ const commands = {
73
73
  },
74
74
  // Appends a 3x3 table into the editor and adds a blank line to the bottom
75
75
  appendTable: (editor) => {
76
- var _a;
77
76
  const baseArr = new Array(3).fill(new Array(3).fill(0));
78
77
  const table = [
79
78
  {
@@ -102,7 +101,7 @@ const commands = {
102
101
  ];
103
102
  Transforms.insertNodes(editor, table, { mode: 'highest' });
104
103
  const [firstTableCell] = Editor.nodes(editor, {
105
- at: (_a = editor.selection) === null || _a === void 0 ? void 0 : _a.anchor.path.slice(0, 1),
104
+ at: editor.selection?.anchor.path.slice(0, 1),
106
105
  match: n => Element.isElement(n) && n.type === 'paragraph',
107
106
  mode: 'highest'
108
107
  });
@@ -213,28 +212,27 @@ const commands = {
213
212
  * Will re-position cursor to the start/end of the searchResult if arrow navigation is used.
214
213
  */
215
214
  checkSearchDownKeys: (editor, e) => {
216
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
217
215
  const [text] = Editor.nodes(editor, {
218
216
  match: n => Text.isText(n)
219
217
  });
220
218
  if (text) {
221
219
  const [node, path] = text;
222
- const nextNode = (_a = Editor.next(editor)) === null || _a === void 0 ? void 0 : _a[0];
223
- const nextPath = (_b = Editor.next(editor)) === null || _b === void 0 ? void 0 : _b[1];
224
- const previousNode = (_c = Editor.previous(editor)) === null || _c === void 0 ? void 0 : _c[0];
225
- const previousPath = (_d = Editor.previous(editor)) === null || _d === void 0 ? void 0 : _d[1];
220
+ const nextNode = Editor.next(editor)?.[0];
221
+ const nextPath = Editor.next(editor)?.[1];
222
+ const previousNode = Editor.previous(editor)?.[0];
223
+ const previousPath = Editor.previous(editor)?.[1];
226
224
  const next = nextNode && nextNode.searchResult;
227
- const nextInline = next && path[0] === (nextPath === null || nextPath === void 0 ? void 0 : nextPath[0]);
225
+ const nextInline = next && path[0] === nextPath?.[0];
228
226
  const previous = previousNode && previousNode.searchResult;
229
- const previousInline = previous && path[0] === (previousPath === null || previousPath === void 0 ? void 0 : previousPath[0]);
227
+ const previousInline = previous && path[0] === previousPath?.[0];
230
228
  // Checks if the current selection is a single cursor point rather than spanning multiple characters
231
- const singlePointSelection = ((_e = editor.selection) === null || _e === void 0 ? void 0 : _e.anchor.offset) === ((_f = editor.selection) === null || _f === void 0 ? void 0 : _f.focus.offset) &&
232
- ((_g = editor.selection) === null || _g === void 0 ? void 0 : _g.anchor.path[0]) === ((_h = editor.selection) === null || _h === void 0 ? void 0 : _h.focus.path[0]) &&
233
- ((_j = editor.selection) === null || _j === void 0 ? void 0 : _j.anchor.path[1]) === ((_k = editor.selection) === null || _k === void 0 ? void 0 : _k.focus.path[1]);
229
+ const singlePointSelection = editor.selection?.anchor.offset === editor.selection?.focus.offset &&
230
+ editor.selection?.anchor.path[0] === editor.selection?.focus.path[0] &&
231
+ editor.selection?.anchor.path[1] === editor.selection?.focus.path[1];
234
232
  // Checks if the current selected node is a search result, or directly adjacent inline with a search result
235
233
  if (node.searchResult || (next && nextInline) || (previous && previousInline)) {
236
- const atStart = node.searchResult && ((_l = editor.selection) === null || _l === void 0 ? void 0 : _l.anchor.offset) === 0;
237
- const atEnd = node.searchResult && ((_m = editor.selection) === null || _m === void 0 ? void 0 : _m.anchor.offset) === node.text.length;
234
+ const atStart = node.searchResult && editor.selection?.anchor.offset === 0;
235
+ const atEnd = node.searchResult && editor.selection?.anchor.offset === node.text.length;
238
236
  // Deletes the entire search result only if the cursor is at the end of the search result
239
237
  if (e.key === 'Backspace' && (atEnd || (previous && previousInline))) {
240
238
  if (singlePointSelection)
@@ -280,15 +278,14 @@ const commands = {
280
278
  },
281
279
  // Checks arrow navigation key up events around search results
282
280
  checkSearchUpKeys: (editor, e) => {
283
- var _a, _b;
284
281
  const [text] = Editor.nodes(editor, {
285
282
  match: n => Text.isText(n)
286
283
  });
287
284
  if (text) {
288
285
  const [node, path] = text;
289
286
  const cursorInSearchResult = node.searchResult &&
290
- ((_a = editor.selection) === null || _a === void 0 ? void 0 : _a.anchor.path[0]) === path[0] &&
291
- ((_b = editor.selection) === null || _b === void 0 ? void 0 : _b.anchor.path[1]) === path[1];
287
+ editor.selection?.anchor.path[0] === path[0] &&
288
+ editor.selection?.anchor.path[1] === path[1];
292
289
  if (cursorInSearchResult && editor.selection) {
293
290
  const distanceToStart = editor.selection.anchor.offset;
294
291
  const distanceToEnd = node.text.length - editor.selection.anchor.offset;
@@ -405,22 +402,14 @@ const commands = {
405
402
  commandExecuted = true;
406
403
  }
407
404
  }
408
- else if (e.shiftKey) {
409
- switch (e.keyCode) {
410
- case 77:
411
- commands.unindent(editor);
412
- commandExecuted = true;
413
- break;
414
- default:
405
+ else if (e.keyCode === 77) {
406
+ if (e.shiftKey) {
407
+ commands.unindent(editor);
408
+ commandExecuted = true;
415
409
  }
416
- }
417
- else {
418
- switch (e.keyCode) {
419
- case 77:
420
- commands.indent(editor);
421
- commandExecuted = true;
422
- break;
423
- default:
410
+ else {
411
+ commands.indent(editor);
412
+ commandExecuted = true;
424
413
  }
425
414
  }
426
415
  }
@@ -1 +1 @@
1
- {"version":3,"file":"EditorCommands.js","sourceRoot":"","sources":["../../../../src/components/RichTextEditor/utils/EditorCommands.ts"],"names":[],"mappings":"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","sourcesContent":["import { KeyboardEvent } from 'react';\nimport {\n Editor,\n Transforms,\n Range,\n Path,\n NodeEntry,\n Node,\n Element,\n Text,\n CosmosCustom\n} from 'slate';\n\nimport ListCommands from './ListCommands';\n\nconst textKeyCodeMapping: { [key: number]: Element['type'] } = {\n 48: 'paragraph',\n 49: 'heading-1',\n 50: 'heading-2',\n 51: 'heading-3',\n 52: 'heading-4'\n};\n\nconst commands = {\n // Checks if an inline format is active\n isFormatActive: (format: Exclude<keyof Text, 'text'>, editor: Editor) => {\n const marks = Editor.marks(editor);\n return marks ? marks[format] === true : false;\n },\n // Toggles an inline format on or off\n toggleFormat: (format: Exclude<keyof Text, 'text'>, editor: Editor) => {\n const formatActive = commands.isFormatActive(format, editor);\n if (formatActive) {\n Editor.removeMark(editor, format);\n } else {\n Editor.addMark(editor, format, true);\n }\n },\n // Checks if a block level format is active\n isBlockActive: (format: Element['type'], editor: Editor) => {\n const [match] = Editor.nodes<Element>(editor, {\n match: n => Element.isElement(n) && n.type === format\n });\n\n return !!match;\n },\n // Gets the active block level type\n getActiveBlockType: (editor: Editor): string => {\n const [match] = Editor.nodes<Element>(editor, {\n at: editor.selection || undefined,\n match: Element.isElement,\n mode: 'lowest'\n });\n\n if (match) {\n return match[0].type;\n }\n return '';\n },\n // Sets the block type of the currently selected block\n setBlock: (format: Element['type'], editor: Editor) => {\n Transforms.setNodes(editor, { type: format }, { mode: 'lowest' });\n },\n // Replaces a target in the editor with the given text\n replaceWithText: (editor: Editor, target: Range | null, text: string) => {\n if (target) {\n Transforms.select(editor, target);\n }\n Transforms.insertText(editor, text);\n Transforms.move(editor);\n },\n // Replaces a target in the editor with the given node\n replaceWithNodes: (editor: Editor, target: Range | null, node: Node) => {\n if (target) {\n Transforms.select(editor, target);\n }\n Transforms.insertNodes(editor, node);\n Transforms.move(editor);\n },\n // Gets the highest selected block level node\n getSelectedNode: (editor: Editor): NodeEntry<Node> => {\n const [node] = Editor.nodes<Element>(editor, {\n at: editor.selection || undefined,\n match: n => Element.isElement(n),\n mode: 'highest'\n });\n return node;\n },\n // Appends a 3x3 table into the editor and adds a blank line to the bottom\n appendTable: (editor: Editor) => {\n const baseArr: unknown[][] = new Array(3).fill(new Array(3).fill(0));\n const table: [CosmosCustom.TableElement, CosmosCustom.ParagraphElement] = [\n {\n type: 'table',\n children: [\n {\n type: 'table-body',\n children: baseArr.map(row => {\n return {\n type: 'table-row',\n children: row.map(() => {\n return {\n type: 'table-cell',\n children: [{ type: 'paragraph', children: [{ text: '' }] }]\n };\n })\n };\n })\n }\n ]\n },\n {\n type: 'paragraph',\n children: [{ text: '' }]\n }\n ];\n\n Transforms.insertNodes(editor, table, { mode: 'highest' });\n const [firstTableCell] = Editor.nodes<CosmosCustom.ParagraphElement>(editor, {\n at: editor.selection?.anchor.path.slice(0, 1),\n match: n => Element.isElement(n) && n.type === 'paragraph',\n mode: 'highest'\n });\n if (firstTableCell) {\n const [, path] = firstTableCell;\n path.push(0);\n const nextPosition = { path, offset: 0 };\n Transforms.setSelection(editor, { anchor: nextPosition, focus: nextPosition });\n }\n },\n // Finds the image placeholder and replaces it with an image node\n appendImage: (editor: Editor, imageData: { src: string; alt: string }, id: string) => {\n const [node] = Editor.nodes<CosmosCustom.ImagePlaceholderElement>(editor, {\n match: n => Element.isElement(n) && n.type === 'image-placeholder',\n at: [Number(id)]\n });\n\n if (node) {\n const [, path] = node;\n Transforms.setNodes(\n editor,\n { type: 'image', src: imageData.src, alt: imageData.alt },\n { at: path }\n );\n Transforms.unsetNodes(editor, 'id', { at: path });\n }\n },\n appendImagePlaceholder: (editor: Editor): string => {\n const node = commands.getSelectedNode(editor);\n\n if (node) {\n const [, path] = node;\n const next = Path.next(path);\n Transforms.insertNodes(\n editor,\n { type: 'image-placeholder', children: [{ text: '' }] },\n { at: next }\n );\n return next[0].toString();\n }\n return '';\n },\n // Creates a link at the given selection\n createLink: (editor: Editor, text: string, url: string, selection: Range | null) => {\n const linkNode = { text: text || url, href: url };\n if (selection) {\n if (Range.isCollapsed(selection)) {\n const [node] = Editor.node(editor, selection);\n if (Text.isText(node) && node.href) {\n const before = Editor.before(editor, selection, { unit: 'word' });\n const after = Editor.after(editor, selection, { unit: 'word' });\n\n if (before && after) {\n Transforms.insertNodes(editor, [linkNode], { at: { anchor: before, focus: after } });\n } else if (before) {\n const calculatedAfter = Editor.after(editor, before, { unit: 'word' });\n if (calculatedAfter) {\n Transforms.insertNodes(editor, [linkNode], {\n at: { anchor: before, focus: calculatedAfter }\n });\n }\n } else if (after) {\n const calculatedBefore = Editor.before(editor, after, { unit: 'word' });\n if (calculatedBefore) {\n Transforms.insertNodes(editor, [linkNode], {\n at: { anchor: calculatedBefore, focus: after }\n });\n }\n }\n } else {\n Transforms.insertNodes(editor, [linkNode]);\n }\n } else {\n Transforms.insertNodes(editor, [linkNode], {\n at: selection\n });\n }\n } else {\n Transforms.insertNodes(editor, [linkNode]);\n }\n },\n // Used to handle the enter key when the cursor is next to an image, inserts a new paragraph\n checkImageEnter: (editor: Editor, e: KeyboardEvent) => {\n const [image] = Editor.nodes<CosmosCustom.ImageElement>(editor, {\n match: n => Element.isElement(n) && n.type === 'image'\n });\n if (image) {\n if (e.keyCode < 37 && e.keyCode > 40) {\n e.preventDefault();\n }\n if (e.key === 'Enter') {\n e.preventDefault();\n const [, path] = image;\n const next = Path.next(path);\n Transforms.insertNodes(\n editor,\n { type: 'paragraph', children: [{ text: '' }] },\n { at: next }\n );\n Transforms.select(editor, next);\n }\n }\n },\n // Turns the href property off on the text node when space is pressed while on a link\n checkLinkBreak: (editor: Editor, e: KeyboardEvent) => {\n const [link] = Editor.nodes<Text>(editor, {\n match: n => Text.isText(n) && !!n.href\n });\n if (link && (e.key === ' ' || e.key === 'Enter')) {\n e.preventDefault();\n Editor.insertNode(editor, { text: e.key === 'Enter' ? '\\n' : ' ' });\n Editor.removeMark(editor, 'href');\n }\n },\n /**\n * Turns the searchResult property off on the text node when any key is pressed while on a searchResult.\n * Will delete the searchResult node if backspace key is hit.\n * Will re-position cursor to the start/end of the searchResult if arrow navigation is used.\n */\n checkSearchDownKeys: (editor: Editor, e: KeyboardEvent) => {\n const [text] = Editor.nodes<Text>(editor, {\n match: n => Text.isText(n)\n });\n\n if (text) {\n const [node, path] = text;\n const nextNode = Editor.next(editor)?.[0] as Text;\n const nextPath = Editor.next(editor)?.[1];\n const previousNode = Editor.previous(editor)?.[0] as Text;\n const previousPath = Editor.previous(editor)?.[1];\n\n const next = nextNode && nextNode.searchResult;\n const nextInline = next && path[0] === nextPath?.[0];\n const previous = previousNode && previousNode.searchResult;\n const previousInline = previous && path[0] === previousPath?.[0];\n\n // Checks if the current selection is a single cursor point rather than spanning multiple characters\n const singlePointSelection =\n editor.selection?.anchor.offset === editor.selection?.focus.offset &&\n editor.selection?.anchor.path[0] === editor.selection?.focus.path[0] &&\n editor.selection?.anchor.path[1] === editor.selection?.focus.path[1];\n\n // Checks if the current selected node is a search result, or directly adjacent inline with a search result\n if (node.searchResult || (next && nextInline) || (previous && previousInline)) {\n const atStart = node.searchResult && editor.selection?.anchor.offset === 0;\n const atEnd = node.searchResult && editor.selection?.anchor.offset === node.text.length;\n\n // Deletes the entire search result only if the cursor is at the end of the search result\n if (e.key === 'Backspace' && (atEnd || (previous && previousInline))) {\n if (singlePointSelection) e.preventDefault();\n Transforms.delete(editor, { at: previous ? previousPath : path });\n // Deletes the entire search result only if the cursor is at the start of the search result\n } else if (e.key === 'Delete' && (atStart || (next && nextInline))) {\n if (singlePointSelection) e.preventDefault();\n Transforms.delete(editor, { at: next ? nextPath : path });\n // Moves cursor to start of search result only if the cursor is at the end of the search result\n } else if (e.key === 'ArrowLeft' && (atEnd || (previous && previousInline))) {\n if (singlePointSelection) e.preventDefault();\n Transforms.move(editor, {\n distance: previous ? previousNode.text.length : node.text.length,\n unit: 'character',\n reverse: true\n });\n // Moves cursor to end of search result only if the cursor is at the start of the search result\n } else if (e.key === 'ArrowRight' && (atStart || (next && nextInline))) {\n if (singlePointSelection) e.preventDefault();\n Transforms.move(editor, {\n distance: next ? nextNode.text.length : node.text.length,\n unit: 'character'\n });\n // Ensures all other character (besides special key bindings) are inserted as plain text\n } else if (e.key.length === 1 && !e.altKey && !e.ctrlKey && !e.metaKey) {\n e.preventDefault();\n Editor.insertNode(editor, { text: e.key === 'Enter' ? '\\n' : e.key });\n }\n\n // Prevents partial search result selections from disabling the searchResult flag\n if (singlePointSelection) {\n Editor.removeMark(editor, 'searchResult');\n }\n }\n }\n },\n // Checks arrow navigation key up events around search results\n checkSearchUpKeys: (editor: Editor, e: KeyboardEvent) => {\n const [text] = Editor.nodes<Text>(editor, {\n match: n => Text.isText(n)\n });\n\n if (text) {\n const [node, path] = text;\n\n const cursorInSearchResult =\n node.searchResult &&\n editor.selection?.anchor.path[0] === path[0] &&\n editor.selection?.anchor.path[1] === path[1];\n\n if (cursorInSearchResult && editor.selection) {\n const distanceToStart = editor.selection.anchor.offset;\n const distanceToEnd = node.text.length - editor.selection.anchor.offset;\n // Moves cursor to the start of the search result\n if (e.key === 'ArrowLeft') {\n e.preventDefault();\n Transforms.move(editor, {\n distance: distanceToStart,\n unit: 'character',\n reverse: true\n });\n // Moves cursor to end of search result\n } else if (e.key === 'ArrowRight') {\n e.preventDefault();\n Transforms.move(editor, {\n distance: distanceToEnd,\n unit: 'character'\n });\n // Moves cursor to start or end of search result, whichever is closer\n } else if (e.key === 'ArrowUp' || e.key === 'ArrowDown') {\n e.preventDefault();\n Transforms.move(editor, {\n distance: distanceToStart <= distanceToEnd ? distanceToStart : distanceToEnd,\n unit: 'character',\n reverse: distanceToStart <= distanceToEnd\n });\n }\n }\n }\n },\n // Either adds a tab character or indents a list depending on the selection\n indent: (editor: Editor) => {\n const [nodeInListItem] = Editor.nodes<CosmosCustom.ListElement>(editor, {\n match: n => Element.isElement(n) && n.type === 'list-item'\n });\n\n if (nodeInListItem) {\n ListCommands.nestList(editor);\n return;\n }\n\n if (editor.selection) {\n let start = Editor.before(editor, editor.selection, { unit: 'block' });\n start = start || Editor.start(editor, editor.selection);\n Transforms.insertText(editor, '\\t', { at: start });\n }\n },\n // Either removes a tab character or un indents a list depending on the selection\n unindent: (editor: Editor) => {\n const [nodeInListItem] = Editor.nodes<CosmosCustom.ListItemElement>(editor, {\n match: n => Element.isElement(n) && n.type === 'list-item'\n });\n\n if (nodeInListItem) {\n ListCommands.unNestList(editor);\n return;\n }\n\n if (editor.selection) {\n let start = Editor.before(editor, editor.selection, { unit: 'block' });\n start = start || Editor.start(editor, editor.selection);\n let end = Editor.after(editor, editor.selection, { unit: 'block' });\n end = end || Editor.end(editor, editor.selection);\n if (start && end) {\n const text = Editor.string(editor, { anchor: start, focus: end });\n const newText = text.replace(/\\t/, '');\n Transforms.insertText(editor, newText, { at: { anchor: start, focus: end } });\n }\n }\n },\n checkKeyCommands: (editor: Editor, e: KeyboardEvent) => {\n const cmdOrCtrl = e.metaKey || e.ctrlKey;\n let commandExecuted = false;\n if (cmdOrCtrl) {\n // Command or Ctrl + Shift\n if (e.shiftKey) {\n switch (e.key) {\n case 'b':\n commands.toggleFormat('bold', editor);\n commandExecuted = true;\n break;\n case 'i':\n commands.toggleFormat('italic', editor);\n commandExecuted = true;\n break;\n case 'x':\n commands.toggleFormat('line-through', editor);\n commandExecuted = true;\n break;\n case 'l':\n ListCommands.toggleList('unordered-list', editor);\n commandExecuted = true;\n break;\n default:\n }\n // Command or Ctrl but not alt\n } else if (!e.shiftKey && !e.altKey) {\n switch (e.key) {\n case 'b':\n commands.toggleFormat('bold', editor);\n commandExecuted = true;\n break;\n case 'i':\n commands.toggleFormat('italic', editor);\n commandExecuted = true;\n break;\n default:\n }\n }\n }\n\n if (e.altKey) {\n if (cmdOrCtrl) {\n if (textKeyCodeMapping[e.keyCode]) {\n commands.setBlock(textKeyCodeMapping[e.keyCode], editor);\n commandExecuted = true;\n }\n } else if (e.shiftKey) {\n switch (e.keyCode) {\n case 77:\n commands.unindent(editor);\n commandExecuted = true;\n break;\n default:\n }\n } else {\n switch (e.keyCode) {\n case 77:\n commands.indent(editor);\n commandExecuted = true;\n break;\n default:\n }\n }\n }\n\n if (commandExecuted) e.preventDefault();\n }\n};\n\nexport default commands;\n"]}
1
+ {"version":3,"file":"EditorCommands.js","sourceRoot":"","sources":["../../../../src/components/RichTextEditor/utils/EditorCommands.ts"],"names":[],"mappings":"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","sourcesContent":["import { KeyboardEvent } from 'react';\nimport {\n Editor,\n Transforms,\n Range,\n Path,\n NodeEntry,\n Node,\n Element,\n Text,\n CosmosCustom\n} from 'slate';\n\nimport ListCommands from './ListCommands';\n\nconst textKeyCodeMapping: { [key: number]: Element['type'] } = {\n 48: 'paragraph',\n 49: 'heading-1',\n 50: 'heading-2',\n 51: 'heading-3',\n 52: 'heading-4'\n};\n\nconst commands = {\n // Checks if an inline format is active\n isFormatActive: (format: Exclude<keyof Text, 'text'>, editor: Editor) => {\n const marks = Editor.marks(editor);\n return marks ? marks[format] === true : false;\n },\n // Toggles an inline format on or off\n toggleFormat: (format: Exclude<keyof Text, 'text'>, editor: Editor) => {\n const formatActive = commands.isFormatActive(format, editor);\n if (formatActive) {\n Editor.removeMark(editor, format);\n } else {\n Editor.addMark(editor, format, true);\n }\n },\n // Checks if a block level format is active\n isBlockActive: (format: Element['type'], editor: Editor) => {\n const [match] = Editor.nodes<Element>(editor, {\n match: n => Element.isElement(n) && n.type === format\n });\n\n return !!match;\n },\n // Gets the active block level type\n getActiveBlockType: (editor: Editor): string => {\n const [match] = Editor.nodes<Element>(editor, {\n at: editor.selection || undefined,\n match: Element.isElement,\n mode: 'lowest'\n });\n\n if (match) {\n return match[0].type;\n }\n return '';\n },\n // Sets the block type of the currently selected block\n setBlock: (format: Element['type'], editor: Editor) => {\n Transforms.setNodes(editor, { type: format }, { mode: 'lowest' });\n },\n // Replaces a target in the editor with the given text\n replaceWithText: (editor: Editor, target: Range | null, text: string) => {\n if (target) {\n Transforms.select(editor, target);\n }\n Transforms.insertText(editor, text);\n Transforms.move(editor);\n },\n // Replaces a target in the editor with the given node\n replaceWithNodes: (editor: Editor, target: Range | null, node: Node) => {\n if (target) {\n Transforms.select(editor, target);\n }\n Transforms.insertNodes(editor, node);\n Transforms.move(editor);\n },\n // Gets the highest selected block level node\n getSelectedNode: (editor: Editor): NodeEntry<Node> => {\n const [node] = Editor.nodes<Element>(editor, {\n at: editor.selection || undefined,\n match: n => Element.isElement(n),\n mode: 'highest'\n });\n return node;\n },\n // Appends a 3x3 table into the editor and adds a blank line to the bottom\n appendTable: (editor: Editor) => {\n const baseArr: unknown[][] = new Array(3).fill(new Array(3).fill(0));\n const table: [CosmosCustom.TableElement, CosmosCustom.ParagraphElement] = [\n {\n type: 'table',\n children: [\n {\n type: 'table-body',\n children: baseArr.map(row => {\n return {\n type: 'table-row',\n children: row.map(() => {\n return {\n type: 'table-cell',\n children: [{ type: 'paragraph', children: [{ text: '' }] }]\n };\n })\n };\n })\n }\n ]\n },\n {\n type: 'paragraph',\n children: [{ text: '' }]\n }\n ];\n\n Transforms.insertNodes(editor, table, { mode: 'highest' });\n const [firstTableCell] = Editor.nodes<CosmosCustom.ParagraphElement>(editor, {\n at: editor.selection?.anchor.path.slice(0, 1),\n match: n => Element.isElement(n) && n.type === 'paragraph',\n mode: 'highest'\n });\n if (firstTableCell) {\n const [, path] = firstTableCell;\n path.push(0);\n const nextPosition = { path, offset: 0 };\n Transforms.setSelection(editor, { anchor: nextPosition, focus: nextPosition });\n }\n },\n // Finds the image placeholder and replaces it with an image node\n appendImage: (editor: Editor, imageData: { src: string; alt: string }, id: string) => {\n const [node] = Editor.nodes<CosmosCustom.ImagePlaceholderElement>(editor, {\n match: n => Element.isElement(n) && n.type === 'image-placeholder',\n at: [Number(id)]\n });\n\n if (node) {\n const [, path] = node;\n Transforms.setNodes(\n editor,\n { type: 'image', src: imageData.src, alt: imageData.alt },\n { at: path }\n );\n Transforms.unsetNodes(editor, 'id', { at: path });\n }\n },\n appendImagePlaceholder: (editor: Editor): string => {\n const node = commands.getSelectedNode(editor);\n\n if (node) {\n const [, path] = node;\n const next = Path.next(path);\n Transforms.insertNodes(\n editor,\n { type: 'image-placeholder', children: [{ text: '' }] },\n { at: next }\n );\n return next[0].toString();\n }\n return '';\n },\n // Creates a link at the given selection\n createLink: (editor: Editor, text: string, url: string, selection: Range | null) => {\n const linkNode = { text: text || url, href: url };\n if (selection) {\n if (Range.isCollapsed(selection)) {\n const [node] = Editor.node(editor, selection);\n if (Text.isText(node) && node.href) {\n const before = Editor.before(editor, selection, { unit: 'word' });\n const after = Editor.after(editor, selection, { unit: 'word' });\n\n if (before && after) {\n Transforms.insertNodes(editor, [linkNode], { at: { anchor: before, focus: after } });\n } else if (before) {\n const calculatedAfter = Editor.after(editor, before, { unit: 'word' });\n if (calculatedAfter) {\n Transforms.insertNodes(editor, [linkNode], {\n at: { anchor: before, focus: calculatedAfter }\n });\n }\n } else if (after) {\n const calculatedBefore = Editor.before(editor, after, { unit: 'word' });\n if (calculatedBefore) {\n Transforms.insertNodes(editor, [linkNode], {\n at: { anchor: calculatedBefore, focus: after }\n });\n }\n }\n } else {\n Transforms.insertNodes(editor, [linkNode]);\n }\n } else {\n Transforms.insertNodes(editor, [linkNode], {\n at: selection\n });\n }\n } else {\n Transforms.insertNodes(editor, [linkNode]);\n }\n },\n // Used to handle the enter key when the cursor is next to an image, inserts a new paragraph\n checkImageEnter: (editor: Editor, e: KeyboardEvent) => {\n const [image] = Editor.nodes<CosmosCustom.ImageElement>(editor, {\n match: n => Element.isElement(n) && n.type === 'image'\n });\n if (image) {\n if (e.keyCode < 37 && e.keyCode > 40) {\n e.preventDefault();\n }\n if (e.key === 'Enter') {\n e.preventDefault();\n const [, path] = image;\n const next = Path.next(path);\n Transforms.insertNodes(\n editor,\n { type: 'paragraph', children: [{ text: '' }] },\n { at: next }\n );\n Transforms.select(editor, next);\n }\n }\n },\n // Turns the href property off on the text node when space is pressed while on a link\n checkLinkBreak: (editor: Editor, e: KeyboardEvent) => {\n const [link] = Editor.nodes<Text>(editor, {\n match: n => Text.isText(n) && !!n.href\n });\n if (link && (e.key === ' ' || e.key === 'Enter')) {\n e.preventDefault();\n Editor.insertNode(editor, { text: e.key === 'Enter' ? '\\n' : ' ' });\n Editor.removeMark(editor, 'href');\n }\n },\n /**\n * Turns the searchResult property off on the text node when any key is pressed while on a searchResult.\n * Will delete the searchResult node if backspace key is hit.\n * Will re-position cursor to the start/end of the searchResult if arrow navigation is used.\n */\n checkSearchDownKeys: (editor: Editor, e: KeyboardEvent) => {\n const [text] = Editor.nodes<Text>(editor, {\n match: n => Text.isText(n)\n });\n\n if (text) {\n const [node, path] = text;\n const nextNode = Editor.next(editor)?.[0] as Text;\n const nextPath = Editor.next(editor)?.[1];\n const previousNode = Editor.previous(editor)?.[0] as Text;\n const previousPath = Editor.previous(editor)?.[1];\n\n const next = nextNode && nextNode.searchResult;\n const nextInline = next && path[0] === nextPath?.[0];\n const previous = previousNode && previousNode.searchResult;\n const previousInline = previous && path[0] === previousPath?.[0];\n\n // Checks if the current selection is a single cursor point rather than spanning multiple characters\n const singlePointSelection =\n editor.selection?.anchor.offset === editor.selection?.focus.offset &&\n editor.selection?.anchor.path[0] === editor.selection?.focus.path[0] &&\n editor.selection?.anchor.path[1] === editor.selection?.focus.path[1];\n\n // Checks if the current selected node is a search result, or directly adjacent inline with a search result\n if (node.searchResult || (next && nextInline) || (previous && previousInline)) {\n const atStart = node.searchResult && editor.selection?.anchor.offset === 0;\n const atEnd = node.searchResult && editor.selection?.anchor.offset === node.text.length;\n\n // Deletes the entire search result only if the cursor is at the end of the search result\n if (e.key === 'Backspace' && (atEnd || (previous && previousInline))) {\n if (singlePointSelection) e.preventDefault();\n Transforms.delete(editor, { at: previous ? previousPath : path });\n // Deletes the entire search result only if the cursor is at the start of the search result\n } else if (e.key === 'Delete' && (atStart || (next && nextInline))) {\n if (singlePointSelection) e.preventDefault();\n Transforms.delete(editor, { at: next ? nextPath : path });\n // Moves cursor to start of search result only if the cursor is at the end of the search result\n } else if (e.key === 'ArrowLeft' && (atEnd || (previous && previousInline))) {\n if (singlePointSelection) e.preventDefault();\n Transforms.move(editor, {\n distance: previous ? previousNode.text.length : node.text.length,\n unit: 'character',\n reverse: true\n });\n // Moves cursor to end of search result only if the cursor is at the start of the search result\n } else if (e.key === 'ArrowRight' && (atStart || (next && nextInline))) {\n if (singlePointSelection) e.preventDefault();\n Transforms.move(editor, {\n distance: next ? nextNode.text.length : node.text.length,\n unit: 'character'\n });\n // Ensures all other character (besides special key bindings) are inserted as plain text\n } else if (e.key.length === 1 && !e.altKey && !e.ctrlKey && !e.metaKey) {\n e.preventDefault();\n Editor.insertNode(editor, { text: e.key === 'Enter' ? '\\n' : e.key });\n }\n\n // Prevents partial search result selections from disabling the searchResult flag\n if (singlePointSelection) {\n Editor.removeMark(editor, 'searchResult');\n }\n }\n }\n },\n // Checks arrow navigation key up events around search results\n checkSearchUpKeys: (editor: Editor, e: KeyboardEvent) => {\n const [text] = Editor.nodes<Text>(editor, {\n match: n => Text.isText(n)\n });\n\n if (text) {\n const [node, path] = text;\n\n const cursorInSearchResult =\n node.searchResult &&\n editor.selection?.anchor.path[0] === path[0] &&\n editor.selection?.anchor.path[1] === path[1];\n\n if (cursorInSearchResult && editor.selection) {\n const distanceToStart = editor.selection.anchor.offset;\n const distanceToEnd = node.text.length - editor.selection.anchor.offset;\n // Moves cursor to the start of the search result\n if (e.key === 'ArrowLeft') {\n e.preventDefault();\n Transforms.move(editor, {\n distance: distanceToStart,\n unit: 'character',\n reverse: true\n });\n // Moves cursor to end of search result\n } else if (e.key === 'ArrowRight') {\n e.preventDefault();\n Transforms.move(editor, {\n distance: distanceToEnd,\n unit: 'character'\n });\n // Moves cursor to start or end of search result, whichever is closer\n } else if (e.key === 'ArrowUp' || e.key === 'ArrowDown') {\n e.preventDefault();\n Transforms.move(editor, {\n distance: distanceToStart <= distanceToEnd ? distanceToStart : distanceToEnd,\n unit: 'character',\n reverse: distanceToStart <= distanceToEnd\n });\n }\n }\n }\n },\n // Either adds a tab character or indents a list depending on the selection\n indent: (editor: Editor) => {\n const [nodeInListItem] = Editor.nodes<CosmosCustom.ListElement>(editor, {\n match: n => Element.isElement(n) && n.type === 'list-item'\n });\n\n if (nodeInListItem) {\n ListCommands.nestList(editor);\n return;\n }\n\n if (editor.selection) {\n let start = Editor.before(editor, editor.selection, { unit: 'block' });\n start = start || Editor.start(editor, editor.selection);\n Transforms.insertText(editor, '\\t', { at: start });\n }\n },\n // Either removes a tab character or un indents a list depending on the selection\n unindent: (editor: Editor) => {\n const [nodeInListItem] = Editor.nodes<CosmosCustom.ListItemElement>(editor, {\n match: n => Element.isElement(n) && n.type === 'list-item'\n });\n\n if (nodeInListItem) {\n ListCommands.unNestList(editor);\n return;\n }\n\n if (editor.selection) {\n let start = Editor.before(editor, editor.selection, { unit: 'block' });\n start = start || Editor.start(editor, editor.selection);\n let end = Editor.after(editor, editor.selection, { unit: 'block' });\n end = end || Editor.end(editor, editor.selection);\n if (start && end) {\n const text = Editor.string(editor, { anchor: start, focus: end });\n const newText = text.replace(/\\t/, '');\n Transforms.insertText(editor, newText, { at: { anchor: start, focus: end } });\n }\n }\n },\n checkKeyCommands: (editor: Editor, e: KeyboardEvent) => {\n const cmdOrCtrl = e.metaKey || e.ctrlKey;\n let commandExecuted = false;\n if (cmdOrCtrl) {\n // Command or Ctrl + Shift\n if (e.shiftKey) {\n switch (e.key) {\n case 'b':\n commands.toggleFormat('bold', editor);\n commandExecuted = true;\n break;\n case 'i':\n commands.toggleFormat('italic', editor);\n commandExecuted = true;\n break;\n case 'x':\n commands.toggleFormat('line-through', editor);\n commandExecuted = true;\n break;\n case 'l':\n ListCommands.toggleList('unordered-list', editor);\n commandExecuted = true;\n break;\n default:\n }\n // Command or Ctrl but not alt\n } else if (!e.shiftKey && !e.altKey) {\n switch (e.key) {\n case 'b':\n commands.toggleFormat('bold', editor);\n commandExecuted = true;\n break;\n case 'i':\n commands.toggleFormat('italic', editor);\n commandExecuted = true;\n break;\n default:\n }\n }\n }\n\n if (e.altKey) {\n if (cmdOrCtrl) {\n if (textKeyCodeMapping[e.keyCode]) {\n commands.setBlock(textKeyCodeMapping[e.keyCode], editor);\n commandExecuted = true;\n }\n } else if (e.keyCode === 77) {\n if (e.shiftKey) {\n commands.unindent(editor);\n commandExecuted = true;\n } else {\n commands.indent(editor);\n commandExecuted = true;\n }\n }\n }\n\n if (commandExecuted) e.preventDefault();\n }\n};\n\nexport default commands;\n"]}
@@ -9,9 +9,8 @@ const getNextPathBelow = (path) => {
9
9
  };
10
10
  const commands = {
11
11
  toggleList: (type, editor) => {
12
- var _a;
13
12
  const [listItemInSelection] = Editor.nodes(editor, {
14
- at: ((_a = editor.selection) === null || _a === void 0 ? void 0 : _a.anchor.path) || undefined,
13
+ at: editor.selection?.anchor.path || undefined,
15
14
  match: matchListItem
16
15
  });
17
16
  if (!listItemInSelection) {
@@ -29,12 +28,11 @@ const commands = {
29
28
  }
30
29
  },
31
30
  checkListEnter: (editor, event) => {
32
- var _a, _b, _c;
33
31
  /* Gets the list item node at your selection in the lowest part of the tree.
34
32
  Your selection could technically be in multiple list items in the tree because
35
33
  the lists can be nested. That is what the mode: 'lowest' arg is for. */
36
34
  const [listItemNodeEntry] = Editor.nodes(editor, {
37
- at: ((_a = editor.selection) === null || _a === void 0 ? void 0 : _a.anchor.path) || undefined,
35
+ at: editor.selection?.anchor.path || undefined,
38
36
  match: matchListItem,
39
37
  mode: 'lowest'
40
38
  });
@@ -42,7 +40,7 @@ const commands = {
42
40
  const [listItemNode, listItemPath] = listItemNodeEntry;
43
41
  // Getting the text node
44
42
  const [[textNode]] = Editor.nodes(editor, {
45
- at: ((_b = editor.selection) === null || _b === void 0 ? void 0 : _b.anchor.path) || undefined,
43
+ at: editor.selection?.anchor.path || undefined,
46
44
  match: Text.isText
47
45
  });
48
46
  // Getting the parent list-item node
@@ -108,7 +106,7 @@ const commands = {
108
106
  // Break out of the list
109
107
  event.preventDefault();
110
108
  Transforms.unwrapNodes(editor, {
111
- at: ((_c = editor.selection) === null || _c === void 0 ? void 0 : _c.anchor.path) || undefined,
109
+ at: editor.selection?.anchor.path || undefined,
112
110
  match: matchListItem
113
111
  });
114
112
  Transforms.liftNodes(editor);
@@ -116,15 +114,14 @@ const commands = {
116
114
  }
117
115
  },
118
116
  nestList: (editor) => {
119
- var _a, _b;
120
117
  const [listItemNodeEntry] = Editor.nodes(editor, {
121
- at: ((_a = editor.selection) === null || _a === void 0 ? void 0 : _a.anchor.path) || undefined,
118
+ at: editor.selection?.anchor.path || undefined,
122
119
  match: matchListItem,
123
120
  mode: 'lowest'
124
121
  });
125
122
  let listType = 'unordered-list';
126
123
  const [highestList] = Editor.nodes(editor, {
127
- at: ((_b = editor.selection) === null || _b === void 0 ? void 0 : _b.anchor.path) || undefined,
124
+ at: editor.selection?.anchor.path || undefined,
128
125
  match: matchList,
129
126
  mode: 'highest'
130
127
  });
@@ -231,10 +228,9 @@ const commands = {
231
228
  }
232
229
  },
233
230
  unNestList: (editor) => {
234
- var _a, _b;
235
231
  // Get the current node to be un nested
236
232
  const [[node, nodePath]] = Editor.nodes(editor, {
237
- at: ((_a = editor.selection) === null || _a === void 0 ? void 0 : _a.anchor.path) || undefined,
233
+ at: editor.selection?.anchor.path || undefined,
238
234
  match: matchListItem,
239
235
  mode: 'lowest'
240
236
  });
@@ -316,7 +312,7 @@ const commands = {
316
312
  children: [...copiedChildren]
317
313
  }, { at: nextPath });
318
314
  const [[newParentList, newParentListPath]] = Editor.nodes(editor, {
319
- at: ((_b = editor.selection) === null || _b === void 0 ? void 0 : _b.anchor.path) || undefined,
315
+ at: editor.selection?.anchor.path || undefined,
320
316
  match: matchList,
321
317
  mode: 'lowest'
322
318
  });
@@ -1 +1 @@
1
- {"version":3,"file":"ListCommands.js","sourceRoot":"","sources":["../../../../src/components/RichTextEditor/utils/ListCommands.ts"],"names":[],"mappings":"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","sourcesContent":["import { KeyboardEvent } from 'react';\nimport { Editor, Node, Element, Path, Transforms, CosmosCustom, Text, NodeEntry } from 'slate';\n\nimport { createUID } from '@pega/cosmos-react-core';\n\nimport { LIST_TYPES, TEXT_TYPES } from './utils.types';\n\ntype FullListItemElement = CosmosCustom.ListItemElement & {\n id: string;\n parentId: string;\n order: number;\n level: number;\n};\n\nconst matchList = (n: Node): n is CosmosCustom.ListElement =>\n Element.isElement(n) && LIST_TYPES.includes(n.type);\n\nconst matchListItem = (n: Node): n is CosmosCustom.ListItemElement =>\n Element.isElement(n) && n.type === 'list-item';\n\nconst getNextPathBelow = (path: Path) => {\n path[path.length - 1] = path[path.length - 1] + 1;\n return path;\n};\n\nconst commands = {\n toggleList: (type: 'unordered-list' | 'ordered-list', editor: Editor) => {\n const [listItemInSelection] = Editor.nodes(editor, {\n at: editor.selection?.anchor.path || undefined,\n match: matchListItem\n });\n\n if (!listItemInSelection) {\n Transforms.wrapNodes(editor, { type, children: [] });\n Transforms.wrapNodes(editor, {\n type: 'list-item',\n order: 1,\n level: 1,\n id: createUID(),\n children: []\n });\n } else {\n Transforms.setNodes(editor, { type }, { match: matchList });\n }\n },\n checkListEnter: (editor: Editor, event: KeyboardEvent<any>) => {\n /* Gets the list item node at your selection in the lowest part of the tree.\n Your selection could technically be in multiple list items in the tree because\n the lists can be nested. That is what the mode: 'lowest' arg is for. */\n const [listItemNodeEntry] = Editor.nodes(editor, {\n at: editor.selection?.anchor.path || undefined,\n match: matchListItem,\n mode: 'lowest'\n });\n\n if (['Backspace', 'Delete', 'Enter'].includes(event.key) && listItemNodeEntry) {\n const [listItemNode, listItemPath] = listItemNodeEntry;\n // Getting the text node\n const [[textNode]] = Editor.nodes(editor, {\n at: editor.selection?.anchor.path || undefined,\n match: Text.isText\n });\n // Getting the parent list-item node\n const [[parentNode]] = Editor.nodes(editor, {\n at: editor.selection || undefined,\n match: matchListItem,\n mode: 'highest'\n });\n\n let belowListItemPath;\n try {\n belowListItemPath = Path.next(listItemPath);\n } catch {\n belowListItemPath = undefined;\n }\n\n if (textNode.text !== '') {\n // If the text node the selection is in is not empty, and the key that was pressed is Enter\n if (event.key === 'Enter') {\n event.preventDefault();\n const newId = createUID();\n const copiedChildren: Element[] = [];\n // If this list-item has another list nested inside of it\n if (listItemNode.children.length === 2) {\n // Copy the list nested inside\n const copiedList = { ...listItemNode.children[1] } as CosmosCustom.ListElement;\n // Add a new parentId to all the children in the list\n copiedList.children = copiedList.children.map(node => {\n return { ...node, parentId: newId };\n });\n copiedChildren.push(copiedList);\n // Remove the list\n Transforms.removeNodes(editor, { at: [...listItemPath, 1] });\n }\n /* Create a new list item with the copied children as it's children,\n and insert it into the editor */\n Transforms.insertNodes(editor, {\n type: 'list-item',\n order: listItemNode.order ? listItemNode.order + 1 : 0,\n level: listItemNode.level ? listItemNode.level : 1,\n id: newId,\n parentId: parentNode.id,\n children: [{ type: 'paragraph', children: [{ text: '' }] }, ...copiedChildren]\n });\n /* Nodes needs to be lifted one level higher because it will be inserted\n into the list item itself rather than it's parent list */\n Transforms.liftNodes<CosmosCustom.ListItemElement>(editor, {\n match: n => matchListItem(n) && n.id === newId\n });\n const selectionPoint = { path: [...Path.next(listItemPath), 0, 0], offset: 0 };\n // Set the selection to the new list item created\n Transforms.setSelection(editor, { focus: selectionPoint, anchor: selectionPoint });\n } else {\n commands.unNestList(editor);\n }\n } else if (parentNode && parentNode.children.length > 1) {\n // Un nest this list item from it's parent\n event.preventDefault();\n commands.unNestList(editor);\n } else if (belowListItemPath) {\n // Break out of the list\n event.preventDefault();\n Transforms.unwrapNodes(editor, {\n at: editor.selection?.anchor.path || undefined,\n match: matchListItem\n });\n Transforms.liftNodes(editor);\n }\n }\n },\n nestList: (editor: Editor) => {\n const [listItemNodeEntry] = Editor.nodes(editor, {\n at: editor.selection?.anchor.path || undefined,\n match: matchListItem,\n mode: 'lowest'\n });\n\n let listType: `${'un' | ''}ordered-list` = 'unordered-list';\n const [highestList] = Editor.nodes(editor, {\n at: editor.selection?.anchor.path || undefined,\n match: matchList,\n mode: 'highest'\n });\n\n if (highestList) {\n listType = highestList[0].type;\n }\n\n const [listItemNode, listItemPath] = (listItemNodeEntry as NodeEntry<FullListItemElement>) || [\n undefined,\n undefined\n ];\n\n // Try to find the path to the node above the selected list item\n let abovePath;\n try {\n abovePath = Path.previous(listItemPath);\n } catch {\n abovePath = undefined;\n }\n\n // Only nest the list if there is a list item above the list item trying to be nested\n if (listItemNode && abovePath && listItemNode.level < 3) {\n // Get the list item and it's path from above the current list item\n const [[aboveListItemNode, aboveListItemPath]] = Editor.nodes<CosmosCustom.ListItemElement>(\n editor,\n {\n at: abovePath,\n match: n => matchListItem(n) && n.level === listItemNode.level\n }\n );\n // Gets the path for the text node above list-item\n const [[, innerTextNodePath]] = Editor.nodes<CosmosCustom.TextElement>(editor, {\n at: abovePath,\n match: n => Element.isElement(n) && TEXT_TYPES.includes(n.type)\n });\n\n let copiedSubListNodes: CosmosCustom.ListItemElement[] = [];\n const newListItemChildren = [listItemNode.children[0]];\n if (listItemNode.children.length && listItemNode.children.length > 1) {\n // Copy the item to be nested's sub list if it has one\n const subList = listItemNode.children[1] as CosmosCustom.ListElement;\n if (subList) {\n copiedSubListNodes = [...subList.children];\n }\n }\n\n // If the above list item has a sub list\n if (aboveListItemNode.children.length > 1) {\n // Get the list items in the sub list of the above list item\n const { children } = aboveListItemNode.children[1] as CosmosCustom.ListElement;\n // Gets the last list item in the above sub list\n const [[parentSubListItem, parentSubListItemPath]] = Editor.nodes<FullListItemElement>(\n editor,\n {\n at: aboveListItemPath,\n match: n =>\n matchListItem(n) &&\n n.order === children.length &&\n (n.level as number) - 1 === listItemNode.level\n }\n );\n\n // Gets the path after the last list item in the above sub list\n const nextParentSubListItemPath = Path.next(parentSubListItemPath);\n\n /* Inserts a copy of the list-item you are nesting below the lowest list item\n in the above sub list, as well as copies of any children the list-item you are\n nesting had. */\n let subOrderCount = parentSubListItem.order + 1;\n Transforms.insertNodes(\n editor,\n [\n {\n ...listItemNode,\n level: listItemNode.level + 1,\n order: parentSubListItem.order + 1,\n parentId: aboveListItemNode.id,\n children: newListItemChildren\n },\n ...copiedSubListNodes.map(n => {\n subOrderCount += 1;\n return {\n ...n,\n level: listItemNode.level + 1,\n order: subOrderCount,\n parentId: aboveListItemNode.id\n };\n })\n ],\n { at: nextParentSubListItemPath }\n );\n } else {\n const nextInnerTextNodePath = getNextPathBelow(innerTextNodePath);\n // Nest the selected list item into a new list and then into the above list item\n let subOrderCount = 1;\n Transforms.insertNodes(\n editor,\n {\n type: listType,\n children: [\n {\n ...listItemNode,\n order: 1,\n level: listItemNode.level + 1,\n parentId: aboveListItemNode.id,\n children: newListItemChildren\n },\n ...copiedSubListNodes.map(n => {\n subOrderCount += 1;\n return {\n ...n,\n level: listItemNode.level + 1,\n order: subOrderCount,\n parentId: aboveListItemNode.id\n };\n })\n ]\n },\n { at: nextInnerTextNodePath, mode: 'lowest' }\n );\n }\n\n // Remove the old list item as we just copied it into the correct place\n Transforms.removeNodes(editor, { at: listItemPath });\n }\n },\n unNestList: (editor: Editor) => {\n // Get the current node to be un nested\n const [[node, nodePath]] = Editor.nodes<FullListItemElement>(editor, {\n at: editor.selection?.anchor.path || undefined,\n match: matchListItem,\n mode: 'lowest'\n });\n const [singleItemList] = Editor.nodes<CosmosCustom.ListElement>(editor, {\n match: n => matchList(n) && n.children.length === 1,\n mode: 'highest'\n });\n\n if (singleItemList) {\n Transforms.unwrapNodes(editor, { match: matchListItem });\n Transforms.unwrapNodes(editor, { match: matchList });\n return;\n }\n // Attempt to get the highest parent in the nested list if it exists\n const [highestParent] = Editor.nodes<FullListItemElement>(editor, {\n at: editor.selection || undefined,\n match: n => matchListItem(n) && node.level - (n.level as number) === 2,\n mode: 'lowest'\n });\n // Get the parent list node if it exists (list item)\n const [[parentNode]] = Editor.nodes<FullListItemElement>(editor, {\n at: editor.selection || undefined,\n match: n => matchListItem(n) && node.level - (n.level as number) === 1,\n mode: 'lowest'\n });\n // Get the parent list\n const [[parentList]] = Editor.nodes(editor, {\n at: editor.selection || undefined,\n match: matchList,\n mode: 'lowest'\n });\n if (parentNode && parentNode.children.length > 1) {\n let newParentId;\n if (highestParent) {\n const [highestParentNode] = highestParent;\n newParentId = highestParentNode.id;\n }\n\n // Setting the node to un nests new order and level\n Transforms.setNodes<CosmosCustom.ListItemElement>(\n editor,\n {\n level: node.level - 1,\n order: parentNode.order + 1\n },\n { at: nodePath, match: n => matchListItem(n) && n.id === node.id }\n );\n\n // Set the level of any children under the node we are un nesting\n Transforms.setNodes<CosmosCustom.ListItemElement>(\n editor,\n { level: node.level },\n {\n at: nodePath,\n match: n => matchListItem(n) && (n.level as number) > node.level\n }\n );\n\n // If there's a new parent id set it, otherwise unset the parent id entirely\n if (newParentId) {\n Transforms.setNodes<CosmosCustom.ListItemElement>(\n editor,\n { parentId: newParentId },\n { at: nodePath, match: n => matchListItem(n) && n.id === node.id }\n );\n } else {\n Transforms.unsetNodes<CosmosCustom.ListItemElement>(editor, 'parentId', {\n at: nodePath,\n match: n => matchListItem(n) && n.id === node.id\n });\n }\n\n const listItemsExistBelow = node.order < parentList.children.length;\n\n if (listItemsExistBelow) {\n // Getting the inner text node inside of the list item in order to get the next path\n const [[, innerTextNodePath]] = Editor.nodes(editor, {\n at: nodePath,\n match: matchList\n });\n const nextPath = Path.next(innerTextNodePath);\n const copiedChildren = [];\n\n let count = 1;\n // Copy the children from the parent list that are below the list item we are un nesting\n for (let i = node.order; i < parentList.children.length; i += 1) {\n copiedChildren.push({\n ...parentList.children[i],\n parentId: node.id,\n order: count\n });\n count += 1;\n }\n\n // Insert a new list with the copied children into the un nested list item\n Transforms.insertNodes(\n editor,\n {\n type: parentList.type,\n children: [...copiedChildren]\n },\n { at: nextPath }\n );\n\n const [[newParentList, newParentListPath]] = Editor.nodes(editor, {\n at: editor.selection?.anchor.path || undefined,\n match: matchList,\n mode: 'lowest'\n });\n\n let order = 0;\n // Set the nodes below the list item being un nested\n Transforms.setNodes<CosmosCustom.ListItemElement>(\n editor,\n {\n parentId: node.id,\n order\n },\n {\n match: n => {\n if (!matchListItem(n)) return false;\n\n if (n.parentId === node.id) order += 1;\n return n.parentId === node.id;\n }\n }\n );\n\n // Removing all old nodes from that were under the un nested item\n for (let i = newParentList.children.length - 1; i >= node.order; i -= 1) {\n const childPath = [...newParentListPath, i];\n Transforms.removeNodes(editor, { at: childPath, match: matchListItem });\n }\n }\n\n // Lift the current node at the users selection out of it's parent node twice\n Transforms.liftNodes(editor, { match: matchListItem });\n Transforms.liftNodes(editor, { match: matchListItem });\n }\n }\n};\n\nexport default commands;\n"]}
1
+ {"version":3,"file":"ListCommands.js","sourceRoot":"","sources":["../../../../src/components/RichTextEditor/utils/ListCommands.ts"],"names":[],"mappings":"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","sourcesContent":["import { KeyboardEvent } from 'react';\nimport { Editor, Node, Element, Path, Transforms, CosmosCustom, Text, NodeEntry } from 'slate';\n\nimport { createUID } from '@pega/cosmos-react-core';\n\nimport { LIST_TYPES, TEXT_TYPES } from './utils.types';\n\ntype FullListItemElement = CosmosCustom.ListItemElement & {\n id: string;\n parentId: string;\n order: number;\n level: number;\n};\n\nconst matchList = (n: Node): n is CosmosCustom.ListElement =>\n Element.isElement(n) && LIST_TYPES.includes(n.type);\n\nconst matchListItem = (n: Node): n is CosmosCustom.ListItemElement =>\n Element.isElement(n) && n.type === 'list-item';\n\nconst getNextPathBelow = (path: Path) => {\n path[path.length - 1] = path[path.length - 1] + 1;\n return path;\n};\n\nconst commands = {\n toggleList: (type: 'unordered-list' | 'ordered-list', editor: Editor) => {\n const [listItemInSelection] = Editor.nodes(editor, {\n at: editor.selection?.anchor.path || undefined,\n match: matchListItem\n });\n\n if (!listItemInSelection) {\n Transforms.wrapNodes(editor, { type, children: [] });\n Transforms.wrapNodes(editor, {\n type: 'list-item',\n order: 1,\n level: 1,\n id: createUID(),\n children: []\n });\n } else {\n Transforms.setNodes(editor, { type }, { match: matchList });\n }\n },\n checkListEnter: (editor: Editor, event: KeyboardEvent<any>) => {\n /* Gets the list item node at your selection in the lowest part of the tree.\n Your selection could technically be in multiple list items in the tree because\n the lists can be nested. That is what the mode: 'lowest' arg is for. */\n const [listItemNodeEntry] = Editor.nodes(editor, {\n at: editor.selection?.anchor.path || undefined,\n match: matchListItem,\n mode: 'lowest'\n });\n\n if (['Backspace', 'Delete', 'Enter'].includes(event.key) && listItemNodeEntry) {\n const [listItemNode, listItemPath] = listItemNodeEntry;\n // Getting the text node\n const [[textNode]] = Editor.nodes(editor, {\n at: editor.selection?.anchor.path || undefined,\n match: Text.isText\n });\n // Getting the parent list-item node\n const [[parentNode]] = Editor.nodes(editor, {\n at: editor.selection || undefined,\n match: matchListItem,\n mode: 'highest'\n });\n\n let belowListItemPath;\n try {\n belowListItemPath = Path.next(listItemPath);\n } catch {\n belowListItemPath = undefined;\n }\n\n if (textNode.text !== '') {\n // If the text node the selection is in is not empty, and the key that was pressed is Enter\n if (event.key === 'Enter') {\n event.preventDefault();\n const newId = createUID();\n const copiedChildren: Element[] = [];\n // If this list-item has another list nested inside of it\n if (listItemNode.children.length === 2) {\n // Copy the list nested inside\n const copiedList = { ...listItemNode.children[1] } as CosmosCustom.ListElement;\n // Add a new parentId to all the children in the list\n copiedList.children = copiedList.children.map(node => {\n return { ...node, parentId: newId };\n });\n copiedChildren.push(copiedList);\n // Remove the list\n Transforms.removeNodes(editor, { at: [...listItemPath, 1] });\n }\n /* Create a new list item with the copied children as it's children,\n and insert it into the editor */\n Transforms.insertNodes(editor, {\n type: 'list-item',\n order: listItemNode.order ? listItemNode.order + 1 : 0,\n level: listItemNode.level ? listItemNode.level : 1,\n id: newId,\n parentId: parentNode.id,\n children: [{ type: 'paragraph', children: [{ text: '' }] }, ...copiedChildren]\n });\n /* Nodes needs to be lifted one level higher because it will be inserted\n into the list item itself rather than it's parent list */\n Transforms.liftNodes<CosmosCustom.ListItemElement>(editor, {\n match: n => matchListItem(n) && n.id === newId\n });\n const selectionPoint = { path: [...Path.next(listItemPath), 0, 0], offset: 0 };\n // Set the selection to the new list item created\n Transforms.setSelection(editor, { focus: selectionPoint, anchor: selectionPoint });\n } else {\n commands.unNestList(editor);\n }\n } else if (parentNode && parentNode.children.length > 1) {\n // Un nest this list item from it's parent\n event.preventDefault();\n commands.unNestList(editor);\n } else if (belowListItemPath) {\n // Break out of the list\n event.preventDefault();\n Transforms.unwrapNodes(editor, {\n at: editor.selection?.anchor.path || undefined,\n match: matchListItem\n });\n Transforms.liftNodes(editor);\n }\n }\n },\n nestList: (editor: Editor) => {\n const [listItemNodeEntry] = Editor.nodes(editor, {\n at: editor.selection?.anchor.path || undefined,\n match: matchListItem,\n mode: 'lowest'\n });\n\n let listType: `${'un' | ''}ordered-list` = 'unordered-list';\n const [highestList] = Editor.nodes(editor, {\n at: editor.selection?.anchor.path || undefined,\n match: matchList,\n mode: 'highest'\n });\n\n if (highestList) {\n listType = highestList[0].type;\n }\n\n const [listItemNode, listItemPath] = (listItemNodeEntry as NodeEntry<FullListItemElement>) || [\n undefined,\n undefined\n ];\n\n // Try to find the path to the node above the selected list item\n let abovePath;\n try {\n abovePath = Path.previous(listItemPath);\n } catch {\n abovePath = undefined;\n }\n\n // Only nest the list if there is a list item above the list item trying to be nested\n if (listItemNode && abovePath && listItemNode.level < 3) {\n // Get the list item and it's path from above the current list item\n const [[aboveListItemNode, aboveListItemPath]] = Editor.nodes<CosmosCustom.ListItemElement>(\n editor,\n {\n at: abovePath,\n match: n => matchListItem(n) && n.level === listItemNode.level\n }\n );\n // Gets the path for the text node above list-item\n const [[, innerTextNodePath]] = Editor.nodes<CosmosCustom.TextElement>(editor, {\n at: abovePath,\n match: n => Element.isElement(n) && TEXT_TYPES.includes(n.type)\n });\n\n let copiedSubListNodes: CosmosCustom.ListItemElement[] = [];\n const newListItemChildren = [listItemNode.children[0]];\n if (listItemNode.children.length && listItemNode.children.length > 1) {\n // Copy the item to be nested's sub list if it has one\n const subList = listItemNode.children[1] as CosmosCustom.ListElement;\n if (subList) {\n copiedSubListNodes = [...subList.children];\n }\n }\n\n // If the above list item has a sub list\n if (aboveListItemNode.children.length > 1) {\n // Get the list items in the sub list of the above list item\n const { children } = aboveListItemNode.children[1] as CosmosCustom.ListElement;\n // Gets the last list item in the above sub list\n const [[parentSubListItem, parentSubListItemPath]] = Editor.nodes<FullListItemElement>(\n editor,\n {\n at: aboveListItemPath,\n match: n =>\n matchListItem(n) &&\n n.order === children.length &&\n (n.level as number) - 1 === listItemNode.level\n }\n );\n\n // Gets the path after the last list item in the above sub list\n const nextParentSubListItemPath = Path.next(parentSubListItemPath);\n\n /* Inserts a copy of the list-item you are nesting below the lowest list item\n in the above sub list, as well as copies of any children the list-item you are\n nesting had. */\n let subOrderCount = parentSubListItem.order + 1;\n Transforms.insertNodes(\n editor,\n [\n {\n ...listItemNode,\n level: listItemNode.level + 1,\n order: parentSubListItem.order + 1,\n parentId: aboveListItemNode.id,\n children: newListItemChildren\n },\n ...copiedSubListNodes.map(n => {\n subOrderCount += 1;\n return {\n ...n,\n level: listItemNode.level + 1,\n order: subOrderCount,\n parentId: aboveListItemNode.id\n };\n })\n ],\n { at: nextParentSubListItemPath }\n );\n } else {\n const nextInnerTextNodePath = getNextPathBelow(innerTextNodePath);\n // Nest the selected list item into a new list and then into the above list item\n let subOrderCount = 1;\n Transforms.insertNodes(\n editor,\n {\n type: listType,\n children: [\n {\n ...listItemNode,\n order: 1,\n level: listItemNode.level + 1,\n parentId: aboveListItemNode.id,\n children: newListItemChildren\n },\n ...copiedSubListNodes.map(n => {\n subOrderCount += 1;\n return {\n ...n,\n level: listItemNode.level + 1,\n order: subOrderCount,\n parentId: aboveListItemNode.id\n };\n })\n ]\n },\n { at: nextInnerTextNodePath, mode: 'lowest' }\n );\n }\n\n // Remove the old list item as we just copied it into the correct place\n Transforms.removeNodes(editor, { at: listItemPath });\n }\n },\n unNestList: (editor: Editor) => {\n // Get the current node to be un nested\n const [[node, nodePath]] = Editor.nodes<FullListItemElement>(editor, {\n at: editor.selection?.anchor.path || undefined,\n match: matchListItem,\n mode: 'lowest'\n });\n const [singleItemList] = Editor.nodes<CosmosCustom.ListElement>(editor, {\n match: n => matchList(n) && n.children.length === 1,\n mode: 'highest'\n });\n\n if (singleItemList) {\n Transforms.unwrapNodes(editor, { match: matchListItem });\n Transforms.unwrapNodes(editor, { match: matchList });\n return;\n }\n // Attempt to get the highest parent in the nested list if it exists\n const [highestParent] = Editor.nodes<FullListItemElement>(editor, {\n at: editor.selection || undefined,\n match: n => matchListItem(n) && node.level - (n.level as number) === 2,\n mode: 'lowest'\n });\n // Get the parent list node if it exists (list item)\n const [[parentNode]] = Editor.nodes<FullListItemElement>(editor, {\n at: editor.selection || undefined,\n match: n => matchListItem(n) && node.level - (n.level as number) === 1,\n mode: 'lowest'\n });\n // Get the parent list\n const [[parentList]] = Editor.nodes(editor, {\n at: editor.selection || undefined,\n match: matchList,\n mode: 'lowest'\n });\n if (parentNode && parentNode.children.length > 1) {\n let newParentId;\n if (highestParent) {\n const [highestParentNode] = highestParent;\n newParentId = highestParentNode.id;\n }\n\n // Setting the node to un nests new order and level\n Transforms.setNodes<CosmosCustom.ListItemElement>(\n editor,\n {\n level: node.level - 1,\n order: parentNode.order + 1\n },\n { at: nodePath, match: n => matchListItem(n) && n.id === node.id }\n );\n\n // Set the level of any children under the node we are un nesting\n Transforms.setNodes<CosmosCustom.ListItemElement>(\n editor,\n { level: node.level },\n {\n at: nodePath,\n match: n => matchListItem(n) && (n.level as number) > node.level\n }\n );\n\n // If there's a new parent id set it, otherwise unset the parent id entirely\n if (newParentId) {\n Transforms.setNodes<CosmosCustom.ListItemElement>(\n editor,\n { parentId: newParentId },\n { at: nodePath, match: n => matchListItem(n) && n.id === node.id }\n );\n } else {\n Transforms.unsetNodes<CosmosCustom.ListItemElement>(editor, 'parentId', {\n at: nodePath,\n match: n => matchListItem(n) && n.id === node.id\n });\n }\n\n const listItemsExistBelow = node.order < parentList.children.length;\n\n if (listItemsExistBelow) {\n // Getting the inner text node inside of the list item in order to get the next path\n const [[, innerTextNodePath]] = Editor.nodes(editor, {\n at: nodePath,\n match: matchList\n });\n const nextPath = Path.next(innerTextNodePath);\n const copiedChildren = [];\n\n let count = 1;\n // Copy the children from the parent list that are below the list item we are un nesting\n for (let i = node.order; i < parentList.children.length; i += 1) {\n copiedChildren.push({\n ...parentList.children[i],\n parentId: node.id,\n order: count\n });\n count += 1;\n }\n\n // Insert a new list with the copied children into the un nested list item\n Transforms.insertNodes(\n editor,\n {\n type: parentList.type,\n children: [...copiedChildren]\n },\n { at: nextPath }\n );\n\n const [[newParentList, newParentListPath]] = Editor.nodes(editor, {\n at: editor.selection?.anchor.path || undefined,\n match: matchList,\n mode: 'lowest'\n });\n\n let order = 0;\n // Set the nodes below the list item being un nested\n Transforms.setNodes<CosmosCustom.ListItemElement>(\n editor,\n {\n parentId: node.id,\n order\n },\n {\n match: n => {\n if (!matchListItem(n)) return false;\n\n if (n.parentId === node.id) order += 1;\n return n.parentId === node.id;\n }\n }\n );\n\n // Removing all old nodes from that were under the un nested item\n for (let i = newParentList.children.length - 1; i >= node.order; i -= 1) {\n const childPath = [...newParentListPath, i];\n Transforms.removeNodes(editor, { at: childPath, match: matchListItem });\n }\n }\n\n // Lift the current node at the users selection out of it's parent node twice\n Transforms.liftNodes(editor, { match: matchListItem });\n Transforms.liftNodes(editor, { match: matchListItem });\n }\n }\n};\n\nexport default commands;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"htmlConverter.d.ts","sourceRoot":"","sources":["../../../../src/components/RichTextEditor/utils/htmlConverter.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AAEpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAU9D,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;CAkBjB,CAAC;AAGX,eAAO,MAAM,oBAAoB;;;;;CAKvB,CAAC;AA6GX,eAAO,MAAM,WAAW,SAChB,MAAM,yBACW,mBAAmB,CAAC,sBAAsB,CAAC,KACjE,CAAC,aAAa,GAAG,UAAU,CAAC,EAU9B,CAAC"}
1
+ {"version":3,"file":"htmlConverter.d.ts","sourceRoot":"","sources":["../../../../src/components/RichTextEditor/utils/htmlConverter.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AAEpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAU9D,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;CAkBjB,CAAC;AAGX,eAAO,MAAM,oBAAoB;;;;;CAKvB,CAAC;AA8GX,eAAO,MAAM,WAAW,SAChB,MAAM,yBACW,mBAAmB,CAAC,sBAAsB,CAAC,KACjE,CAAC,aAAa,GAAG,UAAU,CAAC,EAU9B,CAAC"}
@@ -35,6 +35,7 @@ const getAttributes = (node) => {
35
35
  switch (node.nodeName) {
36
36
  case 'li':
37
37
  return Object.fromEntries(node.attrs.flatMap(attr => {
38
+ // eslint-disable-next-line sonarjs/no-nested-switch
38
39
  switch (attr.name) {
39
40
  case 'data-id':
40
41
  return [['id', attr.value]];
@@ -66,7 +67,6 @@ const getAttributes = (node) => {
66
67
  return {};
67
68
  };
68
69
  const getSlateNode = (node, parentNode, interactionRenderers) => {
69
- var _a;
70
70
  if (checkTextNode(node)) {
71
71
  // Make sure to spread any parent style attributes for slates text nodes
72
72
  const children = parseTextToCustomSlateNodes(node.value, interactionRenderers);
@@ -89,7 +89,7 @@ const getSlateNode = (node, parentNode, interactionRenderers) => {
89
89
  const style = inlineHtmlToStyleMap[node.nodeName];
90
90
  let value = true;
91
91
  if (node.nodeName === 'a') {
92
- const hrefObj = (_a = node.attrs) === null || _a === void 0 ? void 0 : _a.find(attr => attr.name === 'href');
92
+ const hrefObj = node.attrs?.find(attr => attr.name === 'href');
93
93
  value = hrefObj ? hrefObj.value : value;
94
94
  }
95
95
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"htmlConverter.js","sourceRoot":"","sources":["../../../../src/components/RichTextEditor/utils/htmlConverter.ts"],"names":[],"mappings":"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","sourcesContent":["import { parse } from 'parse5';\n// Use namespaced types to more easily differentiate between similar types (ie, ChildNode from parse5 and Node from slate).\nimport type * as parse5 from 'parse5';\nimport type * as slate from 'slate';\n\nimport { RichTextViewerProps } from '../RichTextViewer.types';\n\nimport parseTextToCustomSlateNodes from './interactionRenderer';\n\nconst checkElement = (node: parse5.ChildNode | undefined): node is parse5.Element =>\n !!node && node.nodeName !== '#text' && node.nodeName !== '#comment';\nconst checkTextNode = (node: parse5.ChildNode | undefined): node is parse5.TextNode =>\n !!node && node.nodeName === '#text';\n\n// Mapping of HTML tags to slate types. b, del, i, and a tags are labeled as skip because they need special logic\nexport const htmlToSlateMap = {\n h1: 'heading-1',\n h2: 'heading-2',\n h3: 'heading-3',\n h4: 'heading-4',\n ul: 'unordered-list',\n ol: 'ordered-list',\n li: 'list-item',\n table: 'table',\n tr: 'table-row',\n td: 'table-cell',\n tbody: 'table-body',\n p: 'paragraph',\n img: 'image',\n b: 'skip',\n del: 'skip',\n i: 'skip',\n a: 'skip'\n} as const;\n\n// Inline HTML tags to slate types\nexport const inlineHtmlToStyleMap = {\n b: 'bold',\n del: 'line-through',\n i: 'italic',\n a: 'href'\n} as const;\n\n// Maps HTML Attributes to an object. Right now this is specifically used for list items.\nconst getAttributes = (node: parse5.ChildNode) => {\n if (checkElement(node) && node.attrs.length) {\n switch (node.nodeName) {\n case 'li':\n return Object.fromEntries(\n node.attrs.flatMap(attr => {\n switch (attr.name) {\n case 'data-id':\n return [['id', attr.value]];\n case 'data-parent-id':\n return [['parentId', attr.value]];\n case 'data-level':\n return [['level', attr.value]];\n case 'data-order':\n return [['order', attr.value]];\n default:\n return [];\n }\n })\n );\n case 'img': {\n const imgAttrs = ['src', 'alt'];\n const attrsObj: { [key: string]: string } = {};\n for (let i = 0; i < node.attrs.length; i += 1) {\n const { name, value } = node.attrs[i];\n if (imgAttrs.includes(name)) {\n attrsObj[name] = value;\n }\n }\n return attrsObj;\n }\n default:\n return {};\n }\n }\n return {};\n};\n\nconst getSlateNode = (\n node: parse5.ChildNode,\n parentNode?: slate.Element | slate.Text,\n interactionRenderers?: RichTextViewerProps['interactionRenderers']\n): { node: slate.Element | slate.Text; collapseNext?: boolean } => {\n if (checkTextNode(node)) {\n // Make sure to spread any parent style attributes for slates text nodes\n const children = parseTextToCustomSlateNodes(node.value, interactionRenderers);\n if (children.length === 1) {\n return { node: { ...parentNode, ...children[0] } as slate.Text };\n }\n return {\n node: {\n ...parentNode,\n children\n } as slate.Element\n };\n }\n\n const type = htmlToSlateMap[node.nodeName as keyof typeof htmlToSlateMap];\n /*\n If the type of the HTML tag is an inline (b, i, del, a) we want to let the recursive function know\n that it needs to collapse the next node, also we are setting the correct style mark to true\n */\n if (type === 'skip') {\n const style = inlineHtmlToStyleMap[node.nodeName as 'b' | 'i' | 'del' | 'a'];\n let value: string | boolean = true;\n if (node.nodeName === 'a') {\n const hrefObj = node.attrs?.find(attr => attr.name === 'href');\n value = hrefObj ? hrefObj.value : value;\n }\n return {\n node: { ...parentNode, [style]: value, text: '' } as slate.Text,\n collapseNext: true\n };\n }\n\n const attributes = getAttributes(node);\n const nodeObj = { type, ...attributes, children: [{ text: '' }] } as slate.Element;\n return { node: nodeObj };\n};\n\n// Recursive function that will convert Parse5Nodes into Slate compatible nodes\nconst convertNodes = (\n nodes: parse5.ChildNode[],\n parentNode?: slate.Element | slate.Text,\n interactionRenderers?: RichTextViewerProps['interactionRenderers']\n): (slate.Element | slate.Text)[] => {\n return nodes.map(node => {\n const { node: slateNode, collapseNext } = getSlateNode(node, parentNode, interactionRenderers);\n let returnNode = slateNode;\n if (checkElement(node) && node.childNodes && node.childNodes.length) {\n if (collapseNext) {\n returnNode = convertNodes(node.childNodes, slateNode, interactionRenderers)[0];\n } else {\n (slateNode as slate.Element).children = convertNodes(\n node.childNodes,\n undefined,\n interactionRenderers\n );\n returnNode = slateNode;\n }\n }\n\n return returnNode;\n });\n};\n\nexport const convertHtml = (\n html: string,\n interactionRenderers?: RichTextViewerProps['interactionRenderers']\n): (slate.Element | slate.Text)[] => {\n const doc = parse(html);\n\n const root = doc.childNodes[0];\n if (!checkElement(root)) return [];\n\n const body = root.childNodes[1];\n if (!checkElement(body)) return [];\n\n return convertNodes(body.childNodes, undefined, interactionRenderers);\n};\n"]}
1
+ {"version":3,"file":"htmlConverter.js","sourceRoot":"","sources":["../../../../src/components/RichTextEditor/utils/htmlConverter.ts"],"names":[],"mappings":"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","sourcesContent":["import { parse } from 'parse5';\n// Use namespaced types to more easily differentiate between similar types (ie, ChildNode from parse5 and Node from slate).\nimport type * as parse5 from 'parse5';\nimport type * as slate from 'slate';\n\nimport { RichTextViewerProps } from '../RichTextViewer.types';\n\nimport parseTextToCustomSlateNodes from './interactionRenderer';\n\nconst checkElement = (node: parse5.ChildNode | undefined): node is parse5.Element =>\n !!node && node.nodeName !== '#text' && node.nodeName !== '#comment';\nconst checkTextNode = (node: parse5.ChildNode | undefined): node is parse5.TextNode =>\n !!node && node.nodeName === '#text';\n\n// Mapping of HTML tags to slate types. b, del, i, and a tags are labeled as skip because they need special logic\nexport const htmlToSlateMap = {\n h1: 'heading-1',\n h2: 'heading-2',\n h3: 'heading-3',\n h4: 'heading-4',\n ul: 'unordered-list',\n ol: 'ordered-list',\n li: 'list-item',\n table: 'table',\n tr: 'table-row',\n td: 'table-cell',\n tbody: 'table-body',\n p: 'paragraph',\n img: 'image',\n b: 'skip',\n del: 'skip',\n i: 'skip',\n a: 'skip'\n} as const;\n\n// Inline HTML tags to slate types\nexport const inlineHtmlToStyleMap = {\n b: 'bold',\n del: 'line-through',\n i: 'italic',\n a: 'href'\n} as const;\n\n// Maps HTML Attributes to an object. Right now this is specifically used for list items.\nconst getAttributes = (node: parse5.ChildNode) => {\n if (checkElement(node) && node.attrs.length) {\n switch (node.nodeName) {\n case 'li':\n return Object.fromEntries(\n node.attrs.flatMap(attr => {\n // eslint-disable-next-line sonarjs/no-nested-switch\n switch (attr.name) {\n case 'data-id':\n return [['id', attr.value]];\n case 'data-parent-id':\n return [['parentId', attr.value]];\n case 'data-level':\n return [['level', attr.value]];\n case 'data-order':\n return [['order', attr.value]];\n default:\n return [];\n }\n })\n );\n case 'img': {\n const imgAttrs = ['src', 'alt'];\n const attrsObj: { [key: string]: string } = {};\n for (let i = 0; i < node.attrs.length; i += 1) {\n const { name, value } = node.attrs[i];\n if (imgAttrs.includes(name)) {\n attrsObj[name] = value;\n }\n }\n return attrsObj;\n }\n default:\n return {};\n }\n }\n return {};\n};\n\nconst getSlateNode = (\n node: parse5.ChildNode,\n parentNode?: slate.Element | slate.Text,\n interactionRenderers?: RichTextViewerProps['interactionRenderers']\n): { node: slate.Element | slate.Text; collapseNext?: boolean } => {\n if (checkTextNode(node)) {\n // Make sure to spread any parent style attributes for slates text nodes\n const children = parseTextToCustomSlateNodes(node.value, interactionRenderers);\n if (children.length === 1) {\n return { node: { ...parentNode, ...children[0] } as slate.Text };\n }\n return {\n node: {\n ...parentNode,\n children\n } as slate.Element\n };\n }\n\n const type = htmlToSlateMap[node.nodeName as keyof typeof htmlToSlateMap];\n /*\n If the type of the HTML tag is an inline (b, i, del, a) we want to let the recursive function know\n that it needs to collapse the next node, also we are setting the correct style mark to true\n */\n if (type === 'skip') {\n const style = inlineHtmlToStyleMap[node.nodeName as 'b' | 'i' | 'del' | 'a'];\n let value: string | boolean = true;\n if (node.nodeName === 'a') {\n const hrefObj = node.attrs?.find(attr => attr.name === 'href');\n value = hrefObj ? hrefObj.value : value;\n }\n return {\n node: { ...parentNode, [style]: value, text: '' } as slate.Text,\n collapseNext: true\n };\n }\n\n const attributes = getAttributes(node);\n const nodeObj = { type, ...attributes, children: [{ text: '' }] } as slate.Element;\n return { node: nodeObj };\n};\n\n// Recursive function that will convert Parse5Nodes into Slate compatible nodes\nconst convertNodes = (\n nodes: parse5.ChildNode[],\n parentNode?: slate.Element | slate.Text,\n interactionRenderers?: RichTextViewerProps['interactionRenderers']\n): (slate.Element | slate.Text)[] => {\n return nodes.map(node => {\n const { node: slateNode, collapseNext } = getSlateNode(node, parentNode, interactionRenderers);\n let returnNode = slateNode;\n if (checkElement(node) && node.childNodes && node.childNodes.length) {\n if (collapseNext) {\n returnNode = convertNodes(node.childNodes, slateNode, interactionRenderers)[0];\n } else {\n (slateNode as slate.Element).children = convertNodes(\n node.childNodes,\n undefined,\n interactionRenderers\n );\n returnNode = slateNode;\n }\n }\n\n return returnNode;\n });\n};\n\nexport const convertHtml = (\n html: string,\n interactionRenderers?: RichTextViewerProps['interactionRenderers']\n): (slate.Element | slate.Text)[] => {\n const doc = parse(html);\n\n const root = doc.childNodes[0];\n if (!checkElement(root)) return [];\n\n const body = root.childNodes[1];\n if (!checkElement(body)) return [];\n\n return convertNodes(body.childNodes, undefined, interactionRenderers);\n};\n"]}
@@ -17,7 +17,7 @@ const checkRegex = (params) => {
17
17
  // Parses text node to custom slate node
18
18
  const parseTextToCustomSlateNodes = (text, renderers) => {
19
19
  // Runs through an array of custom renderers and gets the matches
20
- const positions = (renderers === null || renderers === void 0 ? void 0 : renderers.flatMap(renderer => checkRegex({ text, ...renderer }))) || [];
20
+ const positions = renderers?.flatMap(renderer => checkRegex({ text, ...renderer })) || [];
21
21
  // Early exit when no matched positions
22
22
  if (positions.length === 0) {
23
23
  return [{ text }];
@@ -1 +1 @@
1
- {"version":3,"file":"interactionRenderer.js","sourceRoot":"","sources":["../../../../src/components/RichTextEditor/utils/interactionRenderer.ts"],"names":[],"mappings":"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","sourcesContent":["import type * as slate from 'slate';\n\nimport { SearchRenderers } from '../RichTextEditor.types';\nimport { InteractionRenderers } from '../RichTextViewer.types';\n\ninterface Renderers {\n regexPattern: InteractionRenderers['regexPattern'];\n type?: InteractionRenderers['type'];\n component?: InteractionRenderers['component'];\n getSearchAttributes?: SearchRenderers['getSearchAttributes'];\n}\ninterface RegexMatch extends Renderers {\n start: number;\n end: number;\n match: RegExpExecArray;\n}\n\ninterface CheckRegexParams extends Renderers {\n text: string;\n}\n\n// Checks a string for regex matches and returns an array of matches\nconst checkRegex = (params: CheckRegexParams) => {\n const regexMatches: RegexMatch[] = [];\n let res;\n // eslint-disable-next-line no-cond-assign\n while ((res = params.regexPattern.exec(params.text)) !== null) {\n const start = res.index;\n regexMatches.push({\n start,\n end: start + res[0].length,\n match: res,\n ...params\n });\n }\n return regexMatches;\n};\n\n// Parses text node to custom slate node\nconst parseTextToCustomSlateNodes = (text: string, renderers?: Renderers[]) => {\n // Runs through an array of custom renderers and gets the matches\n const positions: RegexMatch[] =\n renderers?.flatMap(renderer => checkRegex({ text, ...renderer })) || [];\n\n // Early exit when no matched positions\n if (positions.length === 0) {\n return [{ text }];\n }\n\n // Sorts the matches based on the start positions of the matches\n positions.sort((a, b) => a.start - b.start);\n\n const nodes: (slate.Element | slate.CosmosCustom.Text)[] = [];\n\n // Use the regex match positions to slice the text into the correct text nodes and other custom nodes\n let lastPos: RegexMatch;\n positions.forEach((pos, i) => {\n /* If the first regex match isn't at the start of the text node,\n slice the text node up to the first match and insert it into the nodes array */\n\n if (i === 0 && pos.start !== 0) {\n nodes.push({\n text: text.slice(i, pos.start)\n });\n }\n\n /* If there was a last position, slice the text between the last position\n and the new position to insert it as a new text node */\n if (lastPos && lastPos.end < pos.start) {\n nodes.push({\n text: text.slice(lastPos.end, pos.start)\n });\n } else if (i !== 0) {\n nodes.push({\n text: ' '\n });\n }\n\n if (pos.component) {\n nodes.push({\n type: 'custom',\n component: pos.component,\n content: pos.match,\n children: [{ text: '' }]\n });\n } else if (pos.getSearchAttributes) {\n const searchResult = pos.getSearchAttributes(pos.match);\n if (searchResult) {\n nodes.push({\n text: searchResult.text,\n searchResult: {\n markdown: searchResult.markdown,\n component: searchResult.component,\n props: searchResult.props,\n toJSON: () => undefined\n }\n });\n }\n }\n\n /* If we are at the end of the positions array, and there's still text left\n slice the text and add it as a new text node */\n if (i === positions.length - 1 && pos.end < text.length - 1) {\n nodes.push({\n text: text.slice(pos.end, text.length)\n });\n }\n lastPos = pos;\n });\n\n return nodes.length > 0 ? nodes : [{ text: '' }];\n};\n\nexport default parseTextToCustomSlateNodes;\n"]}
1
+ {"version":3,"file":"interactionRenderer.js","sourceRoot":"","sources":["../../../../src/components/RichTextEditor/utils/interactionRenderer.ts"],"names":[],"mappings":"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","sourcesContent":["import type * as slate from 'slate';\n\nimport { SearchRenderers } from '../RichTextEditor.types';\nimport { InteractionRenderers } from '../RichTextViewer.types';\n\ninterface Renderers {\n regexPattern: InteractionRenderers['regexPattern'];\n type?: InteractionRenderers['type'];\n component?: InteractionRenderers['component'];\n getSearchAttributes?: SearchRenderers['getSearchAttributes'];\n}\ninterface RegexMatch extends Renderers {\n start: number;\n end: number;\n match: RegExpExecArray;\n}\n\ninterface CheckRegexParams extends Renderers {\n text: string;\n}\n\n// Checks a string for regex matches and returns an array of matches\nconst checkRegex = (params: CheckRegexParams) => {\n const regexMatches: RegexMatch[] = [];\n let res;\n // eslint-disable-next-line no-cond-assign\n while ((res = params.regexPattern.exec(params.text)) !== null) {\n const start = res.index;\n regexMatches.push({\n start,\n end: start + res[0].length,\n match: res,\n ...params\n });\n }\n return regexMatches;\n};\n\n// Parses text node to custom slate node\nconst parseTextToCustomSlateNodes = (text: string, renderers?: Renderers[]) => {\n // Runs through an array of custom renderers and gets the matches\n const positions: RegexMatch[] =\n renderers?.flatMap(renderer => checkRegex({ text, ...renderer })) || [];\n\n // Early exit when no matched positions\n if (positions.length === 0) {\n return [{ text }];\n }\n\n // Sorts the matches based on the start positions of the matches\n positions.sort((a, b) => a.start - b.start);\n\n const nodes: (slate.Element | slate.CosmosCustom.Text)[] = [];\n\n // Use the regex match positions to slice the text into the correct text nodes and other custom nodes\n let lastPos: RegexMatch;\n positions.forEach((pos, i) => {\n /* If the first regex match isn't at the start of the text node,\n slice the text node up to the first match and insert it into the nodes array */\n\n if (i === 0 && pos.start !== 0) {\n nodes.push({\n text: text.slice(i, pos.start)\n });\n }\n\n /* If there was a last position, slice the text between the last position\n and the new position to insert it as a new text node */\n if (lastPos && lastPos.end < pos.start) {\n nodes.push({\n text: text.slice(lastPos.end, pos.start)\n });\n } else if (i !== 0) {\n nodes.push({\n text: ' '\n });\n }\n\n if (pos.component) {\n nodes.push({\n type: 'custom',\n component: pos.component,\n content: pos.match,\n children: [{ text: '' }]\n });\n } else if (pos.getSearchAttributes) {\n const searchResult = pos.getSearchAttributes(pos.match);\n if (searchResult) {\n nodes.push({\n text: searchResult.text,\n searchResult: {\n markdown: searchResult.markdown,\n component: searchResult.component,\n props: searchResult.props,\n toJSON: () => undefined\n }\n });\n }\n }\n\n /* If we are at the end of the positions array, and there's still text left\n slice the text and add it as a new text node */\n if (i === positions.length - 1 && pos.end < text.length - 1) {\n nodes.push({\n text: text.slice(pos.end, text.length)\n });\n }\n lastPos = pos;\n });\n\n return nodes.length > 0 ? nodes : [{ text: '' }];\n};\n\nexport default parseTextToCustomSlateNodes;\n"]}