@contentful/field-editor-rich-text 3.4.21 → 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.
- package/dist/cjs/ContentfulEditorProvider.js +59 -0
- package/dist/cjs/RichTextEditor.js +170 -0
- package/dist/cjs/RichTextEditor.styles.js +66 -0
- package/dist/cjs/SdkProvider.js +69 -0
- package/dist/cjs/Toolbar/_tests_/toolbar.test.js +152 -0
- package/dist/cjs/Toolbar/components/EmbedEntityWidget.js +87 -0
- package/dist/cjs/Toolbar/components/EmbeddedEntityDropdownButton.js +69 -0
- package/dist/cjs/Toolbar/components/StickyToolbarWrapper.js +29 -0
- package/dist/cjs/Toolbar/index.js +222 -0
- package/dist/cjs/__fixtures__/FakeSdk.js +183 -0
- package/dist/cjs/__fixtures__/asset/index.js +37 -0
- package/dist/cjs/__fixtures__/content-type/index.js +16 -0
- package/dist/cjs/__fixtures__/entry/index.js +33 -0
- package/dist/cjs/__fixtures__/fixtures.js +71 -0
- package/dist/cjs/__fixtures__/locale/index.js +40 -0
- package/dist/cjs/__fixtures__/space/index.js +16 -0
- package/dist/cjs/constants/Schema.js +172 -0
- package/dist/cjs/dialogs/HypelinkDialog/HyperlinkDialog.js +348 -0
- package/dist/cjs/dialogs/openRichTextDialog.js +64 -0
- package/dist/cjs/dialogs/renderRichTextDialog.js +63 -0
- package/dist/cjs/helpers/__tests__/extractNodes.test.js +299 -0
- package/dist/cjs/helpers/__tests__/removeInternalMarks.test.js +52 -0
- package/dist/cjs/helpers/__tests__/validations.test.js +49 -0
- package/dist/cjs/helpers/editor.js +276 -0
- package/dist/cjs/helpers/environment.js +20 -0
- package/dist/cjs/helpers/extractNodes.js +27 -0
- package/dist/cjs/helpers/formatDateAndTime.js +45 -0
- package/dist/cjs/helpers/getLinkedContentTypeIdsForNodeType.js +24 -0
- package/dist/cjs/helpers/newEntitySelectorConfigFromRichTextField.js +33 -0
- package/dist/cjs/helpers/nodeFactory.js +51 -0
- package/dist/cjs/helpers/removeInternalMarks.js +26 -0
- package/dist/cjs/helpers/sanitizeIncomingSlateDoc.js +33 -0
- package/dist/cjs/helpers/sdkNavigatorSlideIn.js +57 -0
- package/dist/cjs/helpers/sdkNavigatorSlideIn.spec.js +209 -0
- package/dist/cjs/helpers/transformers.js +61 -0
- package/dist/cjs/helpers/validations.js +56 -0
- package/dist/cjs/index.js +66 -0
- package/dist/cjs/internal/constants.js +51 -0
- package/dist/cjs/internal/hooks.js +65 -0
- package/dist/cjs/internal/index.js +21 -0
- package/dist/cjs/internal/misc.js +103 -0
- package/dist/cjs/internal/queries.js +407 -0
- package/dist/cjs/internal/transforms.js +195 -0
- package/dist/cjs/internal/types/editor.js +4 -0
- package/dist/cjs/internal/types/index.js +19 -0
- package/dist/cjs/internal/types/plugins.js +4 -0
- package/dist/cjs/plugins/Break/createExitBreakPlugin.js +26 -0
- package/dist/cjs/plugins/Break/createExitBreakPlugin.test.js +36 -0
- package/dist/cjs/plugins/Break/createResetNodePlugin.js +32 -0
- package/dist/cjs/plugins/Break/createSoftBreakPlugin.js +23 -0
- package/dist/cjs/plugins/Break/createSoftBreakPlugin.test.js +47 -0
- package/dist/cjs/plugins/Break/index.js +20 -0
- package/dist/cjs/plugins/CommandPalette/components/CommandList.js +167 -0
- package/dist/cjs/plugins/CommandPalette/components/CommandList.styles.js +103 -0
- package/dist/cjs/plugins/CommandPalette/components/CommandPrompt.js +69 -0
- package/dist/cjs/plugins/CommandPalette/constants.js +11 -0
- package/dist/cjs/plugins/CommandPalette/createCommandPalettePlugin.js +24 -0
- package/dist/cjs/plugins/CommandPalette/hooks/useCommandList.js +138 -0
- package/dist/cjs/plugins/CommandPalette/index.js +11 -0
- package/dist/cjs/plugins/CommandPalette/onKeyDown.js +51 -0
- package/dist/cjs/plugins/CommandPalette/onKeyDown.spec.js +83 -0
- package/dist/cjs/plugins/CommandPalette/useCommands.js +222 -0
- package/dist/cjs/plugins/CommandPalette/utils/createInlineEntryNode.js +30 -0
- package/dist/cjs/plugins/CommandPalette/utils/fetchAssets.js +31 -0
- package/dist/cjs/plugins/CommandPalette/utils/fetchEntries.js +39 -0
- package/dist/cjs/plugins/CommandPalette/utils/insertBlock.js +42 -0
- package/dist/cjs/plugins/CommandPalette/utils/trimLeadingSlash.js +16 -0
- package/dist/cjs/plugins/DragAndDrop/index.js +54 -0
- package/dist/cjs/plugins/EmbeddedEntityBlock/LinkedEntityBlock.js +128 -0
- package/dist/cjs/plugins/EmbeddedEntityBlock/ToolbarIcon.js +106 -0
- package/dist/cjs/plugins/EmbeddedEntityBlock/Util.js +108 -0
- package/dist/cjs/plugins/EmbeddedEntityBlock/index.js +100 -0
- package/dist/cjs/plugins/EmbeddedEntityInline/FetchingWrappedInlineEntryCard.js +158 -0
- package/dist/cjs/plugins/EmbeddedEntityInline/Util.js +30 -0
- package/dist/cjs/plugins/EmbeddedEntityInline/index.js +221 -0
- package/dist/cjs/plugins/Heading/__tests__/createHeadingPlugin.test.js +117 -0
- package/dist/cjs/plugins/Heading/components/Heading.js +127 -0
- package/dist/cjs/plugins/Heading/components/ToolbarHeadingButton.js +173 -0
- package/dist/cjs/plugins/Heading/createHeadingPlugin.js +102 -0
- package/dist/cjs/plugins/Heading/index.js +19 -0
- package/dist/cjs/plugins/Hr/index.js +193 -0
- package/dist/cjs/plugins/Hyperlink/HyperlinkModal.js +282 -0
- package/dist/cjs/plugins/Hyperlink/__tests__/createHyperlinkPlugin.test.js +25 -0
- package/dist/cjs/plugins/Hyperlink/components/EntityHyperlink.js +93 -0
- package/dist/cjs/plugins/Hyperlink/components/ToolbarHyperlinkButton.js +78 -0
- package/dist/cjs/plugins/Hyperlink/components/UrlHyperlink.js +86 -0
- package/dist/cjs/plugins/Hyperlink/components/styles.js +36 -0
- package/dist/cjs/plugins/Hyperlink/createHyperlinkPlugin.js +179 -0
- package/dist/cjs/plugins/Hyperlink/index.js +20 -0
- package/dist/cjs/plugins/Hyperlink/useEntityInfo.js +95 -0
- package/dist/cjs/plugins/Hyperlink/utils.js +43 -0
- package/dist/cjs/plugins/List/__tests__/createListPlugin.test.js +47 -0
- package/dist/cjs/plugins/List/__tests__/insertListBreak.test.js +77 -0
- package/dist/cjs/plugins/List/__tests__/insertListFragment.test.js +64 -0
- package/dist/cjs/plugins/List/components/List.js +108 -0
- package/dist/cjs/plugins/List/components/ListItem.js +73 -0
- package/dist/cjs/plugins/List/components/ToolbarListButton.js +86 -0
- package/dist/cjs/plugins/List/createListPlugin.js +76 -0
- package/dist/cjs/plugins/List/index.js +19 -0
- package/dist/cjs/plugins/List/insertListBreak.js +60 -0
- package/dist/cjs/plugins/List/insertListFragment.js +98 -0
- package/dist/cjs/plugins/List/onKeyDownList.js +46 -0
- package/dist/cjs/plugins/List/transforms/insertListItem.js +92 -0
- package/dist/cjs/plugins/List/transforms/moveListItemDown.js +47 -0
- package/dist/cjs/plugins/List/transforms/moveListItems.js +56 -0
- package/dist/cjs/plugins/List/transforms/moveListItems.test.js +72 -0
- package/dist/cjs/plugins/List/transforms/toggleList.js +141 -0
- package/dist/cjs/plugins/List/transforms/toggleList.spec.js +139 -0
- package/dist/cjs/plugins/List/transforms/unwrapList.js +38 -0
- package/dist/cjs/plugins/List/utils.js +122 -0
- package/dist/cjs/plugins/List/withList.js +32 -0
- package/dist/cjs/plugins/Marks/Bold.js +119 -0
- package/dist/cjs/plugins/Marks/Code.js +122 -0
- package/dist/cjs/plugins/Marks/Italic.js +114 -0
- package/dist/cjs/plugins/Marks/Subscript.js +109 -0
- package/dist/cjs/plugins/Marks/Superscript.js +107 -0
- package/dist/cjs/plugins/Marks/Underline.js +106 -0
- package/dist/cjs/plugins/Marks/components/MarkToolbarButton.js +105 -0
- package/dist/cjs/plugins/Marks/helpers.js +48 -0
- package/dist/cjs/plugins/Marks/index.js +27 -0
- package/dist/cjs/plugins/Normalizer/baseRules.js +38 -0
- package/dist/cjs/plugins/Normalizer/createNormalizerPlugin.js +15 -0
- package/dist/cjs/plugins/Normalizer/createNormalizerPlugin.test.js +117 -0
- package/dist/cjs/plugins/Normalizer/index.js +19 -0
- package/dist/cjs/plugins/Normalizer/types.js +4 -0
- package/dist/cjs/plugins/Normalizer/utils.js +39 -0
- package/dist/cjs/plugins/Normalizer/withNormalizer.js +88 -0
- package/dist/cjs/plugins/Paragraph/Paragraph.js +70 -0
- package/dist/cjs/plugins/Paragraph/__tests__/createParagraphPlugin.test.js +125 -0
- package/dist/cjs/plugins/Paragraph/createParagraphPlugin.js +73 -0
- package/dist/cjs/plugins/Paragraph/index.js +18 -0
- package/dist/cjs/plugins/Paragraph/utils.js +24 -0
- package/dist/cjs/plugins/PasteHTML/createPasteHTMLPlugin.js +63 -0
- package/dist/cjs/plugins/PasteHTML/index.js +18 -0
- package/dist/cjs/plugins/PasteHTML/utils/__tests__/sanitizeHTML.test.js +54 -0
- package/dist/cjs/plugins/PasteHTML/utils/sanitizeAnchors.js +43 -0
- package/dist/cjs/plugins/PasteHTML/utils/sanitizeHTML.js +50 -0
- package/dist/cjs/plugins/PasteHTML/utils/sanitizeSheets.js +44 -0
- package/dist/cjs/plugins/Quote/__test__/createQuotePlugin.test.js +78 -0
- package/dist/cjs/plugins/Quote/components/Quote.js +69 -0
- package/dist/cjs/plugins/Quote/components/ToolbarQuoteButton.js +72 -0
- package/dist/cjs/plugins/Quote/createQuotePlugin.js +57 -0
- package/dist/cjs/plugins/Quote/index.js +19 -0
- package/dist/cjs/plugins/Quote/shouldResetQuote.js +40 -0
- package/dist/cjs/plugins/Quote/toggleQuote.js +56 -0
- package/dist/cjs/plugins/Quote/withQuote.js +48 -0
- package/dist/cjs/plugins/SelectOnBackspace/createSelectOnBackspacePlugin.js +21 -0
- package/dist/cjs/plugins/SelectOnBackspace/index.js +18 -0
- package/dist/cjs/plugins/Table/__tests__/createTablePlugin.test.js +92 -0
- package/dist/cjs/plugins/Table/__tests__/helpers.test.js +18 -0
- package/dist/cjs/plugins/Table/actions/addColumn.js +63 -0
- package/dist/cjs/plugins/Table/actions/addRow.js +57 -0
- package/dist/cjs/plugins/Table/actions/index.js +20 -0
- package/dist/cjs/plugins/Table/actions/setHeader.js +34 -0
- package/dist/cjs/plugins/Table/components/Cell.js +79 -0
- package/dist/cjs/plugins/Table/components/HeaderCell.js +82 -0
- package/dist/cjs/plugins/Table/components/Row.js +69 -0
- package/dist/cjs/plugins/Table/components/Table.js +76 -0
- package/dist/cjs/plugins/Table/components/TableActions.js +175 -0
- package/dist/cjs/plugins/Table/components/ToolbarButton.js +73 -0
- package/dist/cjs/plugins/Table/createTablePlugin.js +119 -0
- package/dist/cjs/plugins/Table/helpers.js +152 -0
- package/dist/cjs/plugins/Table/index.js +19 -0
- package/dist/cjs/plugins/Table/insertTableFragment.js +50 -0
- package/dist/cjs/plugins/Table/onKeyDownTable.js +62 -0
- package/dist/cjs/plugins/Table/tableTracking.js +64 -0
- package/dist/cjs/plugins/Text/__tests__/createTextPlugin.test.js +79 -0
- package/dist/cjs/plugins/Text/createTextPlugin.js +136 -0
- package/dist/cjs/plugins/Text/index.js +18 -0
- package/dist/cjs/plugins/Tracking/createTrackingPlugin.js +101 -0
- package/dist/cjs/plugins/Tracking/index.js +18 -0
- package/dist/cjs/plugins/Tracking/utils.js +64 -0
- package/dist/cjs/plugins/TrailingParagraph/index.js +20 -0
- package/dist/cjs/plugins/Voids/createVoidsPlugin.js +31 -0
- package/dist/cjs/plugins/Voids/index.js +18 -0
- package/dist/cjs/plugins/Voids/transformVoid.js +29 -0
- package/dist/cjs/plugins/index.js +76 -0
- package/dist/cjs/plugins/links-tracking.js +29 -0
- package/dist/cjs/plugins/shared/FetchingWrappedAssetCard.js +113 -0
- package/dist/cjs/plugins/shared/FetchingWrappedEntryCard.js +116 -0
- package/dist/cjs/plugins/shared/ToolbarButton.js +93 -0
- package/dist/cjs/plugins/shared/__tests__/FetchingWrappedAssetCard.test.js +107 -0
- package/dist/cjs/plugins/shared/__tests__/FetchingWrappedEntryCard.test.js +110 -0
- package/dist/cjs/prepareDocument.js +86 -0
- package/dist/cjs/test-utils/assertOutput.js +31 -0
- package/dist/cjs/test-utils/createEditor.js +31 -0
- package/dist/cjs/test-utils/hyperscript.d.js +1 -0
- package/dist/cjs/test-utils/index.js +21 -0
- package/dist/cjs/test-utils/jsx.js +159 -0
- package/dist/cjs/test-utils/mockPlugin.js +16 -0
- package/dist/cjs/test-utils/randomId.js +13 -0
- package/dist/cjs/test-utils/setEmptyDataAttribute.js +21 -0
- package/dist/cjs/test-utils/validation.js +127 -0
- package/dist/cjs/useOnValueChanged.js +58 -0
- package/dist/esm/ContentfulEditorProvider.js +29 -0
- package/dist/esm/RichTextEditor.js +108 -0
- package/dist/esm/RichTextEditor.styles.js +51 -0
- package/dist/esm/SdkProvider.js +7 -0
- package/dist/esm/Toolbar/_tests_/toolbar.test.js +104 -0
- package/dist/esm/Toolbar/components/EmbedEntityWidget.js +38 -0
- package/dist/esm/Toolbar/components/EmbeddedEntityDropdownButton.js +20 -0
- package/dist/esm/Toolbar/components/StickyToolbarWrapper.js +14 -0
- package/dist/esm/Toolbar/index.js +168 -0
- package/dist/esm/__fixtures__/FakeSdk.js +173 -0
- package/dist/esm/__fixtures__/asset/index.js +6 -0
- package/dist/esm/__fixtures__/content-type/index.js +2 -0
- package/dist/esm/__fixtures__/entry/index.js +5 -0
- package/dist/esm/__fixtures__/fixtures.js +6 -0
- package/dist/esm/__fixtures__/locale/index.js +15 -0
- package/dist/esm/__fixtures__/space/index.js +2 -0
- package/dist/esm/constants/Schema.js +162 -0
- package/dist/esm/dialogs/HypelinkDialog/HyperlinkDialog.js +283 -0
- package/dist/esm/dialogs/openRichTextDialog.js +15 -0
- package/dist/esm/dialogs/renderRichTextDialog.js +14 -0
- package/dist/esm/helpers/__tests__/extractNodes.test.js +295 -0
- package/dist/esm/helpers/__tests__/removeInternalMarks.test.js +48 -0
- package/dist/esm/helpers/__tests__/validations.test.js +45 -0
- package/dist/esm/helpers/editor.js +198 -0
- package/dist/esm/helpers/environment.js +2 -0
- package/dist/esm/helpers/extractNodes.js +17 -0
- package/dist/esm/helpers/formatDateAndTime.js +19 -0
- package/dist/esm/helpers/getLinkedContentTypeIdsForNodeType.js +9 -0
- package/dist/esm/helpers/newEntitySelectorConfigFromRichTextField.js +18 -0
- package/dist/esm/helpers/nodeFactory.js +24 -0
- package/dist/esm/helpers/removeInternalMarks.js +16 -0
- package/dist/esm/helpers/sanitizeIncomingSlateDoc.js +23 -0
- package/dist/esm/helpers/sdkNavigatorSlideIn.js +42 -0
- package/dist/esm/helpers/sdkNavigatorSlideIn.spec.js +200 -0
- package/dist/esm/helpers/transformers.js +34 -0
- package/dist/esm/helpers/validations.js +24 -0
- package/dist/esm/index.js +4 -0
- package/dist/esm/internal/constants.js +2 -0
- package/dist/esm/internal/hooks.js +5 -0
- package/dist/esm/internal/index.js +4 -0
- package/dist/esm/internal/misc.js +28 -0
- package/dist/esm/internal/queries.js +182 -0
- package/dist/esm/internal/transforms.js +75 -0
- package/dist/esm/internal/types/editor.js +1 -0
- package/dist/esm/internal/types/index.js +2 -0
- package/dist/esm/internal/types/plugins.js +1 -0
- package/dist/esm/plugins/Break/createExitBreakPlugin.js +16 -0
- package/dist/esm/plugins/Break/createExitBreakPlugin.test.js +32 -0
- package/dist/esm/plugins/Break/createResetNodePlugin.js +22 -0
- package/dist/esm/plugins/Break/createSoftBreakPlugin.js +13 -0
- package/dist/esm/plugins/Break/createSoftBreakPlugin.test.js +43 -0
- package/dist/esm/plugins/Break/index.js +3 -0
- package/dist/esm/plugins/CommandPalette/components/CommandList.js +113 -0
- package/dist/esm/plugins/CommandPalette/components/CommandList.styles.js +88 -0
- package/dist/esm/plugins/CommandPalette/components/CommandPrompt.js +20 -0
- package/dist/esm/plugins/CommandPalette/constants.js +1 -0
- package/dist/esm/plugins/CommandPalette/createCommandPalettePlugin.js +14 -0
- package/dist/esm/plugins/CommandPalette/hooks/useCommandList.js +84 -0
- package/dist/esm/plugins/CommandPalette/index.js +1 -0
- package/dist/esm/plugins/CommandPalette/onKeyDown.js +36 -0
- package/dist/esm/plugins/CommandPalette/onKeyDown.spec.js +40 -0
- package/dist/esm/plugins/CommandPalette/useCommands.js +204 -0
- package/dist/esm/plugins/CommandPalette/utils/createInlineEntryNode.js +20 -0
- package/dist/esm/plugins/CommandPalette/utils/fetchAssets.js +21 -0
- package/dist/esm/plugins/CommandPalette/utils/fetchEntries.js +29 -0
- package/dist/esm/plugins/CommandPalette/utils/insertBlock.js +32 -0
- package/dist/esm/plugins/CommandPalette/utils/trimLeadingSlash.js +6 -0
- package/dist/esm/plugins/DragAndDrop/index.js +44 -0
- package/dist/esm/plugins/EmbeddedEntityBlock/LinkedEntityBlock.js +79 -0
- package/dist/esm/plugins/EmbeddedEntityBlock/ToolbarIcon.js +49 -0
- package/dist/esm/plugins/EmbeddedEntityBlock/Util.js +85 -0
- package/dist/esm/plugins/EmbeddedEntityBlock/index.js +74 -0
- package/dist/esm/plugins/EmbeddedEntityInline/FetchingWrappedInlineEntryCard.js +104 -0
- package/dist/esm/plugins/EmbeddedEntityInline/Util.js +20 -0
- package/dist/esm/plugins/EmbeddedEntityInline/index.js +159 -0
- package/dist/esm/plugins/Heading/__tests__/createHeadingPlugin.test.js +113 -0
- package/dist/esm/plugins/Heading/components/Heading.js +73 -0
- package/dist/esm/plugins/Heading/components/ToolbarHeadingButton.js +119 -0
- package/dist/esm/plugins/Heading/createHeadingPlugin.js +87 -0
- package/dist/esm/plugins/Heading/index.js +2 -0
- package/dist/esm/plugins/Hr/index.js +125 -0
- package/dist/esm/plugins/Hyperlink/HyperlinkModal.js +220 -0
- package/dist/esm/plugins/Hyperlink/__tests__/createHyperlinkPlugin.test.js +21 -0
- package/dist/esm/plugins/Hyperlink/components/EntityHyperlink.js +44 -0
- package/dist/esm/plugins/Hyperlink/components/ToolbarHyperlinkButton.js +29 -0
- package/dist/esm/plugins/Hyperlink/components/UrlHyperlink.js +37 -0
- package/dist/esm/plugins/Hyperlink/components/styles.js +21 -0
- package/dist/esm/plugins/Hyperlink/createHyperlinkPlugin.js +125 -0
- package/dist/esm/plugins/Hyperlink/index.js +2 -0
- package/dist/esm/plugins/Hyperlink/useEntityInfo.js +85 -0
- package/dist/esm/plugins/Hyperlink/utils.js +25 -0
- package/dist/esm/plugins/List/__tests__/createListPlugin.test.js +43 -0
- package/dist/esm/plugins/List/__tests__/insertListBreak.test.js +73 -0
- package/dist/esm/plugins/List/__tests__/insertListFragment.test.js +60 -0
- package/dist/esm/plugins/List/components/List.js +46 -0
- package/dist/esm/plugins/List/components/ListItem.js +19 -0
- package/dist/esm/plugins/List/components/ToolbarListButton.js +37 -0
- package/dist/esm/plugins/List/createListPlugin.js +66 -0
- package/dist/esm/plugins/List/index.js +2 -0
- package/dist/esm/plugins/List/insertListBreak.js +50 -0
- package/dist/esm/plugins/List/insertListFragment.js +88 -0
- package/dist/esm/plugins/List/onKeyDownList.js +31 -0
- package/dist/esm/plugins/List/transforms/insertListItem.js +82 -0
- package/dist/esm/plugins/List/transforms/moveListItemDown.js +37 -0
- package/dist/esm/plugins/List/transforms/moveListItems.js +46 -0
- package/dist/esm/plugins/List/transforms/moveListItems.test.js +68 -0
- package/dist/esm/plugins/List/transforms/toggleList.js +132 -0
- package/dist/esm/plugins/List/transforms/toggleList.spec.js +135 -0
- package/dist/esm/plugins/List/transforms/unwrapList.js +28 -0
- package/dist/esm/plugins/List/utils.js +89 -0
- package/dist/esm/plugins/List/withList.js +22 -0
- package/dist/esm/plugins/Marks/Bold.js +59 -0
- package/dist/esm/plugins/Marks/Code.js +59 -0
- package/dist/esm/plugins/Marks/Italic.js +54 -0
- package/dist/esm/plugins/Marks/Subscript.js +46 -0
- package/dist/esm/plugins/Marks/Superscript.js +44 -0
- package/dist/esm/plugins/Marks/Underline.js +46 -0
- package/dist/esm/plugins/Marks/components/MarkToolbarButton.js +51 -0
- package/dist/esm/plugins/Marks/helpers.js +25 -0
- package/dist/esm/plugins/Marks/index.js +17 -0
- package/dist/esm/plugins/Normalizer/baseRules.js +28 -0
- package/dist/esm/plugins/Normalizer/createNormalizerPlugin.js +5 -0
- package/dist/esm/plugins/Normalizer/createNormalizerPlugin.test.js +113 -0
- package/dist/esm/plugins/Normalizer/index.js +2 -0
- package/dist/esm/plugins/Normalizer/types.js +1 -0
- package/dist/esm/plugins/Normalizer/utils.js +18 -0
- package/dist/esm/plugins/Normalizer/withNormalizer.js +73 -0
- package/dist/esm/plugins/Paragraph/Paragraph.js +16 -0
- package/dist/esm/plugins/Paragraph/__tests__/createParagraphPlugin.test.js +121 -0
- package/dist/esm/plugins/Paragraph/createParagraphPlugin.js +58 -0
- package/dist/esm/plugins/Paragraph/index.js +1 -0
- package/dist/esm/plugins/Paragraph/utils.js +6 -0
- package/dist/esm/plugins/PasteHTML/createPasteHTMLPlugin.js +42 -0
- package/dist/esm/plugins/PasteHTML/index.js +1 -0
- package/dist/esm/plugins/PasteHTML/utils/__tests__/sanitizeHTML.test.js +50 -0
- package/dist/esm/plugins/PasteHTML/utils/sanitizeAnchors.js +33 -0
- package/dist/esm/plugins/PasteHTML/utils/sanitizeHTML.js +40 -0
- package/dist/esm/plugins/PasteHTML/utils/sanitizeSheets.js +34 -0
- package/dist/esm/plugins/Quote/__test__/createQuotePlugin.test.js +74 -0
- package/dist/esm/plugins/Quote/components/Quote.js +15 -0
- package/dist/esm/plugins/Quote/components/ToolbarQuoteButton.js +23 -0
- package/dist/esm/plugins/Quote/createQuotePlugin.js +47 -0
- package/dist/esm/plugins/Quote/index.js +2 -0
- package/dist/esm/plugins/Quote/shouldResetQuote.js +30 -0
- package/dist/esm/plugins/Quote/toggleQuote.js +33 -0
- package/dist/esm/plugins/Quote/withQuote.js +38 -0
- package/dist/esm/plugins/SelectOnBackspace/createSelectOnBackspacePlugin.js +11 -0
- package/dist/esm/plugins/SelectOnBackspace/index.js +1 -0
- package/dist/esm/plugins/Table/__tests__/createTablePlugin.test.js +88 -0
- package/dist/esm/plugins/Table/__tests__/helpers.test.js +14 -0
- package/dist/esm/plugins/Table/actions/addColumn.js +45 -0
- package/dist/esm/plugins/Table/actions/addRow.js +39 -0
- package/dist/esm/plugins/Table/actions/index.js +3 -0
- package/dist/esm/plugins/Table/actions/setHeader.js +24 -0
- package/dist/esm/plugins/Table/components/Cell.js +25 -0
- package/dist/esm/plugins/Table/components/HeaderCell.js +28 -0
- package/dist/esm/plugins/Table/components/Row.js +15 -0
- package/dist/esm/plugins/Table/components/Table.js +22 -0
- package/dist/esm/plugins/Table/components/TableActions.js +118 -0
- package/dist/esm/plugins/Table/components/ToolbarButton.js +24 -0
- package/dist/esm/plugins/Table/createTablePlugin.js +109 -0
- package/dist/esm/plugins/Table/helpers.js +116 -0
- package/dist/esm/plugins/Table/index.js +2 -0
- package/dist/esm/plugins/Table/insertTableFragment.js +40 -0
- package/dist/esm/plugins/Table/onKeyDownTable.js +52 -0
- package/dist/esm/plugins/Table/tableTracking.js +46 -0
- package/dist/esm/plugins/Text/__tests__/createTextPlugin.test.js +75 -0
- package/dist/esm/plugins/Text/createTextPlugin.js +126 -0
- package/dist/esm/plugins/Text/index.js +1 -0
- package/dist/esm/plugins/Tracking/createTrackingPlugin.js +83 -0
- package/dist/esm/plugins/Tracking/index.js +1 -0
- package/dist/esm/plugins/Tracking/utils.js +10 -0
- package/dist/esm/plugins/TrailingParagraph/index.js +10 -0
- package/dist/esm/plugins/Voids/createVoidsPlugin.js +21 -0
- package/dist/esm/plugins/Voids/index.js +1 -0
- package/dist/esm/plugins/Voids/transformVoid.js +19 -0
- package/dist/esm/plugins/index.js +58 -0
- package/dist/esm/plugins/links-tracking.js +14 -0
- package/dist/esm/plugins/shared/FetchingWrappedAssetCard.js +59 -0
- package/dist/esm/plugins/shared/FetchingWrappedEntryCard.js +62 -0
- package/dist/esm/plugins/shared/ToolbarButton.js +39 -0
- package/dist/esm/plugins/shared/__tests__/FetchingWrappedAssetCard.test.js +59 -0
- package/dist/esm/plugins/shared/__tests__/FetchingWrappedEntryCard.test.js +62 -0
- package/dist/esm/prepareDocument.js +57 -0
- package/dist/esm/test-utils/assertOutput.js +21 -0
- package/dist/esm/test-utils/createEditor.js +21 -0
- package/dist/esm/test-utils/hyperscript.d.js +0 -0
- package/dist/esm/test-utils/index.js +4 -0
- package/dist/esm/test-utils/jsx.js +149 -0
- package/dist/esm/test-utils/mockPlugin.js +6 -0
- package/dist/esm/test-utils/randomId.js +3 -0
- package/dist/esm/test-utils/setEmptyDataAttribute.js +11 -0
- package/dist/esm/test-utils/validation.js +112 -0
- package/dist/esm/useOnValueChanged.js +43 -0
- package/dist/{ContentfulEditorProvider.d.ts → types/ContentfulEditorProvider.d.ts} +9 -9
- package/dist/{RichTextEditor.d.ts → types/RichTextEditor.d.ts} +21 -20
- package/dist/{RichTextEditor.styles.d.ts → types/RichTextEditor.styles.d.ts} +7 -7
- package/dist/{SdkProvider.d.ts → types/SdkProvider.d.ts} +7 -7
- package/dist/types/Toolbar/_tests_/toolbar.test.d.ts +1 -0
- package/dist/{Toolbar → types/Toolbar}/components/EmbedEntityWidget.d.ts +6 -5
- package/dist/{Toolbar → types/Toolbar}/components/EmbeddedEntityDropdownButton.d.ts +9 -9
- package/dist/{Toolbar → types/Toolbar}/components/StickyToolbarWrapper.d.ts +7 -7
- package/dist/types/Toolbar/index.d.ts +6 -0
- package/dist/types/__fixtures__/FakeSdk.d.ts +8 -0
- package/dist/types/__fixtures__/asset/index.d.ts +6 -0
- package/dist/types/__fixtures__/content-type/index.d.ts +2 -0
- package/dist/types/__fixtures__/entry/index.d.ts +5 -0
- package/dist/types/__fixtures__/fixtures.d.ts +6 -0
- package/dist/types/__fixtures__/locale/index.d.ts +42 -0
- package/dist/types/__fixtures__/space/index.d.ts +2 -0
- package/dist/{constants → types/constants}/Schema.d.ts +111 -111
- package/dist/{dialogs → types/dialogs}/HypelinkDialog/HyperlinkDialog.d.ts +63 -54
- package/dist/{dialogs → types/dialogs}/openRichTextDialog.d.ts +2 -2
- package/dist/{dialogs → types/dialogs}/renderRichTextDialog.d.ts +3 -2
- package/dist/types/helpers/__tests__/extractNodes.test.d.ts +1 -0
- package/dist/types/helpers/__tests__/removeInternalMarks.test.d.ts +2 -0
- package/dist/types/helpers/__tests__/validations.test.d.ts +1 -0
- package/dist/{helpers → types/helpers}/editor.d.ts +40 -40
- package/dist/{helpers → types/helpers}/environment.d.ts +2 -2
- package/dist/{helpers → types/helpers}/extractNodes.d.ts +5 -5
- package/dist/{helpers → types/helpers}/formatDateAndTime.d.ts +15 -15
- package/dist/{helpers → types/helpers}/getLinkedContentTypeIdsForNodeType.d.ts +26 -26
- package/dist/{helpers → types/helpers}/newEntitySelectorConfigFromRichTextField.d.ts +14 -14
- package/dist/{helpers → types/helpers}/nodeFactory.d.ts +24 -24
- package/dist/{helpers → types/helpers}/removeInternalMarks.d.ts +1 -1
- package/dist/{helpers → types/helpers}/sanitizeIncomingSlateDoc.d.ts +6 -6
- package/dist/{helpers → types/helpers}/sdkNavigatorSlideIn.d.ts +16 -16
- package/dist/types/helpers/sdkNavigatorSlideIn.spec.d.ts +1 -0
- package/dist/{helpers → types/helpers}/transformers.d.ts +7 -7
- package/dist/{helpers → types/helpers}/validations.d.ts +10 -10
- package/dist/{index.d.ts → types/index.d.ts} +4 -4
- package/dist/{internal → types/internal}/constants.d.ts +1 -1
- package/dist/{internal → types/internal}/hooks.d.ts +4 -4
- package/dist/{internal → types/internal}/index.d.ts +4 -4
- package/dist/{internal → types/internal}/misc.d.ts +37 -37
- package/dist/{internal → types/internal}/queries.d.ts +78 -78
- package/dist/{internal → types/internal}/transforms.d.ts +33 -33
- package/dist/types/internal/types/editor.d.ts +51 -0
- package/dist/{internal → types/internal}/types/index.d.ts +2 -2
- package/dist/{internal → types/internal}/types/plugins.d.ts +12 -12
- package/dist/{plugins → types/plugins}/Break/createExitBreakPlugin.d.ts +2 -2
- package/dist/types/plugins/Break/createExitBreakPlugin.test.d.ts +1 -0
- package/dist/{plugins → types/plugins}/Break/createResetNodePlugin.d.ts +2 -2
- package/dist/{plugins → types/plugins}/Break/createSoftBreakPlugin.d.ts +2 -2
- package/dist/types/plugins/Break/createSoftBreakPlugin.test.d.ts +1 -0
- package/dist/{plugins → types/plugins}/Break/index.d.ts +5 -5
- package/dist/{plugins → types/plugins}/CommandPalette/components/CommandList.d.ts +8 -7
- package/dist/{plugins → types/plugins}/CommandPalette/components/CommandList.styles.d.ts +14 -14
- package/dist/{plugins → types/plugins}/CommandPalette/components/CommandPrompt.d.ts +5 -4
- package/dist/{plugins → types/plugins}/CommandPalette/constants.d.ts +1 -1
- package/dist/{plugins → types/plugins}/CommandPalette/createCommandPalettePlugin.d.ts +13 -13
- package/dist/{plugins → types/plugins}/CommandPalette/hooks/useCommandList.d.ts +4 -4
- package/dist/{plugins → types/plugins}/CommandPalette/index.d.ts +1 -1
- package/dist/{plugins → types/plugins}/CommandPalette/onKeyDown.d.ts +2 -2
- package/dist/types/plugins/CommandPalette/onKeyDown.spec.d.ts +1 -0
- package/dist/{plugins → types/plugins}/CommandPalette/useCommands.d.ts +19 -19
- package/dist/{plugins → types/plugins}/CommandPalette/utils/createInlineEntryNode.d.ts +16 -16
- package/dist/{plugins → types/plugins}/CommandPalette/utils/fetchAssets.d.ts +8 -8
- package/dist/{plugins → types/plugins}/CommandPalette/utils/fetchEntries.d.ts +9 -9
- package/dist/{plugins → types/plugins}/CommandPalette/utils/insertBlock.d.ts +1 -1
- package/dist/{plugins → types/plugins}/CommandPalette/utils/trimLeadingSlash.d.ts +7 -7
- package/dist/{plugins → types/plugins}/DragAndDrop/index.d.ts +2 -2
- package/dist/{plugins → types/plugins}/EmbeddedEntityBlock/LinkedEntityBlock.d.ts +20 -19
- package/dist/{plugins → types/plugins}/EmbeddedEntityBlock/ToolbarIcon.d.ts +11 -10
- package/dist/{plugins → types/plugins}/EmbeddedEntityBlock/Util.d.ts +4 -4
- package/dist/{plugins → types/plugins}/EmbeddedEntityBlock/index.d.ts +5 -5
- package/dist/{plugins → types/plugins}/EmbeddedEntityInline/FetchingWrappedInlineEntryCard.d.ts +13 -13
- package/dist/{plugins → types/plugins}/EmbeddedEntityInline/Util.d.ts +16 -16
- package/dist/{plugins → types/plugins}/EmbeddedEntityInline/index.d.ts +10 -9
- package/dist/types/plugins/Heading/__tests__/createHeadingPlugin.test.d.ts +1 -0
- package/dist/{plugins → types/plugins}/Heading/components/Heading.d.ts +10 -10
- package/dist/{plugins → types/plugins}/Heading/components/ToolbarHeadingButton.d.ts +5 -4
- package/dist/{plugins → types/plugins}/Heading/createHeadingPlugin.d.ts +2 -2
- package/dist/{plugins → types/plugins}/Heading/index.d.ts +2 -2
- package/dist/{plugins → types/plugins}/Hr/index.d.ts +11 -11
- package/dist/{plugins → types/plugins}/Hyperlink/HyperlinkModal.d.ts +17 -16
- package/dist/types/plugins/Hyperlink/__tests__/createHyperlinkPlugin.test.d.ts +1 -0
- package/dist/{plugins → types/plugins}/Hyperlink/components/EntityHyperlink.d.ts +21 -20
- package/dist/{plugins → types/plugins}/Hyperlink/components/ToolbarHyperlinkButton.d.ts +6 -5
- package/dist/{plugins → types/plugins}/Hyperlink/components/UrlHyperlink.d.ts +22 -21
- package/dist/{plugins → types/plugins}/Hyperlink/components/styles.d.ts +4 -4
- package/dist/{plugins → types/plugins}/Hyperlink/createHyperlinkPlugin.d.ts +3 -3
- package/dist/{plugins → types/plugins}/Hyperlink/index.d.ts +2 -2
- package/dist/{plugins → types/plugins}/Hyperlink/useEntityInfo.d.ts +16 -16
- package/dist/{plugins → types/plugins}/Hyperlink/utils.d.ts +5 -5
- package/dist/types/plugins/List/__tests__/createListPlugin.test.d.ts +1 -0
- package/dist/types/plugins/List/__tests__/insertListBreak.test.d.ts +1 -0
- package/dist/types/plugins/List/__tests__/insertListFragment.test.d.ts +1 -0
- package/dist/{plugins → types/plugins}/List/components/List.d.ts +4 -3
- package/dist/{plugins → types/plugins}/List/components/ListItem.d.ts +3 -2
- package/dist/{plugins → types/plugins}/List/components/ToolbarListButton.d.ts +5 -4
- package/dist/{plugins → types/plugins}/List/createListPlugin.d.ts +2 -2
- package/dist/{plugins → types/plugins}/List/index.d.ts +2 -2
- package/dist/{plugins → types/plugins}/List/insertListBreak.d.ts +2 -2
- package/dist/{plugins → types/plugins}/List/insertListFragment.d.ts +2 -2
- package/dist/{plugins → types/plugins}/List/onKeyDownList.d.ts +7 -7
- package/dist/{plugins → types/plugins}/List/transforms/insertListItem.d.ts +5 -5
- package/dist/{plugins → types/plugins}/List/transforms/moveListItemDown.d.ts +6 -6
- package/dist/{plugins → types/plugins}/List/transforms/moveListItems.d.ts +6 -6
- package/dist/types/plugins/List/transforms/moveListItems.test.d.ts +1 -0
- package/dist/{plugins → types/plugins}/List/transforms/toggleList.d.ts +4 -4
- package/dist/types/plugins/List/transforms/toggleList.spec.d.ts +1 -0
- package/dist/{plugins → types/plugins}/List/transforms/unwrapList.d.ts +4 -4
- package/dist/{plugins → types/plugins}/List/utils.d.ts +14 -14
- package/dist/{plugins → types/plugins}/List/withList.d.ts +2 -2
- package/dist/{plugins → types/plugins}/Marks/Bold.d.ts +11 -10
- package/dist/{plugins → types/plugins}/Marks/Code.d.ts +17 -16
- package/dist/{plugins → types/plugins}/Marks/Italic.d.ts +11 -10
- package/dist/{plugins → types/plugins}/Marks/Subscript.d.ts +17 -16
- package/dist/{plugins → types/plugins}/Marks/Superscript.d.ts +17 -16
- package/dist/{plugins → types/plugins}/Marks/Underline.d.ts +11 -10
- package/dist/{plugins → types/plugins}/Marks/components/MarkToolbarButton.d.ts +13 -13
- package/dist/{plugins → types/plugins}/Marks/helpers.d.ts +4 -4
- package/dist/{plugins → types/plugins}/Marks/index.d.ts +2 -2
- package/dist/{plugins → types/plugins}/Normalizer/baseRules.d.ts +2 -2
- package/dist/{plugins → types/plugins}/Normalizer/createNormalizerPlugin.d.ts +2 -2
- package/dist/types/plugins/Normalizer/createNormalizerPlugin.test.d.ts +1 -0
- package/dist/{plugins → types/plugins}/Normalizer/index.d.ts +2 -2
- package/dist/{plugins → types/plugins}/Normalizer/types.d.ts +38 -38
- package/dist/{plugins → types/plugins}/Normalizer/utils.d.ts +5 -5
- package/dist/{plugins → types/plugins}/Normalizer/withNormalizer.d.ts +2 -2
- package/dist/types/plugins/Paragraph/Paragraph.d.ts +3 -0
- package/dist/types/plugins/Paragraph/__tests__/createParagraphPlugin.test.d.ts +1 -0
- package/dist/{plugins → types/plugins}/Paragraph/createParagraphPlugin.d.ts +2 -2
- package/dist/{plugins → types/plugins}/Paragraph/index.d.ts +1 -1
- package/dist/{plugins → types/plugins}/Paragraph/utils.d.ts +2 -2
- package/dist/{plugins → types/plugins}/PasteHTML/createPasteHTMLPlugin.d.ts +8 -8
- package/dist/{plugins → types/plugins}/PasteHTML/index.d.ts +1 -1
- package/dist/types/plugins/PasteHTML/utils/__tests__/sanitizeHTML.test.d.ts +1 -0
- package/dist/{plugins → types/plugins}/PasteHTML/utils/sanitizeAnchors.d.ts +19 -19
- package/dist/{plugins → types/plugins}/PasteHTML/utils/sanitizeHTML.d.ts +1 -1
- package/dist/{plugins → types/plugins}/PasteHTML/utils/sanitizeSheets.d.ts +4 -4
- package/dist/types/plugins/Quote/__test__/createQuotePlugin.test.d.ts +1 -0
- package/dist/types/plugins/Quote/components/Quote.d.ts +3 -0
- package/dist/{plugins → types/plugins}/Quote/components/ToolbarQuoteButton.d.ts +5 -4
- package/dist/{plugins → types/plugins}/Quote/createQuotePlugin.d.ts +2 -2
- package/dist/{plugins → types/plugins}/Quote/index.d.ts +2 -2
- package/dist/{plugins → types/plugins}/Quote/shouldResetQuote.d.ts +8 -8
- package/dist/{plugins → types/plugins}/Quote/toggleQuote.d.ts +4 -4
- package/dist/{plugins → types/plugins}/Quote/withQuote.d.ts +2 -2
- package/dist/{plugins → types/plugins}/SelectOnBackspace/createSelectOnBackspacePlugin.d.ts +2 -2
- package/dist/{plugins → types/plugins}/SelectOnBackspace/index.d.ts +1 -1
- package/dist/types/plugins/Table/__tests__/createTablePlugin.test.d.ts +1 -0
- package/dist/types/plugins/Table/__tests__/helpers.test.d.ts +1 -0
- package/dist/{plugins → types/plugins}/Table/actions/addColumn.d.ts +7 -7
- package/dist/{plugins → types/plugins}/Table/actions/addRow.d.ts +3 -3
- package/dist/{plugins → types/plugins}/Table/actions/index.d.ts +3 -3
- package/dist/{plugins → types/plugins}/Table/actions/setHeader.d.ts +2 -2
- package/dist/types/plugins/Table/components/Cell.d.ts +3 -0
- package/dist/{plugins → types/plugins}/Table/components/HeaderCell.d.ts +3 -2
- package/dist/types/plugins/Table/components/Row.d.ts +3 -0
- package/dist/{plugins → types/plugins}/Table/components/Table.d.ts +3 -2
- package/dist/types/plugins/Table/components/TableActions.d.ts +5 -0
- package/dist/{plugins → types/plugins}/Table/components/ToolbarButton.d.ts +5 -4
- package/dist/{plugins → types/plugins}/Table/createTablePlugin.d.ts +2 -2
- package/dist/{plugins → types/plugins}/Table/helpers.d.ts +15 -15
- package/dist/{plugins → types/plugins}/Table/index.d.ts +2 -2
- package/dist/{plugins → types/plugins}/Table/insertTableFragment.d.ts +3 -3
- package/dist/{plugins → types/plugins}/Table/onKeyDownTable.d.ts +2 -2
- package/dist/{plugins → types/plugins}/Table/tableTracking.d.ts +4 -4
- package/dist/types/plugins/Text/__tests__/createTextPlugin.test.d.ts +2 -0
- package/dist/{plugins → types/plugins}/Text/createTextPlugin.d.ts +2 -2
- package/dist/{plugins → types/plugins}/Text/index.d.ts +1 -1
- package/dist/{plugins → types/plugins}/Tracking/createTrackingPlugin.d.ts +12 -12
- package/dist/{plugins → types/plugins}/Tracking/index.d.ts +1 -1
- package/dist/{plugins → types/plugins}/Tracking/utils.d.ts +2 -2
- package/dist/{plugins → types/plugins}/TrailingParagraph/index.d.ts +2 -2
- package/dist/{plugins → types/plugins}/Voids/createVoidsPlugin.d.ts +2 -2
- package/dist/{plugins → types/plugins}/Voids/index.d.ts +1 -1
- package/dist/{plugins → types/plugins}/Voids/transformVoid.d.ts +5 -5
- package/dist/{plugins → types/plugins}/index.d.ts +6 -6
- package/dist/{plugins → types/plugins}/links-tracking.d.ts +3 -3
- package/dist/{plugins → types/plugins}/shared/FetchingWrappedAssetCard.d.ts +14 -13
- package/dist/{plugins → types/plugins}/shared/FetchingWrappedEntryCard.d.ts +14 -13
- package/dist/{plugins → types/plugins}/shared/ToolbarButton.d.ts +12 -11
- package/dist/types/plugins/shared/__tests__/FetchingWrappedAssetCard.test.d.ts +1 -0
- package/dist/types/plugins/shared/__tests__/FetchingWrappedEntryCard.test.d.ts +1 -0
- package/dist/{prepareDocument.d.ts → types/prepareDocument.d.ts} +19 -19
- package/dist/{test-utils → types/test-utils}/assertOutput.d.ts +7 -7
- package/dist/{test-utils → types/test-utils}/createEditor.d.ts +31 -31
- package/dist/{test-utils → types/test-utils}/index.d.ts +4 -4
- package/dist/{test-utils → types/test-utils}/jsx.d.ts +28 -28
- package/dist/{test-utils → types/test-utils}/mockPlugin.d.ts +2 -2
- package/dist/{test-utils → types/test-utils}/randomId.d.ts +4 -4
- package/dist/{test-utils → types/test-utils}/setEmptyDataAttribute.d.ts +6 -6
- package/dist/{test-utils → types/test-utils}/validation.d.ts +1 -1
- package/dist/{useOnValueChanged.d.ts → types/useOnValueChanged.d.ts} +8 -8
- package/package.json +27 -21
- package/CHANGELOG.md +0 -946
- package/dist/Toolbar/index.d.ts +0 -5
- package/dist/field-editor-rich-text.cjs.development.js +0 -7210
- package/dist/field-editor-rich-text.cjs.development.js.map +0 -1
- package/dist/field-editor-rich-text.cjs.production.min.js +0 -163
- package/dist/field-editor-rich-text.cjs.production.min.js.map +0 -1
- package/dist/field-editor-rich-text.esm.js +0 -7200
- package/dist/field-editor-rich-text.esm.js.map +0 -1
- package/dist/index.js +0 -8
- package/dist/internal/types/editor.d.ts +0 -51
- package/dist/plugins/List/transforms/deleteBackwardList.d.ts +0 -2
- package/dist/plugins/Paragraph/Paragraph.d.ts +0 -2
- package/dist/plugins/Quote/components/Quote.d.ts +0 -2
- package/dist/plugins/Table/components/Cell.d.ts +0 -2
- package/dist/plugins/Table/components/Row.d.ts +0 -2
- package/dist/plugins/Table/components/TableActions.d.ts +0 -4
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"field-editor-rich-text.esm.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/transforms/deleteBackwardList.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 { BLOCKS } from '@contentful/rich-text-types';\nimport {\n getListItemEntry,\n removeFirstListItem,\n removeListItem,\n isListNested,\n} from '@udecode/plate-list';\nimport { onKeyDownResetNode, SIMULATE_BACKSPACE } from '@udecode/plate-reset-node';\n\nimport { withoutNormalizing } from '../../../internal';\nimport { mockPlugin } from '../../../internal/misc';\nimport { isSelectionAtBlockStart, isFirstChild } from '../../../internal/queries';\nimport { deleteFragment } from '../../../internal/transforms';\nimport { PlateEditor } from '../../../internal/types';\nimport { unwrapList } from './unwrapList';\n\nexport const deleteBackwardList = (\n editor: PlateEditor,\n unit: 'character' | 'word' | 'line' | 'block'\n) => {\n const res = getListItemEntry(editor, {});\n\n let moved: boolean | undefined = false;\n\n if (res) {\n const { list, listItem } = res;\n\n if (\n isSelectionAtBlockStart(editor, {\n match: (node) => node.type === BLOCKS.LIST_ITEM,\n })\n ) {\n withoutNormalizing(editor, () => {\n moved = removeFirstListItem(editor, { list, listItem });\n if (moved) return;\n\n moved = removeListItem(editor, { list, listItem });\n if (moved) return;\n\n if (isFirstChild(listItem[1]) && !isListNested(editor, list[1])) {\n onKeyDownResetNode(\n editor,\n // TODO look into this\n // @ts-expect-error\n mockPlugin({\n options: {\n rules: [\n {\n types: [BLOCKS.LIST_ITEM],\n defaultType: BLOCKS.PARAGRAPH,\n hotkey: 'backspace',\n predicate: () => isSelectionAtBlockStart(editor),\n onReset: (e: PlateEditor) => unwrapList(e),\n },\n ],\n },\n })\n )(SIMULATE_BACKSPACE);\n moved = true;\n return;\n }\n\n deleteFragment(editor, {\n // FIXME: see if we can remove unit\n // @ts-expect-error\n unit: unit,\n reverse: true,\n });\n moved = true;\n });\n }\n }\n\n return moved;\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';\nimport { deleteBackwardList } from './transforms/deleteBackwardList';\n\nconst validLiChildrenTypes = LIST_ITEM_BLOCKS;\n\nexport const withList: WithOverride = (editor) => {\n const { deleteBackward, deleteForward, deleteFragment } = editor;\n\n editor.deleteBackward = (unit) => {\n if (deleteBackwardList(editor, unit)) return;\n\n deleteBackward(unit);\n };\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","mockPlugin","plugin","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","isFirstChild","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","deleteFragment","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","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","deleteBackwardList","removeFirstListItem","removeListItem","validLiChildrenTypes","LIST_ITEM_BLOCKS","withList","deleteBackward","deleteForward","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","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","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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"}
|