@contentful/field-editor-rich-text 3.16.8 → 3.16.11

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 (376) hide show
  1. package/dist/cjs/ContentfulEditorProvider.js +8 -8
  2. package/dist/cjs/RichTextEditor.js +20 -22
  3. package/dist/cjs/RichTextEditor.styles.js +1 -2
  4. package/dist/cjs/SdkProvider.js +5 -7
  5. package/dist/cjs/SyncEditorChanges.js +6 -15
  6. package/dist/cjs/Toolbar/_tests_/toolbar.test.js +15 -17
  7. package/dist/cjs/Toolbar/components/EmbedEntityWidget.js +9 -13
  8. package/dist/cjs/Toolbar/components/EmbeddedEntityDropdownButton.js +8 -10
  9. package/dist/cjs/Toolbar/components/StickyToolbarWrapper.js +2 -2
  10. package/dist/cjs/Toolbar/index.js +30 -33
  11. package/dist/cjs/__fixtures__/FakeSdk.js +3 -3
  12. package/dist/cjs/__fixtures__/asset/index.js +10 -10
  13. package/dist/cjs/__fixtures__/content-type/index.js +1 -1
  14. package/dist/cjs/__fixtures__/entry/index.js +7 -7
  15. package/dist/cjs/__fixtures__/fixtures.js +6 -8
  16. package/dist/cjs/__fixtures__/locale/index.js +2 -2
  17. package/dist/cjs/__fixtures__/space/index.js +1 -1
  18. package/dist/cjs/constants/Schema.js +0 -1
  19. package/dist/cjs/dialogs/HypelinkDialog/HyperlinkDialog.js +38 -43
  20. package/dist/cjs/dialogs/openRichTextDialog.js +4 -6
  21. package/dist/cjs/dialogs/renderRichTextDialog.js +4 -6
  22. package/dist/cjs/helpers/__tests__/removeInternalMarks.test.js +10 -10
  23. package/dist/cjs/helpers/callbacks.js +3 -3
  24. package/dist/cjs/helpers/config.js +2 -2
  25. package/dist/cjs/helpers/editor.js +44 -53
  26. package/dist/cjs/helpers/environment.js +3 -3
  27. package/dist/cjs/helpers/formatDateAndTime.js +4 -5
  28. package/dist/cjs/helpers/getAllowedResourcesForNodeType.js +5 -22
  29. package/dist/cjs/helpers/getLinkedContentTypeIdsForNodeType.js +5 -29
  30. package/dist/cjs/helpers/nodeFactory.js +6 -6
  31. package/dist/cjs/helpers/sdkNavigatorSlideIn.js +6 -14
  32. package/dist/cjs/helpers/sdkNavigatorSlideIn.spec.js +2 -3
  33. package/dist/cjs/helpers/toSlateValue.js +3 -14
  34. package/dist/cjs/helpers/transformers.js +5 -5
  35. package/dist/cjs/helpers/validations.js +9 -12
  36. package/dist/cjs/index.js +5 -7
  37. package/dist/cjs/internal/constants.js +2 -4
  38. package/dist/cjs/internal/hooks.js +7 -9
  39. package/dist/cjs/internal/misc.js +12 -15
  40. package/dist/cjs/internal/queries.js +108 -115
  41. package/dist/cjs/internal/transforms.js +48 -51
  42. package/dist/cjs/internal/types/editor.js +1 -3
  43. package/dist/cjs/plugins/Break/createExitBreakPlugin.test.js +3 -4
  44. package/dist/cjs/plugins/Break/createResetNodePlugin.js +0 -1
  45. package/dist/cjs/plugins/Break/createSoftBreakPlugin.test.js +3 -3
  46. package/dist/cjs/plugins/CommandPalette/components/CommandList.js +33 -35
  47. package/dist/cjs/plugins/CommandPalette/components/CommandList.styles.js +1 -1
  48. package/dist/cjs/plugins/CommandPalette/components/CommandPrompt.js +5 -7
  49. package/dist/cjs/plugins/CommandPalette/hooks/useCommandList.js +3 -7
  50. package/dist/cjs/plugins/CommandPalette/onKeyDown.js +1 -6
  51. package/dist/cjs/plugins/CommandPalette/onKeyDown.spec.js +4 -6
  52. package/dist/cjs/plugins/CommandPalette/useCommands.js +3 -3
  53. package/dist/cjs/plugins/CommandPalette/utils/fetchEntries.js +0 -2
  54. package/dist/cjs/plugins/CommandPalette/utils/trimLeadingSlash.js +1 -6
  55. package/dist/cjs/plugins/DragAndDrop/index.js +1 -9
  56. package/dist/cjs/plugins/EmbeddedEntityBlock/LinkedEntityBlock.js +8 -10
  57. package/dist/cjs/plugins/EmbeddedEntityBlock/index.js +3 -3
  58. package/dist/cjs/plugins/EmbeddedEntityInline/FetchingWrappedInlineEntryCard.js +17 -19
  59. package/dist/cjs/plugins/EmbeddedEntityInline/LinkedEntityInline.js +7 -9
  60. package/dist/cjs/plugins/EmbeddedResourceBlock/LinkedResourceBlock.js +5 -5
  61. package/dist/cjs/plugins/EmbeddedResourceInline/FetchingWrappedResourceInlineCard.js +11 -13
  62. package/dist/cjs/plugins/EmbeddedResourceInline/LinkedResourceInline.js +5 -5
  63. package/dist/cjs/plugins/Heading/__tests__/createHeadingPlugin.test.js +32 -32
  64. package/dist/cjs/plugins/Heading/components/Heading.js +10 -13
  65. package/dist/cjs/plugins/Heading/components/ToolbarHeadingButton.js +29 -23
  66. package/dist/cjs/plugins/Heading/createHeadingPlugin.js +2 -7
  67. package/dist/cjs/plugins/Hr/index.js +14 -19
  68. package/dist/cjs/plugins/Hyperlink/HyperlinkModal.js +28 -32
  69. package/dist/cjs/plugins/Hyperlink/__tests__/createHyperlinkPlugin.test.js +8 -8
  70. package/dist/cjs/plugins/Hyperlink/components/EntityHyperlink.js +8 -10
  71. package/dist/cjs/plugins/Hyperlink/components/LinkPopover.js +17 -23
  72. package/dist/cjs/plugins/Hyperlink/components/ResourceHyperlink.js +8 -10
  73. package/dist/cjs/plugins/Hyperlink/components/ToolbarHyperlinkButton.js +4 -6
  74. package/dist/cjs/plugins/Hyperlink/components/UrlHyperlink.js +6 -8
  75. package/dist/cjs/plugins/Hyperlink/components/linkHandlers.js +3 -3
  76. package/dist/cjs/plugins/Hyperlink/components/styles.js +1 -1
  77. package/dist/cjs/plugins/Hyperlink/createHyperlinkPlugin.js +4 -10
  78. package/dist/cjs/plugins/Hyperlink/useEntityInfo.js +3 -6
  79. package/dist/cjs/plugins/Hyperlink/useResourceEntityInfo.js +4 -6
  80. package/dist/cjs/plugins/Hyperlink/utils.js +4 -4
  81. package/dist/cjs/plugins/List/__tests__/createListPlugin.test.js +13 -13
  82. package/dist/cjs/plugins/List/__tests__/insertListBreak.test.js +25 -29
  83. package/dist/cjs/plugins/List/__tests__/insertListFragment.test.js +22 -22
  84. package/dist/cjs/plugins/List/components/List.js +7 -9
  85. package/dist/cjs/plugins/List/components/ListItem.js +4 -6
  86. package/dist/cjs/plugins/List/components/ToolbarListButton.js +5 -7
  87. package/dist/cjs/plugins/List/createListPlugin.js +0 -4
  88. package/dist/cjs/plugins/List/insertListBreak.js +4 -13
  89. package/dist/cjs/plugins/List/insertListFragment.js +5 -18
  90. package/dist/cjs/plugins/List/onKeyDownList.js +6 -8
  91. package/dist/cjs/plugins/List/transforms/insertListItem.js +2 -17
  92. package/dist/cjs/plugins/List/transforms/moveListItemDown.js +2 -8
  93. package/dist/cjs/plugins/List/transforms/moveListItems.js +2 -7
  94. package/dist/cjs/plugins/List/transforms/moveListItems.test.js +14 -15
  95. package/dist/cjs/plugins/List/transforms/toggleList.js +3 -8
  96. package/dist/cjs/plugins/List/transforms/toggleList.spec.js +28 -28
  97. package/dist/cjs/plugins/List/transforms/unwrapList.js +2 -7
  98. package/dist/cjs/plugins/List/utils.js +11 -12
  99. package/dist/cjs/plugins/List/withList.js +2 -6
  100. package/dist/cjs/plugins/Marks/Bold.js +7 -9
  101. package/dist/cjs/plugins/Marks/Code.js +7 -15
  102. package/dist/cjs/plugins/Marks/Italic.js +7 -9
  103. package/dist/cjs/plugins/Marks/Subscript.js +8 -10
  104. package/dist/cjs/plugins/Marks/Superscript.js +8 -10
  105. package/dist/cjs/plugins/Marks/Underline.js +4 -6
  106. package/dist/cjs/plugins/Marks/components/MarkToolbarButton.js +7 -9
  107. package/dist/cjs/plugins/Marks/helpers.js +5 -5
  108. package/dist/cjs/plugins/Normalizer/baseRules.js +0 -2
  109. package/dist/cjs/plugins/Normalizer/createNormalizerPlugin.test.js +12 -12
  110. package/dist/cjs/plugins/Normalizer/utils.js +3 -4
  111. package/dist/cjs/plugins/Normalizer/withNormalizer.js +3 -23
  112. package/dist/cjs/plugins/Paragraph/Paragraph.js +4 -6
  113. package/dist/cjs/plugins/Paragraph/__tests__/createParagraphPlugin.test.js +32 -32
  114. package/dist/cjs/plugins/Paragraph/createParagraphPlugin.js +2 -3
  115. package/dist/cjs/plugins/PasteHTML/createPasteHTMLPlugin.js +6 -9
  116. package/dist/cjs/plugins/PasteHTML/utils/__tests__/sanitizeHTML.test.js +0 -2
  117. package/dist/cjs/plugins/PasteHTML/utils/sanitizeAnchors.js +0 -9
  118. package/dist/cjs/plugins/PasteHTML/utils/sanitizeHTML.js +2 -17
  119. package/dist/cjs/plugins/PasteHTML/utils/sanitizeSheets.js +1 -13
  120. package/dist/cjs/plugins/Quote/__test__/createQuotePlugin.test.js +21 -21
  121. package/dist/cjs/plugins/Quote/components/Quote.js +4 -6
  122. package/dist/cjs/plugins/Quote/components/ToolbarQuoteButton.js +4 -6
  123. package/dist/cjs/plugins/Quote/createQuotePlugin.js +0 -1
  124. package/dist/cjs/plugins/Quote/toggleQuote.js +5 -5
  125. package/dist/cjs/plugins/Quote/withQuote.js +2 -4
  126. package/dist/cjs/plugins/SelectOnBackspace/createSelectOnBackspacePlugin.js +0 -1
  127. package/dist/cjs/plugins/Table/__tests__/createTablePlugin.test.js +22 -22
  128. package/dist/cjs/plugins/Table/__tests__/helpers.test.js +4 -4
  129. package/dist/cjs/plugins/Table/actions/addColumn.js +4 -5
  130. package/dist/cjs/plugins/Table/actions/addRow.js +3 -6
  131. package/dist/cjs/plugins/Table/components/Cell.js +5 -7
  132. package/dist/cjs/plugins/Table/components/HeaderCell.js +5 -7
  133. package/dist/cjs/plugins/Table/components/Row.js +4 -6
  134. package/dist/cjs/plugins/Table/components/Table.js +6 -8
  135. package/dist/cjs/plugins/Table/components/TableActions.js +16 -19
  136. package/dist/cjs/plugins/Table/components/ToolbarButton.js +4 -7
  137. package/dist/cjs/plugins/Table/createTablePlugin.js +1 -11
  138. package/dist/cjs/plugins/Table/helpers.js +12 -16
  139. package/dist/cjs/plugins/Table/insertTableFragment.js +2 -15
  140. package/dist/cjs/plugins/Table/onKeyDownTable.js +2 -11
  141. package/dist/cjs/plugins/Table/tableTracking.js +6 -6
  142. package/dist/cjs/plugins/Text/__tests__/createTextPlugin.test.js +17 -19
  143. package/dist/cjs/plugins/Text/createTextPlugin.js +5 -22
  144. package/dist/cjs/plugins/Tracking/createTrackingPlugin.js +4 -5
  145. package/dist/cjs/plugins/Tracking/utils.js +3 -6
  146. package/dist/cjs/plugins/Voids/createVoidsPlugin.js +0 -5
  147. package/dist/cjs/plugins/Voids/transformVoid.js +0 -1
  148. package/dist/cjs/plugins/index.js +3 -15
  149. package/dist/cjs/plugins/shared/EmbeddedBlockToolbarIcon.js +10 -12
  150. package/dist/cjs/plugins/shared/EmbeddedBlockUtil.js +6 -16
  151. package/dist/cjs/plugins/shared/EmbeddedInlineToolbarIcon.js +8 -10
  152. package/dist/cjs/plugins/shared/EmbeddedInlineUtil.js +5 -9
  153. package/dist/cjs/plugins/shared/FetchingWrappedAssetCard.js +11 -13
  154. package/dist/cjs/plugins/shared/FetchingWrappedEntryCard.js +12 -14
  155. package/dist/cjs/plugins/shared/FetchingWrappedResourceCard.js +11 -14
  156. package/dist/cjs/plugins/shared/LinkedBlockWrapper.js +4 -8
  157. package/dist/cjs/plugins/shared/LinkedInlineWrapper.js +6 -10
  158. package/dist/cjs/plugins/shared/ResourceNewBadge.js +3 -5
  159. package/dist/cjs/plugins/shared/ToolbarButton.js +6 -8
  160. package/dist/cjs/plugins/shared/__tests__/FetchingWrappedAssetCard.test.js +5 -10
  161. package/dist/cjs/plugins/shared/__tests__/FetchingWrappedEntryCard.test.js +6 -11
  162. package/dist/cjs/plugins/shared/__tests__/FetchingWrappedResourceCard.test.js +13 -15
  163. package/dist/cjs/plugins/shared/utils.js +1 -4
  164. package/dist/cjs/test-utils/assertOutput.js +0 -1
  165. package/dist/cjs/test-utils/hyperscript.d.js +0 -1
  166. package/dist/cjs/test-utils/randomId.js +1 -3
  167. package/dist/cjs/test-utils/validation.js +5 -8
  168. package/dist/esm/ContentfulEditorProvider.js +1 -4
  169. package/dist/esm/RichTextEditor.js +13 -13
  170. package/dist/esm/RichTextEditor.styles.js +0 -1
  171. package/dist/esm/SdkProvider.js +2 -2
  172. package/dist/esm/SyncEditorChanges.js +3 -18
  173. package/dist/esm/Toolbar/_tests_/toolbar.test.js +12 -12
  174. package/dist/esm/Toolbar/components/EmbedEntityWidget.js +7 -9
  175. package/dist/esm/Toolbar/components/EmbeddedEntityDropdownButton.js +6 -6
  176. package/dist/esm/Toolbar/components/StickyToolbarWrapper.js +1 -1
  177. package/dist/esm/Toolbar/index.js +27 -28
  178. package/dist/esm/__fixtures__/FakeSdk.js +3 -3
  179. package/dist/esm/constants/Schema.js +0 -1
  180. package/dist/esm/dialogs/HypelinkDialog/HyperlinkDialog.js +31 -34
  181. package/dist/esm/dialogs/openRichTextDialog.js +2 -2
  182. package/dist/esm/dialogs/renderRichTextDialog.js +2 -2
  183. package/dist/esm/helpers/__tests__/removeInternalMarks.test.js +10 -10
  184. package/dist/esm/helpers/callbacks.js +1 -1
  185. package/dist/esm/helpers/config.js +1 -9
  186. package/dist/esm/helpers/editor.js +6 -22
  187. package/dist/esm/helpers/extractNodes.js +1 -3
  188. package/dist/esm/helpers/formatDateAndTime.js +2 -11
  189. package/dist/esm/helpers/getAllowedResourcesForNodeType.js +2 -19
  190. package/dist/esm/helpers/getLinkedContentTypeIdsForNodeType.js +2 -26
  191. package/dist/esm/helpers/sdkNavigatorSlideIn.js +6 -20
  192. package/dist/esm/helpers/sdkNavigatorSlideIn.spec.js +0 -1
  193. package/dist/esm/helpers/toSlateValue.js +3 -17
  194. package/dist/esm/helpers/validations.js +1 -5
  195. package/dist/esm/internal/misc.js +2 -23
  196. package/dist/esm/internal/queries.js +2 -11
  197. package/dist/esm/internal/transforms.js +3 -14
  198. package/dist/esm/internal/types/editor.js +1 -3
  199. package/dist/esm/plugins/Break/createExitBreakPlugin.test.js +3 -4
  200. package/dist/esm/plugins/Break/createResetNodePlugin.js +0 -1
  201. package/dist/esm/plugins/Break/createSoftBreakPlugin.test.js +3 -3
  202. package/dist/esm/plugins/CommandPalette/components/CommandList.js +30 -30
  203. package/dist/esm/plugins/CommandPalette/components/CommandPrompt.js +2 -2
  204. package/dist/esm/plugins/CommandPalette/createCommandPalettePlugin.js +1 -11
  205. package/dist/esm/plugins/CommandPalette/hooks/useCommandList.js +0 -2
  206. package/dist/esm/plugins/CommandPalette/onKeyDown.js +0 -5
  207. package/dist/esm/plugins/CommandPalette/onKeyDown.spec.js +2 -2
  208. package/dist/esm/plugins/CommandPalette/useCommands.js +3 -3
  209. package/dist/esm/plugins/CommandPalette/utils/fetchEntries.js +0 -2
  210. package/dist/esm/plugins/CommandPalette/utils/trimLeadingSlash.js +1 -6
  211. package/dist/esm/plugins/DragAndDrop/index.js +1 -9
  212. package/dist/esm/plugins/EmbeddedEntityBlock/LinkedEntityBlock.js +6 -6
  213. package/dist/esm/plugins/EmbeddedEntityInline/FetchingWrappedInlineEntryCard.js +14 -14
  214. package/dist/esm/plugins/EmbeddedEntityInline/LinkedEntityInline.js +5 -5
  215. package/dist/esm/plugins/EmbeddedResourceBlock/LinkedResourceBlock.js +4 -4
  216. package/dist/esm/plugins/EmbeddedResourceInline/FetchingWrappedResourceInlineCard.js +9 -9
  217. package/dist/esm/plugins/EmbeddedResourceInline/LinkedResourceInline.js +4 -4
  218. package/dist/esm/plugins/Heading/__tests__/createHeadingPlugin.test.js +32 -32
  219. package/dist/esm/plugins/Heading/components/Heading.js +7 -8
  220. package/dist/esm/plugins/Heading/components/ToolbarHeadingButton.js +26 -18
  221. package/dist/esm/plugins/Heading/createHeadingPlugin.js +1 -6
  222. package/dist/esm/plugins/Hr/index.js +5 -8
  223. package/dist/esm/plugins/Hyperlink/HyperlinkModal.js +23 -25
  224. package/dist/esm/plugins/Hyperlink/__tests__/createHyperlinkPlugin.test.js +8 -8
  225. package/dist/esm/plugins/Hyperlink/components/EntityHyperlink.js +6 -6
  226. package/dist/esm/plugins/Hyperlink/components/LinkPopover.js +15 -19
  227. package/dist/esm/plugins/Hyperlink/components/ResourceHyperlink.js +6 -6
  228. package/dist/esm/plugins/Hyperlink/components/ToolbarHyperlinkButton.js +2 -2
  229. package/dist/esm/plugins/Hyperlink/components/UrlHyperlink.js +4 -4
  230. package/dist/esm/plugins/Hyperlink/createHyperlinkPlugin.js +1 -5
  231. package/dist/esm/plugins/Hyperlink/useEntityInfo.js +3 -6
  232. package/dist/esm/plugins/Hyperlink/useResourceEntityInfo.js +2 -2
  233. package/dist/esm/plugins/Hyperlink/utils.js +1 -1
  234. package/dist/esm/plugins/List/__tests__/createListPlugin.test.js +13 -13
  235. package/dist/esm/plugins/List/__tests__/insertListBreak.test.js +25 -29
  236. package/dist/esm/plugins/List/__tests__/insertListFragment.test.js +22 -22
  237. package/dist/esm/plugins/List/components/List.js +1 -1
  238. package/dist/esm/plugins/List/components/ListItem.js +1 -1
  239. package/dist/esm/plugins/List/components/ToolbarListButton.js +3 -3
  240. package/dist/esm/plugins/List/createListPlugin.js +0 -4
  241. package/dist/esm/plugins/List/insertListBreak.js +4 -13
  242. package/dist/esm/plugins/List/insertListFragment.js +5 -18
  243. package/dist/esm/plugins/List/onKeyDownList.js +5 -7
  244. package/dist/esm/plugins/List/transforms/insertListItem.js +3 -20
  245. package/dist/esm/plugins/List/transforms/moveListItemDown.js +2 -8
  246. package/dist/esm/plugins/List/transforms/moveListItems.js +2 -7
  247. package/dist/esm/plugins/List/transforms/moveListItems.test.js +14 -15
  248. package/dist/esm/plugins/List/transforms/toggleList.js +3 -8
  249. package/dist/esm/plugins/List/transforms/toggleList.spec.js +28 -28
  250. package/dist/esm/plugins/List/transforms/unwrapList.js +2 -7
  251. package/dist/esm/plugins/List/utils.js +2 -7
  252. package/dist/esm/plugins/List/withList.js +2 -6
  253. package/dist/esm/plugins/Marks/Bold.js +2 -2
  254. package/dist/esm/plugins/Marks/Code.js +2 -8
  255. package/dist/esm/plugins/Marks/Italic.js +2 -2
  256. package/dist/esm/plugins/Marks/Subscript.js +2 -2
  257. package/dist/esm/plugins/Marks/Superscript.js +2 -2
  258. package/dist/esm/plugins/Marks/Underline.js +2 -2
  259. package/dist/esm/plugins/Marks/components/MarkToolbarButton.js +4 -4
  260. package/dist/esm/plugins/Marks/helpers.js +1 -1
  261. package/dist/esm/plugins/Normalizer/baseRules.js +0 -4
  262. package/dist/esm/plugins/Normalizer/createNormalizerPlugin.test.js +12 -12
  263. package/dist/esm/plugins/Normalizer/utils.js +0 -1
  264. package/dist/esm/plugins/Normalizer/withNormalizer.js +2 -22
  265. package/dist/esm/plugins/Paragraph/Paragraph.js +1 -1
  266. package/dist/esm/plugins/Paragraph/__tests__/createParagraphPlugin.test.js +32 -32
  267. package/dist/esm/plugins/Paragraph/createParagraphPlugin.js +1 -2
  268. package/dist/esm/plugins/PasteHTML/createPasteHTMLPlugin.js +3 -9
  269. package/dist/esm/plugins/PasteHTML/utils/__tests__/sanitizeHTML.test.js +0 -2
  270. package/dist/esm/plugins/PasteHTML/utils/sanitizeAnchors.js +1 -27
  271. package/dist/esm/plugins/PasteHTML/utils/sanitizeHTML.js +2 -17
  272. package/dist/esm/plugins/PasteHTML/utils/sanitizeSheets.js +1 -13
  273. package/dist/esm/plugins/Quote/__test__/createQuotePlugin.test.js +21 -21
  274. package/dist/esm/plugins/Quote/components/Quote.js +1 -1
  275. package/dist/esm/plugins/Quote/components/ToolbarQuoteButton.js +2 -2
  276. package/dist/esm/plugins/Quote/createQuotePlugin.js +0 -1
  277. package/dist/esm/plugins/Quote/shouldResetQuote.js +1 -6
  278. package/dist/esm/plugins/Quote/toggleQuote.js +1 -1
  279. package/dist/esm/plugins/Quote/withQuote.js +2 -4
  280. package/dist/esm/plugins/SelectOnBackspace/createSelectOnBackspacePlugin.js +0 -1
  281. package/dist/esm/plugins/Table/__tests__/createTablePlugin.test.js +22 -22
  282. package/dist/esm/plugins/Table/__tests__/helpers.test.js +4 -4
  283. package/dist/esm/plugins/Table/actions/addColumn.js +1 -2
  284. package/dist/esm/plugins/Table/actions/addRow.js +0 -3
  285. package/dist/esm/plugins/Table/components/Cell.js +2 -2
  286. package/dist/esm/plugins/Table/components/HeaderCell.js +2 -2
  287. package/dist/esm/plugins/Table/components/Row.js +1 -1
  288. package/dist/esm/plugins/Table/components/Table.js +3 -3
  289. package/dist/esm/plugins/Table/components/TableActions.js +11 -12
  290. package/dist/esm/plugins/Table/components/ToolbarButton.js +2 -3
  291. package/dist/esm/plugins/Table/createTablePlugin.js +1 -11
  292. package/dist/esm/plugins/Table/helpers.js +1 -10
  293. package/dist/esm/plugins/Table/insertTableFragment.js +2 -15
  294. package/dist/esm/plugins/Table/onKeyDownTable.js +2 -11
  295. package/dist/esm/plugins/Table/tableTracking.js +6 -6
  296. package/dist/esm/plugins/Text/__tests__/createTextPlugin.test.js +17 -19
  297. package/dist/esm/plugins/Text/createTextPlugin.js +5 -22
  298. package/dist/esm/plugins/Tracking/createTrackingPlugin.js +1 -2
  299. package/dist/esm/plugins/Tracking/utils.js +0 -1
  300. package/dist/esm/plugins/Voids/createVoidsPlugin.js +0 -5
  301. package/dist/esm/plugins/Voids/transformVoid.js +1 -4
  302. package/dist/esm/plugins/index.js +0 -12
  303. package/dist/esm/plugins/shared/EmbeddedBlockToolbarIcon.js +5 -5
  304. package/dist/esm/plugins/shared/EmbeddedBlockUtil.js +5 -15
  305. package/dist/esm/plugins/shared/EmbeddedInlineToolbarIcon.js +5 -5
  306. package/dist/esm/plugins/shared/EmbeddedInlineUtil.js +4 -8
  307. package/dist/esm/plugins/shared/FetchingWrappedAssetCard.js +8 -8
  308. package/dist/esm/plugins/shared/FetchingWrappedEntryCard.js +9 -9
  309. package/dist/esm/plugins/shared/FetchingWrappedResourceCard.js +8 -9
  310. package/dist/esm/plugins/shared/LinkedBlockWrapper.js +3 -7
  311. package/dist/esm/plugins/shared/LinkedInlineWrapper.js +3 -5
  312. package/dist/esm/plugins/shared/ResourceNewBadge.js +1 -1
  313. package/dist/esm/plugins/shared/ToolbarButton.js +3 -3
  314. package/dist/esm/plugins/shared/__tests__/FetchingWrappedAssetCard.test.js +2 -5
  315. package/dist/esm/plugins/shared/__tests__/FetchingWrappedEntryCard.test.js +2 -5
  316. package/dist/esm/plugins/shared/__tests__/FetchingWrappedResourceCard.test.js +8 -8
  317. package/dist/esm/plugins/shared/utils.js +1 -4
  318. package/dist/esm/test-utils/assertOutput.js +0 -1
  319. package/dist/esm/test-utils/hyperscript.d.js +0 -1
  320. package/dist/esm/test-utils/jsx.js +1 -5
  321. package/dist/esm/test-utils/randomId.js +1 -3
  322. package/dist/esm/test-utils/setEmptyDataAttribute.js +1 -4
  323. package/dist/esm/test-utils/validation.js +4 -7
  324. package/dist/types/RichTextEditor.d.ts +2 -3
  325. package/dist/types/Toolbar/components/EmbedEntityWidget.d.ts +1 -2
  326. package/dist/types/Toolbar/components/EmbeddedEntityDropdownButton.d.ts +1 -1
  327. package/dist/types/Toolbar/components/StickyToolbarWrapper.d.ts +2 -2
  328. package/dist/types/Toolbar/index.d.ts +1 -2
  329. package/dist/types/dialogs/HypelinkDialog/HyperlinkDialog.d.ts +4 -4
  330. package/dist/types/dialogs/renderRichTextDialog.d.ts +1 -2
  331. package/dist/types/plugins/CommandPalette/components/CommandList.d.ts +1 -2
  332. package/dist/types/plugins/CommandPalette/components/CommandPrompt.d.ts +1 -2
  333. package/dist/types/plugins/EmbeddedEntityBlock/LinkedEntityBlock.d.ts +1 -2
  334. package/dist/types/plugins/EmbeddedEntityInline/FetchingWrappedInlineEntryCard.d.ts +1 -1
  335. package/dist/types/plugins/EmbeddedEntityInline/LinkedEntityInline.d.ts +1 -2
  336. package/dist/types/plugins/EmbeddedResourceBlock/LinkedResourceBlock.d.ts +1 -2
  337. package/dist/types/plugins/EmbeddedResourceInline/FetchingWrappedResourceInlineCard.d.ts +1 -1
  338. package/dist/types/plugins/EmbeddedResourceInline/LinkedResourceInline.d.ts +1 -2
  339. package/dist/types/plugins/Heading/components/Heading.d.ts +6 -6
  340. package/dist/types/plugins/Heading/components/ToolbarHeadingButton.d.ts +1 -2
  341. package/dist/types/plugins/Hr/index.d.ts +2 -2
  342. package/dist/types/plugins/Hyperlink/HyperlinkModal.d.ts +1 -2
  343. package/dist/types/plugins/Hyperlink/components/EntityHyperlink.d.ts +1 -2
  344. package/dist/types/plugins/Hyperlink/components/LinkPopover.d.ts +1 -1
  345. package/dist/types/plugins/Hyperlink/components/ResourceHyperlink.d.ts +1 -2
  346. package/dist/types/plugins/Hyperlink/components/ToolbarHyperlinkButton.d.ts +1 -2
  347. package/dist/types/plugins/Hyperlink/components/UrlHyperlink.d.ts +1 -2
  348. package/dist/types/plugins/List/components/List.d.ts +2 -3
  349. package/dist/types/plugins/List/components/ListItem.d.ts +1 -2
  350. package/dist/types/plugins/List/components/ToolbarListButton.d.ts +1 -2
  351. package/dist/types/plugins/Marks/Bold.d.ts +2 -3
  352. package/dist/types/plugins/Marks/Code.d.ts +3 -4
  353. package/dist/types/plugins/Marks/Italic.d.ts +2 -3
  354. package/dist/types/plugins/Marks/Subscript.d.ts +3 -4
  355. package/dist/types/plugins/Marks/Superscript.d.ts +3 -4
  356. package/dist/types/plugins/Marks/Underline.d.ts +2 -3
  357. package/dist/types/plugins/Marks/components/MarkToolbarButton.d.ts +1 -1
  358. package/dist/types/plugins/Paragraph/Paragraph.d.ts +1 -2
  359. package/dist/types/plugins/Quote/components/Quote.d.ts +1 -2
  360. package/dist/types/plugins/Quote/components/ToolbarQuoteButton.d.ts +1 -2
  361. package/dist/types/plugins/Table/components/Cell.d.ts +1 -2
  362. package/dist/types/plugins/Table/components/HeaderCell.d.ts +1 -2
  363. package/dist/types/plugins/Table/components/Row.d.ts +1 -2
  364. package/dist/types/plugins/Table/components/Table.d.ts +1 -2
  365. package/dist/types/plugins/Table/components/TableActions.d.ts +1 -2
  366. package/dist/types/plugins/Table/components/ToolbarButton.d.ts +1 -2
  367. package/dist/types/plugins/shared/EmbeddedBlockToolbarIcon.d.ts +1 -2
  368. package/dist/types/plugins/shared/EmbeddedInlineToolbarIcon.d.ts +1 -2
  369. package/dist/types/plugins/shared/FetchingWrappedAssetCard.d.ts +1 -2
  370. package/dist/types/plugins/shared/FetchingWrappedEntryCard.d.ts +1 -2
  371. package/dist/types/plugins/shared/FetchingWrappedResourceCard.d.ts +1 -2
  372. package/dist/types/plugins/shared/LinkedBlockWrapper.d.ts +1 -1
  373. package/dist/types/plugins/shared/LinkedInlineWrapper.d.ts +1 -1
  374. package/dist/types/plugins/shared/ResourceNewBadge.d.ts +1 -2
  375. package/dist/types/plugins/shared/ToolbarButton.d.ts +1 -2
  376. package/package.json +8 -5
