From a7cef91cbfe3e1d3bb2f26cdac9e17a58cf3d4a1 Mon Sep 17 00:00:00 2001 From: Martin Bianchi Date: Fri, 17 Jan 2025 12:08:25 -0300 Subject: [PATCH 1/4] Add option to change the default plugin to use when deserializing html --- .../lib/plugins/html/utils/deserializeHtml.ts | 4 + ...lizeDescendantsToDocumentFragment.spec.tsx | 78 ++++++++++ .../normalizeDescendantsToDocumentFragment.ts | 8 +- yarn.lock | 136 +++++++++--------- 4 files changed, 156 insertions(+), 70 deletions(-) diff --git a/packages/core/src/lib/plugins/html/utils/deserializeHtml.ts b/packages/core/src/lib/plugins/html/utils/deserializeHtml.ts index 9b55f411e9..1170bbb439 100644 --- a/packages/core/src/lib/plugins/html/utils/deserializeHtml.ts +++ b/packages/core/src/lib/plugins/html/utils/deserializeHtml.ts @@ -1,6 +1,7 @@ import type { Descendant } from '@udecode/slate'; import type { SlateEditor } from '../../../editor'; +import type { SlatePlugin } from '../../../plugin'; import { normalizeDescendantsToDocumentFragment } from '../../../utils/normalizeDescendantsToDocumentFragment'; import { collapseWhiteSpace } from './collapse-white-space'; @@ -12,10 +13,12 @@ export const deserializeHtml = ( editor: SlateEditor, { collapseWhiteSpace: shouldCollapseWhiteSpace = true, + defaultElementPlugin, element, }: { element: HTMLElement | string; collapseWhiteSpace?: boolean; + defaultElementPlugin?: SlatePlugin; } ): Descendant[] => { // for serializer @@ -29,6 +32,7 @@ export const deserializeHtml = ( const fragment = deserializeHtmlElement(editor, element) as Descendant[]; return normalizeDescendantsToDocumentFragment(editor, { + defaultElementPlugin, descendants: fragment, }); }; diff --git a/packages/core/src/lib/utils/normalizeDescendantsToDocumentFragment.spec.tsx b/packages/core/src/lib/utils/normalizeDescendantsToDocumentFragment.spec.tsx index c23abc344d..f0337df975 100644 --- a/packages/core/src/lib/utils/normalizeDescendantsToDocumentFragment.spec.tsx +++ b/packages/core/src/lib/utils/normalizeDescendantsToDocumentFragment.spec.tsx @@ -1,7 +1,10 @@ +import { BaseBlockquotePlugin } from '@udecode/plate-block-quote'; /** @jsx jsxt */ import { LinkPlugin } from '@udecode/plate-link/react'; import { jsxt } from '@udecode/plate-test-utils'; +import type { SlatePlugin } from '../plugin'; + import { createPlateEditor } from '../../react'; import { normalizeDescendantsToDocumentFragment } from './index'; @@ -112,4 +115,79 @@ describe('normalizeDescendantsToDocumentFragment()', () => { expect(result).toEqual(output); } ); + + it.each([ + { + input: [text node, another text node], + output: [text node, another text node], + }, + { + input: [inline element, text node], + output: [inline element, text node], + }, + { + input: [block, another block, text node], + output: [ + block, + another block, + text node, + ], + }, + { + input: [inline element, block], + output: [ + + inline element + , + block, + ], + }, + { + input: [ + text 1, + text 2, + block, + text 3, + text 4, + ], + output: [ + + text 1 + text 2 + , + block, + + text 3 + text 4 + , + ], + }, + { + input: [ + + text node + block + , + ], + output: [ + + text node + block + , + ], + }, + ])( + 'should wrap inline blocks and text nodes in case they have a sibling block', + ({ input, output }: any) => { + const editor = createPlateEditor({ + plugins: [LinkPlugin], + }); + + const result = normalizeDescendantsToDocumentFragment(editor, { + defaultElementPlugin: BaseBlockquotePlugin as SlatePlugin, + descendants: input, + }); + expect(result).toEqual(output); + } + ); }); diff --git a/packages/core/src/lib/utils/normalizeDescendantsToDocumentFragment.ts b/packages/core/src/lib/utils/normalizeDescendantsToDocumentFragment.ts index 33c8973d59..b3ec762e13 100644 --- a/packages/core/src/lib/utils/normalizeDescendantsToDocumentFragment.ts +++ b/packages/core/src/lib/utils/normalizeDescendantsToDocumentFragment.ts @@ -6,6 +6,7 @@ import { } from '@udecode/slate'; import type { SlateEditor } from '../editor'; +import type { SlatePlugin } from '../plugin'; import { BaseParagraphPlugin } from '../plugins'; @@ -117,10 +118,13 @@ const normalize = ( /** Normalize the descendants to a valid document fragment. */ export const normalizeDescendantsToDocumentFragment = ( editor: SlateEditor, - { descendants }: { descendants: Descendant[] } + { + defaultElementPlugin = BaseParagraphPlugin, + descendants, + }: { descendants: Descendant[]; defaultElementPlugin?: SlatePlugin } ): Descendant[] => { const isInline = isInlineNode(editor); - const defaultType = editor.getType(BaseParagraphPlugin); + const defaultType = editor.getType(defaultElementPlugin); const makeDefaultBlock = makeBlockLazy(defaultType); return normalize(descendants, isInline, makeDefaultBlock as any); diff --git a/yarn.lock b/yarn.lock index 2ec832bd06..eb1d6b931d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6226,7 +6226,7 @@ __metadata: dependencies: "@udecode/plate-combobox": "npm:42.0.0" "@udecode/plate-markdown": "npm:42.0.3" - "@udecode/plate-selection": "npm:42.0.3" + "@udecode/plate-selection": "npm:42.2.0" ai: "npm:^3.4.10" lodash: "npm:^4.17.21" peerDependencies: @@ -6242,7 +6242,7 @@ __metadata: dependencies: "@udecode/plate": "workspace:^" peerDependencies: - "@udecode/plate": ">=42.0.6" + "@udecode/plate": ">=42.1.2" react: ">=18.0.0" react-dom: ">=18.0.0" languageName: unknown @@ -6255,7 +6255,7 @@ __metadata: "@udecode/plate": "workspace:^" lodash: "npm:^4.17.21" peerDependencies: - "@udecode/plate": ">=42.0.6" + "@udecode/plate": ">=42.1.2" react: ">=18.0.0" react-dom: ">=18.0.0" languageName: unknown @@ -6267,10 +6267,10 @@ __metadata: dependencies: "@udecode/plate": "workspace:^" "@udecode/plate-block-quote": "npm:42.0.0" - "@udecode/plate-code-block": "npm:42.0.5" + "@udecode/plate-code-block": "npm:42.1.1" "@udecode/plate-heading": "npm:42.0.0" peerDependencies: - "@udecode/plate": ">=42.0.6" + "@udecode/plate": ">=42.1.2" react: ">=18.0.0" react-dom: ">=18.0.0" languageName: unknown @@ -6282,7 +6282,7 @@ __metadata: dependencies: "@udecode/plate": "workspace:^" peerDependencies: - "@udecode/plate": ">=42.0.6" + "@udecode/plate": ">=42.1.2" react: ">=18.0.0" react-dom: ">=18.0.0" languageName: unknown @@ -6294,7 +6294,7 @@ __metadata: dependencies: "@udecode/plate": "workspace:^" peerDependencies: - "@udecode/plate": ">=42.0.6" + "@udecode/plate": ">=42.1.2" react: ">=18.0.0" react-dom: ">=18.0.0" languageName: unknown @@ -6306,7 +6306,7 @@ __metadata: dependencies: "@udecode/plate": "workspace:^" peerDependencies: - "@udecode/plate": ">=42.0.6" + "@udecode/plate": ">=42.1.2" react: ">=18.0.0" react-dom: ">=18.0.0" languageName: unknown @@ -6318,7 +6318,7 @@ __metadata: dependencies: "@udecode/plate": "workspace:^" peerDependencies: - "@udecode/plate": ">=42.0.6" + "@udecode/plate": ">=42.1.2" react: ">=18.0.0" react-dom: ">=18.0.0" languageName: unknown @@ -6331,20 +6331,20 @@ __metadata: "@udecode/plate": "workspace:^" react-textarea-autosize: "npm:^8.5.3" peerDependencies: - "@udecode/plate": ">=42.0.6" + "@udecode/plate": ">=42.1.2" react: ">=18.0.0" react-dom: ">=18.0.0" languageName: unknown linkType: soft -"@udecode/plate-code-block@npm:42.0.5, @udecode/plate-code-block@workspace:^, @udecode/plate-code-block@workspace:packages/code-block": +"@udecode/plate-code-block@npm:42.1.1, @udecode/plate-code-block@workspace:^, @udecode/plate-code-block@workspace:packages/code-block": version: 0.0.0-use.local resolution: "@udecode/plate-code-block@workspace:packages/code-block" dependencies: "@udecode/plate": "workspace:^" prismjs: "npm:^1.29.0" peerDependencies: - "@udecode/plate": ">=42.0.6" + "@udecode/plate": ">=42.1.2" react: ">=18.0.0" react-dom: ">=18.0.0" languageName: unknown @@ -6356,7 +6356,7 @@ __metadata: dependencies: "@udecode/plate": "workspace:^" peerDependencies: - "@udecode/plate": ">=42.0.6" + "@udecode/plate": ">=42.1.2" react: ">=18.0.0" react-dom: ">=18.0.0" languageName: unknown @@ -6369,13 +6369,13 @@ __metadata: "@udecode/plate": "workspace:^" lodash: "npm:^4.17.21" peerDependencies: - "@udecode/plate": ">=42.0.6" + "@udecode/plate": ">=42.1.2" react: ">=18.0.0" react-dom: ">=18.0.0" languageName: unknown linkType: soft -"@udecode/plate-core@npm:42.0.6, @udecode/plate-core@workspace:^, @udecode/plate-core@workspace:packages/core": +"@udecode/plate-core@npm:42.1.2, @udecode/plate-core@workspace:^, @udecode/plate-core@workspace:packages/core": version: 0.0.0-use.local resolution: "@udecode/plate-core@workspace:packages/core" dependencies: @@ -6409,10 +6409,10 @@ __metadata: dependencies: "@types/papaparse": "npm:^5.3.14" "@udecode/plate": "workspace:^" - "@udecode/plate-table": "npm:42.0.5" + "@udecode/plate-table": "npm:42.1.1" papaparse: "npm:^5.4.1" peerDependencies: - "@udecode/plate": ">=42.0.6" + "@udecode/plate": ">=42.1.2" react: ">=18.0.0" react-dom: ">=18.0.0" languageName: unknown @@ -6424,7 +6424,7 @@ __metadata: dependencies: "@udecode/plate": "workspace:^" peerDependencies: - "@udecode/plate": ">=42.0.6" + "@udecode/plate": ">=42.1.2" react: ">=18.0.0" react-dom: ">=18.0.0" languageName: unknown @@ -6436,7 +6436,7 @@ __metadata: dependencies: "@udecode/plate": "workspace:^" peerDependencies: - "@udecode/plate": ">=42.0.6" + "@udecode/plate": ">=42.1.2" react: ">=18.0.0" react-dom: ">=18.0.0" languageName: unknown @@ -6450,7 +6450,7 @@ __metadata: diff-match-patch-ts: "npm:^0.6.0" lodash: "npm:^4.17.21" peerDependencies: - "@udecode/plate": ">=42.0.6" + "@udecode/plate": ">=42.1.2" react: ">=18.0.0" react-dom: ">=18.0.0" languageName: unknown @@ -6464,7 +6464,7 @@ __metadata: lodash: "npm:^4.17.21" raf: "npm:^3.4.1" peerDependencies: - "@udecode/plate": ">=42.0.6" + "@udecode/plate": ">=42.1.2" react: ">=18.0.0" react-dnd: ">=14.0.0" react-dnd-html5-backend: ">=14.0.0" @@ -6479,12 +6479,12 @@ __metadata: "@udecode/plate": "workspace:^" "@udecode/plate-heading": "npm:42.0.0" "@udecode/plate-indent": "npm:42.0.0" - "@udecode/plate-indent-list": "npm:42.0.5" - "@udecode/plate-media": "npm:42.0.5" - "@udecode/plate-table": "npm:42.0.5" + "@udecode/plate-indent-list": "npm:42.1.1" + "@udecode/plate-media": "npm:42.1.1" + "@udecode/plate-table": "npm:42.1.1" validator: "npm:^13.12.0" peerDependencies: - "@udecode/plate": ">=42.0.6" + "@udecode/plate": ">=42.1.2" react: ">=18.0.0" react-dom: ">=18.0.0" languageName: unknown @@ -6499,7 +6499,7 @@ __metadata: "@udecode/plate-combobox": "npm:42.0.0" peerDependencies: "@emoji-mart/data": ">=1.2.0" - "@udecode/plate": ">=42.0.6" + "@udecode/plate": ">=42.1.2" react: ">=18.0.0" react-dom: ">=18.0.0" languageName: unknown @@ -6512,7 +6512,7 @@ __metadata: "@excalidraw/excalidraw": "npm:0.16.4" "@udecode/plate": "workspace:^" peerDependencies: - "@udecode/plate": ">=42.0.6" + "@udecode/plate": ">=42.1.2" react: ">=18.0.0" react-dom: ">=18.0.0" languageName: unknown @@ -6524,7 +6524,7 @@ __metadata: dependencies: "@udecode/plate": "workspace:^" peerDependencies: - "@udecode/plate": ">=42.0.6" + "@udecode/plate": ">=42.1.2" react: ">=18.0.0" react-dom: ">=18.0.0" languageName: unknown @@ -6538,7 +6538,7 @@ __metadata: "@floating-ui/react": "npm:^0.26.23" "@udecode/plate": "workspace:^" peerDependencies: - "@udecode/plate": ">=42.0.6" + "@udecode/plate": ">=42.1.2" react: ">=18.0.0" react-dom: ">=18.0.0" languageName: unknown @@ -6551,7 +6551,7 @@ __metadata: "@udecode/plate": "workspace:^" lodash: "npm:^4.17.21" peerDependencies: - "@udecode/plate": ">=42.0.6" + "@udecode/plate": ">=42.1.2" react: ">=18.0.0" react-dom: ">=18.0.0" languageName: unknown @@ -6563,7 +6563,7 @@ __metadata: dependencies: "@udecode/plate": "workspace:^" peerDependencies: - "@udecode/plate": ">=42.0.6" + "@udecode/plate": ">=42.1.2" react: ">=18.0.0" react-dom: ">=18.0.0" languageName: unknown @@ -6575,7 +6575,7 @@ __metadata: dependencies: "@udecode/plate": "workspace:^" peerDependencies: - "@udecode/plate": ">=42.0.6" + "@udecode/plate": ">=42.1.2" react: ">=18.0.0" react-dom: ">=18.0.0" languageName: unknown @@ -6587,13 +6587,13 @@ __metadata: dependencies: "@udecode/plate": "workspace:^" peerDependencies: - "@udecode/plate": ">=42.0.6" + "@udecode/plate": ">=42.1.2" react: ">=18.0.0" react-dom: ">=18.0.0" languageName: unknown linkType: soft -"@udecode/plate-indent-list@npm:42.0.5, @udecode/plate-indent-list@workspace:^, @udecode/plate-indent-list@workspace:packages/indent-list": +"@udecode/plate-indent-list@npm:42.1.1, @udecode/plate-indent-list@workspace:^, @udecode/plate-indent-list@workspace:packages/indent-list": version: 0.0.0-use.local resolution: "@udecode/plate-indent-list@workspace:packages/indent-list" dependencies: @@ -6602,7 +6602,7 @@ __metadata: "@udecode/plate-list": "npm:42.0.0" clsx: "npm:^2.1.1" peerDependencies: - "@udecode/plate": ">=42.0.6" + "@udecode/plate": ">=42.1.2" react: ">=18.0.0" react-dom: ">=18.0.0" languageName: unknown @@ -6614,7 +6614,7 @@ __metadata: dependencies: "@udecode/plate": "workspace:^" peerDependencies: - "@udecode/plate": ">=42.0.6" + "@udecode/plate": ">=42.1.2" react: ">=18.0.0" react-dom: ">=18.0.0" languageName: unknown @@ -6627,7 +6627,7 @@ __metadata: "@udecode/plate": "workspace:^" juice: "npm:^8.1.0" peerDependencies: - "@udecode/plate": ">=42.0.6" + "@udecode/plate": ">=42.1.2" react: ">=18.0.0" react-dom: ">=18.0.0" languageName: unknown @@ -6639,7 +6639,7 @@ __metadata: dependencies: "@udecode/plate": "workspace:^" peerDependencies: - "@udecode/plate": ">=42.0.6" + "@udecode/plate": ">=42.1.2" react: ">=18.0.0" react-dom: ">=18.0.0" languageName: unknown @@ -6651,7 +6651,7 @@ __metadata: dependencies: "@udecode/plate": "workspace:^" peerDependencies: - "@udecode/plate": ">=42.0.6" + "@udecode/plate": ">=42.1.2" react: ">=18.0.0" react-dom: ">=18.0.0" languageName: unknown @@ -6663,7 +6663,7 @@ __metadata: dependencies: "@udecode/plate": "workspace:^" peerDependencies: - "@udecode/plate": ">=42.0.6" + "@udecode/plate": ">=42.1.2" react: ">=18.0.0" react-dom: ">=18.0.0" languageName: unknown @@ -6677,7 +6677,7 @@ __metadata: "@udecode/plate-floating": "npm:42.0.0" "@udecode/plate-normalizers": "npm:42.0.0" peerDependencies: - "@udecode/plate": ">=42.0.6" + "@udecode/plate": ">=42.1.2" react: ">=18.0.0" react-dom: ">=18.0.0" languageName: unknown @@ -6691,7 +6691,7 @@ __metadata: "@udecode/plate-reset-node": "npm:42.0.0" lodash: "npm:^4.17.21" peerDependencies: - "@udecode/plate": ">=42.0.6" + "@udecode/plate": ">=42.1.2" react: ">=18.0.0" react-dom: ">=18.0.0" languageName: unknown @@ -6708,7 +6708,7 @@ __metadata: remark-parse: "npm:^11.0.0" unified: "npm:^11.0.5" peerDependencies: - "@udecode/plate": ">=42.0.6" + "@udecode/plate": ">=42.1.2" react: ">=18.0.0" react-dom: ">=18.0.0" languageName: unknown @@ -6722,20 +6722,20 @@ __metadata: "@udecode/plate": "workspace:^" katex: "npm:0.16.11" peerDependencies: - "@udecode/plate": ">=42.0.6" + "@udecode/plate": ">=42.1.2" react: ">=18.0.0" react-dom: ">=18.0.0" languageName: unknown linkType: soft -"@udecode/plate-media@npm:42.0.5, @udecode/plate-media@workspace:^, @udecode/plate-media@workspace:packages/media": +"@udecode/plate-media@npm:42.1.1, @udecode/plate-media@workspace:^, @udecode/plate-media@workspace:packages/media": version: 0.0.0-use.local resolution: "@udecode/plate-media@workspace:packages/media" dependencies: "@udecode/plate": "workspace:^" js-video-url-parser: "npm:^0.5.1" peerDependencies: - "@udecode/plate": ">=42.0.6" + "@udecode/plate": ">=42.1.2" react: ">=18.0.0" react-dom: ">=18.0.0" languageName: unknown @@ -6748,7 +6748,7 @@ __metadata: "@udecode/plate": "workspace:^" "@udecode/plate-combobox": "npm:42.0.0" peerDependencies: - "@udecode/plate": ">=42.0.6" + "@udecode/plate": ">=42.1.2" react: ">=18.0.0" react-dom: ">=18.0.0" languageName: unknown @@ -6761,7 +6761,7 @@ __metadata: "@udecode/plate": "workspace:^" lodash: "npm:^4.17.21" peerDependencies: - "@udecode/plate": ">=42.0.6" + "@udecode/plate": ">=42.1.2" react: ">=18.0.0" react-dom: ">=18.0.0" languageName: unknown @@ -6774,7 +6774,7 @@ __metadata: "@udecode/plate": "workspace:^" lodash: "npm:^4.17.21" peerDependencies: - "@udecode/plate": ">=42.0.6" + "@udecode/plate": ">=42.1.2" react: ">=18.0.0" react-dom: ">=18.0.0" languageName: unknown @@ -6787,7 +6787,7 @@ __metadata: "@udecode/plate": "workspace:^" peerDependencies: "@playwright/test": ">=1.42.1" - "@udecode/plate": ">=42.0.6" + "@udecode/plate": ">=42.1.2" react: ">=18.0.0" react-dom: ">=18.0.0" languageName: unknown @@ -6799,7 +6799,7 @@ __metadata: dependencies: "@udecode/plate": "workspace:^" peerDependencies: - "@udecode/plate": ">=42.0.6" + "@udecode/plate": ">=42.1.2" react: ">=18.0.0" react-dom: ">=18.0.0" languageName: unknown @@ -6811,7 +6811,7 @@ __metadata: dependencies: "@udecode/plate": "workspace:^" peerDependencies: - "@udecode/plate": ">=42.0.6" + "@udecode/plate": ">=42.1.2" react: ">=18.0.0" react-dom: ">=18.0.0" languageName: unknown @@ -6823,20 +6823,20 @@ __metadata: dependencies: "@udecode/plate": "workspace:^" peerDependencies: - "@udecode/plate": ">=42.0.6" + "@udecode/plate": ">=42.1.2" react: ">=18.0.0" react-dom: ">=18.0.0" languageName: unknown linkType: soft -"@udecode/plate-selection@npm:42.0.3, @udecode/plate-selection@workspace:^, @udecode/plate-selection@workspace:packages/selection": +"@udecode/plate-selection@npm:42.2.0, @udecode/plate-selection@workspace:^, @udecode/plate-selection@workspace:packages/selection": version: 0.0.0-use.local resolution: "@udecode/plate-selection@workspace:packages/selection" dependencies: "@udecode/plate": "workspace:^" copy-to-clipboard: "npm:^3.3.3" peerDependencies: - "@udecode/plate": ">=42.0.6" + "@udecode/plate": ">=42.1.2" react: ">=18.0.0" react-dom: ">=18.0.0" languageName: unknown @@ -6849,7 +6849,7 @@ __metadata: "@udecode/plate": "workspace:^" "@udecode/plate-combobox": "npm:42.0.0" peerDependencies: - "@udecode/plate": ">=42.0.6" + "@udecode/plate": ">=42.1.2" react: ">=18.0.0" react-dom: ">=18.0.0" languageName: unknown @@ -6863,7 +6863,7 @@ __metadata: "@udecode/plate-diff": "npm:42.0.0" lodash: "npm:^4.17.21" peerDependencies: - "@udecode/plate": ">=42.0.6" + "@udecode/plate": ">=42.1.2" react: ">=18.0.0" react-dom: ">=18.0.0" languageName: unknown @@ -6876,13 +6876,13 @@ __metadata: "@udecode/plate": "workspace:^" tabbable: "npm:^6.2.0" peerDependencies: - "@udecode/plate": ">=42.0.6" + "@udecode/plate": ">=42.1.2" react: ">=18.0.0" react-dom: ">=18.0.0" languageName: unknown linkType: soft -"@udecode/plate-table@npm:42.0.5, @udecode/plate-table@workspace:^, @udecode/plate-table@workspace:packages/table": +"@udecode/plate-table@npm:42.1.1, @udecode/plate-table@workspace:^, @udecode/plate-table@workspace:packages/table": version: 0.0.0-use.local resolution: "@udecode/plate-table@workspace:packages/table" dependencies: @@ -6891,7 +6891,7 @@ __metadata: "@udecode/plate-resizable": "npm:42.0.0" lodash: "npm:^4.17.21" peerDependencies: - "@udecode/plate": ">=42.0.6" + "@udecode/plate": ">=42.1.2" react: ">=18.0.0" react-dom: ">=18.0.0" languageName: unknown @@ -6903,7 +6903,7 @@ __metadata: dependencies: "@udecode/plate": "workspace:^" peerDependencies: - "@udecode/plate": ">=42.0.6" + "@udecode/plate": ">=42.1.2" react: ">=18.0.0" react-dom: ">=18.0.0" languageName: unknown @@ -6927,7 +6927,7 @@ __metadata: "@udecode/plate-node-id": "npm:42.0.0" lodash: "npm:^4.17.21" peerDependencies: - "@udecode/plate": ">=42.0.6" + "@udecode/plate": ">=42.1.2" react: ">=18.0.0" react-dom: ">=18.0.0" languageName: unknown @@ -6939,17 +6939,17 @@ __metadata: dependencies: "@udecode/plate": "workspace:^" peerDependencies: - "@udecode/plate": ">=42.0.6" + "@udecode/plate": ">=42.1.2" react: ">=18.0.0" react-dom: ">=18.0.0" languageName: unknown linkType: soft -"@udecode/plate-utils@npm:42.0.6, @udecode/plate-utils@workspace:^, @udecode/plate-utils@workspace:packages/plate-utils": +"@udecode/plate-utils@npm:42.1.2, @udecode/plate-utils@workspace:^, @udecode/plate-utils@workspace:packages/plate-utils": version: 0.0.0-use.local resolution: "@udecode/plate-utils@workspace:packages/plate-utils" dependencies: - "@udecode/plate-core": "npm:42.0.6" + "@udecode/plate-core": "npm:42.1.2" "@udecode/react-utils": "npm:42.0.0" "@udecode/slate": "npm:42.0.3" "@udecode/utils": "npm:42.0.0" @@ -6970,7 +6970,7 @@ __metadata: "@udecode/plate": "workspace:^" yjs: "npm:^13.6.19" peerDependencies: - "@udecode/plate": ">=42.0.6" + "@udecode/plate": ">=42.1.2" react: ">=18.0.0" react-dom: ">=18.0.0" languageName: unknown @@ -6980,8 +6980,8 @@ __metadata: version: 0.0.0-use.local resolution: "@udecode/plate@workspace:packages/plate" dependencies: - "@udecode/plate-core": "npm:42.0.6" - "@udecode/plate-utils": "npm:42.0.6" + "@udecode/plate-core": "npm:42.1.2" + "@udecode/plate-utils": "npm:42.1.2" "@udecode/react-hotkeys": "npm:37.0.0" "@udecode/react-utils": "npm:42.0.0" "@udecode/slate": "npm:42.0.3" From 5f8250e766144ec1419e92d7efde96e9956ec70f Mon Sep 17 00:00:00 2001 From: Martin Bianchi Date: Fri, 17 Jan 2025 13:07:58 -0300 Subject: [PATCH 2/4] changeset --- .changeset/cool-sloths-protect.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/cool-sloths-protect.md diff --git a/.changeset/cool-sloths-protect.md b/.changeset/cool-sloths-protect.md new file mode 100644 index 0000000000..3da4008ac9 --- /dev/null +++ b/.changeset/cool-sloths-protect.md @@ -0,0 +1,5 @@ +--- +'@udecode/plate-core': minor +--- + +Add new param to HTML deserializer for changing the default element From 9d436047e47213dca492e655462e466dfcf18d63 Mon Sep 17 00:00:00 2001 From: Martin Bianchi Date: Fri, 17 Jan 2025 13:22:24 -0300 Subject: [PATCH 3/4] use right type. create blockquote plugin inline for testing --- .../src/lib/plugins/html/utils/deserializeHtml.ts | 4 ++-- .../normalizeDescendantsToDocumentFragment.spec.tsx | 12 +++++++----- .../utils/normalizeDescendantsToDocumentFragment.ts | 4 ++-- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/packages/core/src/lib/plugins/html/utils/deserializeHtml.ts b/packages/core/src/lib/plugins/html/utils/deserializeHtml.ts index 1170bbb439..f35d6c19df 100644 --- a/packages/core/src/lib/plugins/html/utils/deserializeHtml.ts +++ b/packages/core/src/lib/plugins/html/utils/deserializeHtml.ts @@ -1,7 +1,7 @@ import type { Descendant } from '@udecode/slate'; import type { SlateEditor } from '../../../editor'; -import type { SlatePlugin } from '../../../plugin'; +import type { WithRequiredKey } from '../../../plugin'; import { normalizeDescendantsToDocumentFragment } from '../../../utils/normalizeDescendantsToDocumentFragment'; import { collapseWhiteSpace } from './collapse-white-space'; @@ -18,7 +18,7 @@ export const deserializeHtml = ( }: { element: HTMLElement | string; collapseWhiteSpace?: boolean; - defaultElementPlugin?: SlatePlugin; + defaultElementPlugin?: WithRequiredKey; } ): Descendant[] => { // for serializer diff --git a/packages/core/src/lib/utils/normalizeDescendantsToDocumentFragment.spec.tsx b/packages/core/src/lib/utils/normalizeDescendantsToDocumentFragment.spec.tsx index f0337df975..63e1e23c30 100644 --- a/packages/core/src/lib/utils/normalizeDescendantsToDocumentFragment.spec.tsx +++ b/packages/core/src/lib/utils/normalizeDescendantsToDocumentFragment.spec.tsx @@ -1,11 +1,8 @@ -import { BaseBlockquotePlugin } from '@udecode/plate-block-quote'; /** @jsx jsxt */ import { LinkPlugin } from '@udecode/plate-link/react'; import { jsxt } from '@udecode/plate-test-utils'; -import type { SlatePlugin } from '../plugin'; - -import { createPlateEditor } from '../../react'; +import { createPlateEditor, createPlatePlugin } from '../../react'; import { normalizeDescendantsToDocumentFragment } from './index'; jsxt; @@ -179,12 +176,17 @@ describe('normalizeDescendantsToDocumentFragment()', () => { ])( 'should wrap inline blocks and text nodes in case they have a sibling block', ({ input, output }: any) => { + const BaseBlockquotePlugin = createPlatePlugin({ + key: 'blockquote', + node: { isElement: true }, + }); + const editor = createPlateEditor({ plugins: [LinkPlugin], }); const result = normalizeDescendantsToDocumentFragment(editor, { - defaultElementPlugin: BaseBlockquotePlugin as SlatePlugin, + defaultElementPlugin: BaseBlockquotePlugin, descendants: input, }); expect(result).toEqual(output); diff --git a/packages/core/src/lib/utils/normalizeDescendantsToDocumentFragment.ts b/packages/core/src/lib/utils/normalizeDescendantsToDocumentFragment.ts index b3ec762e13..2746c19f91 100644 --- a/packages/core/src/lib/utils/normalizeDescendantsToDocumentFragment.ts +++ b/packages/core/src/lib/utils/normalizeDescendantsToDocumentFragment.ts @@ -6,7 +6,7 @@ import { } from '@udecode/slate'; import type { SlateEditor } from '../editor'; -import type { SlatePlugin } from '../plugin'; +import type { WithRequiredKey } from '../plugin'; import { BaseParagraphPlugin } from '../plugins'; @@ -121,7 +121,7 @@ export const normalizeDescendantsToDocumentFragment = ( { defaultElementPlugin = BaseParagraphPlugin, descendants, - }: { descendants: Descendant[]; defaultElementPlugin?: SlatePlugin } + }: { descendants: Descendant[]; defaultElementPlugin?: WithRequiredKey } ): Descendant[] => { const isInline = isInlineNode(editor); const defaultType = editor.getType(defaultElementPlugin); From 3256793f775cc0484fce1aad16a0c5f21cef067c Mon Sep 17 00:00:00 2001 From: Ziad Beyens Date: Fri, 17 Jan 2025 17:37:39 +0100 Subject: [PATCH 4/4] Update cool-sloths-protect.md --- .changeset/cool-sloths-protect.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/cool-sloths-protect.md b/.changeset/cool-sloths-protect.md index 3da4008ac9..4daaa4c48c 100644 --- a/.changeset/cool-sloths-protect.md +++ b/.changeset/cool-sloths-protect.md @@ -1,5 +1,5 @@ --- -'@udecode/plate-core': minor +'@udecode/plate-core': patch --- Add new param to HTML deserializer for changing the default element