diff --git a/packages/richtext-lexical/src/exports/client/index.ts b/packages/richtext-lexical/src/exports/client/index.ts index 2f82846cc5e..054f70a167c 100644 --- a/packages/richtext-lexical/src/exports/client/index.ts +++ b/packages/richtext-lexical/src/exports/client/index.ts @@ -25,6 +25,7 @@ export { UnorderedListFeatureClient } from '../../features/lists/unorderedList/c export { LexicalPluginToLexicalFeatureClient } from '../../features/migrations/lexicalPluginToLexical/feature.client.js' export { SlateToLexicalFeatureClient } from '../../features/migrations/slateToLexical/feature.client.js' export { ParagraphFeatureClient } from '../../features/paragraph/client/index.js' +export { DebugJsxConverterFeatureClient } from '../../features/debug/jsxConverter/client/index.js' export { RelationshipFeatureClient } from '../../features/relationship/client/index.js' diff --git a/packages/richtext-lexical/src/exports/react/index.ts b/packages/richtext-lexical/src/exports/react/index.ts index 70de9c5d53e..8730e061c20 100644 --- a/packages/richtext-lexical/src/exports/react/index.ts +++ b/packages/richtext-lexical/src/exports/react/index.ts @@ -1,21 +1,22 @@ -export { BlockquoteJSXConverter } from './components/RichText/converter/converters/blockquote.js' -export { HeadingJSXConverter } from './components/RichText/converter/converters/heading.js' -export { HorizontalRuleJSXConverter } from './components/RichText/converter/converters/horizontalRule.js' -export { LinebreakJSXConverter } from './components/RichText/converter/converters/linebreak.js' -export { LinkJSXConverter } from './components/RichText/converter/converters/link.js' -export { ListJSXConverter } from './components/RichText/converter/converters/list.js' -export { ParagraphJSXConverter } from './components/RichText/converter/converters/paragraph.js' -export { TabJSXConverter } from './components/RichText/converter/converters/tab.js' -export { TableJSXConverter } from './components/RichText/converter/converters/table.js' -export { TextJSXConverter } from './components/RichText/converter/converters/text.js' +export { BlockquoteJSXConverter } from '../../features/converters/jsx/converter/converters/blockquote.js' -export { UploadJSXConverter } from './components/RichText/converter/converters/upload.js' +export { HeadingJSXConverter } from '../../features/converters/jsx/converter/converters/heading.js' +export { HorizontalRuleJSXConverter } from '../../features/converters/jsx/converter/converters/horizontalRule.js' +export { LinebreakJSXConverter } from '../../features/converters/jsx/converter/converters/linebreak.js' +export { LinkJSXConverter } from '../../features/converters/jsx/converter/converters/link.js' +export { ListJSXConverter } from '../../features/converters/jsx/converter/converters/list.js' +export { ParagraphJSXConverter } from '../../features/converters/jsx/converter/converters/paragraph.js' +export { TabJSXConverter } from '../../features/converters/jsx/converter/converters/tab.js' +export { TableJSXConverter } from '../../features/converters/jsx/converter/converters/table.js' +export { TextJSXConverter } from '../../features/converters/jsx/converter/converters/text.js' +export { UploadJSXConverter } from '../../features/converters/jsx/converter/converters/upload.js' -export { defaultJSXConverters } from './components/RichText/converter/defaultConverters.js' -export { convertLexicalNodesToJSX } from './components/RichText/converter/index.js' +export { defaultJSXConverters } from '../../features/converters/jsx/converter/defaultConverters.js' + +export { convertLexicalNodesToJSX } from '../../features/converters/jsx/converter/index.js' export type { JSXConverter, JSXConverters, SerializedLexicalNodeWithParent, -} from './components/RichText/converter/types.js' -export { type JSXConvertersFunction, RichText } from './components/RichText/index.js' +} from '../../features/converters/jsx/converter/types.js' +export { type JSXConvertersFunction, RichText } from '../../features/converters/jsx/index.js' diff --git a/packages/richtext-lexical/src/exports/react/components/RichText/converter/converters/blockquote.tsx b/packages/richtext-lexical/src/features/converters/jsx/converter/converters/blockquote.tsx similarity index 79% rename from packages/richtext-lexical/src/exports/react/components/RichText/converter/converters/blockquote.tsx rename to packages/richtext-lexical/src/features/converters/jsx/converter/converters/blockquote.tsx index ad40b064854..2440195c625 100644 --- a/packages/richtext-lexical/src/exports/react/components/RichText/converter/converters/blockquote.tsx +++ b/packages/richtext-lexical/src/features/converters/jsx/converter/converters/blockquote.tsx @@ -1,4 +1,4 @@ -import type { SerializedQuoteNode } from '../../../../../../nodeTypes.js' +import type { SerializedQuoteNode } from '../../../../../nodeTypes.js' import type { JSXConverters } from '../types.js' export const BlockquoteJSXConverter: JSXConverters = { diff --git a/packages/richtext-lexical/src/exports/react/components/RichText/converter/converters/heading.tsx b/packages/richtext-lexical/src/features/converters/jsx/converter/converters/heading.tsx similarity index 80% rename from packages/richtext-lexical/src/exports/react/components/RichText/converter/converters/heading.tsx rename to packages/richtext-lexical/src/features/converters/jsx/converter/converters/heading.tsx index 0c10b2cd1fe..a9f62892345 100644 --- a/packages/richtext-lexical/src/exports/react/components/RichText/converter/converters/heading.tsx +++ b/packages/richtext-lexical/src/features/converters/jsx/converter/converters/heading.tsx @@ -1,4 +1,4 @@ -import type { SerializedHeadingNode } from '../../../../../../nodeTypes.js' +import type { SerializedHeadingNode } from '../../../../../nodeTypes.js' import type { JSXConverters } from '../types.js' export const HeadingJSXConverter: JSXConverters = { diff --git a/packages/richtext-lexical/src/exports/react/components/RichText/converter/converters/horizontalRule.tsx b/packages/richtext-lexical/src/features/converters/jsx/converter/converters/horizontalRule.tsx similarity index 93% rename from packages/richtext-lexical/src/exports/react/components/RichText/converter/converters/horizontalRule.tsx rename to packages/richtext-lexical/src/features/converters/jsx/converter/converters/horizontalRule.tsx index fc25a9fe99a..235da33c7fe 100644 --- a/packages/richtext-lexical/src/exports/react/components/RichText/converter/converters/horizontalRule.tsx +++ b/packages/richtext-lexical/src/features/converters/jsx/converter/converters/horizontalRule.tsx @@ -1,4 +1,4 @@ -import type { SerializedHorizontalRuleNode } from '../../../../../../nodeTypes.js' +import type { SerializedHorizontalRuleNode } from '../../../../../nodeTypes.js' import type { JSXConverters } from '../types.js' export const HorizontalRuleJSXConverter: JSXConverters = { horizontalrule: () => { diff --git a/packages/richtext-lexical/src/exports/react/components/RichText/converter/converters/linebreak.tsx b/packages/richtext-lexical/src/features/converters/jsx/converter/converters/linebreak.tsx similarity index 69% rename from packages/richtext-lexical/src/exports/react/components/RichText/converter/converters/linebreak.tsx rename to packages/richtext-lexical/src/features/converters/jsx/converter/converters/linebreak.tsx index 9b769b41707..3ba0cd99c5e 100644 --- a/packages/richtext-lexical/src/exports/react/components/RichText/converter/converters/linebreak.tsx +++ b/packages/richtext-lexical/src/features/converters/jsx/converter/converters/linebreak.tsx @@ -1,4 +1,4 @@ -import type { SerializedLineBreakNode } from '../../../../../../nodeTypes.js' +import type { SerializedLineBreakNode } from '../../../../../nodeTypes.js' import type { JSXConverters } from '../types.js' export const LinebreakJSXConverter: JSXConverters = { diff --git a/packages/richtext-lexical/src/exports/react/components/RichText/converter/converters/link.tsx b/packages/richtext-lexical/src/features/converters/jsx/converter/converters/link.tsx similarity index 97% rename from packages/richtext-lexical/src/exports/react/components/RichText/converter/converters/link.tsx rename to packages/richtext-lexical/src/features/converters/jsx/converter/converters/link.tsx index 810f47a01d4..6c8fe655303 100644 --- a/packages/richtext-lexical/src/exports/react/components/RichText/converter/converters/link.tsx +++ b/packages/richtext-lexical/src/features/converters/jsx/converter/converters/link.tsx @@ -1,4 +1,4 @@ -import type { SerializedAutoLinkNode, SerializedLinkNode } from '../../../../../../nodeTypes.js' +import type { SerializedAutoLinkNode, SerializedLinkNode } from '../../../../../nodeTypes.js' import type { JSXConverters } from '../types.js' export const LinkJSXConverter: (args: { diff --git a/packages/richtext-lexical/src/exports/react/components/RichText/converter/converters/list.tsx b/packages/richtext-lexical/src/features/converters/jsx/converter/converters/list.tsx similarity index 98% rename from packages/richtext-lexical/src/exports/react/components/RichText/converter/converters/list.tsx rename to packages/richtext-lexical/src/features/converters/jsx/converter/converters/list.tsx index dbc8ee521ff..dbb9aa79257 100644 --- a/packages/richtext-lexical/src/exports/react/components/RichText/converter/converters/list.tsx +++ b/packages/richtext-lexical/src/features/converters/jsx/converter/converters/list.tsx @@ -1,6 +1,6 @@ import { v4 as uuidv4 } from 'uuid' -import type { SerializedListItemNode, SerializedListNode } from '../../../../../../nodeTypes.js' +import type { SerializedListItemNode, SerializedListNode } from '../../../../../nodeTypes.js' import type { JSXConverters } from '../types.js' export const ListJSXConverter: JSXConverters = { diff --git a/packages/richtext-lexical/src/exports/react/components/RichText/converter/converters/paragraph.tsx b/packages/richtext-lexical/src/features/converters/jsx/converter/converters/paragraph.tsx similarity index 82% rename from packages/richtext-lexical/src/exports/react/components/RichText/converter/converters/paragraph.tsx rename to packages/richtext-lexical/src/features/converters/jsx/converter/converters/paragraph.tsx index 751b4144ba5..1b7814cd563 100644 --- a/packages/richtext-lexical/src/exports/react/components/RichText/converter/converters/paragraph.tsx +++ b/packages/richtext-lexical/src/features/converters/jsx/converter/converters/paragraph.tsx @@ -1,4 +1,4 @@ -import type { SerializedParagraphNode } from '../../../../../../nodeTypes.js' +import type { SerializedParagraphNode } from '../../../../../nodeTypes.js' import type { JSXConverters } from '../types.js' export const ParagraphJSXConverter: JSXConverters = { diff --git a/packages/richtext-lexical/src/exports/react/components/RichText/converter/converters/tab.tsx b/packages/richtext-lexical/src/features/converters/jsx/converter/converters/tab.tsx similarity index 71% rename from packages/richtext-lexical/src/exports/react/components/RichText/converter/converters/tab.tsx rename to packages/richtext-lexical/src/features/converters/jsx/converter/converters/tab.tsx index 63d66a216c4..d9ef4280b90 100644 --- a/packages/richtext-lexical/src/exports/react/components/RichText/converter/converters/tab.tsx +++ b/packages/richtext-lexical/src/features/converters/jsx/converter/converters/tab.tsx @@ -1,4 +1,4 @@ -import type { SerializedTabNode } from '../../../../../../nodeTypes.js' +import type { SerializedTabNode } from '../../../../../nodeTypes.js' import type { JSXConverters } from '../types.js' export const TabJSXConverter: JSXConverters = { diff --git a/packages/richtext-lexical/src/exports/react/components/RichText/converter/converters/table.tsx b/packages/richtext-lexical/src/features/converters/jsx/converter/converters/table.tsx similarity index 97% rename from packages/richtext-lexical/src/exports/react/components/RichText/converter/converters/table.tsx rename to packages/richtext-lexical/src/features/converters/jsx/converter/converters/table.tsx index 6f42f7a00b8..5b107e6655b 100644 --- a/packages/richtext-lexical/src/exports/react/components/RichText/converter/converters/table.tsx +++ b/packages/richtext-lexical/src/features/converters/jsx/converter/converters/table.tsx @@ -2,7 +2,7 @@ import type { SerializedTableCellNode, SerializedTableNode, SerializedTableRowNode, -} from '../../../../../../nodeTypes.js' +} from '../../../../../nodeTypes.js' import type { JSXConverters } from '../types.js' export const TableJSXConverter: JSXConverters< diff --git a/packages/richtext-lexical/src/exports/react/components/RichText/converter/converters/text.tsx b/packages/richtext-lexical/src/features/converters/jsx/converter/converters/text.tsx similarity index 86% rename from packages/richtext-lexical/src/exports/react/components/RichText/converter/converters/text.tsx rename to packages/richtext-lexical/src/features/converters/jsx/converter/converters/text.tsx index 28c41d9d109..4dfe7a2a4ef 100644 --- a/packages/richtext-lexical/src/exports/react/components/RichText/converter/converters/text.tsx +++ b/packages/richtext-lexical/src/features/converters/jsx/converter/converters/text.tsx @@ -1,9 +1,9 @@ import React from 'react' -import type { SerializedTextNode } from '../../../../../../nodeTypes.js' +import type { SerializedTextNode } from '../../../../../nodeTypes.js' import type { JSXConverters } from '../types.js' -import { NodeFormat } from '../../../../../../lexical/utils/nodeFormat.js' +import { NodeFormat } from '../../../../../lexical/utils/nodeFormat.js' export const TextJSXConverter: JSXConverters = { text: ({ node }) => { diff --git a/packages/richtext-lexical/src/exports/react/components/RichText/converter/converters/upload.tsx b/packages/richtext-lexical/src/features/converters/jsx/converter/converters/upload.tsx similarity index 96% rename from packages/richtext-lexical/src/exports/react/components/RichText/converter/converters/upload.tsx rename to packages/richtext-lexical/src/features/converters/jsx/converter/converters/upload.tsx index 59b724c604c..d58d8f6c312 100644 --- a/packages/richtext-lexical/src/exports/react/components/RichText/converter/converters/upload.tsx +++ b/packages/richtext-lexical/src/features/converters/jsx/converter/converters/upload.tsx @@ -1,6 +1,6 @@ import type { FileData, FileSize, TypeWithID } from 'payload' -import type { SerializedUploadNode } from '../../../../../../nodeTypes.js' +import type { SerializedUploadNode } from '../../../../../nodeTypes.js' import type { JSXConverters } from '../types.js' export const UploadJSXConverter: JSXConverters = { diff --git a/packages/richtext-lexical/src/exports/react/components/RichText/converter/defaultConverters.ts b/packages/richtext-lexical/src/features/converters/jsx/converter/defaultConverters.ts similarity index 94% rename from packages/richtext-lexical/src/exports/react/components/RichText/converter/defaultConverters.ts rename to packages/richtext-lexical/src/features/converters/jsx/converter/defaultConverters.ts index 5e59c809416..f00439be97c 100644 --- a/packages/richtext-lexical/src/exports/react/components/RichText/converter/defaultConverters.ts +++ b/packages/richtext-lexical/src/features/converters/jsx/converter/defaultConverters.ts @@ -1,4 +1,4 @@ -import type { DefaultNodeTypes } from '../../../../../nodeTypes.js' +import type { DefaultNodeTypes } from '../../../../nodeTypes.js' import type { JSXConverters } from './types.js' import { BlockquoteJSXConverter } from './converters/blockquote.js' diff --git a/packages/richtext-lexical/src/exports/react/components/RichText/converter/index.tsx b/packages/richtext-lexical/src/features/converters/jsx/converter/index.tsx similarity index 98% rename from packages/richtext-lexical/src/exports/react/components/RichText/converter/index.tsx rename to packages/richtext-lexical/src/features/converters/jsx/converter/index.tsx index 7923f4caaf1..9e529abcd0e 100644 --- a/packages/richtext-lexical/src/exports/react/components/RichText/converter/index.tsx +++ b/packages/richtext-lexical/src/features/converters/jsx/converter/index.tsx @@ -2,10 +2,10 @@ import type { SerializedEditorState, SerializedLexicalNode } from 'lexical' import React from 'react' -import type { SerializedBlockNode, SerializedInlineBlockNode } from '../../../../../nodeTypes.js' +import type { SerializedBlockNode, SerializedInlineBlockNode } from '../../../../nodeTypes.js' import type { JSXConverter, JSXConverters, SerializedLexicalNodeWithParent } from './types.js' -import { hasText } from '../../../../../validate/hasText.js' +import { hasText } from '../../../../validate/hasText.js' export type ConvertLexicalToHTMLArgs = { converters: JSXConverters diff --git a/packages/richtext-lexical/src/exports/react/components/RichText/converter/types.ts b/packages/richtext-lexical/src/features/converters/jsx/converter/types.ts similarity index 98% rename from packages/richtext-lexical/src/exports/react/components/RichText/converter/types.ts rename to packages/richtext-lexical/src/features/converters/jsx/converter/types.ts index c43400b4b90..7eb5c245ddd 100644 --- a/packages/richtext-lexical/src/exports/react/components/RichText/converter/types.ts +++ b/packages/richtext-lexical/src/features/converters/jsx/converter/types.ts @@ -4,7 +4,7 @@ import type { DefaultNodeTypes, SerializedBlockNode, SerializedInlineBlockNode, -} from '../../../../../nodeTypes.js' +} from '../../../../nodeTypes.js' export type JSXConverter = (args: { childIndex: number diff --git a/packages/richtext-lexical/src/exports/react/components/RichText/index.css b/packages/richtext-lexical/src/features/converters/jsx/index.css similarity index 100% rename from packages/richtext-lexical/src/exports/react/components/RichText/index.css rename to packages/richtext-lexical/src/features/converters/jsx/index.css diff --git a/packages/richtext-lexical/src/exports/react/components/RichText/index.tsx b/packages/richtext-lexical/src/features/converters/jsx/index.tsx similarity index 98% rename from packages/richtext-lexical/src/exports/react/components/RichText/index.tsx rename to packages/richtext-lexical/src/features/converters/jsx/index.tsx index ec001b4326f..59ca6223336 100644 --- a/packages/richtext-lexical/src/exports/react/components/RichText/index.tsx +++ b/packages/richtext-lexical/src/features/converters/jsx/index.tsx @@ -6,7 +6,7 @@ import type { DefaultNodeTypes, SerializedBlockNode, SerializedInlineBlockNode, -} from '../../../../nodeTypes.js' +} from '../../../nodeTypes.js' import type { JSXConverters } from './converter/types.js' import { defaultJSXConverters } from './converter/defaultConverters.js' diff --git a/packages/richtext-lexical/src/features/debug/jsxConverter/client/index.tsx b/packages/richtext-lexical/src/features/debug/jsxConverter/client/index.tsx new file mode 100644 index 00000000000..0d9938e2730 --- /dev/null +++ b/packages/richtext-lexical/src/features/debug/jsxConverter/client/index.tsx @@ -0,0 +1,13 @@ +'use client' + +import { createClientFeature } from '../../../../utilities/createClientFeature.js' +import { RichTextPlugin } from './plugin/index.js' + +export const DebugJsxConverterFeatureClient = createClientFeature({ + plugins: [ + { + Component: RichTextPlugin, + position: 'bottom', + }, + ], +}) diff --git a/packages/richtext-lexical/src/features/debug/jsxConverter/client/plugin/index.tsx b/packages/richtext-lexical/src/features/debug/jsxConverter/client/plugin/index.tsx new file mode 100644 index 00000000000..12b316e118b --- /dev/null +++ b/packages/richtext-lexical/src/features/debug/jsxConverter/client/plugin/index.tsx @@ -0,0 +1,20 @@ +'use client' + +import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext' +import { useEffect, useState } from 'react' + +import { defaultJSXConverters } from '../../../../converters/jsx/converter/defaultConverters.js' +import { RichText } from '../../../../converters/jsx/index.js' + +export function RichTextPlugin() { + const [editor] = useLexicalComposerContext() + const [editorState, setEditorState] = useState(editor.getEditorState().toJSON()) + + useEffect(() => { + return editor.registerUpdateListener(({ editorState }) => { + setEditorState(editorState.toJSON()) + }) + }, [editor]) + + return +} diff --git a/packages/richtext-lexical/src/features/debug/jsxConverter/server/index.ts b/packages/richtext-lexical/src/features/debug/jsxConverter/server/index.ts new file mode 100644 index 00000000000..29bac144ef5 --- /dev/null +++ b/packages/richtext-lexical/src/features/debug/jsxConverter/server/index.ts @@ -0,0 +1,8 @@ +import { createServerFeature } from '../../../../utilities/createServerFeature.js' + +export const DebugJsxConverterFeature = createServerFeature({ + feature: { + ClientFeature: '@payloadcms/richtext-lexical/client#DebugJsxConverterFeatureClient', + }, + key: 'jsxConverter', +}) diff --git a/packages/richtext-lexical/src/index.ts b/packages/richtext-lexical/src/index.ts index 1c4940d0440..58320ac0144 100644 --- a/packages/richtext-lexical/src/index.ts +++ b/packages/richtext-lexical/src/index.ts @@ -896,6 +896,7 @@ export { HTMLConverterFeature, type HTMLConverterFeatureProps, } from './features/converters/html/index.js' +export { DebugJsxConverterFeature } from './features/debug/jsxConverter/server/index.js' export { TestRecorderFeature } from './features/debug/testRecorder/server/index.js' export { TreeViewFeature } from './features/debug/treeView/server/index.js' export { EXPERIMENTAL_TableFeature } from './features/experimental_table/server/index.js'