@contentful/field-editor-rich-text 3.4.22 → 3.5.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 (596) hide show
  1. package/dist/cjs/ContentfulEditorProvider.js +59 -0
  2. package/dist/cjs/RichTextEditor.js +170 -0
  3. package/dist/cjs/RichTextEditor.styles.js +66 -0
  4. package/dist/cjs/SdkProvider.js +69 -0
  5. package/dist/cjs/Toolbar/_tests_/toolbar.test.js +152 -0
  6. package/dist/cjs/Toolbar/components/EmbedEntityWidget.js +87 -0
  7. package/dist/cjs/Toolbar/components/EmbeddedEntityDropdownButton.js +69 -0
  8. package/dist/cjs/Toolbar/components/StickyToolbarWrapper.js +29 -0
  9. package/dist/cjs/Toolbar/index.js +222 -0
  10. package/dist/cjs/__fixtures__/FakeSdk.js +183 -0
  11. package/dist/cjs/__fixtures__/asset/index.js +37 -0
  12. package/dist/cjs/__fixtures__/content-type/index.js +16 -0
  13. package/dist/cjs/__fixtures__/entry/index.js +33 -0
  14. package/dist/cjs/__fixtures__/fixtures.js +71 -0
  15. package/dist/cjs/__fixtures__/locale/index.js +40 -0
  16. package/dist/cjs/__fixtures__/space/index.js +16 -0
  17. package/dist/cjs/constants/Schema.js +172 -0
  18. package/dist/cjs/dialogs/HypelinkDialog/HyperlinkDialog.js +348 -0
  19. package/dist/cjs/dialogs/openRichTextDialog.js +64 -0
  20. package/dist/cjs/dialogs/renderRichTextDialog.js +63 -0
  21. package/dist/cjs/helpers/__tests__/extractNodes.test.js +299 -0
  22. package/dist/cjs/helpers/__tests__/removeInternalMarks.test.js +52 -0
  23. package/dist/cjs/helpers/__tests__/validations.test.js +49 -0
  24. package/dist/cjs/helpers/editor.js +276 -0
  25. package/dist/cjs/helpers/environment.js +20 -0
  26. package/dist/cjs/helpers/extractNodes.js +27 -0
  27. package/dist/cjs/helpers/formatDateAndTime.js +45 -0
  28. package/dist/cjs/helpers/getLinkedContentTypeIdsForNodeType.js +24 -0
  29. package/dist/cjs/helpers/newEntitySelectorConfigFromRichTextField.js +33 -0
  30. package/dist/cjs/helpers/nodeFactory.js +51 -0
  31. package/dist/cjs/helpers/removeInternalMarks.js +26 -0
  32. package/dist/cjs/helpers/sanitizeIncomingSlateDoc.js +33 -0
  33. package/dist/cjs/helpers/sdkNavigatorSlideIn.js +57 -0
  34. package/dist/cjs/helpers/sdkNavigatorSlideIn.spec.js +209 -0
  35. package/dist/cjs/helpers/transformers.js +61 -0
  36. package/dist/cjs/helpers/validations.js +56 -0
  37. package/dist/cjs/index.js +66 -0
  38. package/dist/cjs/internal/constants.js +51 -0
  39. package/dist/cjs/internal/hooks.js +65 -0
  40. package/dist/cjs/internal/index.js +21 -0
  41. package/dist/cjs/internal/misc.js +103 -0
  42. package/dist/cjs/internal/queries.js +407 -0
  43. package/dist/cjs/internal/transforms.js +195 -0
  44. package/dist/cjs/internal/types/editor.js +4 -0
  45. package/dist/cjs/internal/types/index.js +19 -0
  46. package/dist/cjs/internal/types/plugins.js +4 -0
  47. package/dist/cjs/plugins/Break/createExitBreakPlugin.js +26 -0
  48. package/dist/cjs/plugins/Break/createExitBreakPlugin.test.js +36 -0
  49. package/dist/cjs/plugins/Break/createResetNodePlugin.js +32 -0
  50. package/dist/cjs/plugins/Break/createSoftBreakPlugin.js +23 -0
  51. package/dist/cjs/plugins/Break/createSoftBreakPlugin.test.js +47 -0
  52. package/dist/cjs/plugins/Break/index.js +20 -0
  53. package/dist/cjs/plugins/CommandPalette/components/CommandList.js +167 -0
  54. package/dist/cjs/plugins/CommandPalette/components/CommandList.styles.js +103 -0
  55. package/dist/cjs/plugins/CommandPalette/components/CommandPrompt.js +69 -0
  56. package/dist/cjs/plugins/CommandPalette/constants.js +11 -0
  57. package/dist/cjs/plugins/CommandPalette/createCommandPalettePlugin.js +24 -0
  58. package/dist/cjs/plugins/CommandPalette/hooks/useCommandList.js +138 -0
  59. package/dist/cjs/plugins/CommandPalette/index.js +11 -0
  60. package/dist/cjs/plugins/CommandPalette/onKeyDown.js +51 -0
  61. package/dist/cjs/plugins/CommandPalette/onKeyDown.spec.js +83 -0
  62. package/dist/cjs/plugins/CommandPalette/useCommands.js +222 -0
  63. package/dist/cjs/plugins/CommandPalette/utils/createInlineEntryNode.js +30 -0
  64. package/dist/cjs/plugins/CommandPalette/utils/fetchAssets.js +31 -0
  65. package/dist/cjs/plugins/CommandPalette/utils/fetchEntries.js +39 -0
  66. package/dist/cjs/plugins/CommandPalette/utils/insertBlock.js +42 -0
  67. package/dist/cjs/plugins/CommandPalette/utils/trimLeadingSlash.js +16 -0
  68. package/dist/cjs/plugins/DragAndDrop/index.js +54 -0
  69. package/dist/cjs/plugins/EmbeddedEntityBlock/LinkedEntityBlock.js +128 -0
  70. package/dist/cjs/plugins/EmbeddedEntityBlock/ToolbarIcon.js +106 -0
  71. package/dist/cjs/plugins/EmbeddedEntityBlock/Util.js +108 -0
  72. package/dist/cjs/plugins/EmbeddedEntityBlock/index.js +100 -0
  73. package/dist/cjs/plugins/EmbeddedEntityInline/FetchingWrappedInlineEntryCard.js +158 -0
  74. package/dist/cjs/plugins/EmbeddedEntityInline/Util.js +30 -0
  75. package/dist/cjs/plugins/EmbeddedEntityInline/index.js +221 -0
  76. package/dist/cjs/plugins/Heading/__tests__/createHeadingPlugin.test.js +117 -0
  77. package/dist/cjs/plugins/Heading/components/Heading.js +127 -0
  78. package/dist/cjs/plugins/Heading/components/ToolbarHeadingButton.js +173 -0
  79. package/dist/cjs/plugins/Heading/createHeadingPlugin.js +102 -0
  80. package/dist/cjs/plugins/Heading/index.js +19 -0
  81. package/dist/cjs/plugins/Hr/index.js +193 -0
  82. package/dist/cjs/plugins/Hyperlink/HyperlinkModal.js +282 -0
  83. package/dist/cjs/plugins/Hyperlink/__tests__/createHyperlinkPlugin.test.js +25 -0
  84. package/dist/cjs/plugins/Hyperlink/components/EntityHyperlink.js +93 -0
  85. package/dist/cjs/plugins/Hyperlink/components/ToolbarHyperlinkButton.js +78 -0
  86. package/dist/cjs/plugins/Hyperlink/components/UrlHyperlink.js +86 -0
  87. package/dist/cjs/plugins/Hyperlink/components/styles.js +36 -0
  88. package/dist/cjs/plugins/Hyperlink/createHyperlinkPlugin.js +179 -0
  89. package/dist/cjs/plugins/Hyperlink/index.js +20 -0
  90. package/dist/cjs/plugins/Hyperlink/useEntityInfo.js +95 -0
  91. package/dist/cjs/plugins/Hyperlink/utils.js +43 -0
  92. package/dist/cjs/plugins/List/__tests__/createListPlugin.test.js +47 -0
  93. package/dist/cjs/plugins/List/__tests__/insertListBreak.test.js +77 -0
  94. package/dist/cjs/plugins/List/__tests__/insertListFragment.test.js +64 -0
  95. package/dist/cjs/plugins/List/components/List.js +108 -0
  96. package/dist/cjs/plugins/List/components/ListItem.js +73 -0
  97. package/dist/cjs/plugins/List/components/ToolbarListButton.js +86 -0
  98. package/dist/cjs/plugins/List/createListPlugin.js +76 -0
  99. package/dist/cjs/plugins/List/index.js +19 -0
  100. package/dist/cjs/plugins/List/insertListBreak.js +60 -0
  101. package/dist/cjs/plugins/List/insertListFragment.js +98 -0
  102. package/dist/cjs/plugins/List/onKeyDownList.js +46 -0
  103. package/dist/cjs/plugins/List/transforms/insertListItem.js +92 -0
  104. package/dist/cjs/plugins/List/transforms/moveListItemDown.js +47 -0
  105. package/dist/cjs/plugins/List/transforms/moveListItems.js +56 -0
  106. package/dist/cjs/plugins/List/transforms/moveListItems.test.js +72 -0
  107. package/dist/cjs/plugins/List/transforms/toggleList.js +141 -0
  108. package/dist/cjs/plugins/List/transforms/toggleList.spec.js +139 -0
  109. package/dist/cjs/plugins/List/transforms/unwrapList.js +38 -0
  110. package/dist/cjs/plugins/List/utils.js +122 -0
  111. package/dist/cjs/plugins/List/withList.js +32 -0
  112. package/dist/cjs/plugins/Marks/Bold.js +119 -0
  113. package/dist/cjs/plugins/Marks/Code.js +122 -0
  114. package/dist/cjs/plugins/Marks/Italic.js +114 -0
  115. package/dist/cjs/plugins/Marks/Subscript.js +109 -0
  116. package/dist/cjs/plugins/Marks/Superscript.js +107 -0
  117. package/dist/cjs/plugins/Marks/Underline.js +106 -0
  118. package/dist/cjs/plugins/Marks/components/MarkToolbarButton.js +105 -0
  119. package/dist/cjs/plugins/Marks/helpers.js +48 -0
  120. package/dist/cjs/plugins/Marks/index.js +27 -0
  121. package/dist/cjs/plugins/Normalizer/baseRules.js +38 -0
  122. package/dist/cjs/plugins/Normalizer/createNormalizerPlugin.js +15 -0
  123. package/dist/cjs/plugins/Normalizer/createNormalizerPlugin.test.js +117 -0
  124. package/dist/cjs/plugins/Normalizer/index.js +19 -0
  125. package/dist/cjs/plugins/Normalizer/types.js +4 -0
  126. package/dist/cjs/plugins/Normalizer/utils.js +39 -0
  127. package/dist/cjs/plugins/Normalizer/withNormalizer.js +88 -0
  128. package/dist/cjs/plugins/Paragraph/Paragraph.js +70 -0
  129. package/dist/cjs/plugins/Paragraph/__tests__/createParagraphPlugin.test.js +125 -0
  130. package/dist/cjs/plugins/Paragraph/createParagraphPlugin.js +73 -0
  131. package/dist/cjs/plugins/Paragraph/index.js +18 -0
  132. package/dist/cjs/plugins/Paragraph/utils.js +24 -0
  133. package/dist/cjs/plugins/PasteHTML/createPasteHTMLPlugin.js +63 -0
  134. package/dist/cjs/plugins/PasteHTML/index.js +18 -0
  135. package/dist/cjs/plugins/PasteHTML/utils/__tests__/sanitizeHTML.test.js +54 -0
  136. package/dist/cjs/plugins/PasteHTML/utils/sanitizeAnchors.js +43 -0
  137. package/dist/cjs/plugins/PasteHTML/utils/sanitizeHTML.js +50 -0
  138. package/dist/cjs/plugins/PasteHTML/utils/sanitizeSheets.js +44 -0
  139. package/dist/cjs/plugins/Quote/__test__/createQuotePlugin.test.js +78 -0
  140. package/dist/cjs/plugins/Quote/components/Quote.js +69 -0
  141. package/dist/cjs/plugins/Quote/components/ToolbarQuoteButton.js +72 -0
  142. package/dist/cjs/plugins/Quote/createQuotePlugin.js +57 -0
  143. package/dist/cjs/plugins/Quote/index.js +19 -0
  144. package/dist/cjs/plugins/Quote/shouldResetQuote.js +40 -0
  145. package/dist/cjs/plugins/Quote/toggleQuote.js +56 -0
  146. package/dist/cjs/plugins/Quote/withQuote.js +48 -0
  147. package/dist/cjs/plugins/SelectOnBackspace/createSelectOnBackspacePlugin.js +21 -0
  148. package/dist/cjs/plugins/SelectOnBackspace/index.js +18 -0
  149. package/dist/cjs/plugins/Table/__tests__/createTablePlugin.test.js +92 -0
  150. package/dist/cjs/plugins/Table/__tests__/helpers.test.js +18 -0
  151. package/dist/cjs/plugins/Table/actions/addColumn.js +63 -0
  152. package/dist/cjs/plugins/Table/actions/addRow.js +57 -0
  153. package/dist/cjs/plugins/Table/actions/index.js +20 -0
  154. package/dist/cjs/plugins/Table/actions/setHeader.js +34 -0
  155. package/dist/cjs/plugins/Table/components/Cell.js +79 -0
  156. package/dist/cjs/plugins/Table/components/HeaderCell.js +82 -0
  157. package/dist/cjs/plugins/Table/components/Row.js +69 -0
  158. package/dist/cjs/plugins/Table/components/Table.js +76 -0
  159. package/dist/cjs/plugins/Table/components/TableActions.js +175 -0
  160. package/dist/cjs/plugins/Table/components/ToolbarButton.js +73 -0
  161. package/dist/cjs/plugins/Table/createTablePlugin.js +119 -0
  162. package/dist/cjs/plugins/Table/helpers.js +152 -0
  163. package/dist/cjs/plugins/Table/index.js +19 -0
  164. package/dist/cjs/plugins/Table/insertTableFragment.js +50 -0
  165. package/dist/cjs/plugins/Table/onKeyDownTable.js +62 -0
  166. package/dist/cjs/plugins/Table/tableTracking.js +64 -0
  167. package/dist/cjs/plugins/Text/__tests__/createTextPlugin.test.js +79 -0
  168. package/dist/cjs/plugins/Text/createTextPlugin.js +136 -0
  169. package/dist/cjs/plugins/Text/index.js +18 -0
  170. package/dist/cjs/plugins/Tracking/createTrackingPlugin.js +101 -0
  171. package/dist/cjs/plugins/Tracking/index.js +18 -0
  172. package/dist/cjs/plugins/Tracking/utils.js +64 -0
  173. package/dist/cjs/plugins/TrailingParagraph/index.js +20 -0
  174. package/dist/cjs/plugins/Voids/createVoidsPlugin.js +31 -0
  175. package/dist/cjs/plugins/Voids/index.js +18 -0
  176. package/dist/cjs/plugins/Voids/transformVoid.js +29 -0
  177. package/dist/cjs/plugins/index.js +76 -0
  178. package/dist/cjs/plugins/links-tracking.js +29 -0
  179. package/dist/cjs/plugins/shared/FetchingWrappedAssetCard.js +113 -0
  180. package/dist/cjs/plugins/shared/FetchingWrappedEntryCard.js +116 -0
  181. package/dist/cjs/plugins/shared/ToolbarButton.js +93 -0
  182. package/dist/cjs/plugins/shared/__tests__/FetchingWrappedAssetCard.test.js +107 -0
  183. package/dist/cjs/plugins/shared/__tests__/FetchingWrappedEntryCard.test.js +110 -0
  184. package/dist/cjs/prepareDocument.js +86 -0
  185. package/dist/cjs/test-utils/assertOutput.js +31 -0
  186. package/dist/cjs/test-utils/createEditor.js +31 -0
  187. package/dist/cjs/test-utils/hyperscript.d.js +1 -0
  188. package/dist/cjs/test-utils/index.js +21 -0
  189. package/dist/cjs/test-utils/jsx.js +159 -0
  190. package/dist/cjs/test-utils/mockPlugin.js +16 -0
  191. package/dist/cjs/test-utils/randomId.js +13 -0
  192. package/dist/cjs/test-utils/setEmptyDataAttribute.js +21 -0
  193. package/dist/cjs/test-utils/validation.js +127 -0
  194. package/dist/cjs/useOnValueChanged.js +58 -0
  195. package/dist/esm/ContentfulEditorProvider.js +29 -0
  196. package/dist/esm/RichTextEditor.js +108 -0
  197. package/dist/esm/RichTextEditor.styles.js +51 -0
  198. package/dist/esm/SdkProvider.js +7 -0
  199. package/dist/esm/Toolbar/_tests_/toolbar.test.js +104 -0
  200. package/dist/esm/Toolbar/components/EmbedEntityWidget.js +38 -0
  201. package/dist/esm/Toolbar/components/EmbeddedEntityDropdownButton.js +20 -0
  202. package/dist/esm/Toolbar/components/StickyToolbarWrapper.js +14 -0
  203. package/dist/esm/Toolbar/index.js +168 -0
  204. package/dist/esm/__fixtures__/FakeSdk.js +173 -0
  205. package/dist/esm/__fixtures__/asset/index.js +6 -0
  206. package/dist/esm/__fixtures__/content-type/index.js +2 -0
  207. package/dist/esm/__fixtures__/entry/index.js +5 -0
  208. package/dist/esm/__fixtures__/fixtures.js +6 -0
  209. package/dist/esm/__fixtures__/locale/index.js +15 -0
  210. package/dist/esm/__fixtures__/space/index.js +2 -0
  211. package/dist/esm/constants/Schema.js +162 -0
  212. package/dist/esm/dialogs/HypelinkDialog/HyperlinkDialog.js +283 -0
  213. package/dist/esm/dialogs/openRichTextDialog.js +15 -0
  214. package/dist/esm/dialogs/renderRichTextDialog.js +14 -0
  215. package/dist/esm/helpers/__tests__/extractNodes.test.js +295 -0
  216. package/dist/esm/helpers/__tests__/removeInternalMarks.test.js +48 -0
  217. package/dist/esm/helpers/__tests__/validations.test.js +45 -0
  218. package/dist/esm/helpers/editor.js +198 -0
  219. package/dist/esm/helpers/environment.js +2 -0
  220. package/dist/esm/helpers/extractNodes.js +17 -0
  221. package/dist/esm/helpers/formatDateAndTime.js +19 -0
  222. package/dist/esm/helpers/getLinkedContentTypeIdsForNodeType.js +9 -0
  223. package/dist/esm/helpers/newEntitySelectorConfigFromRichTextField.js +18 -0
  224. package/dist/esm/helpers/nodeFactory.js +24 -0
  225. package/dist/esm/helpers/removeInternalMarks.js +16 -0
  226. package/dist/esm/helpers/sanitizeIncomingSlateDoc.js +23 -0
  227. package/dist/esm/helpers/sdkNavigatorSlideIn.js +42 -0
  228. package/dist/esm/helpers/sdkNavigatorSlideIn.spec.js +200 -0
  229. package/dist/esm/helpers/transformers.js +34 -0
  230. package/dist/esm/helpers/validations.js +24 -0
  231. package/dist/esm/index.js +4 -0
  232. package/dist/esm/internal/constants.js +2 -0
  233. package/dist/esm/internal/hooks.js +5 -0
  234. package/dist/esm/internal/index.js +4 -0
  235. package/dist/esm/internal/misc.js +28 -0
  236. package/dist/esm/internal/queries.js +182 -0
  237. package/dist/esm/internal/transforms.js +75 -0
  238. package/dist/esm/internal/types/editor.js +1 -0
  239. package/dist/esm/internal/types/index.js +2 -0
  240. package/dist/esm/internal/types/plugins.js +1 -0
  241. package/dist/esm/plugins/Break/createExitBreakPlugin.js +16 -0
  242. package/dist/esm/plugins/Break/createExitBreakPlugin.test.js +32 -0
  243. package/dist/esm/plugins/Break/createResetNodePlugin.js +22 -0
  244. package/dist/esm/plugins/Break/createSoftBreakPlugin.js +13 -0
  245. package/dist/esm/plugins/Break/createSoftBreakPlugin.test.js +43 -0
  246. package/dist/esm/plugins/Break/index.js +3 -0
  247. package/dist/esm/plugins/CommandPalette/components/CommandList.js +113 -0
  248. package/dist/esm/plugins/CommandPalette/components/CommandList.styles.js +88 -0
  249. package/dist/esm/plugins/CommandPalette/components/CommandPrompt.js +20 -0
  250. package/dist/esm/plugins/CommandPalette/constants.js +1 -0
  251. package/dist/esm/plugins/CommandPalette/createCommandPalettePlugin.js +14 -0
  252. package/dist/esm/plugins/CommandPalette/hooks/useCommandList.js +84 -0
  253. package/dist/esm/plugins/CommandPalette/index.js +1 -0
  254. package/dist/esm/plugins/CommandPalette/onKeyDown.js +36 -0
  255. package/dist/esm/plugins/CommandPalette/onKeyDown.spec.js +40 -0
  256. package/dist/esm/plugins/CommandPalette/useCommands.js +204 -0
  257. package/dist/esm/plugins/CommandPalette/utils/createInlineEntryNode.js +20 -0
  258. package/dist/esm/plugins/CommandPalette/utils/fetchAssets.js +21 -0
  259. package/dist/esm/plugins/CommandPalette/utils/fetchEntries.js +29 -0
  260. package/dist/esm/plugins/CommandPalette/utils/insertBlock.js +32 -0
  261. package/dist/esm/plugins/CommandPalette/utils/trimLeadingSlash.js +6 -0
  262. package/dist/esm/plugins/DragAndDrop/index.js +44 -0
  263. package/dist/esm/plugins/EmbeddedEntityBlock/LinkedEntityBlock.js +79 -0
  264. package/dist/esm/plugins/EmbeddedEntityBlock/ToolbarIcon.js +49 -0
  265. package/dist/esm/plugins/EmbeddedEntityBlock/Util.js +85 -0
  266. package/dist/esm/plugins/EmbeddedEntityBlock/index.js +74 -0
  267. package/dist/esm/plugins/EmbeddedEntityInline/FetchingWrappedInlineEntryCard.js +104 -0
  268. package/dist/esm/plugins/EmbeddedEntityInline/Util.js +20 -0
  269. package/dist/esm/plugins/EmbeddedEntityInline/index.js +159 -0
  270. package/dist/esm/plugins/Heading/__tests__/createHeadingPlugin.test.js +113 -0
  271. package/dist/esm/plugins/Heading/components/Heading.js +73 -0
  272. package/dist/esm/plugins/Heading/components/ToolbarHeadingButton.js +119 -0
  273. package/dist/esm/plugins/Heading/createHeadingPlugin.js +87 -0
  274. package/dist/esm/plugins/Heading/index.js +2 -0
  275. package/dist/esm/plugins/Hr/index.js +125 -0
  276. package/dist/esm/plugins/Hyperlink/HyperlinkModal.js +220 -0
  277. package/dist/esm/plugins/Hyperlink/__tests__/createHyperlinkPlugin.test.js +21 -0
  278. package/dist/esm/plugins/Hyperlink/components/EntityHyperlink.js +44 -0
  279. package/dist/esm/plugins/Hyperlink/components/ToolbarHyperlinkButton.js +29 -0
  280. package/dist/esm/plugins/Hyperlink/components/UrlHyperlink.js +37 -0
  281. package/dist/esm/plugins/Hyperlink/components/styles.js +21 -0
  282. package/dist/esm/plugins/Hyperlink/createHyperlinkPlugin.js +125 -0
  283. package/dist/esm/plugins/Hyperlink/index.js +2 -0
  284. package/dist/esm/plugins/Hyperlink/useEntityInfo.js +85 -0
  285. package/dist/esm/plugins/Hyperlink/utils.js +25 -0
  286. package/dist/esm/plugins/List/__tests__/createListPlugin.test.js +43 -0
  287. package/dist/esm/plugins/List/__tests__/insertListBreak.test.js +73 -0
  288. package/dist/esm/plugins/List/__tests__/insertListFragment.test.js +60 -0
  289. package/dist/esm/plugins/List/components/List.js +46 -0
  290. package/dist/esm/plugins/List/components/ListItem.js +19 -0
  291. package/dist/esm/plugins/List/components/ToolbarListButton.js +37 -0
  292. package/dist/esm/plugins/List/createListPlugin.js +66 -0
  293. package/dist/esm/plugins/List/index.js +2 -0
  294. package/dist/esm/plugins/List/insertListBreak.js +50 -0
  295. package/dist/esm/plugins/List/insertListFragment.js +88 -0
  296. package/dist/esm/plugins/List/onKeyDownList.js +31 -0
  297. package/dist/esm/plugins/List/transforms/insertListItem.js +82 -0
  298. package/dist/esm/plugins/List/transforms/moveListItemDown.js +37 -0
  299. package/dist/esm/plugins/List/transforms/moveListItems.js +46 -0
  300. package/dist/esm/plugins/List/transforms/moveListItems.test.js +68 -0
  301. package/dist/esm/plugins/List/transforms/toggleList.js +132 -0
  302. package/dist/esm/plugins/List/transforms/toggleList.spec.js +135 -0
  303. package/dist/esm/plugins/List/transforms/unwrapList.js +28 -0
  304. package/dist/esm/plugins/List/utils.js +89 -0
  305. package/dist/esm/plugins/List/withList.js +22 -0
  306. package/dist/esm/plugins/Marks/Bold.js +59 -0
  307. package/dist/esm/plugins/Marks/Code.js +59 -0
  308. package/dist/esm/plugins/Marks/Italic.js +54 -0
  309. package/dist/esm/plugins/Marks/Subscript.js +46 -0
  310. package/dist/esm/plugins/Marks/Superscript.js +44 -0
  311. package/dist/esm/plugins/Marks/Underline.js +46 -0
  312. package/dist/esm/plugins/Marks/components/MarkToolbarButton.js +51 -0
  313. package/dist/esm/plugins/Marks/helpers.js +25 -0
  314. package/dist/esm/plugins/Marks/index.js +17 -0
  315. package/dist/esm/plugins/Normalizer/baseRules.js +28 -0
  316. package/dist/esm/plugins/Normalizer/createNormalizerPlugin.js +5 -0
  317. package/dist/esm/plugins/Normalizer/createNormalizerPlugin.test.js +113 -0
  318. package/dist/esm/plugins/Normalizer/index.js +2 -0
  319. package/dist/esm/plugins/Normalizer/types.js +1 -0
  320. package/dist/esm/plugins/Normalizer/utils.js +18 -0
  321. package/dist/esm/plugins/Normalizer/withNormalizer.js +73 -0
  322. package/dist/esm/plugins/Paragraph/Paragraph.js +16 -0
  323. package/dist/esm/plugins/Paragraph/__tests__/createParagraphPlugin.test.js +121 -0
  324. package/dist/esm/plugins/Paragraph/createParagraphPlugin.js +58 -0
  325. package/dist/esm/plugins/Paragraph/index.js +1 -0
  326. package/dist/esm/plugins/Paragraph/utils.js +6 -0
  327. package/dist/esm/plugins/PasteHTML/createPasteHTMLPlugin.js +42 -0
  328. package/dist/esm/plugins/PasteHTML/index.js +1 -0
  329. package/dist/esm/plugins/PasteHTML/utils/__tests__/sanitizeHTML.test.js +50 -0
  330. package/dist/esm/plugins/PasteHTML/utils/sanitizeAnchors.js +33 -0
  331. package/dist/esm/plugins/PasteHTML/utils/sanitizeHTML.js +40 -0
  332. package/dist/esm/plugins/PasteHTML/utils/sanitizeSheets.js +34 -0
  333. package/dist/esm/plugins/Quote/__test__/createQuotePlugin.test.js +74 -0
  334. package/dist/esm/plugins/Quote/components/Quote.js +15 -0
  335. package/dist/esm/plugins/Quote/components/ToolbarQuoteButton.js +23 -0
  336. package/dist/esm/plugins/Quote/createQuotePlugin.js +47 -0
  337. package/dist/esm/plugins/Quote/index.js +2 -0
  338. package/dist/esm/plugins/Quote/shouldResetQuote.js +30 -0
  339. package/dist/esm/plugins/Quote/toggleQuote.js +33 -0
  340. package/dist/esm/plugins/Quote/withQuote.js +38 -0
  341. package/dist/esm/plugins/SelectOnBackspace/createSelectOnBackspacePlugin.js +11 -0
  342. package/dist/esm/plugins/SelectOnBackspace/index.js +1 -0
  343. package/dist/esm/plugins/Table/__tests__/createTablePlugin.test.js +88 -0
  344. package/dist/esm/plugins/Table/__tests__/helpers.test.js +14 -0
  345. package/dist/esm/plugins/Table/actions/addColumn.js +45 -0
  346. package/dist/esm/plugins/Table/actions/addRow.js +39 -0
  347. package/dist/esm/plugins/Table/actions/index.js +3 -0
  348. package/dist/esm/plugins/Table/actions/setHeader.js +24 -0
  349. package/dist/esm/plugins/Table/components/Cell.js +25 -0
  350. package/dist/esm/plugins/Table/components/HeaderCell.js +28 -0
  351. package/dist/esm/plugins/Table/components/Row.js +15 -0
  352. package/dist/esm/plugins/Table/components/Table.js +22 -0
  353. package/dist/esm/plugins/Table/components/TableActions.js +118 -0
  354. package/dist/esm/plugins/Table/components/ToolbarButton.js +24 -0
  355. package/dist/esm/plugins/Table/createTablePlugin.js +109 -0
  356. package/dist/esm/plugins/Table/helpers.js +116 -0
  357. package/dist/esm/plugins/Table/index.js +2 -0
  358. package/dist/esm/plugins/Table/insertTableFragment.js +40 -0
  359. package/dist/esm/plugins/Table/onKeyDownTable.js +52 -0
  360. package/dist/esm/plugins/Table/tableTracking.js +46 -0
  361. package/dist/esm/plugins/Text/__tests__/createTextPlugin.test.js +75 -0
  362. package/dist/esm/plugins/Text/createTextPlugin.js +126 -0
  363. package/dist/esm/plugins/Text/index.js +1 -0
  364. package/dist/esm/plugins/Tracking/createTrackingPlugin.js +83 -0
  365. package/dist/esm/plugins/Tracking/index.js +1 -0
  366. package/dist/esm/plugins/Tracking/utils.js +10 -0
  367. package/dist/esm/plugins/TrailingParagraph/index.js +10 -0
  368. package/dist/esm/plugins/Voids/createVoidsPlugin.js +21 -0
  369. package/dist/esm/plugins/Voids/index.js +1 -0
  370. package/dist/esm/plugins/Voids/transformVoid.js +19 -0
  371. package/dist/esm/plugins/index.js +58 -0
  372. package/dist/esm/plugins/links-tracking.js +14 -0
  373. package/dist/esm/plugins/shared/FetchingWrappedAssetCard.js +59 -0
  374. package/dist/esm/plugins/shared/FetchingWrappedEntryCard.js +62 -0
  375. package/dist/esm/plugins/shared/ToolbarButton.js +39 -0
  376. package/dist/esm/plugins/shared/__tests__/FetchingWrappedAssetCard.test.js +59 -0
  377. package/dist/esm/plugins/shared/__tests__/FetchingWrappedEntryCard.test.js +62 -0
  378. package/dist/esm/prepareDocument.js +57 -0
  379. package/dist/esm/test-utils/assertOutput.js +21 -0
  380. package/dist/esm/test-utils/createEditor.js +21 -0
  381. package/dist/esm/test-utils/hyperscript.d.js +0 -0
  382. package/dist/esm/test-utils/index.js +4 -0
  383. package/dist/esm/test-utils/jsx.js +149 -0
  384. package/dist/esm/test-utils/mockPlugin.js +6 -0
  385. package/dist/esm/test-utils/randomId.js +3 -0
  386. package/dist/esm/test-utils/setEmptyDataAttribute.js +11 -0
  387. package/dist/esm/test-utils/validation.js +112 -0
  388. package/dist/esm/useOnValueChanged.js +43 -0
  389. package/dist/{ContentfulEditorProvider.d.ts → types/ContentfulEditorProvider.d.ts} +9 -9
  390. package/dist/{RichTextEditor.d.ts → types/RichTextEditor.d.ts} +21 -20
  391. package/dist/{RichTextEditor.styles.d.ts → types/RichTextEditor.styles.d.ts} +7 -7
  392. package/dist/{SdkProvider.d.ts → types/SdkProvider.d.ts} +7 -7
  393. package/dist/types/Toolbar/_tests_/toolbar.test.d.ts +1 -0
  394. package/dist/{Toolbar → types/Toolbar}/components/EmbedEntityWidget.d.ts +6 -5
  395. package/dist/{Toolbar → types/Toolbar}/components/EmbeddedEntityDropdownButton.d.ts +9 -9
  396. package/dist/{Toolbar → types/Toolbar}/components/StickyToolbarWrapper.d.ts +7 -7
  397. package/dist/types/Toolbar/index.d.ts +6 -0
  398. package/dist/types/__fixtures__/FakeSdk.d.ts +8 -0
  399. package/dist/types/__fixtures__/asset/index.d.ts +6 -0
  400. package/dist/types/__fixtures__/content-type/index.d.ts +2 -0
  401. package/dist/types/__fixtures__/entry/index.d.ts +5 -0
  402. package/dist/types/__fixtures__/fixtures.d.ts +6 -0
  403. package/dist/types/__fixtures__/locale/index.d.ts +42 -0
  404. package/dist/types/__fixtures__/space/index.d.ts +2 -0
  405. package/dist/{constants → types/constants}/Schema.d.ts +111 -111
  406. package/dist/{dialogs → types/dialogs}/HypelinkDialog/HyperlinkDialog.d.ts +63 -54
  407. package/dist/{dialogs → types/dialogs}/openRichTextDialog.d.ts +2 -2
  408. package/dist/{dialogs → types/dialogs}/renderRichTextDialog.d.ts +3 -2
  409. package/dist/types/helpers/__tests__/extractNodes.test.d.ts +1 -0
  410. package/dist/types/helpers/__tests__/removeInternalMarks.test.d.ts +2 -0
  411. package/dist/types/helpers/__tests__/validations.test.d.ts +1 -0
  412. package/dist/{helpers → types/helpers}/editor.d.ts +40 -40
  413. package/dist/{helpers → types/helpers}/environment.d.ts +2 -2
  414. package/dist/{helpers → types/helpers}/extractNodes.d.ts +5 -5
  415. package/dist/{helpers → types/helpers}/formatDateAndTime.d.ts +15 -15
  416. package/dist/{helpers → types/helpers}/getLinkedContentTypeIdsForNodeType.d.ts +26 -26
  417. package/dist/{helpers → types/helpers}/newEntitySelectorConfigFromRichTextField.d.ts +14 -14
  418. package/dist/{helpers → types/helpers}/nodeFactory.d.ts +24 -24
  419. package/dist/{helpers → types/helpers}/removeInternalMarks.d.ts +1 -1
  420. package/dist/{helpers → types/helpers}/sanitizeIncomingSlateDoc.d.ts +6 -6
  421. package/dist/{helpers → types/helpers}/sdkNavigatorSlideIn.d.ts +16 -16
  422. package/dist/types/helpers/sdkNavigatorSlideIn.spec.d.ts +1 -0
  423. package/dist/{helpers → types/helpers}/transformers.d.ts +7 -7
  424. package/dist/{helpers → types/helpers}/validations.d.ts +10 -10
  425. package/dist/{index.d.ts → types/index.d.ts} +4 -4
  426. package/dist/{internal → types/internal}/constants.d.ts +1 -1
  427. package/dist/{internal → types/internal}/hooks.d.ts +4 -4
  428. package/dist/{internal → types/internal}/index.d.ts +4 -4
  429. package/dist/{internal → types/internal}/misc.d.ts +37 -37
  430. package/dist/{internal → types/internal}/queries.d.ts +78 -78
  431. package/dist/{internal → types/internal}/transforms.d.ts +33 -33
  432. package/dist/types/internal/types/editor.d.ts +51 -0
  433. package/dist/{internal → types/internal}/types/index.d.ts +2 -2
  434. package/dist/{internal → types/internal}/types/plugins.d.ts +12 -12
  435. package/dist/{plugins → types/plugins}/Break/createExitBreakPlugin.d.ts +2 -2
  436. package/dist/types/plugins/Break/createExitBreakPlugin.test.d.ts +1 -0
  437. package/dist/{plugins → types/plugins}/Break/createResetNodePlugin.d.ts +2 -2
  438. package/dist/{plugins → types/plugins}/Break/createSoftBreakPlugin.d.ts +2 -2
  439. package/dist/types/plugins/Break/createSoftBreakPlugin.test.d.ts +1 -0
  440. package/dist/{plugins → types/plugins}/Break/index.d.ts +5 -5
  441. package/dist/{plugins → types/plugins}/CommandPalette/components/CommandList.d.ts +8 -7
  442. package/dist/{plugins → types/plugins}/CommandPalette/components/CommandList.styles.d.ts +14 -14
  443. package/dist/{plugins → types/plugins}/CommandPalette/components/CommandPrompt.d.ts +5 -4
  444. package/dist/{plugins → types/plugins}/CommandPalette/constants.d.ts +1 -1
  445. package/dist/{plugins → types/plugins}/CommandPalette/createCommandPalettePlugin.d.ts +13 -13
  446. package/dist/{plugins → types/plugins}/CommandPalette/hooks/useCommandList.d.ts +4 -4
  447. package/dist/{plugins → types/plugins}/CommandPalette/index.d.ts +1 -1
  448. package/dist/{plugins → types/plugins}/CommandPalette/onKeyDown.d.ts +2 -2
  449. package/dist/types/plugins/CommandPalette/onKeyDown.spec.d.ts +1 -0
  450. package/dist/{plugins → types/plugins}/CommandPalette/useCommands.d.ts +19 -19
  451. package/dist/{plugins → types/plugins}/CommandPalette/utils/createInlineEntryNode.d.ts +16 -16
  452. package/dist/{plugins → types/plugins}/CommandPalette/utils/fetchAssets.d.ts +8 -8
  453. package/dist/{plugins → types/plugins}/CommandPalette/utils/fetchEntries.d.ts +9 -9
  454. package/dist/{plugins → types/plugins}/CommandPalette/utils/insertBlock.d.ts +1 -1
  455. package/dist/{plugins → types/plugins}/CommandPalette/utils/trimLeadingSlash.d.ts +7 -7
  456. package/dist/{plugins → types/plugins}/DragAndDrop/index.d.ts +2 -2
  457. package/dist/{plugins → types/plugins}/EmbeddedEntityBlock/LinkedEntityBlock.d.ts +20 -19
  458. package/dist/{plugins → types/plugins}/EmbeddedEntityBlock/ToolbarIcon.d.ts +11 -10
  459. package/dist/{plugins → types/plugins}/EmbeddedEntityBlock/Util.d.ts +4 -4
  460. package/dist/{plugins → types/plugins}/EmbeddedEntityBlock/index.d.ts +5 -5
  461. package/dist/{plugins → types/plugins}/EmbeddedEntityInline/FetchingWrappedInlineEntryCard.d.ts +13 -13
  462. package/dist/{plugins → types/plugins}/EmbeddedEntityInline/Util.d.ts +16 -16
  463. package/dist/{plugins → types/plugins}/EmbeddedEntityInline/index.d.ts +10 -9
  464. package/dist/types/plugins/Heading/__tests__/createHeadingPlugin.test.d.ts +1 -0
  465. package/dist/{plugins → types/plugins}/Heading/components/Heading.d.ts +10 -10
  466. package/dist/{plugins → types/plugins}/Heading/components/ToolbarHeadingButton.d.ts +5 -4
  467. package/dist/{plugins → types/plugins}/Heading/createHeadingPlugin.d.ts +2 -2
  468. package/dist/{plugins → types/plugins}/Heading/index.d.ts +2 -2
  469. package/dist/{plugins → types/plugins}/Hr/index.d.ts +11 -11
  470. package/dist/{plugins → types/plugins}/Hyperlink/HyperlinkModal.d.ts +17 -16
  471. package/dist/types/plugins/Hyperlink/__tests__/createHyperlinkPlugin.test.d.ts +1 -0
  472. package/dist/{plugins → types/plugins}/Hyperlink/components/EntityHyperlink.d.ts +21 -20
  473. package/dist/{plugins → types/plugins}/Hyperlink/components/ToolbarHyperlinkButton.d.ts +6 -5
  474. package/dist/{plugins → types/plugins}/Hyperlink/components/UrlHyperlink.d.ts +22 -21
  475. package/dist/{plugins → types/plugins}/Hyperlink/components/styles.d.ts +4 -4
  476. package/dist/{plugins → types/plugins}/Hyperlink/createHyperlinkPlugin.d.ts +3 -3
  477. package/dist/{plugins → types/plugins}/Hyperlink/index.d.ts +2 -2
  478. package/dist/{plugins → types/plugins}/Hyperlink/useEntityInfo.d.ts +16 -16
  479. package/dist/{plugins → types/plugins}/Hyperlink/utils.d.ts +5 -5
  480. package/dist/types/plugins/List/__tests__/createListPlugin.test.d.ts +1 -0
  481. package/dist/types/plugins/List/__tests__/insertListBreak.test.d.ts +1 -0
  482. package/dist/types/plugins/List/__tests__/insertListFragment.test.d.ts +1 -0
  483. package/dist/{plugins → types/plugins}/List/components/List.d.ts +4 -3
  484. package/dist/{plugins → types/plugins}/List/components/ListItem.d.ts +3 -2
  485. package/dist/{plugins → types/plugins}/List/components/ToolbarListButton.d.ts +5 -4
  486. package/dist/{plugins → types/plugins}/List/createListPlugin.d.ts +2 -2
  487. package/dist/{plugins → types/plugins}/List/index.d.ts +2 -2
  488. package/dist/{plugins → types/plugins}/List/insertListBreak.d.ts +2 -2
  489. package/dist/{plugins → types/plugins}/List/insertListFragment.d.ts +2 -2
  490. package/dist/{plugins → types/plugins}/List/onKeyDownList.d.ts +7 -7
  491. package/dist/{plugins → types/plugins}/List/transforms/insertListItem.d.ts +5 -5
  492. package/dist/{plugins → types/plugins}/List/transforms/moveListItemDown.d.ts +6 -6
  493. package/dist/{plugins → types/plugins}/List/transforms/moveListItems.d.ts +6 -6
  494. package/dist/types/plugins/List/transforms/moveListItems.test.d.ts +1 -0
  495. package/dist/{plugins → types/plugins}/List/transforms/toggleList.d.ts +4 -4
  496. package/dist/types/plugins/List/transforms/toggleList.spec.d.ts +1 -0
  497. package/dist/{plugins → types/plugins}/List/transforms/unwrapList.d.ts +4 -4
  498. package/dist/{plugins → types/plugins}/List/utils.d.ts +14 -14
  499. package/dist/{plugins → types/plugins}/List/withList.d.ts +2 -2
  500. package/dist/{plugins → types/plugins}/Marks/Bold.d.ts +11 -10
  501. package/dist/{plugins → types/plugins}/Marks/Code.d.ts +17 -16
  502. package/dist/{plugins → types/plugins}/Marks/Italic.d.ts +11 -10
  503. package/dist/{plugins → types/plugins}/Marks/Subscript.d.ts +17 -16
  504. package/dist/{plugins → types/plugins}/Marks/Superscript.d.ts +17 -16
  505. package/dist/{plugins → types/plugins}/Marks/Underline.d.ts +11 -10
  506. package/dist/{plugins → types/plugins}/Marks/components/MarkToolbarButton.d.ts +13 -13
  507. package/dist/{plugins → types/plugins}/Marks/helpers.d.ts +4 -4
  508. package/dist/{plugins → types/plugins}/Marks/index.d.ts +2 -2
  509. package/dist/{plugins → types/plugins}/Normalizer/baseRules.d.ts +2 -2
  510. package/dist/{plugins → types/plugins}/Normalizer/createNormalizerPlugin.d.ts +2 -2
  511. package/dist/types/plugins/Normalizer/createNormalizerPlugin.test.d.ts +1 -0
  512. package/dist/{plugins → types/plugins}/Normalizer/index.d.ts +2 -2
  513. package/dist/{plugins → types/plugins}/Normalizer/types.d.ts +38 -38
  514. package/dist/{plugins → types/plugins}/Normalizer/utils.d.ts +5 -5
  515. package/dist/{plugins → types/plugins}/Normalizer/withNormalizer.d.ts +2 -2
  516. package/dist/types/plugins/Paragraph/Paragraph.d.ts +3 -0
  517. package/dist/types/plugins/Paragraph/__tests__/createParagraphPlugin.test.d.ts +1 -0
  518. package/dist/{plugins → types/plugins}/Paragraph/createParagraphPlugin.d.ts +2 -2
  519. package/dist/{plugins → types/plugins}/Paragraph/index.d.ts +1 -1
  520. package/dist/{plugins → types/plugins}/Paragraph/utils.d.ts +2 -2
  521. package/dist/{plugins → types/plugins}/PasteHTML/createPasteHTMLPlugin.d.ts +8 -8
  522. package/dist/{plugins → types/plugins}/PasteHTML/index.d.ts +1 -1
  523. package/dist/types/plugins/PasteHTML/utils/__tests__/sanitizeHTML.test.d.ts +1 -0
  524. package/dist/{plugins → types/plugins}/PasteHTML/utils/sanitizeAnchors.d.ts +19 -19
  525. package/dist/{plugins → types/plugins}/PasteHTML/utils/sanitizeHTML.d.ts +1 -1
  526. package/dist/{plugins → types/plugins}/PasteHTML/utils/sanitizeSheets.d.ts +4 -4
  527. package/dist/types/plugins/Quote/__test__/createQuotePlugin.test.d.ts +1 -0
  528. package/dist/types/plugins/Quote/components/Quote.d.ts +3 -0
  529. package/dist/{plugins → types/plugins}/Quote/components/ToolbarQuoteButton.d.ts +5 -4
  530. package/dist/{plugins → types/plugins}/Quote/createQuotePlugin.d.ts +2 -2
  531. package/dist/{plugins → types/plugins}/Quote/index.d.ts +2 -2
  532. package/dist/{plugins → types/plugins}/Quote/shouldResetQuote.d.ts +8 -8
  533. package/dist/{plugins → types/plugins}/Quote/toggleQuote.d.ts +4 -4
  534. package/dist/{plugins → types/plugins}/Quote/withQuote.d.ts +2 -2
  535. package/dist/{plugins → types/plugins}/SelectOnBackspace/createSelectOnBackspacePlugin.d.ts +2 -2
  536. package/dist/{plugins → types/plugins}/SelectOnBackspace/index.d.ts +1 -1
  537. package/dist/types/plugins/Table/__tests__/createTablePlugin.test.d.ts +1 -0
  538. package/dist/types/plugins/Table/__tests__/helpers.test.d.ts +1 -0
  539. package/dist/{plugins → types/plugins}/Table/actions/addColumn.d.ts +7 -7
  540. package/dist/{plugins → types/plugins}/Table/actions/addRow.d.ts +3 -3
  541. package/dist/{plugins → types/plugins}/Table/actions/index.d.ts +3 -3
  542. package/dist/{plugins → types/plugins}/Table/actions/setHeader.d.ts +2 -2
  543. package/dist/types/plugins/Table/components/Cell.d.ts +3 -0
  544. package/dist/{plugins → types/plugins}/Table/components/HeaderCell.d.ts +3 -2
  545. package/dist/types/plugins/Table/components/Row.d.ts +3 -0
  546. package/dist/{plugins → types/plugins}/Table/components/Table.d.ts +3 -2
  547. package/dist/types/plugins/Table/components/TableActions.d.ts +5 -0
  548. package/dist/{plugins → types/plugins}/Table/components/ToolbarButton.d.ts +5 -4
  549. package/dist/{plugins → types/plugins}/Table/createTablePlugin.d.ts +2 -2
  550. package/dist/{plugins → types/plugins}/Table/helpers.d.ts +15 -15
  551. package/dist/{plugins → types/plugins}/Table/index.d.ts +2 -2
  552. package/dist/{plugins → types/plugins}/Table/insertTableFragment.d.ts +3 -3
  553. package/dist/{plugins → types/plugins}/Table/onKeyDownTable.d.ts +2 -2
  554. package/dist/{plugins → types/plugins}/Table/tableTracking.d.ts +4 -4
  555. package/dist/types/plugins/Text/__tests__/createTextPlugin.test.d.ts +2 -0
  556. package/dist/{plugins → types/plugins}/Text/createTextPlugin.d.ts +2 -2
  557. package/dist/{plugins → types/plugins}/Text/index.d.ts +1 -1
  558. package/dist/{plugins → types/plugins}/Tracking/createTrackingPlugin.d.ts +12 -12
  559. package/dist/{plugins → types/plugins}/Tracking/index.d.ts +1 -1
  560. package/dist/{plugins → types/plugins}/Tracking/utils.d.ts +2 -2
  561. package/dist/{plugins → types/plugins}/TrailingParagraph/index.d.ts +2 -2
  562. package/dist/{plugins → types/plugins}/Voids/createVoidsPlugin.d.ts +2 -2
  563. package/dist/{plugins → types/plugins}/Voids/index.d.ts +1 -1
  564. package/dist/{plugins → types/plugins}/Voids/transformVoid.d.ts +5 -5
  565. package/dist/{plugins → types/plugins}/index.d.ts +6 -6
  566. package/dist/{plugins → types/plugins}/links-tracking.d.ts +3 -3
  567. package/dist/{plugins → types/plugins}/shared/FetchingWrappedAssetCard.d.ts +14 -13
  568. package/dist/{plugins → types/plugins}/shared/FetchingWrappedEntryCard.d.ts +14 -13
  569. package/dist/{plugins → types/plugins}/shared/ToolbarButton.d.ts +12 -11
  570. package/dist/types/plugins/shared/__tests__/FetchingWrappedAssetCard.test.d.ts +1 -0
  571. package/dist/types/plugins/shared/__tests__/FetchingWrappedEntryCard.test.d.ts +1 -0
  572. package/dist/{prepareDocument.d.ts → types/prepareDocument.d.ts} +19 -19
  573. package/dist/{test-utils → types/test-utils}/assertOutput.d.ts +7 -7
  574. package/dist/{test-utils → types/test-utils}/createEditor.d.ts +31 -31
  575. package/dist/{test-utils → types/test-utils}/index.d.ts +4 -4
  576. package/dist/{test-utils → types/test-utils}/jsx.d.ts +28 -28
  577. package/dist/{test-utils → types/test-utils}/mockPlugin.d.ts +2 -2
  578. package/dist/{test-utils → types/test-utils}/randomId.d.ts +4 -4
  579. package/dist/{test-utils → types/test-utils}/setEmptyDataAttribute.d.ts +6 -6
  580. package/dist/{test-utils → types/test-utils}/validation.d.ts +1 -1
  581. package/dist/{useOnValueChanged.d.ts → types/useOnValueChanged.d.ts} +8 -8
  582. package/package.json +27 -21
  583. package/dist/Toolbar/index.d.ts +0 -5
  584. package/dist/field-editor-rich-text.cjs.development.js +0 -7133
  585. package/dist/field-editor-rich-text.cjs.development.js.map +0 -1
  586. package/dist/field-editor-rich-text.cjs.production.min.js +0 -163
  587. package/dist/field-editor-rich-text.cjs.production.min.js.map +0 -1
  588. package/dist/field-editor-rich-text.esm.js +0 -7123
  589. package/dist/field-editor-rich-text.esm.js.map +0 -1
  590. package/dist/index.js +0 -8
  591. package/dist/internal/types/editor.d.ts +0 -51
  592. package/dist/plugins/Paragraph/Paragraph.d.ts +0 -2
  593. package/dist/plugins/Quote/components/Quote.d.ts +0 -2
  594. package/dist/plugins/Table/components/Cell.d.ts +0 -2
  595. package/dist/plugins/Table/components/Row.d.ts +0 -2
  596. package/dist/plugins/Table/components/TableActions.d.ts +0 -4
@@ -1 +0,0 @@
1
- {"version":3,"file":"field-editor-rich-text.cjs.development.js","sources":["../src/internal/hooks.ts","../src/ContentfulEditorProvider.ts","../src/internal/misc.ts","../src/plugins/Break/createSoftBreakPlugin.ts","../src/plugins/Break/createExitBreakPlugin.ts","../src/plugins/Break/createResetNodePlugin.ts","../src/plugins/CommandPalette/utils/trimLeadingSlash.ts","../src/SdkProvider.tsx","../src/plugins/CommandPalette/hooks/useCommandList.tsx","../src/internal/queries.ts","../src/internal/transforms.ts","../src/helpers/environment.ts","../src/helpers/editor.ts","../src/helpers/validations.ts","../src/plugins/CommandPalette/constants.ts","../src/plugins/CommandPalette/utils/createInlineEntryNode.ts","../src/plugins/CommandPalette/utils/fetchAssets.ts","../src/plugins/CommandPalette/utils/fetchEntries.ts","../src/plugins/CommandPalette/utils/insertBlock.ts","../src/plugins/CommandPalette/useCommands.ts","../src/plugins/CommandPalette/components/CommandList.styles.ts","../src/plugins/CommandPalette/components/CommandList.tsx","../src/plugins/CommandPalette/components/CommandPrompt.tsx","../src/plugins/CommandPalette/onKeyDown.ts","../src/plugins/CommandPalette/createCommandPalettePlugin.ts","../src/plugins/DragAndDrop/index.tsx","../src/plugins/links-tracking.tsx","../src/plugins/shared/FetchingWrappedAssetCard.tsx","../src/plugins/shared/FetchingWrappedEntryCard.tsx","../src/plugins/EmbeddedEntityBlock/LinkedEntityBlock.tsx","../src/helpers/getLinkedContentTypeIdsForNodeType.ts","../src/helpers/newEntitySelectorConfigFromRichTextField.ts","../src/helpers/sdkNavigatorSlideIn.ts","../src/plugins/EmbeddedEntityBlock/Util.ts","../src/plugins/EmbeddedEntityBlock/ToolbarIcon.tsx","../src/plugins/EmbeddedEntityBlock/index.tsx","../src/plugins/EmbeddedEntityInline/FetchingWrappedInlineEntryCard.tsx","../src/plugins/EmbeddedEntityInline/Util.ts","../src/plugins/EmbeddedEntityInline/index.tsx","../src/plugins/Heading/components/ToolbarHeadingButton.tsx","../src/helpers/extractNodes.ts","../src/helpers/transformers.ts","../src/plugins/Heading/components/Heading.tsx","../src/plugins/Heading/createHeadingPlugin.ts","../src/plugins/shared/ToolbarButton.tsx","../src/plugins/Hr/index.tsx","../src/plugins/Hyperlink/HyperlinkModal.tsx","../src/plugins/Hyperlink/components/ToolbarHyperlinkButton.tsx","../src/plugins/Hyperlink/utils.ts","../src/plugins/Hyperlink/useEntityInfo.ts","../src/plugins/Hyperlink/components/styles.ts","../src/plugins/Hyperlink/components/EntityHyperlink.tsx","../src/plugins/Hyperlink/components/UrlHyperlink.tsx","../src/plugins/Hyperlink/createHyperlinkPlugin.ts","../src/plugins/List/components/List.tsx","../src/plugins/List/components/ListItem.tsx","../src/plugins/List/transforms/moveListItemDown.ts","../src/plugins/List/transforms/moveListItems.ts","../src/internal/constants.ts","../src/plugins/List/transforms/unwrapList.ts","../src/plugins/List/transforms/toggleList.ts","../src/plugins/List/onKeyDownList.ts","../src/plugins/List/utils.ts","../src/plugins/List/transforms/insertListItem.ts","../src/plugins/List/insertListBreak.ts","../src/plugins/List/insertListFragment.ts","../src/plugins/List/withList.ts","../src/plugins/List/createListPlugin.ts","../src/plugins/List/components/ToolbarListButton.tsx","../src/plugins/Marks/helpers.ts","../src/plugins/Marks/components/MarkToolbarButton.tsx","../src/plugins/Marks/Bold.tsx","../src/plugins/Marks/Code.tsx","../src/plugins/Marks/Italic.tsx","../src/plugins/Marks/Subscript.tsx","../src/plugins/Marks/Superscript.tsx","../src/plugins/Marks/Underline.tsx","../src/plugins/Marks/index.ts","../src/plugins/Normalizer/baseRules.ts","../src/plugins/Normalizer/utils.ts","../src/plugins/Normalizer/withNormalizer.ts","../src/plugins/Normalizer/createNormalizerPlugin.ts","../src/plugins/Paragraph/Paragraph.tsx","../src/plugins/Paragraph/utils.ts","../src/plugins/Paragraph/createParagraphPlugin.ts","../src/plugins/PasteHTML/utils/sanitizeAnchors.ts","../src/plugins/PasteHTML/utils/sanitizeSheets.ts","../src/plugins/PasteHTML/utils/sanitizeHTML.ts","../src/plugins/PasteHTML/createPasteHTMLPlugin.ts","../src/plugins/Quote/components/Quote.tsx","../src/plugins/Quote/shouldResetQuote.ts","../src/plugins/Quote/toggleQuote.ts","../src/plugins/Quote/withQuote.ts","../src/plugins/Quote/createQuotePlugin.ts","../src/plugins/Quote/components/ToolbarQuoteButton.tsx","../src/plugins/SelectOnBackspace/createSelectOnBackspacePlugin.ts","../src/plugins/Table/actions/addRow.ts","../src/plugins/Table/actions/addColumn.ts","../src/plugins/Table/actions/setHeader.ts","../src/plugins/Table/helpers.ts","../src/plugins/Table/components/TableActions.tsx","../src/plugins/Table/components/Cell.tsx","../src/plugins/Table/components/HeaderCell.tsx","../src/plugins/Table/components/Row.tsx","../src/plugins/Table/components/Table.tsx","../src/plugins/Table/insertTableFragment.ts","../src/plugins/Table/onKeyDownTable.ts","../src/constants/Schema.ts","../src/plugins/Tracking/utils.ts","../src/plugins/Tracking/createTrackingPlugin.ts","../src/plugins/Table/tableTracking.ts","../src/plugins/Table/createTablePlugin.ts","../src/plugins/Table/components/ToolbarButton.tsx","../src/plugins/Text/createTextPlugin.ts","../src/plugins/TrailingParagraph/index.ts","../src/plugins/Voids/createVoidsPlugin.ts","../src/plugins/index.ts","../src/helpers/sanitizeIncomingSlateDoc.ts","../src/prepareDocument.ts","../src/RichTextEditor.styles.ts","../src/Toolbar/components/EmbeddedEntityDropdownButton.tsx","../src/Toolbar/components/EmbedEntityWidget.tsx","../src/Toolbar/index.tsx","../src/Toolbar/components/StickyToolbarWrapper.tsx","../src/helpers/removeInternalMarks.ts","../src/useOnValueChanged.ts","../src/RichTextEditor.tsx","../src/dialogs/HypelinkDialog/HyperlinkDialog.jsx","../src/dialogs/openRichTextDialog.tsx","../src/dialogs/renderRichTextDialog.tsx"],"sourcesContent":["import * as p from '@udecode/plate-core';\nimport * as sr from 'slate-react';\n\nexport const useReadOnly = sr.useReadOnly;\nexport const usePlateEditorRef = p.usePlateEditorRef;\nexport const usePlateEditorState = p.usePlateEditorState;\n","import { createContext, useContext } from 'react';\n\nimport { FieldExtensionSDK } from '@contentful/app-sdk';\n\nimport { usePlateEditorRef, usePlateEditorState } from './internal/hooks';\nimport { Value, PlateEditor } from './internal/types';\n\nexport function getContentfulEditorId(sdk: FieldExtensionSDK) {\n const { entry, field } = sdk;\n const sys = entry.getSys();\n\n return `rich-text-editor-${sys.id}-${field.id}-${field.locale}`;\n}\n\nexport const editorContext = createContext('');\n\nexport const ContentfulEditorIdProvider = editorContext.Provider;\n\nexport function useContentfulEditorId(id?: string) {\n const contextId = useContext(editorContext);\n\n if (id) {\n return id;\n }\n\n if (!contextId) {\n throw new Error(\n 'could not find editor id. Please ensure the component is wrapped in <ContentfulEditorIdProvider> '\n );\n }\n\n return contextId;\n}\n\n// This hook re-renders when the value changes\n// Use case: Toolbar icons, for example\nexport function useContentfulEditor(id?: string) {\n const editorId = useContentfulEditorId(id);\n const editor = usePlateEditorState<Value, PlateEditor>(editorId);\n\n return editor;\n}\n\n// This doesn't re-render when the value changes\nexport function useContentfulEditorRef(id?: string) {\n const editorId = useContentfulEditorId(id);\n const editor = usePlateEditorRef<Value, PlateEditor>(editorId);\n\n return editor;\n}\n","import * as p from '@udecode/plate-core';\nimport { StoreApiGet } from '@udecode/zustood';\nimport * as s from 'slate';\n\nimport type { Value, PlateEditor, Location, PlatePlugin } from './types';\n\nexport type CreatePlateEditorOptions = Omit<\n p.CreatePlateEditorOptions<Value, PlateEditor>,\n 'plugins'\n> & {\n plugins?: PlatePlugin[];\n};\nexport const createPlateEditor = (options: CreatePlateEditorOptions = {}) => {\n return p.createPlateEditor<Value, PlateEditor>(\n options as p.CreatePlateEditorOptions<Value, PlateEditor>\n );\n};\n\nexport const withoutNormalizing = (editor: PlateEditor, fn: () => boolean | void) => {\n return p.withoutNormalizing(editor, fn);\n};\n\nexport const focusEditor = (editor: PlateEditor, target?: Location) => {\n p.focusEditor(editor, target);\n};\n\nexport const blurEditor = (editor: PlateEditor) => {\n p.blurEditor(editor);\n};\n\nexport const selectEditor = (editor: PlateEditor, opts: p.SelectEditorOptions) => {\n p.selectEditor(editor, opts);\n};\n\nexport const fromDOMPoint = (\n editor: PlateEditor,\n domPoint: [Node /* DOM Node*/, number],\n opts = { exactMatch: false, suppressThrow: false }\n): s.BasePoint | null | undefined => {\n return p.toSlatePoint(editor, domPoint, opts);\n};\n\nexport const mockPlugin = (plugin?: Partial<PlatePlugin> | undefined) => {\n return p.mockPlugin(\n // TODO check if there is a way around this ugly casting\n plugin as unknown as\n | Partial<p.PlatePlugin<p.AnyObject, p.Value, p.PlateEditor<p.Value>>>\n | undefined\n );\n};\n\nexport const getPlateSelectors = (\n id?: string | undefined\n): StoreApiGet<p.PlateStoreState<Value, PlateEditor>, {}> => {\n return p.getPlateSelectors(id);\n};\n","import {\n createSoftBreakPlugin as createDefaultSoftBreakPlugin,\n SoftBreakRule,\n} from '@udecode/plate-break';\n\nimport { PlatePlugin } from '../../internal/types';\n\nexport const createSoftBreakPlugin = (): PlatePlugin =>\n createDefaultSoftBreakPlugin({\n then: (editor) => {\n const rules: SoftBreakRule[] = editor.plugins.flatMap((p) => {\n return (p as PlatePlugin).softBreak || [];\n });\n\n return {\n options: { rules },\n };\n },\n });\n","import {\n createExitBreakPlugin as createDefaultExitBreakPlugin,\n ExitBreakRule,\n} from '@udecode/plate-break';\n\nimport { PlatePlugin } from '../../internal/types';\n\nexport const createExitBreakPlugin = (): PlatePlugin =>\n createDefaultExitBreakPlugin({\n options: {\n rules: [],\n },\n then: (editor) => {\n const rules: ExitBreakRule[] = editor.plugins.flatMap((p) => {\n return (p as PlatePlugin).exitBreak || [];\n });\n\n return {\n options: { rules },\n };\n },\n });\n","import { BLOCKS } from '@contentful/rich-text-types';\nimport {\n createResetNodePlugin as createDefaultResetNodePlugin,\n ResetNodePlugin,\n} from '@udecode/plate-reset-node';\n\nimport { PlatePlugin, Value, PlateEditor } from '../../internal/types';\n\nexport const createResetNodePlugin = (): PlatePlugin =>\n createDefaultResetNodePlugin<ResetNodePlugin<Value, PlateEditor>, Value, PlateEditor>({\n options: {\n rules: [],\n },\n then: (editor) => {\n const rules = editor.plugins.flatMap((p) => {\n return (p as PlatePlugin).resetNode || [];\n });\n\n // set defaultType to Paragraph if not set\n for (const rule of rules) {\n if (!rule.defaultType) {\n rule.defaultType = BLOCKS.PARAGRAPH;\n }\n }\n\n return {\n options: { rules },\n };\n },\n });\n","/**\n * Trim leading slash character if found. Bails otherwise.\n *\n * @example\n * trimLeadingSlash(\"/my query\") // --> \"my query\"\n */\nexport function trimLeadingSlash(text: string) {\n if (!text.startsWith('/')) {\n return text;\n }\n\n return text.slice(1);\n}\n","import * as React from 'react';\n\nimport { FieldExtensionSDK } from '@contentful/app-sdk';\nimport constate from 'constate';\n\ninterface SdkProviderProps {\n sdk: FieldExtensionSDK;\n}\n\nfunction useSdk({ sdk }: SdkProviderProps) {\n const sdkMemo = React.useMemo<FieldExtensionSDK>(() => sdk, []); // eslint-disable-line -- TODO: explain this disable\n\n return sdkMemo;\n}\n\nexport const [SdkProvider, useSdkContext] = constate(useSdk);\n","import * as React from 'react';\n\nimport isHotkey from 'is-hotkey';\n\nexport const useCommandList = (commandItems, container) => {\n const [selectedItem, setSelectedItem] = React.useState<string>(() => {\n // select the first item on initial render\n if (!commandItems.length) {\n return '';\n }\n if ('group' in commandItems[0]) {\n return commandItems[0].commands[0].id;\n }\n return commandItems[0].id;\n });\n const [isOpen, setIsOpen] = React.useState(commandItems.length > 0);\n\n React.useEffect(() => {\n if (!container.current) {\n return;\n }\n const buttons = Array.from(container.current.querySelectorAll('button')) as HTMLButtonElement[];\n const currBtn = buttons.find((btn) => btn.id === selectedItem);\n const currIndex = currBtn ? buttons.indexOf(currBtn) : 0;\n const shouldSelectFirstBtn = !currBtn && buttons.length;\n\n if (shouldSelectFirstBtn) {\n setSelectedItem(buttons[0].id);\n buttons[0].scrollIntoView({\n block: 'nearest',\n inline: 'start',\n });\n }\n\n function handleKeyDown(event: KeyboardEvent) {\n if (isHotkey('up', event)) {\n event.preventDefault();\n if (currIndex === 0) {\n return;\n }\n setSelectedItem(buttons[currIndex - 1].id);\n buttons[currIndex - 1].scrollIntoView({\n block: 'nearest',\n inline: 'start',\n });\n } else if (isHotkey('down', event)) {\n event.preventDefault();\n if (currIndex === buttons.length - 1) {\n return;\n }\n setSelectedItem(buttons[currIndex + 1].id);\n buttons[currIndex + 1].scrollIntoView({\n block: 'nearest',\n inline: 'start',\n });\n } else if (isHotkey('enter', event)) {\n event.preventDefault();\n if (currBtn) {\n setSelectedItem('');\n currBtn.click();\n }\n }\n //TODO: handle shift+enter, which must be detected using separate events\n }\n\n if (commandItems.length) {\n window.addEventListener('keydown', handleKeyDown);\n }\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [commandItems, container, selectedItem]);\n\n React.useEffect(() => {\n const handleMousedown = (event) => {\n if (container.current && !container.current.contains(event.target)) {\n setIsOpen(false);\n }\n };\n document.addEventListener('mousedown', handleMousedown);\n return () => {\n document.removeEventListener('mousedown', handleMousedown);\n };\n }, [container]);\n\n return {\n selectedItem,\n isOpen,\n };\n};\n","/**\n * Re-exporting Plate/Slate queries (aka selectors) to reduce\n * the blast radius of version upgrades\n */\nimport * as p from '@udecode/plate-core';\nimport * as s from 'slate';\n\nimport type {\n Value,\n PlateEditor,\n Location,\n Node,\n NodeEntry,\n BaseRange,\n Element,\n Text,\n Ancestor,\n BasePoint,\n Path,\n} from './types';\n\n/**\n * Get text content at location\n */\nexport const getText = (editor: PlateEditor, at?: Location) => {\n return p.getEditorString(editor, at);\n};\n\nexport const isText = (value: unknown): value is Text => {\n return p.isText(value);\n};\n\nexport const getEndPoint = (editor: PlateEditor, at: Location) => {\n return p.getEndPoint(editor, at);\n};\n\nexport const getStartPoint = (editor: PlateEditor, at: Location) => {\n return p.getStartPoint(editor, at);\n};\n\nexport const isNode = (value: unknown): value is Node => {\n return p.isNode(value);\n};\n\nexport const isSelectionAtBlockEnd = (\n editor: PlateEditor,\n options?: p.GetAboveNodeOptions<Value>\n) => {\n return p.isSelectionAtBlockEnd(editor, options);\n};\n\nexport const isSelectionAtBlockStart = (\n editor: PlateEditor,\n options?: p.GetAboveNodeOptions<Value>\n) => {\n return p.isSelectionAtBlockStart(editor, options);\n};\n\nexport const getBlockAbove = (editor: PlateEditor, options?: p.GetAboveNodeOptions<p.Value>) => {\n return p.getBlockAbove(editor, options);\n};\n\nexport const getNodeEntry = (editor: PlateEditor, at: Location, options?: s.EditorNodeOptions) => {\n return p.getNodeEntry(editor, at, options);\n};\n\nexport const getNodeEntries = (editor: PlateEditor, options?: p.GetNodeEntriesOptions) => {\n return p.getNodeEntries(editor, options);\n};\n\n// TODO: Ancestor may not be the correct type for root\nexport const getNodeChildren = (\n root: Ancestor,\n path: Path,\n options?: s.NodeChildrenOptions | undefined\n) => {\n return p.getNodeChildren(root, path, options);\n};\n\nexport const getParentNode = (\n editor: PlateEditor,\n at: Location,\n options?: s.EditorParentOptions\n) => {\n return p.getParentNode(editor, at, options) as NodeEntry | undefined;\n};\n\nexport const someNode = (editor: PlateEditor, options: p.FindNodeOptions) => {\n return p.someNode(editor, options);\n};\n\nexport const getChildren = (entry: NodeEntry) => {\n // Node.children crashes when given a text node\n if (s.Text.isText(entry[0])) {\n return [];\n }\n\n return p.getChildren(entry) as NodeEntry[];\n};\n\nexport const isFirstChild = (path: Path) => {\n return p.isFirstChild(path);\n};\n\nexport const getDescendantNodeByPath = (root: Node, path: s.Path): Node => {\n // @ts-expect-error\n return s.Node.get(root, path);\n};\n\nexport const getNodeDescendants = (\n root: PlateEditor | Node,\n options?: s.NodeDescendantsOptions\n) => {\n return p.getNodeDescendants(root, { ...options, pass: undefined });\n};\n\nexport const isRangeCollapsed = (range?: BaseRange) => {\n return p.isCollapsed(range);\n};\n\n// TODO: simplify\nexport const isRangeAcrossBlocks = (\n editor: p.TEditor<p.Value>,\n options?:\n | (Omit<p.GetAboveNodeOptions<p.Value>, 'at'> & { at?: s.BaseRange | null | undefined })\n | undefined\n) => {\n return p.isRangeAcrossBlocks(editor, options);\n};\n\nexport const isRangeExpanded = (range?: BaseRange) => {\n return p.isExpanded(range);\n};\n\nexport const getRange = (editor: PlateEditor, at: Location, to?: Location) => {\n return p.getRange(editor, at, to);\n};\n\nexport const getRangeEdges = (range: BaseRange) => {\n return s.Range.edges(range);\n};\n\nexport const getRangeStart = (range: BaseRange) => {\n return s.Range.start(range);\n};\n\nexport const getRangeEnd = (range: BaseRange) => {\n return s.Range.end(range);\n};\n\nexport const getAboveNode = (editor: PlateEditor, opts?: p.GetAboveNodeOptions<Value>) => {\n return p.getAboveNode(editor, opts) as NodeEntry | undefined;\n};\n\nexport const getNextNode = (editor: PlateEditor, opts?: p.GetNextNodeOptions<Value>) => {\n return p.getNextNode(editor, opts) as NodeEntry | undefined;\n};\n\nexport const getCommonNode = (\n root: PlateEditor | Node,\n path: s.Path,\n another: s.Path\n): NodeEntry => {\n return p.getCommonNode(root, path, another);\n};\n\nexport const getNodeTexts = (\n root: Node,\n opts?: {\n from?: s.Path;\n to?: s.Path;\n pass?: (ne: NodeEntry) => boolean;\n reverse?: boolean;\n }\n) => {\n return p.getNodeTexts(root, opts);\n};\n\nexport const findNode = (editor: PlateEditor, options?: p.FindNodeOptions<p.Value> | undefined) => {\n return p.findNode(editor, options);\n};\n\nexport const isMarkActive = (editor: PlateEditor, type: string) => {\n return p.isMarkActive(editor, type);\n};\n\nexport const getMarks = (editor: PlateEditor) => {\n return p.getMarks(editor);\n};\n\nexport const isEditor = (value: unknown): value is PlateEditor => {\n return p.isEditor(value);\n};\n\nexport const isEditorReadOnly = (editor: PlateEditor) => {\n return p.isEditorReadOnly(editor);\n};\n\nexport const isElement = (value: unknown): value is Element => {\n return p.isElement(value);\n};\n\nexport const isBlockNode = (editor: PlateEditor, value: unknown): value is Element => {\n return p.isBlock(editor, value);\n};\n\nexport const findNodePath = (editor: PlateEditor, node: Node) => {\n return p.findNodePath(editor, node);\n};\n\nexport const isAncestorPath = (path: s.Path, another: s.Path) => {\n return s.Path.isAncestor(path, another);\n};\n\nexport const isAncestorEmpty = (editor: PlateEditor, node: Ancestor) => {\n return p.isAncestorEmpty(editor, node);\n};\n\nexport const getParentPath = (path: s.Path) => {\n return s.Path.parent(path);\n};\n\nexport const getNextPath = (path: s.Path) => {\n return s.Path.next(path);\n};\n\nexport const getPreviousPath = (path: s.Path) => {\n return s.Path.previous(path);\n};\n\nexport const getLastChildPath = (nodeEntry: NodeEntry) => {\n return p.getLastChildPath(nodeEntry);\n};\n\nexport const getPathLevels = (path: s.Path, options?: s.PathLevelsOptions) => {\n return s.Path.levels(path, options);\n};\n\nexport const isCommonPath = (path: s.Path, anotherPath: s.Path) => {\n return s.Path.isCommon(path, anotherPath);\n};\n\nexport const isFirstChildPath = (path: s.Path) => {\n return p.isFirstChild(path);\n};\n\nexport const isLastChildPath = (entry: NodeEntry, childPath: s.Path) => {\n return p.isLastChild(entry, childPath);\n};\n\nexport const isChildPath = (path: s.Path, another: s.Path) => {\n return s.Path.isChild(path, another);\n};\n\nexport const matchNode = (node: Node, path: s.Path, fn: p.Predicate<PlateEditor | Node>) => {\n return p.match(node, path, fn);\n};\n\nexport const someHtmlElement = (\n rootNode: globalThis.Node,\n predicate: (node: HTMLElement) => boolean\n) => {\n return p.someHtmlElement(rootNode, predicate);\n};\n\nexport const getPointBefore = (\n editor: PlateEditor,\n at: Location,\n options?: s.EditorBeforeOptions\n) => {\n return p.getPointBefore(editor, at, options);\n};\n\nexport const getPointAfter = (\n editor: PlateEditor,\n at: Location,\n options?: s.EditorAfterOptions\n) => {\n return p.getPointAfter(editor, at, options);\n};\n\nexport const isEndPoint = (\n editor: PlateEditor,\n point: BasePoint | null | undefined,\n at: Location\n) => {\n return p.isEndPoint(editor, point, at);\n};\n\nexport const isInline = (editor: PlateEditor, value: unknown) => {\n return p.isInline(editor, value);\n};\n\nexport const queryNode = (entry?: NodeEntry, options?: p.QueryNodeOptions) => {\n return p.queryNode(entry, options);\n};\n\nexport const getPluginType = (editor: PlateEditor, key: string) => {\n return p.getPluginType(editor, key);\n};\n\nexport const createPathRef = (editor: PlateEditor, at: Path) => {\n return p.createPathRef(editor, at);\n};\n\nexport const match = (obj: Node, path: Path, predicate?: p.Predicate<Node> | undefined) => {\n return p.match(obj, path, predicate);\n};\n\nexport const getLastNodeByLevel = (editor: PlateEditor, level: number): NodeEntry | undefined => {\n return p.getLastNodeByLevel(editor, level);\n};\n","import * as p from '@udecode/plate-core';\nimport * as s from 'slate';\nimport { Except } from 'type-fest';\n\nimport {\n PlateEditor,\n Node,\n ToggleNodeTypeOptions,\n EditorNodesOptions,\n BaseRange,\n Value,\n SelectionMoveOptions,\n TextInsertTextOptions,\n Element,\n SelectionCollapseOptions,\n Path,\n Span,\n BasePoint,\n Location,\n} from './types';\n\n/**\n * Apply editor normalization rules\n */\nexport const normalize = (\n editor: PlateEditor,\n options: s.EditorNormalizeOptions = { force: true }\n) => {\n return p.normalizeEditor(editor, options);\n};\n\n/**\n * Set the selection to a location\n */\nexport const setSelection = (editor: PlateEditor, props: Partial<BaseRange>) => {\n return p.setSelection(editor, props);\n};\n\nexport const select = (editor: PlateEditor, location: Location) => {\n return p.select(editor, location);\n};\n\nexport const moveSelection = (editor: PlateEditor, options?: SelectionMoveOptions) => {\n return p.moveSelection(editor, options);\n};\n\nexport const moveChildren = (editor: PlateEditor, options: p.MoveChildrenOptions<Value>) => {\n return p.moveChildren(editor, options);\n};\n\nexport const collapseSelection = (editor: PlateEditor, options?: SelectionCollapseOptions) => {\n return p.collapseSelection(editor, options);\n};\n\nexport const setNodes = (\n editor: PlateEditor,\n attrs: Partial<Except<Node, 'children' | 'text'>>,\n opts?: p.SetNodesOptions<Value>\n) => {\n p.setNodes(editor, attrs, opts);\n};\n\nexport const unsetNodes = (\n editor: PlateEditor,\n props: string | number | (string | number)[],\n options?: p.UnsetNodesOptions<Value> | undefined\n) => {\n p.unsetNodes(editor, props, options);\n};\n\nexport const insertNodes = (\n editor: PlateEditor,\n nodes: Node | Node[],\n opts?: p.InsertNodesOptions\n) => {\n return p.insertNodes(editor, nodes, opts);\n};\n\nexport const splitNodes = (editor: PlateEditor, options?: p.SplitNodesOptions<Value>) => {\n return p.splitNodes(editor, options);\n};\n\nexport const liftNodes = (editor: PlateEditor, options?: p.LiftNodesOptions<Value> | undefined) => {\n return p.liftNodes(editor, options);\n};\n\nexport const unwrapNodes = (editor: PlateEditor, options?: p.UnwrapNodesOptions<Value>) => {\n return p.unwrapNodes(editor, options);\n};\n\nexport const wrapNodes = (\n editor: PlateEditor,\n element: Element,\n options?: p.WrapNodesOptions<Value>\n) => {\n return p.wrapNodes(editor, element, options);\n};\n\nexport const toggleNodeType = (\n editor: PlateEditor,\n options: ToggleNodeTypeOptions,\n editorOptions?: Omit<EditorNodesOptions, 'match'>\n) => {\n p.toggleNodeType(editor, options, editorOptions);\n};\n\nexport const removeMark = (editor: PlateEditor, type: string, at: BaseRange) => {\n p.removeMark(editor, { key: type, at });\n};\n\nexport const unhangRange = (\n editor: PlateEditor,\n range?: Path | BasePoint | BaseRange | Span | null | undefined,\n options?: p.UnhangRangeOptions | undefined\n) => {\n return p.unhangRange(editor, range, options);\n};\n\nexport const toggleMark = (\n editor: PlateEditor,\n options: p.ToggleMarkOptions<Value, keyof p.TText>\n) => {\n return p.toggleMark(editor, options);\n};\n\nexport const addMark = (editor: PlateEditor, type: string, value: unknown = true) => {\n p.addMark(editor, type, value);\n};\n\nexport const insertText = (editor: PlateEditor, text: string, options?: TextInsertTextOptions) => {\n return p.insertText(editor, text, options);\n};\n\nexport const deleteText = (editor: PlateEditor, opts?: Parameters<typeof p.deleteText>['1']) => {\n p.deleteText(editor, opts);\n};\n\nexport const removeNodes = (editor: PlateEditor, opts?: p.RemoveNodesOptions<Value>) => {\n p.removeNodes(editor, opts);\n};\n\nexport const moveNodes = (editor: PlateEditor, opts?: p.MoveNodesOptions<Value>) => {\n p.moveNodes(editor, opts);\n};\n\nexport const deleteFragment = (\n editor: PlateEditor,\n options?: s.EditorFragmentDeletionOptions | undefined\n) => {\n return p.deleteFragment(editor, options);\n};\n","export const IS_SAFARI =\n typeof navigator !== 'undefined' && /Version\\/[\\d.]+.*Safari/.test(navigator.userAgent);\n\nexport const IS_CHROME = /(?!Chrom.*OPR)Chrom(?:e|ium)\\/([0-9.]+)(:?\\s|$)/.test(\n navigator.userAgent\n);\n","import { Link } from '@contentful/field-editor-reference/dist/types';\nimport { BLOCKS, INLINES } from '@contentful/rich-text-types';\n\nimport { focusEditor } from '../internal/misc';\nimport {\n getText,\n getNodeEntries,\n getNodeEntry,\n getNodeDescendants,\n isText,\n isRangeCollapsed as isSelectionCollapsed,\n isEditor,\n isElement,\n getPathLevels,\n isCommonPath,\n} from '../internal/queries';\nimport {\n setNodes,\n select,\n insertNodes,\n toggleNodeType,\n moveSelection,\n unwrapNodes,\n insertText,\n wrapNodes,\n deleteText,\n collapseSelection,\n} from '../internal/transforms';\nimport { EditorNodesOptions, ToggleNodeTypeOptions, Node, Path } from '../internal/types';\nimport { Element, PlateEditor } from '../internal/types';\nimport { IS_SAFARI } from './environment';\n\nexport const LINK_TYPES: INLINES[] = [\n INLINES.HYPERLINK,\n INLINES.ENTRY_HYPERLINK,\n INLINES.ASSET_HYPERLINK,\n];\n\nconst LIST_TYPES: BLOCKS[] = [BLOCKS.OL_LIST, BLOCKS.UL_LIST];\n\nexport function isBlockSelected(editor: PlateEditor, type: string): boolean {\n const [match] = Array.from(\n getNodeEntries(editor, {\n match: (node) => isElement(node) && node.type === type,\n })\n );\n return !!match;\n}\n\nexport function isRootLevel(path: Path): boolean {\n return path.length === 1;\n}\n\ntype NodeEntry = [Element, Path];\ntype NodeType = BLOCKS | INLINES;\nexport function getNodeEntryFromSelection(\n editor: PlateEditor,\n nodeTypeOrTypes: NodeType | NodeType[],\n path?: Path\n): NodeEntry | [] {\n path = path ?? editor.selection?.focus.path;\n if (!path) return [];\n const nodeTypes = Array.isArray(nodeTypeOrTypes) ? nodeTypeOrTypes : [nodeTypeOrTypes];\n for (let i = 0; i < path.length; i++) {\n const nodeEntry = getNodeEntry(editor, path.slice(0, i + 1)) as NodeEntry;\n if (nodeTypes.includes(nodeEntry[0].type as NodeType)) return nodeEntry;\n }\n return [];\n}\n\nexport function isNodeTypeSelected(\n editor: PlateEditor | null,\n nodeType: BLOCKS | INLINES\n): boolean {\n if (!editor) return false;\n const [node] = getNodeEntryFromSelection(editor, nodeType);\n return !!node;\n}\n\nexport function moveToTheNextLine(editor: PlateEditor) {\n moveSelection(editor, { distance: 1, unit: 'line' });\n}\n\nexport function moveToTheNextChar(editor: PlateEditor) {\n moveSelection(editor, { distance: 1, unit: 'offset' });\n}\n\nexport function insertEmptyParagraph(editor: PlateEditor, options?) {\n const emptyParagraph: Element = {\n type: BLOCKS.PARAGRAPH,\n children: [{ text: '' }],\n data: {},\n isVoid: false,\n };\n insertNodes(editor, emptyParagraph, options);\n}\n\nexport function getElementFromCurrentSelection(editor: PlateEditor) {\n if (!editor.selection) return [];\n\n return Array.from(\n getNodeEntries(editor, {\n /**\n * editor.select is a Range, which includes anchor and focus, the beginning and the end of a selection\n * when using only editor.selection.focus, we might get only the end of the selection, or where the text cursor is\n * and in some cases getting the next element instead of the one we want\n **/\n at: editor.selection,\n match: (node) => isElement(node),\n })\n ).flat();\n}\n\nexport function isList(editor?: PlateEditor) {\n if (!editor) {\n return false;\n }\n\n const element = getElementFromCurrentSelection(editor);\n\n return element.some(\n (element) => isElement(element) && LIST_TYPES.includes(element.type as BLOCKS)\n );\n}\n\nexport function getTableSize(table: Element): Record<'numRows' | 'numColumns', number> | null {\n const numRows = table.children.length;\n if (!numRows) return null;\n const [firstRow] = table.children;\n const numColumns = (firstRow as Element).children?.length;\n return { numRows, numColumns };\n}\n\ninterface InsertLinkOptions {\n text: string;\n type: INLINES.HYPERLINK | INLINES.ENTRY_HYPERLINK | INLINES.ASSET_HYPERLINK;\n url?: string;\n target?: Link;\n path?: Path;\n}\n\n// TODO: move to hyperlink plugin\nexport function insertLink(editor, options: InsertLinkOptions) {\n if (editor.selection) {\n wrapLink(editor, options);\n }\n}\n\n// TODO: move to hyperlink plugin\nexport function isLinkActive(editor?: PlateEditor | null) {\n if (!editor) {\n return false;\n }\n\n const [link] = Array.from(\n getNodeEntries(editor, {\n match: (node) =>\n !isEditor(node) && isElement(node) && LINK_TYPES.includes(node.type as INLINES),\n })\n );\n return !!link;\n}\n\n// TODO: move to hyperlink plugin\nexport function unwrapLink(editor) {\n unwrapNodes(editor, {\n match: (node) =>\n !isEditor(node) && isElement(node) && LINK_TYPES.includes(node.type as INLINES),\n });\n}\n\n// TODO: move to hyperlink plugin\nexport function wrapLink(editor, { text, url, target, type, path }: InsertLinkOptions) {\n if (isLinkActive(editor) && !path) {\n unwrapLink(editor);\n }\n\n const { selection } = editor;\n const isCollapsed = selection && isSelectionCollapsed(selection);\n const link = {\n type,\n data: {},\n children: isCollapsed ? [{ text }] : [],\n };\n\n if (url) {\n link.data = { uri: url };\n }\n\n if (target) {\n link.data = { target };\n }\n\n // TODO: always set the selection to the end of the inserted link\n if (path) {\n setNodes(editor, link, { at: path });\n insertText(editor, text, { at: path });\n select(editor, path);\n } else if (isCollapsed) {\n insertNodes(editor, link);\n } else {\n wrapNodes(editor, link, { split: true });\n deleteText(editor);\n insertText(editor, text);\n collapseSelection(editor, { edge: 'end' });\n }\n}\n\nexport function getAncestorPathFromSelection(editor: PlateEditor) {\n if (!editor.selection) return undefined;\n\n return getPathLevels(editor.selection.focus.path).find((level) => level.length === 1);\n}\n\nexport const isAtEndOfTextSelection = (editor: PlateEditor) =>\n editor.selection?.focus.offset === getText(editor, editor.selection?.focus.path).length;\n\n/**\n * This traversal strategy is unfortunately necessary because Slate doesn't\n * expose something like Node.next(editor).\n */\nexport function getNextNode(editor: PlateEditor): Element | null {\n if (!editor.selection) {\n return null;\n }\n const descendants = getNodeDescendants(editor, { from: editor.selection.focus.path });\n // eslint-disable-next-line no-constant-condition -- TODO: explain this disable\n while (true) {\n const { done, value } = descendants.next();\n if (done) {\n return null;\n }\n const [node, path] = value as NodeEntry;\n if (isCommonPath(path, editor.selection.focus.path)) {\n continue;\n }\n return node as Element;\n }\n}\n\nexport const INLINE_TYPES = Object.values(INLINES) as string[];\n\nexport const isInlineOrText = (node: Node) => {\n // either text or inline elements\n return isText(node) || (isElement(node) && INLINE_TYPES.includes(node.type));\n};\n\nexport const focus = (editor: PlateEditor) => {\n const x = window.scrollX;\n const y = window.scrollY;\n\n focusEditor(editor);\n\n // Safari has issues with `editor.focus({ preventScroll: true })`, it ignores the option `preventScroll`\n if (IS_SAFARI) {\n setTimeout(function () {\n window.scrollTo(x, y); // restore position\n }, 0);\n }\n};\n\nexport function toggleElement(\n editor: PlateEditor,\n options: ToggleNodeTypeOptions,\n editorOptions?: EditorNodesOptions\n) {\n toggleNodeType(editor, options, editorOptions);\n\n // We must reset `data` from one element to another\n setNodes(editor, { data: {} });\n}\n","/* eslint-disable you-dont-need-lodash-underscore/find */\nimport { FieldExtensionSDK } from '@contentful/app-sdk';\nimport { BLOCKS, INLINES, TOP_LEVEL_BLOCKS } from '@contentful/rich-text-types';\nimport find from 'lodash/find';\nimport flow from 'lodash/flow';\nimport get from 'lodash/get';\n\n// TODO: Move these into separate package (maybe rich-text-types) and share with FE.\nexport const VALIDATIONS = {\n ENABLED_MARKS: 'enabledMarks',\n ENABLED_NODE_TYPES: 'enabledNodeTypes',\n};\nexport const DEFAULT_ENABLED_NODE_TYPES = [BLOCKS.DOCUMENT, BLOCKS.PARAGRAPH, 'text'];\n\nexport const VALIDATABLE_NODE_TYPES = ([] as Array<BLOCKS | INLINES>)\n .concat(TOP_LEVEL_BLOCKS)\n .filter((type) => type !== BLOCKS.PARAGRAPH)\n .concat(Object.values(INLINES));\n\n// TODO: Memoize\nconst getRichTextValidation = (field, validationType) =>\n flow(\n (v) => find(v, validationType),\n (v) => get(v, validationType)\n )(field.validations);\n\nconst isFormattingOptionEnabled = (field, validationType, nodeTypeOrMark) => {\n const enabledFormattings = getRichTextValidation(field, validationType);\n\n // TODO: In the future, validations will always be opt-in. In that case\n // we don't need this step.\n if (enabledFormattings === undefined) {\n return true;\n }\n\n return DEFAULT_ENABLED_NODE_TYPES.concat(enabledFormattings).includes(nodeTypeOrMark);\n};\n\nexport const isNodeTypeEnabled = (field: FieldExtensionSDK['field'], nodeType): boolean =>\n isFormattingOptionEnabled(field, VALIDATIONS.ENABLED_NODE_TYPES, nodeType);\n\nexport const isMarkEnabled = (field: FieldExtensionSDK['field'], mark) =>\n isFormattingOptionEnabled(field, VALIDATIONS.ENABLED_MARKS, mark);\n","export const COMMAND_PROMPT = 'command-prompt';\n","import { INLINES } from '@contentful/rich-text-types';\n\nexport function createInlineEntryNode(id: string) {\n return {\n type: INLINES.EMBEDDED_ENTRY,\n children: [{ text: '' }],\n data: {\n target: {\n sys: {\n id,\n type: 'Link',\n linkType: 'Entry',\n },\n },\n },\n };\n}\n","import { FieldExtensionSDK } from '@contentful/app-sdk';\nimport { entityHelpers } from '@contentful/field-editor-shared';\n\nexport async function fetchAssets(sdk: FieldExtensionSDK, query: string) {\n const assets = await sdk.space.getAssets({ query });\n\n return assets.items.map((asset) => {\n const displayTitle = entityHelpers.getAssetTitle({\n asset,\n localeCode: sdk.field.locale,\n defaultLocaleCode: sdk.locales.default,\n defaultTitle: 'Untitled',\n });\n\n return {\n contentTypeName: 'Asset',\n displayTitle,\n id: asset.sys.id,\n entity: asset,\n thumbnail:\n asset.fields.file &&\n asset.fields.file[sdk.field.locale] &&\n `${asset.fields.file[sdk.field.locale].url}?h=30`,\n };\n });\n}\n","import { FieldExtensionSDK } from '@contentful/app-sdk';\nimport { entityHelpers } from '@contentful/field-editor-shared';\nimport { ContentTypeProps } from 'contentful-management/types';\n\nexport async function fetchEntries(\n sdk: FieldExtensionSDK,\n contentType: ContentTypeProps,\n query: string\n) {\n const entries = await sdk.space.getEntries({\n content_type: contentType.sys.id,\n query,\n });\n\n return entries.items.map((entry) => {\n const description = entityHelpers.getEntityDescription({\n contentType,\n // @ts-expect-error inconsistent in typing between app-sdk & field-editors-shared\n entity: entry,\n localeCode: sdk.field.locale,\n defaultLocaleCode: sdk.locales.default,\n });\n\n const displayTitle = entityHelpers.getEntryTitle({\n // @ts-expect-error inconsistent in typing between app-sdk & field-editors-shared\n entry,\n contentType,\n localeCode: sdk.field.locale,\n defaultLocaleCode: sdk.locales.default,\n defaultTitle: 'Untitled',\n });\n\n return {\n contentTypeName: contentType.name,\n displayTitle: displayTitle,\n id: entry.sys.contentType.sys.id,\n description,\n entry,\n };\n });\n}\n","import { focus } from '../../../helpers/editor';\nimport { getText } from '../../../internal/queries';\nimport { setNodes, insertNodes } from '../../../internal/transforms';\n\nconst createNode = (nodeType, entity) => ({\n type: nodeType,\n data: {\n target: {\n sys: {\n id: entity.sys.id,\n type: 'Link',\n linkType: entity.sys.type,\n },\n },\n },\n children: [{ text: '' }],\n isVoid: true,\n});\n\nexport function insertBlock(editor, nodeType, entity) {\n if (!editor?.selection) return;\n\n const linkedEntityBlock = createNode(nodeType, entity);\n\n const hasText = editor.selection && !!getText(editor, editor.selection.focus.path);\n\n if (hasText) {\n insertNodes(editor, linkedEntityBlock);\n } else {\n setNodes(editor, linkedEntityBlock);\n }\n\n focus(editor);\n}\n","import { useState } from 'react';\n\nimport { FieldExtensionSDK } from '@contentful/app-sdk';\nimport { BLOCKS, INLINES } from '@contentful/rich-text-types';\n\nimport { isNodeTypeSelected } from '../../helpers/editor';\nimport { isNodeTypeEnabled } from '../../helpers/validations';\nimport { getRange, getAboveNode } from '../../internal/queries';\nimport { select, insertNodes, deleteText, removeMark } from '../../internal/transforms';\nimport { PlateEditor } from '../../internal/types';\nimport { COMMAND_PROMPT } from './constants';\nimport { createInlineEntryNode } from './utils/createInlineEntryNode';\nimport { fetchAssets } from './utils/fetchAssets';\nimport { fetchEntries } from './utils/fetchEntries';\nimport { insertBlock } from './utils/insertBlock';\n\nexport interface Command {\n id: string;\n thumbnail?: string;\n label: string;\n callback?: () => void;\n}\n\nexport interface CommandGroup {\n group: string;\n commands: Command[];\n}\n\nexport type CommandList = (Command | CommandGroup)[];\n\nconst removeCommand = (editor: PlateEditor) => {\n const [, path] = getAboveNode(editor)!;\n const range = getRange(editor, path);\n\n select(editor, range.focus.path);\n\n removeMark(editor, COMMAND_PROMPT, range);\n deleteText(editor);\n};\n\nconst removeQuery = (editor: PlateEditor) => {\n const [, path] = getAboveNode(editor)!;\n const range = getRange(editor, path);\n\n if (range.focus.offset - range.anchor.offset > 1) {\n deleteText(editor, { at: range.focus, distance: range.focus.offset - 1, reverse: true });\n }\n};\n\nexport function isCommandPromptPluginEnabled(sdk: FieldExtensionSDK) {\n const inlineAllowed = isNodeTypeEnabled(sdk.field, INLINES.EMBEDDED_ENTRY);\n const entriesAllowed = isNodeTypeEnabled(sdk.field, BLOCKS.EMBEDDED_ENTRY);\n const assetsAllowed = isNodeTypeEnabled(sdk.field, BLOCKS.EMBEDDED_ASSET);\n\n return {\n inlineAllowed,\n entriesAllowed,\n assetsAllowed,\n };\n}\n\nfunction getCommandPermissions(sdk: FieldExtensionSDK, editor: PlateEditor) {\n const canInsertBlocks = !isNodeTypeSelected(editor, BLOCKS.TABLE);\n const { inlineAllowed, entriesAllowed, assetsAllowed } = isCommandPromptPluginEnabled(sdk);\n\n return {\n inlineAllowed,\n entriesAllowed: entriesAllowed && canInsertBlocks,\n assetsAllowed: assetsAllowed && canInsertBlocks,\n };\n}\n\nexport const useCommands = (sdk: FieldExtensionSDK, query: string, editor: PlateEditor) => {\n const contentTypes = sdk.space.getCachedContentTypes();\n const { inlineAllowed, entriesAllowed, assetsAllowed } = getCommandPermissions(sdk, editor);\n\n const [commands, setCommands] = useState((): CommandList => {\n const getEmbedEntry = (contentType) => {\n return {\n id: contentType.sys.id,\n label: `Embed ${contentType.name}`,\n callback: () => {\n fetchEntries(sdk, contentType, query).then((entries) => {\n removeQuery(editor);\n if (!entries.length) {\n setCommands([\n {\n id: 'no-results',\n label: 'No results',\n },\n ]);\n } else {\n setCommands(\n entries.map((entry) => {\n return {\n id: `${entry.id}-${entry.displayTitle.replace(/\\W+/g, '-').toLowerCase()}`,\n label: entry.displayTitle,\n callback: () => {\n removeCommand(editor);\n if (editor.selection) {\n const selection = editor.selection;\n editor.insertSoftBreak();\n insertBlock(editor, BLOCKS.EMBEDDED_ENTRY, entry.entry);\n select(editor, selection);\n editor.tracking.onCommandPaletteAction('insert', {\n nodeType: BLOCKS.EMBEDDED_ENTRY,\n });\n }\n },\n };\n })\n );\n }\n });\n },\n };\n };\n\n const getEmbedInline = (contentType) => {\n return {\n id: `${contentType.sys.id}-inline`,\n label: `Embed ${contentType.name} - Inline`,\n callback: () => {\n fetchEntries(sdk, contentType, query).then((entries) => {\n removeQuery(editor);\n if (!entries.length) {\n setCommands([\n {\n id: 'no-results',\n label: 'No results',\n },\n ]);\n } else {\n setCommands(\n entries.map((entry) => {\n return {\n id: `${entry.id}-${entry.displayTitle.replace(/\\W+/g, '-').toLowerCase()}`,\n label: entry.displayTitle,\n callback: () => {\n const inlineNode = createInlineEntryNode(entry.id);\n removeCommand(editor);\n insertNodes(editor, inlineNode);\n editor.insertText('');\n editor.tracking.onCommandPaletteAction('insert', {\n nodeType: INLINES.EMBEDDED_ENTRY,\n });\n },\n };\n })\n );\n }\n });\n },\n };\n };\n const contentTypeCommands =\n entriesAllowed || inlineAllowed\n ? contentTypes.map((contentType) => {\n return {\n group: contentType.name,\n commands:\n entriesAllowed && inlineAllowed\n ? [getEmbedEntry(contentType), getEmbedInline(contentType)]\n : entriesAllowed\n ? [getEmbedEntry(contentType)]\n : [getEmbedInline(contentType)],\n };\n })\n : [];\n if (assetsAllowed) {\n const assetCommand = {\n group: 'Assets',\n commands: [\n {\n id: 'embed-asset',\n label: 'Embed Asset',\n callback: () => {\n fetchAssets(sdk, query).then((assets) => {\n removeQuery(editor);\n if (!assets.length) {\n setCommands([\n {\n id: 'no-results',\n label: 'No results',\n },\n ]);\n } else {\n setCommands(\n assets.map((asset) => {\n return {\n id: `${asset.id}-${asset.displayTitle.replace(/\\W+/g, '-').toLowerCase()}`,\n label: asset.displayTitle,\n thumbnail: asset.thumbnail,\n callback: () => {\n removeCommand(editor);\n if (editor.selection) {\n const selection = editor.selection;\n editor.insertSoftBreak();\n insertBlock(editor, BLOCKS.EMBEDDED_ASSET, asset.entity);\n select(editor, selection);\n editor.tracking.onCommandPaletteAction('insert', {\n nodeType: BLOCKS.EMBEDDED_ASSET,\n });\n }\n },\n };\n })\n );\n }\n });\n },\n },\n ],\n };\n return [...contentTypeCommands, assetCommand];\n }\n return contentTypeCommands;\n });\n\n /* filter both commands and groups of commands with the user typed query */\n return query\n ? commands.reduce((list, nextItem) => {\n if ('group' in nextItem) {\n const subcommands = nextItem.commands.filter((command) => {\n return command.label.toLowerCase().includes(query.toLowerCase());\n });\n if (subcommands.length > 0) {\n list.push(nextItem);\n }\n } else {\n if (nextItem.label.toLowerCase().includes(query.toLowerCase())) {\n list.push(nextItem);\n }\n }\n return list;\n }, [] as CommandList)\n : commands;\n};\n","import tokens from '@contentful/f36-tokens';\nimport { css } from 'emotion';\n\nconst styles = {\n container: css({\n position: 'absolute',\n zIndex: tokens.zIndexNotification,\n fontWeight: tokens.fontWeightNormal,\n fontStyle: 'normal',\n fontFamily: tokens.fontStackPrimary,\n 'ul, ol, dl': {\n listStyle: 'none',\n marginLeft: 0,\n },\n }),\n menuPoper: css({\n zIndex: tokens.zIndexModal,\n }),\n menuContent: css({\n width: '400px',\n maxHeight: '300px',\n }),\n menuList: css({\n overflow: 'auto',\n maxHeight: '200px',\n }),\n menuItem: css({\n display: 'block',\n width: '100%',\n background: 'none',\n border: 0,\n margin: 0,\n outline: 'none',\n fontSize: tokens.fontSizeM,\n lineHeight: tokens.lineHeightM,\n fontWeight: tokens.fontWeightNormal,\n position: 'relative',\n textAlign: 'left',\n padding: `${tokens.spacingXs} ${tokens.spacingM}`,\n wordBreak: 'break-word',\n whiteSpace: 'break-spaces',\n cursor: 'pointer',\n hyphens: 'auto',\n minWidth: '150px',\n textDecoration: 'none',\n color: tokens.gray800,\n '&:hover': {\n backgroundColor: tokens.gray100,\n },\n '&:disabled': {\n opacity: 0.5,\n cursor: 'auto',\n },\n }),\n menuItemSelected: css({\n boxShadow: `inset ${tokens.glowPrimary}`,\n borderRadius: tokens.borderRadiusMedium,\n }),\n menuDivider: css({\n border: 'none',\n width: '100%',\n height: '1px',\n background: tokens.gray300,\n margin: `${tokens.spacingXs} 0`,\n }),\n menuHeader: css({\n zIndex: tokens.zIndexDefault,\n top: 0,\n backgroundColor: tokens.gray100,\n padding: tokens.spacingM,\n }),\n menuFooter: css({\n position: 'sticky',\n bottom: 0,\n backgroundColor: tokens.gray100,\n padding: tokens.spacingM,\n }),\n footerList: css({\n listStyle: 'none',\n color: tokens.gray600,\n fontSize: tokens.fontSizeM,\n }),\n thumbnail: css({\n width: '30px',\n height: '30px',\n objectFit: 'cover',\n }),\n};\n\nexport default styles;\n","import * as React from 'react';\nimport { usePopper } from 'react-popper';\n\nimport { Popover, Stack, SectionHeading, ScreenReaderOnly, Flex } from '@contentful/f36-components';\nimport { Portal } from '@contentful/f36-utils';\nimport { cx } from 'emotion';\n\nimport { PlateEditor } from '../../../internal/types';\nimport { useSdkContext } from '../../../SdkProvider';\nimport { useCommandList } from '../hooks/useCommandList';\nimport { CommandList as CommandItems, Command, useCommands, CommandGroup } from '../useCommands';\nimport styles from './CommandList.styles';\n\nexport interface CommandListProps {\n query: string;\n editor: PlateEditor;\n textContainer?: HTMLSpanElement;\n}\n\nconst Group = ({\n commandGroup,\n selectedItem,\n}: {\n commandGroup: CommandGroup;\n selectedItem: string;\n}) => (\n <section key={commandGroup.group}>\n <SectionHeading\n as=\"h3\"\n marginBottom=\"spacingS\"\n marginTop=\"spacingS\"\n marginLeft=\"spacingM\"\n marginRight=\"spacingM\"\n >\n {commandGroup.group}\n </SectionHeading>\n {commandGroup.commands.map((command: Command) => (\n <button\n key={command.id}\n id={command.id}\n className={cx(styles.menuItem, {\n [styles.menuItemSelected]: command.id === selectedItem,\n })}\n onClick={command.callback}\n >\n {command.label}\n </button>\n ))}\n <hr className={styles.menuDivider} aria-orientation=\"horizontal\" />\n </section>\n);\n\nconst Asset = ({ command, selectedItem }: { command: Command; selectedItem: string }) => (\n <button\n key={command.id}\n id={command.id}\n className={cx(styles.menuItem, {\n [styles.menuItemSelected]: command.id === selectedItem,\n })}\n onClick={command.callback}\n >\n <Flex alignItems=\"center\" gap=\"spacingS\">\n {command.thumbnail && (\n <img width=\"30\" height=\"30\" src={command.thumbnail} alt=\"\" className={styles.thumbnail} />\n )}\n <span>{command.label}</span>\n </Flex>\n </button>\n);\n\nconst Item = ({ command }: { command: Command }) => (\n <button key={command.id} id={command.id} className={styles.menuItem}>\n {command.label}\n </button>\n);\n\nconst CommandListItems = ({\n commandItems,\n selectedItem,\n}: {\n commandItems: CommandItems;\n selectedItem: string;\n}) => {\n return (\n <>\n {commandItems.map((command) => {\n return 'group' in command ? (\n <Group commandGroup={command} selectedItem={selectedItem} />\n ) : command.callback ? (\n <Asset command={command} selectedItem={selectedItem} />\n ) : (\n <Item command={command} />\n );\n })}\n </>\n );\n};\n\nexport const CommandList = ({ query, editor, textContainer }: CommandListProps) => {\n const sdk = useSdkContext();\n const popoverContainer = React.useRef<HTMLDivElement>(null);\n const popper = usePopper(textContainer, popoverContainer?.current, {\n placement: 'bottom-start',\n });\n const commandItems = useCommands(sdk, query, editor);\n const { selectedItem, isOpen } = useCommandList(commandItems, popoverContainer);\n\n if (!commandItems.length) {\n return null;\n }\n\n return (\n <div className={styles.container} tabIndex={-1} contentEditable={false}>\n {/*\n We have to make it visually appear as if the buttons have focus, because we can not set both the\n focus on the textarea and the focus on the button. In HTML you can only set focus on one element at a time.\n So we have to manually tell the screenreader which item has received focus. The actual code of the\n popover we will hide from the screenreader, since it is not accessibly relevant and to avoid reading\n out everything twice.\n We use role alert here because we want to make the screenreader immediately announce the selected\n button, and also when the \"fake focus\" changes.\n */}\n <div role=\"alert\">\n <ScreenReaderOnly>\n {/* TODO - show the label here and not the id */}\n Richtext commands. Currently focused item: {selectedItem}. Press <kbd>enter</kbd> to\n select, <kbd>arrows</kbd> to navigate, <kbd>escape</kbd> to close.\n </ScreenReaderOnly>\n </div>\n <Portal>\n <div\n aria-hidden={true}\n ref={popoverContainer}\n className={styles.menuPoper}\n style={popper.styles.popper}\n {...popper.attributes.popper}\n >\n <Popover\n isOpen={isOpen}\n usePortal={false}\n /* eslint-disable-next-line jsx-a11y/no-autofocus -- we want to keep focus on text input*/\n autoFocus={false}\n >\n {/* we need an empty trigger here for the positioning of the menu list */}\n <Popover.Trigger>\n <span />\n </Popover.Trigger>\n <Popover.Content className={styles.menuContent} testId=\"rich-text-commands\">\n <header className={styles.menuHeader}>\n <SectionHeading marginBottom=\"none\">Richtext commands</SectionHeading>\n </header>\n <div className={styles.menuList} data-test-id=\"rich-text-commands-list\">\n <CommandListItems commandItems={commandItems} selectedItem={selectedItem} />\n </div>\n <footer className={styles.menuFooter}>\n <Stack\n as=\"ul\"\n margin=\"none\"\n padding=\"none\"\n spacing=\"spacingS\"\n className={styles.footerList}\n >\n <li>\n <kbd>↑</kbd>\n <kbd>↓</kbd> to navigate\n </li>\n <li>\n <kbd>↵</kbd> to confirm\n </li>\n <li>\n <kbd>esc</kbd> to close\n </li>\n </Stack>\n </footer>\n </Popover.Content>\n </Popover>\n </div>\n </Portal>\n </div>\n );\n};\n","import * as React from 'react';\n\nimport { PlateEditor, RenderLeafProps } from '../../../internal/types';\nimport { trimLeadingSlash } from '../utils/trimLeadingSlash';\nimport { CommandList } from './CommandList';\n\nexport const CommandPrompt = (props: RenderLeafProps & { editor: PlateEditor }) => {\n const query = React.useMemo(() => trimLeadingSlash(props.text.text), [props.text.text]);\n const editor = props.editor;\n const [textElement, setTextElement] = React.useState<HTMLSpanElement>();\n\n return (\n <span\n ref={(e) => {\n setTextElement(e as HTMLSpanElement);\n }}\n {...props.attributes}\n >\n {props.children}\n <CommandList query={query} editor={editor} textContainer={textElement} />\n </span>\n );\n};\n","import isHotkey from 'is-hotkey';\n\nimport { getRange, getAboveNode, isMarkActive, addMark, removeMark } from '../../internal';\nimport { focusEditor } from '../../internal/misc';\nimport { KeyboardHandler, NodeEntry } from '../../internal/types';\nimport { COMMAND_PROMPT } from './constants';\n\nexport const createOnKeyDown = (): KeyboardHandler => {\n return (editor) => {\n return (event) => {\n // Support for different keyboard layouts:\n // `isHotKey` uses by default `event.which`, which will never generates a match for all layouts (QWERTY: `/`, QWERTZ: `shift+7`)\n // with `byKey: true` `isHotKey` uses `event.key` which will return the interpreted key '/'\n // It would still fail without the the optional `shift?` param, as it first checks the modKeys (`shiftKey` would be true on QWERTZ)\n if (isHotkey('shift?+/', { byKey: true }, event)) {\n addMark(editor, COMMAND_PROMPT);\n editor.tracking.onCommandPaletteAction('openRichTextCommandPalette');\n }\n\n const isActive = isMarkActive(editor, COMMAND_PROMPT);\n\n if (!isActive) {\n return;\n }\n\n if (isHotkey('enter', event)) {\n return event.preventDefault();\n }\n\n const [, path] = getAboveNode(editor) as NodeEntry;\n const range = getRange(editor, path);\n\n if (isHotkey('backspace', event)) {\n // if it is the last character in the command string\n if (range.focus.offset - range.anchor.offset === 1) {\n removeMark(editor, COMMAND_PROMPT, range);\n }\n }\n\n if (isHotkey('escape', event)) {\n event.stopPropagation();\n removeMark(editor, COMMAND_PROMPT, range);\n editor.tracking.onCommandPaletteAction('cancelRichTextCommandPalette');\n focusEditor(editor);\n }\n };\n };\n};\n","import { PlatePlugin } from '../../internal/types';\nimport { CommandPrompt } from './components/CommandPrompt';\nimport { COMMAND_PROMPT } from './constants';\nimport { createOnKeyDown } from './onKeyDown';\n\n/**\n * A command palette plugin (aka slash commands)\n *\n * How does it work?\n * * When the user presses the slash key, the editor will show a command palette\n * * When the user presses a key, the command palette will show the command suggestions\n * * When the user presses enter, the command palette will execute the command\n * * When the user presses escape, the command palette will hide\n * * When the user presses a letter, number, or space, the command palette will show the command suggestions\n * * When the user presses backspace, the command palette will remove the last character from the command string\n */\nexport const createCommandPalettePlugin = (): PlatePlugin => {\n return {\n key: COMMAND_PROMPT,\n type: COMMAND_PROMPT,\n isLeaf: true,\n component: CommandPrompt,\n handlers: {\n onKeyDown: createOnKeyDown(),\n },\n };\n};\n","import { BLOCKS, INLINES } from '@contentful/rich-text-types';\n\nimport { getNodeEntries } from '../../internal/queries';\nimport { PlatePlugin } from '../../internal/types';\n\nexport function createDragAndDropPlugin(): PlatePlugin {\n const DRAGGABLE_TYPES: string[] = [\n BLOCKS.EMBEDDED_ENTRY,\n BLOCKS.EMBEDDED_ASSET,\n BLOCKS.HR,\n INLINES.EMBEDDED_ENTRY,\n ];\n\n /**\n * HTML node names where dropping should be allowed\n * Usually for elements where `Transforms.removeNodes` is needed\n * TODO: looking up for html nodes is not the best solution and it won't scale but it works fine for our current cases/elements\n */\n const ON_DROP_ALLOWED_TYPES = {\n TABLE: [INLINES.EMBEDDED_ENTRY],\n };\n\n return {\n key: 'DragAndDropPlugin',\n handlers: {\n // If true, the next handlers will be skipped.\n onDrop: (editor) => (event) => {\n const [draggingBlock] = Array.from(\n getNodeEntries(editor, {\n match: (node) => DRAGGABLE_TYPES.includes(node.type as string),\n })\n );\n if (!draggingBlock) return false;\n\n const [draggingNode] = draggingBlock;\n\n if (!event.nativeEvent.target) return false;\n\n // TODO: looking up for html nodes is not the best solution and it won't scale, we need to find a way to know the dropping target slate element\n const dropDisallowed = getParents(event.nativeEvent.target as Node).some((node) => {\n return ON_DROP_ALLOWED_TYPES[node.nodeName]\n ? !ON_DROP_ALLOWED_TYPES[node.nodeName]?.includes(draggingNode.type)\n : false;\n });\n\n if (!dropDisallowed) {\n // Move the drop event to a new undo batch mitigating the bug where undo not only moves it back,\n // but also undoes a previous action: https://github.com/ianstormtaylor/slate/issues/4694\n editor.history.undos.push([]);\n }\n\n return dropDisallowed;\n },\n },\n };\n}\n\nfunction getParents(el: Node): Node[] {\n const parents: Node[] = [];\n\n parents.push(el);\n while (el.parentNode) {\n parents.unshift(el.parentNode);\n el = el.parentNode;\n }\n\n return parents;\n}\n","import React, { ComponentProps } from 'react';\n\nimport { useContentfulEditorRef } from '../ContentfulEditorProvider';\nimport { HyperlinkElementProps } from './Hyperlink/components/EntityHyperlink';\n\nexport function withLinkTracking(Component: React.ComponentType<HyperlinkElementProps>) {\n return function ComponentWithTracking(props: ComponentProps<typeof Component>) {\n const editor = useContentfulEditorRef();\n\n const onEntityFetchComplete = React.useCallback(\n () => editor?.tracking.onViewportAction('linkRendered'),\n [editor]\n );\n\n return <Component {...props} onEntityFetchComplete={onEntityFetchComplete} />;\n };\n}\n","import * as React from 'react';\n\nimport { Asset, FieldExtensionSDK, ScheduledAction } from '@contentful/app-sdk';\nimport { AssetCard } from '@contentful/f36-components';\nimport {\n useEntity,\n useEntityLoader,\n MissingEntityCard,\n WrappedAssetCard,\n} from '@contentful/field-editor-reference';\nimport areEqual from 'fast-deep-equal';\n\ninterface InternalAssetCardProps {\n asset?: Asset | 'failed';\n isDisabled: boolean;\n isSelected: boolean;\n locale: string;\n onEdit?: () => void;\n onRemove?: () => unknown;\n sdk: FieldExtensionSDK;\n loadEntityScheduledActions: (entityType: string, entityId: string) => Promise<ScheduledAction[]>;\n}\n\nconst InternalAssetCard = React.memo((props: InternalAssetCardProps) => {\n if (props.asset === undefined) {\n return <AssetCard size=\"default\" isLoading />;\n }\n\n if (props.asset === 'failed') {\n return (\n <MissingEntityCard\n entityType=\"Asset\"\n isDisabled={props.isDisabled}\n onRemove={props.onRemove}\n />\n );\n }\n\n return (\n <WrappedAssetCard\n getEntityScheduledActions={props.loadEntityScheduledActions}\n size=\"small\"\n isSelected={props.isSelected}\n isDisabled={props.isDisabled}\n localeCode={props.locale}\n defaultLocaleCode={props.sdk.locales.default}\n asset={props.asset}\n onEdit={props.onEdit}\n onRemove={props.isDisabled ? undefined : props.onRemove}\n isClickable={false}\n />\n );\n}, areEqual);\n\nInternalAssetCard.displayName = 'InternalAssetCard';\n\ninterface FetchingWrappedAssetCardProps {\n assetId: string;\n isDisabled: boolean;\n isSelected: boolean;\n locale: string;\n onEdit?: () => void;\n onRemove?: () => unknown;\n sdk: FieldExtensionSDK;\n onEntityFetchComplete?: VoidFunction;\n}\n\nexport function FetchingWrappedAssetCard(props: FetchingWrappedAssetCardProps) {\n const { onEntityFetchComplete } = props;\n const { data: asset, status } = useEntity<Asset>('Asset', props.assetId);\n const { getEntityScheduledActions } = useEntityLoader();\n const loadEntityScheduledActions = React.useCallback(\n () => getEntityScheduledActions('Asset', props.assetId),\n [getEntityScheduledActions, props.assetId]\n );\n\n React.useEffect(() => {\n if (status === 'success') {\n onEntityFetchComplete?.();\n }\n }, [onEntityFetchComplete, status]);\n\n return (\n <InternalAssetCard\n asset={asset as Asset | undefined}\n sdk={props.sdk}\n isDisabled={props.isDisabled}\n isSelected={props.isSelected}\n loadEntityScheduledActions={loadEntityScheduledActions}\n locale={props.locale}\n onEdit={props.onEdit}\n onRemove={props.onRemove}\n />\n );\n}\n","import * as React from 'react';\n\nimport { FieldExtensionSDK } from '@contentful/app-sdk';\nimport { ScheduledAction, Entry } from '@contentful/app-sdk';\nimport { EntryCard } from '@contentful/f36-components';\nimport {\n useEntity,\n MissingEntityCard,\n WrappedEntryCard,\n useEntityLoader,\n} from '@contentful/field-editor-reference';\nimport areEqual from 'fast-deep-equal';\n\ninterface InternalEntryCard {\n isDisabled: boolean;\n isSelected: boolean;\n locale: string;\n sdk: FieldExtensionSDK;\n loadEntityScheduledActions: (entityType: string, entityId: string) => Promise<ScheduledAction[]>;\n entry?: Entry | 'failed';\n onEdit?: VoidFunction;\n onRemove?: VoidFunction;\n}\n\nconst InternalEntryCard = React.memo((props: InternalEntryCard) => {\n const { entry, sdk, loadEntityScheduledActions } = props;\n\n if (entry === undefined) {\n return <EntryCard isLoading />;\n }\n\n if (entry === 'failed') {\n return (\n <MissingEntityCard\n entityType=\"Entry\"\n isDisabled={props.isDisabled}\n onRemove={props.onRemove}\n />\n );\n }\n\n const contentType = sdk.space\n .getCachedContentTypes()\n .find((contentType) => contentType.sys.id === entry.sys.contentType.sys.id);\n\n return (\n <WrappedEntryCard\n size=\"default\"\n getAsset={props.sdk.space.getAsset}\n getEntityScheduledActions={loadEntityScheduledActions}\n isSelected={props.isSelected}\n isDisabled={props.isDisabled}\n localeCode={props.locale}\n defaultLocaleCode={props.sdk.locales.default}\n contentType={contentType}\n entry={entry}\n onEdit={props.onEdit}\n onRemove={props.isDisabled ? undefined : props.onRemove}\n isClickable={false}\n />\n );\n}, areEqual);\n\nInternalEntryCard.displayName = 'ReferenceCard';\n\ninterface FetchingWrappedEntryCardProps {\n entryId: string;\n isDisabled: boolean;\n isSelected: boolean;\n locale: string;\n sdk: FieldExtensionSDK;\n onEntityFetchComplete?: VoidFunction;\n onEdit?: VoidFunction;\n onRemove?: VoidFunction;\n}\n\nexport const FetchingWrappedEntryCard = (props: FetchingWrappedEntryCardProps) => {\n const { entryId, onEntityFetchComplete } = props;\n const { data: entry, status } = useEntity<Entry>('Entry', entryId);\n const { getEntityScheduledActions } = useEntityLoader();\n const loadEntityScheduledActions = React.useCallback(\n () => getEntityScheduledActions('Entry', entryId),\n [getEntityScheduledActions, entryId]\n );\n\n React.useEffect(() => {\n if (status === 'success') {\n onEntityFetchComplete?.();\n }\n }, [onEntityFetchComplete, status]);\n\n return (\n <InternalEntryCard\n entry={entry}\n sdk={props.sdk}\n locale={props.locale}\n isDisabled={props.isDisabled}\n isSelected={props.isSelected}\n onEdit={props.onEdit}\n onRemove={props.onRemove}\n loadEntityScheduledActions={loadEntityScheduledActions}\n />\n );\n};\n","import React from 'react';\n\nimport { css } from 'emotion';\nimport { useSelected, useReadOnly } from 'slate-react';\n\nimport { useContentfulEditor } from '../../ContentfulEditorProvider';\nimport { IS_CHROME } from '../../helpers/environment';\nimport { findNodePath } from '../../internal/queries';\nimport { removeNodes } from '../../internal/transforms';\nimport { Element, RenderElementProps } from '../../internal/types';\nimport { useSdkContext } from '../../SdkProvider';\nimport { FetchingWrappedAssetCard } from '../shared/FetchingWrappedAssetCard';\nimport { FetchingWrappedEntryCard } from '../shared/FetchingWrappedEntryCard';\n\nconst styles = {\n root: css({\n marginBottom: '1.25rem !important',\n display: 'block',\n }),\n container: css({\n // The next 2 properties ensure Entity card won't be aligned above\n // a list item marker (i.e. bullet)\n display: 'inline-block',\n verticalAlign: 'text-top',\n width: '100%',\n }),\n};\n\ntype LinkedEntityBlockProps = {\n element: Element & {\n data: {\n target: {\n sys: {\n id: string;\n linkType: 'Entry' | 'Asset';\n type: 'Link';\n };\n };\n };\n };\n attributes: Pick<RenderElementProps, 'attributes'>;\n children: Pick<RenderElementProps, 'children'>;\n onEntityFetchComplete: VoidFunction;\n};\n\nexport function LinkedEntityBlock(props: LinkedEntityBlockProps) {\n const { attributes, children, element, onEntityFetchComplete } = props;\n const isSelected = useSelected();\n const editor = useContentfulEditor();\n const sdk = useSdkContext();\n const isDisabled = useReadOnly();\n const { id: entityId, linkType: entityType } = element.data.target.sys;\n\n const handleEditClick = React.useCallback(() => {\n const openEntity = entityType === 'Asset' ? sdk.navigator.openAsset : sdk.navigator.openEntry;\n return openEntity(entityId, { slideIn: true });\n }, [sdk, entityId, entityType]);\n\n const handleRemoveClick = React.useCallback(() => {\n if (!editor) return;\n const pathToElement = findNodePath(editor, element);\n removeNodes(editor, { at: pathToElement });\n }, [editor, element]);\n\n return (\n <div\n {...attributes}\n className={styles.root}\n data-entity-type={entityType}\n data-entity-id={entityId}\n // COMPAT: This makes copy & paste work for Firefox\n contentEditable={IS_CHROME ? undefined : false}\n draggable={IS_CHROME ? true : undefined}\n >\n <div\n // COMPAT: This makes copy & paste work for Chromium/Blink browsers and Safari\n contentEditable={IS_CHROME ? false : undefined}\n draggable={IS_CHROME ? true : undefined}\n className={styles.container}\n >\n {entityType === 'Entry' && (\n <FetchingWrappedEntryCard\n sdk={sdk}\n entryId={entityId}\n locale={sdk.field.locale}\n isDisabled={isDisabled}\n isSelected={isSelected}\n onRemove={handleRemoveClick}\n onEdit={handleEditClick}\n onEntityFetchComplete={onEntityFetchComplete}\n />\n )}\n {entityType === 'Asset' && (\n <FetchingWrappedAssetCard\n sdk={sdk}\n assetId={entityId}\n locale={sdk.field.locale}\n isDisabled={isDisabled}\n isSelected={isSelected}\n onRemove={handleRemoveClick}\n onEdit={handleEditClick}\n onEntityFetchComplete={onEntityFetchComplete}\n />\n )}\n </div>\n {children}\n </div>\n );\n}\n","/* eslint-disable you-dont-need-lodash-underscore/find */\nimport find from 'lodash/find';\nimport flow from 'lodash/flow';\nimport get from 'lodash/get';\n\n/**\n * Given a field object and a rich text node type, return a list of valid\n * content type IDs associated with the node type, based on that node type's\n * `linkContentType` validation.\n *\n * If there is no such validation or the validation is empty, return an empty\n * array.\n *\n * The navigation here is explained by the `nodes` validation having signature:\n * { nodes: { [nodeType]: validationObject[] } }\n *\n * We defensively navigate through this object because\n * 1) the field may not have a `validations` array,\n * 2) the `validations` array may be empty,\n * 3) the `validations` array may not have a `nodes` validation,\n * 4) the `nodes` validation may not validate the `nodeType`, and\n * 5) the `nodeType` validations may not have a `linkContentType` validation.\n *\n * Note that passing an empty array will result in all possible content types\n * being whitelisted.\n *\n * @param {object} field\n * @param {string} nodeType\n * @returns {string[]}\n */\nexport default function getLinkedContentTypeIdsForNodeType(field, nodeType): string[] {\n return flow(\n (v) => find(v, 'nodes'),\n (v) => get(v, ['nodes', nodeType]),\n (v) => find(v, 'linkContentType'),\n (v) => get(v, 'linkContentType', [])\n )(field.validations);\n}\n","import getLinkedContentTypeIdsForNodeType from './getLinkedContentTypeIdsForNodeType';\n\n/**\n * Returns a config for the entity selector based on a given rich text field and a\n * rich text node type that the entity should be picked for. Takes the field\n * validations for the given node type into account.\n *\n * @param {object} field\n * @param {string} nodeType\n * @returns {object}\n */\nexport default function newEntitySelectorConfigFromRichTextField(field, nodeType) {\n return {\n entityType: getEntityTypeFromRichTextNode(nodeType),\n locale: field.locale || null, // Will fall back to default locale.\n contentTypes: getLinkedContentTypeIdsForNodeType(field, nodeType),\n };\n}\n\nfunction getEntityTypeFromRichTextNode(nodeType): 'Entry' | 'Asset' | never {\n const words = nodeType.split('-');\n if (words.indexOf('entry') !== -1) {\n return 'Entry';\n }\n if (words.indexOf('asset') !== -1) {\n return 'Asset';\n }\n throw new Error(`RichText node type \\`${nodeType}\\` has no associated \\`entityType\\``);\n}\n","import { NavigatorAPI } from '@contentful/app-sdk';\nimport noop from 'lodash/noop';\n\n/**\n * Allows to observe when the current slide-in navigation slide gets e.g.\n * re-activated after opening another slide on top. This is useful as the sdk\n * does not give full insights into e.g. whether sdk.dialogs.selectSingleEntry()\n * with `withCreate: true` option opens the slide-in navigation to edit the\n * created entry after returning it.\n */\nexport function watchCurrentSlide(navigator: NavigatorAPI) {\n const onActiveCallbacks = new Set<Function>();\n let wasSlideClosed = false;\n let initialSlideLevel;\n let lastSlideLevel;\n const status = () => ({\n wasClosed: wasSlideClosed,\n isActive: !wasSlideClosed && lastSlideLevel === initialSlideLevel,\n });\n const off = navigator.onSlideInNavigation(({ oldSlideLevel, newSlideLevel }) => {\n if (initialSlideLevel === undefined) {\n initialSlideLevel = oldSlideLevel;\n }\n lastSlideLevel = newSlideLevel;\n if (newSlideLevel < initialSlideLevel) {\n wasSlideClosed = true;\n off(); // No more point in watching, slide got closed.\n onActiveCallbacks.clear();\n }\n if (status().isActive && newSlideLevel !== oldSlideLevel) {\n onActiveCallbacks.forEach((cb) => cb());\n }\n });\n\n /**\n * Call to unsubscribe from navigator events when the watcher is no longer\n * needed.\n */\n function unwatch() {\n off();\n onActiveCallbacks.clear();\n }\n\n /**\n * Fires immediately when the slide is currently active, or at the point when\n * it becomes active again, if there are slides on top that get closed. Does not\n * fire when the observed slide gets closed, and then re-opened through browser\n * back, as this technically opens a new slide and editor instance.\n */\n function onActive(cb: Function) {\n if (wasSlideClosed) return noop; // Can't re-activate already closed slide.\n if (status().isActive) {\n cb();\n }\n onActiveCallbacks.add(cb);\n return () => onActiveCallbacks.delete(cb);\n }\n return {\n status,\n onActive,\n unwatch,\n };\n}\n","import { BLOCKS, TEXT_CONTAINERS } from '@contentful/rich-text-types';\n\nimport { focus, insertEmptyParagraph, moveToTheNextChar } from '../../helpers/editor';\nimport newEntitySelectorConfigFromRichTextField from '../../helpers/newEntitySelectorConfigFromRichTextField';\nimport { watchCurrentSlide } from '../../helpers/sdkNavigatorSlideIn';\nimport { getText, getAboveNode, getLastNodeByLevel } from '../../internal/queries';\nimport { insertNodes, select, setNodes } from '../../internal/transforms';\nimport { PlateEditor } from '../../internal/types';\nimport { TrackingPluginActions } from '../../plugins/Tracking';\n\nexport async function selectEntityAndInsert(\n nodeType,\n sdk,\n editor,\n logAction: TrackingPluginActions['onToolbarAction'] | TrackingPluginActions['onShortcutAction']\n) {\n logAction('openCreateEmbedDialog', { nodeType });\n\n const { field, dialogs } = sdk;\n const baseConfig = newEntitySelectorConfigFromRichTextField(field, nodeType);\n const selectEntity =\n baseConfig.entityType === 'Asset' ? dialogs.selectSingleAsset : dialogs.selectSingleEntry;\n const config = { ...baseConfig, withCreate: true };\n\n const { selection } = editor;\n const rteSlide = watchCurrentSlide(sdk.navigator);\n const entity = await selectEntity(config);\n\n if (!entity) {\n logAction('cancelCreateEmbedDialog', { nodeType });\n } else {\n // Selection prevents incorrect position of inserted ref when RTE doesn't have focus\n // (i.e. when using hotkeys and slide-in)\n select(editor, selection);\n insertBlock(editor, nodeType, entity);\n ensureFollowingParagraph(editor);\n logAction('insert', { nodeType });\n }\n // If user chose to create a new entity, this might open slide-in to edit the\n // entity. In this case, no point in focusing RTE which is now in the slide below.\n rteSlide.onActive(() => {\n rteSlide.unwatch();\n focus(editor);\n });\n}\n\n// TODO: incorporate this logic inside the trailingParagraph plugin instead\nfunction ensureFollowingParagraph(editor: PlateEditor) {\n const entityBlock = getAboveNode(editor, {\n match: {\n type: [BLOCKS.EMBEDDED_ASSET, BLOCKS.EMBEDDED_ENTRY],\n },\n });\n\n if (!entityBlock) {\n return;\n }\n\n const level = entityBlock[1].length - 1;\n const lastNode = getLastNodeByLevel(editor, level);\n\n const isTextContainer = (TEXT_CONTAINERS as string[]).includes(\n (lastNode?.[0].type ?? '') as string\n );\n\n // If the new block isn't followed by a sibling text container (e.g. paragraph)\n // we insert a new empty one. Level 0 is handled by the trailingParagraph plugin\n if (level !== 0 && !isTextContainer) {\n insertEmptyParagraph(editor);\n }\n\n moveToTheNextChar(editor);\n}\n\nconst createNode = (nodeType, entity) => ({\n type: nodeType,\n data: {\n target: {\n sys: {\n id: entity.sys.id,\n type: 'Link',\n linkType: entity.sys.type,\n },\n },\n },\n children: [{ text: '' }],\n isVoid: true,\n});\n\n// TODO: DRY up copied code from HR\nexport function insertBlock(editor: PlateEditor, nodeType: string, entity) {\n if (!editor?.selection) return;\n\n const linkedEntityBlock = createNode(nodeType, entity);\n\n const hasText = editor.selection && !!getText(editor, editor.selection.focus.path);\n\n if (hasText) {\n insertNodes(editor, linkedEntityBlock);\n } else {\n setNodes(editor, linkedEntityBlock);\n }\n}\n","import React from 'react';\n\nimport { FieldExtensionSDK } from '@contentful/app-sdk';\nimport { Flex, Icon, Menu } from '@contentful/f36-components';\nimport { AssetIcon, EmbeddedEntryBlockIcon } from '@contentful/f36-icons';\nimport { css } from 'emotion';\n\nimport { useContentfulEditor } from '../../ContentfulEditorProvider';\nimport { useSdkContext } from '../../SdkProvider';\nimport { selectEntityAndInsert } from './Util';\n\nexport const styles = {\n icon: css({\n marginRight: '10px',\n }),\n};\n\ninterface EmbeddedEntityBlockToolbarIconProps {\n isDisabled: boolean;\n nodeType: string;\n onClose: () => void;\n}\n\nexport function EmbeddedEntityBlockToolbarIcon({\n isDisabled,\n nodeType,\n onClose,\n}: EmbeddedEntityBlockToolbarIconProps) {\n const editor = useContentfulEditor();\n const sdk: FieldExtensionSDK = useSdkContext();\n\n const handleClick = async (event: React.MouseEvent<HTMLButtonElement>) => {\n event.preventDefault();\n if (!editor) {\n return;\n }\n\n onClose();\n await selectEntityAndInsert(nodeType, sdk, editor, editor.tracking.onToolbarAction);\n };\n\n const type = getEntityTypeFromNodeType(nodeType);\n const baseClass = `rich-text__${nodeType}`;\n return (\n <Menu.Item\n disabled={isDisabled}\n className={`${baseClass}-list-item`}\n onClick={handleClick}\n testId={`toolbar-toggle-${nodeType}`}>\n <Flex alignItems=\"center\" flexDirection=\"row\">\n <Icon\n as={type === 'Asset' ? AssetIcon : EmbeddedEntryBlockIcon}\n className={`rich-text__embedded-entry-list-icon ${styles.icon}`}\n variant=\"secondary\"\n />\n <span>{type}</span>\n </Flex>\n </Menu.Item>\n );\n}\n\nfunction getEntityTypeFromNodeType(nodeType: string): string | never {\n const words = nodeType.toLowerCase().split('-');\n if (words.includes('entry')) {\n return 'Entry';\n }\n if (words.includes('asset')) {\n return 'Asset';\n }\n throw new Error(`Node type \\`${nodeType}\\` has no associated \\`entityType\\``);\n}\n","import { FieldExtensionSDK } from '@contentful/app-sdk';\nimport { BLOCKS } from '@contentful/rich-text-types';\nimport { HotkeyPlugin } from '@udecode/plate-core';\nimport isHotkey from 'is-hotkey';\n\nimport { getNodeEntryFromSelection } from '../../helpers/editor';\nimport { removeNodes } from '../../internal/transforms';\nimport { KeyboardHandler, PlatePlugin } from '../../internal/types';\nimport { withLinkTracking } from '../links-tracking';\nimport { LinkedEntityBlock } from './LinkedEntityBlock';\nimport { selectEntityAndInsert } from './Util';\n\nexport { EmbeddedEntityBlockToolbarIcon as ToolbarIcon } from './ToolbarIcon';\n\nconst entityTypes = {\n [BLOCKS.EMBEDDED_ENTRY]: 'Entry',\n [BLOCKS.EMBEDDED_ASSET]: 'Asset',\n};\n\nfunction getWithEmbeddedEntityEvents(\n nodeType: BLOCKS.EMBEDDED_ENTRY | BLOCKS.EMBEDDED_ASSET,\n sdk: FieldExtensionSDK\n): KeyboardHandler<HotkeyPlugin> {\n return (editor, { options: { hotkey } }) =>\n (event) => {\n const [, pathToSelectedElement] = getNodeEntryFromSelection(editor, nodeType);\n\n if (pathToSelectedElement) {\n const isDelete = event.key === 'Delete';\n const isBackspace = event.key === 'Backspace';\n\n if (isDelete || isBackspace) {\n event.preventDefault();\n removeNodes(editor, { at: pathToSelectedElement });\n }\n\n return;\n }\n\n if (hotkey && isHotkey(hotkey, event)) {\n selectEntityAndInsert(nodeType, sdk, editor, editor.tracking.onShortcutAction);\n }\n };\n}\n\nconst createEmbeddedEntityPlugin =\n (nodeType: BLOCKS.EMBEDDED_ENTRY | BLOCKS.EMBEDDED_ASSET, hotkey: string) =>\n (sdk: FieldExtensionSDK): PlatePlugin => ({\n key: nodeType,\n type: nodeType,\n isElement: true,\n isVoid: true,\n component: withLinkTracking(LinkedEntityBlock),\n options: { hotkey },\n handlers: {\n onKeyDown: getWithEmbeddedEntityEvents(nodeType, sdk),\n },\n deserializeHtml: {\n rules: [\n {\n validAttribute: {\n 'data-entity-type': entityTypes[nodeType],\n },\n },\n ],\n withoutChildren: true,\n getNode: (el) => ({\n type: nodeType,\n children: [{ text: '' }],\n isVoid: true,\n data: {\n target: {\n sys: {\n id: el.getAttribute('data-entity-id'),\n linkType: el.getAttribute('data-entity-type'),\n type: 'Link',\n },\n },\n },\n }),\n },\n });\n\nexport const createEmbeddedEntryBlockPlugin = createEmbeddedEntityPlugin(\n BLOCKS.EMBEDDED_ENTRY,\n 'mod+shift+e'\n);\nexport const createEmbeddedAssetBlockPlugin = createEmbeddedEntityPlugin(\n BLOCKS.EMBEDDED_ASSET,\n 'mod+shift+a'\n);\n","import React from 'react';\n\nimport { InlineEntryCard, MenuItem, Text } from '@contentful/f36-components';\nimport { ClockIcon } from '@contentful/f36-icons';\nimport tokens from '@contentful/f36-tokens';\nimport {\n useEntity,\n useEntityLoader,\n ScheduledIconWithTooltip,\n} from '@contentful/field-editor-reference';\nimport { Entry, entityHelpers, FieldExtensionSDK } from '@contentful/field-editor-shared';\nimport { INLINES } from '@contentful/rich-text-types';\nimport { css } from 'emotion';\n\nconst { getEntryTitle, getEntryStatus } = entityHelpers;\n\nconst styles = {\n scheduledIcon: css({\n verticalAlign: 'text-bottom',\n marginRight: tokens.spacing2Xs,\n }),\n};\n\ninterface FetchingWrappedInlineEntryCardProps {\n entryId: string;\n sdk: FieldExtensionSDK;\n isSelected: boolean;\n isDisabled: boolean;\n onEdit: (event: React.MouseEvent<Element, MouseEvent>) => void;\n onRemove: (event: React.MouseEvent<Element, MouseEvent>) => void;\n onEntityFetchComplete?: VoidFunction;\n}\n\nexport function FetchingWrappedInlineEntryCard(props: FetchingWrappedInlineEntryCardProps) {\n const { data: entry, status: requestStatus } = useEntity<Entry>('Entry', props.entryId);\n const { getEntityScheduledActions } = useEntityLoader();\n const loadEntityScheduledActions = () => getEntityScheduledActions('Entry', props.entryId);\n\n const allContentTypes = props.sdk.space.getCachedContentTypes();\n const { onEntityFetchComplete } = props;\n const contentType = React.useMemo(() => {\n if (!entry || !allContentTypes) return undefined;\n\n return allContentTypes.find(\n (contentType) => contentType.sys.id === entry.sys.contentType.sys.id\n );\n }, [allContentTypes, entry]);\n\n React.useEffect(() => {\n if (requestStatus !== 'success') {\n return;\n }\n onEntityFetchComplete?.();\n }, [requestStatus, onEntityFetchComplete]);\n\n const contentTypeName = contentType ? contentType.name : '';\n\n const title = React.useMemo(\n () =>\n getEntryTitle({\n entry,\n contentType,\n localeCode: props.sdk.field.locale,\n defaultLocaleCode: props.sdk.locales.default,\n defaultTitle: 'Untitled',\n }),\n [entry, contentType, props.sdk.field.locale, props.sdk.locales.default]\n );\n\n if (requestStatus === 'error') {\n return (\n <InlineEntryCard\n title=\"Entry missing or inaccessible\"\n testId={INLINES.EMBEDDED_ENTRY}\n isSelected={props.isSelected}\n />\n );\n }\n\n if (requestStatus === 'loading') {\n return <InlineEntryCard isLoading />;\n }\n\n const entryStatus = getEntryStatus(entry.sys);\n if (entryStatus === 'deleted') {\n return (\n <InlineEntryCard\n title=\"Entry missing or inaccessible\"\n testId={INLINES.EMBEDDED_ENTRY}\n isSelected={props.isSelected}\n actions={[\n <MenuItem key=\"remove\" onClick={props.onRemove} testId=\"delete\">\n Remove\n </MenuItem>,\n ]}\n />\n );\n }\n\n return (\n <InlineEntryCard\n testId={INLINES.EMBEDDED_ENTRY}\n isSelected={props.isSelected}\n title={`${contentTypeName}: ${title}`}\n status={entryStatus}\n actions={[\n <MenuItem key=\"edit\" onClick={props.onEdit}>\n Edit\n </MenuItem>,\n <MenuItem key=\"remove\" onClick={props.onRemove} disabled={props.isDisabled} testId=\"delete\">\n Remove\n </MenuItem>,\n ]}>\n <ScheduledIconWithTooltip\n getEntityScheduledActions={loadEntityScheduledActions}\n entityType=\"Entry\"\n entityId={entry.sys.id}>\n <ClockIcon className={styles.scheduledIcon} variant=\"muted\" testId=\"scheduled-icon\" />\n </ScheduledIconWithTooltip>\n <Text>{title}</Text>\n </InlineEntryCard>\n );\n}\n","import { INLINES } from '@contentful/rich-text-types';\n\nexport function createInlineEntryNode(id: string) {\n return {\n type: INLINES.EMBEDDED_ENTRY,\n children: [{ text: '' }],\n data: {\n target: {\n sys: {\n id,\n type: 'Link',\n linkType: 'Entry',\n },\n },\n },\n };\n}\n","import * as React from 'react';\n\nimport { Link, FieldExtensionSDK } from '@contentful/app-sdk';\nimport { Menu, Flex } from '@contentful/f36-components';\nimport { EmbeddedEntryInlineIcon } from '@contentful/f36-icons';\nimport tokens from '@contentful/f36-tokens';\nimport { Entry } from '@contentful/field-editor-shared';\nimport { INLINES } from '@contentful/rich-text-types';\nimport { HotkeyPlugin } from '@udecode/plate-core';\nimport { css } from 'emotion';\nimport isHotkey from 'is-hotkey';\nimport { useSelected, useReadOnly } from 'slate-react';\n\nimport { useContentfulEditor } from '../../ContentfulEditorProvider';\nimport { focus, moveToTheNextChar } from '../../helpers/editor';\nimport { IS_CHROME } from '../../helpers/environment';\nimport newEntitySelectorConfigFromRichTextField from '../../helpers/newEntitySelectorConfigFromRichTextField';\nimport { watchCurrentSlide } from '../../helpers/sdkNavigatorSlideIn';\nimport { findNodePath } from '../../internal/queries';\nimport { insertNodes, removeNodes, select } from '../../internal/transforms';\nimport { KeyboardHandler, PlatePlugin, Node } from '../../internal/types';\nimport { Element, RenderElementProps } from '../../internal/types';\nimport { TrackingPluginActions } from '../../plugins/Tracking';\nimport { useSdkContext } from '../../SdkProvider';\nimport { withLinkTracking } from '../links-tracking';\nimport { FetchingWrappedInlineEntryCard } from './FetchingWrappedInlineEntryCard';\nimport { createInlineEntryNode } from './Util';\n\nconst styles = {\n icon: css({\n marginRight: '10px',\n }),\n\n root: css({\n display: 'inline-block',\n margin: `0 ${tokens.spacing2Xs}`,\n fontSize: 'inherit',\n span: {\n userSelect: 'none',\n },\n }),\n};\n\ntype EmbeddedEntityInlineProps = {\n target: Link;\n element: Element & {\n data: {\n target: {\n sys: {\n id: string;\n linkType: 'Entry' | 'Asset';\n type: 'Link';\n };\n };\n };\n };\n attributes: Pick<RenderElementProps, 'attributes'>;\n children: Pick<RenderElementProps, 'children'>;\n onEntityFetchComplete: VoidFunction;\n};\n\nfunction EmbeddedEntityInline(props: EmbeddedEntityInlineProps) {\n const editor = useContentfulEditor();\n const sdk = useSdkContext();\n const isSelected = useSelected();\n const { id: entryId } = props.element.data.target.sys;\n const isDisabled = useReadOnly();\n\n function handleEditClick() {\n return sdk.navigator.openEntry(entryId, { slideIn: { waitForClose: true } }).then(() => {\n editor && focus(editor);\n });\n }\n\n function handleRemoveClick() {\n if (!editor) return;\n const pathToElement = findNodePath(editor, props.element);\n removeNodes(editor, { at: pathToElement });\n }\n\n return (\n <span\n {...props.attributes}\n className={styles.root}\n data-embedded-entity-inline-id={entryId}\n // COMPAT: This makes copy & paste work for Firefox\n contentEditable={IS_CHROME ? undefined : false}\n draggable={IS_CHROME ? true : undefined}\n >\n <span\n // COMPAT: This makes copy & paste work for Chromium/Blink browsers and Safari\n contentEditable={IS_CHROME ? false : undefined}\n draggable={IS_CHROME ? true : undefined}\n >\n <FetchingWrappedInlineEntryCard\n sdk={sdk}\n entryId={entryId}\n isSelected={isSelected}\n isDisabled={isDisabled}\n onRemove={handleRemoveClick}\n onEdit={handleEditClick}\n onEntityFetchComplete={props.onEntityFetchComplete}\n />\n </span>\n {props.children}\n </span>\n );\n}\n\ninterface ToolbarEmbeddedEntityInlineButtonProps {\n onClose: () => void;\n isDisabled: boolean;\n}\n\nasync function selectEntityAndInsert(\n editor,\n sdk: FieldExtensionSDK,\n logAction: TrackingPluginActions['onShortcutAction'] | TrackingPluginActions['onToolbarAction']\n) {\n logAction('openCreateEmbedDialog', { nodeType: INLINES.EMBEDDED_ENTRY });\n\n const config = {\n ...newEntitySelectorConfigFromRichTextField(sdk.field, INLINES.EMBEDDED_ENTRY),\n withCreate: true,\n };\n const { selection } = editor;\n const rteSlide = watchCurrentSlide(sdk.navigator);\n const entry = await sdk.dialogs.selectSingleEntry<Entry>(config);\n\n if (!entry) {\n logAction('cancelCreateEmbedDialog', { nodeType: INLINES.EMBEDDED_ENTRY });\n } else {\n // Selection prevents incorrect position of inserted ref when RTE doesn't have focus\n // (i.e. when using hotkeys and slide-in)\n select(editor, selection);\n insertNodes(editor, createInlineEntryNode(entry.sys.id));\n logAction('insert', { nodeType: INLINES.EMBEDDED_ENTRY });\n }\n rteSlide.onActive(() => {\n rteSlide.unwatch();\n focus(editor);\n });\n}\n\nexport function ToolbarEmbeddedEntityInlineButton(props: ToolbarEmbeddedEntityInlineButtonProps) {\n const editor = useContentfulEditor();\n const sdk: FieldExtensionSDK = useSdkContext();\n\n async function handleClick(event) {\n event.preventDefault();\n\n if (!editor) return;\n\n props.onClose();\n\n await selectEntityAndInsert(editor, sdk, editor.tracking.onToolbarAction);\n moveToTheNextChar(editor);\n }\n\n return (\n <Menu.Item\n disabled={props.isDisabled}\n className=\"rich-text__entry-link-block-button\"\n testId={`toolbar-toggle-${INLINES.EMBEDDED_ENTRY}`}\n onClick={handleClick}\n >\n <Flex alignItems=\"center\" flexDirection=\"row\">\n <EmbeddedEntryInlineIcon\n variant=\"secondary\"\n className={`rich-text__embedded-entry-list-icon ${styles.icon}`}\n />\n <span>Inline entry</span>\n </Flex>\n </Menu.Item>\n );\n}\n\nexport function createEmbeddedEntityInlinePlugin(sdk: FieldExtensionSDK): PlatePlugin {\n const htmlAttributeName = 'data-embedded-entity-inline-id';\n\n return {\n key: INLINES.EMBEDDED_ENTRY,\n type: INLINES.EMBEDDED_ENTRY,\n isElement: true,\n isInline: true,\n isVoid: true,\n component: withLinkTracking(EmbeddedEntityInline),\n options: {\n hotkey: 'mod+shift+2',\n },\n handlers: {\n onKeyDown: getWithEmbeddedEntryInlineEvents(sdk),\n },\n deserializeHtml: {\n rules: [\n {\n validAttribute: htmlAttributeName,\n },\n ],\n withoutChildren: true,\n getNode: (el): Node => createInlineEntryNode(el.getAttribute(htmlAttributeName) as string),\n },\n };\n}\n\nfunction getWithEmbeddedEntryInlineEvents(sdk: FieldExtensionSDK): KeyboardHandler<HotkeyPlugin> {\n return function withEmbeddedEntryInlineEvents(editor, { options: { hotkey } }) {\n return function handleEvent(event) {\n if (!editor) return;\n\n if (hotkey && isHotkey(hotkey, event)) {\n selectEntityAndInsert(editor, sdk, editor.tracking.onShortcutAction);\n }\n };\n };\n}\n","import * as React from 'react';\n\nimport { Menu, Button } from '@contentful/f36-components';\nimport { ChevronDownIcon } from '@contentful/f36-icons';\nimport tokens from '@contentful/f36-tokens';\nimport { BLOCKS } from '@contentful/rich-text-types';\nimport { css, cx } from 'emotion';\n\nimport { useContentfulEditor } from '../../../ContentfulEditorProvider';\nimport {\n getElementFromCurrentSelection,\n focus,\n isBlockSelected,\n toggleElement,\n} from '../../../helpers/editor';\nimport { isNodeTypeEnabled } from '../../../helpers/validations';\nimport { Element } from '../../../internal/types';\nimport { useSdkContext } from '../../../SdkProvider';\n\nconst styles = {\n dropdown: {\n root: css`\n font-weight: ${tokens.fontWeightDemiBold};\n `,\n [BLOCKS.PARAGRAPH]: css`\n font-size: ${tokens.fontSizeL};\n `,\n [BLOCKS.HEADING_1]: css`\n font-size: 1.625rem;\n `,\n [BLOCKS.HEADING_2]: css`\n font-size: 1.4375rem;\n `,\n [BLOCKS.HEADING_3]: css`\n font-size: 1.25rem;\n `,\n [BLOCKS.HEADING_4]: css`\n font-size: 1.125rem;\n `,\n [BLOCKS.HEADING_5]: css`\n font-size: 1rem;\n `,\n [BLOCKS.HEADING_6]: css`\n font-size: 0.875rem;\n `,\n },\n};\n\nconst LABELS = {\n [BLOCKS.PARAGRAPH]: 'Normal text',\n [BLOCKS.HEADING_1]: 'Heading 1',\n [BLOCKS.HEADING_2]: 'Heading 2',\n [BLOCKS.HEADING_3]: 'Heading 3',\n [BLOCKS.HEADING_4]: 'Heading 4',\n [BLOCKS.HEADING_5]: 'Heading 5',\n [BLOCKS.HEADING_6]: 'Heading 6',\n};\n\nexport interface ToolbarHeadingButtonProps {\n isDisabled?: boolean;\n}\n\nexport function ToolbarHeadingButton(props: ToolbarHeadingButtonProps) {\n const sdk = useSdkContext();\n const editor = useContentfulEditor();\n const [isOpen, setOpen] = React.useState(false);\n const [selected, setSelected] = React.useState<string>(BLOCKS.PARAGRAPH);\n\n React.useEffect(() => {\n if (!editor?.selection) return;\n\n const [element] = getElementFromCurrentSelection(editor);\n const type = (element as Element).type;\n\n setSelected(LABELS[type] ? type : BLOCKS.PARAGRAPH);\n }, [editor?.operations, editor?.selection]); // eslint-disable-line -- TODO: explain this disable\n\n const [nodeTypesByEnablement, someHeadingsEnabled] = React.useMemo(() => {\n const nodeTypesByEnablement = Object.fromEntries(\n Object.keys(LABELS).map((nodeType) => [nodeType, isNodeTypeEnabled(sdk.field, nodeType)])\n );\n const someHeadingsEnabled = Object.values(nodeTypesByEnablement).filter(Boolean).length > 0;\n return [nodeTypesByEnablement, someHeadingsEnabled];\n }, [sdk.field]);\n\n function handleOnSelectItem(type: BLOCKS): (event: React.MouseEvent<HTMLButtonElement>) => void {\n return (event: React.MouseEvent<HTMLButtonElement>) => {\n event.preventDefault();\n\n if (!editor?.selection) return;\n\n setSelected(type);\n setOpen(false);\n\n const prevOnChange = editor.onChange;\n /*\n The focus might happen at point in time when\n `toggleElement` (helper for toggleNodeType) changes aren't rendered yet, causing the browser\n to place the cursor at the start of the text.\n We wait for the change event before focusing\n the editor again. This ensures the cursor is back at the previous\n position.*/\n editor.onChange = (...args) => {\n focus(editor);\n editor.onChange = prevOnChange;\n prevOnChange(...args);\n };\n\n const isActive = isBlockSelected(editor, type);\n editor.tracking.onToolbarAction(isActive ? 'remove' : 'insert', { nodeType: type });\n\n toggleElement(editor, { activeType: type, inactiveType: type });\n };\n }\n\n if (!editor) return null;\n\n return (\n <Menu isOpen={isOpen} onClose={() => setOpen(false)}>\n <Menu.Trigger>\n <Button\n size=\"small\"\n testId=\"toolbar-heading-toggle\"\n variant=\"transparent\"\n endIcon={<ChevronDownIcon />}\n isDisabled={props.isDisabled}\n onClick={() => someHeadingsEnabled && setOpen(!isOpen)}\n >\n {LABELS[selected]}\n </Button>\n </Menu.Trigger>\n <Menu.List testId=\"dropdown-heading-list\">\n {' '}\n {Object.keys(LABELS)\n .map(\n (nodeType) =>\n nodeTypesByEnablement[nodeType] && (\n <Menu.Item\n key={nodeType}\n isInitiallyFocused={selected === nodeType}\n onClick={handleOnSelectItem(nodeType as BLOCKS)}\n testId={`dropdown-option-${nodeType}`}\n disabled={props.isDisabled}\n >\n <span className={cx(styles.dropdown.root, styles.dropdown[nodeType])}>\n {LABELS[nodeType]}\n </span>\n </Menu.Item>\n )\n )\n .filter(Boolean)}\n </Menu.List>\n </Menu>\n );\n}\n","import { BLOCKS, TEXT_CONTAINERS } from '@contentful/rich-text-types';\n\nimport { getNodeEntries } from '../internal/queries';\nimport { PlateEditor, Node, Path, NodeMatch } from '../internal/types';\n\nfunction extractNodes(editor: PlateEditor, path: Path, match: NodeMatch) {\n return Array.from(\n getNodeEntries(editor, {\n match,\n at: path,\n mode: 'lowest',\n })\n ).map(([node]) => node);\n}\n\n/**\n * It filters out all paragraphs and headings from a path and convert them into paragraphs.\n */\nexport function extractParagraphs(editor: PlateEditor, path: Path): Node[] {\n return extractNodes(editor, path, {\n type: TEXT_CONTAINERS,\n }).map((node) => ({\n ...node,\n type: BLOCKS.PARAGRAPH,\n }));\n}\n","import { BLOCKS, INLINES } from '@contentful/rich-text-types';\n\nimport {\n insertNodes,\n removeNodes,\n unwrapNodes,\n wrapNodes,\n liftNodes,\n} from '../internal/transforms';\nimport { PlateEditor, NodeEntry } from '../internal/types';\nimport { extractParagraphs } from './extractNodes';\n\nexport const transformRemove = (editor: PlateEditor, [, path]: NodeEntry) => {\n removeNodes(editor, { at: path });\n};\n\nexport const transformParagraphs = (editor: PlateEditor, entry: NodeEntry) => {\n const path = entry[1];\n const nodes = extractParagraphs(editor, path);\n\n transformRemove(editor, entry);\n insertNodes(editor, nodes, { at: path });\n};\n\nexport const transformUnwrap = (editor: PlateEditor, [, path]: NodeEntry) => {\n unwrapNodes(editor, {\n at: path,\n });\n};\n\nexport const transformWrapIn =\n (type: BLOCKS | INLINES) =>\n (editor: PlateEditor, [, path]: NodeEntry) => {\n wrapNodes(editor, { type, data: {}, children: [] }, { at: path });\n };\n\nexport const transformLift = (editor: PlateEditor, [, path]: NodeEntry) => {\n liftNodes(editor, { at: path });\n};\n","import * as React from 'react';\n\nimport tokens from '@contentful/f36-tokens';\nimport { BLOCKS } from '@contentful/rich-text-types';\nimport { css, cx } from 'emotion';\nimport * as Slate from 'slate-react';\n\nconst styles = {\n dropdown: {\n root: css`\n font-weight: ${tokens.fontWeightDemiBold};\n `,\n [BLOCKS.PARAGRAPH]: css`\n font-size: ${tokens.fontSizeL};\n `,\n [BLOCKS.HEADING_1]: css`\n font-size: 1.625rem;\n `,\n [BLOCKS.HEADING_2]: css`\n font-size: 1.4375rem;\n `,\n [BLOCKS.HEADING_3]: css`\n font-size: 1.25rem;\n `,\n [BLOCKS.HEADING_4]: css`\n font-size: 1.125rem;\n `,\n [BLOCKS.HEADING_5]: css`\n font-size: 1rem;\n `,\n [BLOCKS.HEADING_6]: css`\n font-size: 0.875rem;\n `,\n },\n headings: {\n root: css`\n font-weight: ${tokens.fontWeightMedium};\n line-height: 1.3;\n margin: 0 0 ${tokens.spacingS};\n `,\n [BLOCKS.HEADING_1]: css`\n font-size: 1.875rem;\n `,\n [BLOCKS.HEADING_2]: css`\n font-size: 1.5625rem;\n `,\n [BLOCKS.HEADING_3]: css`\n font-size: 1.375rem;\n `,\n [BLOCKS.HEADING_4]: css`\n font-size: 1.25rem;\n `,\n [BLOCKS.HEADING_5]: css`\n font-size: 1.125rem;\n `,\n [BLOCKS.HEADING_6]: css`\n font-size: 1rem;\n `,\n },\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- TODO: explain this disable\nfunction createHeading(Tag: any, block: BLOCKS) {\n return function Heading(props: Slate.RenderElementProps) {\n return (\n <Tag {...props.attributes} className={cx(styles.headings.root, styles.headings[block])}>\n {props.children}\n </Tag>\n );\n };\n}\n\nexport const HeadingComponents = {\n [BLOCKS.HEADING_1]: React.memo(createHeading('h1', BLOCKS.HEADING_1)),\n [BLOCKS.HEADING_2]: React.memo(createHeading('h2', BLOCKS.HEADING_2)),\n [BLOCKS.HEADING_3]: React.memo(createHeading('h3', BLOCKS.HEADING_3)),\n [BLOCKS.HEADING_4]: React.memo(createHeading('h4', BLOCKS.HEADING_4)),\n [BLOCKS.HEADING_5]: React.memo(createHeading('h5', BLOCKS.HEADING_5)),\n [BLOCKS.HEADING_6]: React.memo(createHeading('h6', BLOCKS.HEADING_6)),\n};\n","import { BLOCKS, HEADINGS } from '@contentful/rich-text-types';\nimport isHotkey from 'is-hotkey';\n\nimport { isBlockSelected, isInlineOrText, toggleElement } from '../../helpers/editor';\nimport { transformLift, transformUnwrap } from '../../helpers/transformers';\nimport { isMarkActive, getAboveNode } from '../../internal/queries';\nimport { KeyboardHandler, PlatePlugin, HotkeyPlugin } from '../../internal/types';\nimport { COMMAND_PROMPT } from '../CommandPalette/constants';\nimport { HeadingComponents } from './components/Heading';\n\nconst buildHeadingEventHandler =\n (type: BLOCKS): KeyboardHandler<HotkeyPlugin> =>\n (editor, { options: { hotkey } }) =>\n (event) => {\n if (editor.selection && hotkey && isHotkey(hotkey, event)) {\n const isActive = isBlockSelected(editor, type);\n editor.tracking.onShortcutAction(isActive ? 'remove' : 'insert', { nodeType: type });\n\n toggleElement(editor, { activeType: type, inactiveType: BLOCKS.PARAGRAPH });\n }\n };\n\nexport const createHeadingPlugin = (): PlatePlugin => ({\n key: 'HeadingPlugin',\n softBreak: [\n // create a new line with SHIFT+Enter inside a heading\n {\n hotkey: 'shift+enter',\n query: {\n allow: HEADINGS,\n },\n },\n ],\n normalizer: [\n {\n match: {\n type: HEADINGS,\n },\n validChildren: (_, [node]) => isInlineOrText(node),\n transform: {\n [BLOCKS.PARAGRAPH]: transformUnwrap,\n default: transformLift,\n },\n },\n ],\n then: (editor) => {\n return {\n exitBreak: [\n // Pressing ENTER at the start or end of a heading text inserts a\n // normal paragraph.\n {\n hotkey: 'enter',\n query: {\n allow: HEADINGS,\n end: true,\n start: true,\n\n // Exclude headings inside lists as it interferes with the list's\n // insertBreak implementation\n filter: ([, path]) =>\n !getAboveNode(editor, {\n at: path,\n match: { type: BLOCKS.LIST_ITEM },\n }) && !isMarkActive(editor, COMMAND_PROMPT),\n },\n },\n ],\n } as Partial<PlatePlugin>;\n },\n plugins: HEADINGS.map((nodeType, idx) => {\n const level = idx + 1;\n const tagName = `h${level}`;\n\n return {\n key: nodeType,\n type: nodeType,\n isElement: true,\n component: HeadingComponents[nodeType],\n options: {\n hotkey: [`mod+alt+${level}`],\n },\n handlers: {\n onKeyDown: buildHeadingEventHandler(nodeType),\n },\n deserializeHtml: {\n rules: [\n {\n validNodeName: tagName.toUpperCase(),\n },\n ],\n },\n };\n }),\n});\n","import React from 'react';\n\nimport { Button, Tooltip } from '@contentful/f36-components';\nimport tokens from '@contentful/f36-tokens';\nimport { css, cx } from 'emotion';\n\nconst styles = {\n button: css({\n height: '30px',\n width: '30px',\n marginLeft: tokens.spacing2Xs,\n marginRight: tokens.spacing2Xs,\n }),\n\n tooltip: css({\n zIndex: Number(tokens.zIndexTooltip),\n }),\n};\n\ninterface ToolbarButtonProps {\n onClick: () => void;\n isActive?: boolean;\n isDisabled?: boolean;\n children: any;\n title: string;\n className?: string;\n testId?: string;\n}\n\nexport function ToolbarButton(props: ToolbarButtonProps) {\n const { title, testId, isActive, children, className, isDisabled = false } = props;\n const handleClick = (event) => {\n event.preventDefault();\n props.onClick();\n };\n\n const button = (\n <Button\n className={cx(styles.button, className)}\n isDisabled={isDisabled}\n startIcon={children}\n onClick={handleClick}\n testId={testId}\n variant={isActive ? 'secondary' : 'transparent'}\n size=\"small\"\n />\n );\n\n if (title) {\n return (\n <Tooltip className={styles.tooltip} placement=\"bottom\" content={title}>\n {button}\n </Tooltip>\n );\n }\n\n return button;\n}\n","import * as React from 'react';\n\nimport { HorizontalRuleIcon } from '@contentful/f36-icons';\nimport tokens from '@contentful/f36-tokens';\nimport { BLOCKS } from '@contentful/rich-text-types';\nimport { css, cx } from 'emotion';\nimport * as Slate from 'slate-react';\n\nimport { useContentfulEditor } from '../../ContentfulEditorProvider';\nimport {\n getNodeEntryFromSelection,\n isBlockSelected,\n moveToTheNextLine,\n focus,\n} from '../../helpers/editor';\nimport { getText } from '../../internal/queries';\nimport { insertNodes, setNodes, removeNodes } from '../../internal/transforms';\nimport { PlatePlugin, PlateEditor } from '../../internal/types';\nimport { ToolbarButton } from '../shared/ToolbarButton';\n\nconst styles = {\n container: css`\n margin: 0 0 ${tokens.spacingL};\n `,\n hr: css`\n margin: 0;\n height: ${tokens.spacingM};\n background: transparent;\n position: relative;\n border: 0;\n user-select: none;\n &:hover {\n cursor: pointer;\n }\n &::after {\n content: '';\n position: absolute;\n width: 100%;\n height: 1px;\n background: ${tokens.gray300};\n top: 50%;\n }\n `,\n hrSelected: css`\n &::after {\n background: ${tokens.colorPrimary};\n -webkit-box-shadow: 0px 0px 5px ${tokens.colorPrimary};\n box-shadow: 0px 0px 5px ${tokens.colorPrimary};\n }\n `,\n};\n\ninterface ToolbarHrButtonProps {\n isDisabled?: boolean;\n}\n\nexport function withHrEvents(editor: PlateEditor) {\n return (event: React.KeyboardEvent) => {\n if (!editor) return;\n\n const [, pathToSelectedHr] = getNodeEntryFromSelection(editor, BLOCKS.HR);\n if (pathToSelectedHr) {\n const isBackspace = event.key === 'Backspace';\n const isDelete = event.key === 'Delete';\n if (isBackspace || isDelete) {\n event.preventDefault();\n removeNodes(editor, { at: pathToSelectedHr });\n }\n }\n };\n}\n\nexport function ToolbarHrButton(props: ToolbarHrButtonProps) {\n const editor = useContentfulEditor();\n\n function handleOnClick() {\n if (!editor?.selection) return;\n\n const hr = {\n type: BLOCKS.HR,\n data: {},\n children: [{ text: '' }],\n isVoid: true,\n };\n\n const hasText = !!getText(editor, editor.selection.focus.path);\n hasText ? insertNodes(editor, hr) : setNodes(editor, hr);\n\n // Move focus to the next paragraph (added by TrailingParagraph plugin)\n moveToTheNextLine(editor);\n\n focus(editor);\n }\n\n if (!editor) return null;\n\n return (\n <ToolbarButton\n title=\"HR\"\n isDisabled={props.isDisabled}\n onClick={handleOnClick}\n testId=\"hr-toolbar-button\"\n isActive={isBlockSelected(editor, BLOCKS.HR)}>\n <HorizontalRuleIcon />\n </ToolbarButton>\n );\n}\n\nexport function Hr(props: Slate.RenderLeafProps) {\n const isSelected = Slate.useSelected();\n const isFocused = Slate.useFocused();\n\n return (\n <div\n {...props.attributes}\n className={styles.container}\n // COMPAT: To make HR copyable in Safari, we verify this attribute below on `deserialize`\n data-void-element={BLOCKS.HR}>\n <div\n draggable={true}\n // Moving `contentEditable` to this div makes it to be selectable when being the first void element, e.g pressing ctrl + a to select everything\n contentEditable={false}>\n <hr className={cx(styles.hr, isSelected && isFocused ? styles.hrSelected : undefined)} />\n </div>\n {props.children}\n </div>\n );\n}\n\nexport const createHrPlugin = (): PlatePlugin => ({\n key: BLOCKS.HR,\n type: BLOCKS.HR,\n isVoid: true,\n isElement: true,\n component: Hr,\n handlers: {\n onKeyDown: withHrEvents,\n },\n deserializeHtml: {\n rules: [\n {\n validNodeName: ['HR'],\n },\n {\n validAttribute: {\n 'data-void-element': BLOCKS.HR,\n },\n },\n ],\n withoutChildren: true,\n },\n});\n","import * as React from 'react';\n\nimport {\n TextLink,\n Button,\n FormControl,\n FormLabel,\n Select,\n TextInput,\n Form,\n ModalContent,\n ModalControls,\n} from '@contentful/f36-components';\nimport tokens from '@contentful/f36-tokens';\nimport { EntityProvider } from '@contentful/field-editor-reference';\nimport { Link } from '@contentful/field-editor-reference/dist/types';\nimport { ModalDialogLauncher, FieldExtensionSDK } from '@contentful/field-editor-shared';\nimport { INLINES } from '@contentful/rich-text-types';\nimport { css } from 'emotion';\n\nimport { getNodeEntryFromSelection, insertLink, LINK_TYPES, focus } from '../../helpers/editor';\nimport getLinkedContentTypeIdsForNodeType from '../../helpers/getLinkedContentTypeIdsForNodeType';\nimport { isNodeTypeEnabled } from '../../helpers/validations';\nimport { withoutNormalizing } from '../../internal';\nimport { getText, isEditorReadOnly } from '../../internal/queries';\nimport { select } from '../../internal/transforms';\nimport { PlateEditor, Path } from '../../internal/types';\nimport { TrackingPluginActions } from '../../plugins/Tracking';\nimport { FetchingWrappedAssetCard } from '../shared/FetchingWrappedAssetCard';\nimport { FetchingWrappedEntryCard } from '../shared/FetchingWrappedEntryCard';\n\nconst styles = {\n removeSelectionLabel: css`\n margin-left: ${tokens.spacingS};\n `,\n};\n\ninterface HyperlinkModalProps {\n linkText?: string;\n linkType?: string;\n linkTarget?: string;\n linkEntity?: Link;\n onClose: (value: unknown) => void;\n sdk: FieldExtensionSDK;\n readonly: boolean;\n}\n\nconst SYS_LINK_TYPES = {\n [INLINES.ENTRY_HYPERLINK]: 'Entry',\n [INLINES.ASSET_HYPERLINK]: 'Asset',\n};\n\nconst LINK_TYPE_SELECTION_VALUES = {\n [INLINES.HYPERLINK]: 'URL',\n [INLINES.ENTRY_HYPERLINK]: 'Entry',\n [INLINES.ASSET_HYPERLINK]: 'Asset',\n};\n\nexport function HyperlinkModal(props: HyperlinkModalProps) {\n const enabledLinkTypes = LINK_TYPES.filter((nodeType) =>\n isNodeTypeEnabled(props.sdk.field, nodeType)\n );\n const [defaultLinkType] = enabledLinkTypes;\n const [linkText, setLinkText] = React.useState(props.linkText ?? '');\n const [linkType, setLinkType] = React.useState(props.linkType ?? defaultLinkType);\n const [linkTarget, setLinkTarget] = React.useState(props.linkTarget ?? '');\n const [linkEntity, setLinkEntity] = React.useState<Link | null>(props.linkEntity ?? null);\n\n function isLinkComplete() {\n const isRegularLink = linkType === INLINES.HYPERLINK;\n if (isRegularLink) {\n return !!(linkText && linkTarget);\n }\n\n const entityLinks: string[] = Object.keys(SYS_LINK_TYPES);\n const isEntityLink = entityLinks.includes(linkType);\n if (isEntityLink) {\n return !!(linkText && linkEntity);\n }\n\n return false;\n }\n\n function handleOnSubmit(event: React.MouseEvent<HTMLButtonElement>) {\n event.preventDefault();\n\n props.onClose({ linkText, linkType, linkTarget, linkEntity });\n }\n\n function entityToLink(entity): Link {\n const { id, type } = entity.sys;\n\n return { sys: { id, type: 'Link', linkType: type } };\n }\n\n async function selectEntry() {\n const options = {\n locale: props.sdk.field.locale,\n contentTypes: getLinkedContentTypeIdsForNodeType(props.sdk.field, INLINES.ENTRY_HYPERLINK),\n };\n const entry = await props.sdk.dialogs.selectSingleEntry(options);\n setLinkTarget('');\n setLinkEntity(entityToLink(entry));\n }\n\n async function selectAsset() {\n const options = {\n locale: props.sdk.field.locale,\n };\n const asset = await props.sdk.dialogs.selectSingleAsset(options);\n setLinkTarget('');\n setLinkEntity(entityToLink(asset));\n }\n\n function resetLinkEntity(event: React.MouseEvent) {\n event.preventDefault();\n\n setLinkEntity(null);\n }\n\n return (\n <EntityProvider sdk={props.sdk}>\n <React.Fragment>\n <ModalContent>\n <Form>\n {!props.linkType && (\n <FormControl id=\"link-text\" isRequired>\n <FormControl.Label>Link text</FormControl.Label>\n <TextInput\n testId=\"link-text-input\"\n name=\"link-text\"\n value={linkText}\n onChange={(event) => setLinkText(event.target.value)}\n />\n </FormControl>\n )}\n\n {enabledLinkTypes.length > 1 && (\n <FormControl id=\"link-type\">\n <FormControl.Label>Link type</FormControl.Label>\n <Select\n value={linkType}\n onChange={(event: React.ChangeEvent<HTMLSelectElement>) =>\n setLinkType(event.target.value)\n }\n testId=\"link-type-input\"\n isDisabled={props.readonly}\n >\n {enabledLinkTypes.map((nodeType) => (\n <Select.Option key={nodeType} value={nodeType}>\n {LINK_TYPE_SELECTION_VALUES[nodeType]}\n </Select.Option>\n ))}\n </Select>\n </FormControl>\n )}\n\n {linkType === INLINES.HYPERLINK && (\n <FormControl id=\"linkTarget\" isRequired>\n <FormControl.Label>Link target</FormControl.Label>\n <TextInput\n name=\"linkTarget\"\n value={linkTarget}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => {\n setLinkEntity(null);\n setLinkTarget(event.target.value);\n }}\n testId=\"link-target-input\"\n isDisabled={props.readonly}\n />\n <FormControl.HelpText>\n A protocol may be required, e.g. https://\n </FormControl.HelpText>\n </FormControl>\n )}\n\n {linkType !== INLINES.HYPERLINK && (\n <div>\n <FormLabel isRequired htmlFor=\"\">\n Link target{' '}\n </FormLabel>\n\n {linkEntity && linkEntity.sys.linkType === SYS_LINK_TYPES[linkType] ? (\n <>\n {!props.readonly && (\n <TextLink\n testId=\"entity-selection-link\"\n onClick={resetLinkEntity}\n className={styles.removeSelectionLabel}\n >\n Remove selection\n </TextLink>\n )}\n <div>\n {linkType === INLINES.ENTRY_HYPERLINK && (\n <FetchingWrappedEntryCard\n sdk={props.sdk}\n locale={props.sdk.field.locale}\n entryId={linkEntity.sys.id}\n isDisabled={true}\n isSelected={false}\n />\n )}\n {linkType === INLINES.ASSET_HYPERLINK && (\n <FetchingWrappedAssetCard\n sdk={props.sdk}\n locale={props.sdk.field.locale}\n assetId={linkEntity.sys.id}\n isDisabled={true}\n isSelected={false}\n />\n )}\n </div>\n </>\n ) : (\n <div>\n {linkType === INLINES.ENTRY_HYPERLINK && (\n <TextLink testId=\"entity-selection-link\" onClick={selectEntry}>\n Select entry\n </TextLink>\n )}\n {linkType === INLINES.ASSET_HYPERLINK && (\n <TextLink testId=\"entity-selection-link\" onClick={selectAsset}>\n Select asset\n </TextLink>\n )}\n </div>\n )}\n </div>\n )}\n </Form>\n </ModalContent>\n <ModalControls>\n <Button\n type=\"button\"\n onClick={() => props.onClose(null)}\n variant=\"secondary\"\n testId=\"cancel-cta\"\n size=\"small\"\n >\n Cancel\n </Button>\n <Button\n type=\"submit\"\n variant=\"positive\"\n size=\"small\"\n isDisabled={props.readonly || !isLinkComplete()}\n onClick={handleOnSubmit}\n testId=\"confirm-cta\"\n >\n {props.linkType ? 'Update' : 'Insert'}\n </Button>\n </ModalControls>\n </React.Fragment>\n </EntityProvider>\n );\n}\n\ninterface HyperLinkDialogData {\n linkText: string;\n linkType: INLINES.HYPERLINK | INLINES.ASSET_HYPERLINK | INLINES.ENTRY_HYPERLINK;\n linkTarget?: string;\n linkEntity?: Link;\n}\n\nexport async function addOrEditLink(\n editor: PlateEditor,\n sdk: FieldExtensionSDK,\n logAction:\n | TrackingPluginActions['onToolbarAction']\n | TrackingPluginActions['onShortcutAction']\n | TrackingPluginActions['onViewportAction'],\n targetPath?: Path\n) {\n const isReadOnly = isEditorReadOnly(editor);\n const selectionBeforeBlur = editor.selection ? { ...editor.selection } : undefined;\n if (!targetPath && !selectionBeforeBlur) return;\n\n let linkType;\n let linkText;\n let linkTarget;\n let linkEntity;\n const [node, path] = getNodeEntryFromSelection(editor, LINK_TYPES, targetPath);\n if (node && path) {\n linkType = node.type;\n linkText = getText(editor, path);\n linkTarget = (node.data as { uri: string }).uri || '';\n linkEntity = (node.data as { target: Link }).target;\n }\n\n const selectionAfterFocus =\n targetPath ?? (selectionBeforeBlur as NonNullable<typeof selectionBeforeBlur>);\n\n const currentLinkText = linkText || (editor.selection ? getText(editor, editor.selection) : '');\n const isEditing = Boolean(node && path);\n\n logAction(isEditing ? 'openEditHyperlinkDialog' : 'openCreateHyperlinkDialog');\n\n const data = await ModalDialogLauncher.openDialog(\n {\n title: isEditing ? 'Edit hyperlink' : 'Insert hyperlink',\n width: 'large',\n shouldCloseOnEscapePress: true,\n shouldCloseOnOverlayClick: true,\n allowHeightOverflow: true,\n },\n ({ onClose }) => {\n return (\n <HyperlinkModal\n linkTarget={linkTarget}\n linkText={currentLinkText}\n linkType={linkType}\n linkEntity={linkEntity}\n onClose={onClose}\n sdk={sdk}\n readonly={isReadOnly}\n />\n );\n }\n );\n select(editor, selectionAfterFocus);\n\n if (!data) {\n focus(editor);\n logAction(isEditing ? 'cancelEditHyperlinkDialog' : 'cancelCreateHyperlinkDialog');\n return;\n }\n\n const {\n linkText: text,\n linkTarget: url,\n linkType: type,\n linkEntity: target,\n } = data as HyperLinkDialogData;\n\n withoutNormalizing(editor, () => {\n insertLink(editor, { text, url, type, target, path });\n });\n\n logAction(isEditing ? 'edit' : 'insert', {\n nodeType: type,\n linkType: target?.sys.linkType ?? 'uri', // we want to keep the same values we've been using for the old editor, which can be `uri`, `Asset` or `Entry`\n });\n\n focus(editor);\n}\n","import * as React from 'react';\n\nimport { FieldExtensionSDK } from '@contentful/app-sdk';\nimport { LinkIcon } from '@contentful/f36-icons';\n\nimport { useContentfulEditor } from '../../../ContentfulEditorProvider';\nimport { isLinkActive, unwrapLink } from '../../../helpers/editor';\nimport { useSdkContext } from '../../../SdkProvider';\nimport { ToolbarButton } from '../../shared/ToolbarButton';\nimport { addOrEditLink } from '../HyperlinkModal';\n\ninterface ToolbarHyperlinkButtonProps {\n isDisabled: boolean | undefined;\n}\n\nexport function ToolbarHyperlinkButton(props: ToolbarHyperlinkButtonProps) {\n const editor = useContentfulEditor();\n const isActive = !!(editor && isLinkActive(editor));\n const sdk: FieldExtensionSDK = useSdkContext();\n\n async function handleClick() {\n if (!editor) return;\n\n if (isActive) {\n unwrapLink(editor);\n editor.tracking.onToolbarAction('unlinkHyperlinks');\n } else {\n addOrEditLink(editor, sdk, editor.tracking.onToolbarAction);\n }\n }\n\n if (!editor) return null;\n\n return (\n <ToolbarButton\n title=\"Hyperlink\"\n testId=\"hyperlink-toolbar-button\"\n onClick={handleClick}\n isActive={isActive}\n isDisabled={props.isDisabled}>\n <LinkIcon />\n </ToolbarButton>\n );\n}\n","import { getScheduleTooltipContent } from '@contentful/field-editor-reference';\nimport { isAncestorEmpty } from '@udecode/plate-core';\n\nimport { getText } from '../../internal/queries';\nimport { NodeEntry } from '../../internal/types';\nimport { PlateEditor } from '../../internal/types';\nimport { FetchedEntityData } from './useEntityInfo';\n\nexport const hasText = (editor: PlateEditor, entry: NodeEntry) => {\n const [node, path] = entry;\n return !isAncestorEmpty(editor, node as any) && getText(editor, path).trim() !== '';\n};\n\nfunction truncate(str: string, length: number) {\n if (typeof str === 'string' && str.length > length) {\n return (\n str &&\n str\n .substr(0, length + 1) // +1 to look ahead and be replaced below.\n // Get rid of orphan letters but not one letter words (I, a, 2).\n // Try to not have “.” as last character to avoid awkward “....”.\n .replace(/(\\s+\\S(?=\\S)|\\s*)\\.?.$/, '…')\n );\n }\n\n return str;\n}\n\nexport function getEntityInfo(data?: FetchedEntityData) {\n if (!data) {\n return '';\n }\n const { entityTitle, contentTypeName, entityStatus, jobs } = data;\n\n const title = truncate(entityTitle, 60) || 'Untitled';\n\n const scheduledActions =\n jobs.length > 0 ? getScheduleTooltipContent({ job: jobs[0], jobsCount: jobs.length }) : '';\n\n return `${contentTypeName || 'Asset'} \"${title}\", ${entityStatus} ${scheduledActions}`;\n}\n","import { useEffect, useState } from 'react';\n\nimport {\n Asset,\n ContentEntityType,\n Entry,\n FieldExtensionSDK,\n Link,\n ScheduledAction,\n} from '@contentful/app-sdk';\nimport { entityHelpers } from '@contentful/field-editor-shared';\n\nimport { getEntityInfo } from './utils';\n\nexport type FetchedEntityData = {\n jobs: ScheduledAction[];\n entity: Entry | Asset;\n entityTitle: string;\n entityDescription: string;\n entityStatus: ReturnType<typeof entityHelpers.getEntryStatus>;\n contentTypeName: string;\n};\n\nasync function fetchAllData({\n sdk,\n entityId,\n entityType,\n localeCode,\n defaultLocaleCode,\n}: {\n sdk: FieldExtensionSDK;\n entityId: string;\n entityType: ContentEntityType;\n localeCode: string;\n defaultLocaleCode: string;\n}): Promise<FetchedEntityData> {\n let contentType;\n\n const getEntity = entityType === 'Entry' ? sdk.space.getEntry : sdk.space.getAsset;\n const entity = await getEntity(entityId);\n if (entity.sys.contentType) {\n const contentTypeId = entity.sys.contentType.sys.id;\n contentType = sdk.space.getCachedContentTypes().find((ct) => ct.sys.id === contentTypeId);\n }\n\n const entityTitle =\n entityType === 'Entry'\n ? entityHelpers.getEntryTitle({\n entry: entity,\n contentType,\n localeCode,\n defaultLocaleCode,\n defaultTitle: 'Untitled',\n })\n : entityHelpers.getAssetTitle({\n asset: entity,\n localeCode,\n defaultLocaleCode,\n defaultTitle: 'Untitled',\n });\n\n const entityDescription = entityHelpers.getEntityDescription({\n entity,\n contentType,\n localeCode,\n defaultLocaleCode,\n });\n\n const jobs = await sdk.space.getEntityScheduledActions(entityType, entityId);\n\n const entityStatus = entityHelpers.getEntryStatus(entity.sys);\n\n return {\n jobs,\n entity,\n entityTitle,\n entityDescription,\n entityStatus,\n contentTypeName: contentType ? contentType.name : '',\n };\n}\n\nexport type EntityInfoProps = {\n target: Link<ContentEntityType>;\n sdk: FieldExtensionSDK;\n onEntityFetchComplete?: VoidFunction;\n};\n\nfunction useRequestStatus({ sdk, target, onEntityFetchComplete }: EntityInfoProps) {\n const [requestStatus, setRequestStatus] = useState<{\n type: 'success' | 'loading' | 'error';\n data?: FetchedEntityData;\n error?: Error;\n }>({ type: 'loading' });\n\n useEffect(() => {\n if (target) {\n fetchAllData({\n sdk,\n entityId: target?.sys?.id,\n entityType: target?.sys?.linkType,\n localeCode: sdk.field.locale,\n defaultLocaleCode: sdk.locales.default,\n })\n .then((entityInfo) => {\n setRequestStatus({ type: 'success', data: entityInfo });\n })\n .catch((e) => {\n console.log(e);\n setRequestStatus({ type: 'error', error: e });\n })\n .finally(() => {\n onEntityFetchComplete?.();\n });\n }\n }, [sdk, target, onEntityFetchComplete]);\n\n return requestStatus;\n}\n\nexport function useEntityInfo(props: EntityInfoProps) {\n const status = useRequestStatus(props);\n\n const { linkType } = props.target.sys;\n\n if (status.type === 'loading') {\n return `Loading ${linkType.toLowerCase()}...`;\n }\n\n if (status.type === 'error') {\n return `${linkType} missing or inaccessible`;\n }\n\n return getEntityInfo(status.data);\n}\n","import tokens from '@contentful/f36-tokens';\nimport { css } from 'emotion';\n\nexport const styles = {\n hyperlinkWrapper: css({\n display: 'inline',\n position: 'static',\n a: {\n fontSize: 'inherit !important',\n },\n }),\n hyperlink: css({\n fontSize: 'inherit !important',\n display: 'inline !important',\n '&:hover': {\n fill: tokens.gray900,\n },\n '&:focus': {\n fill: tokens.gray900,\n },\n }),\n};\n","import * as React from 'react';\n\nimport { FieldExtensionSDK, Link } from '@contentful/app-sdk';\nimport { Tooltip, TextLink } from '@contentful/f36-components';\n\nimport { useContentfulEditor } from '../../../ContentfulEditorProvider';\nimport { fromDOMPoint } from '../../../internal';\nimport { Element, RenderElementProps } from '../../../internal/types';\nimport { useSdkContext } from '../../../SdkProvider';\nimport { addOrEditLink } from '../HyperlinkModal';\nimport { useEntityInfo } from '../useEntityInfo';\nimport { styles } from './styles';\n\nexport type HyperlinkElementProps = {\n element: Element & {\n data: {\n target: {\n sys: {\n id: string;\n linkType: 'Entry' | 'Asset';\n type: 'Link';\n };\n };\n };\n };\n target: Link;\n attributes: Pick<RenderElementProps, 'attributes'>;\n children: Pick<RenderElementProps, 'children'>;\n onEntityFetchComplete: VoidFunction;\n};\n\nexport function EntityHyperlink(props: HyperlinkElementProps) {\n const editor = useContentfulEditor();\n const sdk: FieldExtensionSDK = useSdkContext();\n const { target } = props.element.data;\n const { onEntityFetchComplete } = props;\n\n const tooltipContent = useEntityInfo({\n target,\n sdk,\n onEntityFetchComplete,\n });\n\n if (!target) return null;\n\n function handleClick(event: React.MouseEvent<HTMLAnchorElement>) {\n event.preventDefault();\n event.stopPropagation();\n if (!editor) return;\n\n const p = fromDOMPoint(editor, [event.target as Node, 0]);\n\n if (p) {\n addOrEditLink(editor, sdk, editor.tracking.onViewportAction, p.path);\n }\n }\n\n return (\n <Tooltip\n content={tooltipContent}\n targetWrapperClassName={styles.hyperlinkWrapper}\n placement=\"bottom\"\n maxWidth=\"auto\"\n >\n <TextLink\n as=\"a\"\n onClick={handleClick}\n className={styles.hyperlink}\n data-link-type={target.sys.linkType}\n data-link-id={target.sys.id}\n >\n {props.children}\n </TextLink>\n </Tooltip>\n );\n}\n","import * as React from 'react';\n\nimport { FieldExtensionSDK, Link } from '@contentful/app-sdk';\nimport { Tooltip, TextLink } from '@contentful/f36-components';\n\nimport { useContentfulEditor } from '../../../ContentfulEditorProvider';\nimport { fromDOMPoint } from '../../../internal';\nimport { Element, RenderElementProps } from '../../../internal/types';\nimport { useSdkContext } from '../../../SdkProvider';\nimport { addOrEditLink } from '../HyperlinkModal';\nimport { styles } from './styles';\n\ntype HyperlinkElementProps = {\n element: Element & {\n data: {\n uri?: string;\n target: {\n sys: {\n id: string;\n linkType: 'Entry' | 'Asset';\n type: 'Link';\n };\n };\n };\n };\n target?: Link;\n onEntityFetchComplete?: VoidFunction;\n children: Pick<RenderElementProps, 'children'>;\n};\n\nexport function UrlHyperlink(props: HyperlinkElementProps) {\n const editor = useContentfulEditor();\n const sdk: FieldExtensionSDK = useSdkContext();\n const { uri } = props.element.data;\n\n function handleClick(event: React.MouseEvent<HTMLAnchorElement>) {\n event.preventDefault();\n event.stopPropagation();\n if (!editor) return;\n const p = fromDOMPoint(editor, [event.target as Node, 0], {\n exactMatch: false,\n suppressThrow: false,\n });\n addOrEditLink(editor, sdk, editor.tracking.onViewportAction, p?.path);\n }\n\n return (\n <Tooltip\n content={uri}\n targetWrapperClassName={styles.hyperlinkWrapper}\n placement=\"bottom\"\n maxWidth=\"auto\"\n >\n <TextLink\n as=\"a\"\n href={uri}\n rel=\"noopener noreferrer\"\n onClick={handleClick}\n className={styles.hyperlink}\n >\n {props.children}\n </TextLink>\n </Tooltip>\n );\n}\n","import * as React from 'react';\n\nimport { FieldExtensionSDK } from '@contentful/app-sdk';\nimport { INLINES } from '@contentful/rich-text-types';\nimport { AnyObject, HotkeyPlugin } from '@udecode/plate-core';\nimport isHotkey from 'is-hotkey';\n\nimport { isLinkActive, unwrapLink } from '../../helpers/editor';\nimport { transformRemove } from '../../helpers/transformers';\nimport { PlatePlugin, KeyboardHandler } from '../../internal/types';\nimport { withLinkTracking } from '../links-tracking';\nimport { EntityHyperlink } from './components/EntityHyperlink';\nimport { UrlHyperlink } from './components/UrlHyperlink';\nimport { addOrEditLink } from './HyperlinkModal';\nimport { hasText } from './utils';\n\nconst isAnchor = (element: HTMLElement) =>\n element.nodeName === 'A' &&\n !!element.getAttribute('href') &&\n element.getAttribute('href') !== '#';\n\nconst isEntryAnchor = (element: HTMLElement) =>\n element.nodeName === 'A' && element.getAttribute('data-link-type') === 'Entry';\n\nconst isAssetAnchor = (element: HTMLElement) =>\n element.nodeName === 'A' && element.getAttribute('data-link-type') === 'Asset';\n\nconst buildHyperlinkEventHandler =\n (sdk: FieldExtensionSDK): KeyboardHandler<HotkeyPlugin> =>\n (editor, { options: { hotkey } }) => {\n return (event: React.KeyboardEvent) => {\n if (!editor.selection) {\n return;\n }\n\n if (hotkey && !isHotkey(hotkey, event)) {\n return;\n }\n\n if (isLinkActive(editor)) {\n unwrapLink(editor);\n editor.tracking.onShortcutAction('unlinkHyperlinks');\n } else {\n addOrEditLink(editor, sdk, editor.tracking.onShortcutAction);\n }\n };\n };\n\nconst getNodeOfType = (type: INLINES) => (el: HTMLElement, node: AnyObject) => ({\n type,\n children: node.children,\n data:\n type === INLINES.HYPERLINK\n ? {\n uri: el.getAttribute('href'),\n }\n : {\n target: {\n sys: {\n id: el.getAttribute('data-link-id'),\n linkType: el.getAttribute('data-link-type'),\n type: 'Link',\n },\n },\n },\n});\n\nexport const createHyperlinkPlugin = (sdk: FieldExtensionSDK): PlatePlugin => {\n const common: Partial<PlatePlugin> = {\n isElement: true,\n isInline: true,\n };\n\n return {\n key: 'HyperlinkPlugin',\n options: {\n hotkey: 'mod+k',\n },\n handlers: {\n onKeyDown: buildHyperlinkEventHandler(sdk),\n },\n plugins: [\n // URL Hyperlink\n {\n ...common,\n key: INLINES.HYPERLINK,\n type: INLINES.HYPERLINK,\n component: UrlHyperlink,\n deserializeHtml: {\n rules: [\n {\n validNodeName: ['A'],\n },\n ],\n query: (el) => isAnchor(el) && !(isEntryAnchor(el) || isAssetAnchor(el)),\n getNode: getNodeOfType(INLINES.HYPERLINK),\n },\n },\n // Entry Hyperlink\n {\n ...common,\n key: INLINES.ENTRY_HYPERLINK,\n type: INLINES.ENTRY_HYPERLINK,\n component: withLinkTracking(EntityHyperlink),\n deserializeHtml: {\n rules: [\n {\n validNodeName: ['A'],\n },\n ],\n query: (el) => isEntryAnchor(el),\n getNode: getNodeOfType(INLINES.ENTRY_HYPERLINK),\n },\n },\n // Asset Hyperlink\n {\n ...common,\n key: INLINES.ASSET_HYPERLINK,\n type: INLINES.ASSET_HYPERLINK,\n component: withLinkTracking(EntityHyperlink),\n deserializeHtml: {\n rules: [\n {\n validNodeName: ['A'],\n },\n ],\n query: (el) => isAssetAnchor(el),\n getNode: getNodeOfType(INLINES.ASSET_HYPERLINK),\n },\n },\n ],\n normalizer: [\n {\n match: {\n type: [INLINES.HYPERLINK, INLINES.ASSET_HYPERLINK, INLINES.ENTRY_HYPERLINK],\n },\n validNode: hasText,\n transform: transformRemove,\n },\n ],\n };\n};\n","import * as React from 'react';\n\nimport tokens from '@contentful/f36-tokens';\nimport { BLOCKS } from '@contentful/rich-text-types';\nimport { css, cx } from 'emotion';\nimport * as Slate from 'slate-react';\n\nconst baseStyle = css`\n padding: 0;\n margin: 0 0 1.25rem 1.25rem;\n\n div:first-child {\n margin: 0;\n line-height: ${tokens.lineHeightDefault};\n }\n`;\n\nconst styles = {\n [BLOCKS.UL_LIST]: css`\n list-style-type: disc;\n ul {\n list-style-type: circle;\n ul {\n list-style-type: square;\n }\n }\n `,\n [BLOCKS.OL_LIST]: css`\n list-style-type: decimal;\n ol {\n list-style-type: upper-alpha;\n ol {\n list-style-type: lower-roman;\n ol {\n list-style-type: lower-alpha;\n }\n }\n }\n `,\n};\n\nfunction createList(Tag, block: BLOCKS) {\n return function List(props: Slate.RenderElementProps) {\n return (\n <Tag {...props.attributes} className={cx(baseStyle, styles[block])}>\n {props.children}\n </Tag>\n );\n };\n}\n\nexport const ListUL = createList('ul', BLOCKS.UL_LIST);\nexport const ListOL = createList('ol', BLOCKS.OL_LIST);\n","import * as React from 'react';\n\nimport tokens from '@contentful/f36-tokens';\nimport { css } from 'emotion';\nimport * as Slate from 'slate-react';\n\nconst style = css`\n margin: 0;\n list-style: inherit;\n margin-top: ${tokens.spacingXs};\n\n ol,\n ul {\n margin: 0 0 0 ${tokens.spacingL};\n }\n`;\n\nexport function ListItem(props: Slate.RenderElementProps) {\n return (\n <li {...props.attributes} className={style}>\n {props.children}\n </li>\n );\n}\n","/**\n * Credit: Modified version of Plate's list plugin\n * See: https://github.com/udecode/plate/blob/main/packages/nodes/list\n */\nimport { getListTypes } from '@udecode/plate-list';\n\nimport { withoutNormalizing } from '../../../internal/misc';\nimport {\n getNodeEntry,\n getNodeChildren,\n getNextPath,\n getPreviousPath,\n getLastChildPath,\n match,\n} from '../../../internal/queries';\nimport { wrapNodes, moveNodes } from '../../../internal/transforms';\nimport { NodeEntry, PlateEditor, Element, Path } from '../../../internal/types';\n\nexport interface MoveListItemDownOptions {\n list: NodeEntry;\n listItem: NodeEntry;\n}\n\nexport const moveListItemDown = (\n editor: PlateEditor,\n { list, listItem }: MoveListItemDownOptions\n) => {\n const [listNode] = list;\n const [, listItemPath] = listItem;\n\n let previousListItemPath: Path;\n\n try {\n previousListItemPath = getPreviousPath(listItemPath);\n } catch (e) {\n return;\n }\n\n // Previous sibling is the new parent\n const previousSiblingItem = getNodeEntry(editor, previousListItemPath) as NodeEntry;\n\n if (previousSiblingItem) {\n const [, previousPath] = previousSiblingItem;\n\n const subList = Array.from(getNodeChildren(editor, previousPath)).find(([n, path]) =>\n match(n, path, { type: getListTypes(editor) })\n ) as NodeEntry | undefined;\n\n const newPath = getNextPath(getLastChildPath(subList ?? previousSiblingItem));\n\n withoutNormalizing(editor, () => {\n if (!subList) {\n // Create new sub-list\n wrapNodes(editor, { type: listNode.type, children: [], data: {} } as Element, {\n at: listItemPath,\n });\n }\n\n // Move the current item to the sub-list\n moveNodes(editor, {\n at: listItemPath,\n to: newPath,\n });\n });\n }\n};\n","/**\n * Credit: Modified version of Plate's list plugin\n * See: https://github.com/udecode/plate/blob/main/packages/nodes/list\n */\nimport { isListNested, ELEMENT_LIC, getListItemEntry, moveListItemUp } from '@udecode/plate-list';\n\nimport { withoutNormalizing } from '../../../internal/misc';\nimport {\n getNodeEntries,\n getPluginType,\n createPathRef,\n getParentPath,\n isAncestorPath,\n} from '../../../internal/queries';\nimport { EditorNodesOptions, PlateEditor, Path, PathRef } from '../../../internal/types';\nimport { moveListItemDown } from './moveListItemDown';\n\nexport type MoveListItemsOptions = {\n increase?: boolean;\n at?: EditorNodesOptions['at'];\n};\n\nexport const moveListItems = (\n editor: PlateEditor,\n { increase = true, at = editor.selection ?? undefined }: MoveListItemsOptions = {}\n) => {\n const _nodes = getNodeEntries(editor, {\n at,\n match: {\n type: getPluginType(editor, ELEMENT_LIC),\n },\n });\n\n // Get the selected lic\n const lics = Array.from(_nodes);\n\n if (!lics.length) return;\n\n const highestLicPaths: Path[] = [];\n const highestLicPathRefs: PathRef[] = [];\n\n // Filter out the nested lic, we just need to move the highest ones\n lics.forEach((lic) => {\n const licPath = lic[1];\n const liPath = getParentPath(licPath);\n\n const isAncestor = highestLicPaths.some((path) => {\n const highestLiPath = getParentPath(path);\n\n return isAncestorPath(highestLiPath, liPath);\n });\n if (!isAncestor) {\n highestLicPaths.push(licPath);\n highestLicPathRefs.push(createPathRef(editor, licPath));\n }\n });\n\n const licPathRefsToMove = increase ? highestLicPathRefs : highestLicPathRefs.reverse();\n\n withoutNormalizing(editor, () => {\n licPathRefsToMove.forEach((licPathRef) => {\n const licPath = licPathRef.unref();\n if (!licPath) return;\n\n const liEntry = getListItemEntry(editor, { at: licPath });\n\n if (!liEntry) {\n return;\n }\n\n if (increase) {\n moveListItemDown(editor, liEntry);\n } else if (isListNested(editor, liEntry.list[1])) {\n moveListItemUp(editor, liEntry);\n }\n });\n });\n};\n","import * as p from '@udecode/plate-core';\n\nexport const ELEMENT_DEFAULT = p.ELEMENT_DEFAULT;\n","/**\n * Credit: Modified version of Plate's list plugin\n * See: https://github.com/udecode/plate/blob/main/packages/nodes/list\n */\nimport { BLOCKS } from '@contentful/rich-text-types';\n\nimport { withoutNormalizing } from '../../../internal';\nimport { getNodeEntries, isElement } from '../../../internal/queries';\nimport { unwrapNodes, liftNodes } from '../../../internal/transforms';\nimport { PlateEditor, Path } from '../../../internal/types';\n\nfunction hasUnliftedListItems(editor: PlateEditor, at?: Path) {\n return getNodeEntries(editor, {\n at,\n match: (node, path) => isElement(node) && node.type === BLOCKS.LIST_ITEM && path.length >= 2,\n }).next().done;\n}\nexport const unwrapList = (editor: PlateEditor, { at }: { at?: Path } = {}) => {\n withoutNormalizing(editor, () => {\n do {\n // lift list items to the root level\n liftNodes(editor, {\n at,\n match: (node) => isElement(node) && node.type === BLOCKS.LIST_ITEM,\n mode: 'lowest',\n });\n } while (!hasUnliftedListItems(editor, at));\n\n // finally unwrap all lifted items\n unwrapNodes(editor, {\n at,\n match: { type: BLOCKS.LIST_ITEM },\n split: false,\n });\n });\n};\n","/**\n * Credit: Modified version of Plate's list plugin\n * See: https://github.com/udecode/plate/blob/main/packages/nodes/list\n */\nimport { BLOCKS } from '@contentful/rich-text-types';\nimport { ELEMENT_LIC } from '@udecode/plate-list';\nimport { getListItemEntry } from '@udecode/plate-list';\n\nimport { ELEMENT_DEFAULT } from '../../../internal/constants';\nimport { withoutNormalizing } from '../../../internal/misc';\nimport {\n findNode,\n getNodeEntries,\n isRangeCollapsed,\n getRangeEdges,\n isRangeAcrossBlocks,\n getParentNode,\n getPluginType,\n getCommonNode,\n getRangeStart,\n getRangeEnd,\n} from '../../../internal/queries';\nimport { setNodes, wrapNodes } from '../../../internal/transforms';\nimport { PlateEditor, Element, Location, NodeEntry } from '../../../internal/types';\nimport { unwrapList } from './unwrapList';\n\nconst listTypes = [BLOCKS.UL_LIST, BLOCKS.OL_LIST] as string[];\n\nexport const toggleList = (editor: PlateEditor, { type }: { type: string }) =>\n withoutNormalizing(editor, () => {\n if (!editor.selection) {\n return;\n }\n\n if (isRangeCollapsed(editor.selection) || !isRangeAcrossBlocks(editor)) {\n // selection is collapsed\n const res = getListItemEntry(editor);\n\n if (res) {\n const { list } = res;\n if (list[0].type !== type) {\n setNodes(\n editor,\n { type },\n {\n at: editor.selection,\n match: (n) => listTypes.includes(n.type as string),\n mode: 'lowest',\n }\n );\n } else {\n unwrapList(editor);\n }\n } else {\n const list = { type, children: [], data: {} };\n wrapNodes(editor, list);\n\n const nodes = [\n ...getNodeEntries(editor, {\n match: { type: getPluginType(editor, ELEMENT_DEFAULT) },\n }),\n ];\n\n const listItem = {\n type: BLOCKS.LIST_ITEM,\n children: [],\n data: {},\n };\n\n for (const [, path] of nodes) {\n wrapNodes(editor, listItem, {\n at: path,\n });\n }\n }\n } else {\n // selection is a range\n\n const [startPoint, endPoint] = getRangeEdges(editor.selection);\n const commonEntry = getCommonNode(editor, startPoint.path, endPoint.path) as NodeEntry;\n\n if (\n listTypes.includes((commonEntry[0] as Element).type) ||\n commonEntry[0].type === BLOCKS.LIST_ITEM\n ) {\n let listType = commonEntry[0].type;\n if (commonEntry[0].type === BLOCKS.LIST_ITEM) {\n listType = (getParentNode(editor, commonEntry[1] as Location)?.[0] as Element | undefined)\n ?.type;\n }\n if (listType !== type) {\n const startList = findNode(editor, {\n at: getRangeStart(editor.selection),\n match: { type: listTypes },\n mode: 'lowest',\n });\n\n const endList = findNode(editor, {\n at: getRangeEnd(editor.selection),\n match: { type: listTypes },\n mode: 'lowest',\n });\n\n if (!startList || !endList) {\n return;\n }\n\n const rangeLength = Math.min(startList[1].length, endList[1].length);\n setNodes(\n editor,\n { type },\n {\n at: editor.selection,\n match: (n, path) =>\n listTypes.includes(n.type as string) && path.length >= rangeLength,\n mode: 'all',\n }\n );\n } else {\n unwrapList(editor);\n }\n } else {\n const rootPathLength = commonEntry[1].length;\n const nodes = (\n Array.from(\n getNodeEntries(editor, {\n mode: 'all',\n })\n ) as NodeEntry[]\n )\n .filter(([, path]) => path.length === rootPathLength + 1)\n .reverse();\n\n nodes.forEach((n) => {\n if (listTypes.includes(n[0].type as string)) {\n setNodes(editor, { type }, { at: n[1] });\n } else {\n setNodes(editor, { type: getPluginType(editor, ELEMENT_LIC) }, { at: n[1] });\n\n const listItem = {\n type: BLOCKS.LIST_ITEM,\n children: [],\n data: {},\n };\n\n wrapNodes(editor, listItem, {\n at: n[1],\n });\n\n const list = { type, children: [], data: {} };\n wrapNodes(editor, list, { at: n[1] });\n }\n });\n }\n }\n });\n","/**\n * Credit: Modified version of Plate's list plugin\n * See: https://github.com/udecode/plate/blob/main/packages/nodes/list\n */\nimport { HotkeyPlugin } from '@udecode/plate-core';\nimport isHotkey from 'is-hotkey';\nimport castArray from 'lodash/castArray';\n\nimport { getAboveNode } from '../../internal/queries';\nimport { KeyboardHandler } from '../../internal/types';\nimport { moveListItems } from './transforms/moveListItems';\nimport { toggleList } from './transforms/toggleList';\n\nexport const onKeyDownList: KeyboardHandler<HotkeyPlugin> =\n (editor, { type, options: { hotkey } }) =>\n (e) => {\n if (e.key === 'Tab' && editor.selection) {\n const listSelected = getAboveNode(editor, {\n at: editor.selection,\n match: { type },\n });\n\n if (listSelected) {\n e.preventDefault();\n moveListItems(editor, { increase: !e.shiftKey });\n return;\n }\n }\n\n if (!hotkey) return;\n\n const hotkeys = castArray(hotkey);\n\n for (const _hotkey of hotkeys) {\n if (isHotkey(_hotkey)(e)) {\n toggleList(editor, { type });\n }\n }\n };\n","import { BLOCKS } from '@contentful/rich-text-types';\n\nimport {\n isText,\n getCommonNode,\n isRangeExpanded,\n getRangeEdges,\n getChildren,\n getAboveNode,\n getBlockAbove,\n getParentNode,\n} from '../../internal/queries';\nimport { insertNodes, removeNodes, wrapNodes } from '../../internal/transforms';\nimport { Node, NodeEntry, PlateEditor, Path, Element } from '../../internal/types';\n\nconst isList = (node: Node) => [BLOCKS.OL_LIST, BLOCKS.UL_LIST].includes(node.type as BLOCKS);\n\nexport const hasListAsDirectParent = (editor: PlateEditor, [, path]: NodeEntry) => {\n const [parentNode] = (getParentNode(editor, path) || []) as NodeEntry;\n return isList(parentNode);\n};\n\nconst getNearestListAncestor = (editor: PlateEditor, path: Path) => {\n return getAboveNode(editor, { at: path, mode: 'lowest', match: isList }) || [];\n};\n\n/**\n * Places orphaned list items in a list. If there's a list somewhere\n * in the node's ancestors, defaults to that list type, else places\n * the list item in an unordered list.\n */\nexport const normalizeOrphanedListItem = (editor: PlateEditor, [, path]: NodeEntry) => {\n const [parentList] = getNearestListAncestor(editor, path);\n const parentListType = parentList?.type as string | undefined;\n\n wrapNodes(\n editor,\n { type: parentListType || BLOCKS.UL_LIST, children: [], data: {} },\n { at: path }\n );\n};\n\nexport const isNonEmptyListItem = (_: PlateEditor, entry: NodeEntry) => {\n const listItemChildren = getChildren(entry);\n\n return listItemChildren.length !== 0;\n};\n\nexport const firstNodeIsNotList = (_editor: PlateEditor, [node]: NodeEntry<Element>) => {\n if (node.children.length === 1) {\n const firstNode = node.children[0];\n\n return !isText(firstNode) && !isList(firstNode);\n }\n\n return true;\n};\n\nexport const insertParagraphAsChild = (editor: PlateEditor, [, path]: NodeEntry) => {\n insertNodes(editor, [{ type: BLOCKS.PARAGRAPH, data: {}, children: [{ text: '' }] }], {\n at: path.concat([0]),\n });\n};\n\nexport const replaceNodeWithListItems = (editor: PlateEditor, entry: NodeEntry<Element>) => {\n const [node, path] = entry;\n\n removeNodes(editor, { at: path });\n insertNodes(editor, (node.children[0] as Element).children, { at: path });\n};\n\nexport const isListTypeActive = (editor: PlateEditor, type: BLOCKS): boolean => {\n const { selection } = editor;\n\n if (!selection) {\n return false;\n }\n\n if (isRangeExpanded(selection)) {\n const [start, end] = getRangeEdges(selection);\n const node = getCommonNode(editor, start.path, end.path);\n\n if (node[0].type === type) {\n return true;\n }\n }\n\n // Lists can be nested. Here, we take the list type at the lowest level\n const listNode = getBlockAbove(editor, {\n match: {\n type: [BLOCKS.OL_LIST, BLOCKS.UL_LIST],\n },\n mode: 'lowest',\n });\n\n return listNode?.[0].type === type;\n};\n","import { BLOCKS, TEXT_CONTAINERS } from '@contentful/rich-text-types';\n\nimport { withoutNormalizing } from '../../../internal';\nimport {\n getAboveNode,\n getParentNode,\n isFirstChildPath,\n isSelectionAtBlockEnd,\n isSelectionAtBlockStart,\n getMarks,\n getNextPath,\n} from '../../../internal/queries';\nimport {\n select,\n insertNodes,\n moveChildren,\n splitNodes,\n collapseSelection,\n} from '../../../internal/transforms';\nimport { Element, PlateEditor } from '../../../internal/types';\n\n/**\n * Build a new list item node while preserving marks\n */\nconst emptyListItemNode = (editor: PlateEditor, withChildren = false): Element => {\n let children: Element[] = [];\n\n if (withChildren) {\n const marks = getMarks(editor) || {};\n\n children = [\n {\n type: BLOCKS.PARAGRAPH,\n data: {},\n children: [{ text: '', ...marks }],\n },\n ];\n }\n\n return {\n type: BLOCKS.LIST_ITEM,\n data: {},\n children,\n };\n};\n\n/**\n * Insert list item if selection is in li>p.\n */\nexport const insertListItem = (editor: PlateEditor): boolean => {\n if (!editor.selection) {\n return false;\n }\n\n // Naming it paragraph for simplicity but can be a heading as well\n const paragraph = getAboveNode(editor, { match: { type: TEXT_CONTAINERS } });\n if (!paragraph) {\n return false;\n }\n\n const [, paragraphPath] = paragraph;\n const listItem = getParentNode(editor, paragraphPath);\n\n if (!listItem) {\n return false;\n }\n\n const [listItemNode, listItemPath] = listItem;\n\n if (listItemNode.type !== BLOCKS.LIST_ITEM) {\n return false;\n }\n\n // We are in a li>p (or heading)\n\n withoutNormalizing(editor, () => {\n if (!editor.selection) {\n return;\n }\n\n // Check the cursor position in the current paragraph\n const isAtStart = isSelectionAtBlockStart(editor);\n const isAtEnd = isSelectionAtBlockEnd(editor);\n\n const isAtStartOfListItem = isAtStart && isFirstChildPath(paragraphPath);\n const shouldSplit = !isAtStart && !isAtEnd;\n\n // Split the current paragraph content if necessary\n if (shouldSplit) {\n splitNodes(editor);\n }\n\n // Insert the new li\n const newListItemPath = isAtStartOfListItem ? listItemPath : getNextPath(listItemPath);\n\n insertNodes(\n editor,\n // Add an empty paragraph to the new li if We will not move some\n // paragraphs over there.\n emptyListItemNode(editor, !shouldSplit),\n { at: newListItemPath }\n );\n\n // Move children *after* selection to the new li\n const fromPath = isAtStart ? paragraphPath : getNextPath(paragraphPath);\n const fromStartIndex = fromPath[fromPath.length - 1] || 0;\n\n // On split we don't add paragraph to the new li so we move\n // content to the very beginning. Otherwise, account for the empty\n // paragraph at the beginning by moving the content after\n const toPath = newListItemPath.concat([shouldSplit ? 0 : 1]);\n\n if (!isAtStartOfListItem) {\n moveChildren(editor, {\n at: listItemPath,\n to: toPath,\n fromStartIndex,\n });\n }\n\n // Move cursor to the start of the new li\n select(editor, newListItemPath);\n collapseSelection(editor, { edge: 'start' });\n });\n\n // Returning True skips processing other editor.insertBreak handlers\n return true;\n};\n","/**\n * Credit: Copied & modified version from Plate's list plugin to support\n * list items with multiple children.\n *\n * See: https://github.com/udecode/plate/blob/main/packages/nodes/list\n */\nimport { BLOCKS, TEXT_CONTAINERS } from '@contentful/rich-text-types';\nimport { ELEMENT_DEFAULT, getPluginType, isBlockAboveEmpty, mockPlugin } from '@udecode/plate-core';\nimport { getListItemEntry, moveListItemUp, unwrapList, ELEMENT_LI } from '@udecode/plate-list';\nimport { onKeyDownResetNode, ResetNodePlugin, SIMULATE_BACKSPACE } from '@udecode/plate-reset-node';\n\nimport { PlateEditor, Value } from '../../internal/types';\nimport { insertListItem } from './transforms/insertListItem';\n\nconst listBreak = (editor: PlateEditor): boolean => {\n if (!editor.selection) return false;\n\n const res = getListItemEntry(editor, {});\n let moved: boolean | undefined;\n\n // If selection is in a li\n if (res) {\n const { list, listItem } = res;\n\n const childNode = listItem[0].children[0];\n\n // If selected li is empty, move it up.\n if (\n isBlockAboveEmpty(editor) &&\n listItem[0].children.length === 1 &&\n TEXT_CONTAINERS.includes(childNode.type as BLOCKS)\n ) {\n moved = moveListItemUp(editor, {\n list,\n listItem,\n });\n\n if (moved) return true;\n }\n }\n\n const didReset = onKeyDownResetNode(\n editor,\n mockPlugin<ResetNodePlugin, Value, PlateEditor>({\n options: {\n rules: [\n {\n types: [getPluginType(editor, ELEMENT_LI)],\n defaultType: getPluginType(editor, ELEMENT_DEFAULT),\n predicate: () => !moved && isBlockAboveEmpty(editor),\n onReset: (_editor) => unwrapList(_editor),\n },\n ],\n },\n })\n )(SIMULATE_BACKSPACE);\n if (didReset) {\n return true;\n }\n\n /**\n * If selection is in li > p, insert li.\n */\n if (!moved) {\n const inserted = insertListItem(editor);\n if (inserted) return true;\n }\n\n return false;\n};\n\nexport const insertListBreak = (editor: PlateEditor) => {\n const { insertBreak } = editor;\n\n return () => {\n if (listBreak(editor)) return;\n\n insertBreak();\n };\n};\n","/**\n * Credit: Modified version of Plate's list plugin\n * See: https://github.com/udecode/plate/blob/main/packages/nodes/list\n */\nimport { TEXT_CONTAINERS, BLOCKS } from '@contentful/rich-text-types';\nimport { findNode } from '@udecode/plate-core';\n\nimport {\n isBlockNode,\n isAncestorPath,\n getCommonNode,\n getNodeTexts,\n getParentPath,\n getDescendantNodeByPath,\n} from '../../internal/queries';\nimport { insertNodes } from '../../internal/transforms';\nimport { PlateEditor, NodeEntry, Node, Element } from '../../internal/types';\n\nconst getFirstAncestorOfType = (root: Node, entry: NodeEntry): NodeEntry => {\n let ancestor = getParentPath(entry[1]);\n while (getDescendantNodeByPath(root, ancestor).type !== BLOCKS.LIST_ITEM) {\n ancestor = getParentPath(ancestor);\n }\n\n return [getDescendantNodeByPath(root, ancestor), ancestor];\n};\n\nconst isListRoot = (node: Node): boolean =>\n [BLOCKS.UL_LIST, BLOCKS.OL_LIST].includes((node as Element).type as BLOCKS);\n\n/**\n * Removes the \"empty\" leading lis. Empty in this context means lis only with other lis as children.\n *\n * @returns If argument is not a list root, returns it, otherwise returns ul[] or li[].\n */\nconst trimList = (listRoot: Node): Node[] => {\n if (!isListRoot(listRoot)) {\n return [listRoot];\n }\n\n const textEntries = Array.from(getNodeTexts(listRoot));\n\n const commonAncestorEntry = textEntries.reduce<NodeEntry>(\n (commonAncestor, textEntry) =>\n isAncestorPath(commonAncestor[1], textEntry[1])\n ? commonAncestor\n : getCommonNode(listRoot, textEntry[1], commonAncestor[1]),\n // any list item would do, we grab the first one\n getFirstAncestorOfType(listRoot, textEntries[0])\n );\n\n return isListRoot(commonAncestorEntry[0])\n ? (commonAncestorEntry[0].children as Node[])\n : [commonAncestorEntry[0]];\n};\n\n/**\n * Removes leading li when pasting a single li with a single child.\n */\nconst trimLiWrapper = (nodes: Node[]): Node[] => {\n if (nodes.length !== 1) {\n return nodes;\n }\n\n const node = nodes[0];\n\n if (node.type !== BLOCKS.LIST_ITEM || (node as Element).children.length !== 1) {\n return nodes;\n }\n\n return node.children as Node[];\n};\n\nconst unwrapTextContainerAtStart = (nodes: Node[]): Node[] => {\n const node = nodes[0];\n\n if (TEXT_CONTAINERS.includes((node as Element).type as BLOCKS)) {\n return [...(node as Element).children, ...nodes.slice(1)];\n }\n\n return nodes;\n};\n\nexport const insertListFragment = (editor: PlateEditor) => {\n const { insertFragment } = editor;\n\n return (fragment: Node[]) => {\n if (!editor.selection) {\n return;\n }\n\n const liEntry = findNode(editor, {\n match: { type: BLOCKS.LIST_ITEM },\n mode: 'lowest',\n });\n\n if (liEntry) {\n const nodes = unwrapTextContainerAtStart(\n trimLiWrapper(fragment.flatMap((node) => trimList(node)))\n );\n\n let firstBlockIndex = nodes.findIndex((node) => isBlockNode(editor, node));\n\n if (firstBlockIndex < 0) {\n firstBlockIndex = nodes.length;\n }\n\n const inlines = nodes.slice(0, firstBlockIndex);\n const blocks = nodes.slice(firstBlockIndex);\n\n // Two calls to insertNodes are required here. Otherwise, all blocks\n // after a text or inline element occurrence will be unwrapped for\n // some reason.\n insertNodes(editor, inlines, {\n at: editor.selection,\n select: true,\n });\n\n return insertNodes(editor, blocks, {\n at: editor.selection,\n select: true,\n });\n }\n\n const filtered = isListRoot(fragment[0]) ? [{ text: '' }, ...fragment] : fragment;\n\n return insertFragment(filtered);\n };\n};\n","/**\n * Credit: Modified version of Plate's list plugin\n * See: https://github.com/udecode/plate/blob/main/packages/nodes/list\n */\nimport { LIST_ITEM_BLOCKS } from '@contentful/rich-text-types';\nimport { normalizeList, deleteFragmentList, deleteForwardList } from '@udecode/plate-list';\n\nimport { WithOverride } from '../../internal/types';\nimport { insertListBreak } from './insertListBreak';\nimport { insertListFragment } from './insertListFragment';\n\nconst validLiChildrenTypes = LIST_ITEM_BLOCKS;\n\nexport const withList: WithOverride = (editor) => {\n const { deleteForward, deleteFragment } = editor;\n\n editor.deleteForward = (unit) => {\n if (deleteForwardList(editor)) return;\n\n deleteForward(unit);\n };\n\n editor.deleteFragment = () => {\n if (deleteFragmentList(editor)) return;\n\n deleteFragment();\n };\n\n editor.insertBreak = insertListBreak(editor);\n\n editor.insertFragment = insertListFragment(editor);\n\n // TODO: replace with our own Normalizer rules\n editor.normalizeNode = normalizeList(editor, { validLiChildrenTypes });\n\n return editor;\n};\n","import { BLOCKS, LIST_ITEM_BLOCKS } from '@contentful/rich-text-types';\nimport {\n createListPlugin as createPlateListPlugin,\n ELEMENT_LI,\n ELEMENT_UL,\n ELEMENT_OL,\n ELEMENT_LIC,\n} from '@udecode/plate-list';\n\nimport { transformParagraphs, transformWrapIn } from '../../helpers/transformers';\nimport { PlatePlugin, PlateEditor, Value } from '../../internal/types';\nimport { ListOL, ListUL } from './components/List';\nimport { ListItem } from './components/ListItem';\nimport { onKeyDownList } from './onKeyDownList';\nimport {\n isNonEmptyListItem,\n hasListAsDirectParent,\n insertParagraphAsChild,\n normalizeOrphanedListItem,\n firstNodeIsNotList,\n replaceNodeWithListItems,\n} from './utils';\nimport { withList } from './withList';\n\nexport const createListPlugin = (): PlatePlugin =>\n createPlateListPlugin<any, Value, PlateEditor>({\n normalizer: [\n {\n match: {\n type: [BLOCKS.UL_LIST, BLOCKS.OL_LIST],\n },\n validChildren: [BLOCKS.LIST_ITEM],\n transform: transformWrapIn(BLOCKS.LIST_ITEM),\n },\n ],\n overrideByKey: {\n [ELEMENT_UL]: {\n type: BLOCKS.UL_LIST,\n component: ListUL,\n handlers: {\n onKeyDown: onKeyDownList,\n },\n // The withList is added on ELEMENT_UL plugin in upstream code\n // so we need to override it here\n withOverrides: withList,\n },\n [ELEMENT_OL]: {\n type: BLOCKS.OL_LIST,\n component: ListOL,\n handlers: {\n onKeyDown: onKeyDownList,\n },\n },\n // ELEMENT_LIC is a child of li, Slate does ul > li > lic + ul\n [ELEMENT_LIC]: {\n type: BLOCKS.PARAGRAPH,\n },\n [ELEMENT_LI]: {\n type: BLOCKS.LIST_ITEM,\n component: ListItem,\n // @ts-expect-error\n normalizer: [\n {\n validNode: hasListAsDirectParent,\n transform: normalizeOrphanedListItem,\n },\n {\n validNode: isNonEmptyListItem,\n transform: insertParagraphAsChild,\n },\n {\n validChildren: LIST_ITEM_BLOCKS,\n transform: transformParagraphs,\n },\n {\n validNode: firstNodeIsNotList,\n transform: replaceNodeWithListItems,\n },\n ],\n },\n },\n });\n","import * as React from 'react';\n\nimport { ListBulletedIcon, ListNumberedIcon } from '@contentful/f36-icons';\nimport { BLOCKS } from '@contentful/rich-text-types';\n\nimport { useContentfulEditor } from '../../../ContentfulEditorProvider';\nimport { focus } from '../../../helpers/editor';\nimport { isNodeTypeEnabled } from '../../../helpers/validations';\nimport { useSdkContext } from '../../../SdkProvider';\nimport { ToolbarButton } from '../../shared/ToolbarButton';\nimport { toggleList } from '../transforms/toggleList';\nimport { isListTypeActive } from '../utils';\n\nexport interface ToolbarListButtonProps {\n isDisabled?: boolean;\n}\n\nexport function ToolbarListButton(props: ToolbarListButtonProps) {\n const sdk = useSdkContext();\n const editor = useContentfulEditor();\n\n function handleClick(type: BLOCKS): () => void {\n return () => {\n if (!editor?.selection) return;\n\n toggleList(editor, { type });\n\n focus(editor);\n };\n }\n\n if (!editor) return null;\n\n return (\n <React.Fragment>\n {isNodeTypeEnabled(sdk.field, BLOCKS.UL_LIST) && (\n <ToolbarButton\n title=\"UL\"\n testId=\"ul-toolbar-button\"\n onClick={handleClick(BLOCKS.UL_LIST)}\n isActive={isListTypeActive(editor, BLOCKS.UL_LIST)}\n isDisabled={props.isDisabled}\n >\n <ListBulletedIcon />\n </ToolbarButton>\n )}\n {isNodeTypeEnabled(sdk.field, BLOCKS.OL_LIST) && (\n <ToolbarButton\n title=\"OL\"\n testId=\"ol-toolbar-button\"\n onClick={handleClick(BLOCKS.OL_LIST)}\n isActive={isListTypeActive(editor, BLOCKS.OL_LIST)}\n isDisabled={props.isDisabled}\n >\n <ListNumberedIcon />\n </ToolbarButton>\n )}\n </React.Fragment>\n );\n}\n","import { MARKS } from '@contentful/rich-text-types';\nimport isHotkey from 'is-hotkey';\n\nimport { isMarkActive } from '../../internal/queries';\nimport { toggleMark } from '../../internal/transforms';\nimport { PlateEditor, HotkeyPlugin, KeyboardHandler } from '../../internal/types';\n\nexport const toggleMarkAndDeactivateConflictingMarks = (editor: PlateEditor, mark: MARKS) => {\n const subs = [MARKS.SUPERSCRIPT, MARKS.SUBSCRIPT];\n const clear = subs.includes(mark) ? subs : [];\n toggleMark(editor, { key: mark, clear });\n};\n\nexport const buildMarkEventHandler =\n (type: MARKS): KeyboardHandler<HotkeyPlugin> =>\n (editor, { options: { hotkey } }) =>\n (event) => {\n if (editor.selection && hotkey && isHotkey(hotkey, event)) {\n event.preventDefault();\n\n const isActive = isMarkActive(editor, type);\n editor.tracking.onShortcutAction(isActive ? 'unmark' : 'mark', { markType: type });\n toggleMarkAndDeactivateConflictingMarks(editor, type);\n }\n };\n","import * as React from 'react';\n\nimport { Menu } from '@contentful/f36-components';\nimport tokens from '@contentful/f36-tokens';\nimport { MARKS } from '@contentful/rich-text-types';\nimport { css, cx } from 'emotion';\n\nimport { useContentfulEditor } from '../../../ContentfulEditorProvider';\nimport { focus } from '../../../helpers/editor';\nimport { isMarkActive } from '../../../internal/queries';\nimport { ToolbarButton } from '../../shared/ToolbarButton';\nimport { toggleMarkAndDeactivateConflictingMarks } from '../helpers';\n\nexport interface MarkOptions {\n mark: MARKS;\n title: string;\n icon?: React.ReactElement;\n}\n\nconst styles = {\n isActive: css({\n backgroundColor: tokens.blue100,\n color: tokens.blue600,\n }),\n};\n\nexport const createMarkToolbarButton = ({ mark, title, icon }: MarkOptions) => {\n const Mark = ({ isDisabled }: { isDisabled?: boolean }) => {\n const editor = useContentfulEditor();\n\n const handleClick = React.useCallback(() => {\n if (!editor?.selection) return;\n\n const isActive = isMarkActive(editor, mark);\n editor.tracking.onToolbarAction(isActive ? 'unmark' : 'mark', { markType: mark });\n\n toggleMarkAndDeactivateConflictingMarks(editor, mark);\n focus(editor);\n }, [editor]);\n\n if (!editor) return null;\n\n if (!icon) {\n return (\n <Menu.Item\n onClick={handleClick}\n disabled={isDisabled}\n className={cx({\n [styles.isActive]: isMarkActive(editor, mark),\n })}\n testId={`${mark}-toolbar-button`}\n >\n {title}\n </Menu.Item>\n );\n }\n\n return (\n <ToolbarButton\n title={title}\n testId={`${mark}-toolbar-button`}\n onClick={handleClick}\n isActive={isMarkActive(editor, mark)}\n isDisabled={isDisabled}\n >\n {icon}\n </ToolbarButton>\n );\n };\n\n Mark.displayName = mark;\n\n return Mark;\n};\n","import * as React from 'react';\n\nimport { FormatBoldIcon } from '@contentful/f36-icons';\nimport { MARKS } from '@contentful/rich-text-types';\nimport { createBoldPlugin as createDefaultBoldPlugin } from '@udecode/plate-basic-marks';\nimport { css } from 'emotion';\n\nimport { someHtmlElement } from '../../internal/queries';\nimport { PlatePlugin, RenderLeafProps } from '../../internal/types';\nimport { createMarkToolbarButton } from './components/MarkToolbarButton';\nimport { buildMarkEventHandler } from './helpers';\n\nexport const ToolbarBoldButton = createMarkToolbarButton({\n title: 'Bold',\n mark: MARKS.BOLD,\n icon: <FormatBoldIcon />,\n});\n\nconst styles = {\n bold: css({\n fontWeight: 600,\n }),\n};\n\nexport function Bold(props: RenderLeafProps) {\n return (\n <strong {...props.attributes} className={styles.bold}>\n {props.children}\n </strong>\n );\n}\n\nconst isGoogleBoldWrapper = (el: HTMLElement) =>\n el.id.startsWith('docs-internal-guid') && el.nodeName === 'B';\n\nexport const createBoldPlugin = (): PlatePlugin =>\n createDefaultBoldPlugin({\n type: MARKS.BOLD,\n component: Bold,\n options: {\n hotkey: ['mod+b'],\n },\n handlers: {\n onKeyDown: buildMarkEventHandler(MARKS.BOLD),\n },\n deserializeHtml: {\n rules: [\n { validNodeName: ['STRONG', 'B'] },\n {\n validStyle: {\n fontWeight: ['600', '700', 'bold'],\n },\n },\n ],\n query: (el) => {\n return (\n !isGoogleBoldWrapper(el) &&\n !someHtmlElement(el, (node) => node.style.fontWeight === 'normal')\n );\n },\n },\n });\n","import * as React from 'react';\n\nimport { CodeIcon } from '@contentful/f36-icons';\nimport { MARKS } from '@contentful/rich-text-types';\nimport { createCodePlugin as createDefaultCodePlugin } from '@udecode/plate-basic-marks';\nimport { css } from 'emotion';\n\nimport { PlatePlugin, RenderLeafProps } from '../../internal/types';\nimport { createMarkToolbarButton } from './components/MarkToolbarButton';\nimport { buildMarkEventHandler } from './helpers';\n\nexport const ToolbarCodeButton = createMarkToolbarButton({\n title: 'Code',\n mark: MARKS.CODE,\n icon: <CodeIcon />,\n});\n\nexport const ToolbarDropdownCodeButton = createMarkToolbarButton({\n title: 'Code',\n mark: MARKS.CODE,\n});\n\nconst styles = {\n code: css({\n fontFamily: 'monospace',\n fontSize: '.9em',\n }),\n};\n\nexport function Code(props: RenderLeafProps) {\n return (\n <code {...props.attributes} className={styles.code}>\n {props.children}\n </code>\n );\n}\n\nexport const createCodePlugin = (): PlatePlugin =>\n createDefaultCodePlugin({\n type: MARKS.CODE,\n component: Code,\n options: {\n // We need to define multiple hotkeys here,\n // - mod+/ -> QWERTY keyboard layout\n // - mod+shift+7 -> QWERTZ keyboard layout\n // The workaround like in packages/rich-text/src/plugins/CommandPalette/onKeyDown.ts is sadly not working here,\n // as `shift+7` is not interpreted as `/` with the `mod` key by the OS.\n // TODO: there are a lot more different keyboard layouts out there\n hotkey: ['mod+/', 'mod+shift+7'],\n },\n handlers: {\n onKeyDown: buildMarkEventHandler(MARKS.CODE),\n },\n deserializeHtml: {\n rules: [\n {\n validNodeName: ['CODE', 'PRE'],\n },\n {\n validStyle: {\n fontFamily: ['Consolas', 'monospace'],\n },\n },\n ],\n },\n });\n","import * as React from 'react';\n\nimport { FormatItalicIcon } from '@contentful/f36-icons';\nimport { MARKS } from '@contentful/rich-text-types';\nimport { createItalicPlugin as createDefaultItalicPlugin } from '@udecode/plate-basic-marks';\nimport { css } from 'emotion';\n\nimport { someHtmlElement } from '../../internal/queries';\nimport { PlatePlugin, RenderLeafProps } from '../../internal/types';\nimport { createMarkToolbarButton } from './components/MarkToolbarButton';\nimport { buildMarkEventHandler } from './helpers';\n\nexport const ToolbarItalicButton = createMarkToolbarButton({\n title: 'Italic',\n mark: MARKS.ITALIC,\n icon: <FormatItalicIcon />,\n});\n\nconst styles = {\n italic: css({\n fontStyle: 'italic',\n }),\n};\n\nexport function Italic(props: RenderLeafProps) {\n return (\n <em {...props.attributes} className={styles.italic}>\n {props.children}\n </em>\n );\n}\n\nexport const createItalicPlugin = (): PlatePlugin =>\n createDefaultItalicPlugin({\n type: MARKS.ITALIC,\n component: Italic,\n options: {\n hotkey: ['mod+i'],\n },\n handlers: {\n onKeyDown: buildMarkEventHandler(MARKS.ITALIC),\n },\n deserializeHtml: {\n rules: [\n { validNodeName: ['I', 'EM'] },\n {\n validStyle: {\n fontStyle: 'italic',\n },\n },\n ],\n query: (el) => {\n return !someHtmlElement(el, (node) => node.style.fontStyle === 'normal');\n },\n },\n });\n","import * as React from 'react';\n\nimport { SubscriptIcon } from '@contentful/f36-icons';\nimport { MARKS } from '@contentful/rich-text-types';\nimport { createSubscriptPlugin as createDefaultSubscriptPlugin } from '@udecode/plate-basic-marks';\nimport { css } from 'emotion';\n\nimport { PlatePlugin, RenderLeafProps } from '../../internal/types';\nimport { createMarkToolbarButton } from './components/MarkToolbarButton';\nimport { buildMarkEventHandler } from './helpers';\n\nconst styles = {\n subscript: css({\n verticalAlign: 'sub',\n fontSize: 'smaller',\n }),\n};\n\nexport const ToolbarSubscriptButton = createMarkToolbarButton({\n title: 'Subscript',\n mark: MARKS.SUBSCRIPT,\n icon: <SubscriptIcon viewBox=\"0 0 23 18\" />,\n});\n\nexport const ToolbarDropdownSubscriptButton = createMarkToolbarButton({\n title: 'Subscript',\n mark: MARKS.SUBSCRIPT,\n});\n\nexport function Subscript(props: RenderLeafProps) {\n return (\n <sub {...props.attributes} className={styles.subscript}>\n {props.children}\n </sub>\n );\n}\n\nexport const createSubscriptPlugin = (): PlatePlugin =>\n createDefaultSubscriptPlugin({\n type: MARKS.SUBSCRIPT,\n component: Subscript,\n handlers: {\n onKeyDown: buildMarkEventHandler(MARKS.SUBSCRIPT),\n },\n deserializeHtml: {\n rules: [\n {\n validNodeName: ['SUB'],\n },\n ],\n },\n });\n","import * as React from 'react';\n\nimport { SuperscriptIcon } from '@contentful/f36-icons';\nimport { MARKS } from '@contentful/rich-text-types';\nimport { createSuperscriptPlugin as createDefaultSuperscriptPlugin } from '@udecode/plate-basic-marks';\nimport { css } from 'emotion';\n\nimport { PlatePlugin, RenderLeafProps } from '../../internal/types';\nimport { createMarkToolbarButton } from './components/MarkToolbarButton';\nimport { buildMarkEventHandler } from './helpers';\n\nconst styles = {\n superscript: css({\n verticalAlign: 'super',\n fontSize: 'smaller',\n }),\n};\n\nexport const ToolbarSuperscriptButton = createMarkToolbarButton({\n title: 'Superscript',\n mark: MARKS.SUPERSCRIPT,\n icon: <SuperscriptIcon />,\n});\n\nexport const ToolbarDropdownSuperscriptButton = createMarkToolbarButton({\n title: 'Superscript',\n mark: MARKS.SUPERSCRIPT,\n});\n\nexport function Superscript(props: RenderLeafProps) {\n return (\n <sup {...props.attributes} className={styles.superscript}>\n {props.children}\n </sup>\n );\n}\n\nexport const createSuperscriptPlugin = (): PlatePlugin =>\n createDefaultSuperscriptPlugin({\n type: MARKS.SUPERSCRIPT,\n component: Superscript,\n handlers: {\n onKeyDown: buildMarkEventHandler(MARKS.SUPERSCRIPT),\n },\n deserializeHtml: {\n rules: [\n {\n validNodeName: ['SUP'],\n },\n ],\n },\n });\n","import * as React from 'react';\n\nimport { FormatUnderlinedIcon } from '@contentful/f36-icons';\nimport { MARKS } from '@contentful/rich-text-types';\nimport { createUnderlinePlugin as createDefaultUnderlinePlugin } from '@udecode/plate-basic-marks';\n\nimport { someHtmlElement } from '../../internal/queries';\nimport { PlatePlugin, RenderLeafProps } from '../../internal/types';\nimport { createMarkToolbarButton } from './components/MarkToolbarButton';\nimport { buildMarkEventHandler } from './helpers';\n\nexport const ToolbarUnderlineButton = createMarkToolbarButton({\n title: 'Underline',\n mark: MARKS.UNDERLINE,\n icon: <FormatUnderlinedIcon />,\n});\n\nexport function Underline(props: RenderLeafProps) {\n return <u {...props.attributes}>{props.children}</u>;\n}\n\nexport const createUnderlinePlugin = (): PlatePlugin =>\n createDefaultUnderlinePlugin({\n type: MARKS.UNDERLINE,\n component: Underline,\n options: {\n hotkey: ['mod+u'],\n },\n handlers: {\n onKeyDown: buildMarkEventHandler(MARKS.UNDERLINE),\n },\n deserializeHtml: {\n rules: [\n {\n validNodeName: ['U'],\n },\n {\n validStyle: {\n textDecoration: ['underline'],\n },\n },\n ],\n query: (el) => {\n return !someHtmlElement(el, (node) => node.style.textDecoration === 'none');\n },\n },\n });\n","import { PlatePlugin } from '../../internal/types';\nimport { createBoldPlugin } from './Bold';\nimport { createCodePlugin } from './Code';\nimport { createItalicPlugin } from './Italic';\nimport { createSubscriptPlugin } from './Subscript';\nimport { createSuperscriptPlugin } from './Superscript';\nimport { createUnderlinePlugin } from './Underline';\n\nexport const createMarksPlugin = (): PlatePlugin => ({\n key: 'Marks',\n plugins: [\n createBoldPlugin(),\n createCodePlugin(),\n createItalicPlugin(),\n createUnderlinePlugin(),\n createSuperscriptPlugin(),\n createSubscriptPlugin(),\n ],\n});\n","import { BLOCKS, TEXT_CONTAINERS } from '@contentful/rich-text-types';\n\nimport { INLINE_TYPES } from '../../helpers/editor';\nimport { transformWrapIn } from '../../helpers/transformers';\nimport { getParentNode, isText } from '../../internal/queries';\nimport { Element } from '../../internal/types';\nimport { NormalizerRule } from './types';\n\nconst isInline = (node: Element) => INLINE_TYPES.includes(node.type);\nconst isTextContainer = (node: Element) => TEXT_CONTAINERS.includes(node.type as BLOCKS);\n\n// Base rules are rules that must be enforced at all times regardless\n// of which plugins are enabled.\nexport const baseRules: Required<NormalizerRule>[] = [\n {\n // Wrap orphaned text nodes in a paragraph\n match: isText,\n validNode: (editor, [, path]) => {\n const parent = getParentNode(editor, path)?.[0] as Element;\n return !!parent && (isTextContainer(parent) || isInline(parent) || editor.isVoid(parent));\n },\n transform: (editor, entry) => {\n return transformWrapIn(BLOCKS.PARAGRAPH)(editor, entry);\n },\n },\n {\n // Wrap orphaned inline nodes in a paragraph,\n match: {\n type: INLINE_TYPES,\n },\n validNode: (editor, [, path]) => {\n const parent = getParentNode(editor, path)?.[0] as Element;\n return !!parent && isTextContainer(parent);\n },\n transform: transformWrapIn(BLOCKS.PARAGRAPH),\n },\n];\n","import { isElement } from '../../internal/queries';\nimport { NodeValidator, NodeTransformer } from './types';\n\nexport class NormalizerError extends Error {}\n\nexport const createValidatorFromTypes =\n (types: string[]): NodeValidator =>\n (_, [node]) => {\n return isElement(node) && types.includes(node.type);\n };\n\nexport const createTransformerFromObject = (\n transforms: Record<string, NodeTransformer>\n): NodeTransformer => {\n // A default transformer must always be provided\n const fallback = transforms['default'];\n\n if (!fallback) {\n throw new NormalizerError('A default transformer MUST be provided');\n }\n\n return (editor, entry) => {\n const [node] = entry;\n const key = isElement(node) ? node.type : 'default';\n\n const transformer = transforms[key] || fallback;\n\n return transformer(editor, entry);\n };\n};\n","import isPlainObject from 'is-plain-obj';\n\nimport { transformRemove } from '../../helpers/transformers';\nimport { withoutNormalizing } from '../../internal';\nimport { getChildren, matchNode, getPluginType } from '../../internal/queries';\nimport { PlateEditor, PlatePlugin, NodeEntry } from '../../internal/types';\nimport { baseRules } from './baseRules';\nimport { NormalizerRule, NodeTransformer, NodeValidator } from './types';\nimport { NormalizerError, createValidatorFromTypes, createTransformerFromObject } from './utils';\n\nexport const withNormalizer = (editor: PlateEditor) => {\n const rules: Required<NormalizerRule>[] = baseRules;\n\n // Derive normalization rules from other plugin's configurations\n for (const p of editor.plugins as PlatePlugin[]) {\n const { normalizer: _rules } = p;\n\n if (!_rules) {\n continue;\n }\n\n for (const _rule of _rules) {\n // Clone to avoid mutation bugs\n const rule = { ..._rule };\n\n if (!rule.match && !p.isElement) {\n throw new NormalizerError('rule.match MUST be defined in a non-element plugin');\n }\n\n // By default we filter elements with given plugin type\n if (!rule.match) {\n rule.match = {\n type: getPluginType(editor, p.key),\n };\n }\n\n // Conditional transformation e.g.\n // {\n // [BLOCKS.EMBEDDED_ASSET]: transformLift,\n // default?: transformRemove\n // }\n //\n if (isPlainObject(rule.transform)) {\n if ('validNode' in rule) {\n // I can't think of a use case. Disabled to prevent misuse\n throw new NormalizerError(\n 'conditional transformations are not supported in validNode rules'\n );\n }\n\n rule.transform = createTransformerFromObject({\n default: transformRemove,\n ...rule.transform,\n });\n }\n\n // By default all invalid nodes are removed.\n if (!rule.transform) {\n rule.transform = transformRemove;\n }\n\n // Convert Types array syntax to a validator function\n if ('validChildren' in rule && Array.isArray(rule.validChildren)) {\n rule.validChildren = createValidatorFromTypes(rule.validChildren);\n }\n\n rules.push(rule as Required<NormalizerRule>);\n }\n }\n\n // Wrap transformer in a withoutNormalizing() call to avoid unnecessary\n // normalization cycles.\n const _transform = (tr: NodeTransformer, entry: NodeEntry) => {\n withoutNormalizing(editor, () => {\n tr(editor, entry);\n });\n };\n\n const { normalizeNode } = editor;\n\n // @ts-expect-error\n editor.normalizeNode = (entry: NodeEntry) => {\n const [node, path] = entry;\n const children = getChildren(entry);\n\n // The order of validNode rules Vs validChildren doesn't matter. Slate\n // will always perform normalization in a depth-first fashion.\n for (const rule of rules) {\n if (!matchNode(node, path, rule.match)) {\n continue;\n }\n\n // Normalize node\n if ('validNode' in rule && !rule.validNode(editor, entry)) {\n _transform(rule.transform as NodeTransformer, entry);\n return;\n }\n\n // Normalize node.children\n if ('validChildren' in rule) {\n // It can not be an array since we enforced it earlier\n const isValidChild = rule.validChildren as NodeValidator;\n\n const invalidChildEntry = children.find((entry) => !isValidChild(editor, entry));\n\n if (invalidChildEntry) {\n _transform(rule.transform as NodeTransformer, invalidChildEntry);\n return;\n }\n }\n }\n\n return normalizeNode(entry);\n };\n\n return editor;\n};\n","import { PlatePlugin } from '../../internal/types';\nimport { withNormalizer } from './withNormalizer';\n\nexport const createNormalizerPlugin = (): PlatePlugin => ({\n key: 'NormalizerPlugin',\n withOverrides: withNormalizer,\n});\n","import * as React from 'react';\n\nimport tokens from '@contentful/f36-tokens';\nimport { BLOCKS } from '@contentful/rich-text-types';\nimport { css } from 'emotion';\n\nimport { RenderElementProps } from '../../internal/types';\n\nconst styles = {\n [BLOCKS.PARAGRAPH]: css`\n line-height: ${tokens.lineHeightDefault};\n margin-bottom: 1.5em;\n `,\n};\n\nexport function Paragraph(props: RenderElementProps) {\n return (\n <div {...props.attributes} className={styles[BLOCKS.PARAGRAPH]}>\n {props.children}\n </div>\n );\n}\n","export function isEmbedElement(element: HTMLElement) {\n return (\n element.hasAttribute('data-embedded-entity-inline-id') ||\n element.hasAttribute('data-entity-type')\n );\n}\n\nexport function isEmptyElement(element: HTMLElement) {\n return element.textContent === '';\n}\n","import { BLOCKS } from '@contentful/rich-text-types';\nimport { createParagraphPlugin as createDefaultParagraphPlugin } from '@udecode/plate-paragraph';\nimport isHotkey from 'is-hotkey';\n\nimport { isInlineOrText, toggleElement } from '../../helpers/editor';\nimport { transformUnwrap, transformLift } from '../../helpers/transformers';\nimport { PlatePlugin, KeyboardHandler, HotkeyPlugin } from '../../internal/types';\nimport { Paragraph } from './Paragraph';\nimport { isEmbedElement, isEmptyElement } from './utils';\n\nconst buildParagraphKeyDownHandler: KeyboardHandler<HotkeyPlugin> =\n (editor, { options: { hotkey } }) =>\n (event) => {\n if (editor.selection && hotkey && isHotkey(hotkey, event)) {\n toggleElement(editor, { activeType: BLOCKS.PARAGRAPH, inactiveType: BLOCKS.PARAGRAPH });\n }\n };\n\nexport const createParagraphPlugin = (): PlatePlugin => {\n const config: Partial<PlatePlugin> = {\n type: BLOCKS.PARAGRAPH,\n component: Paragraph,\n options: {\n hotkey: ['mod+opt+0'],\n },\n handlers: {\n onKeyDown: buildParagraphKeyDownHandler,\n },\n softBreak: [\n // create a new line with SHIFT+Enter inside a paragraph\n {\n hotkey: 'shift+enter',\n query: {\n allow: BLOCKS.PARAGRAPH,\n },\n },\n ],\n deserializeHtml: {\n rules: [\n {\n validNodeName: ['P', 'DIV'],\n },\n ],\n query: (el) => !isEmptyElement(el) && !isEmbedElement(el),\n },\n normalizer: [\n {\n validChildren: (_, [node]) => isInlineOrText(node),\n transform: {\n [BLOCKS.PARAGRAPH]: transformUnwrap,\n default: transformLift,\n },\n },\n ],\n };\n\n return createDefaultParagraphPlugin(config);\n};\n","const wrapSpaceAround = (el: Element) => {\n const spacer = new Text(' ');\n const parent = el.parentNode;\n\n if (!parent) {\n return;\n }\n\n if (el.previousSibling) {\n parent.insertBefore(spacer, el);\n }\n\n if (el.nextSibling) {\n parent.insertBefore(spacer, el.nextSibling);\n }\n};\n\nconst unwrap = (el: Element) => {\n // add a spacer to avoid the content being cramped together with\n // the element siblings after it's unwrapped. It may not always\n // be desired but it should be easy to adjust by the end user.\n wrapSpaceAround(el);\n\n el.replaceWith(...Array.from(el.childNodes));\n};\n\n/**\n * In HTML it's a valid structure to have a block element inside a link\n *\n * e.g: <a href=\"...\"><h1> My link </h1><h2>is fancy</h2></a>\n *\n * However, that's not supported in Slate. There are generally two ways to\n * handle this:\n *\n * a) Unwrap inner blocks while preserving the content.\n * e.g. <a href=\"...\">My link is fancy</a>\n *\n * b) Break the link into multiple elements with having each block\n * element as a wrapper for an anchor with the same URL\n * e.g. <h1><a href=\"...\">My link</a></h1>\n * and <h2><a href=\"...\">is fancy</a></h2>\n *\n * We take approach (a) in here.\n */\nexport const sanitizeAnchors = (doc: Document): Document => {\n const unsupportedTagSelector = `a :not(${[\n // Bold\n 'b',\n 'strong',\n\n // Code\n 'code',\n 'pre',\n\n // Italic\n 'em',\n 'i',\n\n // Super/subscript\n 'sub',\n 'sup',\n\n // Underline\n 'u',\n\n // Other\n 'span',\n ].join(',')})`;\n\n doc.querySelectorAll(unsupportedTagSelector).forEach(unwrap);\n\n return doc;\n};\n","/**\n * Remove empty spreadsheets columns/rows for performance reasons.\n */\nexport const sanitizeSheets = (doc: Document): Document => {\n // Ensure we are inside a spreadsheet i.e. not pasting\n // a table from within the editor\n const supported = [\n // Google Sheets\n 'google-sheets-html-origin',\n // MS Excel\n 'meta[content=\"Excel.Sheet\"]',\n 'meta[content*=\"Microsoft Excel\"]',\n ];\n\n if (!supported.some((selector) => !!doc.querySelector(selector))) {\n return doc;\n }\n\n const isEmptyElement = (el: Element) => {\n return (el.textContent ?? '').trim() === '';\n };\n\n const tables = Array.from(doc.querySelectorAll('table'));\n\n for (const table of tables) {\n // Remove empty columns first!\n table.querySelectorAll('tr').forEach((row) => {\n isEmptyElement(row) && row.remove();\n });\n\n const rows = Array.from(table.querySelectorAll('tr'));\n\n // CSS :nth-of-type index starts from 1\n let colIndex = 1;\n\n // eslint-disable-next-line -- TODO: explain this disable\n while (true) {\n const cells = rows\n .map((row) => row.querySelector(`th:nth-of-type(${colIndex}), td:nth-of-type(${colIndex})`))\n .filter((cell): cell is Element => !!cell);\n\n // No more columns\n if (cells.length === 0) {\n break;\n }\n\n const isEmpty = cells.every((cell) => isEmptyElement(cell));\n\n // Don't increment on deletion because columns will be shifted\n // left anyway. Incrementing may result in skipping\n if (!isEmpty) {\n colIndex += 1;\n continue;\n }\n\n cells.forEach((cell) => cell.remove());\n }\n }\n\n return doc;\n};\n","import { sanitizeAnchors } from './sanitizeAnchors';\nimport { sanitizeSheets } from './sanitizeSheets';\n\n/**\n * Remove all <style> tags\n */\nconst stripStyleTags = (doc: Document): Document => {\n doc.querySelectorAll('style').forEach((e) => {\n e.remove();\n });\n\n return doc;\n};\n\n/**\n * Remove all <meta /> tags\n */\nconst stripMetaTags = (doc: Document): Document => {\n doc.querySelectorAll('meta').forEach((el) => el.remove());\n\n return doc;\n};\n\ntype Replacer = (innerHTML: string) => string;\n\n// Attention: Order is important\nconst transformers = [stripStyleTags, sanitizeSheets, stripMetaTags, sanitizeAnchors];\n\nfunction removeTableWrappers(table: Element): void {\n const parent = table.parentElement;\n\n if (parent && parent.tagName === 'DIV' && parent.children.length === 1) {\n parent.replaceWith(table);\n removeTableWrappers(table);\n }\n}\n\nexport const sanitizeHTML = (html: string): string => {\n // Parse the HTML string and pipe it through our transformers\n const doc = transformers.reduce(\n (value, cb) => cb(value),\n new DOMParser().parseFromString(html, 'text/html')\n );\n\n const replacers: Replacer[] = [\n // remove whitespaces between some tags, as this can lead to unwanted behaviour:\n // - table -> empty table cells\n // - list -> leading whitespaces\n (innerHtml) =>\n innerHtml.replace(\n /<(\\/)?(table|thead|tbody|tr|td|th|caption|col|colgroup|ol|ul|li)(.*)>\\s+<(\\/)?(table|thead|tbody|tr|td|th|caption|col|colgroup|ol|ul|li)/g,\n '<$1$2$3><$4$5'\n ),\n // remove empty elements before the ending block element tag\n (innerHtml) =>\n innerHtml.replace(\n /(?:<[^>^/]*>)\\s*(?:<\\/[^>]*>)<\\/(div|p|table|thead|tbody|tr|td|th|caption|col|colgroup|ol|ul|li)/g,\n '</$1'\n ),\n // remove whitespaces before the ending block element tag\n (innerHTML) =>\n innerHTML.replace(\n /\\s*<\\/(div|p|table|thead|tbody|tr|td|th|caption|col|colgroup|ol|ul|li)/g,\n '</$1'\n ),\n ];\n\n let previous: string;\n do {\n // save previous first before doing modifications\n previous = doc.body.innerHTML;\n\n doc.body.innerHTML = replacers.reduce(\n (innerHTML, replacer) => replacer(innerHTML),\n doc.body.innerHTML\n );\n } while (doc.body.innerHTML !== previous);\n\n // Removing the div container wrappers from tables\n // The div container including attributes and possible linebreaks inside wil be removed\n // TODO: can be removed with plate >= 20\n doc.querySelectorAll('table').forEach(removeTableWrappers);\n\n return doc.body.innerHTML;\n};\n","import { KEY_DESERIALIZE_HTML } from '@udecode/plate-core';\n\nimport { PlatePlugin } from '../../internal/types';\nimport { sanitizeHTML } from './utils/sanitizeHTML';\n\n/**\n * Get x-slate-fragment attribute from data-slate-fragment\n */\nconst catchSlateFragment = /data-slate-fragment=\"(.+?)\"/m;\nexport const getSlateFragmentAttribute = (dataTransfer: DataTransfer): string | void => {\n const htmlData = dataTransfer.getData('text/html');\n const [, fragment] = htmlData.match(catchSlateFragment) || [];\n return fragment;\n};\n\n/**\n * Get the x-slate-fragment attribute that exist in text/html data\n * and append it to the DataTransfer object\n */\nexport const ensureXSlateFragment = (dataTransfer: DataTransfer): DataTransfer => {\n if (!dataTransfer.getData('application/x-slate-fragment')) {\n const fragment = getSlateFragmentAttribute(dataTransfer);\n if (fragment) {\n const clipboardData = new DataTransfer();\n dataTransfer.types.forEach((type) => {\n clipboardData.setData(type, dataTransfer.getData(type));\n });\n clipboardData.setData('application/x-slate-fragment', fragment);\n return clipboardData;\n }\n }\n return dataTransfer;\n};\n\nexport const createPasteHTMLPlugin = (): PlatePlugin => ({\n key: 'PasteHTMLPlugin',\n withOverrides: (editor) => {\n const { insertData } = editor;\n editor.insertData = (data) => insertData(ensureXSlateFragment(data));\n return editor;\n },\n inject: {\n pluginsByKey: {\n [KEY_DESERIALIZE_HTML]: {\n editor: {\n insertData: {\n format: 'text/html',\n // Perform custom content transformation *before* pasting\n transformData: sanitizeHTML,\n },\n },\n },\n },\n },\n});\n","import * as React from 'react';\n\nimport tokens from '@contentful/f36-tokens';\nimport { css } from 'emotion';\n\nimport { RenderElementProps } from '../../../internal/types';\n\nconst style = css({\n margin: '0 0 1.3125rem',\n borderLeft: `6px solid ${tokens.gray200}`,\n paddingLeft: '0.875rem',\n fontStyle: 'normal',\n});\n\nexport function Quote(props: RenderElementProps) {\n return (\n <blockquote {...props.attributes} className={style}>\n {props.children}\n </blockquote>\n );\n}\n","import { BLOCKS, TEXT_CONTAINERS } from '@contentful/rich-text-types';\nimport { isLastChild, hasSingleChild } from '@udecode/plate-core';\n\nimport { getAboveNode, getBlockAbove, isAncestorEmpty } from '../../internal/queries';\nimport { PlateEditor, Ancestor } from '../../internal/types';\n\n/**\n * Returns true if we are:\n * 1) Inside a blockquote\n * 2) With no only one child paragraph/heading and\n * 3) that child is empty\n */\nexport const shouldResetQuoteOnBackspace = (editor: PlateEditor) => {\n const container = getAboveNode(editor, {\n match: { type: TEXT_CONTAINERS },\n mode: 'lowest',\n });\n\n if (!container) {\n return false;\n }\n\n if (!isAncestorEmpty(editor, container[0] as Ancestor)) {\n return false;\n }\n\n const quote = getBlockAbove(editor, {\n match: { type: BLOCKS.QUOTE },\n mode: 'lowest',\n });\n\n if (!quote) {\n return false;\n }\n\n if (hasSingleChild(quote[0]) && isLastChild(quote, container[1])) {\n return true;\n }\n\n return false;\n};\n","import { BLOCKS } from '@contentful/rich-text-types';\nimport isHotkey from 'is-hotkey';\n\nimport { isBlockSelected } from '../../helpers/editor';\nimport { withoutNormalizing, wrapNodes, unwrapNodes, isElement } from '../../internal';\nimport { KeyboardHandler, HotkeyPlugin, PlateEditor } from '../../internal/types';\nimport { TrackingPluginActions } from '../../plugins/Tracking';\n\nexport function toggleQuote(\n editor: PlateEditor,\n logAction?: TrackingPluginActions['onShortcutAction'] | TrackingPluginActions['onToolbarAction']\n): void {\n if (!editor.selection) return;\n\n const isActive = isBlockSelected(editor, BLOCKS.QUOTE);\n\n logAction?.(isActive ? 'remove' : 'insert', { nodeType: BLOCKS.QUOTE });\n\n withoutNormalizing(editor, () => {\n if (!editor.selection) return;\n\n unwrapNodes(editor, {\n match: (node) => isElement(node) && node.type === BLOCKS.QUOTE,\n split: true,\n });\n\n if (!isActive) {\n const quote = {\n type: BLOCKS.QUOTE,\n data: {},\n children: [],\n };\n\n wrapNodes(editor, quote);\n }\n });\n}\n\nexport const onKeyDownToggleQuote: KeyboardHandler<HotkeyPlugin> = (editor, plugin) => (event) => {\n const { hotkey } = plugin.options;\n\n if (hotkey && isHotkey(hotkey, event)) {\n event.preventDefault();\n toggleQuote(editor, editor.tracking.onShortcutAction);\n }\n};\n","import { BLOCKS, TEXT_CONTAINERS } from '@contentful/rich-text-types';\nimport { BaseRange, BaseSelection, Element, Point } from 'slate';\n\nimport { getAboveNode, getText } from '../../internal/queries';\nimport { deleteText, insertNodes } from '../../internal/transforms';\nimport { WithOverride } from '../../internal/types';\n\nexport const withQuote: WithOverride = (editor) => {\n const { insertFragment } = editor;\n\n editor.insertFragment = (fragment) => {\n const startingNode = fragment.length && fragment[0];\n const startsWithBlockquote =\n Element.isElement(startingNode) && startingNode.type === BLOCKS.QUOTE;\n\n const containerEntry = getAboveNode(editor, {\n match: {\n type: TEXT_CONTAINERS,\n },\n });\n\n const containerIsNotEmpty = containerEntry && getText(editor, containerEntry[1]) !== '';\n\n if (startsWithBlockquote && containerIsNotEmpty) {\n const { selection } = editor;\n const isContentSelected = (selection: BaseSelection): selection is BaseRange =>\n !!selection && Point.compare(selection.anchor, selection.focus) !== 0;\n // if something is selected (highlighted) we replace the selection\n if (isContentSelected(selection)) {\n deleteText(editor, { at: selection });\n }\n\n // get the cursor entry again, it may be different after deletion\n const containerEntry = getAboveNode(editor, {\n match: {\n type: TEXT_CONTAINERS,\n },\n });\n\n const containerIsNotEmpty = containerEntry && getText(editor, containerEntry[1]) !== '';\n\n if (containerIsNotEmpty) {\n insertNodes(editor, fragment);\n return;\n }\n }\n\n insertFragment(fragment);\n };\n\n return editor;\n};\n","import { BLOCKS, CONTAINERS } from '@contentful/rich-text-types';\n\nimport { transformLift, transformUnwrap } from '../../helpers/transformers';\nimport { PlatePlugin } from '../../internal/types';\nimport { Quote } from './components/Quote';\nimport { shouldResetQuoteOnBackspace } from './shouldResetQuote';\nimport { onKeyDownToggleQuote, toggleQuote } from './toggleQuote';\nimport { withQuote } from './withQuote';\n\nexport function createQuotePlugin(): PlatePlugin {\n return {\n key: BLOCKS.QUOTE,\n type: BLOCKS.QUOTE,\n isElement: true,\n component: Quote,\n options: {\n hotkey: 'mod+shift+1',\n },\n handlers: {\n onKeyDown: onKeyDownToggleQuote,\n },\n deserializeHtml: {\n rules: [\n {\n validNodeName: 'BLOCKQUOTE',\n },\n ],\n },\n resetNode: [\n {\n // toggle off blockquote on backspace when it's empty\n hotkey: 'backspace',\n types: [BLOCKS.QUOTE],\n predicate: shouldResetQuoteOnBackspace,\n onReset: toggleQuote,\n },\n ],\n normalizer: [\n {\n validChildren: CONTAINERS[BLOCKS.QUOTE],\n transform: {\n [BLOCKS.QUOTE]: transformUnwrap,\n default: transformLift,\n },\n },\n ],\n withOverrides: withQuote,\n };\n}\n","import * as React from 'react';\n\nimport { QuoteIcon } from '@contentful/f36-icons';\nimport { BLOCKS } from '@contentful/rich-text-types';\n\nimport { useContentfulEditor } from '../../../ContentfulEditorProvider';\nimport { isBlockSelected, focus } from '../../../helpers/editor';\nimport { ToolbarButton } from '../../shared/ToolbarButton';\nimport { toggleQuote } from '../toggleQuote';\n\nexport interface ToolbarQuoteButtonProps {\n isDisabled?: boolean;\n}\n\nexport function ToolbarQuoteButton(props: ToolbarQuoteButtonProps) {\n const editor = useContentfulEditor();\n\n function handleOnClick() {\n if (!editor) return;\n\n toggleQuote(editor, editor.tracking.onToolbarAction);\n focus(editor);\n }\n\n if (!editor) return null;\n\n return (\n <ToolbarButton\n title=\"Blockquote\"\n onClick={handleOnClick}\n testId=\"quote-toolbar-button\"\n isDisabled={props.isDisabled}\n isActive={isBlockSelected(editor, BLOCKS.QUOTE)}\n >\n <QuoteIcon />\n </ToolbarButton>\n );\n}\n","import { INLINES } from '@contentful/rich-text-types';\nimport { createSelectOnBackspacePlugin as createDefaultSelectPlugin } from '@udecode/plate-select';\n\nimport { PlatePlugin } from '../../internal/types';\n\nexport const createSelectOnBackspacePlugin = (): PlatePlugin =>\n createDefaultSelectPlugin({\n options: {\n query: {\n // `createTextPlugin` is taking care of block elements\n allow: [INLINES.EMBEDDED_ENTRY],\n },\n },\n });\n","import { BLOCKS } from '@contentful/rich-text-types';\nimport { getEmptyRowNode } from '@udecode/plate-table';\n\nimport { getAboveNode, someNode, getStartPoint, getNextPath } from '../../../internal/queries';\nimport { select, insertNodes } from '../../../internal/transforms';\nimport { PlateEditor, NodeEntry, Element, Path, Location } from '../../../internal/types';\n\nconst addRow = (editor: PlateEditor, getNextRowPath: (currentRowPath: Path) => Path) => {\n if (\n someNode(editor, {\n match: { type: BLOCKS.TABLE },\n })\n ) {\n const currentRowItem = getAboveNode(editor, {\n match: { type: BLOCKS.TABLE_ROW },\n }) as NodeEntry<Element> | undefined;\n\n if (currentRowItem) {\n const [currentRowElem, currentRowPath] = currentRowItem;\n const nextRowPath = getNextRowPath(currentRowPath);\n\n insertNodes(\n editor,\n getEmptyRowNode(editor, {\n header: false,\n colCount: currentRowElem.children.length,\n }),\n {\n at: nextRowPath,\n // Note: this selects the last cell of the new row\n select: true,\n }\n );\n\n // Select the first cell in the current row\n select(editor, getStartPoint(editor, nextRowPath as Location));\n }\n }\n};\n\nexport const addRowBelow = (editor: PlateEditor) => {\n addRow(editor, (currentRowPath) => {\n return getNextPath(currentRowPath);\n });\n};\n\nexport const addRowAbove = (editor: PlateEditor) => {\n addRow(editor, (currentRowPath) => {\n // The new row will be in in-place of the old row\n return currentRowPath;\n });\n};\n","import { BLOCKS } from '@contentful/rich-text-types';\nimport { getEmptyCellNode } from '@udecode/plate-table';\n\nimport { getAboveNode, getNextPath, someNode } from '../../../internal/queries';\nimport { insertNodes } from '../../../internal/transforms';\nimport { PlateEditor, Path, Element, NodeEntry } from '../../../internal/types';\n\ninterface AddColumnOptions {\n header?: boolean;\n}\n\nconst addColumn = (\n editor: PlateEditor,\n { header }: AddColumnOptions,\n getNextCellPath: (currentCellPath: Path) => Path\n) => {\n if (\n someNode(editor, {\n match: { type: BLOCKS.TABLE },\n })\n ) {\n const currentCellItem = getAboveNode(editor, {\n match: {\n type: [BLOCKS.TABLE_HEADER_CELL, BLOCKS.TABLE_CELL],\n },\n });\n\n const currentTableItem = getAboveNode(editor, {\n match: { type: BLOCKS.TABLE },\n }) as NodeEntry<Element> | undefined;\n\n if (currentCellItem && currentTableItem) {\n const nextCellPath = getNextCellPath(currentCellItem[1]);\n const newCellPath = nextCellPath.slice();\n const replacePathPos = newCellPath.length - 2;\n\n currentTableItem[0].children.forEach((_, rowIdx) => {\n newCellPath[replacePathPos] = rowIdx;\n\n insertNodes(\n editor,\n\n getEmptyCellNode(editor, { header: header && rowIdx === 0 }),\n {\n at: newCellPath,\n // Select the first cell of the new column\n select: rowIdx === 0,\n }\n );\n });\n }\n }\n};\n\nexport const addColumnRight = (editor: PlateEditor, options: AddColumnOptions) => {\n addColumn(editor, options, (currentCellPath) => getNextPath(currentCellPath));\n};\n\nexport const addColumnLeft = (editor: PlateEditor, options: AddColumnOptions) => {\n addColumn(editor, options, (currentCellPath) => currentCellPath);\n};\n","import { BLOCKS } from '@contentful/rich-text-types';\n\nimport { getAboveNode, getChildren } from '../../../internal/queries';\nimport { setNodes } from '../../../internal/transforms';\nimport { PlateEditor } from '../../../internal/types';\n\nexport const setHeader = (editor: PlateEditor, enable?: boolean) => {\n const tableItem = getAboveNode(editor, {\n match: { type: BLOCKS.TABLE },\n });\n\n if (!tableItem) {\n return;\n }\n\n const firstRow = getChildren(tableItem)[0];\n\n if (!firstRow) {\n return;\n }\n\n getChildren(firstRow).forEach(([, path]) => {\n setNodes(\n editor,\n {\n type: enable ? BLOCKS.TABLE_HEADER_CELL : BLOCKS.TABLE_CELL,\n },\n { at: path }\n );\n });\n};\n","import { BLOCKS } from '@contentful/rich-text-types';\nimport {\n ELEMENT_TABLE,\n ELEMENT_TH,\n ELEMENT_TD,\n ELEMENT_TR,\n getEmptyRowNode,\n} from '@udecode/plate-table';\n\nimport { isBlockSelected, getAncestorPathFromSelection } from '../../helpers/editor';\nimport { selectEditor } from '../../internal';\nimport {\n getBlockAbove,\n getStartPoint,\n getAboveNode,\n getChildren,\n isFirstChildPath,\n isAncestorEmpty,\n getParentNode,\n isElement,\n getNodeEntries,\n getPreviousPath,\n} from '../../internal/queries';\nimport { insertNodes, removeNodes, moveNodes } from '../../internal/transforms';\nimport { PlateEditor, NodeEntry, Ancestor, Node } from '../../internal/types';\n\nexport function insertTableAndFocusFirstCell(editor: PlateEditor): void {\n const table = {\n type: BLOCKS.TABLE,\n data: {},\n children: [\n getEmptyRowNode(editor, { colCount: 2, header: true }),\n getEmptyRowNode(editor, { colCount: 2 }),\n ],\n };\n\n insertNodes(editor, table);\n\n if (editor.selection) {\n const tableEntry = getBlockAbove(editor, {\n match: { type: BLOCKS.TABLE },\n });\n if (!tableEntry) return;\n\n selectEditor(editor, { at: getStartPoint(editor, tableEntry[1]) });\n }\n\n replaceEmptyParagraphWithTable(editor);\n}\n\nexport function isTableActive(editor: PlateEditor) {\n const tableElements = [ELEMENT_TABLE, ELEMENT_TH, ELEMENT_TR, ELEMENT_TD];\n return tableElements.some((el) => isBlockSelected(editor, el));\n}\n\nexport function isTableHeaderEnabled(editor: PlateEditor) {\n const tableItem = getAboveNode(editor, {\n match: {\n type: BLOCKS.TABLE,\n },\n });\n\n if (!tableItem) {\n return false;\n }\n\n const firstRow = getChildren(tableItem)[0];\n\n if (!firstRow) {\n return false;\n }\n\n return getChildren(firstRow).every(([node]) => {\n return node.type === BLOCKS.TABLE_HEADER_CELL;\n });\n}\n\nexport function replaceEmptyParagraphWithTable(editor: PlateEditor) {\n const tablePath = getAncestorPathFromSelection(editor);\n if (!tablePath || isFirstChildPath(tablePath)) return;\n\n const previousPath = getPreviousPath(tablePath);\n if (!previousPath) return;\n\n const [nodes] = getNodeEntries(editor, {\n at: previousPath,\n match: (node) => node.type === BLOCKS.PARAGRAPH,\n });\n if (!nodes) return;\n\n const [previousNode] = nodes;\n const isPreviousNodeTextEmpty = isAncestorEmpty(editor, previousNode as Ancestor);\n if (isPreviousNodeTextEmpty) {\n // Switch table with previous empty paragraph\n moveNodes(editor, { at: tablePath, to: previousPath });\n // Remove previous paragraph that now is under the table\n removeNodes(editor, { at: tablePath });\n }\n}\n\n/**\n * Returns the number of cells in a given row vs the table width\n *\n * Note: We should only get different table rows cell counts in between\n * normalization cycles.\n */\nexport const getNoOfMissingTableCellsInRow = (editor: PlateEditor, rowEntry: NodeEntry) => {\n const [, rowPath] = rowEntry;\n const parent = getParentNode(editor, rowPath);\n\n // This is ensured by normalization. The error is here just in case\n if (!parent) {\n throw new Error('table rows must be wrapped in a table node');\n }\n\n // The longest table row determines its width\n const tableWidth = Math.max(...getChildren(parent).map((entry) => getChildren(entry).length));\n\n const rowWidth = getChildren(rowEntry).length;\n\n return tableWidth - rowWidth;\n};\n\nexport const createEmptyTableCells = (count: number): Node[] => {\n const emptyTableCell = {\n type: BLOCKS.TABLE_CELL,\n data: {},\n children: [\n {\n type: BLOCKS.PARAGRAPH,\n data: {},\n children: [{ text: '' }],\n },\n ],\n };\n\n return new Array(count).fill(emptyTableCell);\n};\n\nexport const isNotEmpty = (_: PlateEditor, entry: NodeEntry) => {\n return getChildren(entry).length !== 0;\n};\n\nexport const isTable = (node: Node) => {\n return isElement(node) && node.type === BLOCKS.TABLE;\n};\n","import React from 'react';\n\nimport { IconButton, Menu } from '@contentful/f36-components';\nimport { ChevronDownIcon } from '@contentful/f36-icons';\nimport { BLOCKS } from '@contentful/rich-text-types';\nimport { deleteColumn, deleteRow, deleteTable } from '@udecode/plate-table';\nimport { css } from 'emotion';\n\nimport { useContentfulEditor } from '../../../ContentfulEditorProvider';\nimport { getNodeEntryFromSelection, getTableSize } from '../../../helpers/editor';\nimport { withoutNormalizing } from '../../../internal';\nimport { useReadOnly } from '../../../internal/hooks';\nimport { getAboveNode } from '../../../internal/queries';\nimport { PlateEditor } from '../../../internal/types';\nimport { RichTextTrackingActionName } from '../../../plugins/Tracking';\nimport { addRowAbove, addColumnLeft, addColumnRight, addRowBelow, setHeader } from '../actions';\nimport { isTableHeaderEnabled } from '../helpers';\n\nexport const styles = {\n topRight: css({\n position: 'absolute',\n top: '6px',\n right: '5px',\n }),\n};\n\nconst getCurrentTableSize = (\n editor: PlateEditor\n): Record<'numRows' | 'numColumns', number> | null => {\n const [table] = getNodeEntryFromSelection(editor, BLOCKS.TABLE);\n return table ? getTableSize(table) : null;\n};\n\n// FIXME: TablePluginOptions no longer exported so using any\ntype TableAction = (editor: PlateEditor, options: any) => void;\n\nexport const TableActions = () => {\n const editor = useContentfulEditor();\n const isDisabled = useReadOnly();\n const [isOpen, setOpen] = React.useState(false);\n const [isHeaderEnabled, setHeaderEnabled] = React.useState(false);\n\n const close = React.useCallback(() => {\n setOpen(false);\n }, []);\n\n React.useEffect(() => {\n setHeaderEnabled(Boolean(editor && isTableHeaderEnabled(editor)));\n }, [editor]);\n\n const canInsertRowAbove = React.useMemo(() => {\n if (!editor) {\n return false;\n }\n\n const headerCell = getAboveNode(editor, {\n match: {\n type: BLOCKS.TABLE_HEADER_CELL,\n },\n });\n\n return !headerCell;\n }, [editor]);\n\n const toggleHeader = React.useCallback(() => {\n close();\n\n if (!editor) {\n return;\n }\n\n const value = !isHeaderEnabled;\n\n setHeaderEnabled(value);\n setHeader(editor, value);\n }, [editor, close, isHeaderEnabled]);\n\n const action = React.useCallback(\n (cb: TableAction, type: 'insert' | 'remove', element: 'Table' | 'Row' | 'Column') => () => {\n if (!editor?.selection) return;\n close();\n\n const tableSize = getCurrentTableSize(editor);\n\n withoutNormalizing(editor, () => {\n cb(editor, { header: isHeaderEnabled });\n });\n // Tracking\n const actionName = `${type}Table${element === 'Table' ? '' : element}`;\n editor.tracking.onViewportAction(actionName as RichTextTrackingActionName, { tableSize });\n },\n [editor, isHeaderEnabled, close]\n );\n\n if (isDisabled) {\n return null;\n }\n\n return (\n <Menu\n placement=\"left\"\n isOpen={isOpen}\n onOpen={() => {\n setOpen(true);\n }}\n onClose={close}\n >\n <Menu.Trigger>\n <IconButton\n size=\"small\"\n variant=\"transparent\"\n tabIndex={-1}\n className={styles.topRight}\n icon={<ChevronDownIcon />}\n aria-label=\"Open table menu\"\n testId=\"cf-table-actions-button\"\n />\n </Menu.Trigger>\n <Menu.List>\n <Menu.Item onClick={action(addRowAbove, 'insert', 'Row')} disabled={!canInsertRowAbove}>\n Add row above\n </Menu.Item>\n <Menu.Item onClick={action(addRowBelow, 'insert', 'Row')}>Add row below</Menu.Item>\n <Menu.Item onClick={action(addColumnLeft, 'insert', 'Column')}>Add column left</Menu.Item>\n <Menu.Item onClick={action(addColumnRight, 'insert', 'Column')}>Add column right</Menu.Item>\n <Menu.Divider />\n <Menu.Item onClick={toggleHeader}>\n {isHeaderEnabled ? 'Disable table header' : 'Enable table header'}\n </Menu.Item>\n <Menu.Divider />\n <Menu.Item onClick={action(deleteRow, 'remove', 'Row')}>Delete row</Menu.Item>\n <Menu.Item onClick={action(deleteColumn, 'remove', 'Column')}>Delete column</Menu.Item>\n <Menu.Item onClick={action(deleteTable, 'remove', 'Table')}>Delete table</Menu.Item>\n </Menu.List>\n </Menu>\n );\n};\n","import * as React from 'react';\n\nimport tokens from '@contentful/f36-tokens';\nimport { TableCell } from '@contentful/rich-text-types';\nimport { css } from 'emotion';\nimport { useSelected } from 'slate-react';\n\nimport { RenderElementProps } from '../../../internal/types';\nimport { TableActions } from './TableActions';\n\nconst style = css`\n border: 1px solid ${tokens.gray400};\n border-collapse: collapse;\n padding: 10px 12px;\n min-width: 48px;\n position: relative;\n vertical-align: top;\n\n div:last-child {\n margin-bottom: 0;\n }\n`;\n\nexport const Cell = (props: RenderElementProps) => {\n const isSelected = useSelected();\n return (\n <td\n {...props.attributes}\n // may include `colspan` and/or `rowspan`\n // FIXME: figure out what is going wrong with type here\n // @ts-expect-error\n {...(props.element.data as TableCell['data'])}\n className={style}\n >\n {isSelected && <TableActions />}\n {props.children}\n </td>\n );\n};\n","import * as React from 'react';\n\nimport tokens from '@contentful/f36-tokens';\nimport { TableHeaderCell } from '@contentful/rich-text-types';\nimport { css } from 'emotion';\nimport { useSelected } from 'slate-react';\n\nimport { RenderElementProps } from '../../../internal/types';\nimport { TableActions } from './TableActions';\n\nconst style = css`\n background-clip: padding-box;\n background-color: ${tokens.gray200};\n border: 1px solid ${tokens.gray400};\n border-collapse: collapse;\n padding: 10px 12px;\n font-weight: ${tokens.fontWeightNormal};\n text-align: left;\n min-width: 48px;\n position: relative;\n\n div:last-child {\n margin-bottom: 0;\n }\n`;\n\nexport const HeaderCell = (props: RenderElementProps) => {\n const isSelected = useSelected();\n\n return (\n <th\n {...props.attributes}\n // may include `colspan` and/or `rowspan`\n // FIXME: figure out what is going wrong with type here\n // @ts-expect-error\n {...(props.element.data as TableHeaderCell['data'])}\n className={style}\n >\n {isSelected && <TableActions />}\n {props.children}\n </th>\n );\n};\n","import * as React from 'react';\n\nimport tokens from '@contentful/f36-tokens';\nimport { css } from 'emotion';\nimport * as Slate from 'slate-react';\n\nconst style = css`\n border: 1px solid ${tokens.gray400};\n border-collapse: collapse;\n\n &:hover td {\n background-color: transparent !important;\n }\n`;\n\nexport const Row = (props: Slate.RenderElementProps) => (\n <tr {...props.attributes} className={style}>\n {props.children}\n </tr>\n);\n","import * as React from 'react';\n\nimport tokens from '@contentful/f36-tokens';\nimport { BLOCKS } from '@contentful/rich-text-types';\nimport { css } from 'emotion';\nimport * as Slate from 'slate-react';\n\nconst style = css`\n margin-bottom: 1.5em;\n border-collapse: collapse;\n border-radius: 5px;\n border-style: hidden;\n box-shadow: 0 0 0 1px ${tokens.gray400};\n width: 100%;\n table-layout: fixed;\n overflow: hidden;\n`;\n\nexport const Table = (props: Slate.RenderElementProps) => {\n return (\n <div data-block-type={BLOCKS.TABLE}>\n <table className={style} {...props.attributes}>\n <tbody>{props.children}</tbody>\n </table>\n </div>\n );\n};\n","import { BLOCKS } from '@contentful/rich-text-types';\n\nimport { insertEmptyParagraph } from '../../helpers/editor';\nimport { getText, isElement } from '../../internal/queries';\nimport { Node } from '../../internal/types';\nimport { Element, PlateEditor } from '../../internal/types';\nimport { isTable } from './helpers';\n\n/**\n * Removes table wrappers when pasting a single table cell\n *\n * In Plate/Slate, copying the content of a table cell wraps\n * it in a <table><tr><td>{content}</td></tr></table> even\n * when copying partial cell content.\n *\n * That's really annoying as there is no way to remove the table\n * wrappers in that case.\n */\nconst trimUnnecessaryTableWrapper = (node: Node): Node[] => {\n if (!isElement(node)) {\n return [node];\n }\n\n // must be a table with a single row\n if (node.type !== BLOCKS.TABLE || node.children?.length !== 1) {\n return [node];\n }\n\n const row = node.children[0] as Element;\n\n // the row must contain a single cell\n if (row?.children?.length !== 1) {\n return [node];\n }\n\n const cell = row.children[0] as Element;\n\n return cell.children;\n};\n\nexport const insertTableFragment = (editor: PlateEditor) => {\n const { insertFragment } = editor;\n\n return (fragments: Node[]) => {\n if (!editor.selection) {\n return;\n }\n\n fragments = fragments.flatMap(trimUnnecessaryTableWrapper);\n\n // 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\n // More info: https://github.com/ianstormtaylor/slate/pull/4489 and https://github.com/ianstormtaylor/slate/issues/4542\n const isInsertingTable = fragments.some((fragment) => isTable(fragment as Element));\n const isTableFirstFragment =\n fragments.findIndex((fragment) => isTable(fragment as Element)) === 0;\n const currentLineHasText = getText(editor, editor.selection?.focus.path) !== '';\n\n if (isInsertingTable && isTableFirstFragment && currentLineHasText) {\n insertEmptyParagraph(editor);\n }\n\n return insertFragment(fragments);\n };\n};\n","import { KeyboardEvent } from 'react';\n\nimport { BLOCKS } from '@contentful/rich-text-types';\nimport { getTableEntries, onKeyDownTable as defaultKeyDownTable } from '@udecode/plate-table';\n\nimport { insertEmptyParagraph } from '../../helpers/editor';\nimport { blurEditor } from '../../internal/misc';\nimport { getAboveNode, isLastChildPath } from '../../internal/queries';\nimport { KeyboardHandler, HotkeyPlugin, NodeEntry } from '../../internal/types';\nimport { addRowBelow } from './actions';\n\nexport const onKeyDownTable: KeyboardHandler<HotkeyPlugin> = (editor, plugin) => {\n const defaultHandler = defaultKeyDownTable(editor, plugin);\n\n return (event: KeyboardEvent) => {\n // This fixes `Cannot resolve a Slate point from DOM point:\n // [object HTMLDivElement]` when typing while the cursor is before table\n const windowSelection = window.getSelection();\n if (windowSelection) {\n // @ts-expect-error\n // this attribute comes from `plugins/Table/components/Table.tsx`\n const blockType = windowSelection.anchorNode.attributes?.['data-block-type']?.value;\n const isBeforeTable = blockType === BLOCKS.TABLE;\n\n if (isBeforeTable) {\n if (event.key === 'Enter') {\n const above = getAboveNode(editor, { match: { type: BLOCKS.TABLE } });\n\n if (!above) return;\n\n const [, tablePath] = above;\n\n insertEmptyParagraph(editor, { at: tablePath, select: true });\n }\n\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n }\n\n // Pressing Tab on the last cell creates a new row\n // Otherwise, jumping between cells is handled in the defaultKeyDownTable\n if (event.key === 'Tab' && !event.shiftKey) {\n event.preventDefault();\n const entry = getTableEntries(editor, {});\n\n if (entry) {\n const { table, row, cell } = entry;\n\n const isLastCell = isLastChildPath(row as NodeEntry, cell[1]);\n const isLastRow = isLastChildPath(table as NodeEntry, row[1]);\n\n if (isLastRow && isLastCell) {\n addRowBelow(editor);\n\n // skip default handler\n return;\n } else {\n defaultHandler(event);\n }\n }\n }\n\n if (event.key === 'Escape') {\n blurEditor(editor);\n }\n };\n};\n","import {\n BLOCKS,\n INLINES,\n TOP_LEVEL_BLOCKS,\n VOID_BLOCKS,\n CONTAINERS,\n} from '@contentful/rich-text-types';\n\nconst inlines = Object.values(INLINES).map((type) => ({ type }));\n\nexport default {\n document: {\n nodes: [\n {\n types: TOP_LEVEL_BLOCKS.map((type) => ({ type })),\n },\n ],\n },\n\n blocks: {\n [BLOCKS.PARAGRAPH]: {\n nodes: [\n {\n match: [...inlines, { object: 'text' }],\n },\n ],\n },\n [BLOCKS.HEADING_1]: {\n nodes: [\n {\n match: [...inlines, { object: 'text' }],\n },\n ],\n },\n [BLOCKS.HEADING_2]: {\n nodes: [\n {\n match: [...inlines, { object: 'text' }],\n },\n ],\n },\n [BLOCKS.HEADING_3]: {\n nodes: [\n {\n match: [...inlines, { object: 'text' }],\n },\n ],\n },\n [BLOCKS.HEADING_4]: {\n nodes: [\n {\n match: [...inlines, { object: 'text' }],\n },\n ],\n },\n [BLOCKS.HEADING_5]: {\n nodes: [\n {\n match: [...inlines, { object: 'text' }],\n },\n ],\n },\n [BLOCKS.HEADING_6]: {\n nodes: [\n {\n match: [...inlines, { object: 'text' }],\n },\n ],\n },\n\n ...VOID_BLOCKS.reduce(\n (blocks, nodeType) => ({\n ...blocks,\n [nodeType]: { isVoid: true },\n }),\n {}\n ),\n\n // TODO: add list schema\n\n [BLOCKS.QUOTE]: {\n nodes: [\n {\n match: [CONTAINERS[BLOCKS.QUOTE].map((type) => ({ type }))],\n min: 1,\n },\n ],\n normalize: (editor, error) => {\n if (error.code === 'child_type_invalid') {\n return editor.unwrapBlockByKey(error.node.key, BLOCKS.QUOTE);\n }\n },\n },\n },\n\n inlines: {\n [INLINES.HYPERLINK]: {\n nodes: [\n {\n match: [{ object: 'text' }],\n },\n ],\n },\n [INLINES.ENTRY_HYPERLINK]: {\n nodes: [\n {\n match: [{ object: 'text' }],\n },\n ],\n },\n [INLINES.ASSET_HYPERLINK]: {\n nodes: [\n {\n match: [{ object: 'text' }],\n },\n ],\n },\n [INLINES.EMBEDDED_ENTRY]: {\n isVoid: true,\n },\n },\n};\n","import * as contentfulSlateJSAdapter from '@contentful/contentful-slatejs-adapter';\nimport { documentToPlainTextString } from '@contentful/rich-text-plain-text-renderer';\n\nimport Schema from '../../constants/Schema';\nimport { PlateEditor } from '../../internal/types';\n\nexport function getCharacterCount(editor: PlateEditor) {\n const document = contentfulSlateJSAdapter.toContentfulDocument({\n document: editor.children,\n schema: Schema,\n });\n\n return documentToPlainTextString(document).length;\n}\n","import { PlatePlugin } from '../../internal/types';\nimport { getCharacterCount } from './utils';\n\nexport type RichTextTrackingActionName =\n // Elements\n | 'edit'\n | 'insert'\n | 'remove'\n // Marks\n | 'mark'\n | 'unmark'\n // Tables\n | 'insertTable'\n | 'insertTableRow'\n | 'insertTableColumn'\n | 'removeTable'\n | 'removeTableRow'\n | 'removeTableColumn'\n // Copy & Paste\n | 'paste'\n | 'invalidTablePaste'\n // Hyperlinks\n | 'cancelCreateHyperlinkDialog'\n | 'cancelEditHyperlinkDialog'\n | 'linkRendered'\n | 'openCreateHyperlinkDialog'\n | 'openEditHyperlinkDialog'\n | 'unlinkHyperlinks'\n // Embeds\n | 'openCreateEmbedDialog'\n | 'cancelCreateEmbedDialog'\n // CommandPalette\n | 'openRichTextCommandPalette'\n | 'cancelRichTextCommandPalette';\n\nexport type RichTextTrackingActionHandler = (\n name: RichTextTrackingActionName,\n data: Record<string, unknown>\n) => unknown;\n\nexport interface TrackingPluginActions {\n onViewportAction: (\n actionName: RichTextTrackingActionName,\n data?: Record<string, unknown>\n ) => ReturnType<RichTextTrackingActionHandler>;\n\n onShortcutAction: (\n actionName: RichTextTrackingActionName,\n data?: Record<string, unknown>\n ) => ReturnType<RichTextTrackingActionHandler>;\n\n onShortcutOrViewportAction: (\n actionName: RichTextTrackingActionName,\n data?: Record<string, unknown>\n ) => ReturnType<RichTextTrackingActionHandler>;\n\n onToolbarAction: (\n actionName: RichTextTrackingActionName,\n data?: Record<string, unknown>\n ) => ReturnType<RichTextTrackingActionHandler>;\n\n onCommandPaletteAction: (\n actionName: RichTextTrackingActionName,\n data?: Record<string, unknown>\n ) => ReturnType<RichTextTrackingActionHandler>;\n}\n\nconst actionOrigin = {\n TOOLBAR: 'toolbar-icon',\n SHORTCUT: 'shortcut',\n VIEWPORT: 'viewport-interaction',\n SHORTCUT_OR_VIEWPORT: 'shortcut-or-viewport',\n COMMAND_PALETTE: 'command-palette',\n};\n\nexport function getPastingSource(data: DataTransfer) {\n const textHtml = data.getData('text/html');\n const doc = new DOMParser().parseFromString(textHtml, 'text/html');\n\n if (doc.querySelector('[id*=\"docs-internal-guid\"]')) {\n return 'Google Docs';\n }\n\n if (doc.querySelector('google-sheets-html-origin') || doc.querySelector('[data-sheets-value]')) {\n return 'Google Spreadsheets';\n }\n\n if (doc.querySelector('meta[content*=\"Microsoft Excel\"]')) {\n return 'Microsoft Excel';\n }\n\n if (doc.querySelector('meta[content*=\"Microsoft Word\"]')) {\n return 'Microsoft Word';\n }\n\n // 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\n if (\n doc.querySelector('[style*=\"Arial_MSFontService\"]') &&\n (doc.querySelector('.TextRun') || doc.querySelector('.OutlineElement'))\n ) {\n return 'Microsoft Word Online';\n }\n\n if (doc.querySelector('meta[content=\"Cocoa HTML Writer\"]')) {\n return 'Apple Notes';\n }\n\n if (doc.querySelector('[style*=\"Slack-Lato, Slack-Fractions\"]')) {\n return 'Slack';\n }\n\n return 'Unknown';\n}\n\nexport const createTrackingPlugin = (onAction: RichTextTrackingActionHandler): PlatePlugin => {\n const trackingActions: TrackingPluginActions = {\n onViewportAction: (actionName: RichTextTrackingActionName, data = {}) =>\n onAction(actionName, { origin: actionOrigin.VIEWPORT, ...data }),\n\n onShortcutAction: (actionName: RichTextTrackingActionName, data = {}) =>\n onAction(actionName, { origin: actionOrigin.SHORTCUT, ...data }),\n\n onShortcutOrViewportAction: (actionName: RichTextTrackingActionName, data = {}) =>\n onAction(actionName, { origin: actionOrigin.SHORTCUT_OR_VIEWPORT, ...data }),\n\n onToolbarAction: (actionName: RichTextTrackingActionName, data = {}) =>\n onAction(actionName, { origin: actionOrigin.TOOLBAR, ...data }),\n\n onCommandPaletteAction: (actionName: RichTextTrackingActionName, data = {}) =>\n onAction(actionName, {\n origin: actionOrigin.COMMAND_PALETTE,\n ...data,\n }),\n };\n\n return {\n key: 'TrackingPlugin',\n withOverrides: (editor) => {\n const { insertData } = editor;\n\n editor.tracking = trackingActions;\n\n editor.insertData = (data) => {\n const isCopyAndPaste = data.types.length !== 0;\n if (isCopyAndPaste) {\n const characterCountSelection = window.getSelection()?.toString().length;\n const characterCountBefore = getCharacterCount(editor);\n\n setTimeout(() => {\n const characterCountAfter = getCharacterCount(editor);\n\n trackingActions.onShortcutOrViewportAction('paste', {\n characterCountAfter,\n characterCountBefore,\n characterCountSelection,\n source: getPastingSource(data),\n });\n });\n }\n\n insertData(data);\n };\n\n return editor;\n },\n };\n};\n","import { BLOCKS } from '@contentful/rich-text-types';\n\nimport { isElement } from '../../internal/queries';\nimport { Node, PlateEditor } from '../../internal/types';\nimport { getPastingSource } from '../../plugins/Tracking';\nimport type { NodeTransformer } from '../Normalizer';\n\nfunction hasTables(nodes: Node[]) {\n return nodes.some(({ type }) => {\n return type === BLOCKS.TABLE;\n });\n}\n\nconst isTableHeaderCell = ({ type }: Node) => type === BLOCKS.TABLE_HEADER_CELL;\n\nfunction hasHeadersOutsideFirstRow(nodes: Node[]) {\n return nodes\n .filter(({ type }) => type === BLOCKS.TABLE)\n .flatMap(({ children }) => (children as Node[]).slice(1) as Node[])\n .some(({ children }) => (children as Node[]).some(isTableHeaderCell));\n}\n\nexport function addTableTrackingEvents(editor: PlateEditor) {\n const { insertData } = editor;\n editor.insertData = (data: DataTransfer) => {\n const html = data.getData('text/html');\n\n if (html) {\n const { children: markupBefore } = editor;\n insertData(data);\n const { children: markupAfter } = editor;\n setTimeout(() => {\n if (hasTables(markupBefore)) return;\n if (hasTables(markupAfter)) {\n editor.tracking.onViewportAction('paste', {\n tablePasted: true,\n source: getPastingSource(data),\n hasHeadersOutsideFirstRow: hasHeadersOutsideFirstRow(markupAfter),\n });\n }\n }, 1);\n } else {\n insertData(data);\n }\n };\n}\n\nexport const withInvalidCellChildrenTracking = (transformer: NodeTransformer): NodeTransformer => {\n return (editor, childEntry) => {\n const [node] = childEntry;\n\n if (isElement(node)) {\n editor.tracking?.onViewportAction('invalidTablePaste', {\n nodeType: node.type,\n });\n }\n\n return transformer(editor, childEntry);\n };\n};\n","import { BLOCKS, CONTAINERS } from '@contentful/rich-text-types';\nimport {\n createTablePlugin as createDefaultTablePlugin,\n ELEMENT_TABLE,\n ELEMENT_TD,\n ELEMENT_TH,\n ELEMENT_TR,\n withTable,\n TablePlugin,\n} from '@udecode/plate-table';\n\nimport { isRootLevel } from '../../helpers/editor';\nimport { transformLift, transformParagraphs, transformWrapIn } from '../../helpers/transformers';\nimport {\n getParentNode,\n getBlockAbove,\n getLastChildPath,\n getNextPath,\n} from '../../internal/queries';\nimport { insertNodes } from '../../internal/transforms';\nimport { PlatePlugin, PlateEditor, Value } from '../../internal/types';\nimport { Cell } from './components/Cell';\nimport { HeaderCell } from './components/HeaderCell';\nimport { Row } from './components/Row';\nimport { Table } from './components/Table';\nimport { createEmptyTableCells, getNoOfMissingTableCellsInRow, isNotEmpty } from './helpers';\nimport { insertTableFragment } from './insertTableFragment';\nimport { onKeyDownTable } from './onKeyDownTable';\nimport { addTableTrackingEvents, withInvalidCellChildrenTracking } from './tableTracking';\n\nexport const createTablePlugin = (): PlatePlugin =>\n createDefaultTablePlugin<TablePlugin<Value>, Value, PlateEditor>({\n type: BLOCKS.TABLE,\n handlers: {\n // @ts-expect-error\n onKeyDown: onKeyDownTable,\n },\n withOverrides: (editor, plugin) => {\n const { normalizeNode } = editor;\n // injects important fixes from plate's original table plugin\n withTable(editor, plugin);\n\n // Resets all normalization rules added by @udecode/plate-table as\n // they conflict with our own\n editor.normalizeNode = normalizeNode;\n\n addTableTrackingEvents(editor);\n\n editor.insertFragment = insertTableFragment(editor);\n\n return editor;\n },\n overrideByKey: {\n [ELEMENT_TABLE]: {\n type: BLOCKS.TABLE,\n component: Table,\n normalizer: [\n {\n validNode: isNotEmpty,\n },\n {\n // Move to root level unless nested\n validNode: (editor, [, path]) => {\n // Nested tables are handled by another normalization\n // rule in a the table cell level\n const isNestedTable = !!getBlockAbove(editor, {\n at: path,\n match: {\n type: [BLOCKS.TABLE_CELL, BLOCKS.TABLE_HEADER_CELL],\n },\n });\n\n return isRootLevel(path) || isNestedTable;\n },\n transform: transformLift,\n },\n {\n validChildren: CONTAINERS[BLOCKS.TABLE],\n },\n ],\n },\n [ELEMENT_TR]: {\n type: BLOCKS.TABLE_ROW,\n component: Row,\n normalizer: [\n {\n validChildren: CONTAINERS[BLOCKS.TABLE_ROW],\n transform: transformWrapIn(BLOCKS.TABLE_CELL),\n },\n {\n // Remove empty rows\n validNode: isNotEmpty,\n },\n {\n // Parent must be a table\n validNode: (editor, [, path]) => {\n const parent = getParentNode(editor, path)?.[0];\n return parent && parent.type === BLOCKS.TABLE;\n },\n transform: transformWrapIn(BLOCKS.TABLE),\n },\n {\n // ensure consistent number of cells in each row\n validNode: (editor, entry) => {\n return getNoOfMissingTableCellsInRow(editor, entry) === 0;\n },\n transform: (editor, entry) => {\n const howMany = getNoOfMissingTableCellsInRow(editor, entry);\n const at = getNextPath(getLastChildPath(entry));\n\n insertNodes(editor, createEmptyTableCells(howMany), {\n at,\n });\n },\n },\n ],\n },\n [ELEMENT_TH]: {\n type: BLOCKS.TABLE_HEADER_CELL,\n component: HeaderCell,\n normalizer: [\n {\n validChildren: CONTAINERS[BLOCKS.TABLE_HEADER_CELL],\n transform: withInvalidCellChildrenTracking(transformParagraphs),\n },\n ],\n },\n [ELEMENT_TD]: {\n type: BLOCKS.TABLE_CELL,\n component: Cell,\n normalizer: [\n {\n validChildren: CONTAINERS[BLOCKS.TABLE_CELL],\n transform: withInvalidCellChildrenTracking(transformParagraphs),\n },\n ],\n },\n } as Record<string, Partial<PlatePlugin>>,\n });\n","import * as React from 'react';\n\nimport { TableIcon } from '@contentful/f36-icons';\n\nimport { useContentfulEditor } from '../../../ContentfulEditorProvider';\nimport { focus } from '../../../helpers/editor';\nimport { ToolbarButton } from '../../shared/ToolbarButton';\nimport { insertTableAndFocusFirstCell, isTableActive } from './../helpers';\n\nexport interface ToolbarTableButtonProps {\n isDisabled: boolean | undefined;\n}\n\nexport function ToolbarTableButton(props: ToolbarTableButtonProps) {\n const editor = useContentfulEditor();\n const isActive = editor && isTableActive(editor);\n\n async function handleClick() {\n if (!editor) return;\n\n editor.tracking.onToolbarAction('insertTable');\n insertTableAndFocusFirstCell(editor);\n focus(editor);\n }\n\n if (!editor) return null;\n\n return (\n <ToolbarButton\n title=\"Table\"\n testId=\"table-toolbar-button\"\n onClick={handleClick}\n // TODO: active state looks off since the button will be disabled. Do we still need it?\n isActive={!!isActive}\n isDisabled={props.isDisabled}\n >\n <TableIcon />\n </ToolbarButton>\n );\n}\n","import { BLOCKS, TEXT_CONTAINERS } from '@contentful/rich-text-types';\n\nimport {\n getAboveNode,\n isAncestorEmpty,\n getNodeEntries,\n getPointBefore,\n isInline,\n isEndPoint,\n getPointAfter,\n isRangeCollapsed,\n queryNode,\n isText,\n} from '../../internal/queries';\nimport {\n setSelection,\n select,\n removeNodes,\n splitNodes,\n unhangRange,\n unsetNodes,\n} from '../../internal/transforms';\nimport {\n PlatePlugin,\n PlateEditor,\n Ancestor,\n Node,\n Location,\n BaseRange,\n} from '../../internal/types';\n\nexport function createTextPlugin(restrictedMarks: string[] = []): PlatePlugin {\n return {\n key: 'TextPlugin',\n handlers: {\n // Triple selection in a non-Firefox browser undesirably selects\n // the start of the next block. Editor.unhangRange helps removing\n // the extra block at the end.\n onMouseUp: (editor) => () => {\n if (!editor.selection) {\n return;\n }\n\n setSelection(editor, unhangRange(editor, editor.selection) as Partial<BaseRange>);\n },\n },\n withOverrides: (editor) => {\n // Reverts the change made upstream that caused the cursor\n // to be trapped inside inline elements.\n //\n // Reverts https://github.com/ianstormtaylor/slate/pull/4578/\n // Related https://github.com/ianstormtaylor/slate/issues/4704\n const { insertText } = editor;\n\n editor.insertText = (text) => {\n const { selection } = editor;\n\n // If the cursor is at the end of an inline, move it outside\n // before inserting\n if (selection && isRangeCollapsed(selection)) {\n const inlinePath = getAboveNode(editor, {\n match: (n) => isInline(editor, n),\n mode: 'highest',\n })?.[1];\n\n if (inlinePath && isEndPoint(editor, selection.anchor, inlinePath)) {\n const point = getPointAfter(editor, inlinePath);\n setSelection(editor, {\n anchor: point,\n focus: point,\n });\n }\n }\n\n return insertText(text);\n };\n\n // When pressing delete instead of backspace\n const { deleteForward, deleteBackward } = editor;\n\n editor.deleteBackward = (unit) => {\n deleteEmptyParagraph(unit, editor, deleteBackward);\n };\n\n editor.deleteForward = (unit) => {\n deleteEmptyParagraph(unit, editor, deleteForward);\n };\n\n fixPasteAsPlainText(editor);\n\n return editor;\n },\n normalizer: [\n {\n match: isText,\n transform: (editor, [, path]) => {\n unsetNodes(editor, restrictedMarks, { at: path });\n },\n validNode: (_editor, [node]) => {\n return !restrictedMarks.some((mark) => {\n return mark in node;\n });\n },\n },\n ],\n };\n}\n\nfunction deleteEmptyParagraph(\n unit: 'character' | 'word' | 'line' | 'block',\n editor: PlateEditor,\n deleteFunction: Function\n) {\n const entry = getAboveNode(editor, {\n match: {\n type: TEXT_CONTAINERS,\n },\n });\n\n if (entry) {\n const [paragraphOrHeading, path] = entry;\n const isTextEmpty = isAncestorEmpty(editor, paragraphOrHeading as Ancestor);\n // We ignore paragraphs/headings that are children of ul, ol, blockquote, tables, etc\n const isRootLevel = path.length === 1;\n const hasSiblings = editor.children.length > 1; // prevent editor from losing focus\n\n if (isTextEmpty && isRootLevel && hasSiblings) {\n removeNodes(editor, { at: path });\n\n const prevNode = getPointBefore(editor, editor.selection as Location, {\n unit,\n });\n\n if (prevNode) {\n const [prevCell] = getNodeEntries(editor, {\n match: (node: Node) =>\n queryNode([node, prevNode.path], {\n allow: [BLOCKS.EMBEDDED_ASSET, BLOCKS.EMBEDDED_ENTRY, BLOCKS.HR],\n }),\n at: prevNode,\n });\n\n if (prevCell) {\n select(editor, prevNode);\n }\n }\n } else {\n deleteFunction(unit);\n }\n } else {\n deleteFunction(unit);\n }\n}\n\n/**\n * To be compatible with the old behavior we need to treat each 2 consecutive\n * line breaks as a new paragraph when pasting as plain text (also known as\n * paste and match style in macOS)\n */\nfunction fixPasteAsPlainText(editor: PlateEditor) {\n editor.insertTextData = (data: DataTransfer): boolean => {\n const text = data.getData('text/plain');\n\n if (!text) {\n return false;\n }\n\n const lines = text.split(/\\n{2}/);\n let split = false;\n\n for (const line of lines) {\n // empty lines\n if (/^(\\r\\n?|\\n)$/.test(line)) {\n continue;\n }\n\n if (split) {\n splitNodes(editor, { always: true });\n }\n\n editor.insertText(line);\n split = true;\n }\n\n return true;\n };\n}\n","import { BLOCKS } from '@contentful/rich-text-types';\nimport { createTrailingBlockPlugin } from '@udecode/plate-trailing-block';\n\nimport { PlatePlugin } from '../../internal/types';\n\nexport const createTrailingParagraphPlugin = (): PlatePlugin => {\n return createTrailingBlockPlugin({\n options: {\n type: BLOCKS.PARAGRAPH,\n level: 0,\n },\n });\n};\n","import { isRootLevel } from '../../helpers/editor';\nimport { isFirstChildPath } from '../../internal/queries';\nimport { PlatePlugin } from '../../internal/types';\n\nexport const createVoidsPlugin = (): PlatePlugin => ({\n key: 'VoidsPlugin',\n exitBreak: [\n {\n // Inserts a new paragraph *before* a void element if it's the very first\n // node on the editor\n hotkey: 'enter',\n before: true,\n query: {\n filter: ([node, path]) => isRootLevel(path) && isFirstChildPath(path) && !!node.isVoid,\n },\n },\n {\n // Inserts a new paragraph on enter when a void element is focused\n hotkey: 'enter',\n // exploit the internal use of Array.slice(0, level + 1) by the exitBreak plugin\n // to stay in the parent element\n level: -2,\n query: {\n filter: ([node, path]) => !(isRootLevel(path) && isFirstChildPath(path)) && !!node.isVoid,\n },\n },\n ],\n});\n","import { FieldExtensionSDK } from '@contentful/app-sdk';\nimport {\n createDeserializeAstPlugin,\n createDeserializeHtmlPlugin,\n PlateProps,\n} from '@udecode/plate-core';\nimport { createDeserializeDocxPlugin } from '@udecode/plate-serializer-docx';\n\nimport { PlatePlugin } from '../internal/types';\nimport { createSoftBreakPlugin, createExitBreakPlugin, createResetNodePlugin } from './Break';\nimport { createCommandPalettePlugin } from './CommandPalette';\nimport { isCommandPromptPluginEnabled } from './CommandPalette/useCommands';\nimport { createDragAndDropPlugin } from './DragAndDrop';\nimport {\n createEmbeddedAssetBlockPlugin,\n createEmbeddedEntryBlockPlugin,\n} from './EmbeddedEntityBlock';\nimport { createEmbeddedEntityInlinePlugin } from './EmbeddedEntityInline';\nimport { createHeadingPlugin } from './Heading';\nimport { createHrPlugin } from './Hr';\nimport { createHyperlinkPlugin } from './Hyperlink';\nimport { createListPlugin } from './List';\nimport { createMarksPlugin } from './Marks';\nimport { createNormalizerPlugin } from './Normalizer';\nimport { createParagraphPlugin } from './Paragraph';\nimport { createPasteHTMLPlugin } from './PasteHTML';\nimport { createQuotePlugin } from './Quote';\nimport { createSelectOnBackspacePlugin } from './SelectOnBackspace';\nimport { createTablePlugin } from './Table';\nimport { createTextPlugin } from './Text';\nimport { createTrackingPlugin, RichTextTrackingActionHandler } from './Tracking';\nimport { createTrailingParagraphPlugin } from './TrailingParagraph';\nimport { createVoidsPlugin } from './Voids';\n\nexport const getPlugins = (\n sdk: FieldExtensionSDK,\n onAction: RichTextTrackingActionHandler,\n restrictedMarks?: string[]\n): PlatePlugin[] => [\n // AST must come after the HTML deserializer\n createDeserializeHtmlPlugin(),\n createDeserializeAstPlugin(),\n createDeserializeDocxPlugin(),\n\n // Tracking - This should come first so all plugins below will have access to `editor.tracking`\n createTrackingPlugin(onAction),\n\n // Global / Global shortcuts\n createDragAndDropPlugin(),\n // Enable command palette plugin only, if at least action type is allowed\n ...(Object.values(isCommandPromptPluginEnabled(sdk)).some(Boolean)\n ? [createCommandPalettePlugin()]\n : []),\n\n // Block Elements\n createParagraphPlugin(),\n createListPlugin(),\n createHrPlugin(),\n createHeadingPlugin(),\n createQuotePlugin(),\n createTablePlugin(),\n createEmbeddedEntryBlockPlugin(sdk),\n createEmbeddedAssetBlockPlugin(sdk),\n\n // Inline elements\n createHyperlinkPlugin(sdk),\n createEmbeddedEntityInlinePlugin(sdk),\n\n // Marks\n createMarksPlugin(),\n\n // Other\n createTrailingParagraphPlugin(),\n createTextPlugin(restrictedMarks),\n createVoidsPlugin(),\n createSelectOnBackspacePlugin(),\n\n // Pasting content from other sources\n createPasteHTMLPlugin(),\n\n // These plugins drive their configurations from the list of plugins\n // above. They MUST come last.\n createSoftBreakPlugin(),\n createExitBreakPlugin(),\n createResetNodePlugin(),\n createNormalizerPlugin(),\n];\n\nexport const disableCorePlugins: PlateProps['disableCorePlugins'] = {\n // Temporarily until the upstream issue is fixed.\n // See: https://github.com/udecode/plate/issues/1329#issuecomment-1005935946\n deserializeAst: true,\n deserializeHtml: true,\n\n // Note: Enabled by default since v9.0.0 but it causes Cypress's\n // .click() command to fail\n eventEditor: true,\n};\n","import { Text, Node } from '../internal/types';\n\nconst isTextElement = (node: Node): node is Text => 'text' in node;\n\n/**\n * Ensures all nodes have a child leaf text element. This should be handled by\n * Slate but its behavior has proven to be buggy and unpredictable.\n */\nexport function sanitizeIncomingSlateDoc(nodes: Node[] = []): Node[] {\n return nodes.map((node: Node): Node => {\n if (isTextElement(node)) {\n return node;\n }\n if ((node.children as Node[])?.length === 0) {\n return {\n ...node,\n children: [{ text: '', data: {} }],\n };\n }\n return {\n ...node,\n children: sanitizeIncomingSlateDoc(node?.children as Node[]),\n };\n });\n}\n","import { toSlatejsDocument } from '@contentful/contentful-slatejs-adapter';\nimport { EMPTY_DOCUMENT, Document } from '@contentful/rich-text-types';\n\nimport schema from './constants/Schema';\nimport { sanitizeIncomingSlateDoc } from './helpers/sanitizeIncomingSlateDoc';\nimport { createPlateEditor, CreatePlateEditorOptions, withoutNormalizing } from './internal';\nimport { getEndPoint, isNode } from './internal/queries';\nimport { normalize, select } from './internal/transforms';\nimport { Value, PlateEditor, Node } from './internal/types';\n\n/**\n * For legacy reasons, a document may not have any content at all\n * e.g:\n *\n * {nodeType: document, data: {}, content: []}\n *\n * Rendering such document will break the Slate editor\n */\nexport const hasContent = (doc?: Document) => {\n return (doc?.content || []).length > 0;\n};\n\n/*\n Plate api doesn't allow to modify (easily) the editor value programmatically\n after the editor instance is created \n\n This function is inspired to https://github.com/udecode/plate/issues/1269#issuecomment-1057643622\n */\nexport const setEditorContent = (editor: PlateEditor, nodes?: Node[]): void => {\n // Replaces editor content while keeping change history\n withoutNormalizing(editor, () => {\n const children = [...editor.children];\n children.forEach((node) => editor.apply({ type: 'remove_node', path: [0], node }));\n\n if (nodes) {\n const nodesArray = isNode(nodes) ? [nodes] : nodes;\n nodesArray.forEach((node, i) => {\n editor.apply({ type: 'insert_node', path: [i], node });\n });\n }\n\n const point = getEndPoint(editor, []);\n if (point) {\n select(editor, point);\n }\n });\n};\n\n/**\n * Converts a Contentful rich text document to the corresponding slate editor\n * value\n */\nexport const documentToEditorValue = (doc?: Document) => {\n const slateDoc = toSlatejsDocument({\n document: hasContent(doc) ? doc : EMPTY_DOCUMENT,\n // TODO: get rid of schema, https://github.com/contentful/field-editors/pull/1065#discussion_r826723248\n schema,\n });\n\n return sanitizeIncomingSlateDoc(slateDoc);\n};\n\nexport const normalizeEditorValue = (\n value: Value,\n options?: Omit<CreatePlateEditorOptions, 'id' | 'editor'>\n) => {\n const editor = createPlateEditor(options);\n editor.children = value;\n normalize(editor, { force: true });\n return editor.children;\n};\n","import tokens from '@contentful/f36-tokens';\nimport { css } from 'emotion';\n\nconst STYLE_EDITOR_BORDER = `1px solid ${tokens.gray400}`;\n\nexport const styles = {\n root: css({\n position: 'relative',\n }),\n editor: css({\n borderRadius: `0 0 ${tokens.borderRadiusMedium} ${tokens.borderRadiusMedium}`,\n border: STYLE_EDITOR_BORDER,\n borderTop: 0,\n padding: '20px',\n fontSize: tokens.spacingM,\n fontFamily: tokens.fontStackPrimary,\n minHeight: '400px',\n background: tokens.colorWhite,\n outline: 'none',\n whiteSpace: 'pre-wrap',\n overflowWrap: 'break-word',\n webkitUserModify: 'read-write-plaintext-only',\n a: {\n span: {\n cursor: 'not-allowed',\n '&:hover': {\n cursor: 'not-allowed',\n },\n },\n },\n // We need to reset LIC style due to conflicts between PARAGRAPH styles\n 'ul > li > div': {\n margin: 0,\n },\n }),\n hiddenToolbar: css({\n borderTop: STYLE_EDITOR_BORDER,\n }),\n enabled: css({\n background: tokens.colorWhite,\n a: {\n span: {\n cursor: 'pointer',\n '&:hover': {\n cursor: 'pointer',\n },\n },\n },\n }),\n disabled: css({\n background: tokens.gray100,\n cursor: 'not-allowed',\n }),\n};\n","import * as React from 'react';\n\nimport { Button, Menu } from '@contentful/f36-components';\nimport { PlusIcon, ChevronDownIcon } from '@contentful/f36-icons';\n\nexport interface EmbeddedEntityDropdownButtonProps {\n children: React.ReactNode;\n isDisabled: boolean | undefined;\n isOpen: boolean;\n onClose: () => void;\n onToggle: () => void;\n}\n\nexport function EmbeddedEntityDropdownButton({\n children,\n isDisabled,\n isOpen,\n onClose,\n onToggle,\n}: EmbeddedEntityDropdownButtonProps) {\n return (\n <Menu placement=\"bottom-end\" isOpen={isOpen} onClose={onClose} onOpen={onToggle}>\n <Menu.Trigger>\n <Button\n endIcon={<ChevronDownIcon />}\n testId=\"toolbar-entity-dropdown-toggle\"\n variant=\"secondary\"\n size=\"small\"\n startIcon={<PlusIcon />}\n isDisabled={isDisabled}>\n Embed\n </Button>\n </Menu.Trigger>\n <Menu.List className=\"toolbar-entity-dropdown-list\">{children}</Menu.List>\n </Menu>\n );\n}\n","import React, { useState } from 'react';\n\nimport { BLOCKS, INLINES } from '@contentful/rich-text-types';\n\nimport { useContentfulEditor } from '../../ContentfulEditorProvider';\nimport { isLinkActive } from '../../helpers/editor';\nimport { isNodeTypeEnabled } from '../../helpers/validations';\nimport { ToolbarIcon as EmbeddedEntityBlockToolbarIcon } from '../../plugins/EmbeddedEntityBlock';\nimport { ToolbarEmbeddedEntityInlineButton } from '../../plugins/EmbeddedEntityInline';\nimport { useSdkContext } from '../../SdkProvider';\nimport { EmbeddedEntityDropdownButton } from './EmbeddedEntityDropdownButton';\n\nexport interface EmbedEntityWidgetProps {\n isDisabled?: boolean;\n canInsertBlocks?: boolean;\n}\n\nexport const EmbedEntityWidget = ({ isDisabled, canInsertBlocks }: EmbedEntityWidgetProps) => {\n const sdk = useSdkContext();\n const editor = useContentfulEditor();\n\n const [isEmbedDropdownOpen, setEmbedDropdownOpen] = useState(false);\n const onCloseEntityDropdown = () => setEmbedDropdownOpen(false);\n const onToggleEntityDropdown = () => setEmbedDropdownOpen(!isEmbedDropdownOpen);\n\n const inlineEntryEmbedEnabled = isNodeTypeEnabled(sdk.field, INLINES.EMBEDDED_ENTRY);\n const blockEntryEmbedEnabled =\n isNodeTypeEnabled(sdk.field, BLOCKS.EMBEDDED_ENTRY) && canInsertBlocks;\n // Removed access check following https://contentful.atlassian.net/browse/DANTE-486\n // TODO: refine permissions check in order to account for tags in rules and then readd access.can('read', 'Asset')\n const blockAssetEmbedEnabled =\n isNodeTypeEnabled(sdk.field, BLOCKS.EMBEDDED_ASSET) && canInsertBlocks;\n\n const actions = (\n <>\n {blockEntryEmbedEnabled && (\n <EmbeddedEntityBlockToolbarIcon\n isDisabled={!!isDisabled}\n nodeType={BLOCKS.EMBEDDED_ENTRY}\n onClose={onCloseEntityDropdown}\n />\n )}\n {inlineEntryEmbedEnabled && (\n <ToolbarEmbeddedEntityInlineButton\n isDisabled={!!isDisabled || isLinkActive(editor)}\n onClose={onCloseEntityDropdown}\n />\n )}\n {blockAssetEmbedEnabled && (\n <EmbeddedEntityBlockToolbarIcon\n isDisabled={!!isDisabled}\n nodeType={BLOCKS.EMBEDDED_ASSET}\n onClose={onCloseEntityDropdown}\n />\n )}\n </>\n );\n\n const showEmbedButton =\n blockEntryEmbedEnabled || inlineEntryEmbedEnabled || blockAssetEmbedEnabled;\n\n return showEmbedButton ? (\n <EmbeddedEntityDropdownButton\n isDisabled={isDisabled}\n onClose={onCloseEntityDropdown}\n onToggle={onToggleEntityDropdown}\n isOpen={isEmbedDropdownOpen}\n >\n {actions}\n </EmbeddedEntityDropdownButton>\n ) : null;\n};\n","import React from 'react';\n\nimport { FieldExtensionSDK } from '@contentful/app-sdk';\nimport { Flex, IconButton, Menu } from '@contentful/f36-components';\nimport { MoreHorizontalIcon } from '@contentful/f36-icons';\nimport tokens from '@contentful/f36-tokens';\nimport { BLOCKS, INLINES, MARKS } from '@contentful/rich-text-types';\nimport { css } from 'emotion';\n\nimport { useContentfulEditor } from '../ContentfulEditorProvider';\nimport { isNodeTypeSelected } from '../helpers/editor';\nimport { isNodeTypeEnabled, isMarkEnabled } from '../helpers/validations';\nimport { isMarkActive } from '../internal/queries';\nimport { ToolbarHeadingButton } from '../plugins/Heading';\nimport { ToolbarHrButton } from '../plugins/Hr';\nimport { ToolbarHyperlinkButton } from '../plugins/Hyperlink';\nimport { ToolbarListButton } from '../plugins/List';\nimport { ToolbarBoldButton } from '../plugins/Marks/Bold';\nimport { ToolbarCodeButton, ToolbarDropdownCodeButton } from '../plugins/Marks/Code';\nimport { ToolbarItalicButton } from '../plugins/Marks/Italic';\nimport { ToolbarDropdownSubscriptButton, ToolbarSubscriptButton } from '../plugins/Marks/Subscript';\nimport {\n ToolbarDropdownSuperscriptButton,\n ToolbarSuperscriptButton,\n} from '../plugins/Marks/Superscript';\nimport { ToolbarUnderlineButton } from '../plugins/Marks/Underline';\nimport { ToolbarQuoteButton } from '../plugins/Quote';\nimport { ToolbarTableButton } from '../plugins/Table';\nimport { useSdkContext } from '../SdkProvider';\nimport { EmbedEntityWidget } from './components/EmbedEntityWidget';\n\ntype ToolbarProps = {\n isDisabled?: boolean;\n};\n\nconst styles = {\n toolbar: css({\n border: `1px solid ${tokens.gray400}`,\n backgroundColor: tokens.gray100,\n padding: tokens.spacingXs,\n borderRadius: `${tokens.borderRadiusMedium} ${tokens.borderRadiusMedium} 0 0`,\n }),\n toolbarBtn: css({\n height: '30px',\n width: '30px',\n marginLeft: tokens.spacing2Xs,\n marginRight: tokens.spacing2Xs,\n }),\n divider: css({\n display: 'inline-block',\n height: '21px',\n width: '1px',\n background: tokens.gray300,\n margin: `0 ${tokens.spacing2Xs}`,\n }),\n embedActionsWrapper: css({\n display: ['-webkit-box', '-ms-flexbox', 'flex'],\n webkitAlignSelf: 'flex-start',\n alignSelf: 'flex-start',\n msFlexItemAlign: 'start',\n marginLeft: 'auto',\n }),\n formattingOptionsWrapper: css({\n display: ['-webkit-box', '-ms-flexbox', 'flex'],\n msFlexAlign: 'center',\n webkitBoxAlign: 'center',\n alignItems: 'center',\n msFlexWrap: 'wrap',\n flexWrap: 'wrap',\n marginRight: '20px',\n }),\n};\n\nconst Dropdown = ({ sdk, isDisabled }: { sdk: FieldExtensionSDK; isDisabled?: boolean }) => {\n const editor = useContentfulEditor();\n const isActive =\n editor &&\n (isMarkActive(editor, MARKS.SUPERSCRIPT) ||\n isMarkActive(editor, MARKS.SUBSCRIPT) ||\n isMarkActive(editor, MARKS.CODE));\n\n return (\n <Menu>\n <Menu.Trigger>\n <span>\n <IconButton\n size=\"small\"\n className={styles.toolbarBtn}\n variant={isActive ? 'secondary' : 'transparent'}\n icon={<MoreHorizontalIcon />}\n aria-label=\"toggle menu\"\n isDisabled={isDisabled}\n testId=\"dropdown-toolbar-button\"\n />\n </span>\n </Menu.Trigger>\n <Menu.List>\n {isMarkEnabled(sdk.field, MARKS.SUPERSCRIPT) && (\n <ToolbarDropdownSuperscriptButton isDisabled={isDisabled} />\n )}\n {isMarkEnabled(sdk.field, MARKS.SUBSCRIPT) && (\n <ToolbarDropdownSubscriptButton isDisabled={isDisabled} />\n )}\n {isMarkEnabled(sdk.field, MARKS.CODE) && (\n <ToolbarDropdownCodeButton isDisabled={isDisabled} />\n )}\n </Menu.List>\n </Menu>\n );\n};\n\nconst Toolbar = ({ isDisabled }: ToolbarProps) => {\n const sdk = useSdkContext();\n const editor = useContentfulEditor();\n const canInsertBlocks = !isNodeTypeSelected(editor, BLOCKS.TABLE);\n const validationInfo = React.useMemo(() => getValidationInfo(sdk.field), [sdk.field]);\n const isListSelected =\n isNodeTypeSelected(editor, BLOCKS.UL_LIST) || isNodeTypeSelected(editor, BLOCKS.OL_LIST);\n const isBlockquoteSelected = isNodeTypeSelected(editor, BLOCKS.QUOTE);\n const shouldDisableTables =\n isDisabled || !canInsertBlocks || isListSelected || isBlockquoteSelected;\n\n // We only show the dropdown when: whenever at least bold , italic and underline are available; If nothing that would go inside the dropdown is available, we hide it\n const boldItalicUnderlineAvailable =\n isMarkEnabled(sdk.field, MARKS.BOLD) ||\n isMarkEnabled(sdk.field, MARKS.ITALIC) ||\n isMarkEnabled(sdk.field, MARKS.UNDERLINE);\n const dropdownItemsAvailable =\n isMarkEnabled(sdk.field, MARKS.SUPERSCRIPT) ||\n isMarkEnabled(sdk.field, MARKS.SUBSCRIPT) ||\n isMarkEnabled(sdk.field, MARKS.CODE);\n const shouldShowDropdown = boldItalicUnderlineAvailable && dropdownItemsAvailable;\n\n return (\n <Flex testId=\"toolbar\" className={styles.toolbar} alignItems=\"center\">\n <div className={styles.formattingOptionsWrapper}>\n <ToolbarHeadingButton isDisabled={isDisabled || !canInsertBlocks} />\n\n {validationInfo.isAnyMarkEnabled && <span className={styles.divider} />}\n\n {isMarkEnabled(sdk.field, MARKS.BOLD) && <ToolbarBoldButton isDisabled={isDisabled} />}\n {isMarkEnabled(sdk.field, MARKS.ITALIC) && <ToolbarItalicButton isDisabled={isDisabled} />}\n\n {isMarkEnabled(sdk.field, MARKS.UNDERLINE) && (\n <ToolbarUnderlineButton isDisabled={isDisabled} />\n )}\n\n {!boldItalicUnderlineAvailable && isMarkEnabled(sdk.field, MARKS.SUPERSCRIPT) && (\n <ToolbarSuperscriptButton isDisabled={isDisabled} />\n )}\n {!boldItalicUnderlineAvailable && isMarkEnabled(sdk.field, MARKS.SUBSCRIPT) && (\n <ToolbarSubscriptButton isDisabled={isDisabled} />\n )}\n {!boldItalicUnderlineAvailable && isMarkEnabled(sdk.field, MARKS.CODE) && (\n <ToolbarCodeButton isDisabled={isDisabled} />\n )}\n\n {shouldShowDropdown && <Dropdown sdk={sdk} isDisabled={isDisabled} />}\n\n {validationInfo.isAnyHyperlinkEnabled && (\n <>\n <span className={styles.divider} />\n <ToolbarHyperlinkButton isDisabled={isDisabled} />\n </>\n )}\n\n {validationInfo.isAnyBlockFormattingEnabled && <span className={styles.divider} />}\n\n <ToolbarListButton isDisabled={isDisabled || !canInsertBlocks} />\n\n {isNodeTypeEnabled(sdk.field, BLOCKS.QUOTE) && (\n <ToolbarQuoteButton isDisabled={isDisabled || !canInsertBlocks} />\n )}\n {isNodeTypeEnabled(sdk.field, BLOCKS.HR) && (\n <ToolbarHrButton isDisabled={isDisabled || !canInsertBlocks} />\n )}\n {isNodeTypeEnabled(sdk.field, BLOCKS.TABLE) && (\n <ToolbarTableButton isDisabled={shouldDisableTables} />\n )}\n </div>\n <div className={styles.embedActionsWrapper}>\n <EmbedEntityWidget isDisabled={isDisabled} canInsertBlocks={canInsertBlocks} />\n </div>\n </Flex>\n );\n};\n\nfunction getValidationInfo(field: FieldExtensionSDK['field']): {\n isAnyMarkEnabled: boolean;\n isAnyHyperlinkEnabled: boolean;\n isAnyBlockFormattingEnabled: boolean;\n} {\n const someWithValidation = (vals, validation) => vals.some((val) => validation(field, val));\n\n const isAnyMarkEnabled = someWithValidation(Object.values(MARKS), isMarkEnabled);\n\n const isAnyHyperlinkEnabled = someWithValidation(\n [INLINES.HYPERLINK, INLINES.ASSET_HYPERLINK, INLINES.ENTRY_HYPERLINK],\n isNodeTypeEnabled\n );\n\n const isAnyBlockFormattingEnabled = someWithValidation(\n [BLOCKS.UL_LIST, BLOCKS.OL_LIST, BLOCKS.QUOTE, BLOCKS.HR],\n isNodeTypeEnabled\n );\n\n return {\n isAnyMarkEnabled,\n isAnyHyperlinkEnabled,\n isAnyBlockFormattingEnabled,\n };\n}\n\nexport default Toolbar;\n","import React, { ReactNode } from 'react';\n\nimport { css } from 'emotion';\n\nconst styles = {\n nativeSticky: css`\n position: -webkit-sticky;\n position: sticky;\n top: -1px;\n z-index: 2;\n `,\n};\n\ntype StickyToolbarProps = {\n isDisabled?: boolean;\n children: ReactNode;\n};\n\nconst StickyToolbarWrapper = ({ isDisabled, children }: StickyToolbarProps) => (\n <div className={isDisabled ? '' : styles.nativeSticky}>{children}</div>\n);\n\nexport default StickyToolbarWrapper;\n","import { COMMAND_PROMPT } from '../plugins/CommandPalette/constants';\n\nconst internalMarks = [COMMAND_PROMPT];\n\nexport const removeInternalMarks = (document: Record<string, unknown>) => {\n return {\n ...document,\n content: (document.content as Record<string, unknown>[]).map((node) => {\n if (node.nodeType === 'text') {\n node.marks = (node.marks as Record<string, unknown>[]).filter(\n (mark) => !internalMarks.includes(mark.type as string)\n );\n return node;\n }\n return removeInternalMarks(node);\n }),\n };\n};\n","import { useCallback, useMemo } from 'react';\n\nimport { toContentfulDocument } from '@contentful/contentful-slatejs-adapter';\nimport { Document } from '@contentful/rich-text-types';\nimport { getPlateSelectors } from '@udecode/plate-core';\nimport debounce from 'lodash/debounce';\n\nimport schema from './constants/Schema';\nimport { removeInternalMarks } from './helpers/removeInternalMarks';\nimport { Operation } from './internal/types';\n\n/**\n * Returns whether a given operation is relevant enough to trigger a save.\n */\nconst isRelevantOperation = (op: Operation) => {\n if (op.type === 'set_selection') {\n return false;\n }\n\n return true;\n};\n\nexport type OnValueChangedProps = {\n editorId: string;\n handler?: (value: Document) => unknown;\n skip?: boolean;\n onSkip?: VoidFunction;\n};\n\nexport const useOnValueChanged = ({ editorId, handler, skip, onSkip }: OnValueChangedProps) => {\n const onChange = useMemo(\n () =>\n debounce((document: unknown) => {\n const contentfulDocument = toContentfulDocument({ document, schema });\n const cleanedDocument = removeInternalMarks(contentfulDocument);\n handler?.(cleanedDocument);\n }, 500),\n [handler]\n );\n\n return useCallback(\n (value: unknown) => {\n const editor = getPlateSelectors(editorId).editor();\n if (!editor) {\n throw new Error(\n 'Editor change callback called but editor not defined. Editor id: ' + editorId\n );\n }\n const operations = editor?.operations.filter(isRelevantOperation);\n\n if (operations.length > 0) {\n if (skip) {\n onSkip?.();\n return;\n }\n onChange(value);\n }\n },\n [editorId, onChange, skip, onSkip]\n );\n};\n","import React, { useCallback, useState, useEffect } from 'react';\n\nimport { FieldExtensionSDK } from '@contentful/app-sdk';\nimport { EntityProvider } from '@contentful/field-editor-reference';\nimport { FieldConnector } from '@contentful/field-editor-shared';\nimport * as Contentful from '@contentful/rich-text-types';\nimport { Plate, getPlateActions } from '@udecode/plate-core';\nimport { css, cx } from 'emotion';\nimport deepEquals from 'fast-deep-equal';\nimport noop from 'lodash/noop';\n\nimport { ContentfulEditorIdProvider, getContentfulEditorId } from './ContentfulEditorProvider';\nimport { getPlateSelectors } from './internal/misc';\nimport { Value } from './internal/types';\nimport { getPlugins, disableCorePlugins } from './plugins';\nimport { RichTextTrackingActionHandler } from './plugins/Tracking';\nimport { documentToEditorValue, normalizeEditorValue, setEditorContent } from './prepareDocument';\nimport { styles } from './RichTextEditor.styles';\nimport { SdkProvider } from './SdkProvider';\nimport Toolbar from './Toolbar';\nimport StickyToolbarWrapper from './Toolbar/components/StickyToolbarWrapper';\nimport { useOnValueChanged } from './useOnValueChanged';\n\ntype ConnectedProps = {\n sdk: FieldExtensionSDK;\n onAction?: RichTextTrackingActionHandler;\n minHeight?: string | number;\n value?: object;\n isDisabled?: boolean;\n onChange?: (doc: Contentful.Document) => unknown;\n isToolbarHidden?: boolean;\n actionsDisabled?: boolean;\n restrictedMarks?: string[];\n};\n\nexport const ConnectedRichTextEditor = (props: ConnectedProps) => {\n const id = getContentfulEditorId(props.sdk);\n const plugins = React.useMemo(\n () => getPlugins(props.sdk, props.onAction ?? noop, props.restrictedMarks),\n [props.sdk, props.onAction, props.restrictedMarks]\n );\n const [isFirstRender, setIsFirstRender] = useState(true);\n const [pendingExternalUpdate, setPendingExternalUpdate] = useState(false);\n\n const onValueChanged = useOnValueChanged({\n editorId: id,\n handler: props.onChange,\n skip: pendingExternalUpdate || isFirstRender,\n onSkip: () => setPendingExternalUpdate(false),\n });\n\n useEffect(() => {\n /*\n This effect is called when the value prop changes. Normally\n this happens when the value is changed outside of the editor,\n like in snapshots restoration or remote updates\n Plate won't update the displayed value on its own, see:\n - https://github.com/ianstormtaylor/slate/pull/4540\n - https://github.com/udecode/plate/issues/1169\n\n The content is forcefully set to the new value and it's ensured\n the change listener isn't invoked\n */\n setIsFirstRender(false);\n const editor = getPlateSelectors(id).editor();\n if (!editor) {\n return;\n }\n setPendingExternalUpdate(true);\n setEditorContent(editor, documentToEditorValue(props.value as Contentful.Document));\n }, [props.value, id]);\n\n const classNames = cx(\n styles.editor,\n props.minHeight !== undefined ? css({ minHeight: props.minHeight }) : undefined,\n props.isDisabled ? styles.disabled : styles.enabled,\n props.isToolbarHidden && styles.hiddenToolbar\n );\n\n useEffect(() => {\n if (!isFirstRender) {\n return;\n }\n\n getPlateActions(id).value(\n normalizeEditorValue(documentToEditorValue(props.value as Contentful.Document) as Value, {\n plugins,\n disableCorePlugins,\n })\n );\n }, [isFirstRender, plugins, id, props.value]);\n\n return (\n <SdkProvider sdk={props.sdk}>\n <ContentfulEditorIdProvider value={id}>\n <div className={styles.root} data-test-id=\"rich-text-editor\">\n <Plate\n id={id}\n plugins={plugins}\n disableCorePlugins={disableCorePlugins}\n editableProps={{\n className: classNames,\n readOnly: props.isDisabled,\n }}\n onChange={onValueChanged}\n firstChildren={\n !props.isToolbarHidden && (\n <StickyToolbarWrapper isDisabled={props.isDisabled}>\n <Toolbar isDisabled={props.isDisabled} />\n </StickyToolbarWrapper>\n )\n }\n />\n </div>\n </ContentfulEditorIdProvider>\n </SdkProvider>\n );\n};\n\ntype Props = ConnectedProps & { isInitiallyDisabled: boolean };\n\nconst RichTextEditor = (props: Props) => {\n const { sdk, isInitiallyDisabled, onAction, restrictedMarks, ...otherProps } = props;\n const isEmptyValue = useCallback(\n (value) => !value || deepEquals(value, Contentful.EMPTY_DOCUMENT),\n []\n );\n\n const id = getContentfulEditorId(props.sdk);\n return (\n <EntityProvider sdk={sdk}>\n <FieldConnector\n throttle={0}\n field={sdk.field}\n isInitiallyDisabled={isInitiallyDisabled}\n isEmptyValue={isEmptyValue}\n isEqualValues={deepEquals}\n >\n {({ lastRemoteValue, disabled, setValue }) => (\n <ConnectedRichTextEditor\n {...otherProps}\n key={`rich-text-editor-${id}`}\n value={lastRemoteValue}\n sdk={sdk}\n onAction={onAction}\n isDisabled={disabled}\n onChange={setValue}\n restrictedMarks={restrictedMarks}\n />\n )}\n </FieldConnector>\n </EntityProvider>\n );\n};\n\nexport default RichTextEditor;\n","import React from 'react';\n\nimport {\n TextLink,\n Button,\n FormControl,\n FormLabel,\n Select,\n TextInput,\n Form,\n ModalContent,\n ModalControls,\n} from '@contentful/f36-components';\nimport tokens from '@contentful/f36-tokens';\nimport { EntityProvider } from '@contentful/field-editor-reference';\nimport { css } from 'emotion';\nimport PropTypes from 'prop-types';\n\nimport { FetchingWrappedAssetCard } from '../../plugins/shared/FetchingWrappedAssetCard';\nimport { FetchingWrappedEntryCard } from '../../plugins/shared/FetchingWrappedEntryCard';\n\nexport const LINK_TYPES = {\n URI: 'uri',\n ENTRY: 'Entry',\n ASSET: 'Asset',\n};\n\nfunction isFeaturingEntitySelector(entitySelectorConfigs = {}) {\n return !!entitySelectorConfigs.Entry || !!entitySelectorConfigs.Asset;\n}\n\nfunction entityToLink(entity) {\n const { id, type } = entity.sys;\n return { sys: { id, type: 'Link', linkType: type } };\n}\n\nexport class HyperlinkDialog extends React.Component {\n static propTypes = {\n sdk: PropTypes.object.isRequired,\n labels: PropTypes.shape({\n title: PropTypes.string,\n confirm: PropTypes.string,\n }),\n value: PropTypes.shape({\n text: PropTypes.string,\n uri: PropTypes.string,\n target: PropTypes.object,\n // Will be overwritten accordingly if `uri` or `target.sys.linkType` are set.\n type: PropTypes.oneOf(['uri', 'Entry', 'Asset']),\n }),\n entitySelectorConfigs: PropTypes.object,\n allowedHyperlinkTypes: PropTypes.arrayOf(\n PropTypes.oneOf([LINK_TYPES.ENTRY, LINK_TYPES.ASSET, LINK_TYPES.URI])\n ),\n hideText: PropTypes.bool,\n onClose: PropTypes.func.isRequired,\n };\n\n static defaultProps = {\n labels: {\n title: 'Insert link',\n confirm: 'Insert link',\n },\n value: {},\n hideText: false,\n entitySelectorConfigs: {},\n allowedHyperlinkTypes: [LINK_TYPES.ENTRY, LINK_TYPES.ASSET, LINK_TYPES.URI],\n };\n\n constructor(props) {\n super(props);\n\n const { text, type, uri, target } = props.value;\n const isEntityLink = Boolean(target);\n const entityLinks = {\n [LINK_TYPES.ENTRY]: null,\n [LINK_TYPES.ASSET]: null,\n };\n let linkType = type;\n\n if (isEntityLink) {\n linkType = target.sys.linkType;\n entityLinks[linkType] = target;\n } else if (props.allowedHyperlinkTypes.includes(LINK_TYPES.URI)) {\n linkType = LINK_TYPES.URI;\n } else {\n linkType = props.allowedHyperlinkTypes[0];\n }\n\n this.state = { text, uri, entityLinks, type: linkType };\n }\n\n setTargetEntity(type, entity) {\n this.setState((state) => ({\n entityLinks: {\n ...state.entityLinks,\n [type]: entity ? entityToLink(entity) : undefined,\n },\n }));\n }\n\n getValue() {\n const { text, type, uri } = this.state;\n const value = { type };\n if (text) {\n value.text = text;\n }\n if (type === LINK_TYPES.URI) {\n value.uri = uri;\n } else {\n value.target = this.state.entityLinks[type];\n }\n return value;\n }\n\n isLinkComplete() {\n const { text, type, uri, target } = this.getValue();\n const requiresText = !this.props.hideText;\n if (requiresText && !text) {\n return false;\n }\n return (type === LINK_TYPES.URI && uri) || target;\n }\n\n handleSubmit = (event) => {\n event.preventDefault();\n this.props.onClose(this.getValue());\n };\n\n selectEntry = async () => {\n const { locale, contentTypes } = this.props.entitySelectorConfigs.Entry;\n const entry = await this.props.sdk.dialogs.selectSingleEntry({ locale, contentTypes });\n this.setTargetEntity(LINK_TYPES.ENTRY, entry);\n };\n\n selectAsset = async () => {\n const { locale } = this.props.entitySelectorConfigs.Asset;\n const asset = await this.props.sdk.dialogs.selectSingleAsset({ locale });\n this.setTargetEntity(LINK_TYPES.ASSET, asset);\n };\n\n render() {\n const { labels } = this.props;\n return (\n <EntityProvider sdk={this.props.sdk}>\n <React.Fragment>\n <ModalContent>{this.renderFields()}</ModalContent>\n <ModalControls>\n <Button\n type=\"button\"\n onClick={() => this.props.onClose(null)}\n variant=\"secondary\"\n testId=\"cancel-cta\"\n size=\"small\">\n Cancel\n </Button>\n <Button\n type=\"submit\"\n variant=\"positive\"\n onClick={this.handleSubmit}\n isDisabled={!this.isLinkComplete()}\n testId=\"confirm-cta\"\n size=\"small\">\n {labels.confirm}\n </Button>\n </ModalControls>\n </React.Fragment>\n </EntityProvider>\n );\n }\n\n renderFields() {\n const { hideText, allowedHyperlinkTypes, entitySelectorConfigs } = this.props;\n const { uri, text, type } = this.state;\n const isUriInputAutoFocused = type === LINK_TYPES.URI && (hideText || !!text);\n\n return (\n <Form>\n {hideText ? null : (\n <FormControl id=\"link-text\" isRequired>\n <FormControl.Label>Link text</FormControl.Label>\n <TextInput\n testId=\"link-text-input\"\n name=\"link-text\"\n value={text || ''}\n onChange={(e) => this.setState({ text: e.target.value })}\n // eslint-disable-next-line -- TODO: describe this disable jsx-a11y/no-autofocus\n autoFocus={!isUriInputAutoFocused}\n />\n </FormControl>\n )}\n {isFeaturingEntitySelector(entitySelectorConfigs) && (\n <FormControl id=\"link-type\" name=\"link-type\">\n <FormControl.Label>Link type</FormControl.Label>\n <Select\n value={type}\n onChange={(e) => this.setState({ type: e.target.value })}\n testId=\"link-type-select\">\n {/* Show the option if the link type is allowed or the current link is of type that is no longer valid */}\n {allowedHyperlinkTypes.includes(LINK_TYPES.URI) || type === LINK_TYPES.URI ? (\n <Select.Option value={LINK_TYPES.URI}>URL</Select.Option>\n ) : null}\n {allowedHyperlinkTypes.includes(LINK_TYPES.ENTRY) || type === LINK_TYPES.ENTRY ? (\n <Select.Option value={LINK_TYPES.ENTRY}>Entry</Select.Option>\n ) : null}\n {allowedHyperlinkTypes.includes(LINK_TYPES.ASSET) || type === LINK_TYPES.ASSET ? (\n <Select.Option value={LINK_TYPES.ASSET}>Asset</Select.Option>\n ) : null}\n </Select>\n </FormControl>\n )}\n {type === LINK_TYPES.URI ? (\n <FormControl id=\"link-uri\" isRequired>\n <FormControl.Label>Link target</FormControl.Label>\n <TextInput\n testId=\"link-target-input\"\n name=\"link-uri\"\n value={uri || ''}\n placeholder=\"https://\"\n onChange={(e) => this.setState({ uri: e.target.value })}\n // eslint-disable-next-line -- TODO: describe this disable jsx-a11y/no-autofocus\n autoFocus={isUriInputAutoFocused}\n />\n <FormControl.HelpText>A protocol may be required, e.g. https://</FormControl.HelpText>\n </FormControl>\n ) : (\n this.renderEntityField()\n )}\n </Form>\n );\n }\n\n renderEntityField() {\n const { type, entityLinks } = this.state;\n const resetEntity = () => this.setTargetEntity(type, null);\n const entityLink = entityLinks[type];\n const isEntitySelectorVisible = !entityLink;\n return (\n <div>\n <FormLabel required htmlFor=\"\">\n Link target\n </FormLabel>\n {!isEntitySelectorVisible && (\n <TextLink\n as=\"button\"\n className={css({ marginLeft: tokens.spacingS })}\n onClick={resetEntity}>\n Remove selection\n </TextLink>\n )}\n {entityLink && (\n <div>\n {type === LINK_TYPES.ENTRY && (\n <FetchingWrappedEntryCard\n sdk={this.props.sdk}\n locale={this.props.entitySelectorConfigs.Entry.locale}\n entryId={entityLink.sys.id}\n isDisabled\n isSelected={false}\n />\n )}\n {type == LINK_TYPES.ASSET && (\n <FetchingWrappedAssetCard\n sdk={this.props.sdk}\n locale={this.props.entitySelectorConfigs.Asset.locale}\n assetId={entityLink.sys.id}\n isDisabled\n isSelected={false}\n />\n )}\n </div>\n )}\n {/* Keep all entity selectors in the DOM for super fast types switching ux.*/}\n {isEntitySelectorVisible && this.renderEntitySelector(type, isEntitySelectorVisible)}\n </div>\n );\n }\n\n renderEntitySelector(type) {\n return (\n <div className={css({ marginTop: tokens.spacingS })}>\n {type === LINK_TYPES.ENTRY && (\n <TextLink as=\"button\" onClick={this.selectEntry}>\n Select entry\n </TextLink>\n )}\n {type === LINK_TYPES.ASSET && (\n <TextLink as=\"button\" onClick={this.selectAsset}>\n Select asset\n </TextLink>\n )}\n </div>\n );\n }\n}\n\nexport const openHyperlinkDialog = (\n dialogs,\n { value, showTextInput, allowedHyperlinkTypes, entitySelectorConfigs }\n) => {\n const isNew = !(value.uri || value.target);\n const props = {\n labels: {\n title: isNew ? 'Insert hyperlink' : 'Edit hyperlink',\n confirm: isNew ? 'Insert' : 'Update',\n },\n value,\n hideText: !showTextInput,\n allowedHyperlinkTypes,\n entitySelectorConfigs,\n };\n\n return dialogs.openCurrent({\n title: props.labels.title,\n width: 'large',\n shouldCloseOnEscapePress: true,\n shouldCloseOnOverlayClick: true,\n allowHeightOverflow: true,\n parameters: {\n type: 'rich-text-hyperlink-dialog',\n ...props,\n },\n });\n};\n","import React from 'react';\n\nimport { DialogExtensionSDK } from '@contentful/app-sdk';\nimport { ModalDialogLauncher } from '@contentful/field-editor-shared';\n\nimport { HyperlinkDialog } from './HypelinkDialog/HyperlinkDialog';\n\nexport const openRichTextDialog = (sdk: DialogExtensionSDK) => (options) => {\n if (options.parameters?.type === 'rich-text-hyperlink-dialog') {\n return ModalDialogLauncher.openDialog(options, ({ onClose }) => {\n return <HyperlinkDialog {...options.parameters} onClose={onClose} sdk={sdk} />;\n });\n }\n return Promise.reject();\n};\n","import React from 'react';\n\nimport { DialogExtensionSDK } from '@contentful/app-sdk';\n\nimport { HyperlinkDialog } from './HypelinkDialog/HyperlinkDialog';\n\nexport const renderRichTextDialog = (sdk: DialogExtensionSDK) => {\n const parameters = sdk.parameters.invocation as Record<string, unknown>;\n if (parameters?.type === 'rich-text-hyperlink-dialog') {\n sdk.window.startAutoResizer();\n return <HyperlinkDialog {...sdk.parameters.invocation} onClose={sdk.close} sdk={sdk} />;\n }\n return <div />;\n};\n"],"names":["useReadOnly","sr","usePlateEditorRef","p","usePlateEditorState","getContentfulEditorId","sdk","entry","field","sys","getSys","id","locale","editorContext","createContext","ContentfulEditorIdProvider","Provider","useContentfulEditorId","contextId","useContext","Error","useContentfulEditor","editorId","editor","useContentfulEditorRef","createPlateEditor","options","withoutNormalizing","fn","focusEditor","target","blurEditor","selectEditor","opts","fromDOMPoint","domPoint","exactMatch","suppressThrow","getPlateSelectors","createSoftBreakPlugin","createDefaultSoftBreakPlugin","then","rules","plugins","flatMap","softBreak","createExitBreakPlugin","createDefaultExitBreakPlugin","exitBreak","createResetNodePlugin","createDefaultResetNodePlugin","resetNode","rule","defaultType","BLOCKS","PARAGRAPH","trimLeadingSlash","text","startsWith","slice","useSdk","sdkMemo","React","SdkProvider","useSdkContext","constate","useCommandList","commandItems","container","selectedItem","setSelectedItem","length","commands","isOpen","setIsOpen","current","buttons","Array","from","querySelectorAll","currBtn","find","btn","currIndex","indexOf","shouldSelectFirstBtn","scrollIntoView","block","inline","handleKeyDown","event","isHotkey","preventDefault","click","window","addEventListener","removeEventListener","handleMousedown","contains","document","getText","at","isText","value","getEndPoint","getStartPoint","isNode","isSelectionAtBlockEnd","isSelectionAtBlockStart","getBlockAbove","getNodeEntry","getNodeEntries","getNodeChildren","root","path","getParentNode","someNode","getChildren","s","getDescendantNodeByPath","get","isRangeCollapsed","range","isRangeAcrossBlocks","isRangeExpanded","getRange","to","getRangeEdges","edges","getRangeStart","start","getRangeEnd","end","getAboveNode","getCommonNode","another","getNodeTexts","findNode","isMarkActive","type","getMarks","isEditor","isEditorReadOnly","isElement","isBlockNode","findNodePath","node","isAncestorPath","isAncestor","isAncestorEmpty","getParentPath","parent","getNextPath","next","getPreviousPath","previous","getLastChildPath","nodeEntry","getPathLevels","levels","isFirstChildPath","isLastChildPath","childPath","matchNode","someHtmlElement","rootNode","predicate","getPointBefore","getPointAfter","isEndPoint","point","isInline","queryNode","getPluginType","key","createPathRef","match","obj","getLastNodeByLevel","level","normalize","force","setSelection","props","select","location","moveSelection","moveChildren","collapseSelection","setNodes","attrs","unsetNodes","insertNodes","nodes","splitNodes","liftNodes","unwrapNodes","wrapNodes","element","toggleNodeType","editorOptions","removeMark","unhangRange","toggleMark","addMark","insertText","deleteText","removeNodes","moveNodes","IS_SAFARI","navigator","test","userAgent","IS_CHROME","LINK_TYPES","INLINES","HYPERLINK","ENTRY_HYPERLINK","ASSET_HYPERLINK","isBlockSelected","isRootLevel","getNodeEntryFromSelection","nodeTypeOrTypes","selection","focus","nodeTypes","isArray","i","includes","isNodeTypeSelected","nodeType","moveToTheNextLine","distance","unit","moveToTheNextChar","insertEmptyParagraph","emptyParagraph","children","data","isVoid","getElementFromCurrentSelection","flat","getTableSize","table","numRows","firstRow","numColumns","insertLink","wrapLink","isLinkActive","link","unwrapLink","url","isCollapsed","isSelectionCollapsed","uri","split","edge","getAncestorPathFromSelection","undefined","INLINE_TYPES","Object","values","isInlineOrText","x","scrollX","y","scrollY","setTimeout","scrollTo","toggleElement","VALIDATIONS","ENABLED_MARKS","ENABLED_NODE_TYPES","DEFAULT_ENABLED_NODE_TYPES","DOCUMENT","getRichTextValidation","validationType","flow","v","validations","isFormattingOptionEnabled","nodeTypeOrMark","enabledFormattings","concat","isNodeTypeEnabled","isMarkEnabled","mark","COMMAND_PROMPT","createInlineEntryNode","EMBEDDED_ENTRY","linkType","fetchAssets","query","assets","space","getAssets","items","map","asset","displayTitle","entityHelpers","getAssetTitle","localeCode","defaultLocaleCode","locales","default","defaultTitle","contentTypeName","entity","thumbnail","fields","file","fetchEntries","contentType","entries","getEntries","content_type","description","getEntityDescription","getEntryTitle","name","createNode","insertBlock","linkedEntityBlock","hasText","removeCommand","removeQuery","offset","anchor","reverse","isCommandPromptPluginEnabled","inlineAllowed","entriesAllowed","assetsAllowed","EMBEDDED_ASSET","getCommandPermissions","canInsertBlocks","TABLE","useCommands","contentTypes","getCachedContentTypes","setCommands","useState","getEmbedEntry","label","callback","replace","toLowerCase","insertSoftBreak","tracking","onCommandPaletteAction","getEmbedInline","inlineNode","contentTypeCommands","group","assetCommand","reduce","list","nextItem","subcommands","filter","command","push","styles","css","position","zIndex","tokens","zIndexNotification","fontWeight","fontWeightNormal","fontStyle","fontFamily","fontStackPrimary","listStyle","marginLeft","menuPoper","zIndexModal","menuContent","width","maxHeight","menuList","overflow","menuItem","display","background","border","margin","outline","fontSize","fontSizeM","lineHeight","lineHeightM","textAlign","padding","spacingXs","spacingM","wordBreak","whiteSpace","cursor","hyphens","minWidth","textDecoration","color","gray800","backgroundColor","gray100","opacity","menuItemSelected","boxShadow","glowPrimary","borderRadius","borderRadiusMedium","menuDivider","height","gray300","menuHeader","zIndexDefault","top","menuFooter","bottom","footerList","gray600","objectFit","Group","commandGroup","SectionHeading","as","marginBottom","marginTop","marginRight","className","cx","onClick","Asset","Flex","alignItems","gap","src","alt","Item","CommandListItems","CommandList","textContainer","popoverContainer","popper","usePopper","placement","tabIndex","contentEditable","role","ScreenReaderOnly","Portal","ref","style","attributes","Popover","usePortal","autoFocus","Trigger","Content","testId","Stack","spacing","CommandPrompt","textElement","setTextElement","e","createOnKeyDown","byKey","isActive","stopPropagation","createCommandPalettePlugin","isLeaf","component","handlers","onKeyDown","createDragAndDropPlugin","DRAGGABLE_TYPES","HR","ON_DROP_ALLOWED_TYPES","onDrop","draggingBlock","draggingNode","nativeEvent","dropDisallowed","getParents","some","nodeName","history","undos","el","parents","parentNode","unshift","withLinkTracking","Component","ComponentWithTracking","onEntityFetchComplete","useCallback","onViewportAction","InternalAssetCard","AssetCard","size","isLoading","MissingEntityCard","entityType","isDisabled","onRemove","WrappedAssetCard","getEntityScheduledActions","loadEntityScheduledActions","isSelected","onEdit","isClickable","areEqual","displayName","FetchingWrappedAssetCard","status","useEntity","assetId","useEntityLoader","InternalEntryCard","EntryCard","WrappedEntryCard","getAsset","FetchingWrappedEntryCard","entryId","verticalAlign","LinkedEntityBlock","useSelected","entityId","handleEditClick","openEntity","openAsset","openEntry","slideIn","handleRemoveClick","pathToElement","draggable","getLinkedContentTypeIdsForNodeType","newEntitySelectorConfigFromRichTextField","getEntityTypeFromRichTextNode","words","watchCurrentSlide","onActiveCallbacks","Set","wasSlideClosed","initialSlideLevel","lastSlideLevel","wasClosed","off","onSlideInNavigation","oldSlideLevel","newSlideLevel","clear","forEach","cb","unwatch","onActive","noop","add","delete","selectEntityAndInsert","logAction","dialogs","baseConfig","selectEntity","selectSingleAsset","selectSingleEntry","config","withCreate","rteSlide","ensureFollowingParagraph","entityBlock","lastNode","isTextContainer","TEXT_CONTAINERS","icon","EmbeddedEntityBlockToolbarIcon","onClose","handleClick","onToolbarAction","getEntityTypeFromNodeType","baseClass","Menu","disabled","flexDirection","Icon","AssetIcon","EmbeddedEntryBlockIcon","variant","entityTypes","getWithEmbeddedEntityEvents","hotkey","pathToSelectedElement","isDelete","isBackspace","onShortcutAction","createEmbeddedEntityPlugin","deserializeHtml","validAttribute","withoutChildren","getNode","getAttribute","createEmbeddedEntryBlockPlugin","createEmbeddedAssetBlockPlugin","getEntryStatus","scheduledIcon","spacing2Xs","FetchingWrappedInlineEntryCard","requestStatus","allContentTypes","useMemo","useEffect","title","InlineEntryCard","entryStatus","actions","MenuItem","ScheduledIconWithTooltip","ClockIcon","Text","span","userSelect","EmbeddedEntityInline","waitForClose","ToolbarEmbeddedEntityInlineButton","EmbeddedEntryInlineIcon","createEmbeddedEntityInlinePlugin","htmlAttributeName","getWithEmbeddedEntryInlineEvents","withEmbeddedEntryInlineEvents","handleEvent","dropdown","fontWeightDemiBold","fontSizeL","HEADING_1","HEADING_2","HEADING_3","HEADING_4","HEADING_5","HEADING_6","LABELS","ToolbarHeadingButton","setOpen","selected","setSelected","operations","nodeTypesByEnablement","someHeadingsEnabled","fromEntries","keys","Boolean","handleOnSelectItem","prevOnChange","onChange","args","activeType","inactiveType","Button","endIcon","ChevronDownIcon","List","isInitiallyFocused","extractNodes","mode","extractParagraphs","transformRemove","transformParagraphs","transformUnwrap","transformWrapIn","transformLift","headings","fontWeightMedium","spacingS","createHeading","Tag","Heading","HeadingComponents","buildHeadingEventHandler","createHeadingPlugin","allow","HEADINGS","normalizer","validChildren","_","transform","LIST_ITEM","idx","tagName","validNodeName","toUpperCase","button","tooltip","Number","zIndexTooltip","ToolbarButton","startIcon","Tooltip","content","spacingL","hr","hrSelected","colorPrimary","withHrEvents","pathToSelectedHr","ToolbarHrButton","handleOnClick","HorizontalRuleIcon","Hr","Slate","isFocused","createHrPlugin","removeSelectionLabel","SYS_LINK_TYPES","LINK_TYPE_SELECTION_VALUES","HyperlinkModal","enabledLinkTypes","defaultLinkType","linkText","setLinkText","setLinkType","linkTarget","setLinkTarget","linkEntity","setLinkEntity","isLinkComplete","isRegularLink","entityLinks","isEntityLink","handleOnSubmit","entityToLink","selectEntry","selectAsset","resetLinkEntity","EntityProvider","ModalContent","Form","FormControl","isRequired","Label","TextInput","Select","readonly","Option","HelpText","FormLabel","htmlFor","TextLink","ModalControls","addOrEditLink","targetPath","isReadOnly","selectionBeforeBlur","selectionAfterFocus","currentLinkText","isEditing","ModalDialogLauncher","openDialog","shouldCloseOnEscapePress","shouldCloseOnOverlayClick","allowHeightOverflow","ToolbarHyperlinkButton","LinkIcon","trim","truncate","str","substr","getEntityInfo","entityTitle","entityStatus","jobs","scheduledActions","getScheduleTooltipContent","job","jobsCount","fetchAllData","getEntity","getEntry","contentTypeId","ct","entityDescription","useRequestStatus","setRequestStatus","entityInfo","catch","console","log","error","finally","useEntityInfo","hyperlinkWrapper","a","hyperlink","fill","gray900","EntityHyperlink","tooltipContent","targetWrapperClassName","maxWidth","UrlHyperlink","href","rel","isAnchor","isEntryAnchor","isAssetAnchor","buildHyperlinkEventHandler","getNodeOfType","createHyperlinkPlugin","common","validNode","baseStyle","lineHeightDefault","UL_LIST","OL_LIST","createList","ListUL","ListOL","ListItem","moveListItemDown","listItem","listNode","listItemPath","previousListItemPath","previousSiblingItem","previousPath","subList","n","getListTypes","newPath","moveListItems","increase","_nodes","ELEMENT_LIC","lics","highestLicPaths","highestLicPathRefs","lic","licPath","liPath","highestLiPath","licPathRefsToMove","licPathRef","unref","liEntry","getListItemEntry","isListNested","moveListItemUp","ELEMENT_DEFAULT","hasUnliftedListItems","done","unwrapList","listTypes","toggleList","res","startPoint","endPoint","commonEntry","listType","startList","endList","rangeLength","Math","min","rootPathLength","onKeyDownList","listSelected","shiftKey","hotkeys","castArray","_hotkey","isList","hasListAsDirectParent","getNearestListAncestor","normalizeOrphanedListItem","parentList","parentListType","isNonEmptyListItem","listItemChildren","firstNodeIsNotList","_editor","firstNode","insertParagraphAsChild","replaceNodeWithListItems","isListTypeActive","emptyListItemNode","withChildren","marks","insertListItem","paragraph","paragraphPath","listItemNode","isAtStart","isAtEnd","isAtStartOfListItem","shouldSplit","newListItemPath","fromPath","fromStartIndex","toPath","listBreak","moved","childNode","isBlockAboveEmpty","didReset","onKeyDownResetNode","mockPlugin","types","ELEMENT_LI","onReset","SIMULATE_BACKSPACE","inserted","insertListBreak","insertBreak","getFirstAncestorOfType","ancestor","isListRoot","trimList","listRoot","textEntries","commonAncestorEntry","commonAncestor","textEntry","trimLiWrapper","unwrapTextContainerAtStart","insertListFragment","insertFragment","fragment","firstBlockIndex","findIndex","inlines","blocks","filtered","validLiChildrenTypes","LIST_ITEM_BLOCKS","withList","deleteForward","deleteFragment","deleteForwardList","deleteFragmentList","normalizeNode","normalizeList","createListPlugin","createPlateListPlugin","overrideByKey","ELEMENT_UL","withOverrides","ELEMENT_OL","ToolbarListButton","ListBulletedIcon","ListNumberedIcon","toggleMarkAndDeactivateConflictingMarks","subs","MARKS","SUPERSCRIPT","SUBSCRIPT","buildMarkEventHandler","markType","blue100","blue600","createMarkToolbarButton","Mark","ToolbarBoldButton","BOLD","FormatBoldIcon","bold","Bold","isGoogleBoldWrapper","createBoldPlugin","createDefaultBoldPlugin","validStyle","ToolbarCodeButton","CODE","CodeIcon","ToolbarDropdownCodeButton","code","Code","createCodePlugin","createDefaultCodePlugin","ToolbarItalicButton","ITALIC","FormatItalicIcon","italic","Italic","createItalicPlugin","createDefaultItalicPlugin","subscript","ToolbarSubscriptButton","SubscriptIcon","viewBox","ToolbarDropdownSubscriptButton","Subscript","createSubscriptPlugin","createDefaultSubscriptPlugin","superscript","ToolbarSuperscriptButton","SuperscriptIcon","ToolbarDropdownSuperscriptButton","Superscript","createSuperscriptPlugin","createDefaultSuperscriptPlugin","ToolbarUnderlineButton","UNDERLINE","FormatUnderlinedIcon","Underline","createUnderlinePlugin","createDefaultUnderlinePlugin","createMarksPlugin","baseRules","NormalizerError","createValidatorFromTypes","createTransformerFromObject","transforms","fallback","transformer","withNormalizer","_rules","_rule","isPlainObject","_transform","tr","isValidChild","invalidChildEntry","createNormalizerPlugin","Paragraph","isEmbedElement","hasAttribute","isEmptyElement","textContent","buildParagraphKeyDownHandler","createParagraphPlugin","createDefaultParagraphPlugin","wrapSpaceAround","spacer","previousSibling","insertBefore","nextSibling","unwrap","replaceWith","childNodes","sanitizeAnchors","doc","unsupportedTagSelector","join","sanitizeSheets","supported","selector","querySelector","tables","row","remove","rows","colIndex","cells","cell","isEmpty","every","stripStyleTags","stripMetaTags","transformers","removeTableWrappers","parentElement","sanitizeHTML","html","DOMParser","parseFromString","replacers","innerHtml","innerHTML","body","replacer","catchSlateFragment","getSlateFragmentAttribute","dataTransfer","htmlData","getData","ensureXSlateFragment","clipboardData","DataTransfer","setData","createPasteHTMLPlugin","insertData","inject","pluginsByKey","KEY_DESERIALIZE_HTML","format","transformData","borderLeft","gray200","paddingLeft","Quote","shouldResetQuoteOnBackspace","quote","QUOTE","hasSingleChild","isLastChild","toggleQuote","onKeyDownToggleQuote","plugin","withQuote","startingNode","startsWithBlockquote","Element","containerEntry","containerIsNotEmpty","isContentSelected","Point","compare","createQuotePlugin","CONTAINERS","ToolbarQuoteButton","QuoteIcon","createSelectOnBackspacePlugin","createDefaultSelectPlugin","addRow","getNextRowPath","currentRowItem","TABLE_ROW","currentRowElem","currentRowPath","nextRowPath","getEmptyRowNode","header","colCount","addRowBelow","addRowAbove","addColumn","getNextCellPath","currentCellItem","TABLE_HEADER_CELL","TABLE_CELL","currentTableItem","nextCellPath","newCellPath","replacePathPos","rowIdx","getEmptyCellNode","addColumnRight","currentCellPath","addColumnLeft","setHeader","enable","tableItem","insertTableAndFocusFirstCell","tableEntry","replaceEmptyParagraphWithTable","isTableActive","tableElements","ELEMENT_TABLE","ELEMENT_TH","ELEMENT_TR","ELEMENT_TD","isTableHeaderEnabled","tablePath","previousNode","isPreviousNodeTextEmpty","getNoOfMissingTableCellsInRow","rowEntry","rowPath","tableWidth","max","rowWidth","createEmptyTableCells","count","emptyTableCell","isNotEmpty","isTable","topRight","right","getCurrentTableSize","TableActions","isHeaderEnabled","setHeaderEnabled","close","canInsertRowAbove","headerCell","toggleHeader","action","tableSize","actionName","onOpen","IconButton","Divider","deleteRow","deleteColumn","deleteTable","gray400","Cell","HeaderCell","Row","Table","trimUnnecessaryTableWrapper","insertTableFragment","fragments","isInsertingTable","isTableFirstFragment","currentLineHasText","onKeyDownTable","defaultHandler","defaultKeyDownTable","windowSelection","getSelection","blockType","anchorNode","isBeforeTable","above","getTableEntries","isLastCell","isLastRow","TOP_LEVEL_BLOCKS","object","VOID_BLOCKS","unwrapBlockByKey","getCharacterCount","contentfulSlateJSAdapter","schema","Schema","documentToPlainTextString","actionOrigin","TOOLBAR","SHORTCUT","VIEWPORT","SHORTCUT_OR_VIEWPORT","COMMAND_PALETTE","getPastingSource","textHtml","createTrackingPlugin","onAction","trackingActions","origin","onShortcutOrViewportAction","isCopyAndPaste","characterCountSelection","toString","characterCountBefore","characterCountAfter","source","hasTables","isTableHeaderCell","hasHeadersOutsideFirstRow","addTableTrackingEvents","markupBefore","markupAfter","tablePasted","withInvalidCellChildrenTracking","childEntry","createTablePlugin","createDefaultTablePlugin","withTable","isNestedTable","howMany","ToolbarTableButton","TableIcon","createTextPlugin","restrictedMarks","onMouseUp","inlinePath","deleteBackward","deleteEmptyParagraph","fixPasteAsPlainText","deleteFunction","paragraphOrHeading","isTextEmpty","hasSiblings","prevNode","prevCell","insertTextData","lines","line","always","createTrailingParagraphPlugin","createTrailingBlockPlugin","createVoidsPlugin","before","getPlugins","createDeserializeHtmlPlugin","createDeserializeAstPlugin","createDeserializeDocxPlugin","disableCorePlugins","deserializeAst","eventEditor","isTextElement","sanitizeIncomingSlateDoc","hasContent","setEditorContent","apply","nodesArray","documentToEditorValue","slateDoc","toSlatejsDocument","EMPTY_DOCUMENT","normalizeEditorValue","STYLE_EDITOR_BORDER","borderTop","minHeight","colorWhite","overflowWrap","webkitUserModify","hiddenToolbar","enabled","EmbeddedEntityDropdownButton","onToggle","PlusIcon","EmbedEntityWidget","isEmbedDropdownOpen","setEmbedDropdownOpen","onCloseEntityDropdown","onToggleEntityDropdown","inlineEntryEmbedEnabled","blockEntryEmbedEnabled","blockAssetEmbedEnabled","showEmbedButton","toolbar","toolbarBtn","divider","embedActionsWrapper","webkitAlignSelf","alignSelf","msFlexItemAlign","formattingOptionsWrapper","msFlexAlign","webkitBoxAlign","msFlexWrap","flexWrap","Dropdown","MoreHorizontalIcon","Toolbar","validationInfo","getValidationInfo","isListSelected","isBlockquoteSelected","shouldDisableTables","boldItalicUnderlineAvailable","dropdownItemsAvailable","shouldShowDropdown","isAnyMarkEnabled","isAnyHyperlinkEnabled","isAnyBlockFormattingEnabled","someWithValidation","vals","validation","val","nativeSticky","StickyToolbarWrapper","internalMarks","removeInternalMarks","isRelevantOperation","op","useOnValueChanged","handler","skip","onSkip","debounce","contentfulDocument","toContentfulDocument","cleanedDocument","ConnectedRichTextEditor","isFirstRender","setIsFirstRender","pendingExternalUpdate","setPendingExternalUpdate","onValueChanged","classNames","isToolbarHidden","getPlateActions","Plate","editableProps","readOnly","firstChildren","RichTextEditor","isInitiallyDisabled","otherProps","isEmptyValue","deepEquals","Contentful","FieldConnector","throttle","isEqualValues","lastRemoteValue","setValue","URI","ENTRY","ASSET","isFeaturingEntitySelector","entitySelectorConfigs","Entry","HyperlinkDialog","constructor","handleSubmit","getValue","setTargetEntity","allowedHyperlinkTypes","state","setState","requiresText","hideText","render","labels","renderFields","confirm","isUriInputAutoFocused","renderEntityField","resetEntity","entityLink","isEntitySelectorVisible","renderEntitySelector","propTypes","PropTypes","shape","string","oneOf","arrayOf","bool","func","defaultProps","openRichTextDialog","parameters","Promise","reject","renderRichTextDialog","invocation","startAutoResizer"],"mappings":"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"}