@@ -14,12 +14,11 @@ export function ToolbarTableButton(props) {
14
14
  focus(editor);
15
15
  }
16
16
  if (!editor) return null;
17
- return /*#__PURE__*/ React.createElement(ToolbarButton, {
17
+ return React.createElement(ToolbarButton, {
18
18
  title: "Table",
19
19
  testId: "table-toolbar-button",
20
20
  onClick: handleClick,
21
- // TODO: active state looks off since the button will be disabled. Do we still need it?
22
21
  isActive: !!isActive,
23
22
  isDisabled: props.isDisabled
24
- }, /*#__PURE__*/ React.createElement(TableIcon, null));
23
+ }, React.createElement(TableIcon, null));
25
24
  }
@@ -15,15 +15,11 @@ import { addTableTrackingEvents, withInvalidCellChildrenTracking } from './table
15
15
  export const createTablePlugin = ()=>createDefaultTablePlugin({
16
16
  type: BLOCKS.TABLE,
17
17
  handlers: {
18
- // @ts-expect-error
19
18
  onKeyDown: onKeyDownTable
20
19
  },
21
20
  withOverrides: (editor, plugin)=>{
22
- const { normalizeNode } = editor;
23
- // injects important fixes from plate's original table plugin
21
+ const { normalizeNode } = editor;
24
22
  withTable(editor, plugin);
25
- // Resets all normalization rules added by @udecode/plate-table as
26
- // they conflict with our own
27
23
  editor.normalizeNode = normalizeNode;
28
24
  addTableTrackingEvents(editor);
29
25
  editor.insertFragment = insertTableFragment(editor);
@@ -38,10 +34,7 @@ export const createTablePlugin = ()=>createDefaultTablePlugin({
38
34
  validNode: isNotEmpty
39
35
  },
40
36
  {
41
- // Move to root level unless nested
42
37
  validNode: (editor, [, path])=>{
43
- // Nested tables are handled by another normalization
44
- // rule in a the table cell level
45
38
  const isNestedTable = !!getBlockAbove(editor, {
46
39
  at: path,
47
40
  match: {
@@ -69,11 +62,9 @@ export const createTablePlugin = ()=>createDefaultTablePlugin({
69
62
  transform: transformWrapIn(BLOCKS.TABLE_CELL)
70
63
  },
71
64
  {
72
- // Remove empty rows
73
65
  validNode: isNotEmpty
74
66
  },
75
67
  {
76
- // Parent must be a table
77
68
  validNode: (editor, [, path])=>{
78
69
  const parent = getParentNode(editor, path)?.[0];
79
70
  return parent && parent.type === BLOCKS.TABLE;
@@ -81,7 +72,6 @@ export const createTablePlugin = ()=>createDefaultTablePlugin({
81
72
  transform: transformWrapIn(BLOCKS.TABLE)
82
73
  },
83
74
  {
84
- // ensure consistent number of cells in each row
85
75
  validNode: (editor, entry)=>{
86
76
  return getNoOfMissingTableCellsInRow(editor, entry) === 0;
87
77
  },
@@ -71,30 +71,21 @@ export function replaceEmptyParagraphWithTable(editor) {
71
71
  const [previousNode] = nodes;
72
72
  const isPreviousNodeTextEmpty = isAncestorEmpty(editor, previousNode);
73
73
  if (isPreviousNodeTextEmpty) {
74
- // Switch table with previous empty paragraph
75
74
  moveNodes(editor, {
76
75
  at: tablePath,
77
76
  to: previousPath
78
77
  });
79
- // Remove previous paragraph that now is under the table
80
78
  removeNodes(editor, {
81
79
  at: tablePath
82
80
  });
83
81
  }
84
82
  }
85
- /**
86
- * Returns the number of cells in a given row vs the table width
87
- *
88
- * Note: We should only get different table rows cell counts in between
89
- * normalization cycles.
90
- */ export const getNoOfMissingTableCellsInRow = (editor, rowEntry)=>{
83
+ export const getNoOfMissingTableCellsInRow = (editor, rowEntry)=>{
91
84
  const [, rowPath] = rowEntry;
92
85
  const parent = getParentNode(editor, rowPath);
93
- // This is ensured by normalization. The error is here just in case
94
86
  if (!parent) {
95
87
  throw new Error('table rows must be wrapped in a table node');
96
88
  }
97
- // The longest table row determines its width
98
89
  const tableWidth = Math.max(...getChildren(parent).map((entry)=>getChildren(entry).length));
99
90
  const rowWidth = getChildren(rowEntry).length;
100
91
  return tableWidth - rowWidth;
@@ -2,29 +2,18 @@ import { BLOCKS } from '@contentful/rich-text-types';
2
2
  import { insertEmptyParagraph } from '../../helpers/editor';
3
3
  import { getText, isElement } from '../../internal/queries';
4
4
  import { isTable } from './helpers';
5
- /**
6
- * Removes table wrappers when pasting a single table cell
7
- *
8
- * In Plate/Slate, copying the content of a table cell wraps
9
- * it in a <table><tr><td>{content}</td></tr></table> even
10
- * when copying partial cell content.
11
- *
12
- * That's really annoying as there is no way to remove the table
13
- * wrappers in that case.
14
- */ const trimUnnecessaryTableWrapper = (node)=>{
5
+ const trimUnnecessaryTableWrapper = (node)=>{
15
6
  if (!isElement(node)) {
16
7
  return [
17
8
  node
18
9
  ];
19
10
  }
20
- // must be a table with a single row
21
11
  if (node.type !== BLOCKS.TABLE || node.children?.length !== 1) {
22
12
  return [
23
13
  node
24
14
  ];
25
15
  }
26
16
  const row = node.children[0];
27
- // the row must contain a single cell
28
17
  if (row?.children?.length !== 1) {
29
18
  return [
30
19
  node
@@ -34,14 +23,12 @@ import { isTable } from './helpers';
34
23
  return cell.children;
35
24
  };
36
25
  export const insertTableFragment = (editor)=>{
37
- const { insertFragment } = editor;
26
+ const { insertFragment } = editor;
38
27
  return (fragments)=>{
39
28
  if (!editor.selection) {
40
29
  return;
41
30
  }
42
31
  fragments = fragments.flatMap(trimUnnecessaryTableWrapper);
43
- // We need to make sure we have a new, empty and clean paragraph in order to paste tables as-is due to how Slate behaves
44
- // More info: https://github.com/ianstormtaylor/slate/pull/4489 and https://github.com/ianstormtaylor/slate/issues/4542
45
32
  const isInsertingTable = fragments.some((fragment)=>isTable(fragment));
46
33
  const isTableFirstFragment = fragments.findIndex((fragment)=>isTable(fragment)) === 0;
47
34
  const currentLineHasText = getText(editor, editor.selection?.focus.path) !== '';
@@ -7,13 +7,8 @@ import { addRowBelow } from './actions';
7
7
  export const onKeyDownTable = (editor, plugin)=>{
8
8
  const defaultHandler = defaultKeyDownTable(editor, plugin);
9
9
  return (event)=>{
10
- // This fixes `Cannot resolve a Slate point from DOM point:
11
- // [object HTMLDivElement]` when typing while the cursor is before table
12
10
  const windowSelection = window.getSelection();
13
- // @ts-expect-error
14
- // this attribute comes from `plugins/Table/components/Table.tsx`
15
11
  if (windowSelection?.anchorNode?.attributes) {
16
- // @ts-expect-error
17
12
  const blockType = windowSelection.anchorNode.attributes?.['data-block-type']?.value;
18
13
  const isBeforeTable = blockType === BLOCKS.TABLE;
19
14
  if (isBeforeTable) {
@@ -35,11 +30,10 @@ export const onKeyDownTable = (editor, plugin)=>{
35
30
  return;
36
31
  }
37
32
  }
38
- // TODO clean this up
39
33
  if (event.key === 'Backspace') {
40
34
  const entry = getTableEntries(editor, {});
41
35
  if (entry) {
42
- const { table, row, cell } = entry;
36
+ const { table , row , cell } = entry;
43
37
  const cellText = getText(editor, cell[1]);
44
38
  const isFirstCell = isFirstChild(row[1]);
45
39
  const isFirstRow = isFirstChild(table[1]);
@@ -50,18 +44,15 @@ export const onKeyDownTable = (editor, plugin)=>{
50
44
  }
51
45
  }
52
46
  }
53
- // Pressing Tab on the last cell creates a new row
54
- // Otherwise, jumping between cells is handled in the defaultKeyDownTable
55
47
  if (event.key === 'Tab' && !event.shiftKey) {
56
48
  event.preventDefault();
57
49
  const entry = getTableEntries(editor, {});
58
50
  if (entry) {
59
- const { table, row, cell } = entry;
51
+ const { table , row , cell } = entry;
60
52
  const isLastCell = isLastChildPath(row, cell[1]);
61
53
  const isLastRow = isLastChildPath(table, row[1]);
62
54
  if (isLastRow && isLastCell) {
63
55
  addRowBelow(editor);
64
- // skip default handler
65
56
  return;
66
57
  } else {
67
58
  defaultHandler(event);
@@ -2,22 +2,22 @@ import { BLOCKS } from '@contentful/rich-text-types';
2
2
  import { isElement } from '../../internal/queries';
3
3
  import { getPastingSource } from '../../plugins/Tracking';
4
4
  function hasTables(nodes) {
5
- return nodes.some(({ type })=>{
5
+ return nodes.some(({ type })=>{
6
6
  return type === BLOCKS.TABLE;
7
7
  });
8
8
  }
9
- const isTableHeaderCell = ({ type })=>type === BLOCKS.TABLE_HEADER_CELL;
9
+ const isTableHeaderCell = ({ type })=>type === BLOCKS.TABLE_HEADER_CELL;
10
10
  function hasHeadersOutsideFirstRow(nodes) {
11
- return nodes.filter(({ type })=>type === BLOCKS.TABLE).flatMap(({ children })=>children.slice(1)).some(({ children })=>children.some(isTableHeaderCell));
11
+ return nodes.filter(({ type })=>type === BLOCKS.TABLE).flatMap(({ children })=>children.slice(1)).some(({ children })=>children.some(isTableHeaderCell));
12
12
  }
13
13
  export function addTableTrackingEvents(editor) {
14
- const { insertData } = editor;
14
+ const { insertData } = editor;
15
15
  editor.insertData = (data)=>{
16
16
  const html = data.getData('text/html');
17
17
  if (html) {
18
- const { children: markupBefore } = editor;
18
+ const { children: markupBefore } = editor;
19
19
  insertData(data);
20
- const { children: markupAfter } = editor;
20
+ const { children: markupAfter } = editor;
21
21
  setTimeout(()=>{
22
22
  if (hasTables(markupBefore)) return;
23
23
  if (hasTables(markupAfter)) {
@@ -1,24 +1,23 @@
1
- /** @jsx jsx */ import { jsx, assertOutput, createTestEditor } from '../../../test-utils';
1
+ import { jsx, assertOutput, createTestEditor } from '../../../test-utils';
2
2
  describe('delete backward', ()=>{
3
3
  const tests = [
4
4
  {
5
5
  title: 'deletes a character of the text inside li',
6
- input: /*#__PURE__*/ jsx("hul", null, /*#__PURE__*/ jsx("hli", null, /*#__PURE__*/ jsx("hp", null, "p1", /*#__PURE__*/ jsx("cursor", null)))),
7
- expected: /*#__PURE__*/ jsx("hul", null, /*#__PURE__*/ jsx("hli", null, /*#__PURE__*/ jsx("hp", null, "p", /*#__PURE__*/ jsx("cursor", null))))
6
+ input: jsx("hul", null, jsx("hli", null, jsx("hp", null, "p1", jsx("cursor", null)))),
7
+ expected: jsx("hul", null, jsx("hli", null, jsx("hp", null, "p", jsx("cursor", null))))
8
8
  },
9
9
  {
10
10
  title: 'does not delete the very first paragraph',
11
- input: /*#__PURE__*/ jsx("fragment", null, /*#__PURE__*/ jsx("hp", null, /*#__PURE__*/ jsx("cursor", null)), /*#__PURE__*/ jsx("hp", null, "text")),
12
- expected: /*#__PURE__*/ jsx("fragment", null, /*#__PURE__*/ jsx("hp", null, /*#__PURE__*/ jsx("cursor", null)), /*#__PURE__*/ jsx("hp", null, "text"))
11
+ input: jsx("fragment", null, jsx("hp", null, jsx("cursor", null)), jsx("hp", null, "text")),
12
+ expected: jsx("fragment", null, jsx("hp", null, jsx("cursor", null)), jsx("hp", null, "text"))
13
13
  }
14
14
  ];
15
- const render = (children)=>/*#__PURE__*/ jsx("editor", null, children, /*#__PURE__*/ jsx("hp", null, /*#__PURE__*/ jsx("htext", null)));
15
+ const render = (children)=>jsx("editor", null, children, jsx("hp", null, jsx("htext", null)));
16
16
  for (const t of tests){
17
17
  test(t.title, ()=>{
18
- const { editor } = createTestEditor({
18
+ const { editor } = createTestEditor({
19
19
  input: render(t.input)
20
20
  });
21
- // Equivalent of pressing backspace
22
21
  editor.deleteBackward('character');
23
22
  assertOutput({
24
23
  editor,
@@ -31,32 +30,31 @@ describe('delete forward', ()=>{
31
30
  const tests = [
32
31
  {
33
32
  title: 'deletes a character of the text inside li',
34
- input: /*#__PURE__*/ jsx("hul", null, /*#__PURE__*/ jsx("hli", null, /*#__PURE__*/ jsx("hp", null, /*#__PURE__*/ jsx("cursor", null), "p1"))),
35
- expected: /*#__PURE__*/ jsx("hul", null, /*#__PURE__*/ jsx("hli", null, /*#__PURE__*/ jsx("hp", null, /*#__PURE__*/ jsx("cursor", null), "1")))
33
+ input: jsx("hul", null, jsx("hli", null, jsx("hp", null, jsx("cursor", null), "p1"))),
34
+ expected: jsx("hul", null, jsx("hli", null, jsx("hp", null, jsx("cursor", null), "1")))
36
35
  },
37
36
  {
38
37
  title: 'deletes the first paragraph when followed by another paragraph',
39
- input: /*#__PURE__*/ jsx("fragment", null, /*#__PURE__*/ jsx("hp", null, /*#__PURE__*/ jsx("cursor", null)), /*#__PURE__*/ jsx("hp", null, "text")),
40
- expected: /*#__PURE__*/ jsx("hp", null, /*#__PURE__*/ jsx("cursor", null), "text")
38
+ input: jsx("fragment", null, jsx("hp", null, jsx("cursor", null)), jsx("hp", null, "text")),
39
+ expected: jsx("hp", null, jsx("cursor", null), "text")
41
40
  },
42
41
  {
43
42
  title: 'deletes the first paragraph when followed by li',
44
- input: /*#__PURE__*/ jsx("fragment", null, /*#__PURE__*/ jsx("hp", null, /*#__PURE__*/ jsx("cursor", null)), /*#__PURE__*/ jsx("hul", null, /*#__PURE__*/ jsx("hli", null, /*#__PURE__*/ jsx("hp", null, "p1")))),
45
- expected: /*#__PURE__*/ jsx("hul", null, /*#__PURE__*/ jsx("hli", null, /*#__PURE__*/ jsx("hp", null, /*#__PURE__*/ jsx("cursor", null), "p1")))
43
+ input: jsx("fragment", null, jsx("hp", null, jsx("cursor", null)), jsx("hul", null, jsx("hli", null, jsx("hp", null, "p1")))),
44
+ expected: jsx("hul", null, jsx("hli", null, jsx("hp", null, jsx("cursor", null), "p1")))
46
45
  },
47
46
  {
48
47
  title: 'deletes the first paragraph when followed by a blockquote',
49
- input: /*#__PURE__*/ jsx("fragment", null, /*#__PURE__*/ jsx("hp", null, /*#__PURE__*/ jsx("cursor", null)), /*#__PURE__*/ jsx("hquote", null, /*#__PURE__*/ jsx("hp", null, "p1"))),
50
- expected: /*#__PURE__*/ jsx("hquote", null, /*#__PURE__*/ jsx("hp", null, /*#__PURE__*/ jsx("cursor", null), "p1"))
48
+ input: jsx("fragment", null, jsx("hp", null, jsx("cursor", null)), jsx("hquote", null, jsx("hp", null, "p1"))),
49
+ expected: jsx("hquote", null, jsx("hp", null, jsx("cursor", null), "p1"))
51
50
  }
52
51
  ];
53
- const render = (children)=>/*#__PURE__*/ jsx("editor", null, children, /*#__PURE__*/ jsx("hp", null, /*#__PURE__*/ jsx("htext", null)));
52
+ const render = (children)=>jsx("editor", null, children, jsx("hp", null, jsx("htext", null)));
54
53
  for (const t of tests){
55
54
  test(t.title, ()=>{
56
- const { editor } = createTestEditor({
55
+ const { editor } = createTestEditor({
57
56
  input: render(t.input)
58
57
  });
59
- // Equivalent of pressing backspace
60
58
  editor.deleteForward('character');
61
59
  assertOutput({
62
60
  editor,
@@ -5,9 +5,6 @@ export function createTextPlugin(restrictedMarks = []) {
5
5
  return {
6
6
  key: 'TextPlugin',
7
7
  handlers: {
8
- // Triple selection in a non-Firefox browser undesirably selects
9
- // the start of the next block. Editor.unhangRange helps removing
10
- // the extra block at the end.
11
8
  onMouseUp: (editor)=>()=>{
12
9
  if (!editor.selection) {
13
10
  return;
@@ -16,16 +13,9 @@ export function createTextPlugin(restrictedMarks = []) {
16
13
  }
17
14
  },
18
15
  withOverrides: (editor)=>{
19
- // Reverts the change made upstream that caused the cursor
20
- // to be trapped inside inline elements.
21
- //
22
- // Reverts https://github.com/ianstormtaylor/slate/pull/4578/
23
- // Related https://github.com/ianstormtaylor/slate/issues/4704
24
- const { insertText } = editor;
16
+ const { insertText } = editor;
25
17
  editor.insertText = (text)=>{
26
- const { selection } = editor;
27
- // If the cursor is at the end of an inline, move it outside
28
- // before inserting
18
+ const { selection } = editor;
29
19
  if (selection && isRangeCollapsed(selection)) {
30
20
  const inlinePath = getAboveNode(editor, {
31
21
  match: (n)=>isInline(editor, n),
@@ -41,8 +31,7 @@ export function createTextPlugin(restrictedMarks = []) {
41
31
  }
42
32
  return insertText(text);
43
33
  };
44
- // When pressing delete instead of backspace
45
- const { deleteForward, deleteBackward } = editor;
34
+ const { deleteForward , deleteBackward } = editor;
46
35
  editor.deleteBackward = (unit)=>{
47
36
  deleteEmptyParagraph(unit, editor, deleteBackward);
48
37
  };
@@ -78,9 +67,8 @@ function deleteEmptyParagraph(unit, editor, deleteFunction) {
78
67
  if (entry) {
79
68
  const [paragraphOrHeading, path] = entry;
80
69
  const isTextEmpty = isAncestorEmpty(editor, paragraphOrHeading);
81
- // We ignore paragraphs/headings that are children of ul, ol, blockquote, tables, etc
82
70
  const isRootLevel = path.length === 1;
83
- const hasSiblings = editor.children.length > 1; // prevent editor from losing focus
71
+ const hasSiblings = editor.children.length > 1;
84
72
  if (isTextEmpty && isRootLevel && hasSiblings) {
85
73
  removeNodes(editor, {
86
74
  at: path
@@ -114,11 +102,7 @@ function deleteEmptyParagraph(unit, editor, deleteFunction) {
114
102
  deleteFunction(unit);
115
103
  }
116
104
  }
117
- /**
118
- * To be compatible with the old behavior we need to treat each 2 consecutive
119
- * line breaks as a new paragraph when pasting as plain text (also known as
120
- * paste and match style in macOS)
121
- */ function fixPasteAsPlainText(editor) {
105
+ function fixPasteAsPlainText(editor) {
122
106
  editor.insertTextData = (data)=>{
123
107
  const text = data.getData('text/plain');
124
108
  if (!text) {
@@ -127,7 +111,6 @@ function deleteEmptyParagraph(unit, editor, deleteFunction) {
127
111
  const lines = text.split(/\n{2}/);
128
112
  let split = false;
129
113
  for (const line of lines){
130
- // empty lines
131
114
  if (/^(\r\n?|\n)$/.test(line)) {
132
115
  continue;
133
116
  }
@@ -21,7 +21,6 @@ export function getPastingSource(data) {
21
21
  if (doc.querySelector('meta[content*="Microsoft Word"]')) {
22
22
  return 'Microsoft Word';
23
23
  }
24
- // TODO: MS Word Online doesn't give us specific tags, we might need to have a closer look at its tracking result since we are using generic values to identify it
25
24
  if (doc.querySelector('[style*="Arial_MSFontService"]') && (doc.querySelector('.TextRun') || doc.querySelector('.OutlineElement'))) {
26
25
  return 'Microsoft Word Online';
27
26
  }
@@ -59,7 +58,7 @@ export const createTrackingPlugin = (onAction)=>{
59
58
  return {
60
59
  key: 'TrackingPlugin',
61
60
  withOverrides: (editor)=>{
62
- const { insertData } = editor;
61
+ const { insertData } = editor;
63
62
  editor.tracking = trackingActions;
64
63
  editor.insertData = (data)=>{
65
64
  const isCopyAndPaste = data.types.length !== 0;
@@ -3,7 +3,6 @@ import { documentToPlainTextString } from '@contentful/rich-text-plain-text-rend
3
3
  import Schema from '../../constants/Schema';
4
4
  export function getCharacterCount(editor) {
5
5
  const document = contentfulSlateJSAdapter.toContentfulDocument({
6
- // eslint-disable-next-line -- parameter type is not exported @typescript-eslint/no-explicit-any
7
6
  document: editor.children,
8
7
  schema: Schema
9
8
  });
@@ -4,8 +4,6 @@ export const createVoidsPlugin = ()=>({
4
4
  key: 'VoidsPlugin',
5
5
  exitBreak: [
6
6
  {
7
- // Inserts a new paragraph *before* a void element if it's the very first
8
- // node on the editor
9
7
  hotkey: 'enter',
10
8
  before: true,
11
9
  query: {
@@ -13,10 +11,7 @@ export const createVoidsPlugin = ()=>({
13
11
  }
14
12
  },
15
13
  {
16
- // Inserts a new paragraph on enter when a void element is focused
17
14
  hotkey: 'enter',
18
- // exploit the internal use of Array.slice(0, level + 1) by the exitBreak plugin
19
- // to stay in the parent element
20
15
  level: -2,
21
16
  query: {
22
17
  filter: ([node, path])=>!(isRootLevel(path) && isFirstChildPath(path)) && !!node.isVoid
@@ -1,7 +1,5 @@
1
1
  import { insertNodes, removeNodes } from '../../internal/transforms';
2
- /**
3
- * Re-creates a void node with valid children.
4
- */ export const transformVoid = (editor, [node, path])=>{
2
+ export const transformVoid = (editor, [node, path])=>{
5
3
  const validVoid = {
6
4
  ...node,
7
5
  children: [
@@ -10,7 +8,6 @@ import { insertNodes, removeNodes } from '../../internal/transforms';
10
8
  }
11
9
  ]
12
10
  };
13
- // A workaround because Slate doesn't allow adjusting void nodes children
14
11
  removeNodes(editor, {
15
12
  at: path
16
13
  });
@@ -24,15 +24,11 @@ import { createTrailingParagraphPlugin } from './TrailingParagraph';
24
24
  import { createVoidsPlugin } from './Voids';
25
25
  export const getPlugins = (sdk, onAction, restrictedMarks)=>[
26
26
  createDeserializeDocxPlugin(),
27
- // Tracking - This should come first so all plugins below will have access to `editor.tracking`
28
27
  createTrackingPlugin(onAction),
29
- // Global / Global shortcuts
30
28
  createDragAndDropPlugin(),
31
- // Enable command palette plugin only, if at least action type is allowed
32
29
  ...Object.values(isCommandPromptPluginEnabled(sdk)).some(Boolean) ? [
33
30
  createCommandPalettePlugin()
34
31
  ] : [],
35
- // Block Elements
36
32
  createParagraphPlugin(),
37
33
  createListPlugin(),
38
34
  createHrPlugin(),
@@ -42,28 +38,20 @@ export const getPlugins = (sdk, onAction, restrictedMarks)=>[
42
38
  createEmbeddedEntryBlockPlugin(sdk),
43
39
  createEmbeddedAssetBlockPlugin(sdk),
44
40
  createEmbeddedResourceBlockPlugin(sdk),
45
- // Inline elements
46
41
  createHyperlinkPlugin(sdk),
47
42
  createEmbeddedEntityInlinePlugin(sdk),
48
43
  createEmbeddedResourceInlinePlugin(sdk),
49
- // Marks
50
44
  createMarksPlugin(),
51
- // Other
52
45
  createTrailingParagraphPlugin(),
53
46
  createTextPlugin(restrictedMarks),
54
47
  createVoidsPlugin(),
55
48
  createSelectOnBackspacePlugin(),
56
- // Pasting content from other sources
57
49
  createPasteHTMLPlugin(),
58
- // These plugins drive their configurations from the list of plugins
59
- // above. They MUST come last.
60
50
  createSoftBreakPlugin(),
61
51
  createExitBreakPlugin(),
62
52
  createResetNodePlugin(),
63
53
  createNormalizerPlugin()
64
54
  ];
65
55
  export const disableCorePlugins = {
66
- // Note: Enabled by default since v9.0.0 but it causes Cypress's
67
- // .click() command to fail
68
56
  eventEditor: true
69
57
  };
@@ -12,7 +12,7 @@ export const styles = {
12
12
  marginRight: '10px'
13
13
  })
14
14
  };
15
- export function EmbeddedBlockToolbarIcon({ isDisabled, nodeType, onClose }) {
15
+ export function EmbeddedBlockToolbarIcon({ isDisabled , nodeType , onClose }) {
16
16
  const editor = useContentfulEditor();
17
17
  const sdk = useSdkContext();
18
18
  const handleClick = async (event)=>{
@@ -29,19 +29,19 @@ export function EmbeddedBlockToolbarIcon({ isDisabled, nodeType, onClose }) {
29
29
  };
30
30
  const type = getEntityTypeFromNodeType(nodeType);
31
31
  const baseClass = `rich-text__${nodeType}`;
32
- return /*#__PURE__*/ React.createElement(Menu.Item, {
32
+ return React.createElement(Menu.Item, {
33
33
  disabled: isDisabled,
34
34
  className: `${baseClass}-list-item`,
35
35
  onClick: handleClick,
36
36
  testId: `toolbar-toggle-${nodeType}`
37
- }, /*#__PURE__*/ React.createElement(Flex, {
37
+ }, React.createElement(Flex, {
38
38
  alignItems: "center",
39
39
  flexDirection: "row"
40
- }, /*#__PURE__*/ React.createElement(Icon, {
40
+ }, React.createElement(Icon, {
41
41
  as: type === 'Asset' ? AssetIcon : EmbeddedEntryBlockIcon,
42
42
  className: `rich-text__embedded-entry-list-icon ${styles.icon}`,
43
43
  variant: "secondary"
44
- }), /*#__PURE__*/ React.createElement("span", null, type, nodeType == BLOCKS.EMBEDDED_RESOURCE && /*#__PURE__*/ React.createElement(ResourceNewBadge, null))));
44
+ }), React.createElement("span", null, type, nodeType == BLOCKS.EMBEDDED_RESOURCE && React.createElement(ResourceNewBadge, null))));
45
45
  }
46
46
  function getEntityTypeFromNodeType(nodeType) {
47
47
  const words = nodeType.toLowerCase().split('-');
@@ -5,7 +5,7 @@ import { focus, getNodeEntryFromSelection, insertEmptyParagraph, moveToTheNextCh
5
5
  import { watchCurrentSlide } from '../../helpers/sdkNavigatorSlideIn';
6
6
  import { getText, getAboveNode, getLastNodeByLevel, insertNodes, setNodes, select, removeNodes } from '../../internal';
7
7
  export function getWithEmbeddedBlockEvents(nodeType, sdk) {
8
- return (editor, { options: { hotkey } })=>(event)=>{
8
+ return (editor, { options: { hotkey } })=>(event)=>{
9
9
  const [, pathToSelectedElement] = getNodeEntryFromSelection(editor, nodeType);
10
10
  if (pathToSelectedElement) {
11
11
  const isDelete = event.key === 'Delete';
@@ -31,14 +31,14 @@ export async function selectEntityAndInsert(nodeType, sdk, editor, logAction) {
31
31
  logAction('openCreateEmbedDialog', {
32
32
  nodeType
33
33
  });
34
- const { field, dialogs } = sdk;
34
+ const { field , dialogs } = sdk;
35
35
  const baseConfig = newEntitySelectorConfigFromRichTextField(field, nodeType);
36
36
  const selectEntity = baseConfig.entityType === 'Asset' ? dialogs.selectSingleAsset : dialogs.selectSingleEntry;
37
37
  const config = {
38
38
  ...baseConfig,
39
39
  withCreate: true
40
40
  };
41
- const { selection } = editor;
41
+ const { selection } = editor;
42
42
  const rteSlide = watchCurrentSlide(sdk.navigator);
43
43
  const entity = await selectEntity(config);
44
44
  if (!entity) {
@@ -46,8 +46,6 @@ export async function selectEntityAndInsert(nodeType, sdk, editor, logAction) {
46
46
  nodeType
47
47
  });
48
48
  } else {
49
- // Selection prevents incorrect position of inserted ref when RTE doesn't have focus
50
- // (i.e. when using hotkeys and slide-in)
51
49
  select(editor, selection);
52
50
  insertBlock(editor, nodeType, entity);
53
51
  ensureFollowingParagraph(editor, [
@@ -58,8 +56,6 @@ export async function selectEntityAndInsert(nodeType, sdk, editor, logAction) {
58
56
  nodeType
59
57
  });
60
58
  }
61
- // If user chose to create a new entity, this might open slide-in to edit the
62
- // entity. In this case, no point in focusing RTE which is now in the slide below.
63
59
  rteSlide.onActive(()=>{
64
60
  rteSlide.unwatch();
65
61
  focus(editor);
@@ -69,17 +65,15 @@ export async function selectResourceEntityAndInsert(sdk, editor, logAction) {
69
65
  logAction('openCreateEmbedDialog', {
70
66
  nodeType: BLOCKS.EMBEDDED_RESOURCE
71
67
  });
72
- const { field, dialogs } = sdk;
68
+ const { field , dialogs } = sdk;
73
69
  const config = newResourceEntitySelectorConfigFromRichTextField(field, BLOCKS.EMBEDDED_RESOURCE);
74
- const { selection } = editor;
70
+ const { selection } = editor;
75
71
  const entity = await dialogs.selectSingleResourceEntry(config);
76
72
  if (!entity) {
77
73
  logAction('cancelCreateEmbedDialog', {
78
74
  nodeType: BLOCKS.EMBEDDED_RESOURCE
79
75
  });
80
76
  } else {
81
- // Selection prevents incorrect position of inserted ref when RTE doesn't have focus
82
- // (i.e. when using hotkeys and slide-in)
83
77
  select(editor, selection);
84
78
  insertBlock(editor, BLOCKS.EMBEDDED_RESOURCE, entity);
85
79
  ensureFollowingParagraph(editor, [
@@ -90,7 +84,6 @@ export async function selectResourceEntityAndInsert(sdk, editor, logAction) {
90
84
  });
91
85
  }
92
86
  }
93
- // TODO: incorporate this logic inside the trailingParagraph plugin instead
94
87
  function ensureFollowingParagraph(editor, nodeTypes) {
95
88
  const entityBlock = getAboveNode(editor, {
96
89
  match: {
@@ -103,8 +96,6 @@ function ensureFollowingParagraph(editor, nodeTypes) {
103
96
  const level = entityBlock[1].length - 1;
104
97
  const lastNode = getLastNodeByLevel(editor, level);
105
98
  const isTextContainer = TEXT_CONTAINERS.includes(lastNode?.[0].type ?? '');
106
- // If the new block isn't followed by a sibling text container (e.g. paragraph)
107
- // we insert a new empty one. Level 0 is handled by the trailingParagraph plugin
108
99
  if (level !== 0 && !isTextContainer) {
109
100
  insertEmptyParagraph(editor);
110
101
  }
@@ -140,7 +131,6 @@ const createNode = (nodeType, entity)=>{
140
131
  isVoid: true
141
132
  };
142
133
  };
143
- // TODO: DRY up copied code from HR
144
134
  function insertBlock(editor, nodeType, entity) {
145
135
  if (!editor?.selection) return;
146
136
  const linkedEntityBlock = createNode(nodeType, entity);
@@ -22,7 +22,7 @@ const styles = {
22
22
  }
23
23
  })
24
24
  };
25
- export function EmbeddedInlineToolbarIcon({ onClose, nodeType, isDisabled }) {
25
+ export function EmbeddedInlineToolbarIcon({ onClose , nodeType , isDisabled }) {
26
26
  const editor = useContentfulEditor();
27
27
  const sdk = useSdkContext();
28
28
  async function handleClick(event) {
@@ -36,16 +36,16 @@ export function EmbeddedInlineToolbarIcon({ onClose, nodeType, isDisabled }) {
36
36
  }
37
37
  moveToTheNextChar(editor);
38
38
  }
39
- return /*#__PURE__*/ React.createElement(Menu.Item, {
39
+ return React.createElement(Menu.Item, {
40
40
  disabled: isDisabled,
41
41
  className: "rich-text__entry-link-block-button",
42
42
  testId: `toolbar-toggle-${nodeType}`,
43
43
  onClick: handleClick
44
- }, /*#__PURE__*/ React.createElement(Flex, {
44
+ }, React.createElement(Flex, {
45
45
  alignItems: "center",
46
46
  flexDirection: "row"
47
- }, /*#__PURE__*/ React.createElement(EmbeddedEntryInlineIcon, {
47
+ }, React.createElement(EmbeddedEntryInlineIcon, {
48
48
  variant: "secondary",
49
49
  className: `rich-text__embedded-entry-list-icon ${styles.icon}`
50
- }), /*#__PURE__*/ React.createElement("span", null, "Inline entry", nodeType == INLINES.EMBEDDED_RESOURCE && /*#__PURE__*/ React.createElement(ResourceNewBadge, null))));
50
+ }), React.createElement("span", null, "Inline entry", nodeType == INLINES.EMBEDDED_RESOURCE && React.createElement(ResourceNewBadge, null))));
51
51
  }