@contentful/field-editor-rich-text 3.16.8 → 3.16.10
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 +8 -8
- package/dist/cjs/RichTextEditor.js +20 -22
- package/dist/cjs/RichTextEditor.styles.js +1 -2
- package/dist/cjs/SdkProvider.js +5 -7
- package/dist/cjs/SyncEditorChanges.js +6 -15
- package/dist/cjs/Toolbar/_tests_/toolbar.test.js +15 -17
- package/dist/cjs/Toolbar/components/EmbedEntityWidget.js +9 -13
- package/dist/cjs/Toolbar/components/EmbeddedEntityDropdownButton.js +8 -10
- package/dist/cjs/Toolbar/components/StickyToolbarWrapper.js +2 -2
- package/dist/cjs/Toolbar/index.js +30 -33
- package/dist/cjs/__fixtures__/FakeSdk.js +3 -3
- package/dist/cjs/__fixtures__/asset/index.js +10 -10
- package/dist/cjs/__fixtures__/content-type/index.js +1 -1
- package/dist/cjs/__fixtures__/entry/index.js +7 -7
- package/dist/cjs/__fixtures__/fixtures.js +6 -8
- package/dist/cjs/__fixtures__/locale/index.js +2 -2
- package/dist/cjs/__fixtures__/space/index.js +1 -1
- package/dist/cjs/constants/Schema.js +0 -1
- package/dist/cjs/dialogs/HypelinkDialog/HyperlinkDialog.js +38 -43
- package/dist/cjs/dialogs/openRichTextDialog.js +4 -6
- package/dist/cjs/dialogs/renderRichTextDialog.js +4 -6
- package/dist/cjs/helpers/__tests__/removeInternalMarks.test.js +10 -10
- package/dist/cjs/helpers/callbacks.js +3 -3
- package/dist/cjs/helpers/config.js +2 -2
- package/dist/cjs/helpers/editor.js +44 -53
- package/dist/cjs/helpers/environment.js +3 -3
- package/dist/cjs/helpers/formatDateAndTime.js +4 -5
- package/dist/cjs/helpers/getAllowedResourcesForNodeType.js +5 -22
- package/dist/cjs/helpers/getLinkedContentTypeIdsForNodeType.js +5 -29
- package/dist/cjs/helpers/nodeFactory.js +6 -6
- package/dist/cjs/helpers/sdkNavigatorSlideIn.js +6 -14
- package/dist/cjs/helpers/sdkNavigatorSlideIn.spec.js +2 -3
- package/dist/cjs/helpers/toSlateValue.js +3 -14
- package/dist/cjs/helpers/transformers.js +5 -5
- package/dist/cjs/helpers/validations.js +9 -12
- package/dist/cjs/index.js +5 -7
- package/dist/cjs/internal/constants.js +2 -4
- package/dist/cjs/internal/hooks.js +7 -9
- package/dist/cjs/internal/misc.js +12 -15
- package/dist/cjs/internal/queries.js +108 -115
- package/dist/cjs/internal/transforms.js +48 -51
- package/dist/cjs/internal/types/editor.js +1 -3
- package/dist/cjs/plugins/Break/createExitBreakPlugin.test.js +3 -4
- package/dist/cjs/plugins/Break/createResetNodePlugin.js +0 -1
- package/dist/cjs/plugins/Break/createSoftBreakPlugin.test.js +3 -3
- package/dist/cjs/plugins/CommandPalette/components/CommandList.js +33 -35
- package/dist/cjs/plugins/CommandPalette/components/CommandList.styles.js +1 -1
- package/dist/cjs/plugins/CommandPalette/components/CommandPrompt.js +5 -7
- package/dist/cjs/plugins/CommandPalette/hooks/useCommandList.js +3 -7
- package/dist/cjs/plugins/CommandPalette/onKeyDown.js +1 -6
- package/dist/cjs/plugins/CommandPalette/onKeyDown.spec.js +4 -6
- package/dist/cjs/plugins/CommandPalette/useCommands.js +3 -3
- package/dist/cjs/plugins/CommandPalette/utils/fetchEntries.js +0 -2
- package/dist/cjs/plugins/CommandPalette/utils/trimLeadingSlash.js +1 -6
- package/dist/cjs/plugins/DragAndDrop/index.js +1 -9
- package/dist/cjs/plugins/EmbeddedEntityBlock/LinkedEntityBlock.js +8 -10
- package/dist/cjs/plugins/EmbeddedEntityBlock/index.js +3 -3
- package/dist/cjs/plugins/EmbeddedEntityInline/FetchingWrappedInlineEntryCard.js +17 -19
- package/dist/cjs/plugins/EmbeddedEntityInline/LinkedEntityInline.js +7 -9
- package/dist/cjs/plugins/EmbeddedResourceBlock/LinkedResourceBlock.js +5 -5
- package/dist/cjs/plugins/EmbeddedResourceInline/FetchingWrappedResourceInlineCard.js +11 -13
- package/dist/cjs/plugins/EmbeddedResourceInline/LinkedResourceInline.js +5 -5
- package/dist/cjs/plugins/Heading/__tests__/createHeadingPlugin.test.js +32 -32
- package/dist/cjs/plugins/Heading/components/Heading.js +10 -13
- package/dist/cjs/plugins/Heading/components/ToolbarHeadingButton.js +29 -23
- package/dist/cjs/plugins/Heading/createHeadingPlugin.js +2 -7
- package/dist/cjs/plugins/Hr/index.js +14 -19
- package/dist/cjs/plugins/Hyperlink/HyperlinkModal.js +28 -32
- package/dist/cjs/plugins/Hyperlink/__tests__/createHyperlinkPlugin.test.js +8 -8
- package/dist/cjs/plugins/Hyperlink/components/EntityHyperlink.js +8 -10
- package/dist/cjs/plugins/Hyperlink/components/LinkPopover.js +17 -23
- package/dist/cjs/plugins/Hyperlink/components/ResourceHyperlink.js +8 -10
- package/dist/cjs/plugins/Hyperlink/components/ToolbarHyperlinkButton.js +4 -6
- package/dist/cjs/plugins/Hyperlink/components/UrlHyperlink.js +6 -8
- package/dist/cjs/plugins/Hyperlink/components/linkHandlers.js +3 -3
- package/dist/cjs/plugins/Hyperlink/components/styles.js +1 -1
- package/dist/cjs/plugins/Hyperlink/createHyperlinkPlugin.js +4 -10
- package/dist/cjs/plugins/Hyperlink/useEntityInfo.js +3 -6
- package/dist/cjs/plugins/Hyperlink/useResourceEntityInfo.js +4 -6
- package/dist/cjs/plugins/Hyperlink/utils.js +4 -4
- package/dist/cjs/plugins/List/__tests__/createListPlugin.test.js +13 -13
- package/dist/cjs/plugins/List/__tests__/insertListBreak.test.js +25 -29
- package/dist/cjs/plugins/List/__tests__/insertListFragment.test.js +22 -22
- package/dist/cjs/plugins/List/components/List.js +7 -9
- package/dist/cjs/plugins/List/components/ListItem.js +4 -6
- package/dist/cjs/plugins/List/components/ToolbarListButton.js +5 -7
- package/dist/cjs/plugins/List/createListPlugin.js +0 -4
- package/dist/cjs/plugins/List/insertListBreak.js +4 -13
- package/dist/cjs/plugins/List/insertListFragment.js +5 -18
- package/dist/cjs/plugins/List/onKeyDownList.js +6 -8
- package/dist/cjs/plugins/List/transforms/insertListItem.js +2 -17
- package/dist/cjs/plugins/List/transforms/moveListItemDown.js +2 -8
- package/dist/cjs/plugins/List/transforms/moveListItems.js +2 -7
- package/dist/cjs/plugins/List/transforms/moveListItems.test.js +14 -15
- package/dist/cjs/plugins/List/transforms/toggleList.js +3 -8
- package/dist/cjs/plugins/List/transforms/toggleList.spec.js +28 -28
- package/dist/cjs/plugins/List/transforms/unwrapList.js +2 -7
- package/dist/cjs/plugins/List/utils.js +11 -12
- package/dist/cjs/plugins/List/withList.js +2 -6
- package/dist/cjs/plugins/Marks/Bold.js +7 -9
- package/dist/cjs/plugins/Marks/Code.js +7 -15
- package/dist/cjs/plugins/Marks/Italic.js +7 -9
- package/dist/cjs/plugins/Marks/Subscript.js +8 -10
- package/dist/cjs/plugins/Marks/Superscript.js +8 -10
- package/dist/cjs/plugins/Marks/Underline.js +4 -6
- package/dist/cjs/plugins/Marks/components/MarkToolbarButton.js +7 -9
- package/dist/cjs/plugins/Marks/helpers.js +5 -5
- package/dist/cjs/plugins/Normalizer/baseRules.js +0 -2
- package/dist/cjs/plugins/Normalizer/createNormalizerPlugin.test.js +12 -12
- package/dist/cjs/plugins/Normalizer/utils.js +3 -4
- package/dist/cjs/plugins/Normalizer/withNormalizer.js +3 -23
- package/dist/cjs/plugins/Paragraph/Paragraph.js +4 -6
- package/dist/cjs/plugins/Paragraph/__tests__/createParagraphPlugin.test.js +32 -32
- package/dist/cjs/plugins/Paragraph/createParagraphPlugin.js +2 -3
- package/dist/cjs/plugins/PasteHTML/createPasteHTMLPlugin.js +6 -9
- package/dist/cjs/plugins/PasteHTML/utils/__tests__/sanitizeHTML.test.js +0 -2
- package/dist/cjs/plugins/PasteHTML/utils/sanitizeAnchors.js +0 -9
- package/dist/cjs/plugins/PasteHTML/utils/sanitizeHTML.js +2 -17
- package/dist/cjs/plugins/PasteHTML/utils/sanitizeSheets.js +1 -13
- package/dist/cjs/plugins/Quote/__test__/createQuotePlugin.test.js +21 -21
- package/dist/cjs/plugins/Quote/components/Quote.js +4 -6
- package/dist/cjs/plugins/Quote/components/ToolbarQuoteButton.js +4 -6
- package/dist/cjs/plugins/Quote/createQuotePlugin.js +0 -1
- package/dist/cjs/plugins/Quote/toggleQuote.js +5 -5
- package/dist/cjs/plugins/Quote/withQuote.js +2 -4
- package/dist/cjs/plugins/SelectOnBackspace/createSelectOnBackspacePlugin.js +0 -1
- package/dist/cjs/plugins/Table/__tests__/createTablePlugin.test.js +22 -22
- package/dist/cjs/plugins/Table/__tests__/helpers.test.js +4 -4
- package/dist/cjs/plugins/Table/actions/addColumn.js +4 -5
- package/dist/cjs/plugins/Table/actions/addRow.js +3 -6
- package/dist/cjs/plugins/Table/components/Cell.js +5 -7
- package/dist/cjs/plugins/Table/components/HeaderCell.js +5 -7
- package/dist/cjs/plugins/Table/components/Row.js +4 -6
- package/dist/cjs/plugins/Table/components/Table.js +6 -8
- package/dist/cjs/plugins/Table/components/TableActions.js +16 -19
- package/dist/cjs/plugins/Table/components/ToolbarButton.js +4 -7
- package/dist/cjs/plugins/Table/createTablePlugin.js +1 -11
- package/dist/cjs/plugins/Table/helpers.js +12 -16
- package/dist/cjs/plugins/Table/insertTableFragment.js +2 -15
- package/dist/cjs/plugins/Table/onKeyDownTable.js +2 -11
- package/dist/cjs/plugins/Table/tableTracking.js +6 -6
- package/dist/cjs/plugins/Text/__tests__/createTextPlugin.test.js +17 -19
- package/dist/cjs/plugins/Text/createTextPlugin.js +5 -22
- package/dist/cjs/plugins/Tracking/createTrackingPlugin.js +4 -5
- package/dist/cjs/plugins/Tracking/utils.js +3 -6
- package/dist/cjs/plugins/Voids/createVoidsPlugin.js +0 -5
- package/dist/cjs/plugins/Voids/transformVoid.js +0 -1
- package/dist/cjs/plugins/index.js +3 -15
- package/dist/cjs/plugins/shared/EmbeddedBlockToolbarIcon.js +10 -12
- package/dist/cjs/plugins/shared/EmbeddedBlockUtil.js +6 -16
- package/dist/cjs/plugins/shared/EmbeddedInlineToolbarIcon.js +8 -10
- package/dist/cjs/plugins/shared/EmbeddedInlineUtil.js +5 -9
- package/dist/cjs/plugins/shared/FetchingWrappedAssetCard.js +11 -13
- package/dist/cjs/plugins/shared/FetchingWrappedEntryCard.js +12 -14
- package/dist/cjs/plugins/shared/FetchingWrappedResourceCard.js +11 -14
- package/dist/cjs/plugins/shared/LinkedBlockWrapper.js +4 -8
- package/dist/cjs/plugins/shared/LinkedInlineWrapper.js +6 -10
- package/dist/cjs/plugins/shared/ResourceNewBadge.js +3 -5
- package/dist/cjs/plugins/shared/ToolbarButton.js +6 -8
- package/dist/cjs/plugins/shared/__tests__/FetchingWrappedAssetCard.test.js +5 -10
- package/dist/cjs/plugins/shared/__tests__/FetchingWrappedEntryCard.test.js +6 -11
- package/dist/cjs/plugins/shared/__tests__/FetchingWrappedResourceCard.test.js +13 -15
- package/dist/cjs/plugins/shared/utils.js +1 -4
- package/dist/cjs/test-utils/assertOutput.js +0 -1
- package/dist/cjs/test-utils/hyperscript.d.js +0 -1
- package/dist/cjs/test-utils/randomId.js +1 -3
- package/dist/cjs/test-utils/validation.js +5 -8
- package/dist/esm/ContentfulEditorProvider.js +1 -4
- package/dist/esm/RichTextEditor.js +13 -13
- package/dist/esm/RichTextEditor.styles.js +0 -1
- package/dist/esm/SdkProvider.js +2 -2
- package/dist/esm/SyncEditorChanges.js +3 -18
- package/dist/esm/Toolbar/_tests_/toolbar.test.js +12 -12
- package/dist/esm/Toolbar/components/EmbedEntityWidget.js +7 -9
- package/dist/esm/Toolbar/components/EmbeddedEntityDropdownButton.js +6 -6
- package/dist/esm/Toolbar/components/StickyToolbarWrapper.js +1 -1
- package/dist/esm/Toolbar/index.js +27 -28
- package/dist/esm/__fixtures__/FakeSdk.js +3 -3
- package/dist/esm/constants/Schema.js +0 -1
- package/dist/esm/dialogs/HypelinkDialog/HyperlinkDialog.js +31 -34
- package/dist/esm/dialogs/openRichTextDialog.js +2 -2
- package/dist/esm/dialogs/renderRichTextDialog.js +2 -2
- package/dist/esm/helpers/__tests__/removeInternalMarks.test.js +10 -10
- package/dist/esm/helpers/callbacks.js +1 -1
- package/dist/esm/helpers/config.js +1 -9
- package/dist/esm/helpers/editor.js +6 -22
- package/dist/esm/helpers/extractNodes.js +1 -3
- package/dist/esm/helpers/formatDateAndTime.js +2 -11
- package/dist/esm/helpers/getAllowedResourcesForNodeType.js +2 -19
- package/dist/esm/helpers/getLinkedContentTypeIdsForNodeType.js +2 -26
- package/dist/esm/helpers/sdkNavigatorSlideIn.js +6 -20
- package/dist/esm/helpers/sdkNavigatorSlideIn.spec.js +0 -1
- package/dist/esm/helpers/toSlateValue.js +3 -17
- package/dist/esm/helpers/validations.js +1 -5
- package/dist/esm/internal/misc.js +2 -23
- package/dist/esm/internal/queries.js +2 -11
- package/dist/esm/internal/transforms.js +3 -14
- package/dist/esm/internal/types/editor.js +1 -3
- package/dist/esm/plugins/Break/createExitBreakPlugin.test.js +3 -4
- package/dist/esm/plugins/Break/createResetNodePlugin.js +0 -1
- package/dist/esm/plugins/Break/createSoftBreakPlugin.test.js +3 -3
- package/dist/esm/plugins/CommandPalette/components/CommandList.js +30 -30
- package/dist/esm/plugins/CommandPalette/components/CommandPrompt.js +2 -2
- package/dist/esm/plugins/CommandPalette/createCommandPalettePlugin.js +1 -11
- package/dist/esm/plugins/CommandPalette/hooks/useCommandList.js +0 -2
- package/dist/esm/plugins/CommandPalette/onKeyDown.js +0 -5
- package/dist/esm/plugins/CommandPalette/onKeyDown.spec.js +2 -2
- package/dist/esm/plugins/CommandPalette/useCommands.js +3 -3
- package/dist/esm/plugins/CommandPalette/utils/fetchEntries.js +0 -2
- package/dist/esm/plugins/CommandPalette/utils/trimLeadingSlash.js +1 -6
- package/dist/esm/plugins/DragAndDrop/index.js +1 -9
- package/dist/esm/plugins/EmbeddedEntityBlock/LinkedEntityBlock.js +6 -6
- package/dist/esm/plugins/EmbeddedEntityInline/FetchingWrappedInlineEntryCard.js +14 -14
- package/dist/esm/plugins/EmbeddedEntityInline/LinkedEntityInline.js +5 -5
- package/dist/esm/plugins/EmbeddedResourceBlock/LinkedResourceBlock.js +4 -4
- package/dist/esm/plugins/EmbeddedResourceInline/FetchingWrappedResourceInlineCard.js +9 -9
- package/dist/esm/plugins/EmbeddedResourceInline/LinkedResourceInline.js +4 -4
- package/dist/esm/plugins/Heading/__tests__/createHeadingPlugin.test.js +32 -32
- package/dist/esm/plugins/Heading/components/Heading.js +7 -8
- package/dist/esm/plugins/Heading/components/ToolbarHeadingButton.js +26 -18
- package/dist/esm/plugins/Heading/createHeadingPlugin.js +1 -6
- package/dist/esm/plugins/Hr/index.js +5 -8
- package/dist/esm/plugins/Hyperlink/HyperlinkModal.js +23 -25
- package/dist/esm/plugins/Hyperlink/__tests__/createHyperlinkPlugin.test.js +8 -8
- package/dist/esm/plugins/Hyperlink/components/EntityHyperlink.js +6 -6
- package/dist/esm/plugins/Hyperlink/components/LinkPopover.js +15 -19
- package/dist/esm/plugins/Hyperlink/components/ResourceHyperlink.js +6 -6
- package/dist/esm/plugins/Hyperlink/components/ToolbarHyperlinkButton.js +2 -2
- package/dist/esm/plugins/Hyperlink/components/UrlHyperlink.js +4 -4
- package/dist/esm/plugins/Hyperlink/createHyperlinkPlugin.js +1 -5
- package/dist/esm/plugins/Hyperlink/useEntityInfo.js +3 -6
- package/dist/esm/plugins/Hyperlink/useResourceEntityInfo.js +2 -2
- package/dist/esm/plugins/Hyperlink/utils.js +1 -1
- package/dist/esm/plugins/List/__tests__/createListPlugin.test.js +13 -13
- package/dist/esm/plugins/List/__tests__/insertListBreak.test.js +25 -29
- package/dist/esm/plugins/List/__tests__/insertListFragment.test.js +22 -22
- package/dist/esm/plugins/List/components/List.js +1 -1
- package/dist/esm/plugins/List/components/ListItem.js +1 -1
- package/dist/esm/plugins/List/components/ToolbarListButton.js +3 -3
- package/dist/esm/plugins/List/createListPlugin.js +0 -4
- package/dist/esm/plugins/List/insertListBreak.js +4 -13
- package/dist/esm/plugins/List/insertListFragment.js +5 -18
- package/dist/esm/plugins/List/onKeyDownList.js +5 -7
- package/dist/esm/plugins/List/transforms/insertListItem.js +3 -20
- package/dist/esm/plugins/List/transforms/moveListItemDown.js +2 -8
- package/dist/esm/plugins/List/transforms/moveListItems.js +2 -7
- package/dist/esm/plugins/List/transforms/moveListItems.test.js +14 -15
- package/dist/esm/plugins/List/transforms/toggleList.js +3 -8
- package/dist/esm/plugins/List/transforms/toggleList.spec.js +28 -28
- package/dist/esm/plugins/List/transforms/unwrapList.js +2 -7
- package/dist/esm/plugins/List/utils.js +2 -7
- package/dist/esm/plugins/List/withList.js +2 -6
- package/dist/esm/plugins/Marks/Bold.js +2 -2
- package/dist/esm/plugins/Marks/Code.js +2 -8
- package/dist/esm/plugins/Marks/Italic.js +2 -2
- package/dist/esm/plugins/Marks/Subscript.js +2 -2
- package/dist/esm/plugins/Marks/Superscript.js +2 -2
- package/dist/esm/plugins/Marks/Underline.js +2 -2
- package/dist/esm/plugins/Marks/components/MarkToolbarButton.js +4 -4
- package/dist/esm/plugins/Marks/helpers.js +1 -1
- package/dist/esm/plugins/Normalizer/baseRules.js +0 -4
- package/dist/esm/plugins/Normalizer/createNormalizerPlugin.test.js +12 -12
- package/dist/esm/plugins/Normalizer/utils.js +0 -1
- package/dist/esm/plugins/Normalizer/withNormalizer.js +2 -22
- package/dist/esm/plugins/Paragraph/Paragraph.js +1 -1
- package/dist/esm/plugins/Paragraph/__tests__/createParagraphPlugin.test.js +32 -32
- package/dist/esm/plugins/Paragraph/createParagraphPlugin.js +1 -2
- package/dist/esm/plugins/PasteHTML/createPasteHTMLPlugin.js +3 -9
- package/dist/esm/plugins/PasteHTML/utils/__tests__/sanitizeHTML.test.js +0 -2
- package/dist/esm/plugins/PasteHTML/utils/sanitizeAnchors.js +1 -27
- package/dist/esm/plugins/PasteHTML/utils/sanitizeHTML.js +2 -17
- package/dist/esm/plugins/PasteHTML/utils/sanitizeSheets.js +1 -13
- package/dist/esm/plugins/Quote/__test__/createQuotePlugin.test.js +21 -21
- package/dist/esm/plugins/Quote/components/Quote.js +1 -1
- package/dist/esm/plugins/Quote/components/ToolbarQuoteButton.js +2 -2
- package/dist/esm/plugins/Quote/createQuotePlugin.js +0 -1
- package/dist/esm/plugins/Quote/shouldResetQuote.js +1 -6
- package/dist/esm/plugins/Quote/toggleQuote.js +1 -1
- package/dist/esm/plugins/Quote/withQuote.js +2 -4
- package/dist/esm/plugins/SelectOnBackspace/createSelectOnBackspacePlugin.js +0 -1
- package/dist/esm/plugins/Table/__tests__/createTablePlugin.test.js +22 -22
- package/dist/esm/plugins/Table/__tests__/helpers.test.js +4 -4
- package/dist/esm/plugins/Table/actions/addColumn.js +1 -2
- package/dist/esm/plugins/Table/actions/addRow.js +0 -3
- package/dist/esm/plugins/Table/components/Cell.js +2 -2
- package/dist/esm/plugins/Table/components/HeaderCell.js +2 -2
- package/dist/esm/plugins/Table/components/Row.js +1 -1
- package/dist/esm/plugins/Table/components/Table.js +3 -3
- package/dist/esm/plugins/Table/components/TableActions.js +11 -12
- package/dist/esm/plugins/Table/components/ToolbarButton.js +2 -3
- package/dist/esm/plugins/Table/createTablePlugin.js +1 -11
- package/dist/esm/plugins/Table/helpers.js +1 -10
- package/dist/esm/plugins/Table/insertTableFragment.js +2 -15
- package/dist/esm/plugins/Table/onKeyDownTable.js +2 -11
- package/dist/esm/plugins/Table/tableTracking.js +6 -6
- package/dist/esm/plugins/Text/__tests__/createTextPlugin.test.js +17 -19
- package/dist/esm/plugins/Text/createTextPlugin.js +5 -22
- package/dist/esm/plugins/Tracking/createTrackingPlugin.js +1 -2
- package/dist/esm/plugins/Tracking/utils.js +0 -1
- package/dist/esm/plugins/Voids/createVoidsPlugin.js +0 -5
- package/dist/esm/plugins/Voids/transformVoid.js +1 -4
- package/dist/esm/plugins/index.js +0 -12
- package/dist/esm/plugins/shared/EmbeddedBlockToolbarIcon.js +5 -5
- package/dist/esm/plugins/shared/EmbeddedBlockUtil.js +5 -15
- package/dist/esm/plugins/shared/EmbeddedInlineToolbarIcon.js +5 -5
- package/dist/esm/plugins/shared/EmbeddedInlineUtil.js +4 -8
- package/dist/esm/plugins/shared/FetchingWrappedAssetCard.js +8 -8
- package/dist/esm/plugins/shared/FetchingWrappedEntryCard.js +9 -9
- package/dist/esm/plugins/shared/FetchingWrappedResourceCard.js +8 -9
- package/dist/esm/plugins/shared/LinkedBlockWrapper.js +3 -7
- package/dist/esm/plugins/shared/LinkedInlineWrapper.js +3 -5
- package/dist/esm/plugins/shared/ResourceNewBadge.js +1 -1
- package/dist/esm/plugins/shared/ToolbarButton.js +3 -3
- package/dist/esm/plugins/shared/__tests__/FetchingWrappedAssetCard.test.js +2 -5
- package/dist/esm/plugins/shared/__tests__/FetchingWrappedEntryCard.test.js +2 -5
- package/dist/esm/plugins/shared/__tests__/FetchingWrappedResourceCard.test.js +8 -8
- package/dist/esm/plugins/shared/utils.js +1 -4
- package/dist/esm/test-utils/assertOutput.js +0 -1
- package/dist/esm/test-utils/hyperscript.d.js +0 -1
- package/dist/esm/test-utils/jsx.js +1 -5
- package/dist/esm/test-utils/randomId.js +1 -3
- package/dist/esm/test-utils/setEmptyDataAttribute.js +1 -4
- package/dist/esm/test-utils/validation.js +4 -7
- package/dist/types/RichTextEditor.d.ts +2 -3
- package/dist/types/Toolbar/components/EmbedEntityWidget.d.ts +1 -2
- package/dist/types/Toolbar/components/EmbeddedEntityDropdownButton.d.ts +1 -1
- package/dist/types/Toolbar/components/StickyToolbarWrapper.d.ts +2 -2
- package/dist/types/Toolbar/index.d.ts +1 -2
- package/dist/types/dialogs/HypelinkDialog/HyperlinkDialog.d.ts +4 -4
- package/dist/types/dialogs/renderRichTextDialog.d.ts +1 -2
- package/dist/types/plugins/CommandPalette/components/CommandList.d.ts +1 -2
- package/dist/types/plugins/CommandPalette/components/CommandPrompt.d.ts +1 -2
- package/dist/types/plugins/EmbeddedEntityBlock/LinkedEntityBlock.d.ts +1 -2
- package/dist/types/plugins/EmbeddedEntityInline/FetchingWrappedInlineEntryCard.d.ts +1 -1
- package/dist/types/plugins/EmbeddedEntityInline/LinkedEntityInline.d.ts +1 -2
- package/dist/types/plugins/EmbeddedResourceBlock/LinkedResourceBlock.d.ts +1 -2
- package/dist/types/plugins/EmbeddedResourceInline/FetchingWrappedResourceInlineCard.d.ts +1 -1
- package/dist/types/plugins/EmbeddedResourceInline/LinkedResourceInline.d.ts +1 -2
- package/dist/types/plugins/Heading/components/Heading.d.ts +6 -6
- package/dist/types/plugins/Heading/components/ToolbarHeadingButton.d.ts +1 -2
- package/dist/types/plugins/Hr/index.d.ts +2 -2
- package/dist/types/plugins/Hyperlink/HyperlinkModal.d.ts +1 -2
- package/dist/types/plugins/Hyperlink/components/EntityHyperlink.d.ts +1 -2
- package/dist/types/plugins/Hyperlink/components/LinkPopover.d.ts +1 -1
- package/dist/types/plugins/Hyperlink/components/ResourceHyperlink.d.ts +1 -2
- package/dist/types/plugins/Hyperlink/components/ToolbarHyperlinkButton.d.ts +1 -2
- package/dist/types/plugins/Hyperlink/components/UrlHyperlink.d.ts +1 -2
- package/dist/types/plugins/List/components/List.d.ts +2 -3
- package/dist/types/plugins/List/components/ListItem.d.ts +1 -2
- package/dist/types/plugins/List/components/ToolbarListButton.d.ts +1 -2
- package/dist/types/plugins/Marks/Bold.d.ts +2 -3
- package/dist/types/plugins/Marks/Code.d.ts +3 -4
- package/dist/types/plugins/Marks/Italic.d.ts +2 -3
- package/dist/types/plugins/Marks/Subscript.d.ts +3 -4
- package/dist/types/plugins/Marks/Superscript.d.ts +3 -4
- package/dist/types/plugins/Marks/Underline.d.ts +2 -3
- package/dist/types/plugins/Marks/components/MarkToolbarButton.d.ts +1 -1
- package/dist/types/plugins/Paragraph/Paragraph.d.ts +1 -2
- package/dist/types/plugins/Quote/components/Quote.d.ts +1 -2
- package/dist/types/plugins/Quote/components/ToolbarQuoteButton.d.ts +1 -2
- package/dist/types/plugins/Table/components/Cell.d.ts +1 -2
- package/dist/types/plugins/Table/components/HeaderCell.d.ts +1 -2
- package/dist/types/plugins/Table/components/Row.d.ts +1 -2
- package/dist/types/plugins/Table/components/Table.d.ts +1 -2
- package/dist/types/plugins/Table/components/TableActions.d.ts +1 -2
- package/dist/types/plugins/Table/components/ToolbarButton.d.ts +1 -2
- package/dist/types/plugins/shared/EmbeddedBlockToolbarIcon.d.ts +1 -2
- package/dist/types/plugins/shared/EmbeddedInlineToolbarIcon.d.ts +1 -2
- package/dist/types/plugins/shared/FetchingWrappedAssetCard.d.ts +1 -2
- package/dist/types/plugins/shared/FetchingWrappedEntryCard.d.ts +1 -2
- package/dist/types/plugins/shared/FetchingWrappedResourceCard.d.ts +1 -2
- package/dist/types/plugins/shared/LinkedBlockWrapper.d.ts +1 -1
- package/dist/types/plugins/shared/LinkedInlineWrapper.d.ts +1 -1
- package/dist/types/plugins/shared/ResourceNewBadge.d.ts +1 -2
- package/dist/types/plugins/shared/ToolbarButton.d.ts +1 -2
- package/package.json +8 -5
|
@@ -12,46 +12,20 @@ const wrapSpaceAround = (el)=>{
|
|
|
12
12
|
}
|
|
13
13
|
};
|
|
14
14
|
const unwrap = (el)=>{
|
|
15
|
-
// add a spacer to avoid the content being cramped together with
|
|
16
|
-
// the element siblings after it's unwrapped. It may not always
|
|
17
|
-
// be desired but it should be easy to adjust by the end user.
|
|
18
15
|
wrapSpaceAround(el);
|
|
19
16
|
el.replaceWith(...Array.from(el.childNodes));
|
|
20
17
|
};
|
|
21
|
-
|
|
22
|
-
* In HTML it's a valid structure to have a block element inside a link
|
|
23
|
-
*
|
|
24
|
-
* e.g: <a href="..."><h1> My link </h1><h2>is fancy</h2></a>
|
|
25
|
-
*
|
|
26
|
-
* However, that's not supported in Slate. There are generally two ways to
|
|
27
|
-
* handle this:
|
|
28
|
-
*
|
|
29
|
-
* a) Unwrap inner blocks while preserving the content.
|
|
30
|
-
* e.g. <a href="...">My link is fancy</a>
|
|
31
|
-
*
|
|
32
|
-
* b) Break the link into multiple elements with having each block
|
|
33
|
-
* element as a wrapper for an anchor with the same URL
|
|
34
|
-
* e.g. <h1><a href="...">My link</a></h1>
|
|
35
|
-
* and <h2><a href="...">is fancy</a></h2>
|
|
36
|
-
*
|
|
37
|
-
* We take approach (a) in here.
|
|
38
|
-
*/ export const sanitizeAnchors = (doc)=>{
|
|
18
|
+
export const sanitizeAnchors = (doc)=>{
|
|
39
19
|
const unsupportedTagSelector = `a :not(${[
|
|
40
|
-
// Bold
|
|
41
20
|
'b',
|
|
42
21
|
'strong',
|
|
43
|
-
// Code
|
|
44
22
|
'code',
|
|
45
23
|
'pre',
|
|
46
|
-
// Italic
|
|
47
24
|
'em',
|
|
48
25
|
'i',
|
|
49
|
-
// Super/subscript
|
|
50
26
|
'sub',
|
|
51
27
|
'sup',
|
|
52
|
-
// Underline
|
|
53
28
|
'u',
|
|
54
|
-
// Other
|
|
55
29
|
'span'
|
|
56
30
|
].join(',')})`;
|
|
57
31
|
doc.querySelectorAll(unsupportedTagSelector).forEach(unwrap);
|
|
@@ -1,20 +1,15 @@
|
|
|
1
1
|
import { sanitizeAnchors } from './sanitizeAnchors';
|
|
2
2
|
import { sanitizeSheets } from './sanitizeSheets';
|
|
3
|
-
|
|
4
|
-
* Remove all <style> tags
|
|
5
|
-
*/ const stripStyleTags = (doc)=>{
|
|
3
|
+
const stripStyleTags = (doc)=>{
|
|
6
4
|
doc.querySelectorAll('style').forEach((e)=>{
|
|
7
5
|
e.remove();
|
|
8
6
|
});
|
|
9
7
|
return doc;
|
|
10
8
|
};
|
|
11
|
-
|
|
12
|
-
* Remove all <meta /> tags
|
|
13
|
-
*/ const stripMetaTags = (doc)=>{
|
|
9
|
+
const stripMetaTags = (doc)=>{
|
|
14
10
|
doc.querySelectorAll('meta').forEach((el)=>el.remove());
|
|
15
11
|
return doc;
|
|
16
12
|
};
|
|
17
|
-
// Attention: Order is important
|
|
18
13
|
const transformers = [
|
|
19
14
|
stripStyleTags,
|
|
20
15
|
sanitizeSheets,
|
|
@@ -29,27 +24,17 @@ function removeTableWrappers(table) {
|
|
|
29
24
|
}
|
|
30
25
|
}
|
|
31
26
|
export const sanitizeHTML = (html)=>{
|
|
32
|
-
// Parse the HTML string and pipe it through our transformers
|
|
33
27
|
const doc = transformers.reduce((value, cb)=>cb(value), new DOMParser().parseFromString(html, 'text/html'));
|
|
34
28
|
const replacers = [
|
|
35
|
-
// remove whitespaces between some tags, as this can lead to unwanted behaviour:
|
|
36
|
-
// - table -> empty table cells
|
|
37
|
-
// - list -> leading whitespaces
|
|
38
29
|
(innerHtml)=>innerHtml.replace(/<(\/)?(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, '<$1$2$3><$4$5'),
|
|
39
|
-
// remove empty elements before the ending block element tag
|
|
40
30
|
(innerHtml)=>innerHtml.replace(/(?:<[^>^/]*>)\s*(?:<\/[^>]*>)<\/(div|p|table|thead|tbody|tr|td|th|caption|col|colgroup|ol|ul|li)/g, '</$1'),
|
|
41
|
-
// remove whitespaces before the ending block element tag
|
|
42
31
|
(innerHTML)=>innerHTML.replace(/\s*<\/(div|p|table|thead|tbody|tr|td|th|caption|col|colgroup|ol|ul|li)/g, '</$1')
|
|
43
32
|
];
|
|
44
33
|
let previous;
|
|
45
34
|
do {
|
|
46
|
-
// save previous first before doing modifications
|
|
47
35
|
previous = doc.body.innerHTML;
|
|
48
36
|
doc.body.innerHTML = replacers.reduce((innerHTML, replacer)=>replacer(innerHTML), doc.body.innerHTML);
|
|
49
37
|
}while (doc.body.innerHTML !== previous)
|
|
50
|
-
// Removing the div container wrappers from tables
|
|
51
|
-
// The div container including attributes and possible linebreaks inside wil be removed
|
|
52
|
-
// TODO: can be removed with plate >= 20
|
|
53
38
|
doc.querySelectorAll('table').forEach(removeTableWrappers);
|
|
54
39
|
return doc.body.innerHTML;
|
|
55
40
|
};
|
|
@@ -1,12 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
* Remove empty spreadsheets columns/rows for performance reasons.
|
|
3
|
-
*/ export const sanitizeSheets = (doc)=>{
|
|
4
|
-
// Ensure we are inside a spreadsheet i.e. not pasting
|
|
5
|
-
// a table from within the editor
|
|
1
|
+
export const sanitizeSheets = (doc)=>{
|
|
6
2
|
const supported = [
|
|
7
|
-
// Google Sheets
|
|
8
3
|
'google-sheets-html-origin',
|
|
9
|
-
// MS Excel
|
|
10
4
|
'meta[content="Excel.Sheet"]',
|
|
11
5
|
'meta[content*="Microsoft Excel"]'
|
|
12
6
|
];
|
|
@@ -18,23 +12,17 @@
|
|
|
18
12
|
};
|
|
19
13
|
const tables = Array.from(doc.querySelectorAll('table'));
|
|
20
14
|
for (const table of tables){
|
|
21
|
-
// Remove empty columns first!
|
|
22
15
|
table.querySelectorAll('tr').forEach((row)=>{
|
|
23
16
|
isEmptyElement(row) && row.remove();
|
|
24
17
|
});
|
|
25
18
|
const rows = Array.from(table.querySelectorAll('tr'));
|
|
26
|
-
// CSS :nth-of-type index starts from 1
|
|
27
19
|
let colIndex = 1;
|
|
28
|
-
// eslint-disable-next-line -- TODO: explain this disable
|
|
29
20
|
while(true){
|
|
30
21
|
const cells = rows.map((row)=>row.querySelector(`th:nth-of-type(${colIndex}), td:nth-of-type(${colIndex})`)).filter((cell)=>!!cell);
|
|
31
|
-
// No more columns
|
|
32
22
|
if (cells.length === 0) {
|
|
33
23
|
break;
|
|
34
24
|
}
|
|
35
25
|
const isEmpty = cells.every((cell)=>isEmptyElement(cell));
|
|
36
|
-
// Don't increment on deletion because columns will be shifted
|
|
37
|
-
// left anyway. Incrementing may result in skipping
|
|
38
26
|
if (!isEmpty) {
|
|
39
27
|
colIndex += 1;
|
|
40
28
|
continue;
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
|
|
1
|
+
import { assertOutput, jsx } from '../../../test-utils';
|
|
2
2
|
describe('normalization', ()=>{
|
|
3
3
|
it('can contain inline entries & hyperlinks', ()=>{
|
|
4
|
-
const input =
|
|
4
|
+
const input = jsx("editor", null, jsx("hquote", null, jsx("hp", null, "some text before", jsx("hinline", {
|
|
5
5
|
type: "Entry",
|
|
6
6
|
id: "inline-entry"
|
|
7
|
-
}),
|
|
7
|
+
}), jsx("hlink", {
|
|
8
8
|
uri: "https://contentful.com"
|
|
9
|
-
}),
|
|
9
|
+
}), jsx("hlink", {
|
|
10
10
|
entry: "entry-id"
|
|
11
|
-
}),
|
|
11
|
+
}), jsx("hlink", {
|
|
12
12
|
resource: "resource-urn"
|
|
13
|
-
}),
|
|
13
|
+
}), jsx("hlink", {
|
|
14
14
|
asset: "asset-id"
|
|
15
15
|
}), "some text after")));
|
|
16
16
|
assertOutput({
|
|
@@ -19,16 +19,16 @@ describe('normalization', ()=>{
|
|
|
19
19
|
});
|
|
20
20
|
});
|
|
21
21
|
it('unwraps nested quotes', ()=>{
|
|
22
|
-
const input =
|
|
22
|
+
const input = jsx("editor", null, jsx("hquote", null, jsx("hp", null, "some"), jsx("hquote", null, jsx("hp", null, jsx("htext", {
|
|
23
23
|
bold: true,
|
|
24
24
|
italic: true,
|
|
25
25
|
underline: true
|
|
26
|
-
}, "paragraph"))),
|
|
27
|
-
const expected =
|
|
26
|
+
}, "paragraph"))), jsx("hp", null, "text")));
|
|
27
|
+
const expected = jsx("editor", null, jsx("hquote", null, jsx("hp", null, "some"), jsx("hp", null, jsx("htext", {
|
|
28
28
|
bold: true,
|
|
29
29
|
italic: true,
|
|
30
30
|
underline: true
|
|
31
|
-
}, "paragraph")),
|
|
31
|
+
}, "paragraph")), jsx("hp", null, "text")), jsx("hp", null, jsx("htext", null)));
|
|
32
32
|
assertOutput({
|
|
33
33
|
input,
|
|
34
34
|
expected
|
|
@@ -36,37 +36,37 @@ describe('normalization', ()=>{
|
|
|
36
36
|
});
|
|
37
37
|
describe('lifts other invalid children', ()=>{
|
|
38
38
|
it('block void elements', ()=>{
|
|
39
|
-
const input =
|
|
39
|
+
const input = jsx("editor", null, jsx("hquote", null, jsx("hp", null, "this"), jsx("hembed", {
|
|
40
40
|
type: "Asset",
|
|
41
41
|
id: "1"
|
|
42
|
-
}),
|
|
42
|
+
}), jsx("hp", null, "is"), jsx("hembed", {
|
|
43
43
|
type: "Entry",
|
|
44
44
|
id: "1"
|
|
45
|
-
}),
|
|
46
|
-
const expected =
|
|
45
|
+
}), jsx("hp", null, "a blockquote"), jsx("hhr", null), jsx("hh1", null, "Heading 1")));
|
|
46
|
+
const expected = jsx("editor", null, jsx("hquote", null, jsx("hp", null, "this")), jsx("hembed", {
|
|
47
47
|
type: "Asset",
|
|
48
48
|
id: "1"
|
|
49
|
-
}),
|
|
49
|
+
}), jsx("hquote", null, jsx("hp", null, "is")), jsx("hembed", {
|
|
50
50
|
type: "Entry",
|
|
51
51
|
id: "1"
|
|
52
|
-
}),
|
|
52
|
+
}), jsx("hquote", null, jsx("hp", null, "a blockquote")), jsx("hhr", null), jsx("hh1", null, "Heading 1"), jsx("hp", null, jsx("text", null)));
|
|
53
53
|
assertOutput({
|
|
54
54
|
input,
|
|
55
55
|
expected
|
|
56
56
|
});
|
|
57
57
|
});
|
|
58
58
|
it('handles lists', ()=>{
|
|
59
|
-
const input =
|
|
60
|
-
const expected =
|
|
59
|
+
const input = jsx("editor", null, jsx("hquote", null, jsx("hp", null, "some", jsx("hul", null, jsx("hli", null, jsx("hp", null, "list item"))), "text")));
|
|
60
|
+
const expected = jsx("editor", null, jsx("hquote", null, jsx("hp", null, "some")), jsx("hul", null, jsx("hli", null, jsx("hp", null, "list item"))), jsx("hquote", null, jsx("hp", null, "text")), jsx("hp", null, jsx("text", null)));
|
|
61
61
|
assertOutput({
|
|
62
62
|
input,
|
|
63
63
|
expected
|
|
64
64
|
});
|
|
65
65
|
});
|
|
66
66
|
it('handles tables', ()=>{
|
|
67
|
-
const table =
|
|
68
|
-
const input =
|
|
69
|
-
const expected =
|
|
67
|
+
const table = jsx("htable", null, jsx("htr", null, jsx("htd", null, jsx("hp", null, "cell 1")), jsx("htd", null, jsx("hp", null, "cell 2"))));
|
|
68
|
+
const input = jsx("editor", null, jsx("hquote", null, jsx("hp", null, "some", table, "text")));
|
|
69
|
+
const expected = jsx("editor", null, jsx("hquote", null, jsx("hp", null, "some")), table, jsx("hquote", null, jsx("hp", null, "text")), jsx("hp", null, jsx("text", null)));
|
|
70
70
|
assertOutput({
|
|
71
71
|
input,
|
|
72
72
|
expected
|
|
@@ -13,11 +13,11 @@ export function ToolbarQuoteButton(props) {
|
|
|
13
13
|
focus(editor);
|
|
14
14
|
}
|
|
15
15
|
if (!editor) return null;
|
|
16
|
-
return
|
|
16
|
+
return React.createElement(ToolbarButton, {
|
|
17
17
|
title: "Blockquote",
|
|
18
18
|
onClick: handleOnClick,
|
|
19
19
|
testId: "quote-toolbar-button",
|
|
20
20
|
isDisabled: props.isDisabled,
|
|
21
21
|
isActive: isBlockSelected(editor, BLOCKS.QUOTE)
|
|
22
|
-
},
|
|
22
|
+
}, React.createElement(QuoteIcon, null));
|
|
23
23
|
}
|
|
@@ -1,12 +1,7 @@
|
|
|
1
1
|
import { BLOCKS, TEXT_CONTAINERS } from '@contentful/rich-text-types';
|
|
2
2
|
import { isLastChild, hasSingleChild } from '@udecode/plate-common';
|
|
3
3
|
import { getAboveNode, getBlockAbove, isAncestorEmpty } from '../../internal/queries';
|
|
4
|
-
|
|
5
|
-
* Returns true if we are:
|
|
6
|
-
* 1) Inside a blockquote
|
|
7
|
-
* 2) With no only one child paragraph/heading and
|
|
8
|
-
* 3) that child is empty
|
|
9
|
-
*/ export const shouldResetQuoteOnBackspace = (editor)=>{
|
|
4
|
+
export const shouldResetQuoteOnBackspace = (editor)=>{
|
|
10
5
|
const container = getAboveNode(editor, {
|
|
11
6
|
match: {
|
|
12
7
|
type: TEXT_CONTAINERS
|
|
@@ -25,7 +25,7 @@ export function toggleQuote(editor, logAction) {
|
|
|
25
25
|
});
|
|
26
26
|
}
|
|
27
27
|
export const onKeyDownToggleQuote = (editor, plugin)=>(event)=>{
|
|
28
|
-
const { hotkey
|
|
28
|
+
const { hotkey } = plugin.options;
|
|
29
29
|
if (hotkey && isHotkey(hotkey, event)) {
|
|
30
30
|
event.preventDefault();
|
|
31
31
|
toggleQuote(editor, editor.tracking.onShortcutAction);
|
|
@@ -3,7 +3,7 @@ import { Element, Point } from 'slate';
|
|
|
3
3
|
import { getAboveNode, getText } from '../../internal/queries';
|
|
4
4
|
import { deleteText, insertNodes } from '../../internal/transforms';
|
|
5
5
|
export const withQuote = (editor)=>{
|
|
6
|
-
const { insertFragment
|
|
6
|
+
const { insertFragment } = editor;
|
|
7
7
|
editor.insertFragment = (fragment)=>{
|
|
8
8
|
const startingNode = fragment.length && fragment[0];
|
|
9
9
|
const startsWithBlockquote = Element.isElement(startingNode) && startingNode.type === BLOCKS.QUOTE;
|
|
@@ -14,15 +14,13 @@ export const withQuote = (editor)=>{
|
|
|
14
14
|
});
|
|
15
15
|
const containerIsNotEmpty = containerEntry && getText(editor, containerEntry[1]) !== '';
|
|
16
16
|
if (startsWithBlockquote && containerIsNotEmpty) {
|
|
17
|
-
const { selection
|
|
17
|
+
const { selection } = editor;
|
|
18
18
|
const isContentSelected = (selection)=>!!selection && Point.compare(selection.anchor, selection.focus) !== 0;
|
|
19
|
-
// if something is selected (highlighted) we replace the selection
|
|
20
19
|
if (isContentSelected(selection)) {
|
|
21
20
|
deleteText(editor, {
|
|
22
21
|
at: selection
|
|
23
22
|
});
|
|
24
23
|
}
|
|
25
|
-
// get the cursor entry again, it may be different after deletion
|
|
26
24
|
const containerEntry = getAboveNode(editor, {
|
|
27
25
|
match: {
|
|
28
26
|
type: TEXT_CONTAINERS
|
|
@@ -3,7 +3,6 @@ import { createSelectOnBackspacePlugin as createDefaultSelectPlugin } from '@ude
|
|
|
3
3
|
export const createSelectOnBackspacePlugin = ()=>createDefaultSelectPlugin({
|
|
4
4
|
options: {
|
|
5
5
|
query: {
|
|
6
|
-
// `createTextPlugin` is taking care of block elements
|
|
7
6
|
allow: [
|
|
8
7
|
INLINES.EMBEDDED_ENTRY
|
|
9
8
|
]
|
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
|
|
1
|
+
import { assertOutput, jsx } from '../../../test-utils';
|
|
2
2
|
describe('normalization', ()=>{
|
|
3
3
|
describe('Table', ()=>{
|
|
4
4
|
it('removes empty table nodes', ()=>{
|
|
5
|
-
const input =
|
|
6
|
-
const expected =
|
|
5
|
+
const input = jsx("editor", null, jsx("htable", null));
|
|
6
|
+
const expected = jsx("editor", null, jsx("hp", null, jsx("text", null)));
|
|
7
7
|
assertOutput({
|
|
8
8
|
input,
|
|
9
9
|
expected
|
|
10
10
|
});
|
|
11
11
|
});
|
|
12
12
|
it('moves tables to the root level except nested tables', ()=>{
|
|
13
|
-
const table =
|
|
14
|
-
const input =
|
|
15
|
-
const expected =
|
|
13
|
+
const table = jsx("htable", null, jsx("htr", null, jsx("htd", null, jsx("hp", null, "Cell 1")), jsx("htd", null, jsx("hp", null, "Cell 2"))));
|
|
14
|
+
const input = jsx("editor", null, jsx("hp", null, "hello", table), jsx("hquote", null, jsx("hp", null, "quote", table)), jsx("hul", null, jsx("hli", null, jsx("hp", null, "item", table))), jsx("htable", null, jsx("htr", null, jsx("htd", null, jsx("hp", null, "cell with table: ", table)))));
|
|
15
|
+
const expected = jsx("editor", null, jsx("hp", null, "hello"), table, jsx("hquote", null, jsx("hp", null, "quote")), table, jsx("hul", null, jsx("hli", null, jsx("hp", null, "item"))), table, jsx("htable", null, jsx("htr", null, jsx("htd", null, jsx("hp", null, "cell with table: "), jsx("hp", null, "Cell 1"), jsx("hp", null, "Cell 2")))), jsx("hp", null, jsx("htext", null)));
|
|
16
16
|
assertOutput({
|
|
17
17
|
input,
|
|
18
18
|
expected
|
|
19
19
|
});
|
|
20
20
|
});
|
|
21
21
|
it('removes invalid children', ()=>{
|
|
22
|
-
const input =
|
|
23
|
-
const expected =
|
|
22
|
+
const input = jsx("editor", null, jsx("htable", null, jsx("htr", null, jsx("htd", null, jsx("hp", null, "Cell 1")), jsx("htd", null, jsx("hp", null, "Cell 2"))), jsx("htd", null, "invalid cell"), "invalid text"), jsx("hp", null));
|
|
23
|
+
const expected = jsx("editor", null, jsx("htable", null, jsx("htr", null, jsx("htd", null, jsx("hp", null, "Cell 1")), jsx("htd", null, jsx("hp", null, "Cell 2")))), jsx("hp", null, jsx("htext", null)));
|
|
24
24
|
assertOutput({
|
|
25
25
|
input,
|
|
26
26
|
expected
|
|
@@ -29,22 +29,22 @@ describe('normalization', ()=>{
|
|
|
29
29
|
});
|
|
30
30
|
describe('Table cell', ()=>{
|
|
31
31
|
it('converts invalid children to paragraphs', ()=>{
|
|
32
|
-
const input =
|
|
32
|
+
const input = jsx("editor", null, jsx("htable", null, jsx("htr", null, jsx("htd", null, jsx("hp", null, "Cell 1")), jsx("htd", null, jsx("hp", null, "Cell 2"), jsx("hquote", null, jsx("hp", null, jsx("htext", {
|
|
33
33
|
bold: true,
|
|
34
34
|
italic: true,
|
|
35
35
|
underline: true
|
|
36
|
-
}, "quote"),
|
|
36
|
+
}, "quote"), jsx("hinline", {
|
|
37
37
|
type: "Entry",
|
|
38
38
|
id: "entry-id"
|
|
39
|
-
})))))),
|
|
40
|
-
const expected =
|
|
39
|
+
})))))), jsx("hp", null));
|
|
40
|
+
const expected = jsx("editor", null, jsx("htable", null, jsx("htr", null, jsx("htd", null, jsx("hp", null, "Cell 1")), jsx("htd", null, jsx("hp", null, "Cell 2"), jsx("hp", null, jsx("htext", {
|
|
41
41
|
bold: true,
|
|
42
42
|
italic: true,
|
|
43
43
|
underline: true
|
|
44
|
-
}, "quote"),
|
|
44
|
+
}, "quote"), jsx("hinline", {
|
|
45
45
|
type: "Entry",
|
|
46
46
|
id: "entry-id"
|
|
47
|
-
}),
|
|
47
|
+
}), jsx("htext", null))))), jsx("hp", null, jsx("htext", null)));
|
|
48
48
|
assertOutput({
|
|
49
49
|
input,
|
|
50
50
|
expected
|
|
@@ -53,32 +53,32 @@ describe('normalization', ()=>{
|
|
|
53
53
|
});
|
|
54
54
|
describe('Table row', ()=>{
|
|
55
55
|
it('must be wrapped in a table', ()=>{
|
|
56
|
-
const input =
|
|
57
|
-
const expected =
|
|
56
|
+
const input = jsx("editor", null, jsx("htr", null, jsx("htd", null, jsx("hp", null, "cell"))));
|
|
57
|
+
const expected = jsx("editor", null, jsx("htable", null, jsx("htr", null, jsx("htd", null, jsx("hp", null, "cell")))), jsx("hp", null, jsx("text", null)));
|
|
58
58
|
assertOutput({
|
|
59
59
|
input,
|
|
60
60
|
expected
|
|
61
61
|
});
|
|
62
62
|
});
|
|
63
63
|
it('removes empty rows', ()=>{
|
|
64
|
-
const input =
|
|
65
|
-
const expected =
|
|
64
|
+
const input = jsx("editor", null, jsx("htr", null));
|
|
65
|
+
const expected = jsx("editor", null, jsx("hp", null, jsx("text", null)));
|
|
66
66
|
assertOutput({
|
|
67
67
|
input,
|
|
68
68
|
expected
|
|
69
69
|
});
|
|
70
70
|
});
|
|
71
71
|
it('wraps invalid children in table cells', ()=>{
|
|
72
|
-
const input =
|
|
73
|
-
const expected =
|
|
72
|
+
const input = jsx("editor", null, jsx("htable", null, jsx("htr", null, jsx("htd", null, jsx("hp", null, "cell 1")), jsx("hp", null, "cell 2"))));
|
|
73
|
+
const expected = jsx("editor", null, jsx("htable", null, jsx("htr", null, jsx("htd", null, jsx("hp", null, "cell 1")), jsx("htd", null, jsx("hp", null, "cell 2")))), jsx("hp", null, jsx("text", null)));
|
|
74
74
|
assertOutput({
|
|
75
75
|
input,
|
|
76
76
|
expected
|
|
77
77
|
});
|
|
78
78
|
});
|
|
79
79
|
it('ensures all table rows have the same width', ()=>{
|
|
80
|
-
const input =
|
|
81
|
-
const expected =
|
|
80
|
+
const input = jsx("editor", null, jsx("htable", null, jsx("htr", null, jsx("htd", null, jsx("hp", null, "cell 1"))), jsx("htr", null, jsx("htd", null, jsx("hp", null, "cell 2")), jsx("htd", null, jsx("hp", null, "cell 3")), jsx("htd", null, jsx("hp", null, "cell 4"))), jsx("htr", null, jsx("htd", null, jsx("hp", null, "cell 5")), jsx("htd", null, jsx("hp", null, "cell 6")))));
|
|
81
|
+
const expected = jsx("editor", null, jsx("htable", null, jsx("htr", null, jsx("htd", null, jsx("hp", null, "cell 1")), jsx("htd", null, jsx("hp", null, jsx("text", null))), jsx("htd", null, jsx("hp", null, jsx("text", null)))), jsx("htr", null, jsx("htd", null, jsx("hp", null, "cell 2")), jsx("htd", null, jsx("hp", null, "cell 3")), jsx("htd", null, jsx("hp", null, "cell 4"))), jsx("htr", null, jsx("htd", null, jsx("hp", null, "cell 5")), jsx("htd", null, jsx("hp", null, "cell 6")), jsx("htd", null, jsx("hp", null, jsx("text", null))))), jsx("hp", null, jsx("text", null)));
|
|
82
82
|
assertOutput({
|
|
83
83
|
input,
|
|
84
84
|
expected
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
|
|
1
|
+
import { jsx, assertOutput, createTestEditor } from '../../../test-utils';
|
|
2
2
|
import { insertTableAndFocusFirstCell } from '../helpers';
|
|
3
3
|
test('insertTableAndFocusFirstCell', ()=>{
|
|
4
|
-
const input =
|
|
5
|
-
const { editor
|
|
4
|
+
const input = jsx("editor", null, jsx("hp", null, jsx("htext", null), jsx("cursor", null)), jsx("hp", null));
|
|
5
|
+
const { editor } = createTestEditor({
|
|
6
6
|
input
|
|
7
7
|
});
|
|
8
8
|
insertTableAndFocusFirstCell(editor);
|
|
9
|
-
const expected =
|
|
9
|
+
const expected = jsx("editor", null, jsx("htable", null, jsx("htr", null, jsx("hth", null, jsx("hp", null, jsx("htext", null), jsx("cursor", null))), jsx("hth", null, jsx("hp", null, jsx("htext", null)))), jsx("htr", null, jsx("htd", null, jsx("hp", null, jsx("htext", null))), jsx("htd", null, jsx("hp", null, jsx("htext", null))))), jsx("hp", null, jsx("htext", null)));
|
|
10
10
|
assertOutput({
|
|
11
11
|
input,
|
|
12
12
|
expected
|
|
@@ -2,7 +2,7 @@ import { BLOCKS } from '@contentful/rich-text-types';
|
|
|
2
2
|
import { getEmptyCellNode } from '@udecode/plate-table';
|
|
3
3
|
import { getAboveNode, getNextPath, someNode } from '../../../internal/queries';
|
|
4
4
|
import { insertNodes } from '../../../internal/transforms';
|
|
5
|
-
const addColumn = (editor, { header
|
|
5
|
+
const addColumn = (editor, { header }, getNextCellPath)=>{
|
|
6
6
|
if (someNode(editor, {
|
|
7
7
|
match: {
|
|
8
8
|
type: BLOCKS.TABLE
|
|
@@ -31,7 +31,6 @@ const addColumn = (editor, { header }, getNextCellPath)=>{
|
|
|
31
31
|
header: header && rowIdx === 0
|
|
32
32
|
}), {
|
|
33
33
|
at: newCellPath,
|
|
34
|
-
// Select the first cell of the new column
|
|
35
34
|
select: rowIdx === 0
|
|
36
35
|
});
|
|
37
36
|
});
|
|
@@ -21,10 +21,8 @@ const addRow = (editor, getNextRowPath)=>{
|
|
|
21
21
|
colCount: currentRowElem.children.length
|
|
22
22
|
}), {
|
|
23
23
|
at: nextRowPath,
|
|
24
|
-
// Note: this selects the last cell of the new row
|
|
25
24
|
select: true
|
|
26
25
|
});
|
|
27
|
-
// Select the first cell in the current row
|
|
28
26
|
select(editor, getStartPoint(editor, nextRowPath));
|
|
29
27
|
}
|
|
30
28
|
}
|
|
@@ -36,7 +34,6 @@ export const addRowBelow = (editor)=>{
|
|
|
36
34
|
};
|
|
37
35
|
export const addRowAbove = (editor)=>{
|
|
38
36
|
addRow(editor, (currentRowPath)=>{
|
|
39
|
-
// The new row will be in in-place of the old row
|
|
40
37
|
return currentRowPath;
|
|
41
38
|
});
|
|
42
39
|
};
|
|
@@ -17,9 +17,9 @@ const style = css`
|
|
|
17
17
|
`;
|
|
18
18
|
export const Cell = (props)=>{
|
|
19
19
|
const isSelected = useSelected();
|
|
20
|
-
return
|
|
20
|
+
return React.createElement("td", {
|
|
21
21
|
...props.attributes,
|
|
22
22
|
...props.element.data,
|
|
23
23
|
className: style
|
|
24
|
-
}, isSelected &&
|
|
24
|
+
}, isSelected && React.createElement(TableActions, null), props.children);
|
|
25
25
|
};
|
|
@@ -20,9 +20,9 @@ const style = css`
|
|
|
20
20
|
`;
|
|
21
21
|
export const HeaderCell = (props)=>{
|
|
22
22
|
const isSelected = useSelected();
|
|
23
|
-
return
|
|
23
|
+
return React.createElement("th", {
|
|
24
24
|
...props.attributes,
|
|
25
25
|
...props.element.data,
|
|
26
26
|
className: style
|
|
27
|
-
}, isSelected &&
|
|
27
|
+
}, isSelected && React.createElement(TableActions, null), props.children);
|
|
28
28
|
};
|
|
@@ -9,7 +9,7 @@ const style = css`
|
|
|
9
9
|
background-color: transparent !important;
|
|
10
10
|
}
|
|
11
11
|
`;
|
|
12
|
-
export const Row = (props)
|
|
12
|
+
export const Row = (props)=>React.createElement("tr", {
|
|
13
13
|
...props.attributes,
|
|
14
14
|
className: style
|
|
15
15
|
}, props.children);
|
|
@@ -13,10 +13,10 @@ const style = css`
|
|
|
13
13
|
overflow: hidden;
|
|
14
14
|
`;
|
|
15
15
|
export const Table = (props)=>{
|
|
16
|
-
return
|
|
16
|
+
return React.createElement("div", {
|
|
17
17
|
"data-block-type": BLOCKS.TABLE
|
|
18
|
-
},
|
|
18
|
+
}, React.createElement("table", {
|
|
19
19
|
className: style,
|
|
20
20
|
...props.attributes
|
|
21
|
-
},
|
|
21
|
+
}, React.createElement("tbody", null, props.children)));
|
|
22
22
|
};
|
|
@@ -70,7 +70,6 @@ export const TableActions = ()=>{
|
|
|
70
70
|
header: isHeaderEnabled
|
|
71
71
|
});
|
|
72
72
|
});
|
|
73
|
-
// Tracking
|
|
74
73
|
const actionName = `${type}Table${element === 'Table' ? '' : element}`;
|
|
75
74
|
editor.tracking.onViewportAction(actionName, {
|
|
76
75
|
tableSize
|
|
@@ -83,37 +82,37 @@ export const TableActions = ()=>{
|
|
|
83
82
|
if (isDisabled) {
|
|
84
83
|
return null;
|
|
85
84
|
}
|
|
86
|
-
return
|
|
85
|
+
return React.createElement(Menu, {
|
|
87
86
|
placement: "left",
|
|
88
87
|
isOpen: isOpen,
|
|
89
88
|
onOpen: ()=>{
|
|
90
89
|
setOpen(true);
|
|
91
90
|
},
|
|
92
91
|
onClose: close
|
|
93
|
-
},
|
|
92
|
+
}, React.createElement(Menu.Trigger, null, React.createElement(IconButton, {
|
|
94
93
|
size: "small",
|
|
95
94
|
variant: "transparent",
|
|
96
95
|
tabIndex: -1,
|
|
97
96
|
className: styles.topRight,
|
|
98
|
-
icon:
|
|
97
|
+
icon: React.createElement(ChevronDownIcon, null),
|
|
99
98
|
"aria-label": "Open table menu",
|
|
100
99
|
testId: "cf-table-actions-button"
|
|
101
|
-
})),
|
|
100
|
+
})), React.createElement(Menu.List, null, React.createElement(Menu.Item, {
|
|
102
101
|
onClick: action(addRowAbove, 'insert', 'Row'),
|
|
103
102
|
disabled: !canInsertRowAbove
|
|
104
|
-
}, "Add row above"),
|
|
103
|
+
}, "Add row above"), React.createElement(Menu.Item, {
|
|
105
104
|
onClick: action(addRowBelow, 'insert', 'Row')
|
|
106
|
-
}, "Add row below"),
|
|
105
|
+
}, "Add row below"), React.createElement(Menu.Item, {
|
|
107
106
|
onClick: action(addColumnLeft, 'insert', 'Column')
|
|
108
|
-
}, "Add column left"),
|
|
107
|
+
}, "Add column left"), React.createElement(Menu.Item, {
|
|
109
108
|
onClick: action(addColumnRight, 'insert', 'Column')
|
|
110
|
-
}, "Add column right"),
|
|
109
|
+
}, "Add column right"), React.createElement(Menu.Divider, null), React.createElement(Menu.Item, {
|
|
111
110
|
onClick: toggleHeader
|
|
112
|
-
}, isHeaderEnabled ? 'Disable table header' : 'Enable table header'),
|
|
111
|
+
}, isHeaderEnabled ? 'Disable table header' : 'Enable table header'), React.createElement(Menu.Divider, null), React.createElement(Menu.Item, {
|
|
113
112
|
onClick: action(deleteRow, 'remove', 'Row')
|
|
114
|
-
}, "Delete row"),
|
|
113
|
+
}, "Delete row"), React.createElement(Menu.Item, {
|
|
115
114
|
onClick: action(deleteColumn, 'remove', 'Column')
|
|
116
|
-
}, "Delete column"),
|
|
115
|
+
}, "Delete column"), React.createElement(Menu.Item, {
|
|
117
116
|
onClick: action(deleteTable, 'remove', 'Table')
|
|
118
117
|
}, "Delete table")));
|
|
119
118
|
};
|